|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& x+ s3 P! q: W) Fmain文件:% J$ f4 @* m+ g" X
interrupt void interrupt4(void)
/ h: B/ T4 W, ]3 X{$ }5 V0 W) v. ~% m ?
Uint32 sample;" u+ R) u8 S7 E) a- n- r
# Y8 b0 `/ i2 R7 i- u sample = input_sample(); // read L + R samples from ADC6 t; ]- o, F. F7 ]! ?- `
output_sample(sample); // write L + R samples to DAC ' p: [ f2 s. M: V1 x3 f0 t* I
return;
) m2 Z' a% F. J: ~9 n}# \& ^- R) X3 v/ K6 C
1 {% R' H7 A+ V6 H! e3 F1 R5 t
int main( void ), i; O3 f! v; o0 x+ i" E+ }
{
; Y8 ]0 H$ n5 }' F# e' z% R1 r1 U7 D0 [# m. t: F, W$ H4 Z
/* Initialize BSL */
5 M- T# \7 S; p EVMC6747_init( );4 q8 Y# M, t( v
/* Call evmc6747_intr function */0 N8 | ? o' r! u+ G, A
aic3106_init( );
# X( `/ g$ A! H( K0 e# f& R4 ?& b while(1);+ [8 G% a6 U' e+ r6 }+ i( J8 e
}9 e% N0 p0 ]" U: D+ P6 s( [
4 T. t, O0 }" N7 \8 \( V% D* R0 n3 I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. x% z+ f# M" `9 C, h0 K; _5 \/* Initialize MCASP1 */6 l" H* z$ n' M
mcasp = &MCASP_MODULE_1;
# w9 p+ I& @, g: }, U mcasp->regs->GBLCTL = 0; // Reset7 d. }5 X9 z5 d! w( X9 _
mcasp->regs->RGBLCTL = 0; // Reset RX. h/ A/ A" Y# K4 i: W
mcasp->regs->XGBLCTL = 0; // Reset TX0 ]4 @6 |' V% @/ g, O
mcasp->regs->PWRDEMU = 1; // Free-running
! L, S- O, x; D- q: j // configure McASP0 receive registers8 u( ]! a3 _. y) _1 o3 H7 G+ m- b9 G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 H$ a* G$ b1 l# B# Z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 B9 ~# t0 L8 g" `
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 Y) R6 K% @. m' D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 s! V! g C- k' k+ z, c: M/ U
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ r) @! [5 N; J7 J/ k0 t mcasp->regs->RTDM = 0x00000003; // Slots 0,18 h; G _* Q: j5 z4 G! f: f5 l
mcasp->regs->RINTCTL = 0x00000000; // Not used
) H$ V6 Q l; _1 |7 Z7 s( \6 h mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. j/ H: N7 g1 _" ?2 z6 v/ a3 B
8 l$ z: {: W0 Z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
8 x4 J `. S+ d! m mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" g6 S2 z% F0 l9 s; p! f0 @) l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ _9 B0 C' u8 v" G' T
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* V, P" r* v" \" {$ S) j1 _" R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. ?3 U% A" N9 Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 N! p; Y# C/ B4 u" g2 d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% d3 S5 C* I/ m mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 D' r$ @' A5 X/ i1 [5 s
; {! B9 D. J/ |; M6 I) f0 a
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 P) H {7 Z4 U; o" K ]
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 H& ]5 \; R& f# K
mcasp->regs->PFUNC = 0; // All MCASPs
; V+ b# p: r! E mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% e {! L0 d9 L+ E/ U8 b+ t: Q8 B% k
mcasp->regs->DITCTL = 0x00000000; // Not used
/ W2 O/ r- @6 I8 {0 _3 a1 p0 B5 ^ mcasp->regs->DLBCTL = 0x00000000; // Not used" N2 |5 i: d3 k7 U
mcasp->regs->AMUTE = 0x00000000; // Not used. U u4 P9 h, Y8 X
: W5 K3 s" c: Q/ _/* Starting sections of the McASP*/
3 b# c* d& k1 ?8 b& Z* N mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : b4 d! Z$ k( W) h$ l: ]' V5 Y- H7 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 ~- l+ X9 r5 u mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! Q6 T' W) D4 N ]3 F/ s* `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. n! ]+ Z! R# b* x; R6 p- {+ g
: G8 ^- ^+ b; {6 o0 y+ w9 d
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, _% x) z) G7 X2 X3 H3 n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E8 O8 R, O) I0 Z' V2 q) ?
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ ~6 e; Q& W7 f* k, `/ _' ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" a1 i2 Q; p8 p" Y( u1 O. x- ]' n
! Q u4 s: G+ J# }) _' `, z! w mcasp->regs->XSTAT = 0x0000ffff; $ e7 M, G. X: q7 u+ {
mcasp->regs->RSTAT = 0x0000ffff;
# P% ?* P% d1 L
# d2 x1 p4 Z: A1 @9 [& v5 t mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' X( [. Z: b7 o6 u p P5 p/ u/ G+ [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: I* ~9 N$ }& o" P6 q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 t/ V; _, s2 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& q1 ~4 t9 K) A- Q4 [2 `3 A# Z
: N' I D3 h* T8 l( i: M* m- p! u( v, c
/* Write a 0, so that no underrun occurs after releasing the state machine */# ~6 `; M: t% P$ C; L. [" R$ Z
mcasp->regs->XBUF5 = 0;
3 u% G. @. Y6 o+ G mcasp->regs->RBUF0 = 0;
! @/ C- c* @3 e7 M
3 Q9 W, i; ]3 N n% }; U7 t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" Y* n2 m0 Y* m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 d9 n3 j2 l# O1 F( B: u
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ l+ j0 b- s2 i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. X$ P/ f' {/ p- T2 y# K" l' P3 [
" Q5 T' K- s6 }- \2 ? mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , ?8 H! q* [7 W) R$ D& e6 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 ^& \7 @& U4 Y7 B- Y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 p9 V6 y/ M6 N) I8 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! F& D3 i# X# W* J- d4 i$ }2 P- S( [/ w p
CSR = 0x0000; g- J3 f' W4 `( @: G$ a: Q& }
INTC_INTMUX1 = 0x3d;1 S( I) q5 t3 L' h7 S s
ISTP = (unsigned int)vectors;
/ z& _5 O$ x7 |+ x+ `: S- P ICR = 0xFFF0; & N. d0 p" t) J: k- v, d) ?
IER |= 0x12;
i, G7 S9 ^- \, S- d3 e CSR |= 0x01;
# I! v$ M- n5 `4 L* d
- d5 O$ n' }1 G, k' q4 {$ A; W( V0 H. j2 C8 D7 V
$ ~6 x# A; @% c b& Y$ r
还有就是两个输入输出函数:& W0 G8 [# T2 G$ @4 `6 ^' r5 `
void output_sample(Int32 out_data)
{! ]3 T8 G( G0 d$ a% s$ X: b/ D{
0 D s0 }9 m! x! X% H- h8 F AIC31_data.uint = out_data; : q J5 ]1 c6 B$ i0 o3 h! n9 P
MCASP1_XBUF5_32BIT = AIC31_data.uint;
- r3 S: I. k7 u) v& M1 _ C}. w0 i# p* e- N @( n
* q, u+ _3 R- _# Z6 Z/ I: @3 EInt32 input_sample(void)
( N' p1 m3 j8 A# }8 A/ @) t6 c{ p3 j& M+ N" {- P0 K n
AIC31_data.uint = MCASP1_RBUF0_32BIT;
) f( Z, L `/ ]) `+ d return (AIC31_data.uint);
' k8 t" o+ t% J( n' f4 }, }/ F}5 N$ L1 R# b$ {! v g3 [
1 ~! W+ @( Z9 p; _4 S& k
|
|