|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# Y0 j+ d! Q+ _* \3 Q
main文件:1 c) H" T2 t' R9 H5 j$ ^
interrupt void interrupt4(void)
! U: m O& U# L8 W1 U6 u{) d; r! {- f6 Q3 a# F, i J
Uint32 sample;
" N7 ~) ]& z8 i
' o- X- S2 r3 u. e sample = input_sample(); // read L + R samples from ADC
6 R6 H6 `! B6 D7 V+ t output_sample(sample); // write L + R samples to DAC
: h5 i5 Q! ~& ? return;
* O4 l. r: n3 {7 ~" b% R: i4 N}
! Q" ^% R' H; S& G9 P/ L: M. t( I# X/ ^2 l
int main( void )
5 Y/ Q, W( _: |{8 ~ U8 k" J. J: Z) E
8 N+ |0 K4 j0 ~* i' m
/* Initialize BSL */
; ?, f7 g( s, J; G# @) m# I/ E EVMC6747_init( );: O/ N6 t L9 t n9 D, j( i
/* Call evmc6747_intr function */4 j" L8 \% P& V+ u
aic3106_init( );
- s9 i' e1 x0 N1 p$ }6 o& o while(1);
, R* ~) F6 W, T2 S3 K7 Y}
' S& O4 `/ l. O" L$ s# \7 ^1 \6 x( v) ?; V
! I/ G$ Y6 d3 ~4 b7 ^% o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
o" w/ f! O- I0 D6 R" H [( m/* Initialize MCASP1 */
7 b! j/ T: i! ^3 k' C2 V; z* W mcasp = &MCASP_MODULE_1;0 r' j0 s; C$ r5 d" b
mcasp->regs->GBLCTL = 0; // Reset$ Y+ Q$ q2 A" F, o
mcasp->regs->RGBLCTL = 0; // Reset RX. p6 K$ H$ Z2 E2 c( ^) y9 h2 ?; s
mcasp->regs->XGBLCTL = 0; // Reset TX
$ w* q0 }/ H/ j mcasp->regs->PWRDEMU = 1; // Free-running! O5 g) z! G& E2 a
// configure McASP0 receive registers' h8 X7 f, Y8 N5 ?, Y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
$ a; h, \: G1 ^' s) a" g mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 |* ?7 w2 t5 f mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' B6 ~! r4 s, C6 p mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- @6 F& ~# T3 E$ @# Q9 s
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 B$ {5 w n/ C: g; U& [: G/ g* ?1 u% y$ N mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& C b+ m" I1 Z& u$ Q B mcasp->regs->RINTCTL = 0x00000000; // Not used
' q; m8 e/ W. H mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( E5 b8 U. L- @7 E* b
$ |" ?# ]% P, G1 i9 \ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% ?. `. b5 q* ?& I4 H) y. \
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ t/ S% [' x9 ?" s+ S# i2 P
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% v9 w6 f1 g" E2 A4 ]" Q9 ^) a
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 k5 r- k5 p- @7 H" i( Q: z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( I" h! k h8 B1 v8 c/ S
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
/ U5 q B& E1 r$ Q mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
8 ]' G% R* ~' i. F4 M) j1 E7 m mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 b% {: n$ U+ F9 F8 o& z: i
7 W$ n1 R- z3 \3 i) m mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# z* l$ f: F2 ]
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 o0 h3 s8 `5 M |9 a0 q
mcasp->regs->PFUNC = 0; // All MCASPs
1 P' Q1 H) S3 q0 d3 s$ |; H$ O# U1 o mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ R1 q' U* C; M' V
/ f2 T2 d' b9 j! s
mcasp->regs->DITCTL = 0x00000000; // Not used
. F; w" _; N5 F mcasp->regs->DLBCTL = 0x00000000; // Not used# d5 X* E2 p! V- o
mcasp->regs->AMUTE = 0x00000000; // Not used2 ~9 Z2 J: `- \0 m: g% n" g# K, t+ ~, J
6 g% j5 i2 v7 x/* Starting sections of the McASP*/" y5 Q7 w. P5 T% }% h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( t* `; m$ r4 r/ k/ M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" o2 L* P+ [, W! c' ^+ U3 e mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 g. A2 y2 U- B6 {2 t0 G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ^( M; T+ x4 [- \& r2 y2 ?* t
- Y6 `$ a$ L4 X
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* a( g9 M$ b6 w8 @' O" e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: x/ ?, a) ?8 y% \% q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 h7 j- u2 a& @. Y1 x# W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); N% y4 A3 Z" ~5 j$ ~) q" r0 ~
3 V2 ]- Z$ m5 _" O" K& e) u# s" I' i
mcasp->regs->XSTAT = 0x0000ffff; 1 P" s ?, n9 R: P3 R0 ^9 _
mcasp->regs->RSTAT = 0x0000ffff;
; B& F& N( S/ S! a. N; I, }5 x- m* f# a6 A$ w1 ^3 j5 J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- @2 X& v( ?$ H+ H1 K, @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* B5 Q: {( K4 C H9 h% o
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 D7 m! b6 O2 D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) m+ \; _/ J7 e C
, E0 I6 O; h, W6 Q3 ^ /* Write a 0, so that no underrun occurs after releasing the state machine */7 \9 P1 `/ K. E1 t( z* u& m
mcasp->regs->XBUF5 = 0; W- z6 J0 _/ F, E
mcasp->regs->RBUF0 = 0;
* e2 D* Z, c0 h7 U* y q
3 L9 o8 O' {9 I mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . ?, p4 X6 s) X8 i" w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 {0 T: \8 ] m+ J( S" V' Y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 u2 L( ?$ \3 w) Q, H+ Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. y& y N. H, B1 g( x+ m
8 r9 M* V" n/ Q0 `' r, I
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 e0 h" n0 P1 n9 i$ ?7 ~6 [3 n7 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ {! o1 K U% X: I$ p
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' @) ~7 F; c P& W. i& G& ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; z% u$ n8 K a4 x7 d3 }, U
) O$ [( ?& r$ A2 Z1 s+ m! J+ K8 @
CSR = 0x0000;5 [# L8 F- g, P
INTC_INTMUX1 = 0x3d;. E8 N! n7 P. E- w
ISTP = (unsigned int)vectors;; O) c+ Y) j$ H- ~2 l. y& t
ICR = 0xFFF0; ; P. i" [4 g; V) q/ A7 c- E
IER |= 0x12; - @ e: Y5 R2 {5 b/ J% f4 x
CSR |= 0x01; / {& [, y7 [+ j& K( w
+ P0 M- w% y: t, }1 s
9 O9 w( P$ U7 Q7 j: l
4 B5 B$ B" K" H还有就是两个输入输出函数:; w2 P8 ^5 M) g
void output_sample(Int32 out_data)8 Z Y6 T4 Y7 s! U5 o
{( q* }0 d" x1 G; M# |; ?
AIC31_data.uint = out_data;
3 P2 y- M) W5 t' v) z MCASP1_XBUF5_32BIT = AIC31_data.uint;3 q. {0 ^; j( a: Q+ y
}
4 j; M! q X4 y+ p
+ `+ J5 x7 p% LInt32 input_sample(void)
* N: z; h- ~/ e$ K+ E{ , g% ?8 l2 i5 }+ _
AIC31_data.uint = MCASP1_RBUF0_32BIT;& i, T# j5 A6 Y( o
return (AIC31_data.uint);
* h6 y. x; ?+ _4 `& `3 I$ F}
( f- B2 X( H, v- p# @( B, m9 f" Q1 s3 ]
|
|