|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! K! E# l5 c1 `- u3 omain文件:* D& b0 J% `* G* w* d& f6 [! c+ I
interrupt void interrupt4(void) , V. _7 }4 V5 f
{
v9 |, ]+ R+ m3 }8 l1 j Uint32 sample;
1 @/ s- h" K9 f" Y
+ V1 b* ~: r% I H* a sample = input_sample(); // read L + R samples from ADC
' G1 d6 V7 ^, G! D8 j output_sample(sample); // write L + R samples to DAC ) X7 ? V6 B8 ]
return;
, {+ Q: t5 l7 J$ ?}
3 J' n( [# I# c) `5 B- M
+ R7 H7 ?# C/ s8 x+ nint main( void )
, `9 r$ z7 K! u. o{4 W" g: @% L3 L4 F/ Z5 N3 H$ z- C. u2 }
; P5 o5 ]1 v" n ~ /* Initialize BSL */3 X% ~! t. q4 H2 o; x: x
EVMC6747_init( );
' u8 g3 S/ A! M) f% K/ A; p. t) ` /* Call evmc6747_intr function */& l1 @' S# s, h. B7 s
aic3106_init( );7 R/ \8 P3 r. J# f) {+ e: N
while(1);# H! C( ]$ _- @8 G g
}
; Z) _3 D2 O' _
+ c/ ]" w. u3 X8 e
& E7 ]# r1 I0 |7 E4 C: vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 a% K$ T8 u* A! P: U- ?6 G& ~
/* Initialize MCASP1 */, z: ]4 d6 T- `6 v: ^
mcasp = &MCASP_MODULE_1;& q$ T: S2 H. a
mcasp->regs->GBLCTL = 0; // Reset# P" M1 N- v& u7 k9 K% X' k$ Y
mcasp->regs->RGBLCTL = 0; // Reset RX' o; `4 P" p: L; d6 q* x
mcasp->regs->XGBLCTL = 0; // Reset TX! n0 ?- M' Y: S" K& _5 ?% H4 R
mcasp->regs->PWRDEMU = 1; // Free-running3 O2 y8 x! F, i3 M* \9 r& y) e
// configure McASP0 receive registers
( o4 y8 Q9 g: Q+ }0 Q. R/ u3 _( L) u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used, i* f s% ~9 ?0 n e
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 P1 ?: B3 D d+ e; X mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. K# F% Z1 O( V: I( z- j
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% z. L8 L- E3 N) i4 @9 f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" w/ ]+ K8 S; U/ y+ N mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. b1 a6 S0 c3 ]" K" P mcasp->regs->RINTCTL = 0x00000000; // Not used% X g. m# } }3 R. ~% g, z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 [# O3 `/ g9 S& J4 O' K: p y9 e2 n/ Z2 ^3 l+ h
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% }% ?" d! z# \
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! x- B( O3 j: x; p' `0 G
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ P8 {# a2 [7 Z6 [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ g- B3 p: }: R/ S3 m! r8 m9 C
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- o1 b0 h1 G* E3 }0 ` mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 P# h% q; P, t" p9 E mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit5 y0 y. z* L# Z/ Y+ L
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 S+ {0 R) q' m- e
4 f. K; C$ I I) P5 l' R mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
! e8 F* g v7 n# B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 R6 I% t9 f$ t. @$ Z f
mcasp->regs->PFUNC = 0; // All MCASPs2 n+ `. G8 e& @' `: m
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" Y5 k7 O6 o1 G; s* C; U8 @' s' L# f" m. m3 e- m9 A+ `; |
mcasp->regs->DITCTL = 0x00000000; // Not used* a1 |& D7 s$ C1 q
mcasp->regs->DLBCTL = 0x00000000; // Not used0 d% L( _* y8 f' s
mcasp->regs->AMUTE = 0x00000000; // Not used5 b4 f! a. F$ K
1 Y3 m' X, }0 f, I4 f
/* Starting sections of the McASP*/# A0 F1 l: j% R8 Y2 J& t" b, z2 ?
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; f! m! ^4 Y5 D4 \: Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 9 q7 Q1 e$ g5 G2 Q# {3 j+ b
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) g" ^4 {& i* j) T: t0 m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- D2 U0 h% p$ i8 b2 ]1 z0 |# `+ y' t, Q) [
( r) L0 E1 `+ f& P0 d N mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ t8 A. P- A p( y% k, H5 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, L; e0 m4 h: E$ l0 z! C mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 v \6 H0 |$ r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. W7 N: }. e/ B" B# g. W1 z; W
& S0 J( M K; U" H" z3 D/ | mcasp->regs->XSTAT = 0x0000ffff;
0 f% v: l8 r' n mcasp->regs->RSTAT = 0x0000ffff; ' c G8 _, y1 h
* e) X7 f; M8 m4 L% J3 l
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ q% s3 Q8 Q4 v; g$ m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& k& ^7 g6 a& a- Z9 ? mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
c6 ^; m/ X: S {/ f; s# r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& ~5 p5 I# V7 a; ?; P3 k
6 _$ x& x9 Y. ~# J /* Write a 0, so that no underrun occurs after releasing the state machine */5 A9 D% a5 e0 P( N8 ?- ^. Y) A
mcasp->regs->XBUF5 = 0;
5 O; s9 W0 s" ~ mcasp->regs->RBUF0 = 0;( h7 v8 Q) C1 Z* A
/ B2 o9 |# V6 y/ p+ v1 x* H- |; t mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " U \- X: w0 @- A; b' w# j3 o7 I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" [" e+ y% x4 t# p
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 o/ E, \8 J- r/ s" [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* S& i5 h8 ?6 E& K! r& ~
6 I* P& L8 v6 k, k
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- [- B- S4 `" g3 K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 L3 b3 e& a# h1 U0 X" ]4 d- D8 f mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
! x- D t5 X- e% r7 e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: s4 D" x* r2 ?
6 K' i7 j& f2 n; O6 l
CSR = 0x0000;! T: w/ n5 C# y* V* g1 X9 Z
INTC_INTMUX1 = 0x3d;
2 K) ]% @9 l: I2 q$ s* S# S; V1 ~ s ISTP = (unsigned int)vectors;5 t9 F" n7 B5 k( i1 w7 c
ICR = 0xFFF0;
6 }" @1 f) [& s& s5 l* u* C E/ D IER |= 0x12;
9 E/ x# h5 [2 i; x& ^ CSR |= 0x01; 7 p& q) `& c* ~" i3 X. q
8 P3 X+ ~% p2 T2 O7 Z" C4 {0 I" y, k- J0 _9 ]" E
, C/ R% `0 c% K( v还有就是两个输入输出函数:
3 |; r8 n2 `7 m: A3 E/ ovoid output_sample(Int32 out_data)' c3 Z; C( s# }0 u. K1 k1 p
{9 r( {3 Z" [9 H! P
AIC31_data.uint = out_data; - Q& w+ w1 [9 i. K) `
MCASP1_XBUF5_32BIT = AIC31_data.uint;
, s2 G+ c2 H3 O1 c* k8 ]}3 c2 [: s1 m0 u4 h, U) F2 ^3 _
/ H1 K7 q4 T6 X3 G6 G
Int32 input_sample(void)4 X; W2 ]1 r6 ]2 ?2 z
{
! U: O4 r" b* ~+ @4 p; ^/ O$ R AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ f$ b4 R" S+ d return (AIC31_data.uint);) }3 l; Z( q: q$ o. l6 i
}6 n# J- o) g: y
1 a: R t% v$ M7 F4 h6 I+ k2 K |
|