|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 r1 h7 h+ r9 h4 x$ Q3 S& n9 B/ j+ J# Vmain文件:" {7 V& x6 L3 A3 d( i; i
interrupt void interrupt4(void)
; u5 d7 m& O& q2 H @# k' ?' c{
o8 S8 D G- j7 G5 m7 W Uint32 sample;
7 B- P) V1 I" r y2 g( U8 |7 N# y6 D- H7 X. J2 u3 i: Z
sample = input_sample(); // read L + R samples from ADC
0 E5 X g/ u/ S8 q6 V/ i output_sample(sample); // write L + R samples to DAC ' n7 T, |9 K2 ~& ~, Q
return;( B. C# C' Y: f+ _! e8 S( V& m& r
}
7 P7 q" X- W' z; \. E* h! J& P& h
# I1 S) w2 f5 V r2 Oint main( void )
! r% p9 O/ o. x/ C H+ V& [{
5 _+ t; l; a# O0 z! F, l6 M; ^9 Y2 c1 U6 S, H
/* Initialize BSL */5 P9 D6 Z" C2 k2 u0 T
EVMC6747_init( );
F( J* b5 z2 d- O; ?& K) \% N /* Call evmc6747_intr function */5 X1 O/ a& u1 g5 |# P3 p1 O
aic3106_init( );) r2 r- s4 _; Q$ K, h
while(1);& O1 N# Y; K5 z1 ?( D# Y
}
; @' ^& x+ N* c( U6 b/ i J! m
& a0 _( i N, s, M* o* c
! W- M* l% g4 q3 G& a) [$ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" N& O3 P) {' _4 k
/* Initialize MCASP1 */9 O, Z4 C" G# _: k" ^& i
mcasp = &MCASP_MODULE_1;
# T! ~6 G1 Y* k1 u mcasp->regs->GBLCTL = 0; // Reset
1 a% g$ I4 {1 F mcasp->regs->RGBLCTL = 0; // Reset RX
( }9 f, E8 Y1 C7 @ mcasp->regs->XGBLCTL = 0; // Reset TX
& i, m8 ?4 v3 n' I0 W mcasp->regs->PWRDEMU = 1; // Free-running
, K* g- g2 f7 C: y, p // configure McASP0 receive registers
3 D Q( }& |5 o- Q5 o r: t7 `% J$ q mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) X5 R' {- G5 O% o6 }) v7 t& R$ i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus _! s! D3 q0 r0 W5 D
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 v/ d9 K4 q0 q2 W% H" W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 x# w: N6 b* |6 \! M
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% v& W) z: i5 C# y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! Z2 k, w( F4 T9 \: Q5 a
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 g# T+ ~" y3 L. p# C+ K0 h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 c5 T1 i8 `/ a1 ?$ _7 ]' H5 c6 B
7 R7 ]& ], X0 \ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( ^6 B7 E$ O! G+ b* T) [; ` mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ W. n5 ^* P& S x- o/ G& g
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! ~5 S( [( D; ]: N+ ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 Y' L8 V; L# X- v, G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
; c& }! n9 @' O2 K! t2 j# a mcasp->regs->XTDM = 0x00000003; // Slots 0,1, @* ?- @" s% k7 j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ n! ]5 y4 X2 i( Y mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, k4 q6 I- u4 O: N2 J; E h" C* M- k1 |3 g8 ~
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: C* {+ J1 W7 @6 C% | mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 W/ m3 i0 O/ {1 C& E% t1 ?
mcasp->regs->PFUNC = 0; // All MCASPs
1 O3 D+ }. _+ N- L( L mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 o" ~0 }* t. e' M$ B0 d
9 r( `7 J! Z& P% D" v3 c5 h
mcasp->regs->DITCTL = 0x00000000; // Not used
) e4 u0 o- i1 G0 y) A mcasp->regs->DLBCTL = 0x00000000; // Not used
" N2 [7 Y3 v( t; D. C mcasp->regs->AMUTE = 0x00000000; // Not used7 O" c2 L( m. G
5 j! o6 k' Z; r( L0 G/ }
/* Starting sections of the McASP*/4 s- e9 O# K# T. U2 G0 s" Y
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: H) x" C$ V- s Q/ Q+ k4 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); - C1 i7 F, X2 X) I( q/ c$ k
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " x/ D) m& I# t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 ]9 l" }, a$ O% O
: z" K: H* j8 D( B! m8 k" e- y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ X+ `6 A" I" Q/ h: \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 d# y: T% X( O& O" t2 x mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 A: |* A# q: V3 g& H( U& O7 P6 s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; n5 E5 r# y. \" |& z( M( w8 i8 d7 b5 \3 A6 k" b* V- m
mcasp->regs->XSTAT = 0x0000ffff;
/ R" f7 j( [3 U1 [3 \; G* i& ?( z mcasp->regs->RSTAT = 0x0000ffff; 7 P8 H% _/ W7 [' y: w
& }' Z- E% P7 c7 N- ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( U( u* N( z! ^1 o2 i6 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ q8 y& z" a+ h+ S
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- D |/ j0 w: X4 v* j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 U' A: Y3 m- h: }% u4 _4 X; W
/* Write a 0, so that no underrun occurs after releasing the state machine */
* s$ r" m: v8 ~3 a2 {$ ?0 E8 e mcasp->regs->XBUF5 = 0;: v" X- x, f5 x4 B3 ?0 Z: K
mcasp->regs->RBUF0 = 0;6 Z* q* K7 z+ n" o
a9 g! ^% j# Z9 k2 M; U" p
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 E* {1 V+ E! J) M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 U9 P& f1 B7 g5 ]/ c; C! D$ ^
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ C- |$ V! m6 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 [/ t9 S7 L" ?( e+ {7 q/ r
6 F: v/ t* B9 G7 c3 [ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! ]- W& E7 y s* r/ {" A0 Z% \9 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 S+ t6 G: I7 p6 R# r mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! G. ]5 q- q3 y+ V4 s# c3 d& a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
P+ y1 |: M$ {4 q9 v6 J2 \$ k4 r/ n- z9 s
CSR = 0x0000;) q% E4 W" Z- D8 E
INTC_INTMUX1 = 0x3d;: z( Y2 {* [9 i) }; A/ ?# L6 w# K
ISTP = (unsigned int)vectors;
, h0 H0 ]8 K& f0 Z$ h: K g d ICR = 0xFFF0;
' `* k$ K% v+ d4 E! @ IER |= 0x12; # M9 S/ A+ ^5 p: Y) n' Z1 w6 l$ p& E
CSR |= 0x01; " L, [0 ~1 y: @0 U
3 w- o" x+ @: Z6 U
6 B# C8 T. w+ l9 ^
' d: A- J$ M$ o' J' _& w& y7 h还有就是两个输入输出函数:
( ~. j' h: W1 W) X9 H. Tvoid output_sample(Int32 out_data)
( M+ r# {/ X( e e& v" T" B{
* T9 B, U- w7 C+ @ AIC31_data.uint = out_data; 8 E, R4 E3 e. @ t4 n9 `% R: u
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 \! }, S3 W1 c% M4 f$ x6 d+ F
}
. }7 ^' x* F6 W u4 q: ^1 E; \" H6 G0 z! v9 a2 h0 D3 \
Int32 input_sample(void)
$ e4 K2 O$ d7 X) R3 ]{
6 J) T# T$ V H* } AIC31_data.uint = MCASP1_RBUF0_32BIT;) |) `1 W% ?4 r& K0 t! ^+ w9 \6 C
return (AIC31_data.uint);( b- G3 L+ [. T( i6 M
}
5 M% x9 Q t& A! d* A
6 ?3 j3 `9 V" Y4 ?9 P |
|