|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- P8 @- E; I9 e; H: x% I! Lmain文件:, d- r! `7 M8 g" f
interrupt void interrupt4(void)
8 G, J. v/ p8 v{
1 ^# u% z/ \9 B, `' ` Uint32 sample;
6 T' I* n5 z7 x) o. Y, ~* V3 w' C, T- m7 P
sample = input_sample(); // read L + R samples from ADC
# [, A* X7 ^) _- s: K output_sample(sample); // write L + R samples to DAC
6 S* W K, K* M8 D, Q5 X% r return;; T+ @6 O( y9 N: m, l k$ j
}
% D! ^7 k `# a( A
8 ?! ?3 X x* R+ X& E0 Iint main( void )
: F( l- m& @+ w4 p5 W0 V{
S" V3 b! o! t- C3 E+ q( c
. }4 e% X/ J* z8 e. r/ e8 j /* Initialize BSL */: y, T1 S7 e B/ q; t8 u h
EVMC6747_init( );& y* S) D* |6 f
/* Call evmc6747_intr function */
- b, K* }1 A4 G2 n aic3106_init( ); y; w7 C, C5 d- L4 a
while(1);
( K% `/ o$ ~: q- L}) i9 X9 m& e, t. X1 c$ X/ w6 Q
+ n1 \8 B9 h9 E0 y7 T' Q- a4 C
4 R' }0 ~' l# Z0 b9 x8 S+ Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ z; e) U! ?( x/* Initialize MCASP1 */
2 m8 B$ O) P( F2 Q( p mcasp = &MCASP_MODULE_1;
0 K8 N4 R- F; l6 l1 R mcasp->regs->GBLCTL = 0; // Reset
/ Q% C, e* N4 k- v mcasp->regs->RGBLCTL = 0; // Reset RX9 c5 K+ P" Z" u
mcasp->regs->XGBLCTL = 0; // Reset TX& e, M ]# G/ f0 p3 W
mcasp->regs->PWRDEMU = 1; // Free-running6 h0 w9 Q$ o5 c& i/ _
// configure McASP0 receive registers6 ~+ a/ C( J/ I$ U' m
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& l" v7 ^2 J. b2 h mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 f6 N+ G/ E: P4 I% H mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- V+ s/ e2 U7 x/ m+ {2 p
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 k' h( M1 g; r$ W: H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% q8 m1 B Y3 q6 v
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; n4 N4 s! x+ s' x# } mcasp->regs->RINTCTL = 0x00000000; // Not used
. I8 l0 r4 x+ \" \2 { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" J. p& V: e+ R) w5 ] B
9 ^4 w6 _/ D: O$ e% z/ S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 L' |& I* b! c8 ?( G- T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( u( J6 W; q7 d1 O3 i' {* \. | mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 Y% ]0 Q6 }* S$ l
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ F) I. q4 Z3 r mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ a8 b4 }7 b: y* k6 v mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) ~/ ]0 E: d' g. w) n# w mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) ?( Y/ N+ x- {4 j, L8 Q mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ N0 N) q* U! f+ u3 B8 B) t% \$ J8 V+ v8 w9 n# l+ H9 t
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" Z& \7 b+ G* }: E! m" ]: j mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. t* P* R" j) l6 B5 g- \3 T. Q5 @' Z mcasp->regs->PFUNC = 0; // All MCASPs6 A3 l |' u, @, V
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& V, ~5 k1 V# D$ T8 f( _
3 A5 |! [3 R3 g6 n) f3 F mcasp->regs->DITCTL = 0x00000000; // Not used/ A6 x& @/ H3 ~8 w. K
mcasp->regs->DLBCTL = 0x00000000; // Not used
' v# Z$ y" m$ p. b" u6 o' n mcasp->regs->AMUTE = 0x00000000; // Not used- B. b$ T4 F! g
- P* I" S' {) X @) n' g, P
/* Starting sections of the McASP*/
" ~- B6 H5 Q" W( y8 u mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( Z5 d! l: b+ U% n* j5 t) I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! Q# P2 j; z" }7 J5 p2 T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 F' Z5 ^* _; _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; a0 E& \+ q) `! ?" A4 k
1 e! o# x6 w6 S. n( K% I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) h: P; Y2 t S# X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( F* F% W. _$ v* m6 { mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 b# J( h* g- o$ v& R% ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 R% i% L3 r4 n% p! t" C
! r5 C7 q" u: n% _ mcasp->regs->XSTAT = 0x0000ffff;
' f/ a) g( K# q; H( C ? mcasp->regs->RSTAT = 0x0000ffff; 3 f7 u8 s! r$ O/ o: i
/ B% Q& |% }9 e! L& w
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& Y: ~5 ^' Q+ a9 K' }% _5 [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* f) @( d5 B3 M2 @$ o& {* ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . u# e7 T! S. p5 I6 ~( g& q$ e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ U1 E2 t1 q; u
7 |+ J% |" h% X5 V& I2 @! a /* Write a 0, so that no underrun occurs after releasing the state machine */4 z, Y/ @, ~4 L
mcasp->regs->XBUF5 = 0;1 g* Q" ~" C* D- |1 s" w
mcasp->regs->RBUF0 = 0;6 W: u0 m Q6 l" h2 r" N
8 i: J. p$ ?; }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; c$ ]3 T9 D+ u3 m& q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: [ N( J. C0 a# P5 x mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 H3 o. I3 S- v3 y4 B2 P1 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
N) C% G. {# }, w% h4 _9 B* X- ?2 M# J* A+ M9 r6 \& b
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; w2 u0 `; m5 w1 r3 a$ h/ M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: h5 w. W# K$ Y$ n, d- X$ \! ~ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ r" {7 `: a! b# O: x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# w8 D% f I; \7 A
0 K) t5 l6 b$ D# O) K6 c CSR = 0x0000;9 h5 t: [, X/ ~; Q: W1 S+ \
INTC_INTMUX1 = 0x3d;
' h* |4 m+ D9 F7 Z; q7 d ISTP = (unsigned int)vectors;" }& [# u+ v( V% L
ICR = 0xFFF0; : D' k8 z. E' G* i. l9 i: q
IER |= 0x12;
( P5 p0 R* A( Y/ G/ l$ t5 C CSR |= 0x01; # `4 }6 n& ^4 _4 Q9 z6 T8 `( {
; h0 Y0 W/ h( P2 Y0 H' Y/ Q& W/ `5 B! F9 \9 D" ~4 S
7 R! ?" Z; g6 x1 Z还有就是两个输入输出函数:/ P# P2 Y& i* z$ o% n
void output_sample(Int32 out_data)
+ ^/ P S5 ~2 _8 m/ o+ F: Z{
2 e' ?& k5 J# ^! B7 ] AIC31_data.uint = out_data; 4 j( d3 Z# J# V; B8 t
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ d6 F9 J6 e; V0 B& z
}
4 b% y& Z" V/ C2 E0 J9 V3 E
' k3 I# o9 L$ S" G5 |* ~Int32 input_sample(void)
9 P! ~; p- p, R, y{ 6 t$ r& i: d+ L$ m
AIC31_data.uint = MCASP1_RBUF0_32BIT;7 O' R+ D2 M, w" W: K" }+ h0 U/ f0 z8 c
return (AIC31_data.uint);
& j" q; F$ d, G8 H' l* L}2 M7 R' {* S5 H* k
/ @. M# h/ O' r8 g) } |
|