|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 I' x8 _6 P( @main文件:) R+ k0 j& D+ D, H/ u' N# ?7 F
interrupt void interrupt4(void)
: d1 P1 B. y; c+ ?{% C5 z$ u! c% X4 Z
Uint32 sample;6 w9 ?9 |" u3 `* q# x4 ^5 Y, }% ` \
/ j5 e1 a8 L3 R1 U6 @
sample = input_sample(); // read L + R samples from ADC) ?7 j7 ~3 \. B5 a
output_sample(sample); // write L + R samples to DAC
3 b# ^8 W7 N/ i9 _; Z% i0 Z) } return;" W3 \0 `& f0 U
}
5 }" b- ?1 g; R% i3 W2 l- x
1 d( Y) B8 t- w1 f% |& ] Eint main( void )( [4 v; w! K9 g6 |* K0 B* ~
{3 |5 ^& N: Z: V/ Z, H, l2 Z
0 N/ L+ w7 a1 u% ~: K! E- K/ V
/* Initialize BSL */ R* Y0 o5 J; j5 X6 r$ _/ Z, P
EVMC6747_init( );( c1 @8 M7 c( h+ k- h Q# Q# n
/* Call evmc6747_intr function */
: }! D0 |8 n* m6 D% [) w aic3106_init( );. ~1 i4 j4 u4 ^. z* ?6 L% U+ E
while(1);
3 f) O0 Y! Y: W* v# u}) B- p- ]# U+ U' p, I+ k7 }
9 t) |7 a$ L5 Y% W. \
: a) I' }% r P e" Q/ ?
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 H) D: V9 C% }/ M% j! d; I/* Initialize MCASP1 */* k& _* N9 _- o. [+ Q7 W
mcasp = &MCASP_MODULE_1;" p/ B' ^4 X2 k* N& L0 ~
mcasp->regs->GBLCTL = 0; // Reset. j/ x' `: Z. ^1 g, w
mcasp->regs->RGBLCTL = 0; // Reset RX9 {$ U5 V" l" b3 G0 z
mcasp->regs->XGBLCTL = 0; // Reset TX
# @ d( o: L* Z5 @2 H mcasp->regs->PWRDEMU = 1; // Free-running
% s3 ]: d. p: k& X$ p! g // configure McASP0 receive registers1 e4 C3 {4 J% U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ ~9 n6 b7 ]8 ? mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 g }: H. k9 B. [, }9 @
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! \" o9 |. p% v" x
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 p3 w# [8 M- A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)* V6 Y9 S/ d! k- D9 P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
0 ^! U8 t, \8 g T* g mcasp->regs->RINTCTL = 0x00000000; // Not used
r1 z0 ~/ b1 S mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. d: `% {. E. f! [' Z5 E- A2 k9 Y) @
! k# b( A) R3 R6 r | mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 ]# g6 v* t: W. S w
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s8 m' U3 S" E: O5 I! S2 L' i$ N mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" X1 l' ?+ [8 B$ o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" ?3 V7 k6 t2 ?. y% |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- G) u# B; p9 O7 S6 ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,1. W5 E5 n" n' d% C4 A7 [0 P
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: ]( r+ S: B7 V
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& _% D3 B h. a; r
, K6 _' E4 U7 I4 ]; y% Z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
* H2 F) x' U+ U mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" N5 \ O3 G8 m" f( d
mcasp->regs->PFUNC = 0; // All MCASPs; a: L2 O$ q7 B/ f
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% _2 i: I5 l8 o X' H
) B* h0 l) r- x: i5 N
mcasp->regs->DITCTL = 0x00000000; // Not used% n8 m: z' j8 R5 B
mcasp->regs->DLBCTL = 0x00000000; // Not used8 n' K/ _2 V* w) I5 G% T; A
mcasp->regs->AMUTE = 0x00000000; // Not used
$ t+ Q3 v# X' M0 u
2 u3 s( b0 {. @% k/ G' h/* Starting sections of the McASP*/+ `7 \5 Q6 c+ W& o c1 l
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
n' a4 \; }' V5 n: T while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " T$ Y, w" |0 G& _ D0 t( e% S' t# G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* j/ A. L3 R9 g* A% q. R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* p( a, s- f2 {
, x- y; M% D" l% |( j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; O% v; H5 N/ V, ?! T; r6 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( _4 e" T3 g& V' z' R
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( a6 E! D$ S5 L6 P8 {5 i0 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 W5 I6 X* H# C
0 o7 v4 R/ L5 _. _( a( G. B9 y& u mcasp->regs->XSTAT = 0x0000ffff;
) W/ r, z, b+ R, w% Q6 B mcasp->regs->RSTAT = 0x0000ffff;
3 V6 b, L+ P% \ j" \
: \. f. o8 B6 _2 [ B: ?; i7 i mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ Y. }* S- ^9 h) s5 | ?7 R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); L* Q! t3 t1 B2 c& B
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* C9 N* E6 Z v2 K% d7 ~2 _ ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, Z' {2 q3 F3 }
& M& \( l$ f. ], j1 d /* Write a 0, so that no underrun occurs after releasing the state machine */
- n# }0 X; \; P mcasp->regs->XBUF5 = 0;
. a, q/ | Q( }7 B mcasp->regs->RBUF0 = 0;
9 L/ ]; X) J7 L! u3 A6 ]* J0 Q5 p; i) z7 x
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 j/ P" B2 }: Y* T5 h& k* A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- V5 j" I9 ^5 a mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 @5 t5 v+ A: o2 e( Q$ N) S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# f1 A# _; x9 D
& S s/ U7 w; Q4 I
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 [ _/ ]/ I$ u) p, A/ z- g! y1 \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, M( u/ E0 B Z# L2 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 o7 h( U! N" H# `2 d( J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* V6 ^5 z" }- }5 O( W6 O7 b; l$ M
+ Q* v/ C' h5 Q) d8 Y4 Z
CSR = 0x0000;7 W$ O4 h$ w4 A( q ]$ S
INTC_INTMUX1 = 0x3d;4 T1 L) j; B+ o- D
ISTP = (unsigned int)vectors;/ E" b4 ~5 m" s! J5 W1 M4 D. E
ICR = 0xFFF0;
7 C# _+ i" ?& P7 @/ }' ]) R. `+ A IER |= 0x12;
0 k! s' f5 G% p CSR |= 0x01; ! x* t$ [/ s) i+ a
0 Q8 X7 W2 `: g$ p# \6 i
: F0 u6 ~# t; a# f
2 q8 {5 K9 s: s6 [. H还有就是两个输入输出函数:2 m1 [4 b1 G% v- P7 @5 Y8 m7 c
void output_sample(Int32 out_data)7 v: W J1 L, W9 c
{9 L( w5 z! ?3 L$ o
AIC31_data.uint = out_data; % w! V1 S1 d! x! o2 `( s* b
MCASP1_XBUF5_32BIT = AIC31_data.uint;0 i; M% S/ u$ Z: E. {8 Y# q
}( ]4 J: I/ U" m9 c" g j; V
, w: ~1 @! D7 ]Int32 input_sample(void)# D) u) c$ N' o7 u p
{ ; V. Q6 E+ m3 [; I1 `
AIC31_data.uint = MCASP1_RBUF0_32BIT;% p4 F- K) i3 ~1 H* o+ Q
return (AIC31_data.uint);) h; g4 F$ E7 Y: K
}
, t% `+ }6 d; }& C
4 T1 U% T; ~- o: W$ K2 t- R$ c6 w) G |
|