|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 S5 J. |. C4 U% i* ^. Omain文件:
: G& Y2 |6 s4 y4 u. ~interrupt void interrupt4(void)
0 x9 T1 H% K/ B1 O{
) I& C' |$ z1 f Uint32 sample;8 n5 m: j' Y5 z2 N1 q3 F8 c9 G: |
+ Z5 J5 m" g0 K+ S
sample = input_sample(); // read L + R samples from ADC1 b9 T: D, e2 A, j( d
output_sample(sample); // write L + R samples to DAC ' T& c7 o ]: X
return;% Q# t; Y3 g+ x& J4 g& z5 Z8 Y- r* J
}8 b4 F; B* w- Q4 v* D, `% x# Z
3 X& e7 p. g6 c
int main( void )
# \8 `1 j4 K4 u7 H& k; m+ }: L{
9 W3 w P. F) X1 f( l t* [7 Y
4 ]$ R' }) Q% o4 `. p /* Initialize BSL */& q, X/ F8 A2 z" B P n4 W
EVMC6747_init( );
$ ]9 Q* {2 X' @ /* Call evmc6747_intr function */
- U1 I" B' r9 V% A$ S' S aic3106_init( );% j( ^% j( O% n* g4 _; E4 L" Z
while(1);
3 m* d3 @7 b" W' S( ^, f}" ^# z# |% `( Z; u" n
5 w" Z' w y1 r- Y& k) N, J
7 Q% \1 e% @4 ]* P. {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 } D+ U+ o$ I& m$ `$ _+ e
/* Initialize MCASP1 */1 r+ I3 T% F" I4 q( m
mcasp = &MCASP_MODULE_1;0 K$ p V5 @: E A+ [3 B
mcasp->regs->GBLCTL = 0; // Reset! d" {% W( B8 r$ f
mcasp->regs->RGBLCTL = 0; // Reset RX8 W4 B3 K* u" h, ?
mcasp->regs->XGBLCTL = 0; // Reset TX
u- u- W6 q) ^4 {4 K5 \ mcasp->regs->PWRDEMU = 1; // Free-running
/ b! H5 v7 B7 y' t0 {: ]: G f // configure McASP0 receive registers
3 k2 @6 U" Q4 \' m: z" Q% y7 w. ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" s& H! {4 V: Z2 O, Q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 _9 y; J0 n1 d% H I# ^. ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 t# ?2 O1 ?3 U* j/ r6 |- @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 J& N2 i! ?( c. l# Y mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
" F T J5 B* H: K- O mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ u& J1 Q8 \" Z. B* b+ B8 @* k mcasp->regs->RINTCTL = 0x00000000; // Not used
# w7 U) t( y% E. Y1 i$ y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 D2 D3 X4 r* k2 b0 n5 T7 ]
' `0 h2 @9 Y3 x0 J mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 x, I- [/ X; k4 s& @$ t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% G7 ]# q' a2 z. O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 d( \! N$ x9 A, c& b9 l mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 @0 j/ g! _- w# q
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 q4 l [! N2 q2 [' v8 z, A mcasp->regs->XTDM = 0x00000003; // Slots 0,11 j& ]3 o S) i8 i9 n
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. \! k* B& a1 x9 K3 }& \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! d4 m, k, e2 Q! x* K
" c& L6 P3 f* N
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 H7 [+ m2 L0 ~$ h$ `0 C% d4 z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# ]; Q4 n' G5 c4 P& {( T7 f1 ` mcasp->regs->PFUNC = 0; // All MCASPs
/ v5 O% n' x: F& ] K1 G3 D* ?0 O mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% u+ {/ G; a4 N. H* Z
6 g+ g( H I' _+ m% U/ c/ x
mcasp->regs->DITCTL = 0x00000000; // Not used
% }0 B( H" F) S mcasp->regs->DLBCTL = 0x00000000; // Not used
$ I* v4 d% e8 T+ y2 e' I5 x mcasp->regs->AMUTE = 0x00000000; // Not used2 h5 |1 G }" l: }: t: t# j
9 Y( s4 @5 U9 _) |" O/* Starting sections of the McASP*/
2 v$ @* t, s, W8 v mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , n7 T V7 g( c0 H1 a2 z ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: R! Y/ }, ~% H: D6 P& I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & N% H% q- [9 q% f; [4 ]& P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( L! o6 P& f9 U. s4 }3 D) X
6 [9 S: N+ |. u; v! x
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 ^6 N( ]7 i3 @ M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 Z7 a3 b# C- M9 j3 F7 \
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G6 n. O. Q2 B# X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( O* r) }8 n' \1 U% l( \0 Z
5 C" Y& b& r6 A: @ mcasp->regs->XSTAT = 0x0000ffff; * N, M2 K* ^ ^2 g" r0 b
mcasp->regs->RSTAT = 0x0000ffff; & u& P3 _' x& N- j
* e' m6 q0 d9 | mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) H9 z, z; {: K1 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 ]9 i" I3 w g$ x& L# c mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( n- _& J4 \5 t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) z) Z; A1 l3 \+ n7 z l6 X
) r; ?$ F, K8 W7 r8 i /* Write a 0, so that no underrun occurs after releasing the state machine */
2 W5 @- ~/ V8 L! \0 \* r7 { mcasp->regs->XBUF5 = 0;: O4 G0 `$ E t- q
mcasp->regs->RBUF0 = 0;" z4 `/ x' R) H
y/ @2 r- N& t. ?- j
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 G+ `& D2 X* d) S2 D) z7 F
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) _0 i3 i" E# [; K' w2 O
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 g; q- T2 H0 Q; B# J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- f5 T7 }% g8 U, \( v
0 T$ R% E2 y, h8 ]8 j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( k T+ E- L2 D6 B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% [9 a' v5 f: X5 v! @
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* `; U2 ~5 k+ H6 ]6 ~2 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; ^7 g8 f% e n1 Z' f) i$ M
2 _; g7 k2 O& s. i! \; }
CSR = 0x0000;! y. `( ~9 B1 G! V0 E- C. \+ }
INTC_INTMUX1 = 0x3d;
$ e0 W6 |% v! a! w8 S ISTP = (unsigned int)vectors;: M1 E; I1 ^8 j3 s) R& I- ~$ T5 ^
ICR = 0xFFF0;
! a- k; H/ R. `" ^7 ] IER |= 0x12; ' i7 B+ p0 {2 i Y% Y: X' V2 `
CSR |= 0x01;
2 a, h3 r" c' ?9 u' _
) K- n( f0 d1 R' w0 Q
- w' O1 W9 x, J; t2 D, m" a h8 O6 }6 l9 ~2 z1 W$ B
还有就是两个输入输出函数:3 N c# I* t: R' G7 `+ N) ^
void output_sample(Int32 out_data)
6 f& v1 i1 n6 Y; u0 l{
$ N4 F8 ?8 Z# E4 ~ AIC31_data.uint = out_data;
7 H; u- s! b0 g9 k9 R: {6 X MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 e4 r; h) @. T! } Z! I/ J" u}
' A: i" [4 E3 ~3 h
/ {* n, f5 H* D9 _Int32 input_sample(void)
& i" `" O$ d7 |$ h4 V{
( ~9 l* R2 h- V+ X. d AIC31_data.uint = MCASP1_RBUF0_32BIT;/ D- B7 I- C4 n: x
return (AIC31_data.uint);: U/ h# k+ n' ~# Y+ j% W6 Y
}: M0 _- G3 C; |
- J7 B& F v% H, c+ e! n- J0 |
|
|