|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' W& }7 {* `" x) x! S/ u; s, u1 Vmain文件:& i. p- H; _+ T- A" y
interrupt void interrupt4(void)
7 w$ Y9 A2 W2 Q" Q6 [, G/ ]) M' ~{. V* i# |) z+ p
Uint32 sample;2 A$ q4 a; Q4 L2 a% R( Y+ b' M/ l& V
9 a1 u+ n, n7 \. D
sample = input_sample(); // read L + R samples from ADC( B p( }4 u/ T4 s. d# D
output_sample(sample); // write L + R samples to DAC
7 a0 o2 u; r- G5 g4 u8 ~ X& D return;
7 d9 W" j6 T) t9 O# ^4 m% z( j: N$ Y}" j- Z% `( N: h; ^, |# K2 F4 h) g
# p$ Y, n8 _) M& d7 o3 Hint main( void )) ]6 w8 b$ s5 D2 M
{
V! n l8 V- O8 m, U
$ ? [8 D* \' S2 D) d /* Initialize BSL */) w) p& q' T/ ^7 Y
EVMC6747_init( );
3 a# s, v8 f1 G, L V0 J* w" x /* Call evmc6747_intr function */ K8 U: ^+ L8 H, ^% D+ o6 L
aic3106_init( );% t. o) H+ [* G9 }
while(1);* J4 X3 w, i; @6 w: q! G0 l6 V+ I
}
a' M) I; S+ H; p- v
. n4 I. G3 T! ]% g
4 X+ N( a M: O8 J" E: R* k3 Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ B/ }5 `: Q! H: y; I! b8 R
/* Initialize MCASP1 */' k5 P6 D9 e1 b1 D1 G4 O
mcasp = &MCASP_MODULE_1;4 K) I, T8 S w
mcasp->regs->GBLCTL = 0; // Reset& {, D( g8 O1 N1 O5 ^
mcasp->regs->RGBLCTL = 0; // Reset RX8 ^" x" R/ j( X3 |! J+ [' @2 ` |
mcasp->regs->XGBLCTL = 0; // Reset TX1 c! S" j' R9 R) K; t
mcasp->regs->PWRDEMU = 1; // Free-running% c, r# T% p7 g# }; Q9 L: ?
// configure McASP0 receive registers
+ T1 M- {" L, h9 Y$ b8 \ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used' W9 m6 |3 `' k+ |8 N$ P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 C. e, _5 M/ Z/ m1 E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ j. F* a3 t, P: A' h mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ t$ E, \# C1 l" t
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
3 I4 A# B0 y) Y0 \1 ^! l mcasp->regs->RTDM = 0x00000003; // Slots 0,1 `1 v- G) ]/ o* |% G% \
mcasp->regs->RINTCTL = 0x00000000; // Not used) W# V) z' [! S7 v h: Z" r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( ?4 K. R9 `2 V
l& U2 B2 q. E3 j. V* Z! ]
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
* M! l# m) ]+ g mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( _. I7 P( g- K3 a mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 z: \1 \3 R. `: d( Z+ k
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ H) M6 Z2 d0 E- I: B& C3 k( P mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK I' B5 j# z2 m8 d! ^# \3 x9 O9 u" i
mcasp->regs->XTDM = 0x00000003; // Slots 0,1. s2 l( H" V `& s; }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
: H) K R& H, x" O; x mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ _% Z* K( C. Z' ^
& M- s5 }8 _: [/ e4 j mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
* u# ]( w5 t6 T( U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! ]' n" E% G. ~& v8 G2 S mcasp->regs->PFUNC = 0; // All MCASPs
0 k- L/ A- e3 J8 ~3 W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 P" S- z7 D) l; E. A
% b) l! A0 b1 @4 D' u2 y mcasp->regs->DITCTL = 0x00000000; // Not used
' x( p# w+ G: ~7 S4 P# N9 W mcasp->regs->DLBCTL = 0x00000000; // Not used* G7 U2 C' V! |+ X
mcasp->regs->AMUTE = 0x00000000; // Not used* I! j' x# f; U/ L3 _" H
& b+ ?$ A O7 ^- I, h
/* Starting sections of the McASP*/
/ s, {1 i& @1 b1 J! A/ g* Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ L; _3 u# p- @1 B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & V0 e, A: F% D' `# k
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 E1 n: H! n( h- ] W7 b0 u2 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! e2 J! _0 Y$ E8 o7 }" v
+ L1 o# Z( {1 M* Y, R/ P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) D; e* s# R% R: N+ y4 [# e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, _# \0 ]3 h# Q8 F- x7 q2 `, R mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( }: w2 w" ?. l+ c7 P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- A: }6 `8 R2 F/ e' N0 @8 ~7 t8 p
4 V6 C: T* [' p" g! S mcasp->regs->XSTAT = 0x0000ffff;
* _: R# B1 q+ L8 f: O( j% w/ V mcasp->regs->RSTAT = 0x0000ffff; $ ]6 S" [! M2 u2 E8 y: u2 [ g
: j2 M6 a! p4 r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! b h8 G0 |1 S) l9 v9 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ V) z @7 q5 l mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ J5 [: d$ v% F5 n: d$ b- n! D$ b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, z! z$ i) S O F& m. |6 U. V/ h
/* Write a 0, so that no underrun occurs after releasing the state machine */
8 K7 _$ }! f/ y9 N) [ @ mcasp->regs->XBUF5 = 0;
' N# L. ]. ]. q T+ o) n mcasp->regs->RBUF0 = 0;7 h2 X' F, ^5 J% _
8 I. x9 n1 m; z7 ?; F- ?5 e/ p
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 O, b ]9 X9 e7 s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' ?7 V# E/ L0 r( }$ I! H
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 q8 L! X8 w! A1 n4 z) Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 g9 C1 j2 I( j/ t& B. w0 h; g
2 G# L8 W$ f. g( |0 t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% }" p r3 w o" {8 C2 P+ Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, y {7 z! D) s% n# x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: T1 e+ t1 Z, z1 k& J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: V& E7 y: C0 z ~, P2 x, j* ?( p% j
CSR = 0x0000;) i2 x' y& B4 U9 T! a* f4 o/ w: Y6 X
INTC_INTMUX1 = 0x3d;
2 q+ J T) A% L1 y ISTP = (unsigned int)vectors;
6 s+ m$ c& ?2 I) S. E ICR = 0xFFF0; 0 K5 {- Q$ }' C) A- P1 D' z
IER |= 0x12;
4 ]- M0 T3 K! M3 H CSR |= 0x01;
" B3 W! P. \7 I( u4 C0 Y l& C0 L# @: [5 w6 N8 o* N
# H, J3 M% f6 p+ [; \
. r0 ?% S: E J' _还有就是两个输入输出函数:
: a& P# o" W: o+ K7 \void output_sample(Int32 out_data)
8 T; n3 M0 f4 {+ X4 _* R; a L- H& M{
! h9 _9 Y3 N* b7 p+ S; D AIC31_data.uint = out_data;
: p/ K+ {$ `4 ^9 i3 f MCASP1_XBUF5_32BIT = AIC31_data.uint;* }" h( N _9 m% ]0 X
}
7 e7 Y6 a5 I% k7 _1 M+ j' Y$ l. Y+ N9 l
Int32 input_sample(void). ^+ M8 _3 ^8 N! w8 `+ Z
{ 3 O/ f& K. F! U7 q& K+ v9 ^2 ?
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 ?& x/ j. p; l2 `( O. P return (AIC31_data.uint);5 G8 M. G5 A* P/ l- B# e
}6 p4 h; Z3 w' j) |# D% M: G D5 T" Z5 S
6 x- e+ T& D' |. j: d) O0 e4 W
|
|