|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 A$ r% O& Q, h7 [0 qmain文件:+ L2 W K) _) O8 ?7 W2 m- w9 k1 B
interrupt void interrupt4(void)
7 Z; n# d: C/ R! R P& I6 J% [) X{
$ h u: }5 [- m3 @0 j8 H Uint32 sample;9 |+ I& C5 p1 G
& [5 ^( u# Y8 r2 I
sample = input_sample(); // read L + R samples from ADC/ n- z4 Y6 S9 d& F
output_sample(sample); // write L + R samples to DAC
( H0 \) z* U r5 W5 O return;; y! g' w, K0 s8 U* w
}
$ ^! h0 n! U" {1 s& P- s
- b* ~& G# E. r H6 yint main( void ): m# q& c; {8 Q3 Z5 v! g
{$ t! C! k9 @! _7 s7 P& i( y5 W ^
4 d2 |' v8 |8 S6 g+ Y @ /* Initialize BSL */
( x. Y& ?. w- [, m8 T, |) ^7 ^ EVMC6747_init( );
+ J. G5 h$ q) Z* G( y7 n+ r, b' e /* Call evmc6747_intr function */
( v- f: U& y' F* X0 l$ M1 ` aic3106_init( );
+ K/ K {2 L" t5 R: R G) r while(1);
' M. K# \: B# T0 J}2 H0 _1 f4 n" v2 p1 b) q
& p" C2 W5 }1 F/ d
! W% V* `( y t! a) F1 V4 Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( x) m* G) ]* \: O U
/* Initialize MCASP1 */! l# e8 U3 D8 C. B3 p' f' |
mcasp = &MCASP_MODULE_1;5 ~' l4 C* c& _- I9 T, o2 U& t
mcasp->regs->GBLCTL = 0; // Reset
3 R/ i0 E0 e1 }9 N mcasp->regs->RGBLCTL = 0; // Reset RX; _! f9 w# B \* |- q' U
mcasp->regs->XGBLCTL = 0; // Reset TX
& K" u- p2 e+ W Y mcasp->regs->PWRDEMU = 1; // Free-running, y- L' o# c! a9 e& Q
// configure McASP0 receive registers
, q8 a' D2 N7 O& B0 A/ K; s mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) A. s& f) s$ `4 y* J8 w
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 G8 p J; ~# f- z+ r7 M
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 v" t2 ~: \6 E; l" l' G mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 S- a, c' `# _/ g K mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)7 u9 u6 |' H {+ f/ L* h G
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 H" h8 T& h' } l4 O* s mcasp->regs->RINTCTL = 0x00000000; // Not used
+ _1 B9 Y6 B/ J5 D( Z! Y0 u mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: S& o3 p9 b3 E' z; v7 U
; m3 g2 _/ {) ~, H* i3 `% B D
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
, L2 ?: d8 `# r q/ H2 o# M7 [ mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! z7 F& ~/ E4 _' q0 V1 D4 l$ Z( B
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word- `( h6 N7 H; y+ N9 r
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( Q7 N8 {, i7 K3 J5 u, @* R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" }* I+ B- a6 S( C$ C+ f5 ^ mcasp->regs->XTDM = 0x00000003; // Slots 0,19 L6 |- ` k0 h, [6 N: N8 e
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 e/ [7 J% [- ?0 ]- a
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. i, L5 n* Z: ^+ \6 a6 x6 `7 q
- s5 G7 }! b Q: C4 l mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 T& Q7 P9 B& W3 L2 w% y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 v& b! v& C* V5 p' K* r \
mcasp->regs->PFUNC = 0; // All MCASPs
7 a) V& s5 h& O9 B+ U: e9 J/ j mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& E' L1 U& S+ g) _; S+ s8 a9 t! w
! B6 K) h3 c! P2 v+ k9 b9 o mcasp->regs->DITCTL = 0x00000000; // Not used8 Y8 ^% ]9 P% [+ [/ d" |7 `# I
mcasp->regs->DLBCTL = 0x00000000; // Not used, @. ~, ~( Z6 [; Q1 [. z- |5 g
mcasp->regs->AMUTE = 0x00000000; // Not used
+ p9 A: ~) V7 u$ _2 Y
( W4 `% z Y' \: B5 A$ N# s/* Starting sections of the McASP*/
8 n9 b9 x; u* F mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . F; A8 u0 L0 z; e8 }& x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 E! o9 v' L! D/ [2 K" ?+ r/ E3 N
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 V( B- l$ v% [# h2 }1 l. \( E; k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 f5 S5 U7 C' U% h0 a- Q4 F4 ~: u
. D; L0 L# W2 [ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
B: Z0 w7 F* Q0 q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 [2 s @! }. `6 X" j4 X6 ]- x mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / p5 U! H7 U& G! ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, n: n; ?5 q0 C% o9 p5 S
7 u4 _# n. b" h+ ^
mcasp->regs->XSTAT = 0x0000ffff;
) v: d; s, R8 i. f mcasp->regs->RSTAT = 0x0000ffff;
& p* n2 M6 v- g5 H* S8 Q/ L/ O: `, B7 s
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" s5 O+ _9 x6 O while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! W# r3 D% R1 H, U( W# D- j mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; N/ r# h( I; ?$ Q7 G5 a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. [2 F! {5 R8 C; [
( |1 z: @2 I) Z+ O7 U /* Write a 0, so that no underrun occurs after releasing the state machine */: l" I( i2 g C; P, X: s1 L8 A
mcasp->regs->XBUF5 = 0;8 i6 I9 a! A/ N1 b
mcasp->regs->RBUF0 = 0;
; X. ^( }9 y" @4 R( t5 W, v& o4 u2 z* a! G* C( b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; }3 P1 _5 K% y7 v- R- |8 k' v) p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. S% U3 c: i6 G# m% C. A0 S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 h# u3 Q& l( y0 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 y: g% u- K5 y* y6 G1 L
6 T& r# g& ~5 ~9 _- n mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * I6 N# K; w' k, u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. k( t# y/ P( n d( t3 G mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : V! |- Q3 I' h/ |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 i7 A" j6 L$ I/ Y' t( c/ T7 U
0 p3 `% L2 Y3 u1 A: _5 W CSR = 0x0000;8 x$ K6 x% Y3 ~2 H
INTC_INTMUX1 = 0x3d;/ a. N8 u$ h9 O. z, d; y
ISTP = (unsigned int)vectors;; H6 ]5 F* `9 X
ICR = 0xFFF0; + D8 z* H) C2 q# x
IER |= 0x12; - A6 q9 k1 Q/ A- ^
CSR |= 0x01;
/ a* r& R- o7 `' y& \: f
* q; ?; d/ H& Y, S0 x4 y- B6 R8 c7 _2 o" f: k. L! U
" m2 {( S Q0 ^# R2 B0 p
还有就是两个输入输出函数:# y7 ?# d% E. x: {/ z
void output_sample(Int32 out_data) e( v5 F9 s* [. q) D. b/ o+ U
{
4 m1 Y2 c6 X& x s$ `/ }, q3 Y AIC31_data.uint = out_data; 8 E. C7 i# L& w0 c; h, J' T
MCASP1_XBUF5_32BIT = AIC31_data.uint;$ P. Q+ I! V" [* G# \; z/ g
}/ G @; w8 ~* ~& x
7 j% p. M' b' u) M3 xInt32 input_sample(void)- K" T# {; k$ `4 u- l3 n- b8 R3 P
{ # p0 ~2 o% x" W1 i: R
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. @- i; o; {7 o- j+ Y" n# _" k! ^' x return (AIC31_data.uint);
) f' U; C, I. i F& u* h( h}
4 N3 V+ ~1 m& h% n! |: P, i* {1 ~1 f, l3 w* M" H' v
|
|