|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ K' m1 d2 x% v G, O8 M9 hmain文件:0 z/ ], c! H/ [" z, D/ b
interrupt void interrupt4(void) 1 k# O' o, T- D+ l
{7 F% q9 V' q0 Z$ p4 z9 V
Uint32 sample;- s: v) @5 M8 W. }; Y/ i q g
$ o7 o4 k+ H5 _# f4 O! B) O+ E' {: h sample = input_sample(); // read L + R samples from ADC
# G. O5 i! ~/ t* \' `" p" w8 i0 ? output_sample(sample); // write L + R samples to DAC 4 e9 o0 i4 Y/ q U7 S! R
return;
' \2 J Y+ D/ L}
+ |8 @, d. C! w$ C. y
" Y% S& M& b. j6 K* Fint main( void )) V, h! ?! S: m7 V$ |) [
{( R/ [8 w# ?# f" D
3 {# s! r* ^" y$ @ /* Initialize BSL */
5 J$ A; ?3 C% ~) m* ]5 K! } EVMC6747_init( );7 B6 S. @6 l0 m/ T2 g8 K! }$ V
/* Call evmc6747_intr function */3 O, b) D% M8 i( m" K1 T
aic3106_init( );
, o5 h% t2 D1 E+ [3 o5 S Y while(1);
) d/ u' T1 | k+ P z}
( X" x- w0 N9 g1 o8 y( a% w1 p! b. a$ h$ I5 S+ G
9 [; K: C. _) V6 M( qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! A* n- s& A/ ^/* Initialize MCASP1 */$ a3 x. Y% c Q6 s0 _
mcasp = &MCASP_MODULE_1;
, v: k- y9 p; }% j( u* Z mcasp->regs->GBLCTL = 0; // Reset
; R0 F1 B( |( m mcasp->regs->RGBLCTL = 0; // Reset RX" R/ @* i) [" O1 p7 I2 n* b/ y
mcasp->regs->XGBLCTL = 0; // Reset TX T+ Q1 h* R" S; w, j! c) Q4 b
mcasp->regs->PWRDEMU = 1; // Free-running' q3 m3 f/ ^5 X
// configure McASP0 receive registers# ^% F- i( J M
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& v$ f9 u% R, y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, W' Q8 L* r& P( K) Y' n
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 L9 J/ J' }6 N3 d } mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 |7 a2 L. o' y& O: D+ h0 L mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* @6 b) ] @9 ^9 N9 @' N8 h0 Y* l
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ T4 M* D2 I7 D1 c, R. n mcasp->regs->RINTCTL = 0x00000000; // Not used
- {- o, a, q/ e/ D mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 B3 g8 w1 F# V. _; _. J
+ k& r1 `5 e. k. { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
3 P0 r( D' @: P4 Z8 ` mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 x, |- ~+ N! l h# P* x; m
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! S5 p4 Q! y& F' p. K9 S& Z/ | mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% {$ w9 E( \( `+ b' { mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
3 {: t6 z7 J0 r$ d7 w( O* J: h mcasp->regs->XTDM = 0x00000003; // Slots 0,16 v$ x( q& H$ a+ t/ ^3 ?
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, }- I! c, J' h* n$ J( X+ d mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* K' [3 R! H5 t& d. h" \
1 `. F' D: u# x5 E0 \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' p& t6 y5 \4 ~" v) i3 S* L- h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 p; E8 ]9 E- y% Q+ F mcasp->regs->PFUNC = 0; // All MCASPs
5 w0 E, D; A* a mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ f& i' ~6 u' y: t% y- h7 ]% q
+ D. c. N. r& }! b3 @6 A mcasp->regs->DITCTL = 0x00000000; // Not used7 T u. k2 n' w
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 `/ b9 b" ^% q! U mcasp->regs->AMUTE = 0x00000000; // Not used
! {8 T' W) t9 N; ` f! h/ a
3 i& B' j2 B+ Z' N: q! X/* Starting sections of the McASP*/# j" I0 R/ @& [+ _% u( ~
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 `) O# V* a8 o# o8 {6 S5 x H* ~1 E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , Z& f( y& N5 r- Y3 X4 u
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 U3 p7 G& K7 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# D" L W: ^9 w1 ?
/ b( P6 h" G) \- V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 W* I# D% X! s) f$ I3 O7 G: S1 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
! {1 Y, L+ j. C# o" R6 i+ v, }" ~ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# @+ Y) p0 T/ \' m* ^; N" {( E% s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ Z- d/ ~4 z; G$ l: C$ i: [% R# }" e/ N9 w' N! ?* r0 S+ V
mcasp->regs->XSTAT = 0x0000ffff;
! A& q( P, ^, c5 @7 M mcasp->regs->RSTAT = 0x0000ffff;
8 ^& E' s) n* @ v) Z6 B
; z: t! G6 J8 e! N7 V7 y3 q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ [& f6 f2 S" h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, N. y1 r' S2 e* W mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
' p% Y7 n) W0 Q( s$ B+ K& I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ X4 ~4 }5 [/ f) J$ `- l
- |) S1 M) N3 N
/* Write a 0, so that no underrun occurs after releasing the state machine */
% ]5 E% u% k& S mcasp->regs->XBUF5 = 0;
# w, o/ H/ H% i- w mcasp->regs->RBUF0 = 0;9 Y$ |3 _4 k7 [
: L( G! ^; s8 Y) P# J" g8 Q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 o* Q! Z8 d7 N; m6 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 h& O& X& R, ^! M3 m: M$ D mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 q- i) R, S4 b7 V, c/ t( z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 r' [$ s" b. Z" s
; @8 @7 W4 B3 ?6 Q! } mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 C! H" c( n% ~1 \- a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* O {( _& A/ I+ d
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! S4 O) g( G1 @& y, L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( B; R% [+ A! l( h% l- @5 c5 m0 X/ ^
CSR = 0x0000;
) \5 q8 j8 v5 o5 V) b INTC_INTMUX1 = 0x3d;
4 K9 f$ _7 a3 k) O ISTP = (unsigned int)vectors;8 E9 Y: k+ F: ^( X
ICR = 0xFFF0;
& q2 o' ?& v- ^4 }7 _ IER |= 0x12; ) T* u- k* Z! L$ L" W" M
CSR |= 0x01;
( \4 F+ G( s! Q3 l& ~: d
6 U( O' q y- Z2 B4 A
. Q& }8 b5 M( M$ Y9 ~- C- c6 _( v( Q9 g
还有就是两个输入输出函数:! p/ S+ t+ {8 p* \1 B
void output_sample(Int32 out_data)$ o5 o) f5 i e5 a1 y+ v7 _
{
% @9 L$ P7 P9 D: W AIC31_data.uint = out_data;
" R# ^7 x2 f9 g$ O' y' j& p5 I MCASP1_XBUF5_32BIT = AIC31_data.uint;6 Y( r6 B0 m( R: f" K' l0 y
}% s- ^) [. ~; ~$ R8 w
: F9 P6 @9 i" L/ D ?8 S) i& TInt32 input_sample(void)
) [3 d6 n- h2 C# c4 F' h3 }{ ; R) w; L: [6 [! f. d; ~
AIC31_data.uint = MCASP1_RBUF0_32BIT;6 W9 S( u" t3 s9 q$ u
return (AIC31_data.uint);
8 T0 f4 q: m" O) _* R2 d* z) U; j}
, ?9 g+ x7 x v h z
* ~, w5 `0 Z/ j5 o# C3 o/ T* L& z |
|