|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 Z2 C- z, I0 A+ q/ B
main文件:+ F( N/ ]! ]: f) {( o2 z
interrupt void interrupt4(void)
% ~8 {+ m! v2 S* k! q, Z) T{
! V) p k: p) d* T# p0 m5 a: [' c s Uint32 sample;5 j" b0 E' t, q* P6 w" P
. E U; H+ h9 ~7 \) Q+ g0 | sample = input_sample(); // read L + R samples from ADC* ?& m" U/ C8 q0 f& _, a
output_sample(sample); // write L + R samples to DAC
9 O/ k1 V; t% p* j. d+ l4 | return;
- d' F: U2 E8 ?0 }}( Q# A1 s. z! z: [& D4 p
$ M; h" [! m Z6 X* Y7 @
int main( void )7 w" O! [% U ?1 U8 A q8 @5 a
{
; R) C' R( t8 n5 m( R- j
( a r( _$ |6 ~3 L1 d5 Q# L- Z) U* m) W /* Initialize BSL */
: u, a% F0 L6 x( r% w EVMC6747_init( );
: p2 N; B3 l G/ T3 F; x9 K' i /* Call evmc6747_intr function */- O& V" m& z; ?6 }
aic3106_init( );
/ G2 c$ c# _. ~$ T5 ?" p) {3 r while(1);; Z; E& C* H u: W6 O9 @
}
! E3 h) z' m1 e$ P" \- p# b; O8 Z( O5 S3 R0 N; J! C
0 H: M! ?# e2 T: X4 {# k1 u- r" |. S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 {$ {: z* l& C+ Y9 I/* Initialize MCASP1 */
( T% m% [/ Y3 w/ J7 K1 w% S mcasp = &MCASP_MODULE_1;/ [8 T8 w& T- M7 z# `5 C# L
mcasp->regs->GBLCTL = 0; // Reset; k/ d2 Y& q& L; q g
mcasp->regs->RGBLCTL = 0; // Reset RX
9 i* C5 c. y# P mcasp->regs->XGBLCTL = 0; // Reset TX
' ~% V8 s" k$ j1 z mcasp->regs->PWRDEMU = 1; // Free-running
3 d4 B7 L9 y1 x: \/ C // configure McASP0 receive registers9 Q! _- R+ _0 Q2 M4 Y3 J! ?% ]
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 h) ^ q4 j& }* m mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 D* o m; p5 a: J5 ]$ K- I mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ q: p/ |5 z0 s: [. x4 M
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 t, y9 f& e, l1 w
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) m0 m# k$ l- ~2 ^, V+ J* k5 `
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 y5 N8 \: f% J7 p
mcasp->regs->RINTCTL = 0x00000000; // Not used b% Z7 h3 M s/ A. {
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ A& X7 d7 `* p/ O
6 `- x8 X; u, `1 G2 Q9 s
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
! k4 h0 ~+ f0 Q) ^9 Q% y0 j mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 {& e; r- I2 |7 i
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ }$ |$ q: j9 j! G. A' r( D: p" Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ a, h) p; I5 v9 s
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, g- B* q* @7 B4 M mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; I y7 S- t2 [: q p! ^- K0 K/ \ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
& ?' H9 W A, b. G. E, o! Z mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
N) u! d9 @2 `/ j1 g% v; |! c2 @' Z; h' _# R8 c. f! V+ u
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN! N9 K" H. _9 h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 \( A1 F3 Y7 Q6 X+ x/ X9 y mcasp->regs->PFUNC = 0; // All MCASPs
+ S* F A6 \' b! c7 B/ U- h% H mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! N: N% A) I9 b# S: h' I: w1 `. }1 U/ \" K) R+ f# i0 P+ z
mcasp->regs->DITCTL = 0x00000000; // Not used
4 Y" |( ^! `( Y* H- t: A mcasp->regs->DLBCTL = 0x00000000; // Not used
7 X3 P5 [1 A# G8 j* ` mcasp->regs->AMUTE = 0x00000000; // Not used
. _) L$ S/ X& {3 F1 ]% D/ T/ {, Q, z3 u
/* Starting sections of the McASP*/
4 a6 p$ k3 u2 z- Y9 P+ s mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 l* d% w& ^5 i( E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 I( t6 |' O. O! I- b3 Y& q/ W# w
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 X% _9 o) n" i4 t8 h& n9 P7 \) [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- b o8 f1 O: H5 U. D; s* \# {- p9 a3 Z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 T+ T5 S' I6 u% _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ B- r3 ^- }9 `7 H, b
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 D- H2 \- ~$ Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. ]! J' a; _) A" C
5 @0 s3 l0 ]6 Y8 O a9 ^
mcasp->regs->XSTAT = 0x0000ffff; # {7 ]7 x6 ` J- t2 R7 c, w
mcasp->regs->RSTAT = 0x0000ffff;
3 y) g- g$ B% v, P% i
% c9 {+ l0 n/ u0 f1 Z6 |! M mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- f9 V" ~; ~& O: ^# f! Q0 q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 [ q% C7 ?; `7 @6 |* T
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 t; ] `. G0 l! Z i- w1 M( n# l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( r4 b: w8 d! |9 I; w0 v+ x, S* x2 G4 x1 O; B; h
/* Write a 0, so that no underrun occurs after releasing the state machine */. f u3 |# J' u/ Y4 i
mcasp->regs->XBUF5 = 0;
" V+ F/ d* Z: e! ? mcasp->regs->RBUF0 = 0;
5 l& A" @; C% D% g0 |& b8 q l7 v; G1 L3 O" ^- G3 A o9 q7 A
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 z' t7 x3 _6 H* I2 G4 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) i! F) D/ G/ ^1 q. } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( o' @, i9 o7 v) w, z% x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
X3 @- f4 ^) [+ }% q* A
+ M+ ?7 r4 I# v mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * C d; k; |: Q) B" g; v, p2 @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ J8 F! n$ i& w4 p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 c/ x2 D) ?" h0 L7 |, j5 g while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" D9 Q4 L4 n1 i1 O4 b
3 k3 u2 Q* l" G8 ?; b
CSR = 0x0000;
% I; t F* e# e/ _! U9 C1 S8 F INTC_INTMUX1 = 0x3d;
. u( Y& R% t; u ISTP = (unsigned int)vectors;7 d6 t- W) ^6 o
ICR = 0xFFF0; 1 q, J" j" g: M7 L- `3 m
IER |= 0x12;
" g/ e9 E; [( O" O# G: g8 w CSR |= 0x01; . G; j# d$ F; e7 q% X& X! U
, a! e1 E" k% T
4 }+ Y$ C% \# g6 Q& J
3 {# H- F5 b# \( D还有就是两个输入输出函数:
/ b. n3 `7 H5 v# B7 Y& _% x( Vvoid output_sample(Int32 out_data)
. h- ^* ~- P" r1 g{/ o6 w3 h3 Z) K# e2 q4 l
AIC31_data.uint = out_data;
2 Q1 J* c7 Z) W+ h' s4 C MCASP1_XBUF5_32BIT = AIC31_data.uint;
G' H. q7 n. J4 V% h& @}
1 ] h1 @7 A+ G4 A2 C& H5 d) o
3 ], E% X4 y/ E9 ~+ QInt32 input_sample(void)# P X3 v( q( r* g( D: f( p( b, V
{
/ G2 N$ m( X& C AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ d( |$ z5 o! g return (AIC31_data.uint);
# `1 K$ \9 U0 y( \6 W2 r}
3 \" Q3 e; o' D8 I; ~- |1 ]1 B3 K& {4 ^7 _8 l2 o/ ]( Z6 W4 R8 W: m/ t
|
|