|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! d' w1 {+ X. X# r* }5 P$ j: i3 Zmain文件:
+ W) X5 @. Y/ ?3 g) p% xinterrupt void interrupt4(void) 4 y- N6 G- N2 S4 Y2 [
{
8 i( m2 y& n& T4 W2 L C Uint32 sample;$ x6 C! Z5 C# g- s1 j# t" g
0 B- {6 {( C2 A8 Q sample = input_sample(); // read L + R samples from ADC
3 r: ?0 N+ _) v8 e output_sample(sample); // write L + R samples to DAC 8 r$ F. o. e8 \
return;- F6 W# `/ ?) k6 Q7 @
}
* O+ r8 R4 a, I
5 R5 m% o9 C8 h+ K6 X4 _5 cint main( void )
, c" c* U2 o' C6 g{; w, g% L- [4 _6 i# i2 C H
0 f5 e! S; z" o7 H: M( S( o
/* Initialize BSL */
! d/ m+ n1 n7 Y! g) [* I* m8 [1 j EVMC6747_init( );5 K# \" q1 t9 A8 b: l- k n
/* Call evmc6747_intr function */0 u- c* V. ]1 F, A2 S' _: x" R9 r
aic3106_init( );; N A2 O' S5 |! d, S* j( p
while(1);
: _+ F. K5 Z0 A& A2 H2 B}
' H6 i* E5 X* O2 F! g' W6 `2 b9 ?1 [3 U7 ?
, K; ?: A' d3 k" k7 raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" v& F, \/ ], P0 K: ?( Y, v
/* Initialize MCASP1 */
1 D9 u6 z+ h% a7 r: X r mcasp = &MCASP_MODULE_1;5 W- ^) s# j+ Y1 b( w# ?" Q Z( N
mcasp->regs->GBLCTL = 0; // Reset9 W% \2 p' ` o/ z$ }
mcasp->regs->RGBLCTL = 0; // Reset RX
* l; t9 ]! X; _. Z. | {3 F mcasp->regs->XGBLCTL = 0; // Reset TX0 ?% [* r0 ~; `3 I M9 @
mcasp->regs->PWRDEMU = 1; // Free-running; U1 c4 ?! U1 p6 F
// configure McASP0 receive registers
( h% z, \+ {& O; i: H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 g J0 P2 U, Q; ~( ~) e$ J
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ]; G' U0 t2 m! H
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" |/ D- G# E, s% Q% X5 Y5 B5 n mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" x) D# {9 m5 @1 I, Z" y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! D! N" a/ k# Z0 H, ~ L% ?
mcasp->regs->RTDM = 0x00000003; // Slots 0,15 D7 ]! S; k4 u& ^2 F
mcasp->regs->RINTCTL = 0x00000000; // Not used4 u8 x+ u" N. H8 \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 g# C$ c! s3 R/ ?9 B, F$ K
: H. r0 n: Z0 n, [. q; n
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" B4 f6 R8 k: v2 Q m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 R4 p/ t% B1 V. |+ O/ M mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( [1 |0 a9 D, _( Z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; L( E5 b& T' @' T; w mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK' h5 T2 z" V u) {' I/ g/ f. p* P
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
0 D5 l, H2 R; h4 O* H mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 D% \ \2 @/ {* @: S4 Q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" ]( X l! T+ c1 z. T2 T- [& j6 r* i4 e% N: p: ]# r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN$ q) ]/ \0 }, }$ k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT% N; a- l6 B- E0 {8 {7 H
mcasp->regs->PFUNC = 0; // All MCASPs2 n/ n4 a4 j% D4 g' `$ Q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# S- V0 M2 c! m0 m! X) ~; S
9 r8 r5 u( ^" S4 {5 w" J t
mcasp->regs->DITCTL = 0x00000000; // Not used1 q4 h) W1 [( x. ^! t+ e6 M
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 h2 j% `, {7 S$ S- c5 p* ]' Q mcasp->regs->AMUTE = 0x00000000; // Not used
6 | n) Q" I0 B0 k# N; V$ y& |! j! o% n9 N) Q4 e
/* Starting sections of the McASP*/3 x5 n% H6 _$ u8 a4 ^3 p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / Y; [1 p2 q% E& m1 c; A: n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! r# W( e. l1 ]0 i" E: W/ o mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 F! H- A f0 d0 V8 V6 ]1 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) O* d) f! h7 U
$ J) H5 t! O7 b2 P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ T: Z) \1 g7 @. a; G# W1 V. v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! W* o/ C/ |% H8 z
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 k- m) }$ y. O' ?: I/ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 \7 e. s3 u; W1 B" f$ P$ c
: k: Q7 F7 z; [, f mcasp->regs->XSTAT = 0x0000ffff;
0 N" Q% J: [. e5 q8 ]8 Q# x0 M mcasp->regs->RSTAT = 0x0000ffff; 8 S+ B$ j! h1 o, A9 B% [8 O8 l
6 o% N5 F) I4 ^9 h6 X4 B8 b. L mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) v$ J3 l: Z. V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 ]: `, G1 G& K: ]$ s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : S; N* _( l! l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 Q# t B( ~' O. x$ _3 t+ O' v1 z
8 Y" }8 ]6 { [' O2 O; ?) h /* Write a 0, so that no underrun occurs after releasing the state machine */. h8 B3 c( D1 R6 W, v! j0 F. ^' Q0 }
mcasp->regs->XBUF5 = 0;
. Y5 [: W0 E$ z! p# | mcasp->regs->RBUF0 = 0;
2 H8 o* x% n" K' \2 z7 P" J g9 J# K/ P3 _% K3 h4 b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; }4 O: r1 f9 |. m6 n( [/ M# \: H6 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 q, N& R" U z d) j8 P
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ |+ t, K p% `! }- ?. v1 w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 I/ ]* {+ @' q/ e$ A+ m
+ ]8 `6 l% X1 R& y) _( [ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ T4 h- v0 {" X) k+ t% T5 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: L! r' g, t& v% S% `( y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' j6 H! O% D; d8 t( o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 q. v1 Y% J2 r- g8 E# ?+ \
2 t& X7 I$ A/ [6 Q- p# H. @1 ~ CSR = 0x0000;4 L; Z. e. s1 C; {2 {' s
INTC_INTMUX1 = 0x3d;% }! q# M. v# L. Q
ISTP = (unsigned int)vectors;( a- y3 T" |" _
ICR = 0xFFF0; # J( x) h5 ?" C$ Z2 ]! G
IER |= 0x12; 4 V- @3 ], s5 J+ E) i
CSR |= 0x01; : A. T5 U- Q9 i; z5 j/ r
6 b( K' X! r4 [' J% l
. g2 F: A: Q4 s+ P- W
0 t7 B& p2 y' @# x5 T4 `* A+ K还有就是两个输入输出函数:
9 d' a! K l2 q) _- ~void output_sample(Int32 out_data)0 Y/ B3 g! D0 q
{
( t* d1 j: C+ t9 R: K5 w w& x AIC31_data.uint = out_data;
9 p: y* x9 _( H6 a! m' ]: q" B MCASP1_XBUF5_32BIT = AIC31_data.uint;0 b: w* s/ }5 V' {; _- X; H- l
}
w8 q- ?5 r [% `. \1 a9 q/ p. C8 x- V9 P9 ?" t2 L
Int32 input_sample(void)
, q+ O$ A2 Q1 k+ `! o{
, M* \ P2 B' v- o$ J AIC31_data.uint = MCASP1_RBUF0_32BIT;
; b, N; n9 G7 F' F1 B return (AIC31_data.uint);
* ^2 j8 O2 e( b7 t6 C# H9 e. y}) ~* E, U" y7 H$ Z. }) A0 R* a
) {0 _8 _ I7 |7 J
|
|