|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 [% N" \' o6 F% C5 x5 Q) O) f: t
main文件:$ _+ K) T! J$ s1 w7 } s/ I, k8 j
interrupt void interrupt4(void)
1 A. [0 k- C- [3 `( W{% }; |: E3 ]$ F% b
Uint32 sample;) ^8 F$ O9 p# c" ?6 S0 C! r+ |. i
1 x" j7 O) g6 @4 ~
sample = input_sample(); // read L + R samples from ADC
! f3 M/ L7 r8 M6 T8 n) v% X# R output_sample(sample); // write L + R samples to DAC 7 ^8 p4 L4 Y3 J7 U6 Y
return;
9 P$ P3 n$ f3 \# X4 Z: o7 B}8 @. P+ A) a) i6 T1 K% _
$ [2 g/ Y5 D+ `6 M2 P; z4 lint main( void )
" _' f1 j& I; `: Y- j' a{
: _! V6 x% N/ t( M/ k$ X. x+ r* Q! B, n7 w
/* Initialize BSL */
4 ]$ h, K0 h& z8 F3 P EVMC6747_init( );6 o- @7 }# _; X$ u' q, Q3 u+ L
/* Call evmc6747_intr function */
# A. o! s( \) o! K! o5 S aic3106_init( );
5 U1 N! a2 I2 U) n while(1);6 }/ `- G; U! y0 W! G# \9 r, ~
}
/ L. M# F% j+ N9 B# @# p2 b/ G8 p* t$ y
5 t* [" L1 \1 _/ f/ y' q4 O. _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N6 J* \; A v$ W! ^
/* Initialize MCASP1 */
- j. \; S3 L8 h0 u0 ]- I$ L mcasp = &MCASP_MODULE_1;' P1 K5 O" w v7 R% }. s
mcasp->regs->GBLCTL = 0; // Reset
7 M: r+ M" u; i0 ?2 r mcasp->regs->RGBLCTL = 0; // Reset RX
( `$ D C5 ^2 H mcasp->regs->XGBLCTL = 0; // Reset TX
- K5 B: m6 z: _$ E7 O7 R2 B mcasp->regs->PWRDEMU = 1; // Free-running
! e0 r5 c' I, D. a; h // configure McASP0 receive registers
0 S L/ T3 s. d. g mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 ~. \, k3 q8 e, n4 T; K! E6 B9 I mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* `! U& W3 S2 w) ~6 K( `8 b7 P
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. c# O( u" w4 U& N" ~3 H
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& \* t2 {, W, S) y! h8 R2 h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); R5 A) T- \# k# @; n* B0 Q) j S& g
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 x# C" @5 c% i2 m4 N
mcasp->regs->RINTCTL = 0x00000000; // Not used
/ {9 T: v% z E: y' P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; X: Z/ d* |6 T/ b6 `( A# \3 `: X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
- J9 O- j( A* x mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& N4 A" z4 t# d' P3 {8 T
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* l- ~# J4 Z6 Z; X! ?: [
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! r& \% o' L4 H% x5 F. j) d" o mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) L! }) o6 J6 Z1 g. ^
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 v" o; H$ _3 ?( S, H2 T mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 y% E9 X, B. [4 V" I
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 U8 S5 l8 ?% I z' Y
8 T) K( {' S( ~) R8 W, g" g
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' r; k( F5 ^8 `/ f; K" @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 O+ }! P! G$ L) [$ b* V* b. v4 q% Q mcasp->regs->PFUNC = 0; // All MCASPs
1 m( M+ d9 r6 k( \/ ?. w) r# M mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# U0 U9 H' v! H( a( a% J e
9 H4 }# H% Q W. M' @' _ mcasp->regs->DITCTL = 0x00000000; // Not used
# R4 H# q2 Q+ p. e0 v; E mcasp->regs->DLBCTL = 0x00000000; // Not used" m% \! B+ r; S, ^2 e/ j* _
mcasp->regs->AMUTE = 0x00000000; // Not used* ~! ~( J0 {9 J4 w* j
9 H4 b- \, ?- }4 _( V5 F/* Starting sections of the McASP*/
" u, A6 h: v4 Y: V/ q0 S mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 h; P5 @ d8 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 H5 S# x* p4 b1 y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W* R" m! K; Z8 R" l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( G4 a) }+ |8 ^. o' g
, c* J# k1 t- U1 B# ?
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 U0 u2 X4 _! l) c1 Z U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' J) g, [1 m! G
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ V4 i! T* u' u8 X+ | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. g& D$ z9 J$ a
: f* v) K0 Q# f3 R1 ?. F mcasp->regs->XSTAT = 0x0000ffff;
5 f f! W% T4 H' @ mcasp->regs->RSTAT = 0x0000ffff; - {' P: j8 s" R0 P
! i6 `' |' z; \
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. K! {) x. @% y7 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 N& I' K9 a# ?& W: \6 Y; Y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 D I* i7 t6 l3 m
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); o+ {" w* j* ^5 J& T& A5 Q, i) T2 O
, Z9 V+ S9 p5 K/ b# e1 d /* Write a 0, so that no underrun occurs after releasing the state machine */
& L+ [2 y" Q% A3 p+ t9 ` mcasp->regs->XBUF5 = 0;
3 _& j3 a* w) W1 | mcasp->regs->RBUF0 = 0;9 Q! b' j0 @5 j9 ~/ d. p
4 `% s+ j7 @! j' |- {1 ~7 } A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 f0 B4 q) ]3 n' j+ i: D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 ?. f8 e& ~( U9 A# a2 e: ?7 Q% w mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 [! ], G. G- C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) e3 D$ \5 x$ g( U
6 G0 `/ D# Y1 Y+ V: N8 ~6 q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) R6 X+ ~8 ]3 q4 L* ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 Q$ v& L- w5 c7 Y, H4 y% K5 b+ t' R
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 d& Z% v7 U$ N$ z& W$ D$ Y" c/ |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 a5 v$ x* d, b
1 A- B& ?1 O" n) S) s7 J) @ CSR = 0x0000;
: Y3 d9 ^8 c; H' N4 A9 d9 \ INTC_INTMUX1 = 0x3d;
) [4 u0 P, k7 ^3 \+ T ISTP = (unsigned int)vectors;
" Q5 C5 F- [8 _+ t0 I) l! N ICR = 0xFFF0;
/ t2 r7 [3 [8 j9 r+ f% @% x5 h IER |= 0x12;
) @* O& A* h' W2 \ CSR |= 0x01;
/ R" T. C; ^ E. _( o
' S6 e) D% M( l- I2 Q/ O0 x' h; m+ j3 R2 |) x9 U( P; g/ y+ a7 F
Q5 j/ w5 Q# y- p" H1 M
还有就是两个输入输出函数:. X' m$ j- W. N0 J- R1 P; }
void output_sample(Int32 out_data)9 e9 q- N) ` r X4 ?
{
: S4 R1 ]1 X* v& D4 D6 n8 a- F. M AIC31_data.uint = out_data; $ a/ m& n1 u9 v ^" D4 g+ f
MCASP1_XBUF5_32BIT = AIC31_data.uint;
: X" @' }& p. m) m$ Q}
" @( E6 _" z. e% `
' J9 G9 L, r7 C0 |& GInt32 input_sample(void)6 L- c, P1 z$ Y4 _4 _
{ ; u' n. r5 } f; Q' v
AIC31_data.uint = MCASP1_RBUF0_32BIT;& m" q% k7 v/ J/ |% Y
return (AIC31_data.uint);
}, h: y5 L. n% X9 A}5 M+ i8 m# v- e
3 K) Q( l- }0 @& Q3 ^& B
|
|