|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; j/ {. r& m7 gmain文件:# ?; B, i l' B p
interrupt void interrupt4(void)
. v" d: {, `% A' A& }& Y{& V/ {, f' R1 S9 q) ?& J% ]
Uint32 sample;' G, S6 _! W c( @& X
% }; f+ s N1 ?1 d1 B# A sample = input_sample(); // read L + R samples from ADC
7 d$ V' L0 `" ~. ]. P. z output_sample(sample); // write L + R samples to DAC
4 V* M+ q8 t1 G6 ?1 ?- C: B" r. b return;2 L/ G1 m; f2 z/ }
}
6 d6 ?' N* J; V* P; o8 b% V% C) A, p* ^5 U' z9 Y) L
int main( void )
y, i3 i: g1 k" I/ {. P3 G$ H{4 `+ E" ?. ?5 K6 m. o
/ ]; X/ k H: m2 o k! _; E /* Initialize BSL *// }: j5 b, g4 ?) K! W* k
EVMC6747_init( );0 j* ^ E! R' L3 S6 s
/* Call evmc6747_intr function */# o% O6 e% A/ Z0 }" V, h
aic3106_init( );1 T: Y) `; d- Z+ L3 |
while(1);( i1 j2 H; c" F
}
% ^* ]6 s; j6 \$ P$ [) Y3 e$ \5 S/ ~& b
) L7 {$ A3 c" waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 M3 Q2 q; P2 g+ F7 X3 u/* Initialize MCASP1 */. ]0 D/ p9 A" A8 ~2 `
mcasp = &MCASP_MODULE_1;* e3 q( k3 m1 {" K- p& h$ ?9 h) u
mcasp->regs->GBLCTL = 0; // Reset. w% ~) ~' ?4 c2 Q6 Y! V" f6 \
mcasp->regs->RGBLCTL = 0; // Reset RX
3 ~/ ^' t1 W* Q mcasp->regs->XGBLCTL = 0; // Reset TX
* n, t, D Q& c9 |. [' c4 R# } mcasp->regs->PWRDEMU = 1; // Free-running
/ O4 d8 \3 N4 ]* R& x/ L // configure McASP0 receive registers2 P1 c5 ~& M5 V1 m7 M( E5 W6 ^! I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% `6 M7 [8 G: x+ { mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- g; R" `, W" Z
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 V+ f& c. J6 I/ s( E7 V6 r
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ N2 f. Q4 `2 W$ h% f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
. [6 X+ H, N% Q. ~5 {: I, ?( [ mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ ~: Y1 _& g/ n- r& J. Y; R/ C
mcasp->regs->RINTCTL = 0x00000000; // Not used1 z {9 }- y) O3 J% e8 S" W
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! T% v- w. U7 W! Y6 V1 {- b
8 ]8 y; p4 }% O! D# G; R
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ w/ T. y! C8 m mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 i' I$ y. r9 C7 t7 i4 Y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! E4 `; n8 ~# L" J# H$ E mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; R( c9 c1 c3 Y$ r& U$ g
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' p' n/ a2 `- |! D mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ A( r$ @+ ?; A* I
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit2 w6 ]& H% N, [2 _
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 l) l, q4 `* }) J
1 L. }+ e0 J: ]
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
7 T* D2 b5 J3 c% d: N& _7 U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- _ [ _1 }% N6 o- w/ d- ]# k5 h
mcasp->regs->PFUNC = 0; // All MCASPs
& {( |# K( I- j0 r; F mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, v* r4 m5 P+ }# W) c) z1 S, J) y6 H
mcasp->regs->DITCTL = 0x00000000; // Not used: t O( o V, f9 F' a3 g
mcasp->regs->DLBCTL = 0x00000000; // Not used$ [) _: d0 @4 Y. C
mcasp->regs->AMUTE = 0x00000000; // Not used+ z5 ], P, [5 J% N/ R' Q/ Y+ P& d
z! I, h+ Q9 Q4 O/* Starting sections of the McASP*/8 C' m# f9 {# w2 s9 T; g
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! J2 p5 X: o9 [1 f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ X) o- [8 o2 L mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 ]5 y9 P2 h) o3 G- A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); A4 F# k8 S, t. \7 g8 f1 T
1 P& N3 F! f) v* z; I C* [$ u mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 F. ], {4 t8 A8 M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% \/ y$ e2 }6 _* S/ Q" A mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ j) y: w% E8 I6 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 C: Q% R7 e. B) B+ G# w7 W, P
: K- H$ W3 {2 Y1 W7 h
mcasp->regs->XSTAT = 0x0000ffff;
q, ^3 X3 @. V* E mcasp->regs->RSTAT = 0x0000ffff;
/ W' Y# H |1 P9 R- c. U2 A0 s9 O2 I, l6 V
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 s% k- \1 s. m. m3 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) x9 | N0 d1 V7 X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 d9 L3 o# k x! e3 P: ?; x- _7 e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# I, ]9 l4 C: p- L" V& |0 Y4 n
# y; S0 V( d1 B3 W /* Write a 0, so that no underrun occurs after releasing the state machine */
$ j6 m5 ^# E/ p8 X; v: ^ mcasp->regs->XBUF5 = 0;
4 T' m, d- A1 k3 H, J3 T, c7 t mcasp->regs->RBUF0 = 0;3 Q+ @. I9 ^2 Y8 S+ P* `3 k, {4 o
2 a* d" C- {1 I: Q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * L5 I8 W- H( p1 G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ _( }8 t" O% z- J& w# J
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 d4 Q& f& v3 w$ ^6 I+ d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) O% _0 `1 k& m3 x8 n6 W
- N+ J: {. H: U( z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 g9 O- d7 M8 m" U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, y. {* e' Z! z) i- A4 S2 V mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! D8 w. }3 m5 Q! [! W7 J" o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' S: x3 f Y3 h0 {
4 V* M3 U! ?) k( y CSR = 0x0000;6 _: p' q* \/ [8 B1 z% n
INTC_INTMUX1 = 0x3d;
. U! N1 \- J" [, f9 c ISTP = (unsigned int)vectors;0 H7 C9 K3 N8 m2 O7 S8 q, m
ICR = 0xFFF0; & Y' A/ o# B+ ]
IER |= 0x12; ! l! R8 o D D& n& Z3 z
CSR |= 0x01;
6 i2 z4 U+ U1 E0 Z7 |+ s2 I) Z9 x S9 f1 R8 o
/ k1 j) q* E8 \& l4 W8 g; [4 C0 \4 R
还有就是两个输入输出函数:
1 v5 j/ ~$ f' cvoid output_sample(Int32 out_data)
3 d* g; k( M, m{7 F2 a5 W5 e9 J
AIC31_data.uint = out_data; 2 g% o& A. P6 s3 ^6 k/ ?$ c
MCASP1_XBUF5_32BIT = AIC31_data.uint;2 S/ J' ~ J$ |& i) o
}' d2 c" X, R. x3 k- H
9 i( O5 `$ J9 W T1 C- ^Int32 input_sample(void)
' a' E! ~" w4 f, ~2 b{ / V8 d1 f9 _) u6 P& _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
* p, U" n8 j6 M) c1 l7 n, I return (AIC31_data.uint);' p: M' o' _1 Q* y0 D
}. {; K% ?2 a6 t5 m8 a# o8 [$ d. ^, `, S
3 q. o$ w0 A4 @) J/ _# L |
|