|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* B; g- @; y5 f) C' y [main文件:
( w7 E' `. V* R ?& Ointerrupt void interrupt4(void)
1 p& Y' T9 R& F{
% r6 w; I/ K0 F) X6 H" K Uint32 sample;
$ C& v2 x; L* i t3 d- I7 r% f! H8 e4 P% t Y
sample = input_sample(); // read L + R samples from ADC4 u8 Q- T3 e6 \
output_sample(sample); // write L + R samples to DAC 5 s, ]6 x1 q2 D7 i0 d- I
return;
+ d1 ?6 }. }4 z, M}3 y8 e7 v: f- E g
) V# i" H& n. ~, d; X$ V& g
int main( void )1 ~5 ~$ |, [4 q0 m
{
7 N' u6 _9 Y, H: ~* H* B5 C- g) b7 z7 j: X" V
/* Initialize BSL */' ^4 F1 b' V! e9 n$ E. f
EVMC6747_init( );' \: e& n$ D$ R% B' H: L
/* Call evmc6747_intr function */! ?* w: c1 [+ ^0 t# Y: l4 T
aic3106_init( );9 u7 u; P6 k5 }% e. H" H
while(1);' e" G5 I5 H7 o8 D8 S
}* O0 E( m- z3 O( ]8 ?+ z2 l, }
" F) M" ^8 t& l* b7 }9 C% v* r# N
$ j% ~$ B% V+ ?5 Z- O5 {% @
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ l* b R: j, @3 n- C
/* Initialize MCASP1 */: ?$ L8 y3 ^' ]2 S' W
mcasp = &MCASP_MODULE_1;
}5 B' y, D! V3 U5 {9 ` mcasp->regs->GBLCTL = 0; // Reset# D/ T$ x0 b& j! Q0 \5 @4 w; i& q
mcasp->regs->RGBLCTL = 0; // Reset RX
6 |" ?' R( m5 e3 A; T5 H mcasp->regs->XGBLCTL = 0; // Reset TX4 [. B; V% c/ s+ w
mcasp->regs->PWRDEMU = 1; // Free-running O+ G3 v: M' P1 s' {+ c
// configure McASP0 receive registers+ ~$ ~( T4 s D. ?, [; V' r# e6 b" a
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 [: K$ }) ^8 n4 D' ^, | mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 M# a4 Q- N$ Y$ ]! ^' P/ e
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& q! `# ^6 U. O mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ n, a9 x6 R0 A# l. R" z mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ \4 t3 Y/ a; h, M
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 `+ ]" v. P; R5 z, r# s7 |
mcasp->regs->RINTCTL = 0x00000000; // Not used; u6 ?7 _# M' |; x& P
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( _; q# P! R9 }( U' ?- B( X
5 c" I) {$ {9 D) |% W7 Z
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' B. V( E8 W: X; q# G
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 j9 Y+ \1 n) y. p" U" X, l" P mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ q5 a2 [. H7 G9 F3 J
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% p; u2 f! h2 y! Q% y% p& ?
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% g4 V9 e$ c+ J: [+ P( f, _/ c1 V mcasp->regs->XTDM = 0x00000003; // Slots 0,1; f4 Z% A! a4 s! M6 [
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 S( S: s) T. g! \* _# I
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- j& _8 I' s7 ]6 q+ t+ p
. R5 B m' O* _+ V/ j
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN1 B7 o5 M* I) a) a3 i L8 U- s
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" k8 @% h% _3 [
mcasp->regs->PFUNC = 0; // All MCASPs
8 m- X8 R2 K$ {( H7 x5 t" R8 t+ |4 ~ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ T6 E$ g, I$ H- ^: E$ n
- g W7 Q( j+ ^! ?, M mcasp->regs->DITCTL = 0x00000000; // Not used. j! X; z( v+ G4 [
mcasp->regs->DLBCTL = 0x00000000; // Not used
4 i* V! \ k& d: Q0 E mcasp->regs->AMUTE = 0x00000000; // Not used
Q+ b7 ^: d4 ~( K' e2 R1 \& d+ r
' i! q$ b. A! |6 F9 Z2 ~: l/* Starting sections of the McASP*/
* V9 B1 C9 u( U5 e9 w8 Y$ M mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( L6 `3 ~; }+ D. J7 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 |" e. z- z" E2 ^; P
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* f9 W$ _0 a# \6 a6 P6 J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( V7 w: M4 q3 J# ~9 u) T. s$ c5 h4 w' f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ G U8 l4 W( d+ m+ G; r1 f% g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# O9 _) }: {# U( H& S7 ] P% g. { mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 @7 X+ Z% K. ~( `4 c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* I; F" D) D* K9 R8 Y2 s* E; l/ X2 s3 L* D: q N& I
mcasp->regs->XSTAT = 0x0000ffff;
8 e, ~' o" `( a! P7 r6 I5 R' u( y mcasp->regs->RSTAT = 0x0000ffff; 2 ?3 U) j6 c, j1 I
. I( f$ X# u9 h
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) G9 F& d+ n0 ?7 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ N5 m* ^: S2 t' H/ }& F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! n3 L. [* V" g# B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 o$ l1 W O4 T! b
' \' s+ w0 }) ` /* Write a 0, so that no underrun occurs after releasing the state machine */$ T$ T" s, _% z8 d: @( K' c% \' x
mcasp->regs->XBUF5 = 0; |! @6 h6 o: N# `
mcasp->regs->RBUF0 = 0;" v) r8 d( H/ I% X4 Y; W r \
+ N8 @! l7 W; r0 U+ j7 { mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * `/ I0 _: o; y, Y$ _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 d5 G* M+ f4 N% ^! b mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) g2 U2 q& L: x _# F# a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 G/ v! o2 O- ^3 [* N/ M
( O }4 q( Z7 Q' W3 V) N
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 {2 @" m; i( F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, K6 @$ O" r/ a* M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 y# V/ n" q5 T# Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ ?6 Q1 x: L$ g: u8 I& e' _) f
7 Z. K# E4 T& Q7 p; d$ _7 ?+ A CSR = 0x0000;
' V6 l, J. y8 x1 A: S2 P$ x& c INTC_INTMUX1 = 0x3d;
' b5 x2 b& T+ Q/ V" N+ F% R ISTP = (unsigned int)vectors;
2 E$ R1 C+ [0 `& I ICR = 0xFFF0;
5 N3 H/ Z5 U1 W/ J& e& N IER |= 0x12;
4 d$ f7 g: ^6 O% C* `4 O. c. ~% T CSR |= 0x01;
& ^6 [; w( b7 o. L2 B/ B' Q* c! d( m6 U% U/ P, N% p9 W1 L
7 \3 @- K; L& |1 n
3 R, R4 J& W6 E) _' l
还有就是两个输入输出函数: n" ] d! ?/ K3 T( J1 V6 o
void output_sample(Int32 out_data)
, \# H0 A( m: r; x7 W" o# U3 X{ T* N8 ^# M# N& s5 r
AIC31_data.uint = out_data; : u' x1 ~6 Q/ G" o3 B/ ] i
MCASP1_XBUF5_32BIT = AIC31_data.uint;, p$ c( ]* G2 X' a' u7 X
}
& b0 P" H3 }/ h0 h! d4 k* D& d" D
& Y; J. I6 K. J. E; X; M; QInt32 input_sample(void)
( r. L; s. A3 M0 a) }# H' |& [{
* z6 ]8 [! h. G" z9 u8 b% _$ i AIC31_data.uint = MCASP1_RBUF0_32BIT;
% }: L* k* Q h% i' U) Y3 [ return (AIC31_data.uint);7 \; q! L4 P3 I0 ]
}* a$ I+ d+ h6 I( b7 H9 g
5 ^! L' W6 @. b
|
|