|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. {# J) a7 `% y$ C) q$ z/ T
main文件:
) q0 e% e6 |# n6 tinterrupt void interrupt4(void) $ D# j& r$ t4 ~! n) G5 g# _
{3 q" @. O2 C r5 }
Uint32 sample;
7 I, ^4 `7 N6 N8 m2 N4 V% R* J. {9 w+ w/ ?# ^8 G5 ]
sample = input_sample(); // read L + R samples from ADC
4 P" t2 i$ H G8 c3 r! t, c& H* a output_sample(sample); // write L + R samples to DAC
4 p; b8 c. C- m return;7 ?8 m" R! S- W* y3 B" u
}
. e; V) F7 d d) Z$ B/ x1 ~: k' N7 Q0 ?! q7 Z8 A# c' a
int main( void )
; J4 ]: D7 [: ]% q! K{
9 _4 Q1 o8 |/ `& `: n/ L* [/ S; G! p
/* Initialize BSL */0 ^+ x5 R& T$ I5 ?/ Z0 K {+ {$ i
EVMC6747_init( );
% _1 W/ T3 u% h4 T# h1 l/ n4 E& ~ /* Call evmc6747_intr function */
2 n% q& C9 v3 J/ Z, l& ~9 z aic3106_init( );
7 [+ ]# l6 ~6 B; x while(1);
% N# |. V0 R4 Q* u0 k}; q) |: B5 B6 p+ N
$ x! W0 o1 A$ C. R+ V' V2 w
% a; S- f7 X5 ~# Q. [+ |- z' M$ x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 F. d8 z F+ ^0 u& S& T8 |# J
/* Initialize MCASP1 */3 R9 F4 X) ^0 Q; n
mcasp = &MCASP_MODULE_1;
$ e0 O% W+ c- c) S mcasp->regs->GBLCTL = 0; // Reset
( k5 _9 h; H5 E- N0 e8 M mcasp->regs->RGBLCTL = 0; // Reset RX
7 F2 l) D, T6 c* r) a+ V- u0 m mcasp->regs->XGBLCTL = 0; // Reset TX
; P: U/ k, l @* p B mcasp->regs->PWRDEMU = 1; // Free-running
5 j+ S) O4 F0 F // configure McASP0 receive registers# O9 V: M, p) w" t) _6 E8 X
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used# V4 b) S+ V8 a! t' I: O1 X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: Y$ d6 p; U4 I. B! y7 J3 p: W1 \% C
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 @5 p3 |% h0 L. x) R mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* P" ^+ m M2 Q" K I mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 Z- o1 |% q2 `; Q# ? n7 U/ S
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 ^5 m& {3 V+ R0 s; N* e6 }5 @& ~ mcasp->regs->RINTCTL = 0x00000000; // Not used
4 f+ K3 \1 {5 \0 w1 F8 R# M mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( L9 F. p0 Q6 l( g- B2 i# C; U% B
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. }% f( d& f) I mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& R2 l+ N- F g: c mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, {+ Z. G! u3 t: \/ _( x mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) _% {. f( Z( C) z9 V& Y mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- G7 \" H9 w/ D4 X* P4 I mcasp->regs->XTDM = 0x00000003; // Slots 0,1; b& w, }% P3 g+ A: l
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. Q+ ]% F; F% }; \$ L7 E5 h0 j6 {
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; H4 @; i1 o2 ]0 }4 x4 O
1 o8 ]7 b% }$ d: ^+ f- t o1 d mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: Z, H- S. k0 M
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 b% J$ t; R: g6 \/ Y" ` mcasp->regs->PFUNC = 0; // All MCASPs& H) O+ r" H3 ^9 y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% j) L9 Q8 W5 j. m2 `# m2 ~
y( N( d- ]: M% m1 m mcasp->regs->DITCTL = 0x00000000; // Not used
$ D0 ], i9 S$ Z6 ] mcasp->regs->DLBCTL = 0x00000000; // Not used
J# }. J" U a6 t" C: N/ _/ @ mcasp->regs->AMUTE = 0x00000000; // Not used
2 z' P, b$ v( B( ~( w# M
' l6 _. n% I9 M9 h! R1 [, L: M/* Starting sections of the McASP*/; D1 t, w- O% O0 ^ R! B
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % k: M5 p1 t$ W) o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . {7 p; S# ?- `' t9 j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / q$ Z0 m: p7 a) n' T4 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( @, o) K* ?2 l: R: D4 C. d0 k
5 k ` H, R9 ? mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 x$ P0 L5 ]0 \/ ~* S$ ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 ~5 l" A3 B" p! j6 Y. z1 q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 _! R M/ z/ L0 G1 I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ ]$ Q8 T! m9 H
6 l1 x7 a0 Y- c% s7 B! Q" R mcasp->regs->XSTAT = 0x0000ffff;
6 `3 L! l0 _, z. S mcasp->regs->RSTAT = 0x0000ffff;
% Z& i# p8 h" w: z( k9 G4 _, j' D
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* g* v+ q" a% o& f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
i8 F8 G0 t+ j- b' ]0 n mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % o4 w; |, ~4 Q1 J& G' m( s9 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' I2 }7 c* c" f" W4 k# k
/ k0 t* ^( g- Z. Q1 W /* Write a 0, so that no underrun occurs after releasing the state machine */9 Q% p3 C* w g, g2 N
mcasp->regs->XBUF5 = 0;3 W5 m2 B5 A& u6 z& b, _3 G
mcasp->regs->RBUF0 = 0;: r. }& y( t. m9 F5 B
; H+ h$ }+ s& R; S mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ _* d9 O# P! P, q$ B* c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* w/ N2 y* h3 T5 @4 X7 u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : w) H# l% C8 Z5 u) F( L$ f j( \$ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, I/ v+ J4 K: y0 ~. }- X
$ D( s9 \6 K( A T
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 ^% x7 T/ ?% Y- z2 h2 Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& K! H3 z, {# p, m/ w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' {1 M2 V; V( x( x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# W% |, K. T9 k6 O) b/ ]
4 |" }# ? r( K6 @2 C) Y6 [
CSR = 0x0000;4 |; g* }3 R) C1 T% G2 e
INTC_INTMUX1 = 0x3d;
& u, ?8 r* n4 k3 W* W! N ISTP = (unsigned int)vectors;
! D1 T0 H' j9 y N& Q( A- p9 _# F! N ICR = 0xFFF0;
$ z% z/ ^9 n8 |6 i; L IER |= 0x12;
% Z3 _' y5 i. c+ q6 { CSR |= 0x01;
, f4 R) c A5 `/ h$ U# S2 n1 S& [* @, M' ]: Q( Z3 H% t
2 o- I. {+ Q$ W5 }9 _3 S6 S. Q& V3 q4 T3 |1 ~, s2 h, r
还有就是两个输入输出函数:) D2 k6 G8 B. N0 l0 a
void output_sample(Int32 out_data)
0 y% v! W* j$ ]{% P+ a+ U+ y j- @
AIC31_data.uint = out_data; 6 ^8 A! ^: W5 |9 m
MCASP1_XBUF5_32BIT = AIC31_data.uint;
( K5 h2 B3 Z. w( E/ C5 b" y3 P' N}
0 q4 }% ]9 f/ ]
1 l4 t _* W e1 gInt32 input_sample(void)
$ k q' X2 E% S/ z2 p5 m{ 7 ^$ I7 x. c# r+ x
AIC31_data.uint = MCASP1_RBUF0_32BIT;! j+ ~1 S# B T7 e$ U/ F8 r$ s- X( O
return (AIC31_data.uint);6 S( D; n) C: M1 g
}* y5 F; c0 h6 [! a* W0 g5 v) h
1 b5 r2 |6 r3 h, `( _# ` U |
|