C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6487|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 k; q: x9 q# [% G: ]5 Imain文件:& h) f$ w0 V) c8 h' t
interrupt void interrupt4(void)  
. `3 \- N/ `. T; i: z8 I{
! B* e1 ?; G, D+ I, ~  Uint32 sample;
( q6 {1 G. Y" H2 R$ Y: P8 i
0 P$ l; U$ a0 H3 Z  sample = input_sample(); // read L + R samples from ADC
3 Q8 m* b. g3 `% l0 r9 U) D- @6 J4 C  output_sample(sample);   // write L + R samples to DAC # V% W) k$ A9 \
  return;
- S4 N  H8 b# _+ I' f% G4 n}- ?2 ^' \* j  N$ u

3 q. E0 Z' U4 }, R' P# `' s  P  cint main( void )! o6 n! G: |* @" O( u
{3 s" m# D7 w' _/ f8 Q" W# i, k

7 [$ `' y4 I* Y3 X5 Z    /* Initialize BSL */  P' u% d& z5 V+ g  f( ?
    EVMC6747_init( );$ H" x( a% u7 A# u2 W! n
        /* Call evmc6747_intr function */3 `( `& k. `" V7 a0 ^
    aic3106_init( );
. a+ `, ^  h) j9 Y( T* w9 c        while(1);4 v; u9 Q4 l% w
}- @7 V9 [7 r: S, J- E- s3 K9 c( o

( b  `: \1 {; U+ H1 C3 \5 n* w- f* B, F# D# V; z) y, r. ^
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( I2 S) k- X" E2 w) o( S7 t" `
/* Initialize MCASP1 */; P& @3 h' t6 C) e
    mcasp = &MCASP_MODULE_1;4 T. |. V0 H" {5 A
    mcasp->regs->GBLCTL  = 0;       // Reset
) P, S% E8 l9 @/ i; z    mcasp->regs->RGBLCTL = 0;       // Reset RX
: A; d) o5 F. W4 W7 x( O1 v$ d% B# |- ?) c    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 v( s* Z5 }3 r: G6 }1 m( \" h    mcasp->regs->PWRDEMU = 1;       // Free-running
' N# ~6 e$ q/ K0 o3 c: O  U   // configure McASP0 receive registers; N4 ^9 \" ?% s
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 ?* p- J. M" `% F$ t, ]% Q0 m    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& ~' K  W# Z2 L! L1 f: C
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' P+ X) P$ }1 n2 g3 M1 }
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# s8 N/ Q* f' N3 _, Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" F" R7 x# r3 v0 d' r0 p* y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# K# |1 ~# l+ k" |9 w4 v    mcasp->regs->RINTCTL    = 0x00000000; // Not used( R2 i% q& E. V3 W: ~3 F( Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, b5 C5 V8 T  Y2 y) C) v- N. Z1 Q' n% @* z8 d# V
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. j/ l; ^/ l! |+ w2 k/ [8 v" `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* a3 _2 G; `$ O1 h+ J2 V5 c    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& \) V: C0 k0 ~1 x, e4 i6 V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ |, g* ~, S- Q& s- {9 f) _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK/ X1 m' k; e9 x& r! C7 Y4 K1 f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 l0 \) K) q& h3 U, C' C( G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, g$ }2 A2 P: M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 F4 B# J, Q# M% Y/ r+ O

2 y  O9 ~5 t' N. k, f- K    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 m" v, K: L# K; ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' s2 w7 ^+ @4 f& m  g    mcasp->regs->PFUNC      = 0;          // All MCASPs
* y+ O& W, J4 x1 L$ ]- s$ q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- M: Z3 f( _0 B" [

" M' n: l. z% H3 X" A: ~- g    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 W# C2 g+ b8 x; F- _& b8 n    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 ~  h: P5 E4 m! u+ ~    mcasp->regs->AMUTE      = 0x00000000; // Not used! u# x3 K% t, p' c% e6 Z* n
$ E. d* ?/ b' D5 O+ I8 g# [
/* Starting sections of the McASP*/
( a( n8 w5 W# V% v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # w8 J. G( o" P* A) F/ L( n" T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 X8 q* R- X" O4 T4 c, H5 G# ?5 b    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 _' j7 a$ T& J  a3 F4 O( s  m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  Z% U! t- l" w2 ^- M, E( g8 B. i& p2 h" ?" K( l- H
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 D! T6 b  _2 n2 j/ F; A! ~/ s, I" L  S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( r+ l# C: I  i* Q0 {+ F  i    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 Q3 q2 B" }, w* w0 b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 o" F5 {4 M0 i: I2 {4 o8 _& F' H, v) c$ i6 r
    mcasp->regs->XSTAT = 0x0000ffff; 2 @4 y, s3 ~  U( V, ]3 u
    mcasp->regs->RSTAT = 0x0000ffff;
. R$ `7 E8 z. R' Z1 K8 G
8 Y9 T' ~. O/ Y: g    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* R; o/ n( M( n3 E4 P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 x3 x& Z3 {) ?7 i+ l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# c* Q9 j$ }, q% b  t3 l5 W/ x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) h) ?2 b7 t4 E
0 Q7 @: r$ v) ~% a5 R! U    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 M9 Z% s4 L8 T- V$ H7 g) c    mcasp->regs->XBUF5 = 0;: ~; E# l. ~  G
    mcasp->regs->RBUF0 = 0;) V) d5 k' J4 f4 k6 ~0 o
$ @/ o' b# B, f/ h. `3 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 d6 m! `& |- K$ M9 T& J; _, J8 f& s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* w; `6 G1 Q" t4 N- I( V
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! U! c3 g7 d/ R. z+ m4 U) q! Y# A4 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- G0 ?" M0 Q/ k8 w( |5 g

, }1 Z; U/ B) P2 S) |    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) S3 ^6 P5 Z% F4 {1 v" d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: K/ ]  {4 ]/ N6 P
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 j. b! I0 f0 c& ^. Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- b) c/ a- _0 L8 k$ c  N$ C$ ~+ n* m2 ^& g" K) d5 c4 `
    CSR = 0x0000;; C4 m! m) g$ ^1 U
    INTC_INTMUX1 = 0x3d;' E; N$ }2 k  P7 v( C% j
    ISTP = (unsigned int)vectors;
$ ]) Y5 ^$ N. F5 O    ICR = 0xFFF0;  
3 S6 Q4 ?) v& z* L9 h7 L5 D    IER |= 0x12;  
0 \# y' l+ S5 F9 q5 g3 P    CSR |= 0x01;  
! \- h* O5 b* X1 b  c+ _2 A
# s1 _7 @4 I7 x# C! G4 Y* S8 h% W) u6 n; T8 t# Q2 j( j
7 w9 L0 m8 n/ {# g1 x9 b
还有就是两个输入输出函数:
$ _( m; t) _' dvoid output_sample(Int32 out_data)  f9 Z/ E( `2 q4 b( T4 \8 G7 I
{
8 T% V! U# H  k& t8 w% D  AIC31_data.uint = out_data;  
2 m* h* r5 s+ }( p6 z& D) M  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 R9 C4 v" {( {6 Q5 @0 s}" S# `/ ], D/ r6 P8 C' y; B! U
$ n! o2 p8 P1 R6 S% ~
Int32 input_sample(void)4 ^9 z2 e! ?4 z9 w
{  
9 q5 ~' F) l1 h& f% ]7 h  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 S' F6 E% J6 `5 G% |( L
  return (AIC31_data.uint);
4 V. v+ k" R: r1 h- W0 s+ J}/ G( X  A1 U" m" G% j; N

7 ^% V- ]" E; D: ~0 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-7 04:37 , Processed in 0.042157 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表