|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% H7 K! ]9 I3 |9 `% A- R& h9 n. c7 X
main文件:: H7 o, v) I& Q! B
interrupt void interrupt4(void)
d( P# ^$ H. O+ B9 o# N% g2 S N1 r{' \& e1 d( H5 @ X* u- m$ y
Uint32 sample;1 x& @- C0 g6 `7 L" _
4 j! ^8 `! A0 z sample = input_sample(); // read L + R samples from ADC
+ H9 ? r1 V/ C1 g3 b) q/ u+ E output_sample(sample); // write L + R samples to DAC
8 l2 [) X( O8 }9 G return;
& q: J; o% ?4 { A( z}
6 m( H& d+ n/ b |' C9 V; j
: A9 a. E z k' Uint main( void )
( C' L4 y5 _* l% ?* r{
9 k) F# i8 b% Q" O' e
4 t5 D* @5 B" p& o# _1 D7 t /* Initialize BSL */
. q2 I2 _( a3 q% o1 h EVMC6747_init( );
* A! k f' c: S6 }8 b /* Call evmc6747_intr function */
2 k6 e, q* K0 Z& y aic3106_init( );
% Z% y& a9 s4 X: ^1 o while(1);; D! N) J/ ~; Y/ x8 A9 \: l
}, d/ U! E* R5 [8 [* c/ }$ g
+ E" _/ L& |" K$ l
8 }8 Q/ b% ^2 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 ?+ J# b# d4 j7 B. a/* Initialize MCASP1 */
8 [' F( g* V8 [$ y! [5 ~ mcasp = &MCASP_MODULE_1;
0 r/ k6 P( \- L9 _% ^ p; w mcasp->regs->GBLCTL = 0; // Reset
0 D5 w' z. i( a0 E( D. | mcasp->regs->RGBLCTL = 0; // Reset RX3 R% }' N! E4 X$ B& M( ]
mcasp->regs->XGBLCTL = 0; // Reset TX
5 B6 i9 V+ z' ^( S mcasp->regs->PWRDEMU = 1; // Free-running
8 q( B" b4 F' ?$ |- g // configure McASP0 receive registers
2 K" \8 ~2 V, n$ r+ M4 y9 O% U mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; @6 H$ k5 t# D$ p+ D: ]6 R mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' e0 L; Q- l+ q. _! W
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( F6 V# k9 R- N5 U2 s$ v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- F _' {, M# Z1 p' {
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); l8 w# i8 D& n4 O
mcasp->regs->RTDM = 0x00000003; // Slots 0,1" s% j6 f" |; }. B6 V
mcasp->regs->RINTCTL = 0x00000000; // Not used
: D0 a5 W9 V( [7 v, r3 C3 e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 U1 x/ G- O5 E9 E" _
* U s8 F/ x8 x4 `6 T( ~3 G mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ _4 L/ [/ L0 r" z" |* d4 l, N
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 _1 ?6 n8 j; g7 b
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' \# C; G8 j: C" p& [2 h4 A
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" F5 H* e1 A! M M6 K% [7 J mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ ]8 E# L+ d3 T( m" m
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ P$ W8 }/ a6 ]3 m) ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit% u6 Y7 C! p: W
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& [3 Z6 r9 t2 o; M0 Y! k
* m% G; V/ J1 W2 R8 S9 T; u
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: E+ G3 |' [% D3 Q- {: n
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 @ n& e2 F( U- @- T% |2 j mcasp->regs->PFUNC = 0; // All MCASPs i; h% ] z5 {4 a7 |6 t6 l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; b; H8 ]) W# S$ K B
* a+ F4 z1 d# S) ]" ]
mcasp->regs->DITCTL = 0x00000000; // Not used
6 H" J( l1 ^' f7 f% d/ J( ` mcasp->regs->DLBCTL = 0x00000000; // Not used
8 Q* \. H" }" ]8 P mcasp->regs->AMUTE = 0x00000000; // Not used
9 r/ I+ x7 G7 ^' V3 A' A
9 c6 `/ D9 @# h( E+ u! E: R* Y, W/* Starting sections of the McASP*/
5 E: X4 G5 s5 j9 }6 E mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ {5 K) e4 j/ s' E" X7 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# V) j6 t; ^) A4 k mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- P2 g6 s+ H( |$ C" _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 V5 l7 I9 V# j$ w1 G/ V
) p) `1 W% e2 w7 r8 A( J mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% t1 l$ z- I; i1 S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( b6 c7 m+ p9 K8 b% a! B mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 k& }5 W" h; a5 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! l. i. C) ?, F5 ^; B7 ]1 T9 r5 ~
* d: v6 A1 ~9 G mcasp->regs->XSTAT = 0x0000ffff;
4 X- ~3 d% r' e& E& h( R6 C2 W5 H mcasp->regs->RSTAT = 0x0000ffff;
: n2 Z& X- |7 P2 T/ ~' p' M# r- ]; B( ?; e2 l5 O. D, v3 Q: `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( Q6 m6 ^4 t1 D; Y3 {& m: \1 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ K6 D+ B: ^: |/ o% p2 Z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 d8 V5 V+ W# S% A" W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
x& }; V+ F, X9 u2 ]# E, Z; C) B) x9 I, B/ W2 I# f
/* Write a 0, so that no underrun occurs after releasing the state machine */ p1 T+ B+ w! ]2 W& ]5 _. Q
mcasp->regs->XBUF5 = 0;* w( p, S* y' _) V( m7 t9 S, _$ ~
mcasp->regs->RBUF0 = 0;* u' Q( `; i/ ~
) E' G h" e, T' h8 U8 U+ V
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & \- c) w8 u0 Q. ~. l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' ]" J2 H. J5 l5 H9 E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g# m0 E/ a# {$ n& G7 v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% c% @2 A4 |- J1 y
7 y& J" ?& ]' G( ]( X/ t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ v# P, M4 `" [/ ~) y( p j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. n; }1 a0 A' ?2 ^ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # [$ c, C% m5 b7 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ H9 {. [1 j8 b
0 f5 D/ E6 B6 w: ?& \6 N! E) m
CSR = 0x0000;
/ r2 d! T! c# E m5 j INTC_INTMUX1 = 0x3d;0 g) i4 u2 E: T5 k0 Y: j, O. r: c
ISTP = (unsigned int)vectors;$ [+ {) A" s# X* {5 @( l5 R! r
ICR = 0xFFF0;
3 J7 w/ s% I6 Y$ G" [2 l IER |= 0x12;
: m: [/ V9 N& m$ G5 ^% c: U( w CSR |= 0x01; # s* a8 l0 _3 U9 L
) E2 G0 y( U" i; @; q. X
# V/ B* Y0 f* X6 v
* n/ t8 ` ]" r4 z% U* g. A还有就是两个输入输出函数:
* m a% g Y! a P: A& bvoid output_sample(Int32 out_data)
8 k2 E3 k4 J" L{, a) k# E7 _, J! }/ ]: v( f
AIC31_data.uint = out_data; 8 g p0 K% [! @ D f
MCASP1_XBUF5_32BIT = AIC31_data.uint;
! Q: x, f" ]3 g% r; ^}
5 ? o1 |/ O ~5 X3 Y! Y* x
( b' z' G( m; B2 pInt32 input_sample(void)5 n+ ^1 S/ B. ~! b" M1 ~( H/ ~
{ & ]- F9 ]( M" d i: v3 k
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% x5 }+ o4 p9 k, G, s return (AIC31_data.uint);
0 |$ _8 ^& Q4 R+ J}8 F, |4 q+ Y! Y) M6 _$ C- c3 @
; B/ r# ^8 x; Y& s! R q7 Y+ G
|
|