|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 Z c6 H4 Z) e- v9 b" lmain文件:
$ o! j6 q; T, C4 l- ?interrupt void interrupt4(void)
+ G3 K1 A- T3 [& ~* R{5 K( V+ C0 M4 j; A
Uint32 sample;
: K; m9 B: A! n ~# e) `$ H8 \3 U
* ]7 H* R, |8 b3 k. e- h, g sample = input_sample(); // read L + R samples from ADC
& F" x) d: S5 v3 ^3 d9 q4 w$ q3 { T3 ^ output_sample(sample); // write L + R samples to DAC * I8 ^9 I- ?" h8 T1 w: w
return;* V% a3 R p. D( V
}* f3 ]5 g6 i- ?7 q3 V
# k9 }* R$ r# c# q6 X& Dint main( void )
3 |" D$ K, e( U% S( u{2 M$ L$ c% V, l. ?
4 d) s% I9 k4 n9 Q. R) ] /* Initialize BSL */& L; r/ i% b) Y' |# K1 `0 U' f
EVMC6747_init( );
% v( a; O' k" l# w /* Call evmc6747_intr function */
/ H7 s' H: K! W& u. Y1 T" E aic3106_init( );
# ? H. b5 _" W4 a# v while(1);
0 b8 y9 T: h4 L& p4 q5 Q}
( Q; L5 ?; b+ H" P
: \/ F# @ H k* k- y0 _# f9 B: i, `
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 T( P$ p& J: t0 }4 E0 F/ C* O, L
/* Initialize MCASP1 */
- Q) k8 l% L. h! O- e, B mcasp = &MCASP_MODULE_1;
: t- H [/ I. Q: c mcasp->regs->GBLCTL = 0; // Reset0 ~% X: i1 H, ^: r M% v: Z
mcasp->regs->RGBLCTL = 0; // Reset RX$ j6 h+ d% e" l# n5 E
mcasp->regs->XGBLCTL = 0; // Reset TX
/ |& ^: [3 H r2 I. B* e mcasp->regs->PWRDEMU = 1; // Free-running& n9 [ s/ [, a4 b4 S+ ^
// configure McASP0 receive registers
: ^6 N- N- d: I mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! W$ z8 E8 D' L* n
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) B) s* z; {3 C: b) B mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 c- [, {# u6 T U7 G mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 O, G+ g0 ^. h' b. B6 M
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) ^+ f& G# C/ C% M/ d
mcasp->regs->RTDM = 0x00000003; // Slots 0,12 T9 x7 x: m8 P. w4 s
mcasp->regs->RINTCTL = 0x00000000; // Not used
6 R% [6 c9 I; _& e mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ T7 d+ [8 ]. K% P K
, o2 d1 X& @9 { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 r5 x4 J- l7 ?9 j; Z
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 W/ `: [* S1 x& J mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, a3 }2 _( n. S1 m5 p, t mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ E" _6 ^2 L% ]. e; b mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 ^$ g+ G: w) ]$ V mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) Q# w- ]! e A7 g6 ^ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 w/ H! i: g1 o' |" U& Z0 ?; n
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ S4 {* }$ o2 Q
p5 W5 W- d+ w+ \* F" t: O mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- `: i3 Z, B9 q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( f" K& b# Y5 \- f" m
mcasp->regs->PFUNC = 0; // All MCASPs
5 L3 a" ^( c# L! Q+ V/ u3 @1 [ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' E5 e) o0 P5 O4 ^& Z; m' Q
5 v) o0 K& m* l& E! a' r: n mcasp->regs->DITCTL = 0x00000000; // Not used
" v5 O, }# e' |) T- P6 \ mcasp->regs->DLBCTL = 0x00000000; // Not used
* p" H, ^& z1 i9 G mcasp->regs->AMUTE = 0x00000000; // Not used$ Q. c2 o" f' [5 t% k* S% t( A5 w0 E
7 B, J3 C% N4 M4 s, H
/* Starting sections of the McASP*/
8 ^0 ]+ C6 c3 h3 I2 Y$ O' R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % l" p/ t8 | X' a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + i# m- F$ W" h' {- C) D
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# Z9 }. a r i" O" L3 Z" G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ V. o/ K1 u5 I+ Z( K& p4 ~! Y; |: E8 h6 {; j
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 [- S; ]' y2 g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ e0 r" k6 j0 r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) X- a' i) b* J# s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ p" y2 X% _- q' z' P9 E0 i0 b: ^* g. i4 g" S& N. A
mcasp->regs->XSTAT = 0x0000ffff; 7 Y! k+ i. W1 c
mcasp->regs->RSTAT = 0x0000ffff; # h- @, B8 ~$ L! X9 v y( u) q0 ^
5 ~1 ?( @3 u3 w2 F0 y+ C' `1 T3 J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! A9 l2 S/ V# i: E1 @$ k/ Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 c0 `& D4 u. i1 `7 q0 H mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 j V1 W6 p7 X% j- ^/ [ O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 a. n. L- O& h/ m8 e ~& b" Q& f
$ [% g" P- ` ~ /* Write a 0, so that no underrun occurs after releasing the state machine */( c( t3 X# y/ {% {( Z
mcasp->regs->XBUF5 = 0;5 W( Z q0 h2 s8 o
mcasp->regs->RBUF0 = 0;8 M: S$ u9 ~- ]- Z1 l( O. m7 k! n+ }
0 Y: r: |7 {8 ^. D' l* q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 A8 y$ ?6 J' ]+ E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% }/ _+ p9 Y% h1 p( b7 \ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 f8 A. N$ M# P' { _) I* S6 L# y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: ^0 O! |& Q! U( y! S. t
7 |$ X: J5 Z) a# Q+ F& z9 {6 o mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; V" N! m$ I! \4 y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 \" b$ w# W) J( C1 z8 @6 [2 ?: s mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 Q; C5 i0 {) M# }% P7 Q, g2 Y2 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! X6 r& _$ g' a( j8 |$ l
# b) Y/ H, k! M k3 r
CSR = 0x0000;
! z' _- V/ Y6 a* a, U- R" v INTC_INTMUX1 = 0x3d;/ s9 W* O/ B8 N
ISTP = (unsigned int)vectors;
5 K5 u2 ^% A( }; X ICR = 0xFFF0;
% B" ?& Z$ `( V$ u2 U IER |= 0x12;
0 q- F a0 b6 q* ?3 ?% Y, Z CSR |= 0x01; 1 } c! l6 S' I+ V+ G" F" T9 F
" ?: y( Z5 o/ Y6 Z) @: {1 @& r: ]
1 R9 y4 D/ b. T. V5 x L8 v$ E/ ]$ J# B( E* j7 w7 h3 X, {
还有就是两个输入输出函数:3 t2 j' G) n3 `# R
void output_sample(Int32 out_data): S, u! ?7 n7 V
{
. p. |9 `4 z Y) \# u, }( f( j% z AIC31_data.uint = out_data; . v. t$ G; t7 R( b" ^! c
MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 z2 Y+ \! c6 \( }$ D}1 t5 f: U( ~0 g6 ]
$ U/ ?; k$ y; SInt32 input_sample(void)
, P6 M8 g# f) e$ V{
/ v0 ]! m7 u1 R AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 _. ~/ W8 ^# Y, m$ l6 b return (AIC31_data.uint);7 I) Y& u3 q' y9 b
}
5 b2 c* w& V# l2 z3 _$ ?4 @ A& o g% N& q! [$ Y2 T' u
|
|