|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; g! C8 c$ g6 E! ]" o0 n
main文件:6 x7 b' X1 E# t$ h
interrupt void interrupt4(void) ' f L- k3 o' Q& @' B; X' [
{
2 o8 o& M2 m3 Q" P0 X Uint32 sample;- e2 b) q1 c' {& D
, E% L% O* }: S# b
sample = input_sample(); // read L + R samples from ADC
6 Q# Y6 |5 o e, C3 U4 a output_sample(sample); // write L + R samples to DAC , a- f7 A) u% ]% s
return;! v+ ]$ B5 Z' e u* L2 t
}+ P3 I% B0 }" `
: Z% j; ]. f2 q2 lint main( void )
0 m/ R( t8 c8 t( {# b{ w6 \( }# t1 j2 U+ @4 o- D# W( o: L
- t2 W: E5 M6 Y1 j: R7 h /* Initialize BSL */
5 {+ W4 x0 [8 t EVMC6747_init( );
! o& q P& Z: x2 E' U* c /* Call evmc6747_intr function */3 g5 e2 s1 [) R
aic3106_init( );* j# `) l8 _, j& K$ {
while(1);
7 C5 e5 W K( i; `8 _' X}
7 S" H! x- c; ~4 A+ ?8 ?- p( P; P, b- Y& M: e% s( v. ?
+ a _" Z4 Q, J& W& L7 P: |3 aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) l5 `5 K% r9 B% j; q2 g. q( ]
/* Initialize MCASP1 */' x: Q0 H8 m ]4 _1 g7 f9 z: o4 Q
mcasp = &MCASP_MODULE_1;
/ l- U4 ~ K3 e% Y mcasp->regs->GBLCTL = 0; // Reset5 X1 P! K1 }6 b- N
mcasp->regs->RGBLCTL = 0; // Reset RX
- f! ~, v) n' T' ^6 J3 L6 J- g mcasp->regs->XGBLCTL = 0; // Reset TX4 x+ k) D& v. D/ u# }
mcasp->regs->PWRDEMU = 1; // Free-running8 W5 e y5 J" O( w; x! U) K5 J
// configure McASP0 receive registers
* ?) v( J7 j) d' M mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 `# x! k% Q& z5 d5 q. m. S mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 q1 j6 r: {6 Q0 C% v mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( Q; P% q' {% W1 U% ^, y
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# y# I, F8 s$ q4 j8 @6 l4 T: O
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 E- A- S# S/ r7 F/ [. Z mcasp->regs->RTDM = 0x00000003; // Slots 0,12 W/ G3 _; L. O1 z" s( A4 i' `
mcasp->regs->RINTCTL = 0x00000000; // Not used
0 Y% H! z1 w8 P5 y* X& m2 L mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 K! _! z0 i% f0 ]
! v- s$ Y" ]9 L, \; s mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& S$ U: O" n+ z, O5 r& ^ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 E7 k/ W; ?, Z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ Z+ H' R9 ~4 p) Z9 _
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 ^! K/ i+ b+ b) n! ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- ~- I# u# x- r! j. R. o
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ b" O2 o' @! e! s) k- e- U5 o/ I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. J3 t* h5 l0 j; L; t" W* H
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 |8 Y3 q; x3 V& w; S
( C+ r- C7 N9 d6 w; c; {/ {
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( H4 c% U1 w0 x8 w, c( Q1 U4 C( ? mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# P, R t- \2 ]8 g; M9 N _
mcasp->regs->PFUNC = 0; // All MCASPs0 {+ X2 j- K" T4 n
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ W/ Y8 Q: L3 e- P) D2 S/ j% L# T( ^ Q t' F, g, \" B
mcasp->regs->DITCTL = 0x00000000; // Not used3 F( {1 @: K4 n: W8 L
mcasp->regs->DLBCTL = 0x00000000; // Not used
" N, R: Q, r; [0 g/ k2 I mcasp->regs->AMUTE = 0x00000000; // Not used
3 r# V2 l& M5 y; i- G$ {1 S! g
4 a2 b4 p/ W Y- Q1 t/ T/* Starting sections of the McASP*/5 `, _9 e( M5 m2 h8 B8 S: Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 i( {2 a2 T( I( j' q0 y- d* } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 C6 d$ }7 F7 f2 a3 ` T
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + R- D0 U2 W% S, O7 \- n# x& O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 X+ k' q& m7 {, b, X6 W! g
/ v- F/ m8 A5 {- @& C: C6 v# } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , G) ^$ \5 q8 c" C; _- s& C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 |, V2 F. n2 o& i1 H mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ @% B! j$ T( b M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' h4 M- g' V7 _ G/ m e
! [" F/ s# n) Z" N' V" Q mcasp->regs->XSTAT = 0x0000ffff; ( ^" t/ v$ u0 o) ^) {% r
mcasp->regs->RSTAT = 0x0000ffff; 4 }' L# \- F' n' T0 F% W4 {% b F
w' u8 B- h/ R* q }% d( e
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) V3 T& t( q+ ~2 C, r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; |8 ?, T2 ~; x) A6 Z2 q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ D$ R6 w( _+ H& c9 C- i: U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% v3 K+ U7 b- Q1 h- l' ^3 \4 q8 b* u' v: M
/* Write a 0, so that no underrun occurs after releasing the state machine */
4 i$ p5 T% Y- o4 k7 \3 v mcasp->regs->XBUF5 = 0;
: U4 J! ?3 K, K mcasp->regs->RBUF0 = 0;# F! t- p5 D8 H# _# M* m' H
6 O) b; x- B9 d s6 _& A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : U e& \$ t2 q! ]9 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 D" t |, p2 q- B9 Z1 q q5 }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ Y, t* H1 T" q e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* ?3 ~- V6 n( ~4 B
" A$ k0 e# J' v e8 m, ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* M, v" J! w& Z! k, ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& r9 O9 j& T. ^ ]4 B# D" J mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 \. h& K" }! K: q3 w! Y5 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! O' M) M) z: ? `: b: ]# O
$ \/ z7 j9 s4 b
CSR = 0x0000;9 k7 x$ W8 R# F; ^( ~
INTC_INTMUX1 = 0x3d;
1 a* M% B1 `: c6 X+ c6 R# M; L ISTP = (unsigned int)vectors;/ f! [, p w( v p/ k
ICR = 0xFFF0; 2 \$ S1 u$ H+ T `' Y1 V2 P
IER |= 0x12;
' Z8 I. L% F8 I% i! G5 B CSR |= 0x01; 6 `8 C7 v5 N8 R' E% H6 ?& U. S
3 t8 T+ ^! c" v5 Q/ ^
3 h0 r i' K7 n' V4 n9 C+ a; H F! R4 s7 w8 x, J# p
还有就是两个输入输出函数:
& f7 F5 E0 k/ k; k2 L k. Cvoid output_sample(Int32 out_data)" R" h' L# ?3 |, p% w4 N
{( D7 H9 Z0 R+ @' G
AIC31_data.uint = out_data;
. a3 C c" L1 C+ G MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ p3 j4 k# M% M0 g* o}- b0 I# e# j8 K
. A) v6 Z- K; O( b) tInt32 input_sample(void)6 D1 ^& S4 f6 j+ f% r
{ ' C; w- T$ h% l3 w) M& D
AIC31_data.uint = MCASP1_RBUF0_32BIT;
) q4 R6 V- v: Z' w; E return (AIC31_data.uint);
9 k( M u. o- o3 R9 ^- }}6 j8 c# i0 |+ i' p) T( z4 ^
`. \8 `+ v& p: \+ z& |9 y8 Y |
|