|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! }1 B) f) @% w' q: w1 C
main文件:1 v& u) c) w- j# y6 b, z0 g1 ]: M
interrupt void interrupt4(void)
4 d4 g2 A5 S& g4 l$ m% |& ]9 V{; _5 p8 l8 W( H8 w- t- h3 x
Uint32 sample;
5 r7 H* f! k* @* d% c7 k9 ~2 b7 a- \1 ?- c d
sample = input_sample(); // read L + R samples from ADC
* U$ _. g9 v! h4 @9 Z$ ^ output_sample(sample); // write L + R samples to DAC
5 _* }4 \( _1 m1 O: h8 N& s return;
' ` P! Y$ c6 L% P) t6 |}3 L$ P7 q% l8 B" R2 B
# X& p0 B8 n4 ~2 f L
int main( void )
! {1 b0 g6 Y" X5 _# I) \; K{
+ d% |2 G( t2 M) [ I4 k9 d
) j- v5 y$ ^0 b- P7 P9 ^" o ? /* Initialize BSL */4 J9 R$ Y& W3 v% ^
EVMC6747_init( );
$ W! ~$ I [) | /* Call evmc6747_intr function */0 ]5 _ G$ j0 K2 F+ n' o
aic3106_init( );
4 d3 l! Q9 [# e9 f* N8 p while(1);: ^- h% {% B. ]2 `+ M
}( P0 @% i$ o% j$ |
. d) |( I# A5 r" s5 ?) V- q
) z+ l1 z$ r) ?0 Z8 m. yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 F$ a; e- ^( C" L, t
/* Initialize MCASP1 */
7 N2 w2 K" z4 G mcasp = &MCASP_MODULE_1;
- k" F# w' O$ Q" q mcasp->regs->GBLCTL = 0; // Reset
* `/ t# e, V7 L' v0 o" [ mcasp->regs->RGBLCTL = 0; // Reset RX! o/ W" q* I0 I5 P; k- }& o4 A! H
mcasp->regs->XGBLCTL = 0; // Reset TX- v/ q. l' O% _
mcasp->regs->PWRDEMU = 1; // Free-running
% Y H, m6 y6 A: m // configure McASP0 receive registers
: z6 X! ]+ h5 I+ G( u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( r8 y2 o$ O" e( W mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 J8 w- w" \4 t9 {9 a mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ L/ U0 W1 }/ n8 C0 C: e$ z7 `. R
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ c- V9 a; I) U8 O& l mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 U/ E% y/ k4 q# V mcasp->regs->RTDM = 0x00000003; // Slots 0,14 a7 f$ |% a V. U( @" ^9 J' t
mcasp->regs->RINTCTL = 0x00000000; // Not used2 a# m, w/ r$ ]4 k- R
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 N/ [! U* b4 H b5 w
& l. ]: m: w4 H" J) [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) E. J7 s) q% w* T/ n mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" G* S: }. n8 e! { mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 l/ E! j' e' _8 F; h2 v9 y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
t( A l6 f$ I a" W5 `2 s y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
+ C& b) Z# W9 G mcasp->regs->XTDM = 0x00000003; // Slots 0,19 y' {$ J2 t" O: a. q/ ]# M
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit) X4 |! T% Q+ w# \
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; H$ _4 V. Z6 |# Z/ ^% j! L+ |( c6 g1 ^$ w" \0 ]6 m' J4 r3 M( G7 z; b1 |# c' G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN6 M! ^! E7 r$ g! e! o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
+ B' P- |& `; s' W3 y mcasp->regs->PFUNC = 0; // All MCASPs/ I6 h* \. M* ] m& n. w2 |. Y6 T
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ R, I8 Z9 I+ \. V- ~/ a6 H$ I
" u% Y7 g3 y' B: d' F0 M0 k mcasp->regs->DITCTL = 0x00000000; // Not used
3 | r* q( z( y5 Q1 O3 g8 C7 I) I* i mcasp->regs->DLBCTL = 0x00000000; // Not used
+ K8 T8 p) C! I mcasp->regs->AMUTE = 0x00000000; // Not used
3 x4 g4 F* r- d2 U: g
. T3 P( Q& Y% @6 a: F/* Starting sections of the McASP*/
' l K/ M! K& V mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- [& R. N% U. p8 T" p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( @1 v/ p5 ?8 [6 _$ v6 a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! N9 ^' b5 T( a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 t6 |4 Q* w% s, \3 y; W
8 u N0 j$ n# P& C mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, y7 Y) O; i7 c* v: e* g; D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* Q1 ?3 q' |) \& u mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. }1 k4 ^3 }, m2 Y; q$ V: F& Z2 _/ ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" [6 ^# }) z' E7 R; }
4 x% D2 ]2 T/ N+ I9 `+ `% ^& \; s mcasp->regs->XSTAT = 0x0000ffff;
2 v3 Y+ B, D+ i! ?; m mcasp->regs->RSTAT = 0x0000ffff; ; q7 g% p# C: X) Q+ P# b+ m
- |( k# ^9 L2 L. ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ d) @; x+ w: o& l9 V4 n! p& J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ K# o/ m! m1 P! ]
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ c5 w& }9 E8 X' D. J1 M& T" n' y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 G8 l& z5 [/ x% J2 h( Y
8 \$ x- I2 M$ O5 C /* Write a 0, so that no underrun occurs after releasing the state machine */" n% ^/ J' G/ X
mcasp->regs->XBUF5 = 0;
8 m, ~/ b7 ~" `% y& k7 Q8 d mcasp->regs->RBUF0 = 0;
6 f" j4 P& W+ t0 S( P6 H: x! i! o% s8 O2 c1 }% D' k- s
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . X1 I) W) }- s9 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" T3 j: K% X1 K% z/ S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , v" Q6 W8 B/ v9 @; G! W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
t% c: ]1 j3 E# b: h1 y/ R- c
; d3 f$ H7 i8 U7 T7 J9 ]- d1 _ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' ]% o" d7 W5 X2 D! ]1 R, k/ _- j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. m4 {( X# G1 J0 q
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. h/ c- Y" g* y/ e9 d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 @' \+ T5 d$ u0 w2 P
1 Y5 c# e7 N& H( i. _! ^7 }, T- }$ D+ C
CSR = 0x0000;9 S/ j& q3 C6 j% T7 o: ~/ C* ?! o
INTC_INTMUX1 = 0x3d;# ]3 ~' P( q& b$ R7 R
ISTP = (unsigned int)vectors;
n8 i$ p7 R- U+ _: O2 x5 I$ ~# R ICR = 0xFFF0;
0 B _6 U( a, i$ H8 e- Z/ L IER |= 0x12; G) L# }0 h" k8 W
CSR |= 0x01;
: Z1 M% N% Z& G R! n& d
~ R" c/ Y* ~5 x, B3 o; t: p2 @
1 X+ o1 O7 ~+ e, r5 {/ x. V% p
5 y/ T) W- H: ~. H; v还有就是两个输入输出函数:, Y0 K( d; D* F& N0 C" ~. G
void output_sample(Int32 out_data)* w- h; j1 y- g6 v$ j
{0 c8 B% c4 }- k3 Y( V5 l+ m2 f
AIC31_data.uint = out_data;
7 V$ F) E, K$ h9 J9 K% ^6 L& g' i MCASP1_XBUF5_32BIT = AIC31_data.uint;8 V$ O3 V& k! K! ~& B& K; [
}
, a* }1 {7 Y- |2 V/ K; X
( u8 j/ L. f/ g) F8 CInt32 input_sample(void)9 r* q/ _) C; G6 H. w
{ : W* r) L. | o1 B2 z2 @1 T
AIC31_data.uint = MCASP1_RBUF0_32BIT;, Y5 {1 z5 ?9 G, Y! z, x3 H/ V! \' `
return (AIC31_data.uint);
/ t! f* K7 s8 H4 o0 j6 w% R}
$ g: \% {5 c% M0 y
0 a& m9 s* Q! L5 e% Y |
|