|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 o2 q3 N9 ~% ]
main文件:8 |( |+ M2 V( |( t0 l4 t
interrupt void interrupt4(void)
5 ]) p7 G6 B2 D% v) L) X0 S. I{
1 M& \! V; {4 W+ W Uint32 sample;
; g% U, E @( N; R) w) O% t) l5 d/ b# D
sample = input_sample(); // read L + R samples from ADC
+ W% H9 H' g* \3 K7 O output_sample(sample); // write L + R samples to DAC
: h1 K6 ^$ E3 V: t0 k# F return;, y ]; G% C" [, h( m# X
}+ Z, W# _: Q; Q* K) Q, P. [
, I' s9 w$ c: i5 o9 B: ]
int main( void )* Q) m0 Z* V5 i- }6 \7 H
{& K4 v/ P. q' ~6 ]& w
0 F% ] n$ A; u/ D5 T8 a7 {" M9 q
/* Initialize BSL */
5 H. x* d: M6 z8 u v: e EVMC6747_init( );4 u" I& I/ b4 [- d
/* Call evmc6747_intr function */
. w0 _; }! J2 f" T, \. f aic3106_init( );
" D: t" h4 Q) |; `3 s while(1);0 k* `9 O- s" P8 U
}
. x) L; P* h. |; \. H( M g& S
6 e0 H# k+ }0 B4 [( b0 k, T! h
# _' g3 D% C0 X5 [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- b( \0 b, @4 x" o/* Initialize MCASP1 */
5 {3 S- P1 G5 p; ^4 ?8 M, W$ q" ? mcasp = &MCASP_MODULE_1;
. l# G( A9 V2 I! K mcasp->regs->GBLCTL = 0; // Reset
( j M+ B; g- I& W5 G mcasp->regs->RGBLCTL = 0; // Reset RX J; U+ i: }: M2 Z3 b1 B. x
mcasp->regs->XGBLCTL = 0; // Reset TX2 b: i2 J9 b$ K$ G( u& b& D
mcasp->regs->PWRDEMU = 1; // Free-running
3 _9 ~: _0 P4 i! D4 O // configure McASP0 receive registers$ N% {6 N% S! [' k! I3 B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ W+ i% M& D6 `/ }1 X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 Q* W g2 q8 T6 i" U- b& K; E mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word( F. S2 J- h1 h& F3 n
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ e6 W- Y5 ]) v) o ^
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 Z$ X# D0 I% r9 g" _2 q mcasp->regs->RTDM = 0x00000003; // Slots 0,1, A- G U9 `* ^/ @1 {; P0 b4 y8 N% A
mcasp->regs->RINTCTL = 0x00000000; // Not used
. ~% v9 f: b. N2 p6 v( B mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- `& C/ |( U- b: k& z% V7 P* X
5 X/ I# }- W% ]6 C0 O# Z& q- H mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, q2 z6 L+ J M: g6 C$ R
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 V9 d. k3 y3 a( o, |& k
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 `% r: F" ^3 [4 ^/ T mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 g* W6 l. C! T) \
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% E! U. P: D( F# v+ B3 \
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
* q( w r3 E- y7 G+ K mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# O/ @" f- T& l9 _- x
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 v8 P$ D, I: M* g2 g9 ?
: i% a9 v6 M! d" f mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( h, ^$ b! \, q' r3 C/ e( J
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
( V/ n' N+ Z& ] Q5 N+ D5 Q6 \ mcasp->regs->PFUNC = 0; // All MCASPs% L4 `- `; q H" B+ @( S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 q$ o0 U0 Z2 \( o/ O+ P! d1 ]5 M
7 f; M- w; w. I7 _
mcasp->regs->DITCTL = 0x00000000; // Not used
% R s5 E! \, \7 O; T mcasp->regs->DLBCTL = 0x00000000; // Not used
& S# ?! D# q; A: I0 f mcasp->regs->AMUTE = 0x00000000; // Not used- m1 i- L% `- e4 [
) y1 _" }, ~" K6 }; p+ E1 [( g/* Starting sections of the McASP*/
3 u |4 h w* a, T# o mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 G7 m4 E: ]( W) f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 N4 f6 \0 J$ g. ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' u- L5 z7 ]' Z" ?; ?: b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 T& m) M/ e8 f9 D2 y
! }4 J5 {- @" E mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * l& q, j8 _+ v8 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 F9 p+ \8 [2 x! w: N
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 Y& a( [5 O! l: a0 l while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* h9 j# X o4 m, j
' `4 a) j) R1 z6 f* }& R8 P mcasp->regs->XSTAT = 0x0000ffff; * ?6 M6 O( l1 a
mcasp->regs->RSTAT = 0x0000ffff; * b( q7 O$ G/ i5 w
9 k9 e! G/ y6 V# n
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# Z8 E6 _' g$ R. |$ }; n# w l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 j/ [. q% K- I2 O; G4 m* M mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# M& p! o. ]# P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" T& u, O5 X9 ^* c( @. }8 u7 w
% A$ I& G: M* ]% O6 r/ A4 K /* Write a 0, so that no underrun occurs after releasing the state machine */1 x0 w' k8 n. m' r( B/ j9 Z
mcasp->regs->XBUF5 = 0;& _0 } S# ~3 o
mcasp->regs->RBUF0 = 0;* B2 X( B0 G; s$ {! l) k! S
! L8 a8 b1 P; u
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 o) v# J, `- Z s: b8 R0 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 e* ~% w% U) \: e7 K+ D
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + I+ f2 o5 G( `/ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; B6 y: k3 J k1 N$ r
' X% v# z* c$ z6 ]
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 l; X8 ^6 }" q4 v( { w7 F* z1 Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 A% J1 `! Z5 ~' L, O mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 m0 F b) {4 C6 s# m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- R: ^ }) ~& o4 g/ n8 V2 N. s; k
* U) c% `& y a7 s CSR = 0x0000;) v3 ]$ G& Z" ]3 h) |
INTC_INTMUX1 = 0x3d;5 L: ?+ y6 }/ w# p& E- c. b- L* R2 A
ISTP = (unsigned int)vectors;) z+ `( |$ f- w: Z2 l: y$ D3 h
ICR = 0xFFF0;
, w0 q: C+ L7 q! @ IER |= 0x12;
2 [+ [+ R, F( \/ |7 E CSR |= 0x01; 6 U1 _- k8 I a4 O2 z' ]6 `, b/ \/ H
/ z8 u! g' ]/ l+ u3 W9 O
# r9 m+ z9 `. M- @8 W
. P2 ?- p% i2 D" o# R' J还有就是两个输入输出函数:
' @/ T, X* n" P" L' Ivoid output_sample(Int32 out_data)
6 |- ]8 g0 |) R# v6 _2 J. E& \{ k6 g3 @6 W7 Y, Z; I
AIC31_data.uint = out_data; ; t( b; \* v. T9 k- [
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" ?) }* c' U8 {# G0 Q) R}2 B. o8 c+ w" t$ q
# Y% Y# B: P3 o" G- w4 X1 SInt32 input_sample(void)" F7 D; K! g! J' o3 a4 K
{ . y# W# e' ]2 d- o
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' W7 [0 B3 f2 h0 v return (AIC31_data.uint);" A2 s! k& R' H! T: A
}
& n3 t: a% q2 n! k% K" b3 C; I* |$ x" m
|
|