|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- p) q+ G& E1 M; T% rmain文件:
6 Q. W( w/ c4 s iinterrupt void interrupt4(void)
* W7 z! |# J! a( B8 Q& C{
C! e" R' N& C) b6 j% w Uint32 sample;
T& i) Q% d) s7 N
( X2 w& Q, r4 p' M& r& x( | sample = input_sample(); // read L + R samples from ADC2 M! F# {! w' `: J4 x8 M6 V
output_sample(sample); // write L + R samples to DAC
2 u9 `! O, |) D8 f) |, h r, J return;
4 F% B: U M6 S! P7 n4 G0 H% f}; k% {& J1 x8 _
4 _5 E# j7 c) Z4 \' x* ~9 X
int main( void )+ k( @9 }+ y$ q8 {" n) w. C6 d
{# \, V$ l S" H M1 J9 D+ ]& D( d
{( \: b% U1 @) ^7 _2 f. g6 }( B /* Initialize BSL */
0 U" L, L" D4 x. f& t9 u. C+ i2 d EVMC6747_init( ); J2 o1 P; J8 ~! X. A) Y
/* Call evmc6747_intr function */
+ ~0 X4 e" B$ W# S# k aic3106_init( );" g. r* R* _4 x
while(1);
- b: v3 o+ g* U* x: `+ t}
9 |5 m6 S% o8 W- J, e9 k) b( N' F1 _
+ a+ f8 [' }( U
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 E" C9 S! P. N5 [; s+ E# Z! \/* Initialize MCASP1 */1 g7 }* G& z9 d5 v) a
mcasp = &MCASP_MODULE_1;4 c k. {* R' Q' T& ]$ T! z" z
mcasp->regs->GBLCTL = 0; // Reset
; I b8 [4 [, z3 U2 I0 \2 a: e mcasp->regs->RGBLCTL = 0; // Reset RX
6 V' ^4 ?& e* c7 H& r mcasp->regs->XGBLCTL = 0; // Reset TX
9 }9 i* O5 _3 \5 f mcasp->regs->PWRDEMU = 1; // Free-running
9 {. [. K" ^; [1 @ // configure McASP0 receive registers
" h1 l2 R+ r. \3 ^ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; m9 w( h0 W( J; H- O
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 v! y- D: ]/ K- d4 l
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! {* T8 n o2 O$ q; X; Z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 b5 g# p( y% F8 P mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
, O- e5 a% K+ \: e6 H* I mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; I) U& J& u5 P& }) ^- p; ] mcasp->regs->RINTCTL = 0x00000000; // Not used) W5 T, f( b$ i. J
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! y! _* P5 ] v$ U; c
- {+ }, j7 a6 r mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
3 q8 D7 B* u9 Q8 x7 Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 r% u2 c) m% h x mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# U2 i( \$ b6 V# R
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 o1 v, j( c6 {0 g; j' E/ h0 S: {3 k# } mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ }: k) w" v; B" K& f7 W
mcasp->regs->XTDM = 0x00000003; // Slots 0,14 |* Z8 C! v( V) r. }) [/ N
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! j' ?1 K4 D; I' ]
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 C' ?$ ~% Z0 A! i3 r9 ~6 H0 i1 t9 ^% k/ M% A
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) X3 r, T% K; E* b4 o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 y& Z5 |5 J8 M8 i
mcasp->regs->PFUNC = 0; // All MCASPs$ l9 u7 K/ ^8 i$ C( Y5 Q9 c2 c/ y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# B2 t0 }( a. h- R) i, A$ X6 }' M
' b" A0 u( W, D E. b( B. O: w/ P mcasp->regs->DITCTL = 0x00000000; // Not used8 T2 \# a0 ~) o! p, t9 ^" \2 f5 }
mcasp->regs->DLBCTL = 0x00000000; // Not used9 N2 [8 Y( c1 I: F% z2 p% A
mcasp->regs->AMUTE = 0x00000000; // Not used
) {0 B9 e5 e& |. l! [) a' [5 @; x/ P, ]+ s& A
/* Starting sections of the McASP*/& @( o0 Y9 |9 q. p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 S1 J5 ?. B8 T( l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
5 ]. j2 t6 i9 T* o mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 E, B5 }- Z2 Y: R7 I) c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 e0 |' b% Q3 v! j) t! k, U. F, U2 K$ H# |- X& ]
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * d8 J/ P" S# ^/ x2 Q7 {0 p
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( _, K* |1 x9 u. P% k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & Q/ g; ?0 J Q- E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \) |3 h9 H7 p2 c, h- A) n" C$ p
5 T; s( ?+ t0 e7 f
mcasp->regs->XSTAT = 0x0000ffff;
8 R0 i w. l) i5 w mcasp->regs->RSTAT = 0x0000ffff; ( f) {: |# m- D: K4 {
5 c( v6 f3 h& V' Q) r& s; E
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 p9 [# G5 M4 V" m( {3 E8 F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 V, [+ `! v- u' C1 } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; i, c4 d- a" F3 a% h0 R# { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( J. p9 f! @+ F* K* X. _) a$ S
) ]; `6 R- ^6 _2 `8 o* I /* Write a 0, so that no underrun occurs after releasing the state machine */
9 z# U" @) [1 u o mcasp->regs->XBUF5 = 0;- H7 r) W' G( J V/ i( y6 T8 q- S
mcasp->regs->RBUF0 = 0;+ N" X6 W& @, ~. [* N0 G9 i
7 d4 G; I: b8 A' x" G4 p F( S. h mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ M4 B$ U2 T) z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# }+ ]3 ^* u& v( {) u. V mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 N; x# C: b2 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 L/ D) D2 z j" |
2 g) \2 q. L+ C3 e6 C6 z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 X* Y3 C, l* s" l/ D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# C a4 |3 }2 f) N& F2 S mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 B& h* o$ K7 B3 J% d* W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. |9 G% Z5 Z4 }- p4 ?: n* Z
- V- Y6 r4 j1 b, E$ F7 Y, v s5 r CSR = 0x0000;# G! d; p5 G* a9 ]. ^% V% j# _
INTC_INTMUX1 = 0x3d;. p1 n6 X& o! y/ H
ISTP = (unsigned int)vectors;
& M6 {3 S/ h, p ICR = 0xFFF0;
- K! T" C! H. T. `& X( `, ]$ b IER |= 0x12;
! u% O' t# H# n9 C) N3 | CSR |= 0x01;
) k4 b3 m0 R" W4 {4 j0 L+ b; G% b6 z0 W8 n5 S ~, O8 r
; S2 f% E% u D
- P1 h. Z- |1 M b还有就是两个输入输出函数:* A( W1 t% a% _) c+ s! g, {) K* K
void output_sample(Int32 out_data)
+ A6 T% q# {. Z8 z3 W; f{
# v0 r6 }% i8 i7 c; W; `5 x# [ AIC31_data.uint = out_data; 5 P6 E( N* u1 t/ U \& o8 K
MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ |& K o5 N: G; f8 ~( l( i}
7 L2 [' N& _8 D- a5 g8 E6 X, Y
' B" \: \: S+ n3 \3 y% yInt32 input_sample(void)3 h( _* A- l! A5 i4 n
{
$ N1 a) U5 W& V7 S5 ] AIC31_data.uint = MCASP1_RBUF0_32BIT;2 u/ N2 ~* E) l9 |7 ?& z
return (AIC31_data.uint);
e) i5 D) p" q& Y! d1 q! y+ d}' A5 l" K; V" z! D& S" }8 B* N
+ Y: n; p% s3 x( h5 G0 J |
|