|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, H0 a" @2 m. p# Y7 ?, }main文件:6 t1 Q9 }, }7 j% n
interrupt void interrupt4(void)
j* y- [( y2 G{* Q4 T8 L" i: L" {
Uint32 sample;
2 i0 A& E6 d5 H4 }4 |2 |: b
i" p! i1 K7 t: Q! z sample = input_sample(); // read L + R samples from ADC |- K j$ X) X0 {! p" D
output_sample(sample); // write L + R samples to DAC . z4 B9 m4 X$ ^
return;
# G! c# i, z6 R! h- H2 ]/ Z}
6 K4 ]+ R$ f% i3 C# J! W# Y6 e- B4 d
int main( void )
! J1 W3 \8 P( i: M- s4 @$ q; X! w{1 A* Y5 v; e! Z: X) r" T
0 O% m0 T& f( x: p4 p% M* s3 U. c4 C
/* Initialize BSL */
" M- w% K7 O+ m5 g! p EVMC6747_init( );8 l; N& A5 N; {/ B' I/ R4 e
/* Call evmc6747_intr function */
0 t4 d# V8 `2 c/ w aic3106_init( );4 W$ r8 s2 u: [4 i3 H6 A
while(1);0 m, }& Y ~. p$ T( {8 V
}; ]/ |. g+ I( p* B8 ]
) ]( t' m3 c4 t* L# v6 k2 U/ s# J
3 p0 H! O+ D0 K+ z7 l2 {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 a; ~& B2 U; f/* Initialize MCASP1 */3 V* d" ]5 r/ V- _9 L2 j8 o8 k
mcasp = &MCASP_MODULE_1;
! U+ y2 |0 e1 i7 j mcasp->regs->GBLCTL = 0; // Reset
8 ?( O9 M! P3 `) D mcasp->regs->RGBLCTL = 0; // Reset RX
- X* v+ p- v. P; D& K& p/ S/ u; O4 i mcasp->regs->XGBLCTL = 0; // Reset TX
3 o$ U: t' \, I |& ]1 g mcasp->regs->PWRDEMU = 1; // Free-running
5 G% I. n- `! ]- ?5 C" L/ Z // configure McASP0 receive registers% T5 @. p( e4 t) m" v/ D1 J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( }3 Z/ ?8 L2 |; _3 @1 I
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 l- q, F4 x- l" g6 P, j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word; m9 J+ v; @" C1 e) R0 M
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) V2 Q( T$ k' B' C
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 Y* R& {. R2 H- F- T mcasp->regs->RTDM = 0x00000003; // Slots 0,1; Z b0 Z' B( n D) k: M5 G
mcasp->regs->RINTCTL = 0x00000000; // Not used) l% J8 `8 F) S- P9 j& G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* q- {" g8 }0 w* ~* d
& j+ p' V1 K' n9 l2 i1 l mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used9 X. [5 Z" ?' g; T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' i+ J" @; Z: ^0 g" Z) P' j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, Q9 C' u9 t7 [: P! f8 }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: t5 H# K$ o1 E, C6 J& Q4 n: z) T. ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
0 }+ \3 i, u) C) i$ H mcasp->regs->XTDM = 0x00000003; // Slots 0,12 N% N7 \$ `! C) Q
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
# p! P: Z+ Q0 P. B& K* o mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 h& |, j! I7 H! z
: s( Y2 y6 I! l X' G4 e mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
9 _5 A4 C' J4 B1 P2 k S0 j p mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: v- J" t4 v! y+ i4 ?* h mcasp->regs->PFUNC = 0; // All MCASPs+ }0 }: L" b$ H$ v# v7 B% z6 t
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 ?6 V7 t+ x4 i0 P
( O4 c0 H* @( N4 i mcasp->regs->DITCTL = 0x00000000; // Not used) a/ o' u5 O9 J: l. m
mcasp->regs->DLBCTL = 0x00000000; // Not used0 h, U5 [; f0 {& R( ]& q' w) a( ^
mcasp->regs->AMUTE = 0x00000000; // Not used: h" I' w/ k4 M$ ~
- m0 W% F: n0 w1 A f- ?0 h5 M9 ]
/* Starting sections of the McASP*/
, e: g' C) C: l4 j mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 |7 W( n* n* ^6 n# a( R0 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 i8 O* u7 t1 S/ o( g0 b, p
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( B7 a' y5 f7 V% R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( \# z7 f4 E! ?; u6 T
- w5 M# F, D; y& U l8 p% i mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ x g) h# [2 n- l7 } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 W6 u% N" m2 l# a( d8 D
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! b& a0 g9 A/ s! o: S3 ?1 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( D% j+ `7 f$ i$ q5 M6 d/ H4 f' f' s8 d+ `% [/ z9 K' Z% [
mcasp->regs->XSTAT = 0x0000ffff;
& e# B! t c5 J mcasp->regs->RSTAT = 0x0000ffff; . ?9 `1 w" r8 \; f1 `/ [
* `3 h2 o9 `9 w8 e: J z. h% ]/ |( h mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) A' Z$ H7 D$ M8 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" A# _5 J' a W mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 Z0 b7 A) M3 u- {6 |0 c8 P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- l* L m% K9 p1 M" e! i0 F- `) w" F
3 f- o% |8 s! ^! L /* Write a 0, so that no underrun occurs after releasing the state machine */
5 M1 I! G, r1 S% e9 \4 X: z mcasp->regs->XBUF5 = 0;# q+ n3 \; [! O8 L$ e7 a9 c& _
mcasp->regs->RBUF0 = 0;
) W! K2 L# }& [: h& K6 v1 Z9 g/ i( J, U+ ~. {- W# U
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + j: s9 J/ u7 E( D- r) ]: S3 C' m, a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ m8 w# @% G5 L mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
y3 O! U" _- ~6 s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 N) X) _- S( u2 e3 r3 @8 n: _, P9 o3 M9 A# d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* B8 ^0 C0 X' S, K# | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, c5 i4 U4 d% j: o1 D# w) K& l% [
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 @' |% i( J# B8 T- s' u' t' M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! Q" \: \- ?7 R: A
* a3 ?8 F! c. C% ] CSR = 0x0000;
3 }! l- ~% Q- \3 f L. q1 {4 k INTC_INTMUX1 = 0x3d;
5 X* o7 W2 E% b2 p. s( @ ISTP = (unsigned int)vectors;* }9 ?: k% |& \7 {, l
ICR = 0xFFF0; 3 U8 a2 G1 ~% q i6 G
IER |= 0x12;
4 [ n" F3 j/ W3 v7 |5 [" p CSR |= 0x01; ! k, N/ j3 j- f' K7 \+ O( l
9 }" T3 A1 p: U. X( P* L1 t5 D% I
$ O3 U. Q2 P1 F9 h; x2 Q
还有就是两个输入输出函数:
! @9 v+ t$ O7 fvoid output_sample(Int32 out_data)+ G7 x7 }( |1 O! F7 P
{ ]/ ?$ a0 o8 c8 |! E
AIC31_data.uint = out_data;
1 x1 x* j$ `' Z% b8 i MCASP1_XBUF5_32BIT = AIC31_data.uint;1 B" |7 c2 B( f, Q! B- z/ X) Y( _
}
1 ?7 A* b) _6 f/ q2 J$ z4 S" H7 t+ H
2 ]; t9 ?6 G/ Z1 V7 \: f: T' ~Int32 input_sample(void)# i# e# W4 ?) f
{
; X% l5 C$ k6 y8 O AIC31_data.uint = MCASP1_RBUF0_32BIT;' [/ M, t0 p! n* l3 \1 z) G* F3 B
return (AIC31_data.uint);
+ N( g1 D# g& @) ^) r1 P" n. t3 V}. t3 ]: l0 i" R/ z, h& Q
3 a- H( V) \5 d |
|