|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' H2 M% B# F* d& Vmain文件:
5 J- K, M4 @6 F* Finterrupt void interrupt4(void) 7 c! G0 p; a* ] i9 q& }
{
$ L9 m( o6 i- c7 y- i: ] Uint32 sample;
3 v/ |0 N% q( G. n
& T5 n) }' w1 Q* q/ V1 N/ |2 | sample = input_sample(); // read L + R samples from ADC
# Z# w- z7 @8 N, `5 }' u8 S output_sample(sample); // write L + R samples to DAC
( B% S- k2 |% l* Z, n return;
) R) A! [- s3 [}4 c( J9 L5 e- R5 C2 e# c
8 k* w1 n7 G' U+ O* l0 V: rint main( void )+ e# ^3 X" X% R1 G v$ Q0 I, O
{
6 O* r$ ]1 g5 c: L0 v% p, f4 d3 b* C$ ^8 ~. e# e
/* Initialize BSL */
; K6 U9 M/ G# ~2 [4 z( i- v9 g; P EVMC6747_init( );" d5 i% b& a7 ?2 e2 J7 V: \& g
/* Call evmc6747_intr function */
+ y* j ~, Y) S6 X# l+ L" c aic3106_init( );1 n; |( Q# G' Y- D4 X" [
while(1);
9 K; Y+ M, @7 p! O}
+ P: s8 _" ^( N" j# D" [! \8 Z; X, H5 R% F5 _4 B) I x
& r, [5 g* Q* {4 g8 t) z$ s3 C: Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( ?& I( A/ ^% \% A/* Initialize MCASP1 */) l: a# J# X6 m' s$ n1 e$ n' I
mcasp = &MCASP_MODULE_1;+ M; s- a; j5 T* Y
mcasp->regs->GBLCTL = 0; // Reset
+ _4 @; {! i$ b9 U( L3 x mcasp->regs->RGBLCTL = 0; // Reset RX
1 w: ~5 V7 d: P8 Z mcasp->regs->XGBLCTL = 0; // Reset TX& K# O7 \6 Q$ e T1 G9 [8 G' F- ~
mcasp->regs->PWRDEMU = 1; // Free-running
* m/ ~% r& P+ w. _" z6 i, L; t1 f- ` // configure McASP0 receive registers: Q$ R. w3 l- f. K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: h8 C/ F4 S: K3 n/ L- u& m mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* v2 W. f, J/ h- ^. S- b
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word- F a' _ f; F$ [/ F
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: k% F; ^: Y+ I/ f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
4 o3 d6 j' { @9 z, X4 u; T mcasp->regs->RTDM = 0x00000003; // Slots 0,15 z2 U9 A3 T) j# X
mcasp->regs->RINTCTL = 0x00000000; // Not used
( l9 q/ u2 } U4 T! g. T mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* m ? }1 N2 y5 ^, M9 B7 E) W! z! w: b, u" t) J1 r0 Q+ H
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; L; {* V6 ^. u1 ~
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! m3 |, i: L7 e! x. U# W2 y/ v$ Q mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& V( e1 m8 y$ A7 g
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 M W/ C3 R0 b+ {, D: b# i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 K8 I0 E, \3 S; F$ V2 c
mcasp->regs->XTDM = 0x00000003; // Slots 0,1, M/ O7 g8 M3 t0 S: B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* I! q; T$ h. x; g' f/ M1 r i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 l8 A9 n0 C, g$ T7 A; ~+ C
# F) [; G7 C& p5 F- n mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 x) z" L0 V) `+ \+ l5 F* L/ n( Q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, Q2 e/ i8 D- _& [' b* c mcasp->regs->PFUNC = 0; // All MCASPs
A2 u _3 _; A3 z% `1 F; x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" A( q$ P8 U7 O+ R3 |8 P/ {2 y5 c
/ _6 W1 o0 X' A2 O, S& e: |. Y mcasp->regs->DITCTL = 0x00000000; // Not used
3 i; I" ^2 C& e( C mcasp->regs->DLBCTL = 0x00000000; // Not used! J. j/ a$ p$ A
mcasp->regs->AMUTE = 0x00000000; // Not used6 d3 K! a" m+ v7 e3 Y7 S. ]
6 [& u) C1 N' z$ o( t
/* Starting sections of the McASP*/
2 T/ I0 w0 }3 R; b9 @' I0 m! U mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; A3 M% o: j1 Z; { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); $ b- r8 A" K' F1 v7 _ U. d4 o: b, d5 t+ r
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 w+ x5 G/ Z( v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- I* [5 r9 {1 T( L* t3 O( \
/ p- x/ @- b* _0 n7 m8 `; d mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; z0 I1 x- J" g9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 M5 W* M; T! O; A0 _ X' ?9 S2 s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' |- i( U9 V/ C6 k a8 e2 U3 Y& {0 D( k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 A2 _! S; Q3 H9 Z! g( s q5 O
' S8 F1 L# N7 E( K \& o3 r mcasp->regs->XSTAT = 0x0000ffff;
: P% F4 \- d, b mcasp->regs->RSTAT = 0x0000ffff;
9 i# k9 _6 n& A) A) A
2 o0 I, S5 W" ?( X. U mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. G- o% Y+ b6 t/ S. c' J$ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! J! C! g& u$ z0 I mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 I8 Q. v- M) z3 ^" H6 R9 I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 ?& j( t1 v- ]6 b k- X8 Y/ T1 u/ e
/* Write a 0, so that no underrun occurs after releasing the state machine */ k- {# @3 @/ M# s) s, R
mcasp->regs->XBUF5 = 0;
% o- L% }" C: Y' y mcasp->regs->RBUF0 = 0;
1 G2 p* m7 K( @
# h5 j" v- U! K# \. R/ N mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) E& O1 d, V* E. c4 {* p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 h3 M1 R0 X3 y/ ?' l1 D' d6 ?
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ F& |% J4 a. a' `% x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON ); T% r6 B9 i4 [/ m: h1 _
: p! z' M' T* M' t+ ^$ _4 c: h
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 s q. F- p/ n7 E9 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 N" F% P: B, h3 N$ J
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 K8 x, }; Q( r. `, ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' ]* x. j- o& T; c# a- Q3 v+ C
4 v1 L; r8 c; W C& ^1 r& z7 x w CSR = 0x0000;
6 E; e! Z6 R5 Z9 Y" Q& b' {2 p! u INTC_INTMUX1 = 0x3d;. q2 k9 \7 v! p) N6 m. M
ISTP = (unsigned int)vectors;6 _6 w* D7 z- ?; O
ICR = 0xFFF0;
" m S6 H# h+ Z2 p* s IER |= 0x12; 8 [* t7 P7 H) y: [! v: G* P$ e
CSR |= 0x01; & w5 k4 W4 X$ T# L: w
% Y/ g2 X* B4 ~7 R5 v# h/ p, W/ A
& W4 \- Y0 u. e9 F4 A还有就是两个输入输出函数: D+ T7 h- y% I' x3 z! V0 G X
void output_sample(Int32 out_data): k% I8 }- ]" h+ x$ p2 C7 U
{+ P1 W% w4 O% h
AIC31_data.uint = out_data;
" |5 I( h' A, q5 C0 g& s MCASP1_XBUF5_32BIT = AIC31_data.uint;
. a0 X2 x! D2 P5 \$ W& c) V}6 e3 T( [% M' P6 J
' b% P6 N' M% E4 ?! `3 H
Int32 input_sample(void)( J: j+ {* u5 I2 @
{
& A- {& ~5 `' u7 k AIC31_data.uint = MCASP1_RBUF0_32BIT;
% \0 k( q3 h% A" C1 G5 N return (AIC31_data.uint);
i) b, w$ K1 }- J$ R7 j5 Z; f}
9 D4 L! Q d( G# L; L6 ]% P8 S. w8 Z! p; E" F& g3 e6 x3 l B
|
|