|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ Q5 g& l& O( Y: g4 {
main文件:
; [! S. D# [( S- T7 D2 T+ ~' Iinterrupt void interrupt4(void)
- D5 c6 O0 R; ?. v; S( F{7 a* K9 @6 j. s9 D1 l
Uint32 sample;, n+ h: D" E8 S5 V8 f
G( r0 j. n' _7 p+ y1 d4 P sample = input_sample(); // read L + R samples from ADC
, C! B2 f( g8 O8 c L7 u9 {0 o output_sample(sample); // write L + R samples to DAC
) K3 A+ `! m$ k" N) y9 {$ Y return;6 n O8 i* [& j3 [- f) M; ^0 L6 J
}
( b3 a- V; w J2 A1 C+ f( v
, C) `! X4 e% C5 }/ i" Qint main( void )5 d. A# K& A4 R/ v" H
{ m3 H/ Z9 X6 |, _3 v
1 Q; d, K0 u) S4 Y /* Initialize BSL */
1 b0 h/ g; }: S7 U" J1 O EVMC6747_init( );* z% _# |9 h8 P3 G1 C
/* Call evmc6747_intr function */9 y8 s: g5 R# Q, l$ r# F- f
aic3106_init( );" M! x- q, {) }, E
while(1);# C! {: A' G6 E+ m$ D" q4 @ E' n
}
+ h/ k N" Y- B( T: [8 a+ C" l6 w8 w: j( R
! I( D$ I4 ?- W* q6 L- e
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 `9 n5 ? l1 S! |/* Initialize MCASP1 */3 S; a X7 T2 Y) \& R
mcasp = &MCASP_MODULE_1;- e! d1 s% @% N. k- |
mcasp->regs->GBLCTL = 0; // Reset
' e5 k' u2 m7 ?7 o( a- @# c) a mcasp->regs->RGBLCTL = 0; // Reset RX
) K5 I2 m$ e7 c, Z, D9 c mcasp->regs->XGBLCTL = 0; // Reset TX# S7 c+ _ [! B8 _# m4 j
mcasp->regs->PWRDEMU = 1; // Free-running
9 q2 M4 v7 X4 J ?; q& E8 K8 g! J // configure McASP0 receive registers; Y! D k4 B k( q1 h* D+ B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 g1 C( Q( d( Z% e+ y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 `- b9 Q4 w4 G) w- W h( X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 j. c: p& w% E5 V6 i+ O: Z3 N
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 y, [9 i' C; [/ A- R! J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
& P5 h: t% O& y& }$ P mcasp->regs->RTDM = 0x00000003; // Slots 0,15 d2 b' R% @4 I
mcasp->regs->RINTCTL = 0x00000000; // Not used! d- W; u0 G' q) Z% b' w/ G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! d! @# I( X! v# e$ N
/ J2 @2 E8 Q! x7 n/ Q( D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 ?- b' b% L# P3 i( V6 J( q! G6 d/ ~
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 m3 H* h) T, j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& Q, r# e F7 k7 p$ V, u/ ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! \' M* D% L* I/ \ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 C2 D( J1 B+ I8 D2 u4 W mcasp->regs->XTDM = 0x00000003; // Slots 0,19 Q& U. t* `, E2 q* K. L0 L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit K G" p% g; I: U) H2 }* m5 u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% S+ ?8 e' m7 H7 {5 N2 p* l6 ~; L; V" J* s
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 Y# b* p: |7 [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 A( c& v4 |( D$ d
mcasp->regs->PFUNC = 0; // All MCASPs
; B. S! q, k5 |' M4 t" h mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ \6 r. ]: j2 r- H( s, s) Z( I! `: X7 n
mcasp->regs->DITCTL = 0x00000000; // Not used. R9 {; O: ~. d0 p5 @( E, J# n Y
mcasp->regs->DLBCTL = 0x00000000; // Not used
% r9 i& o! ^: @ Z mcasp->regs->AMUTE = 0x00000000; // Not used
) F _( b Z: [7 q3 ~ k4 Q
2 V9 G* p# s- \# |* [1 |/* Starting sections of the McASP*/5 G1 i$ R8 y, p# c! {2 P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 E) X6 X2 u3 ^7 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. _8 V% l. A% B6 g% a! N6 _0 i* m; p8 Z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; d! d- W5 g" L/ R7 T6 c, Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ @% B6 \$ m- { w$ |: x$ l( ^8 T ]8 }3 k5 i" }4 d0 b
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, M0 W$ O( ]3 N: p! n; _9 {1 R ]: _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: n: ?& E5 O! A( ?5 C: ~7 T/ O1 I mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; z; }% @/ o/ @' z2 f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 ^+ b3 H4 X5 M7 [7 U9 m
# P0 O* A4 q0 ?' z* J
mcasp->regs->XSTAT = 0x0000ffff;
# j4 s7 W8 q/ _0 u0 L6 x9 G mcasp->regs->RSTAT = 0x0000ffff;
4 _2 _" G* P( l8 h3 u% K$ O: }5 t; _+ n L+ b2 @! f8 D- I2 u
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- C% ~* y1 M! Z% v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 ]* ~: ?, K( [$ w9 N
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 m8 Q; n8 l! ^5 Y5 v$ o6 C" [0 p5 v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& u, W! K1 m1 f. O, i$ Y
5 h& h1 ]8 j- h5 R6 D$ u; Z /* Write a 0, so that no underrun occurs after releasing the state machine */
: M, |* d! r3 r: C mcasp->regs->XBUF5 = 0;
. ^5 ~* i1 Z7 s* d6 C: T+ x' U mcasp->regs->RBUF0 = 0;9 d# \9 C4 g; h7 @
; ]- L9 B- E+ c* Q* ]; u mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 F, A4 ?! R( T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 r' `) B# ~0 i) A( @7 g; M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & m2 I+ n/ f* d2 i* _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); B, l7 I/ J3 h
1 ]4 k# G0 ? U0 R0 m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + J+ x8 Z6 f8 Q5 Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); u) f* f% [+ T$ O, I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 p' m6 h1 W8 m% ^& q4 v( m3 X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! P" `3 a% A) ?
/ Z9 K2 ]/ ^" @
CSR = 0x0000;
8 s3 [& p0 i. c INTC_INTMUX1 = 0x3d;8 V! m8 W, P: N5 Z' N# B
ISTP = (unsigned int)vectors;
3 _7 }( S9 S3 b2 [2 L4 x/ s8 c ICR = 0xFFF0;
7 A" c' B* g- ^4 H. N4 Y IER |= 0x12;
7 [; ], h' {- Q' k. I8 H CSR |= 0x01;
( Q# G& n& Y% q5 M8 b) |: M! y i0 \* E
) u# W5 X8 B! L
1 i1 o' g6 [$ Z$ r! X- o% \, c. H
还有就是两个输入输出函数:
. i9 a6 j. C* dvoid output_sample(Int32 out_data)
0 `) ~& ?$ H- `5 E! r6 Q{: g8 B& n7 J2 F ~& m; R
AIC31_data.uint = out_data;
) u, T- u2 V4 m" @! o MCASP1_XBUF5_32BIT = AIC31_data.uint;
: J$ r0 Y9 @ _& {}
1 h, [! }8 `& T
& W2 n! \$ u) h6 RInt32 input_sample(void)
$ g6 X1 v5 q4 O" u( K* r* \{ ' Z) l* l v" S( g
AIC31_data.uint = MCASP1_RBUF0_32BIT;, E( J) v5 A; h& _0 ?
return (AIC31_data.uint);% j# N: E0 h$ Z+ h o& i' U# h8 V
}3 `6 X. p* F; h
- s% I0 n4 F# o& a9 N0 E8 Q M* K
|
|