|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 O6 }( W. N* A5 Y5 K
main文件:0 }' b/ P+ t' n4 f9 G! a
interrupt void interrupt4(void) ^2 L, b% O. L% d. a9 d9 l
{ ~" K& w/ B. P3 i7 Q2 t3 \" f
Uint32 sample;& a+ ^& G9 O- f! b( \
5 Y* h: B5 @2 }, l9 y' g4 |
sample = input_sample(); // read L + R samples from ADC( t z9 d4 H a V0 N' [, O% L
output_sample(sample); // write L + R samples to DAC 5 q; p5 X! V6 G' a
return;/ m, ]2 \" _" D+ H$ n4 p+ f
}: \6 [( ~+ \% B. j0 @6 t* E
* a6 \' y6 n9 k8 H
int main( void )& _3 h- b. S3 m1 V4 `3 y% L/ m
{
7 ?: Q) D6 Y. U* B$ t0 U O* b) Q8 u' N. J
/* Initialize BSL */
; B' K# v0 M+ Z( N/ w& B EVMC6747_init( );+ a' r8 b. v( n! C6 \" m
/* Call evmc6747_intr function *// A6 U3 g6 b2 S2 Q1 h* }
aic3106_init( );' U# I1 F9 G+ f$ ^/ L
while(1);
: v5 x) w- T$ Z}
6 {4 c/ ^2 O* J7 r9 C" Q% A8 N. X7 R$ O8 u* Q, I
/ \" }( a" L/ }' waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 P$ {; e H7 C' W+ Q3 z
/* Initialize MCASP1 */) ~1 e0 ?3 v# {6 m
mcasp = &MCASP_MODULE_1; m, X- q3 ]1 s! I% c3 u
mcasp->regs->GBLCTL = 0; // Reset
! I9 t2 R4 l ^2 J7 e4 \ mcasp->regs->RGBLCTL = 0; // Reset RX) B# _5 K; p9 U' [' N' ^
mcasp->regs->XGBLCTL = 0; // Reset TX$ K% p9 q( r% P, ^9 T7 B; S8 h! g
mcasp->regs->PWRDEMU = 1; // Free-running# ~# `+ \- p; V# O2 H6 Y; [
// configure McASP0 receive registers
* a% {) W9 Q! G: ]' H- m/ y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( X, @5 N8 U# j, N: o4 F
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 j8 c' D! r0 Y' H
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% B9 h7 M/ W( Y& p
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). J0 i2 L! E5 P$ t3 K4 r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) W" Z9 ]% j7 `0 m6 |
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 m2 [7 t t0 b9 P# A, g$ ^! \ mcasp->regs->RINTCTL = 0x00000000; // Not used. R+ H2 [- C* R7 {
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 \4 Q( S: Q9 P1 Q( _- w
" ^1 o+ j- y3 k; e/ U mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( N" T) X7 u8 p& ^ h! w# m0 X9 B mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Q. ~5 f! I% f1 e4 V5 q, \ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 k+ s( n" {! Q/ E0 |( P& b, r mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" m, V- r7 t0 a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ E S" M7 f" z$ m, k/ h
mcasp->regs->XTDM = 0x00000003; // Slots 0,1# ]( y/ Z. ^' M {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, H% b8 Y" I2 e( O8 J3 a
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 K% g2 y+ |8 D3 p8 T
0 n: b* ?0 |; \2 D9 m mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 ?3 w/ E% p$ H- G; V* d1 k! c3 T mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- q3 g/ l6 `' S" Y
mcasp->regs->PFUNC = 0; // All MCASPs
& C, D( m3 i% w/ S" P3 ?1 T mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! [( S1 q4 S+ H2 |# I1 A
# L; w! A( a7 N) b mcasp->regs->DITCTL = 0x00000000; // Not used
j6 j4 h+ {0 `2 q mcasp->regs->DLBCTL = 0x00000000; // Not used
- f" _% z5 I7 q; E" e( N. B mcasp->regs->AMUTE = 0x00000000; // Not used, i. S" C0 c$ _- w1 P* G5 u8 o
' i& }8 _7 `) x7 C2 \+ E" x
/* Starting sections of the McASP*/' R4 d. g% m- @' k$ w6 X* P
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 R& a; V, Q/ F$ Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& b4 G3 m* O4 g& R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ a) y4 Z- F6 A# Y5 I8 O6 T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 H* E" `) _) ^% Z
0 l* N, n _. x" o7 g9 D6 q" f+ L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 E& `% }( U4 S: C/ h- b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' E+ s! [' g" N+ ^/ b" q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " b% a4 n4 l8 E+ _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 Y% @1 X$ a( G1 t, ^" J- @& j& T( ^" Z I
mcasp->regs->XSTAT = 0x0000ffff; + r( {8 A3 A" B: ^ f
mcasp->regs->RSTAT = 0x0000ffff; . m! U0 C* W; n. V
% |7 S0 {" k7 Z; O9 l+ F" }, N
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 o% F4 ]) S0 }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: D$ [- M2 X8 g7 m7 J3 `! z( o/ ^ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 d+ K4 |9 O, h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( R n3 d2 Q l7 A ?
! n. i- _ O) Y2 P. ~! M. W- |/ f { /* Write a 0, so that no underrun occurs after releasing the state machine */
1 [3 ]. Z/ r/ v/ N' N9 \9 w mcasp->regs->XBUF5 = 0;
# p. w7 D& c5 v& Q1 W5 N mcasp->regs->RBUF0 = 0;
$ Y0 Z# u! N) O
! Y8 e& Q. s/ }; N mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; W7 J0 M0 a1 [. x7 _' p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 Q8 @ @) `6 ^! w! @+ |1 ~ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 o q7 }7 P7 F0 o. q0 _! e' K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 I* O- ]8 B7 B0 k3 n6 s) h6 \; t# }3 |% g1 @
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 @% G9 ]/ T5 G! c+ o# Y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. L x7 _6 @) o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 K( n0 X# y( H% M2 l6 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' J+ Q- U* c7 |! ?, a/ |0 n- L+ l0 N
CSR = 0x0000;( F6 T5 T) ?& X2 c3 o
INTC_INTMUX1 = 0x3d;6 U, t3 R2 y* x1 a, M
ISTP = (unsigned int)vectors;5 j6 U3 V( V6 Z
ICR = 0xFFF0;
. j; E4 L) y9 Z4 U7 k/ Z IER |= 0x12; + @ ^+ g! H1 }7 m$ C' k, |
CSR |= 0x01; , _2 d& D. \6 G. N8 T
3 e" c# @+ e2 f1 [: F& m
* Q8 Q3 J {) T0 U
& ?/ c' V0 l4 M) H' K还有就是两个输入输出函数:
7 v6 R6 r- [5 Q; f) ?" {6 Hvoid output_sample(Int32 out_data)2 |& p4 G7 G$ R1 A' ~# q
{0 b/ _( L3 y% o# K: U
AIC31_data.uint = out_data;
3 a& n7 Z' \% ?- P+ W. s+ f MCASP1_XBUF5_32BIT = AIC31_data.uint;
% I% Y1 ^4 W* d& W I0 k( z' h}8 i# r! b" S; u) y3 ^
$ s. H8 U% r5 G+ B, |7 {Int32 input_sample(void); T, D+ i- h! O: T2 _( c
{ , H6 w9 e" H" D, }, V* |
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ g7 @; R* K4 {. G' a- e
return (AIC31_data.uint);
9 q; R/ D( b+ I- b- O" K* Q}5 y0 H: ~2 S6 O/ I. U5 ?% W
/ |8 r ^0 m; M }; d: g$ A: e |
|