|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% b: q% v' \6 G) d% hmain文件:
; c% ^7 c, l, [7 f. u. D4 ninterrupt void interrupt4(void) 0 Q, R5 g0 i4 m8 Q; B
{
! J7 y& V) G3 Q, C6 } Uint32 sample;
5 m' E3 w4 E8 G
! i9 w7 j* N7 v0 g% A sample = input_sample(); // read L + R samples from ADC# r$ F' K$ t6 s+ j
output_sample(sample); // write L + R samples to DAC 7 C* q6 M1 W( L/ W- |7 b; z( T- w
return;" q2 Q( W; A0 Z& r# C2 L6 j! p
}
3 @" b$ p- B' S+ }$ W# d
$ {5 o( ^7 K: M5 z% W! W0 {: Kint main( void )3 |# q7 o2 O0 f: V6 D- i
{
; ?- W4 ]9 r" M
! ]6 n8 w2 y& p! s /* Initialize BSL */
" h L: r# V3 U, A, N EVMC6747_init( );
0 E( l6 q( B/ G7 R$ I0 F* }% ` /* Call evmc6747_intr function */( [. Q8 C V; E9 P* L
aic3106_init( );( U4 ]8 z9 F: x/ b# o
while(1);
: g2 v% o! N: w+ L8 Y7 l7 j}2 }- H7 X$ h8 F' C' y
( m# j( O2 G; U& l+ C8 l! T8 I( [& f8 A+ g6 }" v+ U$ X4 X# H& Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. r+ k9 L- t1 z. |0 O. k/* Initialize MCASP1 */1 ?$ M7 G1 W/ h% E$ D, ?
mcasp = &MCASP_MODULE_1;
5 X# c! r7 J5 F O. v2 X j mcasp->regs->GBLCTL = 0; // Reset
! \+ h( E! r/ e3 Z: _% N# E mcasp->regs->RGBLCTL = 0; // Reset RX' H& q0 y% g. D; G8 @7 O" _
mcasp->regs->XGBLCTL = 0; // Reset TX
' m! ^0 X) x; P' E n! M mcasp->regs->PWRDEMU = 1; // Free-running' A ? A9 Z8 m3 y# k
// configure McASP0 receive registers( z2 R. i1 F. E* m0 J8 z* z- M) \
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ Y/ s2 n. X4 H: B
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 a' a* r; d9 S1 b
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 \' r' T) E) y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 s% D8 s" _$ k4 {" c. f7 i! ` mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 z1 n+ K2 B8 s( ^
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
! C _9 y- _8 v" z7 e mcasp->regs->RINTCTL = 0x00000000; // Not used; G; |. F- z: N2 P3 f
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: h0 z+ I# H& g% K% F3 ?
: w8 `+ S p2 w1 s' s: h mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% {! y8 `! ?0 Z& T3 A* H% W8 T) p
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 g! Q! _9 L5 u& X( v B; e7 w mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! W7 u+ K- T% Y* u G2 a
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 ?" C1 h/ _7 ^ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- ~8 A, S, W+ L1 V( f" s; ^- U0 D) y mcasp->regs->XTDM = 0x00000003; // Slots 0,1# y1 r/ W3 T' ^% R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! f5 n6 W* @2 J, C; }2 i' K
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 D# R% F: H* B8 c$ B
( j3 U! M* z, G8 v" w) D `
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 w4 @$ n) ~. J# \2 o( J4 D
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' p* P9 e. E5 T/ V# _4 B3 @8 d
mcasp->regs->PFUNC = 0; // All MCASPs; K, [9 m9 J7 L/ c7 D5 D5 Z- u
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 o% M% a- p- M( k$ L
3 [8 I% m2 {9 e: `) K$ y. x
mcasp->regs->DITCTL = 0x00000000; // Not used
) Q& {" l# l2 E- R3 X mcasp->regs->DLBCTL = 0x00000000; // Not used
" V% h Z- o% s7 e1 r. A8 w c mcasp->regs->AMUTE = 0x00000000; // Not used" m/ V! S! R+ `% ^7 K
6 m6 o* J( K) u
/* Starting sections of the McASP*/0 y) E; r. a. t
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; u5 p9 J- A j3 b7 Y/ w* W9 M9 i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 Q3 X# f& r V- u7 ^
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 s; q; E/ I& ~# w/ O4 ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 n U# V, L% ?2 t$ }+ t' Y% n% ]- X
3 a9 w* v2 d6 I) z* P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; n" F$ d! L& P8 E5 F3 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. B( [. |: V* Z; X; ^3 g% b; S6 ]
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' N8 e2 ^4 x: i+ h/ s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 ]. ]: L8 H" Q. \( O7 G7 i
- H: a* i& T( i' C; G2 R+ T mcasp->regs->XSTAT = 0x0000ffff;
# k' L. H' f% t1 Y6 v# u mcasp->regs->RSTAT = 0x0000ffff;
, y0 d. q8 P- z3 z2 N- a' ?* [; X
( a, L/ I$ N' C6 A0 Y mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# _. _3 N* }6 S0 j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); L& O6 g3 U5 N1 w5 [; C4 o+ S
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % H; M, w3 X. _0 f' K! X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 T9 S& ?, X1 p% [
) D9 I5 r: @# }+ ~* f
/* Write a 0, so that no underrun occurs after releasing the state machine */' ^6 x- d& E# {( ]8 v
mcasp->regs->XBUF5 = 0;0 l A P9 B! _' {! |& w: v
mcasp->regs->RBUF0 = 0;8 |3 h. R* g3 ^" `* \
0 T! ~) R; i( }: |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : P( m$ ~# |# I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, q P% v" ~! f mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
9 G: ?# K) n1 B4 W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. o$ l& _# e$ u4 T( E
' F% q. a+ |$ Z4 b% f mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ w L9 ^! g. K8 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# g7 q+ l! j& A s" c" Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# b0 n2 b: d- H6 w& D( \* } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. M1 U- g% |- e& E
+ d- V) r+ J9 O- {: E2 }8 ^! f CSR = 0x0000;3 C `" l% h' W- u- k
INTC_INTMUX1 = 0x3d;) g! l. K) Y; s# n o% L
ISTP = (unsigned int)vectors;
* h# j+ U* q& j ICR = 0xFFF0;
; m9 |5 W" i( T3 y IER |= 0x12; 0 x# U- ~0 j, U' i4 P, }
CSR |= 0x01;
! j8 q* {" Q9 n; V5 o2 H) |8 U, @ K5 h
7 U9 o8 c7 q x- b
/ F/ g+ Y0 S: z4 J. J; ~还有就是两个输入输出函数:+ V' r: t9 n' d/ `
void output_sample(Int32 out_data)
# U% B" |" \- [# u2 o) U; [2 C* X/ N{4 d, R0 }* Q' R' \( v
AIC31_data.uint = out_data; / s( d8 Z$ ` r' |) F" P6 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ H: d7 J+ d+ m2 j/ a* H2 ~+ B
}
$ _) w- b0 U s' W8 z$ |2 `8 i# @# @) E- O
Int32 input_sample(void)
! b6 n. l5 A# O, u+ L; H& q/ Z5 K{ " P; u( {( R2 ~/ y2 d2 [# s* f0 c
AIC31_data.uint = MCASP1_RBUF0_32BIT;
* z) |1 j& c- Q0 D% @ J5 y0 x1 ~' N return (AIC31_data.uint);$ @+ `/ x" Q( Y- a
}
3 R) E5 S0 [, f( o* {7 m! a+ ~' _ P: ]( `0 \* \
|
|