|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 @7 i& x% U3 e% t" @$ Mmain文件:
3 ?6 j4 H! |/ @3 f. j6 u( c5 _interrupt void interrupt4(void) ; I" t' V# X J
{
( b' a P4 l" i/ {: b( h7 |: n Uint32 sample;
) J2 J+ S8 |/ B; l% e$ I0 i; m
$ R9 H$ p: T' ? p1 P$ A* L7 \ sample = input_sample(); // read L + R samples from ADC
# k0 T; P% ~% Y1 y8 }* Z. x output_sample(sample); // write L + R samples to DAC
6 Q, y, d4 H7 s/ J* O return;5 f4 [8 ~6 \1 E L/ j
}
7 h7 G. V1 w, v# M! m2 A3 y
1 ?* ^! v5 n, _+ x& _! b( Lint main( void )
6 g* j& v3 u" R' a{
" y/ v5 I: [$ I: Z* \6 f) b/ B+ N
! g6 o. E& O7 H2 w4 C /* Initialize BSL */
g6 j$ ^% Z% z8 z& h" ] EVMC6747_init( );
5 h! g& ]. Y' j3 Q4 ^4 I /* Call evmc6747_intr function */
1 I) M) M y* L6 a+ f% @9 N aic3106_init( );+ ^' V- _5 s& Y; k2 ~# o, f4 n& d
while(1);; T, @, O |1 p5 W
}
; Z5 Z$ k) T1 {; [ b B- s# f
! [* P5 ^) t9 \! k8 Q4 B$ @3 d5 @3 s% M$ E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ K l" D! W6 D& Q: D2 o/* Initialize MCASP1 */9 o d/ y# h: u: M0 S7 s$ k
mcasp = &MCASP_MODULE_1;3 I& _- O7 _0 @! y' p2 F! N8 A# E
mcasp->regs->GBLCTL = 0; // Reset. I4 `3 q% H0 r9 H* n/ N
mcasp->regs->RGBLCTL = 0; // Reset RX
- x# }( u% T/ [, Q mcasp->regs->XGBLCTL = 0; // Reset TX: D# [& j6 ~; Z! f8 b$ u
mcasp->regs->PWRDEMU = 1; // Free-running0 @7 ]: A" B6 p6 b
// configure McASP0 receive registers
% [5 X2 D. X& E2 m* @ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ X- g& r7 V1 s2 Q+ E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: Y8 {; h! T e mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* L' g/ z3 S2 B7 j" j1 S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 A+ X. G' q( |& b& \6 \6 \, {
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% W" n" T0 g$ k" A
mcasp->regs->RTDM = 0x00000003; // Slots 0,1 R" G" n0 j5 q) R
mcasp->regs->RINTCTL = 0x00000000; // Not used5 |6 U/ x+ F) m0 Z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ A! R( t* b% F+ W! B0 Q1 l3 C5 |5 W6 q* k% j8 M4 m
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used- a- i& o3 |8 C3 y0 R* e% C
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 r" M4 V ]( q: c' k) [
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 |3 U+ H6 w- O- B& t- Y mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) s1 p R% |1 C( q' h
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ z9 r1 r/ Q% D" v- d% r- J
mcasp->regs->XTDM = 0x00000003; // Slots 0,12 C A2 Q" p5 y! R1 Q4 s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit+ I# i" A- _- ?) K( y
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 e% E/ E3 |& b3 v
$ z" _$ _( H, F' v+ V
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ V4 ]+ p' Z* l
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 E: \3 A e, o, @8 z# ?; e# _
mcasp->regs->PFUNC = 0; // All MCASPs6 ?% S: p2 x9 N( s" _
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 i: p+ ]7 |6 ? [7 `/ A& N. T5 r& L' d# I/ z7 F v
mcasp->regs->DITCTL = 0x00000000; // Not used- n$ S5 ~. E2 G! \2 e% z: o( d ?
mcasp->regs->DLBCTL = 0x00000000; // Not used+ `& }* h' L( {: X7 s% ~
mcasp->regs->AMUTE = 0x00000000; // Not used
+ v" l7 a; G0 N' [
& H9 j) x# b( w+ r/* Starting sections of the McASP*/
, e8 k _0 u) C5 c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 i0 {6 b* [: J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! u, J: d {$ o mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- d- e/ U# d3 n8 t; B6 v0 m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 A4 U6 ?" F, Q4 W
1 x5 J* t+ ^" j3 k( I# O( K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! L: n' K/ a6 h! o' K, d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. Q% A2 c4 g7 ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# C/ {! s0 V0 Z" S h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# o1 \ R* a4 a8 d1 i9 I* S% D- m6 h/ k7 i
mcasp->regs->XSTAT = 0x0000ffff;
1 n: z! H- G2 @& } mcasp->regs->RSTAT = 0x0000ffff;
7 D& I# M9 k& \/ X9 Q) f! o* i" k( z6 \+ ^. C9 x' W+ F/ G# O( L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 n& v( l/ M0 s" |1 ^* @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 K& @5 O( U# F7 _! o) J2 @% F
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% r/ H: a0 S+ P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 \6 g9 c# ~6 j: t, a2 |9 y& B' e" t7 Y! I) t! O
/* Write a 0, so that no underrun occurs after releasing the state machine */
0 \* e0 [: }" C2 r) f) ]& ` j mcasp->regs->XBUF5 = 0;: E9 d' i* [. b( p7 s
mcasp->regs->RBUF0 = 0;6 O5 P, A g3 D. _
4 B! f' k: ]1 `3 C$ g
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 }+ }, x3 |& x2 t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 [8 q& m+ C4 G8 X) H5 _( O: L! h/ y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / p* b8 q$ [ G' z8 s- I& K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% l l* j7 A5 p; g* @
5 `3 a/ \3 t: Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( a1 b1 `, n* B4 q5 D
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 O1 @# N# n3 Q' E( y$ K
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 x% d. C9 W2 B$ v) u* [9 N: z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 v" i( x5 h1 C( f2 ?
2 M0 P0 F, [2 ? g7 | CSR = 0x0000;
4 Q' r5 a" X- h' t3 P# v INTC_INTMUX1 = 0x3d;
) D+ Y7 e, u) b( @" S, n ISTP = (unsigned int)vectors;
5 M% \6 d9 ]4 h* H) u+ j6 x! F ICR = 0xFFF0;
/ ^, F5 ?. ~ f# L IER |= 0x12;
' O8 Q7 W/ l! X& V# N8 A: R CSR |= 0x01; # u0 b" h# W, s$ z: l+ K- A% j8 Z
8 F' R, X2 C( b ?4 ^5 R' j$ k# _5 t0 G' x6 u1 m) g
$ W E7 S& J5 J* X5 C还有就是两个输入输出函数:& ]+ N9 D+ l7 C; `3 ~* j
void output_sample(Int32 out_data)
" F+ T4 Y9 }* Q b9 m- ?{
9 ]4 ~$ J8 [) X4 }& [1 T6 j y2 C/ u9 M AIC31_data.uint = out_data; - W& l8 p; S8 N) f) ^
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" }' P K! }7 [: p2 s J; U6 g}# g# m$ X z) c4 L
; s+ B4 B7 @' |/ TInt32 input_sample(void)
9 R# M5 y; h) r/ a" q0 b' `{
# }: Z e( x6 P0 e) h AIC31_data.uint = MCASP1_RBUF0_32BIT;
" h: t: u* F* `) s2 z return (AIC31_data.uint);- V" z. ? e$ h0 v! g- g6 {% c
}5 h" T* w$ u+ `9 S$ _# S9 |# A' C
7 j) l$ A0 W' n/ v |
|