|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& V- W/ b+ D$ a! X+ Q
main文件:
2 E* l( a7 Y5 E8 t: t6 U( _interrupt void interrupt4(void) : Z+ O. K2 _" Q% H' u' `; N0 a
{
1 W& R: E% `- g1 _ Uint32 sample;! V+ o1 e! s9 ]
3 S3 P8 w' A9 I' ^/ @4 L, y7 G* I
sample = input_sample(); // read L + R samples from ADC
" B5 j- v; z7 l8 W$ s9 d8 ` output_sample(sample); // write L + R samples to DAC
( }6 ~1 Q6 X7 A3 d, V return;
0 m8 s/ P' G& E& N% t$ ~}2 O# e. l+ G" Z' t9 G# [5 A
, X2 {+ R' x# J. e* v8 C
int main( void )
% g) A, ^( P5 R0 E( O1 ?* n# p1 P{
+ A2 k( {7 x5 q" ^2 o) g
1 P4 g* r# D6 Z. m /* Initialize BSL */
* }, Z( h( d. z% }1 g; t- ~) L EVMC6747_init( );# l& h+ }& T) M) |1 `
/* Call evmc6747_intr function */
8 [# A8 c. u' [1 N. n# l aic3106_init( );' x4 e3 y& S$ O8 ?, ~1 R
while(1);
0 I* Y" x8 s' Z i& |; M}
1 E# ^$ t$ k4 @4 U" K# |
) s! U7 e }+ T& Y2 {" q: [: R0 n
3 R5 k7 C, H; Z; gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" H( \" f* m' k5 m7 r7 u6 X( v/* Initialize MCASP1 */
2 W8 u; X7 f, d" x mcasp = &MCASP_MODULE_1;
5 a0 F# V( P: I mcasp->regs->GBLCTL = 0; // Reset
3 T% b3 h' J0 d* ]0 \9 |' Y mcasp->regs->RGBLCTL = 0; // Reset RX
) ?+ ?0 p$ r3 O' L0 I mcasp->regs->XGBLCTL = 0; // Reset TX
w( o# V D; R mcasp->regs->PWRDEMU = 1; // Free-running
# p" R% q3 S6 t% r$ X // configure McASP0 receive registers1 P; u' k) [( R# D- J* A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- G$ P! B0 e( ]
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: O3 r' ?5 z; w% z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 m, ^" ], G7 a
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) C& d& S$ \$ y) y5 E. ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 y: V; |( b8 K. P mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* L7 e; L8 E6 T' M& Z/ u mcasp->regs->RINTCTL = 0x00000000; // Not used
5 P; S4 B% A( K" r: _) \: e2 n mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b: z7 i) t' r2 L r4 A7 ^3 J: T! u5 R. g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. B% p2 [% F* t mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 q- S4 l: W: g( w mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: e* o7 I4 p. j mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# T: u/ i8 j5 }! ~4 I% s mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
! u+ s$ I( Z; r9 x mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 v0 u4 Q. P" o2 D' X; Y7 Y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* y% O4 K5 i! |8 B! R. W1 f mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! R8 `8 e z$ o+ u/ |. P# `9 t# p8 d& D6 z1 N+ q3 ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 _( g7 g$ o7 k mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( W( L7 w% A2 e& E mcasp->regs->PFUNC = 0; // All MCASPs, l8 j& L( g3 k: `$ p+ @- ]. O
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 D( I+ H9 n% S6 c! f- C8 P5 V0 ^
mcasp->regs->DITCTL = 0x00000000; // Not used) g( F+ H% [8 y& N# \
mcasp->regs->DLBCTL = 0x00000000; // Not used
4 W! g b: v! `- n3 \, Z+ G mcasp->regs->AMUTE = 0x00000000; // Not used9 a- g8 K/ [# Y! Z
% h4 n' H' E2 R/ ]5 u: X
/* Starting sections of the McASP*/9 D) e. e+ ` w
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / m4 |# r# T6 b q* c) \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) Z6 l0 `9 g/ l2 W$ }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 I" j8 g+ ]0 }, i! E7 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, B+ C# h9 ?( d6 f
. }0 `# P6 e' _4 l/ M
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; L Z9 B! X2 a `& Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 c* K( ]0 S: \9 z
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 q8 Y8 b) y* V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) _/ C* K5 t [+ I; R7 |
9 P1 m1 O% P2 P; Z
mcasp->regs->XSTAT = 0x0000ffff; 4 V- c& ?' y p; V
mcasp->regs->RSTAT = 0x0000ffff; ' @& |% l$ G0 `' q: ]
6 q5 y* q7 n6 ^7 l" O, ~
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 g# X0 `8 _# J+ ?4 m" N; L, r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 S' R) u5 j% \1 X x mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % }3 A$ z# |* E0 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& }; @2 X( P# |3 f7 b
0 \8 t! S& c5 n. K! a /* Write a 0, so that no underrun occurs after releasing the state machine */8 Q7 @" I; [+ n! _3 t
mcasp->regs->XBUF5 = 0;3 [: T K+ h: Z) T H+ I
mcasp->regs->RBUF0 = 0;& K$ |9 m$ n. l3 Y4 z, W
3 S* ^, m) L3 j, B/ l) k$ F6 d
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 | ?9 r0 _7 f+ h, G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ n) E4 o1 l4 v4 n2 b& _8 V" O mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ |0 }3 T3 G, r9 }; ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 c. C2 H* J5 T! Y
6 x: x- s) ?, N4 R$ K mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & L$ T7 C! M. T0 a, z7 J$ K% R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& Q8 Y% d+ v! k2 P0 h/ A$ J8 C" w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 ^; q3 A9 t# t" ^) D' R. u l) E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* m' d1 }, }) D! b) a; s) q) F
: p; V6 O( ^7 D( K! Z& \5 C$ R9 P- x CSR = 0x0000;
8 A" v4 u) r4 j: L" { INTC_INTMUX1 = 0x3d;
2 Y0 i; v9 j' l) e$ _0 j7 _ ISTP = (unsigned int)vectors;9 J4 ~# Z9 y- _! H$ f
ICR = 0xFFF0; }' [! _" C( }9 c
IER |= 0x12;
* M/ L4 h& ]# h. F5 b CSR |= 0x01;
# I# e2 H. v, K7 h8 B0 p! x! I- C+ e0 K9 s
+ R3 J$ w% T7 d$ a D0 q
# z- ^- F( N4 {7 B还有就是两个输入输出函数:1 ]# V5 H0 D! ~
void output_sample(Int32 out_data)( \0 P3 j8 L$ v% r7 `
{
7 o) E B, i2 y AIC31_data.uint = out_data; 8 `5 S" ?; [& y! m) H0 M0 U
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; z4 B; ]& o* o2 V}
9 T5 k# x2 M2 v& V
* a5 {$ O# W8 R# k, [Int32 input_sample(void)
9 w c) a. n6 h{
# n9 E6 w3 X6 G) p! b5 w AIC31_data.uint = MCASP1_RBUF0_32BIT;' b& b# S5 @+ P2 W1 @6 V' U
return (AIC31_data.uint);
4 B4 z6 W7 Y- g}% F' l y( Z$ K$ |3 W
' j$ c* S( i+ _) E: i: H |
|