|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 U H* H# t% j* ~ T" w
main文件:% m& d2 }: G' a- w' B0 o+ X3 k
interrupt void interrupt4(void) 7 A I' |4 n0 U( d3 ?1 ~: M3 s6 X+ a0 X
{9 t% e2 e# ? ^1 w3 q
Uint32 sample;
! ^6 S3 j! ?8 B; c% B4 ^) F9 T" }: K) Z N4 t) @1 l3 J4 P3 `$ e' E
sample = input_sample(); // read L + R samples from ADC" Y5 D) W0 l% J1 ]' o# z$ \
output_sample(sample); // write L + R samples to DAC . z4 w# O" b0 O
return;
4 o, D& ?& ` {; x}
" L. t3 O2 ^' T; R( L& W* {/ j L w5 Z+ M/ s+ _2 O, N% F
int main( void )
1 P' z+ e1 ?* t3 b; i{
/ D( n& M, C0 Z$ p4 I7 Z4 j
1 M& J8 }# u$ M# m /* Initialize BSL */
# M& H- d' B- i9 m+ K5 ^4 q EVMC6747_init( );; _' T- \0 F& P; w8 W
/* Call evmc6747_intr function *// H1 ]. D \( t8 O# r+ K1 s
aic3106_init( );
/ Q) j/ z4 U0 F. _8 @: f while(1);
# E4 V6 s3 h4 K7 `/ F}5 N7 w6 {" {1 B- V' E
' b' D3 x' p% F9 L) B# [' U
5 B/ M, H& |+ A3 d C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( m3 V; ~0 E$ R r% [
/* Initialize MCASP1 */5 [& {6 D8 a8 f
mcasp = &MCASP_MODULE_1;3 C0 N' }& Z7 _3 X- p0 k
mcasp->regs->GBLCTL = 0; // Reset9 x) A" z4 N6 ^ K# A7 [+ F
mcasp->regs->RGBLCTL = 0; // Reset RX: o/ W3 ~. w( i) A" ~
mcasp->regs->XGBLCTL = 0; // Reset TX
, M9 H( g/ m0 L mcasp->regs->PWRDEMU = 1; // Free-running9 j: Q* W$ T4 h+ U* q, K
// configure McASP0 receive registers
8 I: ~3 w2 w2 P' O0 E {; | mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& `) |2 d4 [ [0 Q4 D, S
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 x5 x8 c1 U K& S* M' b2 ~* R; z mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ l# C5 z3 p* _: K) ~( c& S. R mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! j! `1 e5 l; c- c) {6 m5 t
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
6 N6 m& J/ G) e3 @8 l9 Y" P mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) h- r! ]2 y5 h) x# a' f mcasp->regs->RINTCTL = 0x00000000; // Not used, l/ E% |2 @9 ^
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G8 I% ~( x1 G$ x( c( l6 b. x+ q1 b6 r1 n* V9 M) K
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ D8 N' h, w) b3 E. |8 j7 Q8 g
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! [! K% i4 }' q: z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 [& j4 M2 y& O- }: j$ ? mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 L @% c: N3 r l mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& p, M4 {* W2 j$ j' D* p+ b
mcasp->regs->XTDM = 0x00000003; // Slots 0,14 ]: @% j6 ]0 {) |* m
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; J2 y2 p7 J0 D3 x- D6 ^: S* _: ~ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 u7 T9 ~9 O+ C- I
: L' J; [9 _& U# j8 `
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) j* [1 f( Q# J. f$ k' z5 | mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; ?) g; u. w. I5 _/ }$ c
mcasp->regs->PFUNC = 0; // All MCASPs
, _4 @# X- Z+ q* U; [ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- m6 e: Z2 a/ T0 m- Z+ p
9 q* R6 u1 x: s( P mcasp->regs->DITCTL = 0x00000000; // Not used
9 h( [3 b% ? Y; O mcasp->regs->DLBCTL = 0x00000000; // Not used) ~/ h, h- ?5 ~* @& z
mcasp->regs->AMUTE = 0x00000000; // Not used, I# \4 U6 R# O; X5 S( Q+ F4 b
- f0 y# r3 J% o$ J2 f6 e1 ^
/* Starting sections of the McASP*/
# \/ O# M+ J: Y _1 N mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! `0 q" r9 a% `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
, s& K/ [0 g r7 w mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . ~6 {; V2 N" P' o3 y% x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 R& q7 N+ ^4 G8 L- {; Q1 c: Y$ A: f3 u! M4 l; f
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- \+ w" @, a1 K1 i( V3 D0 z4 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' K- y6 t! T( n! C- V! f/ n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 O3 s# e# e. S6 d, ]: D6 w+ P9 X; c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 Q& }% S; h& ^/ u5 ~0 I
2 l4 V8 f$ C& o# w mcasp->regs->XSTAT = 0x0000ffff; : U* G5 K" |! m; ~4 W! R5 j/ U0 |
mcasp->regs->RSTAT = 0x0000ffff;
3 e6 |, j; ~! F5 E+ t! I
$ |3 A% L$ C, G3 d2 ?' w0 I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 i; D q' X0 V* j- a. N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" `2 v9 Z7 x* c. Q mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ j) o1 e! l A. f, k* \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" D# `- R7 \# {) C0 F+ _
$ V; X% T. t F& Y) t% {6 h" M1 A /* Write a 0, so that no underrun occurs after releasing the state machine */! x+ L! _0 ?/ V( P8 S
mcasp->regs->XBUF5 = 0;6 d: U) i& R+ ]8 [1 _
mcasp->regs->RBUF0 = 0;
! S% q% H2 t5 e7 P4 V* Z* a0 l+ i( i" D* |( K7 [
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % j) ^2 @$ \7 ?7 I- p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: l( p1 c1 a* W5 _# L! U7 I: d' Y/ o. M4 E mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 T8 ^! s/ G7 g- F3 |8 R* \" X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" X" d/ H1 Q6 T0 ~$ w" Q" }" K& h7 R+ {1 l) a3 M$ W5 r
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) l7 p; U, S, M: ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' Q6 q5 O9 O6 n. {; K mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( }3 Y, ]: m- A2 u6 a; m( x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ J+ \$ W* f5 n3 R8 F: B4 y2 {( w( u
CSR = 0x0000;+ D0 F/ v6 O2 E
INTC_INTMUX1 = 0x3d;! W M# v, H/ C1 N V( z" r/ N x
ISTP = (unsigned int)vectors;
) o1 t; e, _! {8 m ICR = 0xFFF0; 5 u& Z7 r* V, g; g0 K
IER |= 0x12;
4 E# E( k, t2 p+ d: U" l2 | CSR |= 0x01; 8 m" ^' Q7 I: r$ i) ?( j+ P; u6 Y
3 m$ ?* C2 Z* n9 P
$ Q# v( v5 }( F& w) y8 k) i; c9 ^+ a8 w1 x- M( b: [: d5 q, H" C
还有就是两个输入输出函数: b0 D3 D3 i: U; v( `1 k6 B
void output_sample(Int32 out_data)
. x; H$ e8 P) T% O3 r2 L2 }3 I{* Z7 [' F5 \) [# S
AIC31_data.uint = out_data; # _ P) E3 G; e& M% E
MCASP1_XBUF5_32BIT = AIC31_data.uint;
& c5 h2 m% i: D/ a+ O$ m7 g, u}
4 x3 ~2 F* I/ Q; N' @3 D7 b, W+ O/ U1 ?% m+ b
Int32 input_sample(void), }; l+ ^0 y; N5 L
{
- v! O5 p, {3 Q2 ?& m AIC31_data.uint = MCASP1_RBUF0_32BIT;
# q+ h5 s' O4 f% C return (AIC31_data.uint);
7 `. r& v/ {( H5 b" L}/ U |/ y% k! |
2 R; d- k! ^9 E' u5 e
|
|