|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 S. V; L' k% t2 S6 m# {( @1 Emain文件:
; [. I5 V' P4 Z) Y# {9 _/ Xinterrupt void interrupt4(void)
, r3 a8 n( K" m7 M$ q. m. `{
9 ~1 w5 ?1 L9 ?; S Uint32 sample;
) y+ r/ U% m; {( w" G a6 {9 C& c6 k
G, |4 B+ B, | sample = input_sample(); // read L + R samples from ADC
3 k3 t% Z+ A( d9 h, g4 A5 o output_sample(sample); // write L + R samples to DAC . X' S) M7 Q) ^ {" a
return;# E5 D8 v- T0 S
}
' J; D% L4 h8 t
& x* y& @1 ~" K* y |, b: e, j% D& Rint main( void )
: Y- T8 Y" K! q{" p$ e8 F7 [7 H; p# u* M$ n
/ D$ ?, @1 Q+ J /* Initialize BSL */, P. C2 d7 V- |* A, j/ J8 v
EVMC6747_init( );, t$ W& Z+ K6 k7 c0 @4 x1 w
/* Call evmc6747_intr function */
0 a' g4 W( S2 f) M, \# e. i! @. z aic3106_init( );
3 g+ Y( m5 }0 v* z2 ~0 [8 U- I while(1);
6 ?5 r K0 S$ Q4 Y3 f}
# y- W7 k& w% G0 t+ n( q2 d+ b* s1 f: I% `& C
* D: x% u- S7 x, {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' B |, [8 p$ J1 ^% M4 f3 x6 m; Z
/* Initialize MCASP1 */3 W9 m1 g% {( l0 ^0 Y% b$ n3 S
mcasp = &MCASP_MODULE_1;# K! z2 o8 \$ K( @. D
mcasp->regs->GBLCTL = 0; // Reset
/ g; {! U. s, t" d. M mcasp->regs->RGBLCTL = 0; // Reset RX
, W; k) h% h& t7 q mcasp->regs->XGBLCTL = 0; // Reset TX
. v3 j+ y5 ~+ i% H" x mcasp->regs->PWRDEMU = 1; // Free-running
* G5 z/ g% q- c! k( | // configure McASP0 receive registers, a. L/ a% V0 a& l
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
" g2 X" S! z+ o2 L; Q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 ]. j* G5 u+ m' ^ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 n+ O: @7 @+ t$ I( ?* ] mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 j! }% C( D! g) q6 Q* l5 t* C1 j8 q
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) I. V! w$ O2 S2 \+ [& x mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ \- b( K7 v! \; m, @
mcasp->regs->RINTCTL = 0x00000000; // Not used" C! ?% y/ n1 i( f8 o; s2 |/ l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 }- s5 X3 x$ S _: F0 ]; Q+ A' Y3 T- t; D, P4 |
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 A# q, F( R. |, b, n+ E7 Z1 D7 S mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 D( [. P( P# H& X5 _# b* Q+ G mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" w J; z& ~2 e+ ^7 T mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. L2 U0 w( ^, ^! h f D mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK% Z* _9 b. c0 W% o$ z' m ]
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 c5 S0 |! b1 \6 \ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit* u5 d( S/ H/ D D' D$ u
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ z! s: ~; G a
: q* |) t+ E5 J/ s$ C mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# |1 a+ J2 J2 Y4 @
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT1 C9 ^0 M$ n/ b* I+ x8 W& }# c3 B
mcasp->regs->PFUNC = 0; // All MCASPs3 c% j" i% \ K6 E
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- s" x- n0 a( F' x n1 b) [
, _2 O0 Z; X6 S0 R) y9 j
mcasp->regs->DITCTL = 0x00000000; // Not used, K/ i; G/ K; z7 n0 h! T- R
mcasp->regs->DLBCTL = 0x00000000; // Not used
& }1 D9 k! g1 E mcasp->regs->AMUTE = 0x00000000; // Not used
- T0 {& I. O* a8 N3 w: H
5 J+ \: ]. W3 a/* Starting sections of the McASP*/
5 R5 d' E4 J2 E9 }7 ^; K, v/ B mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) E/ N# V4 u, ?2 ^* Y9 l# G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 o F; k3 G7 `& x: u) v4 C mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 W% r h! @! D4 J1 h1 t$ P& _) R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 A7 ^! d3 ]. |* I1 a2 U" D1 X; f: P1 |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 v3 i6 d* L, q9 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ r& \$ D; v0 q5 `
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 M; @& l$ I6 e2 k( _5 T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ u6 Z$ q1 ?2 V0 n* j
5 E' `5 z( |$ m" O* X3 K: T1 N9 r& m mcasp->regs->XSTAT = 0x0000ffff;
0 s/ b+ F9 w; u/ ]2 ], A' c mcasp->regs->RSTAT = 0x0000ffff; ) I n7 b- ^- ^- u% f4 _
2 l' }$ Z! ~+ m+ `
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 D7 K v6 n5 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ e+ s; w. x: v mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 ^6 u2 w! g9 D9 h, `$ g, H- a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 n& q, x2 L7 Q. e' i# h2 k3 g
; S S! o# n$ K& X3 g: A /* Write a 0, so that no underrun occurs after releasing the state machine */- t1 m. M2 ]( g8 u# G$ v1 }
mcasp->regs->XBUF5 = 0;
2 [/ _9 Z3 i! I& Q" a mcasp->regs->RBUF0 = 0;) y- [7 y3 \0 A* h* j% S! P: p5 V
1 u5 _) t; t0 }5 f3 m: b
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' D g4 E @7 @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& {* p/ Q: L* i6 }) k mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! ]$ |9 T; N- q# ?2 y b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- `2 t/ L* ^( h w4 \
: w. f' |) t, [! X mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 i. b+ m- m2 x/ l0 g$ t8 v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 b7 ~0 i4 O% \$ j/ E8 |+ o- G! o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : B& m; G5 ^; p! ?, T& s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 B5 M, P' ^) g: _
- Y7 v7 L) f4 h3 N CSR = 0x0000;
4 _' Q1 C3 y/ U+ L1 l7 z INTC_INTMUX1 = 0x3d;6 {4 b0 @( ^/ W$ K" `: T
ISTP = (unsigned int)vectors;
; J1 d: A @1 z* u- a ICR = 0xFFF0;
: U* S7 S( W0 P' F6 K% Z IER |= 0x12; 6 N3 G4 g2 s" u/ w" c$ I" Z, Y2 W
CSR |= 0x01; 9 C' E% T) _; w" a {& z0 d
m4 l5 {! R* T4 \8 b4 j( E5 R- o4 {/ u, H: M" G2 I
# M5 V$ n! g# X/ L+ M; l M
还有就是两个输入输出函数:+ v$ Y- {( V! O3 l8 Z, W
void output_sample(Int32 out_data)- Q0 L) v1 M) J+ A! o) [& r
{
! Q. }+ ]! m1 h& S6 U" l, @ AIC31_data.uint = out_data; 5 C# C7 V4 \2 W$ S m! W
MCASP1_XBUF5_32BIT = AIC31_data.uint;7 j- N+ u) ?, l5 R3 s
}# A, w% W, v G: B7 c7 Q
- x$ A! ]9 b' z% z" ^& u
Int32 input_sample(void)/ _. O/ k2 B9 M) P1 y
{
- j! r2 X3 \; v+ \ AIC31_data.uint = MCASP1_RBUF0_32BIT;- j! v6 y: V( }9 J1 m2 f# B
return (AIC31_data.uint);: W: q: m7 j2 i. W
}* s+ ?1 {- T. y- f# K: M% N! q
$ t0 v0 _; x! Z/ }1 q
|
|