|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 c5 A) s6 G9 g) C A+ Cmain文件:" j! D& H' B9 G& E
interrupt void interrupt4(void) ! q: Q) ~( P" y, u) `
{. f. d9 M$ L% } S( j" f
Uint32 sample;( U7 O, A+ Y- _; X$ H! ^
0 N2 }- a" f+ k sample = input_sample(); // read L + R samples from ADC
) E4 |* R# c5 f; S% A output_sample(sample); // write L + R samples to DAC
( S! i! n" v2 M# l! E" ~ return;+ ~% _1 S, f5 `9 N) ` j
}
8 @7 r+ Z! w) d2 J
% G5 ^# L6 S( ] iint main( void )$ V0 ?$ ?' r K' \2 y
{
2 n0 {" F" @. ~7 u- a; }$ l
$ v3 x+ y9 h2 t' Y, q% G0 \ /* Initialize BSL */' B6 i6 J2 k- P5 O; T& X- S z
EVMC6747_init( );
: o8 m/ d* @. e- m /* Call evmc6747_intr function */
4 `. y% K1 S6 J! W" z# Z" O' Z aic3106_init( );- f+ l, J J7 F
while(1);2 l/ z5 M% B" E& D: n U! D8 W
}
2 o* V4 v3 ]2 o1 Z( i/ c- U! J# J- s0 Q* x
3 o6 x4 }: y0 ~' m oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" s, b4 A* C4 H: G; x4 h$ ]/* Initialize MCASP1 */3 j2 w; P6 A) t) _
mcasp = &MCASP_MODULE_1;
u% R$ T/ G p( N9 S7 Y" C mcasp->regs->GBLCTL = 0; // Reset
- w4 P1 c S2 X" X6 p2 F, c mcasp->regs->RGBLCTL = 0; // Reset RX
& R! g0 G4 v9 f& o mcasp->regs->XGBLCTL = 0; // Reset TX; R4 s& O: c# P
mcasp->regs->PWRDEMU = 1; // Free-running9 }. _- A! ^1 |* b5 u" ]' K
// configure McASP0 receive registers
8 V! s' \% d, p6 y( T \ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 A Q' u! z T- D7 W mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 R+ M! f: c+ ]# f) V
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- l, r: i% v b. G V mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ K2 U% |/ ]5 D3 K2 @) I mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): |+ r% u& m6 _! [; M
mcasp->regs->RTDM = 0x00000003; // Slots 0,13 Y& H7 f* I' Q7 F4 R0 E
mcasp->regs->RINTCTL = 0x00000000; // Not used
$ \8 b7 N& T! K1 h e4 ~ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G- W* ~: g$ a& f% O3 x% M% r! \* E( `6 |" B* U
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) J6 P6 [) j- z) f
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, o. t; L" x0 ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; ]8 g$ w! C. s. e9 W& [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' v4 E! a2 |) X, q# o mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' K* L% G% P" y6 G( _5 q mcasp->regs->XTDM = 0x00000003; // Slots 0,1: d1 j, }4 c$ R9 Y8 i6 P
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 y- s& ]8 G8 {3 @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: U u! ~: ^' x) q+ ?( n7 Y: U/ B
1 J2 \8 Q+ t- ?- F
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
; _; c1 _/ t) d+ h mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT! v& r2 l8 B t8 Q6 ?
mcasp->regs->PFUNC = 0; // All MCASPs
1 w! } y* Y7 f2 E+ D mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 W* w4 g, T$ Y6 L) {7 U4 U$ ^: y( N
. E. z1 K& R- E. i+ T8 t; x+ W mcasp->regs->DITCTL = 0x00000000; // Not used
- o9 A/ |$ G; x. H6 p! u5 T mcasp->regs->DLBCTL = 0x00000000; // Not used
9 B7 l& Y# Q3 [% ^* v mcasp->regs->AMUTE = 0x00000000; // Not used6 Z6 o: i5 A5 p2 D! X7 F: a0 {
& j9 k9 a$ }+ m' n; F8 E/* Starting sections of the McASP*/
: z, a, X* Z e; I: o3 F# s) G/ ^. ] mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . D2 q6 }2 L( l9 Y+ B8 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
* Y% i" S L6 O2 c' v mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / E. n* [5 ]" x$ R2 g" ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 `0 }% Q2 k& c& ]0 ]# X& M1 M1 s; l
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) X- n b4 o5 R# D9 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 S/ j9 d; L! |' }+ T$ U
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ B( l: Y; y4 `# g+ b2 d' ~9 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 o" O8 b+ v, C2 T2 W( x
: @1 L J7 o4 I5 y; g mcasp->regs->XSTAT = 0x0000ffff; 6 n. ]# S' ^$ @3 {
mcasp->regs->RSTAT = 0x0000ffff; - Y. E( |1 X0 |
1 O, h. s8 A2 @+ B" T6 r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. X( r9 k; O0 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. f1 s" @0 D G mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' X; m' C- P# a8 c% _( M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 }: M1 L# r! I" v+ m
z& R9 s6 {: c /* Write a 0, so that no underrun occurs after releasing the state machine */0 n$ Y( s+ M4 |9 S
mcasp->regs->XBUF5 = 0;
1 C0 p* a! N- R1 H& k mcasp->regs->RBUF0 = 0;
5 I3 ?0 |) f1 Y; P4 O& r1 H
6 a0 W2 |0 Q" T6 X+ _) @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " L6 {. [$ }2 Y( }* j6 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# M% |& L" r! ^& d X& E6 W mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( W7 S) L. s9 e6 Q3 ]7 h' @$ \/ X9 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* w* }/ `+ b" Q2 g/ C) |6 u4 s, I% l9 o; q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 E1 p/ H" W( C' P4 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 P( ?3 ~$ s8 {6 D, B
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , {5 Z# m- D6 [1 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. R, q2 R8 @# z$ g3 N. a& f7 `$ D4 i1 W4 z
CSR = 0x0000;
5 w; p$ @1 W/ H$ L' ~# u" R+ u INTC_INTMUX1 = 0x3d;
6 m) {$ X' b; {8 B ISTP = (unsigned int)vectors;
9 J; }# E) Z- t ICR = 0xFFF0; 5 T. O5 M0 A* j; v
IER |= 0x12; ' E& ?" i. c5 h- X4 z3 w7 _
CSR |= 0x01;
( f/ A8 Y. R* R# e- Q* r" U3 D, f2 B3 ^2 {! ^
2 T- s' S8 A' `# o4 L! ~- j3 ^* V$ o$ a" z/ `% T; c- L
还有就是两个输入输出函数:; c* m _1 a, ]) p8 F9 p
void output_sample(Int32 out_data)
1 f2 v0 s! R- i5 Y8 O- V{
* o# `! K# R& W2 z9 B AIC31_data.uint = out_data; ' I c; e" Z4 X/ R/ P
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 ^# y9 Q2 D2 `4 ~ M}
8 I! y1 J. L5 c I8 J7 F$ R
^" j! o- S+ Y- dInt32 input_sample(void)
`7 V" v2 y, U, d5 ^$ g{ 0 }- a: m0 U4 d9 z4 n) F
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ H+ s. T& V, u9 @
return (AIC31_data.uint);
: e6 c) ^! q$ g# J4 I}
- S. h0 J8 G1 G+ _% R! i; D y7 O- d/ A& G( w
|
|