|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( h0 ?& I! \7 L+ R$ ?+ s
main文件:" D1 a g6 G% P/ V5 x
interrupt void interrupt4(void) 9 j8 `. ^! B" p) `
{
' E0 C E2 A# z5 ]* L Uint32 sample;
- H1 q8 {$ X: L* S+ K5 Q% H
}* M8 q* v _$ v( Z0 F! _ sample = input_sample(); // read L + R samples from ADC
2 Y! L5 E5 K* w output_sample(sample); // write L + R samples to DAC
- x1 x) ~5 t- y* E; U return;5 w# F0 E! ?7 }2 Z& N
}
L) k5 s! A; y E; v W- V( @0 A& |* y( Q) H
int main( void )
0 t- Z9 f% s- n# F1 U: W( C) ~{) @7 L9 T A8 d! t' I- h
' e! T4 E+ J3 m: f8 z+ g n' }- [
/* Initialize BSL */3 L9 ?3 o2 m) j' r+ x; ^8 f2 H
EVMC6747_init( );
$ X- t m" P0 F2 `1 h1 o0 ~1 Q8 _ /* Call evmc6747_intr function */
8 H* _$ u& D. e9 Z/ N0 z3 m% N aic3106_init( );
7 }8 U/ R! V2 P& S( q' w while(1);
3 i" l, `4 y. K, U0 x) S6 d t}
7 c- I! N }- [8 M2 g
' g# C4 ^9 p2 I( Z6 P
9 h6 V* d% i( C- h, t9 o' Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( r4 ^( R* ]& c e/ F9 s# ]- \+ a/* Initialize MCASP1 */6 S Q% C! L4 a# I$ M
mcasp = &MCASP_MODULE_1; L" p% @' u) t
mcasp->regs->GBLCTL = 0; // Reset
/ G) W4 I1 C* [. t9 S; ~( M7 d8 A mcasp->regs->RGBLCTL = 0; // Reset RX4 w4 q6 c: `1 a; C$ M* ?; `- ]
mcasp->regs->XGBLCTL = 0; // Reset TX7 w. m. z! U+ `/ n
mcasp->regs->PWRDEMU = 1; // Free-running
* S7 z2 J( i8 y& O# B& C& R& C6 Q // configure McASP0 receive registers+ l& D, x6 \1 [8 U n
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( J+ u) X. d# ~! A6 [# v3 l
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# M; u. Z6 E3 [+ o- Z; z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 _" x6 G! h, S" C# E0 F
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( o+ C! V; O6 V mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)/ a3 W' x6 d! K5 I" l3 }3 P9 ?4 Z
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
7 Q9 I! J# T- h mcasp->regs->RINTCTL = 0x00000000; // Not used
8 I2 _* V% {3 I1 U& q3 J) \ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% L. e" r5 r7 T, X3 A3 v. h; h/ M+ k* B8 U( ?8 f6 p( c
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) R* a. A6 k- Y, @; w2 y" H; v7 t mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" u. h' v* f5 ~4 d3 H
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; E2 t' y P+ ?/ u( [5 p mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ K- H- D. |( k
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ X* Q a; u+ z1 j. Q( \ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ o& O6 e. y6 {8 C# R0 x" q5 n+ p mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. X' U- ]- ]& Y/ z# Z; L mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" y+ A# B3 ^' W5 a. q* V
# r( t. X1 X% H1 |& x: c7 l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- Y0 b! e* M- Q4 B+ P mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' j: L+ S; M7 }1 G j' r! j mcasp->regs->PFUNC = 0; // All MCASPs
, T! g, C9 V+ b) ~ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' L1 g* d$ r6 y/ a/ I {% k' k) \1 C7 W9 ~& _+ R5 I
mcasp->regs->DITCTL = 0x00000000; // Not used; m% v+ _( ]- z' k$ x7 T+ K9 L
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ V& T2 X' C0 C mcasp->regs->AMUTE = 0x00000000; // Not used
" l1 e5 p! g$ M2 `7 h. [ C' r6 {# {
/* Starting sections of the McASP*/
+ {# R4 w* C4 n: v" v$ V mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' @! b9 v. r- `6 {) B
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 8 a# t- m+ A a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# A% s6 ^9 k& v$ c0 U. B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" [# i7 u; q) z- ?1 Y4 O8 ~
7 X" b/ c, l' w3 s8 y- P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! j( v" m$ Y' M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ C' b# Z) a! b h; p mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# d8 G( x0 V' } I9 H7 p' v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 |) u' H' D) }- E8 j
) _! ?; a# R: y7 q' ]8 K R! M" z5 M
mcasp->regs->XSTAT = 0x0000ffff; * s4 u! N. X/ p. `' G& v" w
mcasp->regs->RSTAT = 0x0000ffff; 4 t1 P) p8 h. M- ~7 ]$ r7 B
1 p! Q' V( }6 v3 S' o8 w1 Q5 ^ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( A4 Y( e/ N. X; Q1 Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" D8 j% [5 V/ Q! R/ U' e
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: a* n3 @ ~+ N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 T+ L( Q* I. ?/ @- g3 T3 f5 | W
/* Write a 0, so that no underrun occurs after releasing the state machine */$ J7 x6 C3 e: T) J/ t) @- Y
mcasp->regs->XBUF5 = 0;
* o6 K9 o& S% {1 D1 y mcasp->regs->RBUF0 = 0;& z7 O& a$ Q' c0 k
. K0 a, K. I, T* ], E% G, W2 i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 }9 R/ F0 Z: w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, |( B/ v K; a7 Z. y5 k mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( N& J1 r) ^2 e/ b0 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 I* C+ L- E, u& x, e
2 Q6 e9 c* U; P mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 h; N m" p* Q+ J7 I3 m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 Y4 P! g" V8 N6 u# ]7 j7 f
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; o+ K. Y9 S. \0 [7 d; F1 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 @% r6 {& ]! ]% y; k' q( _+ B
( f! B7 p& V' G7 y7 \, Z4 [ CSR = 0x0000;
6 `1 J( ?# h5 x/ f" Z0 o INTC_INTMUX1 = 0x3d;
* Y* [- G4 J4 I7 V' a ISTP = (unsigned int)vectors;
+ t" q7 E" \, Q5 M# K) N ICR = 0xFFF0;
; U+ B8 k5 [' O% e* ^ IER |= 0x12; ; _0 V6 a4 T- f( `, @" @ W# T
CSR |= 0x01;
# b4 H+ v+ l3 N
2 H1 r6 d- y9 d/ w' g4 N- W% l- K$ J/ n! c
1 i, u7 g5 E* L8 S. V3 L
还有就是两个输入输出函数:
7 y, x; f/ |0 j% ^/ Cvoid output_sample(Int32 out_data)" ?, H) P6 g- J; @
{+ s# I z: x7 J9 K3 M
AIC31_data.uint = out_data; # p+ H3 C2 G- K, c7 [9 U8 j2 F
MCASP1_XBUF5_32BIT = AIC31_data.uint; N* Q5 w& l8 W3 K! m# j! D8 j$ H& Q
}
( C; M4 t% w# I* A6 l5 e
, c0 T* ]7 C, cInt32 input_sample(void)
1 l7 T' s; V$ O{ 5 L- M: p2 ] U' o. A' Y* y
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 }3 d" @, i" `% g$ u; K7 [ return (AIC31_data.uint);* P# _4 W: X+ x. F
}* t0 |1 W) O7 W) @6 I% k" B
* Q9 ?3 h4 z6 |0 i, {% w7 A |
|