|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 n/ r6 h3 c" e0 Pmain文件:. m$ N0 _ q- @9 n
interrupt void interrupt4(void)
5 g! Z( ^: v. N6 R{: Y8 T j1 g7 y& Z
Uint32 sample;
- B9 j5 U& U/ T" j# h* P0 Z6 K! h! n: f; [" b' m
sample = input_sample(); // read L + R samples from ADC2 A m9 m8 @# p& W% |
output_sample(sample); // write L + R samples to DAC / C: t2 L! J( ?# a: c6 c
return;9 V0 x J6 _" V( s5 r+ R# {
}- |# j! b% A+ _% r6 i
3 G4 a" i6 k! y5 z+ A1 \. cint main( void )
% n# z0 ~4 R+ E{/ f: y- J7 M* H+ x: E1 Y
4 H$ S& X) E6 s8 H4 m
/* Initialize BSL */
- j C1 T# M" b7 w4 N7 n EVMC6747_init( );
9 k; Y1 z$ l$ K V! {$ M /* Call evmc6747_intr function */ J( F* L' H, P. |
aic3106_init( );+ b! h8 U: B+ s* Z
while(1);
4 q# G" ]$ w7 V) S. a}" z; m8 q0 l$ S9 \
F, D$ A1 f h* E8 }
: R7 r, ~9 j0 c, b$ y9 H
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 m$ m# _. a" C; e# u- i8 W/* Initialize MCASP1 */
6 T |3 j3 b; S2 I7 C mcasp = &MCASP_MODULE_1;
5 k. e8 n2 d; X& ]$ M, ^ mcasp->regs->GBLCTL = 0; // Reset
/ x1 r( A' g- }5 t9 K" r3 d mcasp->regs->RGBLCTL = 0; // Reset RX9 h% M, f$ C" q
mcasp->regs->XGBLCTL = 0; // Reset TX
/ Z' d- G1 N6 C2 O$ `# ~) ^ mcasp->regs->PWRDEMU = 1; // Free-running" Y# T) K# a( i$ W# O3 j$ G
// configure McASP0 receive registers
1 G3 R7 j h; h. P9 j0 h$ [ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* b u" N9 n, h& F mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 O' i9 S2 m- o6 l2 ^! Z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ }6 R) ]1 J5 g- y8 S2 R2 H
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 q' Z0 b8 [, K2 c o, g7 M
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) Y1 A# h2 E/ H/ h& i
mcasp->regs->RTDM = 0x00000003; // Slots 0,1* v7 {. ?" u8 ]1 f7 ~$ t$ l: ?
mcasp->regs->RINTCTL = 0x00000000; // Not used s2 F4 E( ]3 }- B9 p. G; Y& J$ n
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! W, o1 T" _2 }
8 z$ v2 {1 z; L% u mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 e* Y3 \& }! t1 w1 c% j
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 h- s8 _2 h1 o( a( \) ] mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* T9 B( j" G' d# ^ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ D, v& z6 I: n2 \
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( D! ^; N( k+ r5 Y5 R# p- F
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 J% W" s& m) E4 z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. ]/ }' ^* w- k5 ]7 P% @# a0 |( u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" G) z/ k2 O" P1 y' R; ]
7 P6 R9 [8 K: w4 Z/ L- T; W" \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN$ E) w5 `& S7 Y+ _; J6 W
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 R) r, G0 b9 O2 }. a) Z- X mcasp->regs->PFUNC = 0; // All MCASPs. }& ^" j! G, ~$ g
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 N) s/ L1 n8 v' e" p K9 V/ L/ G9 K6 T/ q& @ Y
mcasp->regs->DITCTL = 0x00000000; // Not used& u( B' O+ H4 J* j0 l, E* ^: `
mcasp->regs->DLBCTL = 0x00000000; // Not used
2 u* o4 \1 w' r8 H mcasp->regs->AMUTE = 0x00000000; // Not used! r( c( S5 C1 V, B/ a9 v
0 c$ u9 p1 d5 Q* R
/* Starting sections of the McASP*/
+ T$ E3 {+ I. a+ [) w8 U6 Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ H$ W+ w! C/ I/ A+ X8 P( A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 V6 J) J* Q2 [: \
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 q* P" S( q) a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 _2 E6 s3 V; r% v) p( F! A% L+ `' U
' V& N+ |9 o, k8 k
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 N* t% }% t2 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); ~8 M& r& O! H( z5 }
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & a2 [, u2 ]7 M* u, Y6 }, b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ L+ _1 \ ~+ Q- [0 J
& ]) q& Z) d1 P mcasp->regs->XSTAT = 0x0000ffff; 7 \0 k. u6 B" a' l" r: X
mcasp->regs->RSTAT = 0x0000ffff;
& R& l* K/ ?; b- O$ V/ D: {% Z8 G" A& G, V
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# m1 f3 H; P" }+ b# X& x' v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); R( r: `# s" R( n! G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# P$ I# j2 ?" T5 u1 ]' k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! V) ?. S6 \, @# {3 a3 o1 Y- s
+ {# f; a* a8 A/ a+ h /* Write a 0, so that no underrun occurs after releasing the state machine */* Y4 O( A8 e( M- x! v
mcasp->regs->XBUF5 = 0;- `8 o- K7 C. m* ]" j
mcasp->regs->RBUF0 = 0;5 v: V0 a, }/ G; N8 `
6 o. y5 d1 E C) a; }( J' Y/ @. \
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 |) O' Y T2 L" o! z( Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* r* [1 m% P* ?$ d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, v. k0 \2 E% ~9 H5 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) a% U0 C% X4 j# c7 j0 U
' U6 X$ e, R6 Q) e7 ]' Q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " s/ q# T7 n. l u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: Q8 k/ Q8 @( [3 _ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 E8 H: p0 D" R3 X$ m* `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: p- ~$ {2 ~' s& Q2 {
2 w( c+ j$ [1 ^7 y ` CSR = 0x0000;3 l2 m! ]) v4 J' Y0 R' a% y9 g8 b
INTC_INTMUX1 = 0x3d;- ?: x) N6 Q6 E3 @9 @
ISTP = (unsigned int)vectors;) p+ G' K6 n: q+ z4 q( p% x
ICR = 0xFFF0;
8 n3 a7 @ c- L& T/ [ IER |= 0x12;
8 @7 Z0 @! t' W6 t8 Z CSR |= 0x01;
K: D* y& T1 a6 r1 O3 m( Z% _' q! p0 ~
% F7 [, N) B, L: F1 Y; k( {
0 g1 _" x1 m+ ~2 h, C0 `' L8 x还有就是两个输入输出函数:
9 H: D9 @$ [! c3 } d- yvoid output_sample(Int32 out_data)
( p7 e3 U1 `% C4 \( P0 v4 G{
( a. n, n m$ F/ j AIC31_data.uint = out_data; ! k U0 A6 S5 W3 O0 {- e# c8 o
MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 ?+ @! O. U7 l/ N}4 Q3 r8 g, R( Z e# E2 l) Y3 u, J; C
1 O& e9 `+ X; ?& a1 _, B
Int32 input_sample(void)
1 U$ v6 g: I; D4 J. @{ 2 Y; C6 i) @: ]9 k
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ d& I$ Y, E5 w
return (AIC31_data.uint);
4 o% @- R: T9 H, D: {' `: i7 T1 X}
; e/ O# q; s4 v) a p5 l4 U0 f9 J) J8 J7 }( _/ y4 l
|
|