|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" Y+ S7 F: O( {1 K% c/ |$ C# p
main文件:# Q2 f6 F2 ^- R# c) x
interrupt void interrupt4(void) B9 {, H' @, O4 J, a6 U
{1 @! [2 c) n) y0 s/ D* o1 `* H
Uint32 sample;
5 k/ j$ j7 I4 [: B- T8 c4 U- A1 q- K8 @6 E. h, ^
sample = input_sample(); // read L + R samples from ADC
d r/ A2 j5 ]* I output_sample(sample); // write L + R samples to DAC " A1 @* p: U- Y- i% J0 n( C2 d: t
return;
; y, H0 F6 z. o}. h6 q2 x6 ^1 a6 E" V
- n( g5 [$ ?& o8 d2 ^9 F
int main( void )
3 l) A$ ^8 i$ E8 |) q5 i{
5 L# Z( d* M: v; B. Z
6 M$ \2 [6 }) A! f7 a /* Initialize BSL */$ |# M, N& T* L. k9 O, l. t
EVMC6747_init( );0 f5 i% x$ p) P7 H
/* Call evmc6747_intr function */
9 P% m3 c# ]/ W2 D' m* l aic3106_init( );
8 K( g z8 I* [: m9 i7 C while(1);
5 s8 t: Q% r6 e! _0 \}
( T- S7 V( v7 S2 ?
8 h/ P6 u: B7 k/ ~ A
+ @2 n# N; w0 A- b: i; C1 I! I8 c' [* }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 T! I" m7 m- L/ k: e
/* Initialize MCASP1 */
) n. ~( Z; u" h$ D1 ]( l mcasp = &MCASP_MODULE_1;4 J8 y* k8 J( t, j- h- J
mcasp->regs->GBLCTL = 0; // Reset4 Z8 h% d6 e, g4 K
mcasp->regs->RGBLCTL = 0; // Reset RX
6 b" i5 y/ o- z% V: j8 z1 { mcasp->regs->XGBLCTL = 0; // Reset TX q& ~# G8 \9 U$ }6 h7 e5 ~3 u" `
mcasp->regs->PWRDEMU = 1; // Free-running
3 l3 h! C c3 v5 O) e2 [. K // configure McASP0 receive registers' R( L3 P" K" j4 N
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ E3 S% f5 ]- I1 I# M mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" f" Q# M& o2 N
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; P2 k# s7 W2 V$ V* o mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ B% ?9 I8 G7 B; u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)' V# N' A: V( `" A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1% d, Q' ]' a: v, F8 _( p
mcasp->regs->RINTCTL = 0x00000000; // Not used
& @7 U7 C1 G/ P3 }# @3 ^! R* H4 h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: f3 |& G2 K. {1 p
0 A0 K0 d, m9 i& L$ @
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
0 z3 f& Z; `+ z# [/ ^0 q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 Y( ~# V( C( W2 y; d! N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 m* ?( c( u6 O5 ]0 q* A mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: l5 L. D, \. u( Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 X7 H/ b" ^, b$ H) ]
mcasp->regs->XTDM = 0x00000003; // Slots 0,1 E5 T P$ d: J4 u2 G
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit; @9 e; {. m% P# k0 l% f& E
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) ^( |$ ?9 o$ M. v* }$ {$ U2 s" f
, o% p% L3 \8 p; \. y7 N2 b/ o) ^ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 D" v6 z/ }; F8 |- J mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
q0 g g$ _3 [9 H$ d2 b mcasp->regs->PFUNC = 0; // All MCASPs
* A# P( k4 ^; O4 t& A0 F" N: c mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' [2 c4 I# B9 z2 h
, y6 X8 @. ?3 a5 o7 k mcasp->regs->DITCTL = 0x00000000; // Not used/ t* Y3 n8 k/ f6 E4 V0 o0 @8 r2 W
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 Q) g+ @1 @0 ?. y& W mcasp->regs->AMUTE = 0x00000000; // Not used& [9 I6 k0 y$ V3 r( L- y" Z
$ Z, d0 { f% ^" i2 {$ t
/* Starting sections of the McASP*/
: J7 S9 [5 A* ^( M& }% {# B2 J mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# G3 e9 o$ f) r' |; v+ N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. F6 [% p4 x( W! F- }( g7 A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Z2 d% i+ D, t& D& }7 B8 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 o5 ~1 d7 R2 u+ D
) P) O+ w: H( F, o# m8 ^) Y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / G, D( K, X2 F- C! @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( n: S' X7 r" F% p' u mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 x1 j Z1 C' s: C( C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! Z# ~! j# h* A
) C' W+ }' `& v$ Q4 m9 t) k mcasp->regs->XSTAT = 0x0000ffff; : R, D* q4 T- p5 q0 r1 _! I+ Y
mcasp->regs->RSTAT = 0x0000ffff; & ^2 `$ q1 M, v6 a
' b/ E5 [% ^2 d) a0 ], z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 B. n% e E) G2 w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; z4 [6 A. H+ Z+ U! J8 T; T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 a: P+ T* j2 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON ); ~) D" `0 N4 j! d
1 J/ w. ^! `* i, u" B. n0 q /* Write a 0, so that no underrun occurs after releasing the state machine */6 B* T1 b1 C7 g: S/ C( w, R
mcasp->regs->XBUF5 = 0;
- B& p/ s: _ ]/ R# `6 c mcasp->regs->RBUF0 = 0;
: o7 F) x2 M- K# s8 _9 k) X9 R
5 r3 @5 W1 h) H# `, ^* A mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 C$ F. l# i% a6 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: v8 x) `; x, `! I
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 F. H! ?' e9 q- p) A- x, N6 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
C$ C% M3 Q+ O0 v6 n% b0 y0 V
4 p8 d3 \+ D0 y) `0 Y* N) @( q0 o% p) t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ e% _! U) E4 _. |& b7 J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" Z- ~" _6 q) k- q" J; x1 s
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" n( d' {3 O9 c) y2 |6 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 H) @3 Z6 M$ x1 x4 G5 |* V. }' |) L8 H' C% e; a" E
CSR = 0x0000;: R. D8 n. {- X* d9 Z
INTC_INTMUX1 = 0x3d;
$ c: F* K; G0 k3 @& ]0 E: O4 | ISTP = (unsigned int)vectors;' ^# L& U p' M# [) D; F
ICR = 0xFFF0;
5 ^* K; y" [# p" G IER |= 0x12; ; U2 n0 ]/ R, }/ P8 E
CSR |= 0x01; + Q2 o! S" Q5 ?- ^6 d% M# [
$ X3 j) S0 o+ T/ |+ E. f
% Q4 b7 J" Y# d; Y
9 g4 Q. I1 q: E还有就是两个输入输出函数:" o4 Z" L2 [& S. m* H
void output_sample(Int32 out_data)7 i! w* g" B5 P8 L( ~( b% I
{
: I# M- F e% Z+ w AIC31_data.uint = out_data; " [2 ^7 X% C6 I6 I1 {) N
MCASP1_XBUF5_32BIT = AIC31_data.uint;
! [# {: y. p. K! O) v}
. M2 \* Q9 ~$ j' [+ m0 O3 d) d, h L- r4 G
3 U5 m" x& `4 f4 s. m# Q! T8 TInt32 input_sample(void)( W" j. ?: H/ u z2 x
{ i% |4 L* y0 j( H- @
AIC31_data.uint = MCASP1_RBUF0_32BIT;- G$ d2 U5 M- @! J/ {7 O
return (AIC31_data.uint);) m3 u! y/ x# f3 @" m- d
}$ p3 l6 `4 D, E% P0 Y2 A! }; m
% y' G4 E# W) ?! e2 y$ a- [
|
|