|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, U# L- c7 X1 }main文件:" b. V- l p' p$ D
interrupt void interrupt4(void)
) a7 n: w) i5 K" X{6 p) b# J7 K: W x
Uint32 sample;
+ f. |2 b6 R9 ?' x# g$ s! f5 P# U: m: n5 m: x2 g7 i
sample = input_sample(); // read L + R samples from ADC
: \+ ^) b3 u0 ~- R/ |2 s output_sample(sample); // write L + R samples to DAC 6 x3 w; ~- ^- M) c* _( q; ]
return;! G, O, X2 T) F5 E* G4 _
}! }4 T: ?2 b$ W7 K
) D7 a) |% u" s3 aint main( void )
0 v, l3 ~0 E# M" o( J2 f& o0 H" M{
+ e, M, Z9 }, p3 V n+ @% O$ \; O8 V9 h0 K7 S2 d8 Q+ Z/ D' p
/* Initialize BSL */
0 L; n+ \; }6 y EVMC6747_init( );
?! A: {- ` U3 [ /* Call evmc6747_intr function */' Q8 A/ ^! |+ n/ C8 v
aic3106_init( );
, _: _. V5 z6 ?$ Q+ A: k2 J$ y while(1);
7 }8 d! s$ A- u# x, C6 u' \}
$ \! `4 s. s) S' `* d6 o9 ^
- B0 y) G8 ?9 p+ G# F6 ~9 h/ d
1 _ F% y; f$ \$ Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 L; H |( g5 ~% h# O0 C! d/* Initialize MCASP1 */" {( b4 @6 |" ~' {, i T
mcasp = &MCASP_MODULE_1;: X4 N5 @3 u/ b$ m5 U* {. L. U; d
mcasp->regs->GBLCTL = 0; // Reset! M3 g6 i2 h9 r% @, U# `
mcasp->regs->RGBLCTL = 0; // Reset RX
" S6 v9 X' I* c) u! g mcasp->regs->XGBLCTL = 0; // Reset TX
6 z+ _3 H9 R5 l mcasp->regs->PWRDEMU = 1; // Free-running
. }, z3 x1 T' x. Z k8 o // configure McASP0 receive registers, p M1 \, k" k) f4 @( N" e
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 y A0 h2 ^' z) L5 Y. D- \9 h/ g mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' N4 ?* D; s7 ]/ Q, W+ }% r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 ~) ?* ^, c9 Z, g# x mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)3 |6 O: R1 U- ~4 [' ]# H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): J. O, b* W; f& B0 p* a$ l
mcasp->regs->RTDM = 0x00000003; // Slots 0,16 Z, H& Z! _( v" ]
mcasp->regs->RINTCTL = 0x00000000; // Not used, L$ x( W& H4 Q- k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 e7 C2 C1 A9 n% }! Y4 o' F4 h8 g4 }( `) n- w- o% q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ Y: @ V0 s3 o2 k; u% I1 g! ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 e8 P5 A1 u0 @6 V+ l& }3 ] mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 r! T' ]/ [# @! L$ ?* h) {; Q9 J
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 P. N2 q/ B. a3 h/ L( t$ p" r
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) P# f9 f0 k3 t& }0 j( }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 w2 g9 S! Q( a9 S/ u8 y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
C7 t, _! A8 j7 s; L# W- P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 {- g( ]2 |8 g1 e: ]
" d! q' M/ s5 a+ H) _) ] mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 E& ?- [& u0 m% @+ q% O$ I mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 d; I; m7 ^% k& [2 @! V: E mcasp->regs->PFUNC = 0; // All MCASPs
0 d1 A3 {& }5 r7 e# l0 x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1 w7 c" o" a5 n+ B l& j4 ]
/ J4 _8 ~' h5 z+ X+ u X
mcasp->regs->DITCTL = 0x00000000; // Not used
, o2 _ @) s* Q: q' u mcasp->regs->DLBCTL = 0x00000000; // Not used
: {% u# R5 ?! ^# b4 p# P4 l! Y mcasp->regs->AMUTE = 0x00000000; // Not used
% A) Z8 b. y9 r' \- m0 R' r2 i ^, N3 l) [9 m7 {7 a
/* Starting sections of the McASP*/
4 f/ k) R& e# F" V( D mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 D$ R8 e' Z$ K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 7 U: n& v5 ]' n
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 i: W) X: \( Z$ T4 A1 |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 o) q4 [8 K* ^( g, N
8 c- V9 U. x% m
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; % N# d- z$ t, D: G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ X' j. ^& ]9 X6 U' s; e mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " N L9 U6 Z7 {! M; o- Q2 S3 \" O
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
}- ~0 Q/ b3 f, U9 }3 b0 c: t c; |8 Y# e
mcasp->regs->XSTAT = 0x0000ffff;
: n' E+ I) V; E# x$ |5 @6 ~$ Y* Z mcasp->regs->RSTAT = 0x0000ffff; ) Q0 Y; a, L$ A% N
# E+ K& C) d L ~% m
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 ?: z' q* i: u; ]3 ]+ T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" R: C6 Z5 I: r, u7 a mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* q! m8 s" U. ]: g; r0 j* m$ M$ [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 w: p( T. v, l
1 M) d+ s: l4 I$ m /* Write a 0, so that no underrun occurs after releasing the state machine */ }8 @( N: v- O& a6 _& u( o
mcasp->regs->XBUF5 = 0;
. p6 c; e% [1 \: m W7 ^) D mcasp->regs->RBUF0 = 0;+ m! G& ^4 ?* M, `7 u: A, M/ m
& [3 v, b9 W6 P* J" v, W
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 k8 ^5 }6 H! u8 h1 c/ \+ B& v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 I6 Y; b9 N; s4 r' e mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & F- A9 P, V+ O4 r0 u! H+ Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 I2 b! S, E- J- w% c6 q; H) W
' M# e( h" V( |6 q. w$ u6 w+ J
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 P) i. A+ k! U$ C, ?* j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% V3 V7 v G2 [0 o' _1 Y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ k3 h" l8 M: i3 R" D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) Y t8 G# J, D1 V- |
' i3 i3 G: C& |) k9 | M: r3 E6 Z
CSR = 0x0000;+ [" b* s$ I( Z! l
INTC_INTMUX1 = 0x3d;
; x" ?: R1 h; L& Z ISTP = (unsigned int)vectors;
) [1 p, `1 ?: }' \1 h ICR = 0xFFF0; & Q, f4 }0 i* n7 E3 |+ d0 [
IER |= 0x12;
) x$ U' R# U0 R4 D% w CSR |= 0x01; 5 L- I, _: d2 n
* G0 M/ t$ d1 b' N8 x4 p
6 X, u9 c; J) G% U1 x& Q
9 V' Y( e5 ]1 t0 T还有就是两个输入输出函数:
5 l4 Y- `' o/ ~- ?void output_sample(Int32 out_data)
- I A9 b3 f3 x. s/ ^; Z: D, s{
" ]+ X+ }( @9 V AIC31_data.uint = out_data;
4 _4 m! E' K& G MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 ?- V" ?( f! o; {9 r4 s8 J- m5 Z}7 Z; N+ T) d# e9 Y; E: T2 _
, H. E% J1 k2 T, o2 B$ N$ X& H/ ~
Int32 input_sample(void)
0 f |" j$ {* j% e. C# R: A{
) g5 l# D/ {& u, {: j+ f4 @' _ AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 O# B/ q# C0 D( f: Q) ~' C return (AIC31_data.uint);
* o/ A' `0 ?$ F; W}
/ T r% h9 a2 O8 |$ w
! J1 [( c! N/ d |
|