|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# O* t1 ^ @( T& \- hmain文件:
. W1 P. ?+ J: H$ ^interrupt void interrupt4(void)
" F1 _1 p$ M- K: i r5 p{1 g p) S# }" W! d
Uint32 sample;
. A# K/ M! @& g; X
& j0 ^! J0 f n- f( u3 p, q sample = input_sample(); // read L + R samples from ADC- ]7 n" i2 E/ t0 b' Q+ u2 n* J6 _
output_sample(sample); // write L + R samples to DAC
5 c d( H6 ~: T d- b return;
$ q& r# x9 s, L8 A}
9 @3 |: a: s" v, w$ }9 J1 m0 ?9 a( `& n5 ?. x; x+ q
int main( void ), v; N# z- K& H* {
{$ M! w" z" y6 l7 N& d, \
3 w1 a2 y6 u% C* Y# e' H/ w# L& H
/* Initialize BSL */4 a( K. _* H4 V. x8 p$ x) b; ^
EVMC6747_init( );
+ J p# \0 p/ S9 | /* Call evmc6747_intr function */* x2 g( e2 v& h& `3 C O* q/ Q$ i
aic3106_init( );6 P8 x* Y1 b w( Y8 D+ w
while(1);
* C7 n. M( m5 g5 {5 h9 ^8 k& R}: d: b& @5 V7 }$ D7 k) z9 Z' C
- \0 W* Q/ {: z* J" Q$ Z
9 Q/ d& r+ ]9 x1 m; K9 ?7 \' M0 Waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) v3 j6 F4 f5 g
/* Initialize MCASP1 */
1 f$ Y4 [" D, R0 p mcasp = &MCASP_MODULE_1;# m, u5 @! Q x& ^' e& a
mcasp->regs->GBLCTL = 0; // Reset$ n" B, _$ E0 P j, T3 z7 k4 S
mcasp->regs->RGBLCTL = 0; // Reset RX+ L' k& ~+ t0 y0 w5 n! W- @5 T
mcasp->regs->XGBLCTL = 0; // Reset TX K: X- x9 O7 Y6 F* _8 Z
mcasp->regs->PWRDEMU = 1; // Free-running; y, ~8 I( B- z' X3 ^$ D
// configure McASP0 receive registers
8 `3 q7 G( C; l4 u) Q3 e& d mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( Y" \' K* a; e! g8 x
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ V3 x7 W9 f7 h: u; ]! j' h: r1 N* W mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ p7 L- D# e+ | mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' {% E" H. c/ r3 K1 l mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 U1 y' M0 K3 S0 x0 K/ Q7 F" `1 k
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 F# m2 [% L2 K9 ~" x& `
mcasp->regs->RINTCTL = 0x00000000; // Not used- B( I1 ?% J0 j: ^2 Y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! P0 H5 A5 h% p/ w: l P
* E$ T: Y, D2 s) n: B. G mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 z% r3 M `: k& E: S6 V6 W
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 T2 y6 s0 w5 Q$ ~ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ D7 k0 o% C- `- ?' E3 L mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) g2 S4 G F6 ^* P9 I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 r' b" Q& [5 D( {% ^6 e mcasp->regs->XTDM = 0x00000003; // Slots 0,12 E, q- h) A' [0 {* ~$ ]: p
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ c7 G" ]1 R! I0 `
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- y# l- u" g5 h2 x
: J+ o& q- \/ B mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" V' c( {* E/ r5 u mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 j! |+ e/ Z7 ^( ? mcasp->regs->PFUNC = 0; // All MCASPs
% I& M3 T9 f) V1 V! j mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! W$ L% J1 O! M& q6 C
2 [+ Q( a. R* M4 h: d5 D" ^( u( P mcasp->regs->DITCTL = 0x00000000; // Not used
8 s) ~6 W, j; R) b mcasp->regs->DLBCTL = 0x00000000; // Not used; X- P6 v6 n, e0 `; x
mcasp->regs->AMUTE = 0x00000000; // Not used
9 Y9 V% J$ E! @4 g+ ^1 N: D& H2 K/ M: b. R: Y* N
/* Starting sections of the McASP*/
( |! }& J5 r+ j- H) U$ z mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % n( M. z& A5 _$ E% E) h1 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
; k: h% X6 z, c/ i+ \8 H mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; j* T8 |7 f5 L* m2 Q" D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 C' _+ Z9 t! ^ a" b7 e/ q2 H5 }6 r
' F& A, Z' L' ~ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " \3 c8 m+ g P, ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: e$ T0 c1 S. o! @' J! B3 o
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # ~9 C1 e$ v% Q% ?$ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 L8 U1 n3 J0 p* ]# m5 I6 {
$ n7 C- x9 O/ Y$ }3 W" @. e mcasp->regs->XSTAT = 0x0000ffff; 1 {( O6 B3 w, r& U( }
mcasp->regs->RSTAT = 0x0000ffff; # w, w! w; n V+ E( o2 k
1 q7 B9 k2 ?$ o8 ?! ^ m: p# f mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;4 ^4 a! y6 h. e4 K
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" m7 s5 M/ g; E; |6 ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + x! R$ f: r0 I+ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );- V) [5 N2 u5 N7 m- z5 P: B" E
8 l! L; R, R4 P4 c4 S) w- ?% { /* Write a 0, so that no underrun occurs after releasing the state machine */8 O9 l$ c0 i1 I6 G, p. e
mcasp->regs->XBUF5 = 0;$ m' U W1 Y# u& X; \4 y; o
mcasp->regs->RBUF0 = 0;
0 M2 J4 m# g8 o! O( E5 W& U* U
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; J8 n# L4 }0 a f2 J* P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" U6 R( Q+ K3 T4 x5 F
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' ~+ n5 c0 L: D4 D! G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 P8 a$ Z4 N4 R/ U {. T* x
" I, R, D0 w |0 u/ t3 D: K mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 d% w/ S7 w9 m' k% C- A while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. A4 v7 B. R6 h# G
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
y8 V3 q& k, E6 E3 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ h# w; S( L. _
8 Q0 m3 ^* a1 H5 \0 S CSR = 0x0000;
L& l2 N& I3 E! M v+ R) u INTC_INTMUX1 = 0x3d;
/ \2 X- o" {8 n ISTP = (unsigned int)vectors;
: D5 \6 |8 X- I }- V ICR = 0xFFF0;
. L/ T8 C* A V IER |= 0x12; 3 {2 Y! _4 N4 h# O R
CSR |= 0x01; 3 a) X4 Q! T) r5 e3 i
. }( a! z/ ? w4 O" W2 L+ y
# s# L- M! |5 A2 U' w: B5 o: ]' Q4 L; d1 {8 e: R
还有就是两个输入输出函数:/ n8 T# w% k3 V. L# Z- f! W: [' D
void output_sample(Int32 out_data). {+ P- F% s1 J! k% e
{% ^$ }" y- {! V
AIC31_data.uint = out_data; ! m$ S$ x5 Y: {/ P' K. W# \7 D
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ m* |% T* S& E# u
}/ _; X1 [8 B# E
; C, I1 h1 ]" [2 BInt32 input_sample(void)
3 H3 i, g9 g/ q, m& A+ H{ ( Y4 a, } o9 F6 P" V! X L+ L$ h
AIC31_data.uint = MCASP1_RBUF0_32BIT;# U9 P) S1 I+ o" b& P( u C
return (AIC31_data.uint);3 M' O, H' N$ l% i& A }4 B% a
}2 n& J: z& s5 Y' ?
7 h- W% `" C+ T- E. d |
|