|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, J5 n- v' s. v% ~) S3 e- K
main文件:
1 W7 K+ R! e* \interrupt void interrupt4(void) / y4 S5 m/ e: @, V0 H
{
* u) l+ m3 ?" ~4 m" n9 Q Uint32 sample;
8 @" E" Y# [" G$ ]1 \( I; G2 {+ D6 x' Y( D! ~0 j4 K4 T! r- S- x
sample = input_sample(); // read L + R samples from ADC2 E5 q0 D/ l ]; e& w# X) P
output_sample(sample); // write L + R samples to DAC " I$ R* Q' Q2 T- l# u2 W3 b2 P$ K. q+ @
return;
& K; i& V3 ^ B, |- O+ Z}* Q2 E6 K% W" t' B
/ e& E( X: t) H9 L0 ?$ h, B2 uint main( void )
$ K: `0 R: C0 R) K3 c- n{
2 t- v$ ]1 s. |; [# F) M) g6 ~$ z& ^8 p+ k
/* Initialize BSL */5 A, M6 x6 G$ i6 d; |! y) `
EVMC6747_init( );" p1 c, A: j& j7 g& @' M
/* Call evmc6747_intr function */8 T- s1 _( b# R$ n0 {/ n
aic3106_init( );
7 V+ p7 L- y. I: w1 l8 G while(1);2 U2 s' A! w. H
}$ L. g) @( S6 I! _
/ W6 J) @" r4 \9 ~3 Z1 l" p2 I& B, }
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* L7 m! q7 Y% I' K/* Initialize MCASP1 */* D( X7 Q0 S0 B% p
mcasp = &MCASP_MODULE_1;
4 L/ W2 F- Y4 R- \' g, f. a* I mcasp->regs->GBLCTL = 0; // Reset- j$ k/ s2 d% l. \: H1 I
mcasp->regs->RGBLCTL = 0; // Reset RX( e8 X+ U7 e( }: L- g
mcasp->regs->XGBLCTL = 0; // Reset TX0 z3 f) P2 O( C4 W, E) \) M# Y
mcasp->regs->PWRDEMU = 1; // Free-running- ^ v3 A6 o1 x( B9 f' h
// configure McASP0 receive registers- b" ~, Q/ D2 v$ \$ `( n; [) f
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
w/ S' ]2 F. ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 I. L: e' T5 _2 w& V mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& b# ?7 D7 v5 J; {3 T
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) r* I9 [0 N% F! _5 \6 h( r* Z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" d% f$ L% [7 c, N F mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 Y' P1 Z4 j# Z. }) f mcasp->regs->RINTCTL = 0x00000000; // Not used8 X9 {, }8 S2 N( \, g A
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: }! N' f- m6 ?0 B$ t& t9 i3 f- O! b) i, `; C
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: [ u& S( k8 L; L5 _- F
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( m' i8 O7 L1 Y& U0 V! Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 [. L; n. x( a& \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
]6 P1 q {5 r3 i/ v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: {" z; _5 r1 c$ h mcasp->regs->XTDM = 0x00000003; // Slots 0,17 `9 Z M) X+ L$ g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 q" [; t( E) O5 l3 ~
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ b% |7 ]* b: E- X
1 n/ ?, I- P& y5 ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
/ q" e& D4 e% c9 o0 ^ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 k# F P. k& w: a5 J+ M* A
mcasp->regs->PFUNC = 0; // All MCASPs
; |- j6 S; g& m2 L0 L/ R mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 {3 _. o5 z8 y- m, C: M8 F% |* h% C" h
mcasp->regs->DITCTL = 0x00000000; // Not used& J/ v7 I5 R; Q/ x2 I( h$ h
mcasp->regs->DLBCTL = 0x00000000; // Not used% P6 p7 \# G8 F. K, @. y
mcasp->regs->AMUTE = 0x00000000; // Not used: Z5 U- E9 T% l* ]) {* j" Q' ?
# o8 @, f+ q! K% E/* Starting sections of the McASP*/; a6 q" E: t8 ^0 d" V- e
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 o1 n2 l; R. k' ^1 ]/ D+ M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % D- f; A: L" |
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % x+ ~" S% i* a4 K1 {; Y3 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 |- g5 q U: J7 |1 T. W
+ @; E5 I: x2 `1 b" B
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 g! K' y/ P) C. Y- l$ ?2 n( V4 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, u( _3 x* V. W O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ B2 ?: k6 T8 k, l( G" b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% z9 f% f. J; p9 F) ^' U
6 h/ {7 _. G0 O& l" V1 c" D mcasp->regs->XSTAT = 0x0000ffff;
4 ~/ O. f: p9 p- m3 K mcasp->regs->RSTAT = 0x0000ffff; . E; M5 X9 ]' r) y+ u* s# }
7 _; {' S* a" N" q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 Z/ K% q& C6 l' h( m; J9 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" S; |( R+ a N5 S5 c7 L mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 f9 E2 X1 z8 w% N$ \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 m( U0 @3 K$ H" f: d6 A) v$ L b; W5 g; y
/* Write a 0, so that no underrun occurs after releasing the state machine */
# Z! p1 V# B' Y2 N2 A mcasp->regs->XBUF5 = 0;1 O$ ]- O, S/ @3 e) K' P/ T% M
mcasp->regs->RBUF0 = 0;9 Q4 |' T2 d: s0 g) B8 u
8 p4 v3 E! z( x. M7 n( s2 ~ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ y+ G! g8 s8 x# ^; ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: N9 c' M; W- A' O% v0 K7 Y- R
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Z( U+ [4 Y( o* p8 q$ _+ [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! l/ v4 s5 }$ n0 c3 F. w) U
]* `; N4 N1 b7 M9 U; X mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 e/ o& Y1 ^( e& Z/ [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' J% @( C& U0 ]! v( Z# j1 M7 \" D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ |. m; Q* I5 u+ a; ]* a" Y$ P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. r, R! }) u' T! S+ w+ o, x
2 G1 X+ ~% F8 I' J) I9 _
CSR = 0x0000;
w! i& O7 U" D7 ]3 s ~. _ INTC_INTMUX1 = 0x3d;9 V" A8 r+ |% m. o* K7 n
ISTP = (unsigned int)vectors;
, x- }8 W( V$ Q7 H1 {, W ICR = 0xFFF0; ' g! C; ?! p4 K- i8 F4 V; ~- c9 W
IER |= 0x12;
& q% m+ u4 D/ N- o* K8 Y CSR |= 0x01; ! r% N; k; f( Q N: ?; E
4 W( E; N2 i. C0 i% X
7 g! F/ F) D4 T+ P
Q. Z1 E! \. f8 q" J还有就是两个输入输出函数:
3 |) ^8 x1 ~5 S3 W3 e! Wvoid output_sample(Int32 out_data)6 y1 g, G5 I* P- C2 V
{: Y; d, I2 C) `1 h: o8 E" j+ {- _- R
AIC31_data.uint = out_data; + a3 r' m0 I {) P4 ~) K
MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 C2 q& n. M ?* @, L( p}
$ z+ r0 H) u) N) J7 F7 ]1 l
9 q" P+ x0 T( {; f% t# g4 P- o, W) uInt32 input_sample(void)* S& U9 x% g+ Y: }. G9 l9 q- `% z9 _
{
+ R q6 C' k. y' V, c$ Y AIC31_data.uint = MCASP1_RBUF0_32BIT;
: p- \0 G& I# [ return (AIC31_data.uint);; ^- n2 k7 J; ~2 m* G
}
- p4 S! H. M/ O! D6 o% h# f) R f, U2 b) I' K- e/ ?
|
|