|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:- j7 L* a7 d3 m, U2 ]/ q5 S
main文件:
0 }. n G- r- Z& F4 |# K% x5 einterrupt void interrupt4(void) ) D6 F( t, h! D$ z* e, X
{
' ^' x7 h" d: k) u0 P Uint32 sample;
: ^; I% U: ]1 |1 N. L. x! z4 _0 r: o, _# e9 X0 j
sample = input_sample(); // read L + R samples from ADC
7 ]1 j- p0 Y/ M output_sample(sample); // write L + R samples to DAC + n9 I* _! b% }! R; R$ X/ p
return; J) |8 ^! B7 p' K& u
}
3 J( V% m- Y& L6 H2 |% @; }
; j0 u' T" g' F& u1 E- G3 Rint main( void )$ a4 ?4 K" w Z$ K4 [$ t( `
{
9 o$ K6 J# U6 [5 a2 T1 a) O
( Y3 K+ Q! [' T /* Initialize BSL */. u4 v0 q1 W0 O8 \9 R
EVMC6747_init( );
' K, ^6 K: F5 D w' Q+ Q /* Call evmc6747_intr function */$ h. i: a) E8 d/ `: _* J, [3 Y
aic3106_init( );; w* s: b1 D5 I8 ]; K# r0 H
while(1);4 Y6 \& A2 J/ O8 [. A c( I7 H* P+ v
}
& X K" O1 {- N: a% B/ q2 Q& ]' ^ O. B9 u
* C7 H% `5 \, n* raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 n1 G% }1 g$ b/* Initialize MCASP1 */& N( S) q+ C3 } K
mcasp = &MCASP_MODULE_1;
: N4 _/ q. s8 D mcasp->regs->GBLCTL = 0; // Reset3 q5 z4 d# @/ Q; v7 l5 s
mcasp->regs->RGBLCTL = 0; // Reset RX
) |9 ?7 i) o+ E9 U: x& ]6 e1 f mcasp->regs->XGBLCTL = 0; // Reset TX, J p2 d' y& t4 q
mcasp->regs->PWRDEMU = 1; // Free-running
) y4 D0 m, F9 G h3 P6 p // configure McASP0 receive registers6 D) {' d, M; Q+ _1 F3 P7 Y0 Q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& _% W, o) K# c$ |5 X% F' b: j0 G! B
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 @+ }0 V$ Y) w7 r5 l mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 U% T/ ~* h+ r7 R/ c6 O! w% w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% A9 K$ A. Z- u2 W, s) ?
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 C4 v5 a( ?' u3 p* e7 A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. ]" W& n% g' q1 ~ mcasp->regs->RINTCTL = 0x00000000; // Not used
/ K# C6 x2 C' @1 C! D6 W mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; b' t9 E( A h6 }9 {3 U0 l( X& S4 U' e2 A% t' ?3 R. V
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 e# g4 i/ p5 V: Q7 E4 r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 V' e0 A8 R. T0 k1 Z) k mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ M, b5 _# J: v1 k" n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; |+ g8 t/ I4 I( H; s }; t
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ F- c! r5 P8 w- b& I mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 V+ P$ i1 ~" w% h9 x7 R; z mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! O( \6 y" r# ~8 T mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 K( M% t) f8 d" M) n1 ]9 d- ~2 r' Y* r# q, b
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; C' }7 @( B% t( ?) f+ j: T
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 j1 P" t3 W4 I2 C# ]: z; J mcasp->regs->PFUNC = 0; // All MCASPs7 @( D7 f2 P3 R+ ~
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) Z5 `( ~; v8 n
Q# b$ G1 d: e: ^6 x# r mcasp->regs->DITCTL = 0x00000000; // Not used
! O) L, O* l" c- B- ]0 i mcasp->regs->DLBCTL = 0x00000000; // Not used
; ~1 f( T: x1 {' j/ e mcasp->regs->AMUTE = 0x00000000; // Not used
- g9 V: f6 b: U* B* u" N# F: ^+ f( Y2 n, w- U7 X% |2 n
/* Starting sections of the McASP*/9 y8 G- w& ^* Q7 r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & D- @5 f. f* Q+ ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ' ?$ H' {6 g1 |/ x. M1 L
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; s, | t- w! p1 P: ?7 p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 P" ?3 f/ i) a# q! W' l
4 Y+ S) x6 D4 n3 Q! b' q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) m; f4 B6 Q& Z5 x# p% f2 T0 {- F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* @# X$ U1 U/ p2 v mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 X2 U% e D g3 v- @% h; |4 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- U- q+ A7 Z% [' s8 |* h$ x, G
! C/ l" B9 {3 s' j$ x" H/ ?5 z
mcasp->regs->XSTAT = 0x0000ffff; + W6 |& \4 o% m* t& n
mcasp->regs->RSTAT = 0x0000ffff; . q! E: q/ y# ~! [
& C% _- I1 k3 k
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ B: f. a. ]% _, l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% _' ^7 H; o$ v* K, y6 }4 G8 |$ I1 g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : P& w1 S6 J* Q. J" p9 D4 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- z/ Z- A0 @: Z# N, V* [7 S
; k7 F! Z! T3 D$ \. c /* Write a 0, so that no underrun occurs after releasing the state machine */$ c# w5 O& \: B z0 s$ w
mcasp->regs->XBUF5 = 0;* M9 v/ k; h+ u8 B
mcasp->regs->RBUF0 = 0;8 R0 r4 p: A n* m7 I/ L
) n2 o. P$ a8 G+ L; F: s- k. N
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 v6 }" q& }/ C+ P/ ?0 K, O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# @' b& {5 z9 }5 h
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! S: R7 ~0 x- _3 x; @ B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 R. V4 E6 x S" \: i
' z( p6 I! Q; d i2 M5 Z/ U mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, y1 I$ n( p, ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" t& p7 `/ Q6 q1 Z mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 f" }* B3 N4 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( z( T+ U( o+ j4 e' q6 `' O, `3 [
CSR = 0x0000;0 a! s0 V1 W. x4 J/ C0 ~, o
INTC_INTMUX1 = 0x3d;) f" R0 s0 r) _7 o7 X
ISTP = (unsigned int)vectors;
# m- e7 l% `# }2 Y9 l3 k ICR = 0xFFF0;
+ B) |% U- V# [ IER |= 0x12; ( s# f$ z2 S2 \$ h% f. W
CSR |= 0x01; ; k* N: ^4 |* l7 f
3 D8 ]$ q/ k5 l/ F1 ^
3 ^) x" M% i% ~; X5 c& m. _8 y# e$ H0 k3 D. Z
还有就是两个输入输出函数:
8 x# P, |" P* X" Z# K% Q" Hvoid output_sample(Int32 out_data)
& S7 A: \$ o6 w+ p6 `{: i2 C" p- p1 m- q0 h7 q) B0 Q
AIC31_data.uint = out_data;
! }$ F$ q& K. L/ y# M+ S5 W. W MCASP1_XBUF5_32BIT = AIC31_data.uint;2 q4 r1 A4 ~7 q" W0 s% |
}) P q+ L" x+ G- B1 ]( `
( Z0 P0 w/ H6 v% C2 s
Int32 input_sample(void)6 h( {: u* Q1 o" N" V
{
* f1 I: l' P! X/ T( t# E AIC31_data.uint = MCASP1_RBUF0_32BIT;+ A8 ?! m+ g4 e: K% S9 T' g, W2 c% z
return (AIC31_data.uint);; ]: Q0 O8 y+ E% S' k# R8 T( ~
}4 r7 ^2 A' Y$ _2 G7 i
3 d: l7 E) |; O, I2 Z
|
|