|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: N5 y. l% s, y5 c$ ]! wmain文件:3 t# r& r: {' l* t. g' k3 j
interrupt void interrupt4(void)
1 p9 f z: x2 {# h, T& A+ d{
) Y+ n4 S+ l. |& J0 e Uint32 sample;4 q* ~9 T' V8 Y. F* `
: l$ j6 h. ~$ s4 W* b( d0 O" N
sample = input_sample(); // read L + R samples from ADC
$ v/ Y4 p4 _# Q. r$ C9 q output_sample(sample); // write L + R samples to DAC 4 A2 N: O( M$ V
return;' Y! M4 ]& @6 i
}$ p2 d$ G! l# _/ u
" Z$ [& h0 ?0 r& Q5 O2 |# G+ S+ @int main( void ); R: X! y8 R3 I2 R; l0 D) k7 _
{
/ }" U7 H, L, ?4 ~9 ]
) m, O% a/ C$ R& C /* Initialize BSL */6 D, t: x' h2 R% j1 _6 R
EVMC6747_init( );$ y4 b7 K+ c7 I# A* }7 O
/* Call evmc6747_intr function */2 V2 G. r) U, L8 q
aic3106_init( );
+ o$ c9 {% R) D) ] while(1);6 Y$ G6 l" s. V
}' c* x3 {5 a) G, P
0 t) r/ {2 x# C, R$ w; V A8 K
. l" a) a# B9 D3 uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 m$ d5 g/ i: s
/* Initialize MCASP1 */. x0 c* Q: u$ ?
mcasp = &MCASP_MODULE_1;
9 q: t. N( P. f( W# F mcasp->regs->GBLCTL = 0; // Reset. E$ S4 M/ r6 H6 z" Q% L
mcasp->regs->RGBLCTL = 0; // Reset RX
6 D1 J( S0 ^" q6 A! n7 D, e3 Z6 r$ @ mcasp->regs->XGBLCTL = 0; // Reset TX" b! {- L7 V8 D
mcasp->regs->PWRDEMU = 1; // Free-running2 ~8 t2 Z' ]8 W* ^/ W, m9 j0 g; ~
// configure McASP0 receive registers9 E4 }4 E6 }% y' f3 _
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 C! K d: }3 ~ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ Y5 t( v M) e7 U/ w mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
6 K- M+ z' [! o2 F- u/ a mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% S8 ?+ ^- u; p4 S! x+ o. @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 ~* S7 d+ J- ~( s mcasp->regs->RTDM = 0x00000003; // Slots 0,1' S# `' @0 G l
mcasp->regs->RINTCTL = 0x00000000; // Not used, W! k8 U9 ^1 t4 ]3 `# v% O
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 j$ y# l" a% `/ O, K% N- q$ j' g3 G/ J6 v* T. R, I. M2 P4 E
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ O* s8 t0 z% _" q# `
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" |9 o% w) s' L0 I% e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( c3 ^. M5 i) e A
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. M3 H$ F" l5 c6 @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 E* f( @* I6 F mcasp->regs->XTDM = 0x00000003; // Slots 0,15 |' t- { \/ V/ Y+ e/ P _& a
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 |8 H, v5 O! s8 P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& O# B: f6 T+ `" A6 R
1 J5 W8 `7 v2 E1 G/ B8 K* ~. t5 a
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
& l. h& _# d2 U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
1 q, {' c$ I2 X1 D& h/ W) S8 m. q mcasp->regs->PFUNC = 0; // All MCASPs% r0 q, h& D! p: o' i
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 O% x& F1 `; p6 W
@: y* d& y- |$ n: { mcasp->regs->DITCTL = 0x00000000; // Not used
* |. { r1 I, y! K mcasp->regs->DLBCTL = 0x00000000; // Not used) W, A z, c' x4 O+ y; F
mcasp->regs->AMUTE = 0x00000000; // Not used: f, _6 {. d5 [; V; z2 B$ P, S
S8 M$ N2 E9 R5 ^& ] y) K8 e' s* C/* Starting sections of the McASP*/* h' j# C. l0 T4 q6 r) M8 @. u# S' o
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 i' X i$ n! }6 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. `- |- j+ |! [& a; |& C$ Y4 L mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, D" }. Z. M3 B: H2 e9 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 u( a! D" z8 H, W% @6 V4 V$ _- l8 T/ C* R
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, o7 i+ y4 |2 P% t2 k8 V" T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 L# N& ]9 T5 r8 i9 I
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( M- o# ]6 l8 y0 \2 E" q/ l5 [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 G6 x" x, f& g# I2 k( B
- r5 P$ e0 g1 Z- {/ m [ mcasp->regs->XSTAT = 0x0000ffff; / }( v6 R) S4 d: a! y$ x U
mcasp->regs->RSTAT = 0x0000ffff; 2 k- i2 P6 c4 g% v f2 a
& [$ K0 k+ n1 n9 ]7 n# L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 h5 X* Y: o: k' o( ~& F, D! W1 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! G! @7 H8 e' h3 l0 A, M
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % w9 o4 ~( ]1 u2 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) A7 M) w9 ?+ f' a, O% Z# N
! W! ^& a6 k# D! x5 U% G1 t /* Write a 0, so that no underrun occurs after releasing the state machine */
8 l- B, S+ X1 l; d8 a7 s& `, { mcasp->regs->XBUF5 = 0;
0 T- ^/ U( s) S- X3 Y- B2 ~ mcasp->regs->RBUF0 = 0;
# c3 {8 j! H! Q; m# q* b0 s& ^( M
. v- J+ a. n* q" C; u( | mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) }8 C% |6 M# ~9 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! x5 `7 K! E ~: S- x/ }9 _ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & E( p& Z# Y! r7 f% `/ x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; O; I& y3 o$ A; t, [/ C4 ^
8 C* `6 b: P5 n" d mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' d" x1 Z: ]7 g& ~' ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; o7 X3 U1 F* n9 r mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : t) ~2 ~6 c0 l0 N1 |# w8 J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' T1 t1 M3 `# Y: Y
. K# _ y, ]1 P3 y2 \! \; }, g CSR = 0x0000;
2 z4 I# b7 A1 w3 e# u0 ^, T8 L INTC_INTMUX1 = 0x3d;
" }& U N* M" o4 p6 {5 g ISTP = (unsigned int)vectors;, b! w" E G, {" z& f; Q
ICR = 0xFFF0;
6 O) H" _ E' [& Z& @7 X" I IER |= 0x12; % y- o( T7 x& P: l1 E# V6 T3 C. }8 q
CSR |= 0x01;
! I- J6 r7 v& K+ A6 M) o4 x5 N* v% g
+ ?0 z2 m8 n: f6 S% Z5 E) ]
7 s/ ~8 P1 I1 V1 l: w) U+ [8 j2 ~; w, k3 f8 \
还有就是两个输入输出函数:- r% h3 o3 J* V4 v9 y8 S
void output_sample(Int32 out_data)
8 |+ @& r" Z& L# r{
6 ~% e ]% |/ W8 p% H6 G AIC31_data.uint = out_data;
+ a. t+ ~9 V) Z6 k MCASP1_XBUF5_32BIT = AIC31_data.uint;
U" m; U2 O, E% _2 @6 ]( V4 [}
; G& \, `1 J/ z0 D6 p
/ d: v) D: b7 |& l7 W3 hInt32 input_sample(void)
3 S% f) g+ ^/ g& N( _1 Q* {- D{ 8 h7 m% c$ Y3 F4 J; \3 y
AIC31_data.uint = MCASP1_RBUF0_32BIT;) f& ^3 L9 v3 A5 x
return (AIC31_data.uint);
& H1 b6 ?9 Z' C) X- J+ h8 ]}4 Q7 s# l. f9 t' ~5 t: W
& N5 [, h5 w" B! `3 z$ G |
|