|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; K. D1 E0 ^. c0 T
main文件:
! M4 U+ [& p3 f8 c7 E1 @interrupt void interrupt4(void)
. ~) s4 D6 Z8 _, q, C) l) ?) `{
8 |& g* R4 D: G `- [* k Uint32 sample;
3 ~. e6 L3 V- p- e6 F/ ?( X1 w+ p# b: L; S( z
sample = input_sample(); // read L + R samples from ADC
5 u. U5 Z; G: n4 L3 J( V ]% a# j output_sample(sample); // write L + R samples to DAC / K; Q# i' V& m8 X _+ H
return;
1 O; ^% x. m4 y$ U) C7 v}
; d& i( ]6 n9 o3 k# {$ @
4 _3 `& l k! v6 Cint main( void ). T/ Z& J2 l$ }. T: ^: N3 V" ~- G
{! z, `# Y3 c( f9 E7 j0 ^: ?6 i
$ I% c, Q8 }: U: R2 o: I3 a( L /* Initialize BSL */
: T V# F& g q1 Z9 A& B# U7 y0 j EVMC6747_init( );
" e4 w% B8 _# a O. M' M1 ^* X& _ /* Call evmc6747_intr function */5 _* d9 G2 ]* W5 c# d
aic3106_init( );$ @ @! U* z" k) X
while(1);9 v$ _7 ^& b6 n2 L. h' ^) b1 k& [
}
W: L | a& x, O: G1 Z+ \3 c. X% Z5 u' I$ Q
) U7 i+ J$ m3 R( v1 Z1 o- W h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& H# L" F$ j. A
/* Initialize MCASP1 */4 }# a" V' ^2 U
mcasp = &MCASP_MODULE_1;
' _: |7 {# O9 u# C* y mcasp->regs->GBLCTL = 0; // Reset
7 v% Y& W0 C# {+ E+ {) ^5 e mcasp->regs->RGBLCTL = 0; // Reset RX; G8 t2 z2 p. u! S
mcasp->regs->XGBLCTL = 0; // Reset TX
6 x% } E# z6 g mcasp->regs->PWRDEMU = 1; // Free-running9 v! r$ p4 g) {% \# B& B
// configure McASP0 receive registers
9 H) @, ~1 N' B7 m mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used+ c8 p" p% t4 x7 f( {% \
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. I) L3 C2 e: C( {; h& a" o0 d. X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 u+ N2 E" _& K& C. ^0 ^4 k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( l& ]; e) \: f2 x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' B( w7 X( `7 D; I$ O4 H mcasp->regs->RTDM = 0x00000003; // Slots 0,14 x+ x. H. N1 A `) t
mcasp->regs->RINTCTL = 0x00000000; // Not used
5 ~7 ?: W; G' |+ w; h2 ~% G mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 c9 u; s/ N1 m0 m
4 h( @& l/ C% y- g
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& p* M) h2 q& ~/ D
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. M% L& ^/ l8 z" D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 `1 ^9 A% ~7 a( S* z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; p _% Y7 j% x ~
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: u6 w* Q& T2 A- b2 H% W) h& B
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 Z8 G2 v7 l0 y
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit- N- s& K- }" u4 a6 t9 m
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: p) ?* U& a- c- U# n) S0 v
/ K9 q4 b8 l0 U0 o. m) \ Z* f" r mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 L( S4 i. R6 u& U! o6 f4 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
S# J. w3 z( z7 ], ?0 x& f6 | mcasp->regs->PFUNC = 0; // All MCASPs
& O3 [! y. R7 t0 u mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
p9 n" k1 V: A3 P" T
6 r* \- h' D, T g5 t mcasp->regs->DITCTL = 0x00000000; // Not used
. J1 ^6 Q- }3 c" g mcasp->regs->DLBCTL = 0x00000000; // Not used2 ?0 k) o6 p- I
mcasp->regs->AMUTE = 0x00000000; // Not used
( m4 J; ~) U2 b$ W6 Q+ V' H: i. T( ]4 g4 P
/* Starting sections of the McASP*/
8 Z& v1 H2 M5 j/ Z% | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- a( D7 I. m* k& q. c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 5 Z+ M0 |6 U1 S
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * \6 s3 n6 G! e( R) ?$ Z0 q- z8 k( s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 r: B& T" e3 K! O& p2 T/ J" ~( A
6 P) z. ^' Z2 K+ | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% m, O1 b C: B0 [3 l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON ); M: A7 k V& f! V: O
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % O- _+ A$ m0 x$ C5 b% Y2 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% P: {9 i- ^! j8 s8 B" D
5 R7 _, b" Q% G& _. @. Z$ b
mcasp->regs->XSTAT = 0x0000ffff; 3 l. O' e: ?6 r# @+ ~8 Q" j) d2 ^" Q
mcasp->regs->RSTAT = 0x0000ffff;
0 s% a# f) J! ?& [% _
: ]3 @2 y) L1 i# f3 ?9 \: k" B mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) I0 \, b5 W+ `9 _8 r7 c9 S6 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 O0 I" w9 ^4 o& N6 A5 x' g4 ^ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' X5 x; s' b0 R' o4 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( p/ g$ `3 H. e6 ]6 |: n4 m
7 {9 I O& m: a
/* Write a 0, so that no underrun occurs after releasing the state machine */+ |5 i) m4 k: ?
mcasp->regs->XBUF5 = 0;5 U) c+ N. }8 J8 A# j) v$ K! m
mcasp->regs->RBUF0 = 0;
: ?# y4 P% P# |4 d
3 O7 L! l9 I! V# d mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * x6 s9 }& M' p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- C4 D6 ^6 ]3 d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : z0 K- g$ M" Q4 t2 H9 D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& e# B& S' T6 z3 `2 Q1 K' `& k$ A
9 m7 F! G# ?" l* N
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- R: M6 J$ m, ]3 H! U2 i1 v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ i8 t5 M' W' M: I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* Y7 F0 D1 T7 h& E; [$ y1 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 F H8 B. D7 A& o' ~$ r
) w2 W8 W! j4 s CSR = 0x0000;
2 D& B6 R4 I: h8 C# E- O INTC_INTMUX1 = 0x3d;/ J$ d3 e4 `% z1 T
ISTP = (unsigned int)vectors;
' s# s8 `5 S8 D6 d, D4 T) s/ r ICR = 0xFFF0; 3 F4 n% Z8 k/ R d2 S
IER |= 0x12;
+ G# I q7 o( \0 [ CSR |= 0x01;
& f2 r; Y$ N# [ ^& _, l1 q; z, x W5 V2 b9 P, z
4 C& K1 \* m( A4 d$ v6 q
1 {5 ]0 ^/ n2 D, T
还有就是两个输入输出函数:- q/ P1 Y9 T. E g% T9 [
void output_sample(Int32 out_data)5 ~/ W, h1 d# V- o1 ~( X
{% D, x: L5 {$ o0 R }9 ] L
AIC31_data.uint = out_data; * D" n2 t! a* ^! Q; D
MCASP1_XBUF5_32BIT = AIC31_data.uint;# v6 J& Y- r g3 _6 b
}
3 b+ j% Z0 \+ P0 [6 ^- G
) J3 z- U3 X( J6 E: A6 Q8 E+ c# NInt32 input_sample(void)# I8 `0 F1 O; ^
{
5 x3 r) t% N3 ^6 k/ W% x6 H( m8 ` AIC31_data.uint = MCASP1_RBUF0_32BIT;; j9 z& {/ ?9 z3 e; c
return (AIC31_data.uint);" @) z0 s: b( c4 \9 R$ k# x
}4 p3 \1 P. O" h6 E7 S. n) R" H3 F
2 o. n, a7 @- d/ p- C# \, P* o1 T
|
|