|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# o; N* G% _. r0 Bmain文件:
) B) L/ v q2 q; h2 Y9 qinterrupt void interrupt4(void)
9 `) g) y7 U2 Q4 M. \" `" D{
, S* ^" y3 k4 ^$ e4 T3 Y( b Uint32 sample;; H* u! N y4 J* I) D' m" Q
9 E. z y& o! z+ |, u
sample = input_sample(); // read L + R samples from ADC
+ l. h8 O7 K. F) H# D; O output_sample(sample); // write L + R samples to DAC
7 L9 Y0 K2 a- `' W' T) K6 Y return;
9 m% ^; j7 u6 y}. \( l: z! [: c; `8 }
# V$ P/ F% d8 h1 J+ g, {0 _5 Vint main( void )
' F6 U1 K. B3 D8 ]6 U{) f$ ^/ |# x7 d2 J5 s" p
4 {7 E3 {; ]% F6 T2 w /* Initialize BSL */$ |( C. n% [' A+ g% w
EVMC6747_init( );
( M% A* K, J+ t& o /* Call evmc6747_intr function */. U. G6 h1 V$ g5 ~9 D- a/ m( B$ _
aic3106_init( );
0 n% ~" T/ x- L/ Z* ` while(1);8 L% [! S& B9 ]) x
}/ I3 n3 S# o4 F" J* \( D
0 k4 ^: }' G& r E# d3 |
8 K* v1 D! Z" y* a7 Q+ d
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ H8 f4 ~' u; X) r1 F4 I; W$ k* N
/* Initialize MCASP1 */
" F) q/ e& z% U6 s mcasp = &MCASP_MODULE_1;7 ?& e5 \ ]8 L/ O* i- |7 g1 ?
mcasp->regs->GBLCTL = 0; // Reset
9 ?. u, W- c) [+ L# i) h/ R mcasp->regs->RGBLCTL = 0; // Reset RX
* \. P6 I" S" y0 X5 s mcasp->regs->XGBLCTL = 0; // Reset TX
# T( d8 C! W, m) s, h5 @& }3 \ mcasp->regs->PWRDEMU = 1; // Free-running
2 o0 ~+ v4 \3 T+ r# ? // configure McASP0 receive registers9 v7 k. G9 h$ m% }/ U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 f7 n- d! @8 U5 y! i. U mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: b1 y, y! A( J1 B/ I' S+ |: n
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* L! D1 T- O6 ]1 m
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side) ]) d x. T6 e" l0 [! w9 c+ @
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( i8 W# g* O X
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ B8 b3 \+ [ Z! E: S8 { mcasp->regs->RINTCTL = 0x00000000; // Not used
; R* X: v8 O* n5 m1 ^9 Y* ?1 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# c. d8 E+ @) c2 s0 K* W; B7 `1 _4 p: h( L5 {3 |1 a7 K6 b
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 o# P5 g1 s/ ?
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 R( i G4 }7 d' h* s1 D8 h7 Z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 i! o: X! C( T4 |2 H: x* v mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. M) w; W5 A) I9 b1 K# S; i
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ r) P% @+ B' x2 T0 p) Z
mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ a7 O, ]% x4 o. r0 D7 N) @$ }, H
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ o* F* _$ U/ i8 f
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. H2 ]; Y3 G# E5 M
% ]: ?, m4 q* |( E3 _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ ]: {. T1 ~: m: _0 I! t- j7 ] mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& j' N* Q: W& o3 w9 s
mcasp->regs->PFUNC = 0; // All MCASPs
4 B, b7 U' r$ ^3 y8 m( I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 \1 b# y4 `: @) n4 ^% c
& O* c$ s3 r' o7 m2 M. ]8 V' n
mcasp->regs->DITCTL = 0x00000000; // Not used7 T: U0 g/ a, p1 ^. g, X. x
mcasp->regs->DLBCTL = 0x00000000; // Not used; v/ d7 D3 { D% Y0 z" |; T
mcasp->regs->AMUTE = 0x00000000; // Not used
$ k7 @! [, q. X+ G2 G. ^* x: Y6 W! v) @4 K. J
/* Starting sections of the McASP*/" M: L) s% ]$ @( Q+ {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ q# C. Y+ h U0 O. g2 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ [1 X/ Q* ~- K" Y: _% g mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; n, E8 O& |2 Y" r$ t/ `" f% F8 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, d L: e2 B8 B& f U" j. w6 Z9 }5 S2 _& K+ Y8 v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 o& W+ ^: [, Y4 Y8 S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* u" x& b" \2 I& n- Z# [; C
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 L3 j/ S) N' B6 v% l- P& Z& ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 m6 q4 J" K" }
* u# H, l% I$ V e# e) S$ I) t mcasp->regs->XSTAT = 0x0000ffff; 3 A# [4 W( q3 D( G3 [
mcasp->regs->RSTAT = 0x0000ffff; - e) W2 D$ n$ l7 x
: u- z" w G* l% f! _" H mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 Y4 Q' P- t D9 H: J; M0 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# }- ?) j# C7 L* b% Y
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / ~0 P7 E3 f& m0 _9 c t$ ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) |! Q: m: w* ^% F, x% b J. A4 ?/ \( A7 {, j- e
/* Write a 0, so that no underrun occurs after releasing the state machine */2 U7 p3 q6 J& l
mcasp->regs->XBUF5 = 0;
1 d, P5 x; \2 b$ }6 S mcasp->regs->RBUF0 = 0;
. p' ?; G5 j& A7 O& _
- n+ z1 E5 _! \& L2 c mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! y- M. P+ i* E n while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 F; R" C" p: S+ [7 @6 P* z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' c; h" w/ Y0 @5 I! D7 z. c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ k2 a6 o; n# [; ~* |) j
3 a- z9 }0 Y+ u. Q; t: |/ T mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , f% {! g. w: n5 _5 O0 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 X9 }4 ?5 ]" }4 c# E
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' C8 Z- V$ _9 W$ m4 b! f( ?: @' T, a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; R8 g( X( Q s3 v; Y' w3 v( f( [% d3 V" L0 `
CSR = 0x0000;+ u3 x" S6 [% v" R, @( ^+ A; N3 r) B: j
INTC_INTMUX1 = 0x3d;
( t# V; Q$ z# w$ F ISTP = (unsigned int)vectors;) R% L* s/ X0 k' q" ~" D( Y1 r
ICR = 0xFFF0; * H9 V+ M+ {" ?7 m' e
IER |= 0x12; * m" t$ N& n) ` F5 H
CSR |= 0x01;
# w" K( |6 u) Z4 Y( I8 X c' Y
8 |# u, d) G) {4 A5 t J5 U. z2 |0 j @9 G" t2 `* L
( Z& h" b( H; d/ w% n还有就是两个输入输出函数:
5 C: y: Z3 @, bvoid output_sample(Int32 out_data)
" v- m5 l& J. t: ^4 ]{7 L* {) t; \/ H& }/ }9 L9 o
AIC31_data.uint = out_data;
& i7 k* A$ |9 f MCASP1_XBUF5_32BIT = AIC31_data.uint;
* c; E9 W2 y2 f4 R C- A& a}8 f3 {- v; m9 Y3 |- E
9 Q. ^" T x) Y* {4 sInt32 input_sample(void)3 t M0 Z* V7 w
{ 1 Y5 Q7 o& m! H1 {' t, V9 _# r
AIC31_data.uint = MCASP1_RBUF0_32BIT;
& S( E+ J7 |7 K" J1 v1 r return (AIC31_data.uint);
; T0 x6 u2 g) G}/ G6 Y3 \/ h" A
9 Q& ]( G/ U9 ^& _' C) F
|
|