|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 g5 H. h2 L5 t$ T! y) o+ w2 C( |main文件:
! o& w: q2 d; x/ k+ qinterrupt void interrupt4(void)
0 n6 w& z v: D4 O{2 z" k! z. h. } c# d
Uint32 sample; }5 ]5 i E( [8 J$ s% E# b; E8 }
L b$ f8 T: x0 ^ sample = input_sample(); // read L + R samples from ADC
8 [) p% B! d8 l9 q* X& | output_sample(sample); // write L + R samples to DAC
1 [' U) s+ d3 G+ d4 A4 [9 P' h5 h return;
3 P0 w0 G) |) q! G; U}
1 W8 l: m: U7 w3 {2 J# Q+ W% {
* K1 m7 q+ q$ M: j1 vint main( void )
: V3 Y3 L" j$ w# m; Z6 ~{3 {0 n1 h- t& _- f5 B% E, o- B
6 L3 r9 a6 N" m9 D6 l7 l, D /* Initialize BSL */: q0 e V: c, f2 g0 c% e0 v7 P
EVMC6747_init( );* }! N7 `4 @) o3 r$ Y# e
/* Call evmc6747_intr function */4 Z% V; q& f a2 d8 E
aic3106_init( );
: \& Q4 q+ s# l+ o; O5 { while(1);
. G# D$ N" P4 E) a- R' `}0 i+ h {6 W( [8 }; S
v& b+ b @/ z7 ]/ N
" B5 D8 s C7 _0 z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 Y: V3 Q" s% S) K8 _
/* Initialize MCASP1 */
/ Z3 G! S8 U3 [) X mcasp = &MCASP_MODULE_1;1 c6 R t3 D5 a |$ J
mcasp->regs->GBLCTL = 0; // Reset
O a. }5 [, ~- Y& K+ b mcasp->regs->RGBLCTL = 0; // Reset RX. R3 H+ ~/ @+ ~+ W
mcasp->regs->XGBLCTL = 0; // Reset TX
- m/ j+ j7 L# _/ Z% f2 v# f6 S mcasp->regs->PWRDEMU = 1; // Free-running. q. I7 I1 E( Q q" ]5 `
// configure McASP0 receive registers r5 s4 P. W- }4 [' K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 b/ B" c5 W2 S+ |/ v% K6 j
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& Q" E* v3 J6 F: N# f1 j, y3 q mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! A7 N, Q- S* q Q5 H
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- w# A) b# A! J& F% @3 {+ N% F
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
8 @; i4 u1 O% g$ c. u2 \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1- {% ^! f( }# w9 E, Q
mcasp->regs->RINTCTL = 0x00000000; // Not used/ W* |! l! a$ d: y( D. n
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 P9 L6 w' T5 H1 }
' N2 P/ ~/ [$ f! g5 t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used# j! i% \9 g) T/ l& S& A ^! m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- n4 L a5 m& X% t) B, S: I
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- V, l0 ]- L" z' J6 E) ?- _* ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* w% ?% [- O0 N+ ^ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 f$ d( k. I- P, I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
7 ^4 J% ]; M L* R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 }0 h2 ?! Q0 s, ^& d7 Z8 g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 B9 n: X3 V1 c+ N; T8 \. }# z
2 @+ @7 ?. C* L# F
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 m1 M6 }+ z$ m mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. m9 _8 C( Q3 D: V1 B mcasp->regs->PFUNC = 0; // All MCASPs$ h4 L3 p! i0 G: e8 K
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 _) o9 M' n6 Z% [9 M, \% C: z; E( ?
& E% ], h; o6 n; M" a" E; g mcasp->regs->DITCTL = 0x00000000; // Not used
* t" R: c, C. \5 K5 c mcasp->regs->DLBCTL = 0x00000000; // Not used; |/ [$ B2 ^6 U0 J: G* ]8 \
mcasp->regs->AMUTE = 0x00000000; // Not used
- M1 v/ U& N* Z. z8 n2 }! Z& u% }2 T/ P5 C: s8 C- C8 w
/* Starting sections of the McASP*/
5 s/ X4 f) w; k% D, F8 Y mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 ? `1 O. v5 K R7 `# c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# ?" L0 r4 _6 y/ K( l! N" B mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( A- P+ E( {0 N4 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 J/ g7 S% {: [ b6 x
9 P3 w$ T: O$ u3 s0 X; e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 A h% a: N2 i' _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( g) Z+ W! q1 b: @; f1 o
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 F6 U" y' X& [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 K' e$ A/ E( {" D2 c4 T! K* N1 |0 {& L: Z. m. ]
mcasp->regs->XSTAT = 0x0000ffff; / S$ E1 p' \+ q( o9 Z. \
mcasp->regs->RSTAT = 0x0000ffff;
0 c8 O* Y( z2 h1 u
% d" h$ Q2 l! @ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# p/ m* u) y3 y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 N# F) [! N1 C m; h* s- V
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 d, L7 C2 V% M9 d: J. n ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* q# O% T/ v1 h8 z/ M
! D* L6 e$ M; O# t) |- t2 m /* Write a 0, so that no underrun occurs after releasing the state machine */
7 I, E/ F3 W/ y mcasp->regs->XBUF5 = 0;( n* d9 X0 ^: A) J3 a3 X ]
mcasp->regs->RBUF0 = 0;/ u$ ?! z' \% ?) D- h. W p
! P2 S0 K& K C. @
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 @8 Z( o/ O! g3 [: e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 g0 D0 \, F# M- W4 k, p: F1 q
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; O3 k5 p! p3 R6 M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 g6 K4 |- s4 M$ X) S, g% F" ~+ B- ?3 ^7 |7 D. I
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % R1 E- R; A9 L) E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) s, O& y& t, ]# M3 E- r/ A mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 S+ ?' Z/ i( B! K" W8 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 Z) M" L: E, T
' |7 g/ E9 V8 J: y* w f F. j
CSR = 0x0000;! j5 w) ?+ q& j' m7 c/ `
INTC_INTMUX1 = 0x3d;
" ^! g) ?2 A- R6 b: ~. [# j ISTP = (unsigned int)vectors;& o& }6 K% o" p* o; z1 z6 I U1 P$ q
ICR = 0xFFF0; ' `: x8 f0 C. z ? P
IER |= 0x12; - x4 y& r D# q7 G) n# C
CSR |= 0x01; 7 p! k( g3 H0 C$ F; S
, d4 d) b* n! C) [$ u+ l0 }$ i
$ c7 \! G3 A" |2 p$ Z
- E. R: w& G1 t还有就是两个输入输出函数:! k2 v$ Y9 ]# p
void output_sample(Int32 out_data)
: w2 ~0 D) }; l( I: _" V ^{; e' b; q' f( O5 p) D
AIC31_data.uint = out_data;
! ` @6 g1 m5 b1 w& P MCASP1_XBUF5_32BIT = AIC31_data.uint;0 R# W1 x1 y# ?- r# N2 M" Y' ~
}+ V' Z0 x$ q) A7 V
3 V+ X1 c7 ?1 p+ f$ v$ X# PInt32 input_sample(void)
# m( D: x& z0 k/ N: Z0 o7 ]{ ; j! m5 }2 d. s" A
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. S0 j9 ^1 r$ ?. `& S, ^; n2 S return (AIC31_data.uint);
8 r3 j& T$ k' r8 o# C& D% \, h% Y}
5 a) [0 c: }+ _/ O
* M8 M' Z: [( ^+ X6 ` |
|