|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& Y; p+ E( f5 O# z0 L/ O' s) Qmain文件:
8 ^# Z* e$ N; ^& F$ Einterrupt void interrupt4(void) . I/ j O" Z* T+ z" A* y
{
3 G3 c2 G- J7 O, B* A$ T Uint32 sample;
4 p& p2 Y Z, V3 X" X% s$ t. i% B; ]- P& O+ @2 ~% ^
sample = input_sample(); // read L + R samples from ADC! i. ]- M* H! d4 e9 B
output_sample(sample); // write L + R samples to DAC
# m5 H& {9 }* K. F9 y! z return;
$ m3 w- m [* R3 E' [2 L% X}: N* l- [7 e/ w& J
7 H" [" G* O/ Y6 j$ x% o" ^int main( void )
! V" d0 J- ?9 X6 d/ g{
* P* W# H+ m8 L$ L ?" E7 h; g T: Q5 ^. Q" m+ `) C
/* Initialize BSL */( B8 j, N e; d% @& T
EVMC6747_init( );
# j; I; r5 Q6 z# u /* Call evmc6747_intr function */! b& e4 a6 t1 H- D6 l% f, t
aic3106_init( );" i7 y7 G+ q- W- u3 |
while(1);# |, Q) _7 b( C% B. X
}
5 h- V+ o" v- M; L' |% [: h+ R! ^6 o# l$ a( Y# `
- N4 H3 ^: z' F0 }4 N4 {, }9 gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ a4 M/ `7 w2 P+ p7 t: ~ S
/* Initialize MCASP1 */7 C1 o4 ?1 o1 ] ]" z
mcasp = &MCASP_MODULE_1;
3 K+ ?8 }7 }0 T* u- P/ S. S- p& @ mcasp->regs->GBLCTL = 0; // Reset
2 W) Q5 r) K9 C D. a' }8 c# H mcasp->regs->RGBLCTL = 0; // Reset RX4 X* w# H) t, |' i
mcasp->regs->XGBLCTL = 0; // Reset TX
5 d+ u8 Y3 s4 T. N! C mcasp->regs->PWRDEMU = 1; // Free-running
/ s# Y0 I" T. h // configure McASP0 receive registers
* b% ^" p, T1 n- v* q; D/ g z' ^& R3 N0 ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used2 `. p5 X! T3 D! P& d, S
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y: M- E& `& b) o" } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! y1 F$ f7 a# E- J
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- h$ j3 q& c ^4 U; ], J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% Y; F1 n6 f* Z$ A0 L) O mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ l f2 \. }7 }
mcasp->regs->RINTCTL = 0x00000000; // Not used$ ]: K! b! S& [3 T" q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, f# |) I! s$ K5 C
$ d- N, r1 m# m' o: a% S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& b, ^/ P' C5 ? j4 T: R6 ?/ D mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 l9 m; X6 X' c) |6 e! v/ F
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 ?/ P; ]9 m$ o mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 I5 u0 [# D4 l/ D0 v) ? mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. V/ \& a, [" L mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ g4 D4 D4 o5 K& _1 ?3 S- P8 F
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
+ f1 |4 ]# o$ E, c mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c$ U0 @" R4 H2 v
2 z6 E0 c: Y' p; F& q
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN: _( k3 X/ Z- M" s" D
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# v$ Z( k# P1 a! T4 C
mcasp->regs->PFUNC = 0; // All MCASPs
+ I. x# t2 ?1 x0 q3 D& d4 N% n3 e mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 u- D& L) [- H- X' E4 U, K4 W, A# u
mcasp->regs->DITCTL = 0x00000000; // Not used
5 |8 S; F3 k) d/ @' X5 w mcasp->regs->DLBCTL = 0x00000000; // Not used
# O( z- a. V' y+ U( F mcasp->regs->AMUTE = 0x00000000; // Not used
3 p6 o/ H t' F1 d, y& B6 r3 r e! [: k. Z% V6 O, m- L
/* Starting sections of the McASP*/+ ?! C* n# K( M4 x1 F
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" ?9 B6 ?1 D- t0 P+ C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 V" M( |: w! a3 s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - K; f6 V; H& U- y' Z4 i. x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 Z: ~, l$ z: C4 ]' ^+ y6 U
# O- I0 Y( |0 J, i) O6 T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 q2 K( S2 A6 ]9 [* i0 x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# ?0 c. D0 Z# c/ ?, ?2 s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 y6 T' i6 T8 Y( u* H- @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- z5 _# }% Z) p" z# f/ v% Y2 B
5 o9 h8 m9 _- r9 r" v. v mcasp->regs->XSTAT = 0x0000ffff;
4 C! j( I+ o% e" n0 k; u! R mcasp->regs->RSTAT = 0x0000ffff; . E3 D' y! m f4 e/ O3 S
0 [5 ]/ H0 C, Z9 o. `* Y mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
u+ L; E% w; v* ?& G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, u$ v1 a+ q! x) Q" V$ Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 {* d1 G! B8 g, J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" c8 J b, h8 s0 d% \
0 C; q/ F0 T4 m& |: z /* Write a 0, so that no underrun occurs after releasing the state machine */7 s6 f, N% [' j: i4 T' H# S! d
mcasp->regs->XBUF5 = 0;
4 J" S# M/ c+ }8 W2 {" c- L mcasp->regs->RBUF0 = 0;
3 e6 S0 H0 ?$ [$ Y# n5 z" Y. Q' {' d X& j1 [# G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 [+ H' d- r6 ^. z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: n! A& T" O! P' T$ X4 \
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" F/ U5 B; g+ h# {+ [4 j while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 e# H1 P+ W- P' I& j0 z
+ {5 R$ a# Y$ J7 d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % d$ H/ ` H- |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) X8 f% [3 l: t+ s/ I
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( Q3 k S( `% V# I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 ~8 s/ Y- X0 ^7 _& b L. f
( T% Y# Y& _' l$ p0 n4 P+ E CSR = 0x0000;
* N5 _" a8 R. c8 i/ \3 i INTC_INTMUX1 = 0x3d;
; q; S+ ?3 Z' v) z- @+ P ISTP = (unsigned int)vectors;
- A* e! t v; F. a. t3 L( B: v9 u ICR = 0xFFF0; & _. h1 l) }8 \$ K F
IER |= 0x12; 7 F9 z2 c2 \" \# K1 Y8 S# C7 W
CSR |= 0x01; 6 |2 T+ B2 W6 n2 v% i0 O1 E. C
7 V1 L; s( H6 e5 R5 l% F! o5 @7 W) _9 ~% d' M
5 v' b m' ]& a V; G8 `
还有就是两个输入输出函数:3 M& D5 u8 `. t0 b7 c
void output_sample(Int32 out_data)
9 ?- M8 F6 i6 R3 _7 h; M4 N% {{
) J! m/ p! U* D+ b$ @. v AIC31_data.uint = out_data;
3 a$ ?8 D9 [9 }4 k7 p+ k MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 c% \1 Q8 k q4 e}
3 `+ Z; z9 |' {3 }: h1 p% s9 I, g" ]" G; I% w
Int32 input_sample(void)# K5 d& {* Y6 L4 C* {. b0 ~
{ 9 ~. A$ d) P1 a5 A' J8 }" d: E! r
AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 m9 V; {# e* U. v c8 D9 `- V return (AIC31_data.uint);
$ ~% n% G: Q! F( E! O) h}
6 B! V# e1 i0 ?9 }/ c p1 |3 ?1 b& ~4 ~! D8 {5 s0 L7 d
|
|