|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( o$ }0 A+ V, t+ b
main文件:
+ F0 s+ G5 @& D% [! T/ z/ Uinterrupt void interrupt4(void) ; d& ?% `( I) E6 H1 d, }8 O
{
& f$ S$ D4 e0 s Uint32 sample;
$ u, W7 b0 L0 ?
; c" P- i4 m6 |) n( Y$ e sample = input_sample(); // read L + R samples from ADC
+ a! J- F9 X. d# g$ O' I: W output_sample(sample); // write L + R samples to DAC
6 X( \& p, F- j3 D) w' @ return;4 _; ^, s0 ^4 F
}* Q" n! }8 U0 \; i
' k3 n* {- M9 J" g# U
int main( void ). [* c/ d0 J v
{
) v `9 P3 x. _5 r
5 W5 t+ y/ [& o /* Initialize BSL */
+ Y+ ]4 ?0 f9 ~/ d, }6 t EVMC6747_init( );
9 d- S1 |& P; Q. R1 V4 x3 r& ]3 U1 \0 k /* Call evmc6747_intr function */
& @" e3 k/ C# I& R: D* X- ^ aic3106_init( );0 K7 i. b' A" m g2 I- g4 B' Q
while(1);
- _6 z0 Y. S8 {5 n f}/ j$ o0 c% G5 @( e: [
) F0 V) x% d& w9 C) _
+ H7 ~/ A# B1 C0 ?1 j; }% {+ @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, W6 x# f, d$ D9 |, i3 i6 ~3 c; F
/* Initialize MCASP1 */
; m6 P, H4 I) i4 l mcasp = &MCASP_MODULE_1;8 `6 M, D1 f! Y
mcasp->regs->GBLCTL = 0; // Reset0 n: \5 ~; Y% K `4 c/ l
mcasp->regs->RGBLCTL = 0; // Reset RX9 F* p! \( f1 l8 C$ Z8 E; Q
mcasp->regs->XGBLCTL = 0; // Reset TX
5 d. `; d2 k; C/ T6 H" p mcasp->regs->PWRDEMU = 1; // Free-running b- }- ]$ G" X& p& v6 [1 t
// configure McASP0 receive registers
( N6 z E7 X. h! d2 Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
@/ F; I% O7 _1 r) i1 Y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' ~' \# i! F M3 p7 p
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 q. n' y8 w' h$ C+ I mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ j2 ^( z! s7 S) {# D8 s0 s9 R9 r% q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side); t3 | N6 P6 r7 [ z, X/ S
mcasp->regs->RTDM = 0x00000003; // Slots 0,17 H% `$ U, o) _8 k0 q
mcasp->regs->RINTCTL = 0x00000000; // Not used9 _ j2 z8 Q9 @% [1 L) A7 ]- v! H
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 i' s6 Y% i* Z2 r" y
& S9 l; j& e2 q3 B) [* Q* X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 L8 k9 ~9 ~" q mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 H2 ?' _9 w( R6 S% T" \2 E9 A
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 U2 @7 h p8 |+ A mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' u* r5 \4 J' j- Y" y- ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 @: B, @4 n5 | J
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 @- b% e7 z R8 ` mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 V0 S4 `* I* Y) }1 |/ R; P
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 h2 ?# A9 N- d/ [; b! A! u3 ]0 B% R# _/ v! H p
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! Q% F' x. t! e% R mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT9 N$ O+ t& U: M4 F& H& ]2 ?5 p
mcasp->regs->PFUNC = 0; // All MCASPs- W7 u& r2 J/ y& o: N( k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; _5 E Y3 K2 C0 y" b; V% V
2 C2 f- ]% a4 y' ~* X2 C4 o+ l; l2 O mcasp->regs->DITCTL = 0x00000000; // Not used1 g3 H3 J( c9 g$ e$ G6 S
mcasp->regs->DLBCTL = 0x00000000; // Not used1 |4 }9 L; N! e# Y) E
mcasp->regs->AMUTE = 0x00000000; // Not used! }6 x$ R, I+ ~ A, ?
: f: G1 `* e/ J, h9 S& [7 A% l
/* Starting sections of the McASP*/3 i' y v3 I7 [( E# K
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ Y- f9 O0 {5 C) r( j Z8 \: @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& V5 @* g3 A) e9 D( Y' x: |1 k mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; Z9 }& O" a+ B0 B8 @% |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 B: d9 H) ?5 N
, K# o6 K6 g" u8 J2 P% `- _3 f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# q6 X4 T+ ~1 \# j; d1 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 L, ?2 K1 d) P( M. w mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 N( e) h" H9 l: \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 J+ F0 g% m8 Y% A; l0 q2 b/ j( t# m) {; S' a4 ?
mcasp->regs->XSTAT = 0x0000ffff;
7 K* g- U, X: f! d! ~ K: }8 E8 d mcasp->regs->RSTAT = 0x0000ffff; , i& h5 x6 l/ A/ N1 C; T' n1 Q
6 t, o% _# X+ m( q$ \ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
x" t d+ z+ N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 v Z+ F6 Y5 [ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( Z3 P- \. k: Z M& r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- Z3 z: l1 W9 p1 a* T/ v4 o" @0 z' L: F& ~3 B, ` I% |) _4 A
/* Write a 0, so that no underrun occurs after releasing the state machine */, ]* P, h9 |3 h4 {
mcasp->regs->XBUF5 = 0;: o/ }) a1 K- L' j6 F, @
mcasp->regs->RBUF0 = 0;: }# z5 G0 ^) I( L5 S4 S% L6 }
& A: k) \ q1 c/ o4 Z' s9 _ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ E! o& c/ y6 V; [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); x; D( h8 V& _ n* h" B& f% [
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) c7 d6 x! i$ q$ P) j6 C8 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 S- W; L" y; i9 v4 X6 U7 R+ ?
# h( l* N3 [0 t m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% w* k) d7 c& q. ^3 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% a6 L; F* \7 N4 G( x- R( w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ^ w3 w( C" v! Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 O# Z/ e# E7 i
; w+ S$ O& g: ?8 c. X5 o: X" Z8 | CSR = 0x0000;8 Z0 Z' i7 F d) \# T4 G4 i! l
INTC_INTMUX1 = 0x3d;
! z- u8 [8 w; [ ISTP = (unsigned int)vectors;, E1 X5 Q0 y" H$ T
ICR = 0xFFF0; ' v) y9 O+ b# o. Q6 L
IER |= 0x12;
( r$ E6 J$ v ~, ^, w- Y. r% n9 w5 [ CSR |= 0x01;
, e9 g( s1 N' L8 G! q
. s4 X6 B/ p% k/ {
: p) H1 h! m- {9 ]' w7 K" R" k9 a
' ^8 v3 t3 t" k# M# C* \: h0 e还有就是两个输入输出函数:
$ W0 H6 Q o V5 D5 E9 Svoid output_sample(Int32 out_data)! w! h# x5 G+ s
{
; z W/ P" K3 w/ z AIC31_data.uint = out_data;
0 e7 K; o7 V- t; S' h MCASP1_XBUF5_32BIT = AIC31_data.uint;
; g# @/ K3 m. }3 @/ n- H9 u}0 I1 ]# e# ^! i. V6 Y. Z, P: B
O9 \" f9 \; y# a9 dInt32 input_sample(void)
) D- @8 |: M- t! N+ K; J: h{
& n9 C# M3 l/ f8 Q V AIC31_data.uint = MCASP1_RBUF0_32BIT;6 a b, m8 _3 T' M, ~* h) l
return (AIC31_data.uint);. C' K/ j8 M/ t0 O
}
. T }) Z1 Y; e" {
4 _/ o! K* W/ H8 R |
|