|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" n" m9 q0 h7 {, e7 Ymain文件:
8 h7 {' k. l- u) ~+ kinterrupt void interrupt4(void)
: L# _# C2 d' q{
6 F) q: p5 L. ?" n* F, J Uint32 sample;- z( k# y- R0 T% ]8 n& o
8 l& U8 [% Z5 a) `2 V: O/ P B
sample = input_sample(); // read L + R samples from ADC
" q m3 c, v0 a5 n- Q% f8 g output_sample(sample); // write L + R samples to DAC
, N- P1 X7 X) |8 T O7 \ return;
8 d2 k; x. x, `' Y/ K}
& s* E5 T. }3 O0 [8 i/ H& m/ R7 k, ~ b0 j
int main( void )3 N' G2 f% f# l5 h/ W
{( k/ s- m) s4 C7 Y4 v- O0 Z
, O' z" l0 U$ Z /* Initialize BSL */
E1 w( I* ?! c4 J EVMC6747_init( );6 ^- h7 q3 B6 T) d& ]( [
/* Call evmc6747_intr function */3 A- Y- X2 I- K/ n
aic3106_init( );- d4 T7 `8 U5 D, [8 C) U8 [
while(1);
1 o; i! T. R4 ~+ S+ j( j8 r}4 x7 ~# H; b% x8 A- z
1 T0 Q) k1 F+ g/ o
1 }/ @* e: l% v1 e+ f1 v; x- S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 i6 l" V1 a& o6 n" U: @ W
/* Initialize MCASP1 */: ?2 f( q+ h3 i* U9 f5 Q
mcasp = &MCASP_MODULE_1;
" c4 y; @$ D3 Q+ M3 [ mcasp->regs->GBLCTL = 0; // Reset4 `3 a; w/ E1 {3 W) D
mcasp->regs->RGBLCTL = 0; // Reset RX8 s6 T( f2 m: ~. S2 n. p
mcasp->regs->XGBLCTL = 0; // Reset TX
9 H5 A8 v( a; i. B4 F mcasp->regs->PWRDEMU = 1; // Free-running R5 V1 o T( d6 G# ~; e; ^- w
// configure McASP0 receive registers. p6 r( v& X, k0 Q
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 h7 K; x7 {5 w2 E | mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# H. a v. w. [) ]8 q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& _& _. I( C S3 n0 u( [7 A- e- x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& }0 M) a, ]4 ?8 i# I
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)2 B6 A0 o) n0 K$ C) P
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! g: R" J" s% _% b
mcasp->regs->RINTCTL = 0x00000000; // Not used8 \$ ]/ X3 N( {" X3 V. a8 R. f
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 Q% c1 \6 L. B- M/ P, B! B$ L9 m* N5 y
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 d8 ]. C m. W. D7 b
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- T% K9 M- p3 g# _ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! o) [) V. v2 v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, C: e* b9 |7 {* m" q% e9 c mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ y. l& I8 A" e3 |; H2 @
mcasp->regs->XTDM = 0x00000003; // Slots 0,1& g% \, [% w* l. T
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
. _9 S6 [1 o) t3 B0 P, W6 q1 w mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% ?2 U1 ?3 K% o; Y8 l% V
9 B! z9 ^, y& v9 z$ z- W( W
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 H/ B' ~* F* l! l mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) t3 q5 b4 z3 t2 t' |8 ~) E
mcasp->regs->PFUNC = 0; // All MCASPs
) z, b# V0 S% _. w8 z mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 V3 I q: c- H
! Z6 Z) \; E* o& v" i mcasp->regs->DITCTL = 0x00000000; // Not used! i2 ~5 g5 ^* \* _& R# I
mcasp->regs->DLBCTL = 0x00000000; // Not used
0 E6 z% V/ s d& q0 n mcasp->regs->AMUTE = 0x00000000; // Not used& @) R+ Z; |. K/ z" B1 g% B8 x
: {& [& L2 ~- I1 w7 X
/* Starting sections of the McASP*/8 |, |5 G8 C% m8 M- U: b
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , g+ v$ s5 m8 H+ t N8 H" A& g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); % v% J: [# y1 B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . v2 H& w- b8 c. ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 r3 R E$ g' W! H
# V: ]" ~/ d% {5 v/ U) e: ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 C2 L' f1 j3 z( L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ o' Q l' T) [ r0 i6 q1 x/ ^5 n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " i$ A6 F* B- Q/ G4 g- M# c. s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( M4 o3 C' ]/ a
# \. w3 U( T5 ^; F: ?$ ] mcasp->regs->XSTAT = 0x0000ffff;
$ a( x! O O! w! C# e( I5 O mcasp->regs->RSTAT = 0x0000ffff;
1 T2 q( |, T7 c q' |8 O% \; V/ G6 l( U
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 V1 V! w3 s: W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ N4 n* | m: Z9 W/ Q4 a mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' ?2 K5 [ g4 X$ @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ W0 h9 _5 j; B) [& c
* h2 k. V& v; _! w. s/ I /* Write a 0, so that no underrun occurs after releasing the state machine */7 P: ^1 N8 {! d R, A& e
mcasp->regs->XBUF5 = 0;
! Y- G7 @* ]# Z0 A5 Z+ E mcasp->regs->RBUF0 = 0;
) k. x3 r, X7 P. j" ^# S
/ G# ^* [8 `' W' o# V mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ s* w! Q% [1 [* G; G8 ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ L& y$ C0 M' i" `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) _ A' g2 Q* q- ]' g6 ~2 i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 j( K1 ?% `4 @
, J! a" r! h) Q, m: g
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! c+ I2 f* y6 J \0 i, t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% x9 v* E* j+ H* r+ d5 a
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 Y7 K$ _3 l1 O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 a) Q! {9 A2 Q' R: s% o W9 V) w% ]) P3 n' M4 K" `& |
CSR = 0x0000;+ a) ?6 o" u, w+ K
INTC_INTMUX1 = 0x3d;
4 `* y4 S1 O5 ~" O" x: n# I ISTP = (unsigned int)vectors;/ ^3 u/ F/ T0 y9 D5 ?0 l/ P
ICR = 0xFFF0;
! j. k8 u2 r* _! R# Y IER |= 0x12; ! N M7 g4 S2 o
CSR |= 0x01; % L' x7 r1 g4 W& G
$ W+ @# I/ h$ Y0 N
/ U- [" R! c |4 S6 v8 X6 d1 Y6 D7 e- N. ^' o% @ e
还有就是两个输入输出函数:
0 @5 f9 p5 n& p# M6 pvoid output_sample(Int32 out_data); ]+ y& f: P9 g
{% Q' j" {, g9 h9 N
AIC31_data.uint = out_data;
" `' N9 l- Q) [9 l+ P; K" X* V) C MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 E/ ^. y% K1 c4 s) w# l}7 T' }4 G2 G) e J9 o; L
: |( Y) B6 a7 J ?5 a+ W8 u
Int32 input_sample(void)* O2 x5 Y6 m9 X% N& G' ^& z
{
8 I0 U9 n- M7 [7 J! o( k AIC31_data.uint = MCASP1_RBUF0_32BIT;
- g+ k8 v9 ?$ h B. z# x& v. f return (AIC31_data.uint);
! t0 V4 C' Q. i9 ]6 f}0 C o- d4 T5 i8 a J- V
1 C8 a0 Y' U+ S0 Y1 p0 s$ I
|
|