|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 ]- x+ z7 _; A- H: m" q
main文件:
* A3 b+ d- V, Dinterrupt void interrupt4(void) ! M% o3 f; A& ? f# e* y" p
{
9 L1 k5 o' S6 }4 X1 t/ r Uint32 sample;
; i" ^# s$ X; d
4 d( Y$ r+ G7 c5 S/ X sample = input_sample(); // read L + R samples from ADC
8 {. [+ H7 l4 e' r# J+ {7 @ output_sample(sample); // write L + R samples to DAC / O& J* {5 f# V
return;# [" {& I, M& h5 P+ E7 u9 t; `
}3 U% ^7 \$ a6 T. a4 n2 U
% ^; V# P3 B9 ~/ j( D7 e. H$ I
int main( void )- j# V- `% I H1 \( g# k7 i
{4 h* J7 c! v4 l/ `6 }2 V- J5 _
6 O* w, g- G: n7 C, y! S. l+ m) K /* Initialize BSL */4 K U" f, [' i& ]2 i$ i
EVMC6747_init( );
4 t2 s1 c0 i# w# [- p% a /* Call evmc6747_intr function */
, W5 t. P7 m9 j9 M aic3106_init( );
$ D3 \( C% S7 o- ^( ] while(1);+ _+ A3 l2 f8 E4 ]8 t" ~" M' `" A, {
}
, t6 D4 k, H& v% ]+ a* v
5 j- g8 B/ S9 m! a; D6 G" H" P- M; G3 f7 F1 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# a7 m. H5 S$ }; v3 f6 r* U
/* Initialize MCASP1 */' `1 @4 _; D* j( Z4 k
mcasp = &MCASP_MODULE_1;
4 A/ `7 d& J9 S; ~ mcasp->regs->GBLCTL = 0; // Reset
- l) t! Z6 F5 z mcasp->regs->RGBLCTL = 0; // Reset RX0 G2 s; z+ j2 p" c, D! d
mcasp->regs->XGBLCTL = 0; // Reset TX5 l3 J/ Z8 @3 m. s/ h' K
mcasp->regs->PWRDEMU = 1; // Free-running4 L+ t) I2 R; D; w9 E# k6 y0 S% G
// configure McASP0 receive registers
% z @% t3 }. R; k mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 R# f0 l+ c, i1 Y' ]% K7 }9 W- P, p mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 ?3 N p. V! q, d3 i
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 N$ m- f/ p |$ _0 n5 p
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 m. x: F: Q2 Y1 Q8 G
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% K% U5 M7 ?) F( c6 \
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 T# p' g4 i3 g t" i6 g' N6 L7 o
mcasp->regs->RINTCTL = 0x00000000; // Not used" y' E( F) O+ x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( J: d( c; F/ F2 F/ X5 z& G
6 B) M* C7 X% h' L! {. q mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ Z9 [2 x( a6 U* h& c- r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' W7 F1 E+ a9 S& I. ^
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word G: S# g0 \6 W2 D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: U$ }8 C, k: V* A mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ y$ K5 |% k! i
mcasp->regs->XTDM = 0x00000003; // Slots 0,17 a2 j/ r# w- w/ R1 y: c: r# |$ d
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& O0 i% P) m3 e" B
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: h* N; ~" p# \8 E) i+ l' S
( Y$ ]! a' W3 h6 [; v
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
% [: W2 v& V9 H mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; i+ Z$ w/ c& I8 p' X" k- J mcasp->regs->PFUNC = 0; // All MCASPs( V5 G: y: n j9 e* P# {; j) m
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# Z, L6 s2 n$ c! t8 {; d2 ^5 F4 Q% {& p) X2 p5 l3 r
mcasp->regs->DITCTL = 0x00000000; // Not used/ y, \4 J0 g! o+ _" A5 d6 l4 w- S4 k
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 S( H2 b& G* d4 k7 v2 e mcasp->regs->AMUTE = 0x00000000; // Not used
9 L1 o- G t/ V' [" V. ~* |: R+ `" v$ ?, [
/* Starting sections of the McASP*/2 I" \& ^! \: H0 @% N% h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 N: K7 v" P0 `" L/ S; ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & W( I! g; q3 J2 v* k
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! u) E& ~# I0 t' W" D
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 v3 d. _7 X5 ~
4 N; L7 r! g* a3 r. p mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* j5 `, w; X0 k4 K) ~/ _% R# U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" l1 m: D% r! G/ h* E- y7 T mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; M6 b8 y+ D( X; l! W0 u" e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: `/ }6 X# h1 V8 {
* q# ^7 h2 ~+ C, I mcasp->regs->XSTAT = 0x0000ffff; ! r; u& y; d$ H' }2 B' m3 ]; C
mcasp->regs->RSTAT = 0x0000ffff; 6 X+ B4 M9 A- t3 [( {
: V1 F. e4 _' q5 ?! } H mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* V+ C* d; {7 a7 }# k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; f6 f; B0 w2 k' T( S. e mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 `) |8 @& f2 x" g0 r, t$ w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ F9 m8 Q8 I- k& X5 L
3 i) A2 S$ Q4 G$ i4 D1 }, L. R. p: ^ /* Write a 0, so that no underrun occurs after releasing the state machine */1 G! V1 s+ k' a& b) k
mcasp->regs->XBUF5 = 0;: d: C* d, R X* ?8 ~; }
mcasp->regs->RBUF0 = 0;1 f- x3 z+ R2 W: s' `7 F( h* v
6 e6 l- X0 {8 U0 t# g% o5 m5 L
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' O/ j- T, `5 Q, m0 U% C6 f h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& g j% }; m& C" C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; v0 U5 i) d, P- ]7 r5 M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 b. o) V4 }. @5 _# U) K1 O; Q2 R7 W/ `! Z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 _: I% H9 W, q- y5 Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! t$ b4 V) f3 R+ E% O+ [& u! k" ]
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- x' t5 x4 P$ c6 U. [5 N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* x+ @+ c; v1 V. `8 [1 k+ n
7 H7 R7 C0 U: s2 s3 T8 ^ CSR = 0x0000;
! n) j& M) ]: Q7 v INTC_INTMUX1 = 0x3d;
1 n( Q* n$ l3 T7 e) }2 a ISTP = (unsigned int)vectors;
, Z* p2 c- Z. E$ {3 ~ ICR = 0xFFF0; : J! f* }$ ~$ |
IER |= 0x12;
, P( n( @7 W7 O7 X7 D% ]% z CSR |= 0x01; 0 c; W$ i- X4 C a0 S3 q
8 ^. p* i4 P4 Q. u; @. c5 a
8 S2 I, E: f# x; j9 N( W7 H
9 c1 m' f% }2 n还有就是两个输入输出函数:5 P7 X0 f# q9 H5 ?; K% H
void output_sample(Int32 out_data)
1 x( N" y9 v' t{
( c, w. a9 O3 Q( ~ AIC31_data.uint = out_data;
; L6 ]* H- ?2 t, q6 G7 V' L MCASP1_XBUF5_32BIT = AIC31_data.uint;3 n" m1 |; y! i0 B+ |
}4 n0 d3 q1 b! D" P
# q1 k3 i& H" ~6 P) S9 O% dInt32 input_sample(void)7 |0 c5 ~. _+ J6 a5 H- i) Y
{
# U4 O# j+ c! `# w4 i AIC31_data.uint = MCASP1_RBUF0_32BIT;: ]; z) M' e$ ^. e8 b
return (AIC31_data.uint);8 m7 f5 P% N2 A& A1 I0 D
}" K# U& R0 M+ i. t, L
( N6 l2 ]* C9 w/ [) e3 U' ~
|
|