|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' l* ]- e( b6 C6 C" [; l3 cmain文件:' P4 }) O9 \) f" I. H
interrupt void interrupt4(void)
5 X N8 c7 K+ a. U: f/ \{% y9 }1 }9 @' I1 _+ p
Uint32 sample;* w) [! g @% r- c1 N7 Z# \
9 N8 k+ l( v/ d/ ?3 c& D
sample = input_sample(); // read L + R samples from ADC
/ M% C$ G! {4 G/ k0 p# \ output_sample(sample); // write L + R samples to DAC . K4 }3 Z: l- U, x6 u
return;
) S( o0 h% B/ L1 ]4 O% L6 Q0 A}
$ R3 u! g% p1 V. K8 o. X3 ^1 ^5 a8 N# s; o2 K% {8 K/ ~, k8 @
int main( void )+ U" w9 Z2 V- g; |, t3 P
{
/ Y* `: c1 J+ V3 Z) R; W1 s
( ]# ]7 j0 q1 C7 F /* Initialize BSL */9 w8 b8 k2 i7 q1 r) L2 }
EVMC6747_init( );
& i% h/ U0 A/ @/ l. e /* Call evmc6747_intr function */
1 r2 c G: X0 ?$ \; k" s! ? aic3106_init( );
4 N6 \* |4 F2 ~! A/ w! v, U while(1);; _4 t, L7 M2 b" b1 G+ S6 V
}
) S8 z! V5 [- o' V0 L% {, x
9 L* v: C5 _1 j% o7 a1 A! M6 X9 ]& N
, B: E4 D4 `! v" X8 ]1 u4 [0 Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ z# e4 ^6 Y3 |
/* Initialize MCASP1 */: o1 ~* ^. q5 [5 G+ G' U7 e
mcasp = &MCASP_MODULE_1;
" S. C; ~: A& c8 a mcasp->regs->GBLCTL = 0; // Reset8 v! h1 q! o6 G: D
mcasp->regs->RGBLCTL = 0; // Reset RX1 ?! w7 E; z' \8 S" i" U9 ^3 `
mcasp->regs->XGBLCTL = 0; // Reset TX
9 Q3 M9 a7 B6 @9 n mcasp->regs->PWRDEMU = 1; // Free-running
% }) `. k% I, f. q! R // configure McASP0 receive registers4 _# Q/ P3 x! c5 j# ^
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! Z# e# j! ^4 }
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 h F0 J( t0 x1 F9 L mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 d3 q8 [2 r$ W0 q1 j mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* F6 J, a8 v" b6 v
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 p2 r3 s6 b( I3 z8 o- a mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ x% i! S) h( X
mcasp->regs->RINTCTL = 0x00000000; // Not used% Y0 C. K2 ^3 `. G
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 X' y1 `7 m$ o; L' w8 _
7 u( R/ T2 v' X# y
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- s2 m9 q% \% n2 j4 M. m
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Q- n4 p- q! m# L+ x6 _$ c" _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 v8 x' A+ ]% E- h' E; H# y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, N- K! Y4 A$ a* d8 V4 U6 j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* W) L" z! h: ]9 h* }1 C9 j& R! { mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ b# Q. W6 d7 L$ p mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit3 d3 p3 W% V5 l: ]+ O
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j, H8 U. {8 `8 f! f3 C" |9 @
5 |2 z! x+ i/ k mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 P) R8 _& J4 h* G% f
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
9 D9 _, m/ t6 \, F4 s mcasp->regs->PFUNC = 0; // All MCASPs
6 d) Q/ Q$ o0 b) e3 ~ e mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 B7 f ^8 H& W+ D# p" @
5 U7 [8 Y) Z8 y0 ]/ [ mcasp->regs->DITCTL = 0x00000000; // Not used
6 k) N% d6 @' N- T mcasp->regs->DLBCTL = 0x00000000; // Not used& N6 }6 x+ | t) o
mcasp->regs->AMUTE = 0x00000000; // Not used4 m3 I6 [; D7 ?( _ o3 ]
6 i" a. A2 x& U7 L; i& r9 n/* Starting sections of the McASP*/0 Z! C5 Q3 e8 a/ {$ C& r4 X) \" x [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # w8 c8 b. Z9 q, _) V( D: C" E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 {" e4 |/ q0 u) D mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * C1 P3 P( E* S5 S) H+ `9 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ d, F# G! `1 E* N9 i! O9 p' B: k
o8 e! B, o b4 s3 c- h' H( W' k/ G mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # d( D3 }4 [% I" e L& Y. o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& k, t' k. V- K3 n$ b/ X0 y# m mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! A# R K" Y% B3 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 w: R+ |( \& b5 Y! A
* N9 H* c+ N7 D$ f: o- w/ o1 [ mcasp->regs->XSTAT = 0x0000ffff;
2 ~; i3 r- g2 u mcasp->regs->RSTAT = 0x0000ffff;
$ H0 U4 M# L) K, j1 s X! d
+ E4 w; A) [$ l" D) }: x" | mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 e3 s) o, a) e# j5 ?& t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, X+ F; O/ O* C9 n! X3 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& C- b4 G, o' N* ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" q" X2 G M8 k7 y5 d/ ]$ y! h
0 O& @( k$ P) u" Q. o, k /* Write a 0, so that no underrun occurs after releasing the state machine */$ `( p7 M) ]/ U# B9 {
mcasp->regs->XBUF5 = 0;0 p; f; s5 C9 `+ u- I" G4 r
mcasp->regs->RBUF0 = 0;
0 A ?7 W: L! x8 t4 y1 X* q/ M$ b( A3 [$ P3 O: ]
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & v2 A0 C! u9 V! O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 c8 |1 [3 m% i mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 ^2 p% c9 P: K& W6 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: I6 W. q& R; t" d2 L; I# q
" g. b' X* h. Q& Z) y: n mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 w: l3 }8 y3 R! l' x8 } x0 L) J while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 k, c% a: P4 ~3 X
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' a- ]; J w* e: v3 n" C D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 V3 L; {/ {2 w( P" d9 N. _
5 N! W5 x+ ^6 j$ X- X CSR = 0x0000;* N' r" M1 m8 J9 I- L
INTC_INTMUX1 = 0x3d;) Q0 E! y0 s9 z* w
ISTP = (unsigned int)vectors;5 d2 ~( C: D7 f5 n' E+ E+ I
ICR = 0xFFF0; 9 u0 |. l. _) m) J0 ], u* H$ i
IER |= 0x12;
* |0 G# P8 E. e: F; y CSR |= 0x01;
" S: _; @& f$ Y* l2 O9 r4 [# s. t" D( f$ E V7 B) [/ J2 J6 ?
6 J, x( I' Y9 ^. d
* F2 e/ S6 M8 M+ }, t* ~( T还有就是两个输入输出函数:
( g! B' I/ R2 Mvoid output_sample(Int32 out_data); W( q: U% u8 J
{( o7 X! }6 I2 g5 I" w
AIC31_data.uint = out_data; 5 Y1 J! G* F( Z! e
MCASP1_XBUF5_32BIT = AIC31_data.uint;
# Q& Y+ B6 _2 g$ s4 x}& a6 b: L) O. |
8 g& g2 S+ i! t% s4 E2 s" Z
Int32 input_sample(void)
. ]4 M! W0 `2 |* e/ C- }{
; X; ~* W8 m: | AIC31_data.uint = MCASP1_RBUF0_32BIT;3 d9 y1 Y, g6 D5 L- Q1 `
return (AIC31_data.uint);
6 l8 t0 L. Y# S. _. |}' n3 H W% |1 n0 q" y; `3 V
8 g1 z. S# i- H; f9 { |
|