|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& l3 ^' [5 X( X2 u5 j9 ^" c, ?
main文件:
) @ v9 G' F6 {3 Z z7 xinterrupt void interrupt4(void)
5 t, Q5 B3 \2 C{( ?! H! l3 a; i7 l
Uint32 sample;1 y6 E" H( e$ W2 Q
9 O5 q& T- d$ D3 a; F3 T( N: |
sample = input_sample(); // read L + R samples from ADC; @3 l% n7 S. B
output_sample(sample); // write L + R samples to DAC . I7 a6 R Q' E' \# t' b
return;$ u! d5 A1 M6 w
}( F, y+ y# \2 m
8 }1 S* f, ]$ [! ], e
int main( void )+ q: V P$ F* W& Q* P
{
5 ]2 P, e* T/ F V. i- a1 @: a7 g; v& x0 C& r* B
/* Initialize BSL */7 z V a0 S6 B) e% T
EVMC6747_init( );
/ n `" K$ T. S1 n4 K9 O! Z( @ /* Call evmc6747_intr function */% Y. W" ]$ H" ]8 m
aic3106_init( );
* O" e' V2 c( h7 E, v. V, O$ `9 J% i while(1);( s5 k# r6 i0 N7 F5 y
}, y( _/ d! T( j7 F" A) h
. z, t! J4 `+ E3 L! i( v* {$ q8 K- @& g1 u! {7 N7 \$ V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& e* N3 U) z/ z! Y
/* Initialize MCASP1 */
, B. n# K( y9 }/ |8 M1 a$ k8 P mcasp = &MCASP_MODULE_1;& J% e- U% W6 |% V4 W
mcasp->regs->GBLCTL = 0; // Reset* Q# W/ L( ?% K/ m( G" v8 N7 h
mcasp->regs->RGBLCTL = 0; // Reset RX2 q: B+ W1 @" z% k
mcasp->regs->XGBLCTL = 0; // Reset TX8 N! ^, l; X9 q/ |/ G' K* a
mcasp->regs->PWRDEMU = 1; // Free-running
4 Z# X6 f* g9 Y3 \6 N1 G+ _. T; | // configure McASP0 receive registers
3 o( Z1 X9 C+ J2 Y6 c, O8 [5 R" X9 U mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
! ?9 ~* z; W7 ?3 A- w, b mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! N7 k: J/ O2 r Y) |
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 F8 N" ~3 U9 ]9 X8 Q3 x! I1 d o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 y$ G- [0 u( |7 C0 B x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
: l [' Q+ `6 |& \, u1 Z mcasp->regs->RTDM = 0x00000003; // Slots 0,1& }5 J2 f% R) L* `: S
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 N* _$ }( K- {. t0 Z7 { mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- n% R( J! t9 G* I$ {1 g: l2 O, u0 ]. q, h. w0 r$ ~/ |! C! @8 M
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used$ `' Q( l m- u Q. D( K8 x
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
@( ^6 }: n/ G; g9 F mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& u- n; k8 U- } mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 r7 F: ?2 }. s; H mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& r2 f# N- P6 Z' { mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 z% I- W; J0 G7 n' ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) z5 a+ |+ x. I8 S8 x( X$ s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 ~: d7 g3 ^+ M X. I
( V. w4 t3 p# ^, w! l8 }. |( |* b6 J1 c mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* I; x& N' n( N: T' T3 e/ G3 x+ L
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 k/ R' y9 n8 r2 T mcasp->regs->PFUNC = 0; // All MCASPs2 |$ T) K; o' `9 I" b
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1% L$ c% {' O3 O0 ?
% c( ^) _5 @ H1 M* a mcasp->regs->DITCTL = 0x00000000; // Not used
, H- i" U4 _# Y- e- M1 \ mcasp->regs->DLBCTL = 0x00000000; // Not used9 x- G/ f. H& _! W: M
mcasp->regs->AMUTE = 0x00000000; // Not used( K+ `) P" E+ K2 C
2 f. i* Y) t$ p! T0 i
/* Starting sections of the McASP*/( F0 c; r! k1 a( `, a; q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 N: n9 D6 n: s' A; {& G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
3 X5 Y8 ?' ?: M, U; B/ i& x mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( h! w7 N( v4 p% T" y* m) {+ X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. l3 q! g8 j( |1 `
8 T/ k2 ?0 `7 U- b% f& b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; ~" @6 `6 u8 }0 \4 G5 \ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 M2 Z; ?8 H/ F9 d mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & J1 ?) e- w! s1 K, X' |/ V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& Z# M3 j# [, U, y8 O" t6 {: h. a% H
0 W5 s0 \. l; o# X
mcasp->regs->XSTAT = 0x0000ffff;
1 f1 U0 l, V2 {) W P" K mcasp->regs->RSTAT = 0x0000ffff;
q6 H2 n# L; q {9 x; Y8 u
; f' m$ ]1 m5 a, l5 [' O: d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, z9 t) L# m/ g. M8 J1 v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: a6 {: `/ l ?. p Z3 |* ]
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 Y+ s' Z" K" F! B8 p/ x! Z2 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# Y: H/ {8 P6 ]& N
& G$ u$ C# d5 y" N% J9 N6 q /* Write a 0, so that no underrun occurs after releasing the state machine */
4 l3 \# ?) z3 `- S" V mcasp->regs->XBUF5 = 0;
# |" j7 q4 ^) k3 M7 {& k& t mcasp->regs->RBUF0 = 0;) J9 | M* _$ F8 o2 h3 e* J
- {) h% H, l& Z$ w/ G- Q. Q6 \ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; O) z h* x0 z" B' H$ K# {; m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 s, S% n X6 ]: y4 d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" K& j# Q1 C+ Y4 b, M, ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );' u$ b, w4 d8 l5 C9 k- l# _8 u) ?
7 v8 }: W. j% z) Q: s/ W
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ \# M, @; `, P+ ?) N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );7 q% d- r7 V9 ^. P- x
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 J" {) L% @/ D9 n$ i S0 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ Y: W' i$ z8 {- G5 U( k! U0 ?' z7 X. t7 o r L
CSR = 0x0000;9 X5 @ m/ F( s6 b/ d: Q+ ~
INTC_INTMUX1 = 0x3d;
- Z# d7 J) p2 H: v ISTP = (unsigned int)vectors;
2 p7 R5 a7 e6 V% G( f ICR = 0xFFF0; 4 q/ _* B3 B& H* d, s w
IER |= 0x12; 5 y/ |; j* ?8 p9 B( ]' n
CSR |= 0x01; ! Y$ Q; e$ p) s1 x* S' k
& v3 v; F2 |/ I) O- g3 [
' b3 K/ h$ W- Z5 N4 f o
, J: r+ _. w3 m, E
还有就是两个输入输出函数:
! P. U% i# |6 b1 R" _- |void output_sample(Int32 out_data)& m! I) q+ w/ c
{
8 E0 R- s! Z. G$ E AIC31_data.uint = out_data; + \4 u3 W6 b" s- i! V. B9 u
MCASP1_XBUF5_32BIT = AIC31_data.uint;% g5 t/ `+ l4 I+ q& d
}( Q" s' _' J. u8 U. k* i
) [! r m8 K5 f3 W6 `
Int32 input_sample(void). g8 C7 y) K; L7 L
{ 8 a5 @$ g9 r' g4 ?% m/ o3 x
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' i; J6 l6 [" i4 `' I: y& s return (AIC31_data.uint);5 r1 C# }/ D( Z, U- d% s+ b& u
}" D/ V; V$ _/ L0 w8 D; f7 b! E
N4 s9 a3 i4 M( x. h. h S; L( T
|
|