|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! ` s9 _% i, U# [0 T5 C$ F4 xmain文件:
! @' d+ O5 t7 s+ P6 ^6 M! Dinterrupt void interrupt4(void)
. l! [/ V8 S) |% w5 l' H{
# H6 d: I. X- i- A Uint32 sample;
Q ]- Y6 U8 Q, N* b. _7 \: X3 N5 T1 a/ u. U b0 K
sample = input_sample(); // read L + R samples from ADC
9 k; M& O( v5 B output_sample(sample); // write L + R samples to DAC
4 j5 b. Q/ b2 {6 Z3 \ return;: `. a; N. F) _$ G* t
}
9 t# S5 R6 t& E
% r% `" P5 B3 t, H2 B! H3 [int main( void )
; H! h/ v- }( E+ _{
& S6 |( }. G* R X, Z7 i9 v: ?
0 R/ C! z; p$ T [/ v9 d" z, X /* Initialize BSL */: M4 C* q' t" ?$ e
EVMC6747_init( );
. y! O4 r; w$ o8 p2 _7 z /* Call evmc6747_intr function */
9 P8 M p4 Y7 X aic3106_init( );
7 f1 Q# f$ y" o while(1);* d3 S1 c; a A% ]* f! O. x2 f
}; W" P. T9 K7 F3 D0 F: i
" ]1 B. S9 L9 T
8 i0 y6 \- K" |& V! w1 ?$ o. ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ x" @* I$ U6 F, _0 Z( S" y
/* Initialize MCASP1 */
/ p4 I& x3 |3 r mcasp = &MCASP_MODULE_1;% w7 x. _. [: i9 d# e
mcasp->regs->GBLCTL = 0; // Reset. S6 _, s1 t+ S) G: h- C4 F
mcasp->regs->RGBLCTL = 0; // Reset RX
/ ]8 m7 F1 e/ l mcasp->regs->XGBLCTL = 0; // Reset TX4 o0 m3 c5 o1 l1 J, g3 ^
mcasp->regs->PWRDEMU = 1; // Free-running" i- U$ }( W4 F4 D* g$ }( X
// configure McASP0 receive registers
" |: y+ n' c4 N: N. U. K! R* u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used7 G7 V8 E8 K, o- h: ]: ~
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 g/ I1 g3 ^' k mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, `9 w+ r7 f: S% M) N mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 M8 W7 h A, n3 {
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 e( o, Q9 j2 T% \- V) V% Z$ G/ s! o8 z$ S mcasp->regs->RTDM = 0x00000003; // Slots 0,14 U1 t2 h1 R/ M7 v- d# S3 P0 u
mcasp->regs->RINTCTL = 0x00000000; // Not used
, K V. m0 S! I mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 [ ]3 y- r, X) X
$ A- M: G- p$ {8 j7 c mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) _( T" C- p2 |$ {2 Q, ?
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 I2 W0 \' W$ B% t4 {' ^ a. l- v
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! s4 A7 E6 ^" t; {
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: k; g2 ~. V S0 n- {
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( K( M, ?8 X! d0 A/ H- p mcasp->regs->XTDM = 0x00000003; // Slots 0,1% \. g% w2 u) O
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 ~9 w, O+ N( L5 Q' p1 X6 d mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; P7 \6 V6 u9 y0 h& _1 T( z n
9 S6 `& t- t: m9 o9 E mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! y* \% @! y* n+ T6 \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, \9 r8 S" g L, m mcasp->regs->PFUNC = 0; // All MCASPs- ?! q" y8 E# N U# Y ^! I
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; Q1 L( l7 A. U& \
. M. N% N8 i9 |
mcasp->regs->DITCTL = 0x00000000; // Not used
( V: }; G" T% Q$ h5 f mcasp->regs->DLBCTL = 0x00000000; // Not used
$ U' O7 B6 t# H4 M o. D mcasp->regs->AMUTE = 0x00000000; // Not used' {7 g; n" E1 i" O& g+ `: k
" D$ p) n$ j; ~" B Z1 _" b
/* Starting sections of the McASP*/
; `6 k" ^$ ]* i+ J1 K! b; [. i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # b [: S1 o1 M- J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; G. e, C2 p5 S" j3 O6 b! Z* U- x
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 h6 y8 [5 I5 \9 m% V, u" {( x" K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 W6 w* p* l1 J
g; \. _; b, F$ u, O1 g) h mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ d& W+ B& q9 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 ?+ d' h! K' c6 b( p Y$ N- ^ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' `0 K! M. M8 g. {- m* v- o- T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ m& z& q4 `- K: ?' Q; J# U$ A2 a/ V4 Q
mcasp->regs->XSTAT = 0x0000ffff; % A7 t( T2 T: n$ }
mcasp->regs->RSTAT = 0x0000ffff; * r. s" ]5 o2 x
$ q5 [5 J. p, Y2 g z' d* i- _/ r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. T! n# N% S7 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: W( p. Q0 k. V. `# g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / w" c; O* b, w% r0 F$ U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% s( |7 v5 w$ o% Y& @/ ]% e5 J+ Y0 \2 r8 q
/* Write a 0, so that no underrun occurs after releasing the state machine */
( c X2 x) [- v) Z9 G6 q* y" i mcasp->regs->XBUF5 = 0;
) _; E* b& |8 k- Q1 P8 F mcasp->regs->RBUF0 = 0;
8 p1 b' Z$ h* u$ T) Q" Q3 n) B- Q# G8 N% ^
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 k+ ^* j* t( S( q( Q4 [8 t2 B3 V% E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( H" ]6 u/ s. J mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; Z+ y8 F% {7 Y+ C. o( a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 b7 ~, [+ t& n) }- u
+ l. W1 I) n- W2 Y7 I" l* B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- @) S2 X4 ~( q% l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, u! b y- P: p8 p% I) r
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) h, u j9 p/ D$ q/ v3 L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 P3 z. R" i7 \- K4 X4 I& v; a ^! h9 x; @
CSR = 0x0000;1 o; @2 ~$ }% U
INTC_INTMUX1 = 0x3d;
/ L( S# l* ]& k ]0 Y$ d ISTP = (unsigned int)vectors;
! l: s( y8 b+ ? ICR = 0xFFF0; % C$ y. }& l5 H0 s) m* l p
IER |= 0x12; % p8 p9 t% X& U: R }, u
CSR |= 0x01;
5 ]# S6 e8 V: Y# W8 K* S1 K% c9 Q3 x) w- N
5 L0 W% N1 e8 M
, k* a, Y; V6 y3 Y4 s还有就是两个输入输出函数:
9 z% v/ k, `+ F8 Z9 L4 c( A; lvoid output_sample(Int32 out_data)8 f: O4 w. Z- e8 L- s2 ?
{
; i( | D4 ~- K) ]& C AIC31_data.uint = out_data;
0 l0 x& C3 q+ l7 i) | MCASP1_XBUF5_32BIT = AIC31_data.uint;) C: K, Y1 C% k, Z) T
}4 I3 v4 _" b7 T/ ?, x: U, t
. ?- K3 f% K; y f
Int32 input_sample(void), p$ g+ P" O( J( D
{ [+ G# o$ f, f% d2 j! h5 u& ~# v
AIC31_data.uint = MCASP1_RBUF0_32BIT;: T5 Y+ {' Q' X W8 _, ^3 k
return (AIC31_data.uint);
( w" R, w; W$ D0 f& ]9 @9 K0 O8 ^}. ?$ X8 Y4 A* J* l+ X/ j9 s3 Y
* l% e5 d' c' a1 Z! R [; m4 p |
|