|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% ^" S0 }# I' [
main文件:) ?! L# p$ O* A' q* r) M( r1 W
interrupt void interrupt4(void) " Q" Y. \2 H* s
{
; s1 o {6 L+ v Uint32 sample;( \/ Y9 E) L+ ^9 u- m- H& v
; x) e3 t0 w/ A7 ~/ |- F
sample = input_sample(); // read L + R samples from ADC
7 l* J; G& R' S8 h; Z output_sample(sample); // write L + R samples to DAC
2 ]8 \9 c7 M6 Z return;0 T. N3 f& N. c. }# E) q
}
! E( E& d0 C( U: N+ G W5 L6 s; a1 O5 P. N
int main( void )
1 q7 ~+ F2 N7 D{- J" |# [0 i( f; p3 o F
& M: Z; w7 `) u# J /* Initialize BSL */- [4 f; p9 o* S3 P. r2 f
EVMC6747_init( );" q+ n# l4 H' D9 ~1 X- l. _% M
/* Call evmc6747_intr function */
2 K4 ^, l% b8 K1 Z6 x& `& Z" z- N aic3106_init( );! z( e9 M; W& c
while(1);' {: @1 i0 {5 l3 ~) b- w
}' ~1 U5 `( C ?( T4 k- h
+ H" H/ u7 R% j) [( _0 _7 E6 x3 H' w+ ~: S2 j6 w7 `6 [- W0 s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 A, F2 j+ p5 X! R. ^
/* Initialize MCASP1 */; ?7 z+ Y# q0 \
mcasp = &MCASP_MODULE_1;5 w% c% _, P5 G; @* j9 B. S
mcasp->regs->GBLCTL = 0; // Reset0 Z3 m. C7 m3 J% L$ n1 c" }) V
mcasp->regs->RGBLCTL = 0; // Reset RX5 I: f- r8 |: X8 T+ g& H
mcasp->regs->XGBLCTL = 0; // Reset TX I9 b1 Y" q- h* _
mcasp->regs->PWRDEMU = 1; // Free-running
; O/ z, z2 h `9 I. V7 r% A5 P8 d // configure McASP0 receive registers
' @( [( p5 A4 v, g/ a' @+ V mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
4 U4 n6 Y4 M7 K4 H( J5 [ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) w# u' {+ k0 H! O4 S- U
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 {/ ^; D1 p: G+ K" o2 b+ y
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ A. M1 X6 h2 }" g* G0 D7 `
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)8 h# T6 g" s# ]; J. S4 G. m. l
mcasp->regs->RTDM = 0x00000003; // Slots 0,1- ?: R3 b4 g/ s7 l( |! `
mcasp->regs->RINTCTL = 0x00000000; // Not used! D+ \& q8 o. Q0 _0 n$ v2 ^
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 H/ I0 @/ P( ?9 k' i2 U
# x+ d) J0 \: d# P# i$ \0 Q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ j9 l. `2 t5 D- y4 g: u$ l9 a/ i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 B# z, x/ w- \2 y! p* ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# |$ l' j/ ]( ]' i. ~
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ e3 ?# p: c' s. p) u mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK, V, X6 p) F! Q+ C
mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ e' R9 v5 R6 a/ T) l- {( M9 b
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
C- B, v4 t# `! {8 @ I5 \4 C mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ `( V. ]8 b1 ^7 z a$ w2 Y
: { S: y# n) W2 x mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
) V. s3 f) @8 b. q+ n# k+ {, B mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
7 w, w" u( @1 N: c8 E mcasp->regs->PFUNC = 0; // All MCASPs
4 m7 D8 S6 b8 q' L0 H mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! { \6 g' t S+ v9 |) p
X/ w ?$ K, d4 Y mcasp->regs->DITCTL = 0x00000000; // Not used' [" w# c+ j3 x/ Z4 W, X0 t
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 b2 h L0 X1 t) T+ V mcasp->regs->AMUTE = 0x00000000; // Not used
0 B" P" m. C& U" y+ B$ ^/ L% S/ \9 z3 x6 R3 l' u9 k
/* Starting sections of the McASP*/ U8 w+ }$ o, V0 t; P- T
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 J, a5 S+ y) N' C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; ]: ^% O5 L5 \0 B+ w+ V
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 l2 j- s) p1 @4 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 B3 A8 x1 y% C) b
& [( }! \7 T, m2 a; x! k( g. ^ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 f0 X; z: \# q4 A$ p9 ^0 t" y; o. V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; o; i+ ?) R. R8 C) j3 ^
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& K, U' `# ]3 J6 h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ e N" h) U& h" ?/ {( Y. _
, A3 b/ {# d" {5 \9 e$ k mcasp->regs->XSTAT = 0x0000ffff;
' K2 {! T: t" U# F" O2 T# e& U mcasp->regs->RSTAT = 0x0000ffff; 5 E4 `9 E! T9 w* X. h% d
1 `5 e* x; ]0 d) x
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 u& J9 L* y6 M4 O% d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ E, u$ e! G1 ?5 S' k. H* R H
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& _* b1 R: _# p+ W. D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 i$ x1 O2 ^" z" Q
E# M/ x7 D4 ~5 O2 @# N i /* Write a 0, so that no underrun occurs after releasing the state machine */
' D! I2 C& o/ [1 l+ \$ @7 ~. W4 U0 e mcasp->regs->XBUF5 = 0;
- O5 b% b+ l7 ?% P mcasp->regs->RBUF0 = 0;, o N8 n$ k$ Y. \5 A
; @7 V% M5 L4 n# Y; ~
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + n Q8 D. _0 d& L5 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# d, p7 y! c% o) S% u N# z) W- X
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ O7 [( E9 y: N8 u3 T1 x while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ h9 w2 ]) v: O! ^ _; U! ] d
0 y' r0 C, ]5 c E' \+ h ?2 Q! A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) w' d3 y- C' O S6 O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON ); m; N4 u2 j$ L- s$ e$ y
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 v. X( P& i, ~) f# g3 j/ F8 n K/ M9 {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 o/ _& c* |$ @: Y9 g+ x5 R0 e* y) l( b7 {- ?0 t
CSR = 0x0000;, h4 k0 r% i6 P! s% r+ q
INTC_INTMUX1 = 0x3d;
8 [" y1 _: T% E ISTP = (unsigned int)vectors;/ K+ H" g5 c8 b6 G, E, M4 I3 z
ICR = 0xFFF0;
! `! m3 t, w, a2 k3 }( m6 b IER |= 0x12; 1 [" g/ R1 f' N6 U& O! S
CSR |= 0x01; 9 U# p' x3 y6 z4 a' \
8 A N+ z6 l1 D* `1 R0 ]/ p
4 G) ^8 o' T% B1 S4 Q, V6 t0 e6 J( t( @' I/ _+ u+ X
还有就是两个输入输出函数:
9 f" t) u" Q+ q5 _6 ~4 Ivoid output_sample(Int32 out_data)& l( \2 P5 ?# Q3 U+ g) E+ x
{6 w, ~4 M2 ~5 I
AIC31_data.uint = out_data; 3 z' @9 \" P( n) Z! \0 w' i
MCASP1_XBUF5_32BIT = AIC31_data.uint;. b, Z% B/ T& }7 z6 X5 m' J3 H* e
}3 ^5 A" k( w# g. ]3 o5 \3 y# i: ^
; w! T A* I2 e6 A) }2 DInt32 input_sample(void)* ?; I& L' r* s% y: S" K; J
{
d/ D5 A! T1 |$ C& S5 _, M AIC31_data.uint = MCASP1_RBUF0_32BIT;
& Z r) p, g# Q+ k return (AIC31_data.uint);, D0 b8 K0 k0 s1 E1 a9 C+ y! o* _( ^
}
) Z5 W0 W6 Y0 q- z) u. s7 j: X2 l2 C% C2 X+ p% d, P
|
|