|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& v1 n+ a4 c, @% F- }
main文件:
9 |; N' |3 I9 L6 U7 w! d' n6 Qinterrupt void interrupt4(void) , U4 M* ?/ b+ A. ~: Q. d6 i
{( S) B, k5 I6 D9 l( r
Uint32 sample;% y8 G+ ?% `3 `. W: ~
9 i) q! ]: u1 R( z/ ^9 [
sample = input_sample(); // read L + R samples from ADC
7 ^, E8 P0 s- G( E output_sample(sample); // write L + R samples to DAC
, ^8 \% l. i- `8 Z) I# D! D return;
: O- e* |& v5 c; G$ K% X M}1 ]. O1 y& u5 H) @, {* Z: V
* D5 F; M) {0 T% B( `int main( void )
/ q I9 J+ J+ r! v8 Z1 Y0 @5 M2 y{' B, S$ Q- \6 `' { \8 C. Q
r. S" i4 D" R* B9 ?; `
/* Initialize BSL */: s( X0 i1 H0 R% e: L, z3 x. ^
EVMC6747_init( );* ~( S, \+ G( W! X
/* Call evmc6747_intr function */
4 f2 ]( J0 V" m% H aic3106_init( );
- j' r6 D* |2 G) ]) ?: Q6 D while(1);! v# e5 Y: n, ?4 y
}( a1 `4 d0 f+ ?% V' l" v
" D- |" D2 N0 D* B8 \; k/ t% m! n- a+ Q9 @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: Z+ T& O7 u. @) J* w; q; H# ?: X% f
/* Initialize MCASP1 */% K/ G3 Y V; c# @2 X3 M
mcasp = &MCASP_MODULE_1;
! w8 d" P f' t. Q3 B3 v3 }# j mcasp->regs->GBLCTL = 0; // Reset
0 T2 l* a! W6 [1 Y5 M3 L3 X mcasp->regs->RGBLCTL = 0; // Reset RX
1 O+ b0 w9 j& s0 N: U3 | mcasp->regs->XGBLCTL = 0; // Reset TX/ |) g7 \4 o5 J5 j9 }7 s; P
mcasp->regs->PWRDEMU = 1; // Free-running4 [! y) s2 L- z @
// configure McASP0 receive registers
! G1 L5 D( w/ }$ F- ?& n1 F mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! J" t* t1 g% J4 ^; A% {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: B- ]6 p4 L9 Y/ L- |4 y mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 L; P: `* Q3 }7 O mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% ~; g0 N0 b/ }
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
1 R$ F6 e3 _4 C( I3 r mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ [0 d7 b# ^$ H, o8 q9 |& ^" P mcasp->regs->RINTCTL = 0x00000000; // Not used. h' i! F: R m' F* h% f% J x6 w+ u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. ^7 A1 I/ G- _( ~
) ?5 R, f4 r+ E4 M mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. W' j7 X* J( f& M4 E9 f7 f mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 Q- \& B7 F( V& a1 p1 A7 d
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( W0 D0 }7 a$ B3 Y$ O
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 Z$ o1 X+ y5 r7 [7 Q9 y9 c! O
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* B3 I" `+ R" E% ^: h: ^. u& g
mcasp->regs->XTDM = 0x00000003; // Slots 0,1) i# `3 [+ }0 B5 t: B6 }
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ P0 y) ^. y3 h+ d& o$ }- F
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, w- ^: b6 Z2 X; }7 U
6 d# C* |) {9 f/ o7 r mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
7 {" v: a$ J e! @6 I mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
^& M9 k" L4 g! ~9 s6 Z& `4 n mcasp->regs->PFUNC = 0; // All MCASPs( w8 H- U( G$ I* W/ ]- P9 q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 A4 {* z# v8 ?$ h/ p! J, i x
- ~) b3 d( _3 s( N mcasp->regs->DITCTL = 0x00000000; // Not used5 u( u+ U- X/ _0 y. i1 a# W/ `' F
mcasp->regs->DLBCTL = 0x00000000; // Not used9 ]5 ?/ {0 x/ g A) A- b8 l
mcasp->regs->AMUTE = 0x00000000; // Not used3 Q- U) J- s/ n+ \7 q+ d
$ W/ y8 S6 d* b$ j1 D, t/ C$ e
/* Starting sections of the McASP*/+ T7 q% `* a- {/ o
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& V+ x5 k7 r2 j' N2 Q2 W% K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
' l1 p9 }; N8 e* z mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . L' `: y0 @9 W( `! g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 O6 B1 b8 e& L3 m. E- ~7 r O$ t' X) C' }8 U
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 \& j: }5 Y8 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 M: P" e: A q. E
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; g( \6 J3 b; n/ u5 [: j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: a- E7 M/ J3 `2 V% C1 R" T( [
1 F& E4 t$ A1 p2 ?. _! a: q6 R mcasp->regs->XSTAT = 0x0000ffff; 3 Q% m2 b. v8 ~- c9 o, V* b
mcasp->regs->RSTAT = 0x0000ffff;
- h9 G$ x* _: J& R7 g; ], H% |" G/ S* ?
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ N; n$ L- o& w- |6 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 _; ^$ Z, `: W4 z& ^3 f0 f
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% W7 M' G8 [9 v" X$ ]8 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 ^# a/ m: ^+ l( ~" U
+ }9 y* D' a: L1 v0 M /* Write a 0, so that no underrun occurs after releasing the state machine */
/ l. S. F( ?- a' l k mcasp->regs->XBUF5 = 0;
4 {* _8 }2 I& l0 C' F5 A1 i U# p/ q, g mcasp->regs->RBUF0 = 0;
; I3 r8 I4 l$ ^* D7 d% k
% j3 Q# M2 }# d6 @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 ? M3 ~5 l0 o% t- V9 W1 t P* f& ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 I5 ^; K/ d/ y% T$ a. N& I mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . g/ L3 [+ x8 v* h9 A* Z0 j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 \# h7 x& Y4 D, f2 M
' E) \5 I3 k0 H) ?; {+ L1 D) l+ P mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; J; J& V+ ]: x0 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ v# y' V6 B3 Q! i9 j mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & O; \$ V6 m3 F2 X1 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 n J: Y ?4 ?4 }8 C4 G! ~ C% b
" C" _' }) V3 t s5 I8 x) ?* Z CSR = 0x0000;4 r8 x9 h: `8 z. @2 ~
INTC_INTMUX1 = 0x3d;
9 W7 E! P% Q# z: O ISTP = (unsigned int)vectors;
0 {' p6 `: j# Y% z7 q ICR = 0xFFF0;
3 _! d) A% x6 w IER |= 0x12; 5 G4 l4 g7 E* B' Z2 F8 F# `
CSR |= 0x01;
0 d: p2 H7 @+ f+ E& ` d7 ?- }* _
& j5 a. A# O0 h- N* J K0 Y
/ u5 c. ?& D6 e; ?6 O" k
还有就是两个输入输出函数:
6 @1 @# L1 n7 R i q) `; hvoid output_sample(Int32 out_data)
2 E& ~& M% L% C$ V8 H4 v0 c) ?{
% j& a9 i! ]3 ~, r) E( L& a" d( ~ AIC31_data.uint = out_data; , E( R( E6 U& C- e
MCASP1_XBUF5_32BIT = AIC31_data.uint;) g* Y/ T O4 F
}" H. Z' n! u7 t7 I. y( E. H
2 [4 o5 f) {' d% fInt32 input_sample(void)
/ X3 P7 E$ u2 d0 U8 Z. z- d3 q' v{
" ?& h3 l' v+ D1 d: Y t AIC31_data.uint = MCASP1_RBUF0_32BIT;4 T4 O: ]" p, G
return (AIC31_data.uint);/ S1 V* t0 d; K, V7 J% N
}; y9 a; T/ w9 v& \
# {. H+ z- h; {/ Z$ n9 P9 _
|
|