|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) N9 h! u G' P8 U( zmain文件:
/ p8 j7 V$ Y$ N7 Z# z ~interrupt void interrupt4(void)
5 t. l- `) A9 m{) N$ f; f3 G: T! c
Uint32 sample;
. G2 S. ^4 H' p2 y* e$ O* l4 q0 p/ p2 a
sample = input_sample(); // read L + R samples from ADC
8 @% I2 P: y4 A- g9 V) W4 v. Z K output_sample(sample); // write L + R samples to DAC 6 y/ e0 x6 I+ [ Z
return;9 o& I9 C1 Y2 z; ?" t" S
}
$ [" p0 s3 }. h) B) N& Y( G% T
* Z" I8 R( M& p. w( sint main( void ), }+ K( j, |& `) m% i3 {
{
+ w2 {" W# N$ P! \* r5 c7 @ Q s0 M8 v
/* Initialize BSL */
$ ]! _! ]+ k2 \7 S4 j" ~0 c EVMC6747_init( );. [ x/ f, [ v
/* Call evmc6747_intr function */
. p3 K+ C( R2 \ aic3106_init( );
9 Y( N" r8 d* A4 c! ]+ L9 { T while(1);7 Y) u5 n/ p( A: p+ U
} J! g9 k) Q7 T0 N" k5 a$ h# }9 w0 G' ^
/ s' m( A- c' h5 u
# d2 k, u3 y6 O+ ^+ j( w% `9 r) |
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ l' c7 G5 q+ ^& n0 \ i1 _7 _* p
/* Initialize MCASP1 */
* f: A& ^: W6 ~; f$ d/ q mcasp = &MCASP_MODULE_1;
7 h+ |# X( l2 T" `5 m+ D0 ^ mcasp->regs->GBLCTL = 0; // Reset
& S3 Q- Z! z' X: b! f) g5 c+ N& J+ G mcasp->regs->RGBLCTL = 0; // Reset RX; O3 }, r- {. G$ o0 G; x o. o, E5 R( w
mcasp->regs->XGBLCTL = 0; // Reset TX( c; a* [/ ^. Y. m$ _$ n/ c4 |
mcasp->regs->PWRDEMU = 1; // Free-running3 S; a& m8 h/ h0 y8 o+ Y; Z. O
// configure McASP0 receive registers' J* a" x" g, M1 _: R3 c( Y9 m0 X
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: N' x1 w' j9 m3 u, ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ t+ H( z1 K; M
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ @/ E! |' N# |3 E6 k# o" k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 j0 a6 N8 B3 y# s* h3 Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 t1 X8 P$ w! d2 q3 W
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
1 H w" b' F" \0 f& c; s mcasp->regs->RINTCTL = 0x00000000; // Not used
% A3 d+ E1 L" C) G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! r: x3 L. F7 ^# [2 _1 l, f: r
, ~' N. F) j0 H. N1 @+ f mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 E+ |. k9 G G2 A' ^# b! I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y) s2 z8 H& t mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ A% J) F; r3 ^1 c* p3 |! x mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; Q" R# U" H: p" {' a H0 u
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" A8 q. }4 O( t7 A' y# B a, \- [ mcasp->regs->XTDM = 0x00000003; // Slots 0,1
M& V; N0 Y6 e- T mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 A. @! U' \! Q6 K
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* E3 n4 _" Q( @" i! Z
4 y+ c O$ l$ e7 d mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 [& G6 B, e$ o9 u7 c K. I mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" {, i8 ~+ b% n1 c; v mcasp->regs->PFUNC = 0; // All MCASPs6 z/ l$ p4 }9 V D
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& ]' J9 J2 C% c2 O/ b
4 ~5 Y3 N- }& q/ v
mcasp->regs->DITCTL = 0x00000000; // Not used4 V3 O- y5 ?' {! R- ?1 @2 P: x/ @
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ J2 F" {7 \" y* F mcasp->regs->AMUTE = 0x00000000; // Not used
+ g. i' q% L% c9 h" q" |7 r0 g2 {. {+ I$ a; i6 K4 `
/* Starting sections of the McASP*/& e2 b& b% ~2 D4 |
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 ^" q; k9 G6 { S* l5 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# z: v* j7 d" d$ i( l mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 y4 z& \9 _* ?$ _, t- ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: [5 p7 y P) ?& P: v9 K- z
$ c* c& O; y$ r* v l mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ \8 j" |: y) |8 l' v6 g: |; X2 V7 E4 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ f, I+ g. {9 U mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & y' p6 B D% }/ U# _2 {( f; F; w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- a% r2 _- w- X) \
* B- G* x3 _4 A
mcasp->regs->XSTAT = 0x0000ffff;
2 G, U. Z1 F; i) v( o mcasp->regs->RSTAT = 0x0000ffff; 7 N1 a" G' K- |+ n
5 Q7 i8 G% Z+ I6 c* G7 O; l mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. |1 A+ V3 G4 B( v" f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: L V( a6 K& N8 u( C2 Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 k! P6 d1 P1 D9 Z& d; V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 C/ [/ B J4 v5 c$ j0 ` q3 ^. J) e% }* Y
/* Write a 0, so that no underrun occurs after releasing the state machine */1 g' r8 Z' u' ]6 Y2 l8 o
mcasp->regs->XBUF5 = 0;
/ p0 t6 _# a) d( \! ?- w# @0 C7 z8 z# ^! L mcasp->regs->RBUF0 = 0;' }# p% s2 o9 z$ L; e. c+ Z& i
5 I& S! I1 X6 N8 G6 Y2 }
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 w- q0 P s6 z% f# g; V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 v% ^5 u9 n1 B8 F" X* H mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 f, T: A/ y( s; d8 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# e$ L' n7 T+ _9 ?# L& X
% n% M3 Z# s5 n' T, ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ r. |9 i: ?( E- x) ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ e( Y6 @. o4 A' m% C+ k
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 _/ n4 G+ u+ e" c- K9 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" W$ P5 }' V7 X: R
. D2 @$ H( R2 M* `% U/ ?# i CSR = 0x0000;
" ~9 n- i8 m' c INTC_INTMUX1 = 0x3d;) V0 c1 P+ u1 N! S" a
ISTP = (unsigned int)vectors; n% |) J4 w. [# h2 F
ICR = 0xFFF0;
1 S) Z$ k$ l+ r IER |= 0x12;
0 C% m) |5 G1 n" R: Z; \- r CSR |= 0x01;
" s" E8 @9 ~6 X- g9 Q. P$ d( h9 s* |
9 ]9 I) a; |- o+ ^* a
# Q* L) H% [) G8 \9 b' x- f
还有就是两个输入输出函数:
4 B( X& A: L! N2 e- `, G0 P5 yvoid output_sample(Int32 out_data)
* \3 [3 o) y" |{! l) b0 m: o$ A
AIC31_data.uint = out_data;
, l+ ?- L' H# _ MCASP1_XBUF5_32BIT = AIC31_data.uint;; N0 y$ u* N) D" v$ u4 q
}
7 }' }$ x6 K: e! P( j; a2 c
8 p9 z) `: Y$ ]$ i3 ?; eInt32 input_sample(void)
- \! Y. ^- Q% W# F% q" B$ [+ C{
. G) |1 k% E% D" s AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 V9 N$ n5 ?0 n$ } r% c return (AIC31_data.uint);; c2 m" L+ i2 x# s1 t3 C/ H' {9 f
}$ O; w& s M( t1 ?! e7 B
' w3 F+ ^3 `! W7 q6 c6 W) h& c8 U |
|