|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 t/ b6 P/ Q3 h7 a% s4 C
main文件:/ c9 d- Z) i" L6 g/ d/ a' j" v
interrupt void interrupt4(void)
7 u1 c# J; `8 s6 C+ V5 K, Q5 ]{
" [! a) T: T2 v; F- I& N Uint32 sample;8 ?6 V1 q5 |: F) x5 y$ [9 F- q
* ~6 V" G, Z$ ?& W6 E; ?" q( [
sample = input_sample(); // read L + R samples from ADC
* i) f, g/ v/ `2 E, w+ V output_sample(sample); // write L + R samples to DAC
$ w& d8 T# f- ?2 m) F return;
|- e8 H- E4 y# U}
* H8 y) G+ Q9 U6 I, W2 F, d7 \! R% B7 S2 J6 k
int main( void )/ p! P8 p: s% L* E t! W
{% g5 f- @; l3 N. k, h) Q3 l( y: D
1 m, S" ^6 V( ] /* Initialize BSL */+ j& C& V0 q) u' G& G$ Q! Y
EVMC6747_init( );' H/ [+ K4 M5 n1 [. O
/* Call evmc6747_intr function */6 V: d& x- B+ j& | C# Z+ d
aic3106_init( );
1 `: ?6 T2 D# n" L while(1);
' V# \/ X* e. U' B- U2 R' f}
" Q) {4 ]- Z$ [' f
6 N" V% j9 z9 ~
7 F i* G/ C% g6 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" Z5 H7 o! \, j* l
/* Initialize MCASP1 */4 E8 g0 T4 D% z5 D! x4 K0 U
mcasp = &MCASP_MODULE_1;+ [2 ?% g/ _, I+ u. i5 T$ \
mcasp->regs->GBLCTL = 0; // Reset9 @# Q" S7 ?1 X p8 ~. T( L
mcasp->regs->RGBLCTL = 0; // Reset RX6 R4 K8 G7 i2 ~/ t5 T) k' b1 N% E8 R
mcasp->regs->XGBLCTL = 0; // Reset TX- z( A: m! f1 n; m) a( G# U
mcasp->regs->PWRDEMU = 1; // Free-running, l) x- f* m+ L' z8 @
// configure McASP0 receive registers
3 E- j5 z" Z, M% x( k mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
1 h2 T- U7 |6 E6 I, z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ o: |7 q% o6 Y2 a. i
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 j0 u/ \- K4 C g+ z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 T4 z0 o' z0 Z% v2 ~- x9 w2 A: ^ X
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 U, D: V. X; i4 ] mcasp->regs->RTDM = 0x00000003; // Slots 0,19 g g' o6 L9 r0 }
mcasp->regs->RINTCTL = 0x00000000; // Not used4 o$ \" J0 z; {) M' j5 P( L) z, B$ W2 n' x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 \) h" S# k7 ?, B+ k# |# \
( S# z# n- }* U6 m( {
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
, ^& A) ?, {5 ^( m/ s mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% D0 ~. x7 Q' G* M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: \$ x) \4 o- K, G( W/ f6 E( q! F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- K6 @5 O1 B. p! f. h mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
# A% g5 l2 l: Y1 T: O2 M mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' }; o+ F8 e/ C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 f) ~$ d% b. b: N
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 n+ q3 ^( A5 c& U: W8 n
" Y( |( u! [" P7 {, S) ?% ?) N) c
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 f+ y9 P1 U4 A5 v w, E mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& A" n( \ s% F2 j
mcasp->regs->PFUNC = 0; // All MCASPs
2 Q5 z2 g8 F3 A( _1 A mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& I) R0 J& C' W _5 l. n M
; X' U" N6 s, l2 M3 w3 Z# ?# Z mcasp->regs->DITCTL = 0x00000000; // Not used
+ `- |* F7 @% k0 u5 s" c/ K mcasp->regs->DLBCTL = 0x00000000; // Not used6 f2 r) _" T# c5 p+ x0 [& b- a
mcasp->regs->AMUTE = 0x00000000; // Not used
5 q1 b" \4 W- w- m, X; `
! x; `* t- G* x& |! _/* Starting sections of the McASP*/
/ ?, A6 P0 s( l$ }6 o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - N8 J& H- C4 _6 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " f" p- I! N6 \: s
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 s; o2 h+ r7 Y& j3 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 W& { {9 l( ]( b1 q+ G
: r) F; y( s5 l2 W( s1 O' Y mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) \. I v/ _# z, Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, N p! _, y6 D: z" [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ T, J2 r7 _+ Z. }/ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 `/ p+ I; ?1 N1 `# U
8 E/ u. g v" V, f) ^ mcasp->regs->XSTAT = 0x0000ffff; 4 t7 `1 R- h2 {. h+ b0 L
mcasp->regs->RSTAT = 0x0000ffff; # b+ z. x0 }7 M Q* E
2 X' _* F3 K+ o) a! O+ d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 A' m4 E4 E- U. O# G4 g h6 R a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: h1 }: o3 t% ?' X- T a# K# p mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& V# N2 S5 a4 w# F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 R- a$ Y& G1 ?6 J2 h1 \4 Z" N6 m- v) T
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ M9 [- x' C z6 R8 S( i- B5 m mcasp->regs->XBUF5 = 0;3 \: o6 X) P! X2 t; J, F
mcasp->regs->RBUF0 = 0;
) A/ s( [( G+ `1 ^. d- ~
' _& z8 \3 R; s" k) ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' C) z8 v3 x$ @4 S+ D6 S8 _- ?) l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 m( {. P- @6 g" W2 a. l( a3 y$ I
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ h5 l/ W" K3 f. k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( ]2 @& X) u. ?5 {( c- _
: D, r+ g2 j8 i4 |+ K mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; C k( I9 J" V$ f: u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- z5 h# K% G% N+ [, I$ y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 {$ w2 U4 i2 {( Q! p" s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 `! P& r( X7 C6 A, V; W8 F7 a ^7 ^
' \" K9 u# B+ R, Q CSR = 0x0000;8 j9 ^" b p8 {$ I ?0 C2 F
INTC_INTMUX1 = 0x3d;$ W$ M- h# M3 D( e6 N
ISTP = (unsigned int)vectors;
( g9 y8 E( \8 G3 }5 ]8 r ICR = 0xFFF0; / k! Z8 x( r* t0 s2 D: y3 Z3 I
IER |= 0x12; # o. j& p. {0 V( ~0 P) T) n3 G) _
CSR |= 0x01; ! M( n7 x7 g/ e U! E
( s2 g' m/ q6 U# Y# ^4 a% K5 X; [
7 v; S3 [, J0 n) m. _" p5 F- {$ K
/ W* J+ f+ j z0 y2 c还有就是两个输入输出函数:
( Y) h9 W- D% L$ C: A4 Ivoid output_sample(Int32 out_data)
+ _: u( \/ ^" @7 @2 n9 q{
; i3 S5 y4 Z# U7 f; n1 n AIC31_data.uint = out_data; 9 q' r6 D* _) Y; ], \* g
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ d4 D3 G( H2 P, h* j}2 H/ f" h" x" `" v. g6 P# `
s$ M) [' M% A7 AInt32 input_sample(void)
& \, i3 W5 A& Z) @& ]{ 5 }( Q( r, N) E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 w" g3 H1 s+ D% h, s9 C, X return (AIC31_data.uint);
+ u6 u3 c# Z7 W0 {+ [, \7 y7 F}
# k P. v1 W. M; A' ~
0 \, b4 y$ s4 F# _ |
|