|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' G8 m }# ~( L9 m3 E+ s
main文件:9 R9 I3 Q+ P! S n/ x1 a# ~
interrupt void interrupt4(void) 4 _" t1 Q5 d6 J) N$ L; D/ P
{/ m6 l( H1 ?* w! C& j
Uint32 sample;
% F4 z" d; E. V( `) A- Z9 M5 v( e8 l5 u' m1 i
sample = input_sample(); // read L + R samples from ADC7 v& W/ J! {: @
output_sample(sample); // write L + R samples to DAC
/ \4 m+ q6 W% U) z+ F( _ return;
& g! I: J- x$ p3 Y}: t* m: B" |7 b6 s8 }
% [, s0 J1 \$ M9 h; o" j9 v0 m) n7 u
int main( void )
8 W% i; o) {6 T{2 f& p7 J' d. E i! M
% f- i( @, X' e /* Initialize BSL */6 z" M8 I3 i) Y( d, K% R _
EVMC6747_init( );
% E3 C; x) ?# ` /* Call evmc6747_intr function */
! a! ]0 a6 S( |- Q, m aic3106_init( );
8 O" `6 v- u0 R0 R7 R% t# V while(1);
; }. }6 m( ?- |2 ^}
- D! Y' e* q4 v7 E! p6 B6 N% {
2 C0 v4 H! H2 f4 I5 E
" D p" \; I8 E. w/ |6 x, baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 @: y" d! s' p7 w# |. v
/* Initialize MCASP1 */
( v8 o& G2 Y# i' J/ X1 n mcasp = &MCASP_MODULE_1;4 _; {- K2 \+ i) e; Q4 w
mcasp->regs->GBLCTL = 0; // Reset
* W3 B& W3 k( t mcasp->regs->RGBLCTL = 0; // Reset RX8 Y8 ~ \, F. c9 q0 D9 d$ v
mcasp->regs->XGBLCTL = 0; // Reset TX
$ L. Z- V3 ~6 T3 H mcasp->regs->PWRDEMU = 1; // Free-running. w( Y, f/ Y* E
// configure McASP0 receive registers
( V! i, _5 X& J4 ?8 ]% g mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 U, A1 l$ D8 o9 Q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& L7 Y" n* E3 v# j, R$ l mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; T" R" `; @, q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ b$ i% f: C. C# s1 V0 E0 \
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) ]/ F+ C! h- z' l: A4 D$ P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ m0 ? t" s. G4 J
mcasp->regs->RINTCTL = 0x00000000; // Not used
$ b( r7 f. D# b" f: @0 W mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' \: B7 g7 r6 q& q% e
$ R. \+ ~4 E% Q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* W2 R2 t- r' }+ D% Z) A6 {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" X" J# V6 W: l$ ~5 h1 G
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% t7 D( Q; N/ u
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 P6 S! G1 i: @2 Z7 c& n% S% i& z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK; W z% x- Q2 Y! S
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" f' H( O2 W- N; R
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 w, w3 G; j& Q) p6 l# _' H
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* U) a8 S. [3 \* h) K- e6 L
" _# s+ C! ?9 O0 {/ x mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- {. B9 Z6 E6 k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 M/ j# @2 C& t% @2 ` mcasp->regs->PFUNC = 0; // All MCASPs B5 y+ Q$ G# P# n# D) K
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 S) H8 R; q! I5 P+ w a
Q9 y! H9 V- U* Q' [$ E mcasp->regs->DITCTL = 0x00000000; // Not used
( P- O& \+ U" h mcasp->regs->DLBCTL = 0x00000000; // Not used* P0 c! b( a9 k1 I$ ?1 `
mcasp->regs->AMUTE = 0x00000000; // Not used) R# W# q6 L: z! S) {. V
6 T8 Z0 O3 }7 J1 r8 t' x) @1 }2 @7 W/* Starting sections of the McASP*/" _6 w% R7 m' K& D f7 P a+ v' L
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & A( R5 n) C9 M2 T7 j2 A: j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ( p4 G b! l7 Q) T, p" C
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* P) r1 `# R; n while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 P; z8 s% n% T* I* J7 b
- V( f$ `2 y- d3 T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ d1 x/ O* e) W3 [, c" m- ?' p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 |" M% u! S5 K/ u* y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , w6 j( B3 D n1 f! }3 b( l( C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 P3 ?" a; d( ]' S5 ]
! z2 V: G8 j; ^' k0 v' e' f7 a mcasp->regs->XSTAT = 0x0000ffff; % C) f& m1 ?- W% n
mcasp->regs->RSTAT = 0x0000ffff;
% F* |9 i' R/ l% \7 H' h
5 U. d( R; L7 G mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( B7 z( b B, [( j5 r# Z; ]: U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 i8 |8 ]5 @# ~* _1 G
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 r% P/ Y- f2 l4 r) V! b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 n# {. g) `- c' t0 D) {
5 I8 u0 k' I7 ^4 D! H& H2 U
/* Write a 0, so that no underrun occurs after releasing the state machine *// j: s2 n4 g4 q5 ^
mcasp->regs->XBUF5 = 0;
2 @) w8 j) Z0 C0 y4 _5 ~0 W% A mcasp->regs->RBUF0 = 0;9 f! K* R3 ~, N
' I2 o& A( e; n% r9 U* I7 L
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + K+ x: O4 Q7 C1 L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 J: ?" N: l2 a& Z
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 p" F# k1 v/ c. z% k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; p: f7 X# {* g5 B! M' m) D6 {+ N5 W* x8 u
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 t) `! W8 L$ X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" n. N" L' Z% e, r/ E. X mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 b1 H+ U2 B6 ?6 T# I3 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 g$ D2 n; z9 p" s$ l7 v. O
! Q7 a3 ~: H5 D: r CSR = 0x0000;
" p4 o; k! \+ ~4 e& w INTC_INTMUX1 = 0x3d;" V3 p9 q7 U; Q6 c4 F
ISTP = (unsigned int)vectors;. f: `! E4 Z: M1 N% g
ICR = 0xFFF0; 7 ]2 {) ?5 v+ u/ n( f: r- o
IER |= 0x12;
3 P- ^+ y' d. P$ Q& C CSR |= 0x01; . t( P8 b! u" h! K$ t
) ` K1 u# W. b3 I: ~' _5 T
7 q: f. R- p/ s6 R" v# Z. F( |3 d( t$ q
$ M( `) d+ u" X9 u3 h. E$ ^还有就是两个输入输出函数:4 E, i2 l3 x8 R% }
void output_sample(Int32 out_data)
7 {2 {) p. M' a- Z6 q1 x{4 l+ x B- u& p) L$ W4 x3 w
AIC31_data.uint = out_data;
; v4 j6 O! S$ a MCASP1_XBUF5_32BIT = AIC31_data.uint;0 P: I0 O }; b' a5 a$ a. `4 M
}/ \. r5 N8 v6 B+ ~
6 @: `' t$ H! ^. ^6 X
Int32 input_sample(void)" r, g3 e0 I: t6 H% Q
{
( Y0 _1 N8 ~0 ?7 e! w AIC31_data.uint = MCASP1_RBUF0_32BIT;9 P8 _+ u' ]& B' i/ J! L8 U1 g5 }+ i1 c
return (AIC31_data.uint);
7 `. v. F1 @7 |2 m2 {}
; e( M. e- t" Z2 A h% C1 v. f
7 V3 H' ~* y( w2 a( U |
|