|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# J5 t J- I+ u( [main文件:
; x/ @4 T3 Y( ^7 @interrupt void interrupt4(void) 6 z3 @4 Y5 s" E5 p/ C! i
{
3 y, m, Q1 `" g% T! J Uint32 sample;- u o# ^+ z1 l8 N& _. i. }
2 N' u9 Z* x( p. v7 F& I sample = input_sample(); // read L + R samples from ADC4 ]* ~! \& A& J/ K
output_sample(sample); // write L + R samples to DAC 7 c3 h8 D! A- w( H& X4 T8 m5 _
return;
9 J2 x3 ]9 @& H) M& S}
# U5 y/ r( C& t3 X P; k/ f& K4 T$ C: ]- U7 z
int main( void )
- R& s# R. P- w8 o{! n+ [0 u& b- x0 a* y
/ P |/ w! I# ?" y: k; X& t
/* Initialize BSL */' q3 O7 m" z& \2 J
EVMC6747_init( );3 j* o+ ^* W ~) \, c3 h
/* Call evmc6747_intr function */
% }3 K0 U0 j. |1 T" N aic3106_init( );* x( d5 `" @/ O: e- R2 c
while(1);1 d8 q* O3 o! f( @
}8 [' ?7 s) S5 ]* Z; \3 g
E$ D- a: B7 I: G9 ~3 o
# @! e, ^2 }: K6 @* t0 S6 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; p) q9 F+ \0 h% B/* Initialize MCASP1 */" H, b9 y% B/ |
mcasp = &MCASP_MODULE_1;7 [* ]" B, N; F# q! m2 ~
mcasp->regs->GBLCTL = 0; // Reset& v. ^3 y( P1 I: e+ z, a
mcasp->regs->RGBLCTL = 0; // Reset RX
" M( M# I. G+ S W+ M" d8 K mcasp->regs->XGBLCTL = 0; // Reset TX
- {$ a/ b$ W `, I mcasp->regs->PWRDEMU = 1; // Free-running
m. {0 n; q6 f( T // configure McASP0 receive registers& A) i8 V6 n- Y7 I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used5 `: e& n% p1 r
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( ]$ k8 i3 Y. i2 ? mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' n: l+ v( p, v mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! Q4 V6 M5 r/ n% v$ @& p mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side). j" t0 t- C: l' X$ S! L4 y: Y
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! ~* w; V2 r) M1 p' A8 I
mcasp->regs->RINTCTL = 0x00000000; // Not used
- l0 q5 W6 v- i' |( c! U mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 b& C' L- \/ D! ~9 A8 ? ]) b& O. C s" M! _5 a1 P
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. g0 T9 C* t9 \2 ?0 s* U
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! `9 s. ?+ V4 N+ h0 n: K* B
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) @! P: }( N- ]6 U6 o6 [% X4 f1 P mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. e3 M; F+ j) o& g6 m
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
( C% s1 M$ ]. a- t7 B% p6 h; w mcasp->regs->XTDM = 0x00000003; // Slots 0,1
+ D7 }0 E8 A8 M2 J$ d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! i3 X) [: X. X+ [- a9 G: ?3 z7 V4 g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 v x7 J/ p f- e# l2 A. V
. H4 T* g. I) B* X- g: x) y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( R2 J4 i2 G z) f mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" w0 p+ X* }2 W1 e5 P9 \
mcasp->regs->PFUNC = 0; // All MCASPs9 j' v6 V/ d3 j# u/ \! U+ q* `: r
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- E% Y- e! Z: i: U
) m' W8 `/ O; V5 O$ i mcasp->regs->DITCTL = 0x00000000; // Not used4 u0 A3 `! a' F. z4 J* K, r
mcasp->regs->DLBCTL = 0x00000000; // Not used: J7 T6 Z' k8 z% r5 Z3 Q5 R
mcasp->regs->AMUTE = 0x00000000; // Not used
" U9 h- E. M% U7 c% B! `! C( p0 g5 p* ]* L
/* Starting sections of the McASP*/# R7 D f. H+ A2 ~1 j& g7 Q [: ]* v
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; d1 b6 F9 k- @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 N. F- Z) o( u; u3 U$ l+ f! W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 g' D: ^: |8 f, Q2 y! r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& s0 H% G9 K. |: n/ z' z: F
K5 U+ E8 C2 h; I: j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 L) j/ A5 }6 D% S3 a$ Z. T' u6 B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ }- C# f" n9 i' T, \
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; `# @2 I( _3 s5 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: g7 u; _' N% \% `9 X+ I) H
6 Q' ]4 F+ G( f; o- Z mcasp->regs->XSTAT = 0x0000ffff;
) L; }3 K A) l; {, L8 c9 M& a* P mcasp->regs->RSTAT = 0x0000ffff;
/ g8 k: F) [& D6 \! N. K. {6 w) J
$ ?$ ~9 `$ T/ F8 s$ _$ F5 y mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) F3 A- d5 C; |& r/ d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; L6 _% e6 k, E5 G4 i. o9 b, h( b2 G5 V
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! o, K7 D! b4 T7 W4 o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ Z8 P- S1 F5 @. g
) D! `. O, |: N5 t7 h) \
/* Write a 0, so that no underrun occurs after releasing the state machine */
6 X/ j# M+ v7 y+ z4 Z3 ~, A mcasp->regs->XBUF5 = 0;4 {. L2 `1 t# j- f+ j7 L X4 W& ?/ ?
mcasp->regs->RBUF0 = 0;6 b0 @, P2 E! x" D' n' Q' }
6 d; K% N; G/ b, M: n! _1 x: V0 L$ \ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ E. }6 m# j) Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ J+ v6 m$ |4 r2 n3 @/ V mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , m3 ~- M' a% ?/ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! q" L# C, Y4 ~, T5 S
! G! o4 M' D% @ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& ]6 E) T& u" R9 y* }2 c1 a# Y1 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 ~- _0 u& c. B& E mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% R1 y; X, m! E% A while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ z: A- g/ @. R) X' P$ r0 S" |; R I' ?4 P5 v* S# y7 J4 s
CSR = 0x0000;5 X; R! v5 T3 @! c% v
INTC_INTMUX1 = 0x3d;
% u0 s, D6 M3 [; w5 d9 Y ISTP = (unsigned int)vectors;6 z0 I9 \4 V4 a' P/ s1 |
ICR = 0xFFF0; ) D$ e: R& L7 ^/ |& e) i$ l
IER |= 0x12;
. V3 \. ?( s/ t0 t( k* m7 E. M& | CSR |= 0x01;
8 b' g' R; U% a. ^% \. M/ m5 ^. B4 P! V1 s
5 F! e/ c; T, }+ L
$ b8 S% F& M7 O) x1 \
还有就是两个输入输出函数:
$ Z/ G* h' u( O- Dvoid output_sample(Int32 out_data)$ x& S7 f/ g6 G3 F+ I" t" C. ^
{
3 Q1 p Y& l- A# D s0 `2 ^% H) g+ D AIC31_data.uint = out_data; # H) c- b% j* K* ~. Z2 b0 @% h: R G
MCASP1_XBUF5_32BIT = AIC31_data.uint;. Z$ P5 o8 c0 O7 a0 N
}
# g! Q5 M6 p6 c% P( k8 p' |2 e- `% H' z1 S9 N1 I$ q
Int32 input_sample(void)
. Y4 @: D1 A8 ?0 Y5 P{ ' U3 C3 i! k# |- x! V% p) L
AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 f; d) K: u" C2 S9 ? return (AIC31_data.uint);
+ T, l+ [# L9 X; w3 x}
) |3 D1 I6 X+ j. o- b
& i d" @% K0 ]- P$ y! R$ } |
|