|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' U" g( X* ~' z8 g
main文件:
. i4 E' p3 A3 b+ S l; U7 i, S8 o: Dinterrupt void interrupt4(void) ) A; v$ z7 u! ~9 F' o: r- p
{
4 e1 A1 Y4 D& l, _ R Uint32 sample;
4 i" f$ D8 A% L( [
$ N# v0 `5 J0 e sample = input_sample(); // read L + R samples from ADC
3 f- J2 C. ~' y( x7 f5 s, B output_sample(sample); // write L + R samples to DAC : \, W0 i7 a8 I' D1 H
return;/ ]* G- B9 S1 [5 E
}6 W, H5 R! \5 V3 W) {2 ?8 O+ h
8 I5 f: z* v$ A9 g, M6 a, ^
int main( void )
8 @3 T" L2 w) i{# Y+ H; A# c% L! G9 e2 F
" s0 p8 [4 h( |- M Q% n/ b
/* Initialize BSL */' v W3 F) y& @ x6 L4 {* D
EVMC6747_init( );
6 p9 Q6 ^0 p/ e& ~% C /* Call evmc6747_intr function */
6 n! |+ N# H9 y+ M+ R2 Y u" q2 p aic3106_init( );3 Q p* H# P4 |4 n/ x' h
while(1);, m4 {! E* u Z9 V4 k
}/ f) t' F; e, r( T0 |1 z6 g
' v. N5 y1 _, n0 U) M% _* Q: E4 x7 K/ o8 v7 Y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, A1 T; z8 i! e: k, w
/* Initialize MCASP1 *// ^! }8 n7 Y. w- u7 ]6 w7 ?
mcasp = &MCASP_MODULE_1; M J9 L8 {3 d% |" y( _5 |
mcasp->regs->GBLCTL = 0; // Reset7 H9 r7 l z8 |: u' @ Y
mcasp->regs->RGBLCTL = 0; // Reset RX
" K4 H& \; n$ O1 w+ o mcasp->regs->XGBLCTL = 0; // Reset TX
' x0 k2 `8 ^- Q8 R( X/ E. s4 l& h mcasp->regs->PWRDEMU = 1; // Free-running
' l+ }, y4 a4 ^) B4 e' } a1 A5 e- Z // configure McASP0 receive registers
. O7 B0 E# [, O8 ?+ ~/ w w mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 b6 o' E% A) Q! n! {# \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; C2 [4 }) j# c& H( q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' X2 v) h# Q2 g( U' N" { mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 W$ L$ C/ B: i, q& m7 X" D mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% f- s5 z9 X0 r& M
mcasp->regs->RTDM = 0x00000003; // Slots 0,1( z$ `2 ?9 k! P$ K7 r
mcasp->regs->RINTCTL = 0x00000000; // Not used9 ^/ c7 ]1 [$ T& K
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! A) s& y$ D( x
: {/ I" r/ J; Z4 T/ V mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used" C; c+ N. o6 Q" t0 N, t9 T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& A# U3 L" N E' S& E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' j4 V7 S# p7 [# F) p mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ T; q: w$ y7 e( R. R
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 {: X ] Q4 U
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; Z$ ]1 o+ w. l mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
}& r' X' m( Q; x4 A# s mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 n: p! _) \' A9 i# D/ v, e& P
2 P6 G6 N; d+ N( ]* \1 }4 k mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
% I+ ` L9 N0 v! H; [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 N1 k2 {, g. ]; l: x* i* S! j6 a
mcasp->regs->PFUNC = 0; // All MCASPs
- B5 {& y& Z9 [ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, v7 f6 R5 o9 p1 j
6 k# ^9 b, W' C0 d mcasp->regs->DITCTL = 0x00000000; // Not used
; z, J/ e. T- d+ t mcasp->regs->DLBCTL = 0x00000000; // Not used
+ _% o; ~6 g7 }0 O$ @ mcasp->regs->AMUTE = 0x00000000; // Not used
8 m: B5 l }- P" O1 L% F
( f8 S, ^% ]# `+ g/* Starting sections of the McASP*/
5 ~9 ]! {7 N% C& r1 j- w mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ \' L! x0 `7 J5 o3 K: F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 i1 T; V* M: l' W7 V
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 ^: g9 C7 ]+ v) s! P$ b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 ^& w% N% L* R0 e/ }7 c
& w2 o* d0 ]5 O mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. a8 D4 d8 }6 g- V! b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ p) g' h4 I" @* H2 I mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & K& y+ y8 b2 E( X, J. M, P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 F6 p% l. k9 b) ^! z/ @. Z: |/ g+ c& i. r" V6 `* L
mcasp->regs->XSTAT = 0x0000ffff; * O% _' |, D0 K! O7 _
mcasp->regs->RSTAT = 0x0000ffff;
7 B. a0 J$ U( w5 k2 D- G, y+ @2 |; Y! e0 ^& ~, y0 B
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
k% M2 O+ b& u" i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# x# L! a8 v8 f3 T! E5 z) K mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : r' \2 W6 b6 h9 }! f/ ]4 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 Y, h; ?0 ?: u2 J
- u* O' B* k$ S1 H& g0 f+ r3 Y /* Write a 0, so that no underrun occurs after releasing the state machine */
' e) i4 |. O+ \ mcasp->regs->XBUF5 = 0;3 ]0 D% E% g1 o
mcasp->regs->RBUF0 = 0;
5 ^1 M# W8 H6 }: O) M- ^& Q: o% [) J% p/ g3 D
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% n, j( I) X( |% t- ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 V" p* a5 n% g mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , i: j$ |: O: u5 v; F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T, Y6 M A8 e
/ L$ D: b3 _' D; U! Z4 z6 |% c, t mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; j6 y3 _1 a- F$ x% G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ v( r" b" }1 J mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 l: C: P1 P6 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ A4 c3 f5 c, @) n; M7 i
4 l) I5 j0 F4 P1 U n CSR = 0x0000;
, Z6 j. A& J( R# ]7 n: o INTC_INTMUX1 = 0x3d;, W% f0 P/ i2 X( X) W& J S
ISTP = (unsigned int)vectors;
{) d2 ]" d$ E1 k! q) \( n$ a ICR = 0xFFF0;
. d# ~2 \$ e: u2 b) m IER |= 0x12; 3 W6 n' Y- I) l& s/ [
CSR |= 0x01; 3 k% I3 k) Z' P( c* k+ W; e! c2 e0 H
8 o6 p5 Y% f: {
! N( k5 i( d& A. B6 `) p9 p
% F% b$ h. `7 d8 y0 G/ B8 D8 G还有就是两个输入输出函数:' f% z& i( \# z& O! a( C* R, |
void output_sample(Int32 out_data)
+ p( Q* q4 M* x% E: j! R" ~{) d F. g7 R4 o/ A( ?8 ]) R& o
AIC31_data.uint = out_data;
! C6 `8 C$ b3 t' ~( S7 W MCASP1_XBUF5_32BIT = AIC31_data.uint;2 s, p" @7 a. M$ b3 e) p6 U% B' Z
}
1 V+ U1 j6 C5 B4 c( i
' T y: }- f5 R1 G2 a) [% V: TInt32 input_sample(void)
! ~3 d7 w1 ~0 X' k1 D# `$ w{
0 ~6 `. Z, e6 ^! @8 U AIC31_data.uint = MCASP1_RBUF0_32BIT;
% X6 M8 N1 ~8 t( z% @ return (AIC31_data.uint);: t; Y2 t; y' k0 B
}0 i2 v i. N) `# B7 z% [9 C
# W& V8 k" ^& e% i
|
|