|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: d- h; u _) l& G/ l# xmain文件:- ^4 G& @4 N" Z6 q' X+ z
interrupt void interrupt4(void) $ K) O7 v- K7 B$ H* M7 X1 W) Z2 m
{6 I5 M c. ~7 O+ ?- R( y( o
Uint32 sample;
$ ]4 P6 H' Z* q& I
+ g% O7 O( S0 p% [& A% f# ` sample = input_sample(); // read L + R samples from ADC- p/ \7 T1 ^* D9 Q7 D% a
output_sample(sample); // write L + R samples to DAC
4 O" ^, b% S3 Q return;. C; D2 {/ U) H6 n) q# X; Q
}& P! n4 \' e. u& }/ \+ x- r; P
. a& O' j6 [% k
int main( void )5 I! E1 ]' y! Y/ r& W% \
{! ^/ U3 w$ a2 U" I+ F; x1 X
, n% b) V6 X# K5 A& \ /* Initialize BSL */. ?% ^* h* s5 H* p* w4 T+ p; t9 l
EVMC6747_init( );3 G: D/ I: i: m/ ^9 G
/* Call evmc6747_intr function */
9 t f7 {# m) c9 u- W1 w aic3106_init( );( c3 D& M: `: d: O( J# C; G3 _' ^1 ]
while(1);- m1 a. H8 W% ~' Z$ ]
}) `- a* a7 Q7 [! Y# h9 I
5 h, t* V9 I5 f% @% N
* u( u, r `7 vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题8 u9 w3 f8 Q$ J/ F) w3 L# a7 ~: Z
/* Initialize MCASP1 */5 y& c/ s( O6 c5 i9 c7 ^% Y# r
mcasp = &MCASP_MODULE_1;" f) i2 `# K, ^# _$ p
mcasp->regs->GBLCTL = 0; // Reset
, x$ [: K+ i& t' v) s mcasp->regs->RGBLCTL = 0; // Reset RX
2 B. a" J1 s0 E. D" ? mcasp->regs->XGBLCTL = 0; // Reset TX7 X- M/ I. y# Q, b
mcasp->regs->PWRDEMU = 1; // Free-running$ N2 G; j j- B. C# [
// configure McASP0 receive registers
9 E( e! ]$ I0 m+ x mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% l4 a3 |6 o( ~: C$ o
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( ^* k+ O. N: i. Q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 P3 e8 b0 \5 F& m0 E) @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ {4 R( p% V& r* u2 r2 n% B, _9 M7 Q: t
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 D! I5 Y2 f; h$ V# C5 ~: A o2 _ mcasp->regs->RTDM = 0x00000003; // Slots 0,1) Z. M5 D* t& O* K8 k1 v; r
mcasp->regs->RINTCTL = 0x00000000; // Not used9 }' B" J# ~6 q6 }" n$ W
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! d; f+ {3 G7 ^7 ^
" q% \% F+ u/ E% p* q% D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
2 v) b1 W% i' @/ i mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 A0 O0 N% u w6 |
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& F& q; P( H+ [, \! f; D+ n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 h/ h# f- s- }; C' K mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- D* h. {' C& ?% P5 u
mcasp->regs->XTDM = 0x00000003; // Slots 0,15 D: C( C, c3 C& W( h% g3 w A
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 F; V7 F& t1 u4 P4 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- g0 m( X: i- B& B6 L
3 \% W6 Y% C; ^2 j, ]$ M- f* q- g& a mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
q" ]* d, i8 Z% f mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 Q. j/ T/ g' {. o mcasp->regs->PFUNC = 0; // All MCASPs& [% }$ E S0 i' j3 d
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& Y, k& ^' D A ?- _4 @
: T0 f9 U Q9 N) }
mcasp->regs->DITCTL = 0x00000000; // Not used& G" I0 E# v6 `1 ^8 V
mcasp->regs->DLBCTL = 0x00000000; // Not used
6 f4 p' r. A- d, S( \1 w1 e mcasp->regs->AMUTE = 0x00000000; // Not used% d3 Y! R6 ?/ e0 A. H+ c) C' i! Q7 s
$ y9 f: v) {5 ?8 o5 h; \, V3 F/* Starting sections of the McASP*/( z, z7 X& K1 S9 w
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% K1 s. w( q2 W# R2 z/ N# ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , ^4 }! S, e2 h3 f* }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / i2 G7 ? B+ D6 w# C6 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) }0 R9 n4 `& }& j8 l& |4 K( d
; @; J' g0 z! y- F7 M* f+ c% R% V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' L! |' w: X/ x, g B! i( l; } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 p. ]8 h F# ?$ X; v4 M5 U mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# v1 h$ q5 I' R4 v. z/ C' O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! U. G# a; j" m6 S, P
6 }0 p- t9 M3 X# L1 X
mcasp->regs->XSTAT = 0x0000ffff;
7 G" Y7 E+ [, ] mcasp->regs->RSTAT = 0x0000ffff;
+ m. _$ P i/ l. E4 e3 D6 C. \7 p0 G2 s) K: `; |$ p6 z, ~1 B4 I t
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- L) a. x! S& N' ~; s6 S, w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 h- ~' I E: \. z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # K" u# J1 {# ^6 W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 s! Y! E# ^4 X( G
R, N9 C% H( N* v h /* Write a 0, so that no underrun occurs after releasing the state machine */2 ?2 Y6 H1 B$ E' B6 m
mcasp->regs->XBUF5 = 0;
: A( M% ]' s" S4 [* Y6 M mcasp->regs->RBUF0 = 0;% D" l# y |* t" U$ f) |, B
, ~7 e6 f' @' ] mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 F. Z! o* c5 B# x! u# H- D8 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& C, r6 o" _+ I& y, t# s2 M
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 Z' a+ ]! K* M' b% p0 B while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 y+ s! W1 S Z h( f9 E, D
+ |) l1 B5 p$ Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 N$ a) p( X2 T- k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 R, l- B- E* s) U. {8 u) d2 i
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 m. a S# q1 N: [$ t2 M( g# q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* t! n" t M5 s% B- _: c& q
8 ~1 [- c! l F. v7 J) P3 A) ?5 x
CSR = 0x0000;
: L$ ^3 ?1 C: T' X) G INTC_INTMUX1 = 0x3d;, A: ~: @6 _, n8 z
ISTP = (unsigned int)vectors;# n1 g6 Y3 s5 j! E" A
ICR = 0xFFF0; ; d6 k6 Q' X& c$ a# u) t
IER |= 0x12;
# D! A4 o+ g( g1 a. F2 C CSR |= 0x01;
$ Y; l% C/ m$ E' F! S) f2 U8 X' B- a0 y& K0 J( C; e
& R1 n! r4 x0 O( ^8 \" F/ m
( [. z) `5 G% X+ g3 n1 q; I, b/ U
还有就是两个输入输出函数:
' Z9 C6 n, R: Y$ J kvoid output_sample(Int32 out_data)& B2 ]! L; v+ i( J+ b7 A
{5 ]8 k( }' q9 g% i2 m: `
AIC31_data.uint = out_data;
$ M& ~9 J" o# T) u. b MCASP1_XBUF5_32BIT = AIC31_data.uint;
- N# P& P: w4 | Q) J}
5 s) W/ C4 r; N6 K9 `3 S* d$ W2 C( H3 a4 R$ r& v
Int32 input_sample(void)
. a- h; f" Z w9 g9 [- i{
- t- o9 Q8 ~& I9 l AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 r* H/ { L/ [& W4 o! V! @ return (AIC31_data.uint);
7 @" t* `2 F" r0 I' ^9 p}+ W) h9 y$ N! c: L# Q4 W! A
5 K+ ^0 R9 O! a1 t1 Y$ ~* f |
|