|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* E8 f& m3 B) ^main文件:; T" h. f; p9 V' K/ b
interrupt void interrupt4(void) 5 U' f+ u' h& p
{
- n- X! o' d6 t2 a0 r8 s7 n! I Uint32 sample;
$ Z6 U: l1 H$ _! \2 v1 {5 |
- i8 P: q3 \& N: c0 {3 K& g sample = input_sample(); // read L + R samples from ADC
! D; ?& s' ?& y) j) _; C output_sample(sample); // write L + R samples to DAC : f. D/ R; o6 m0 \) z3 }1 k# ` |
return;
7 B2 O" P2 N& C- d/ ~* q" i}' Y3 T1 x# C; p$ R
9 d4 W1 ~3 G2 M' I5 R% h# Qint main( void )
) |1 Z% i! i: e; s* X! x{
# P4 V/ k7 t- m1 |" D6 I
( e# A; b9 s3 b' W) ^ /* Initialize BSL */5 j' j* x2 n$ ~, D+ s( w( X( H
EVMC6747_init( );
6 ^5 e3 m# A% r/ `' ?. {2 l7 H; q W /* Call evmc6747_intr function */
& G$ U$ t# i: ^0 H$ v9 d aic3106_init( );
) g! S: H2 H- B# F# l: n while(1);9 F# }4 W% p3 I* T3 E- j# U0 x
}
4 q1 S0 C. B# o; y1 p7 t
% W) o; w& k) {8 M5 ?% ^2 ^# T5 F6 H* v( w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: z. k7 V* X3 }4 |
/* Initialize MCASP1 */; I N; g) u, V- ^" O
mcasp = &MCASP_MODULE_1;
4 f; U& B- l# \1 m: h6 b mcasp->regs->GBLCTL = 0; // Reset3 S5 a3 W: q, N, W% U' [
mcasp->regs->RGBLCTL = 0; // Reset RX1 @+ Z! r8 P9 P2 K3 f
mcasp->regs->XGBLCTL = 0; // Reset TX
! [1 L; _9 O/ \! v mcasp->regs->PWRDEMU = 1; // Free-running
2 d% M' J" \. y8 b" ] // configure McASP0 receive registers
* Z ]) J# J; B+ D. j ] mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 Y+ X; _+ B! C9 u mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ~8 R/ G+ f: S
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 p! D) x1 g4 n$ q8 _5 S! S; r' D. j
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* Q% U9 Z9 p3 h# A6 H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
' Z3 H; h8 l( v1 |3 Z7 E5 B* ^: F mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ g1 ]: C7 \- L$ ~
mcasp->regs->RINTCTL = 0x00000000; // Not used1 c: I+ k5 P9 K0 G% Z3 w- o
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c# T! H6 J6 {: e% [$ s" y! E6 o
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) i6 n( p2 U, D- V mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 R- \: w7 l5 N5 T. H* ^9 z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 n5 W7 f g4 J7 j5 }. |
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
Q' X7 u* m' g# |. {, q0 _ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 M! ?/ }0 P2 w2 G' X8 F! { mcasp->regs->XTDM = 0x00000003; // Slots 0,17 \1 Y/ e- E1 F; e" w# E& S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! ?. K' l2 W: {/ E4 ]& s) `$ ^ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ \# p8 N+ X. R/ A6 i! n
' G$ ^3 F6 ~' T0 W3 @6 H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* O7 ^( V) |2 F* P. e6 s- C
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT6 d0 z' y, ?0 x$ H' Z i
mcasp->regs->PFUNC = 0; // All MCASPs5 R! M! B! T9 V9 j; J
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* o" m, A5 G% E0 F* W& b- Q3 ]9 _# f w% ]$ d& K/ I
mcasp->regs->DITCTL = 0x00000000; // Not used
$ i: d+ e" h+ ]( i, |$ G) k/ i4 Q mcasp->regs->DLBCTL = 0x00000000; // Not used
. z$ L# [0 u% E3 J5 u" K) \+ k! } mcasp->regs->AMUTE = 0x00000000; // Not used) m4 g) J( b3 Z: t2 v8 P& l4 }
" c N0 S" {# e1 R) n/ A q
/* Starting sections of the McASP*/: Y+ g5 r; H- m7 E1 N3 \
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' ~+ m6 B) y& o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & |! [8 U" k4 i# }+ h
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . L. b1 D0 U3 u( [, ?- C* z6 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) Y' l) o* w( i4 g; E
( h0 S' ?; ]! ~. d# C: {' ^6 N9 @. V mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& y( c* K' W. K/ R) B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 g3 A$ i0 _; j. m# \# u [ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ^, s( r( y$ K; W. t6 m0 Y( g3 G* j, o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, ^: v8 `' _* j) u# Q- J
2 e" l+ P5 ?+ X) r mcasp->regs->XSTAT = 0x0000ffff; 5 C m( ?2 _! }, L
mcasp->regs->RSTAT = 0x0000ffff; 7 V( X1 v: \7 h
) Z4 N7 Y( F6 v# e mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Q: a" T' z) s4 i" k
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 W0 B) e* |% d v6 i8 m- d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 y* R! {1 E" v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 d5 C5 [/ i* H/ ^6 I" w1 K% [/ q% T5 o2 l/ e4 M0 w" p" E( P
/* Write a 0, so that no underrun occurs after releasing the state machine */3 R3 n8 `' M- k( @1 t& k
mcasp->regs->XBUF5 = 0;
0 q) o: ]/ S, ^1 J, w mcasp->regs->RBUF0 = 0;5 J: ~) V$ c; N
0 J$ |! d$ v$ [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 1 [7 x. {$ Z: s8 I, j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& R$ o* ~( A" @8 E
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Z4 ?* }, l, J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 V! z4 r$ {. L; K# Y, s: c, \5 d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 Y: A" U3 j+ T X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- W3 w, N+ f0 _: U$ k
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 f, N3 i4 r! ], |; D- G" D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ L! v. c6 Z1 n: x v: Z
* _; h' d. Y1 h- o) ~ v* V8 w
CSR = 0x0000;
1 D9 `3 ~& R# e( P INTC_INTMUX1 = 0x3d;
0 B+ F) ~* e. ]) P2 E& K ISTP = (unsigned int)vectors;
$ C" P, B9 @' t; t# r ICR = 0xFFF0; ) G( E& C+ m. W- C
IER |= 0x12;
( Y. J0 Y0 ^5 z CSR |= 0x01;
( p* [( p; P5 A3 r( n
+ B; k) j/ R8 V, h# h% b' z# d
/ j) @( g- e6 U8 ^+ | e* C6 M$ ~
, W2 |1 J6 D; m* y+ X2 ] ~. l# J还有就是两个输入输出函数:: U3 q% B/ `. u, g1 j# q
void output_sample(Int32 out_data)
/ N1 L' Q$ Q8 q7 [2 V% H& W{+ x. V0 b7 \. `7 U' R
AIC31_data.uint = out_data; 8 B# S- D) B [) D
MCASP1_XBUF5_32BIT = AIC31_data.uint;6 O' s* ? L. S9 q/ J" u% Y, {# B% {
}5 r5 }; Z, m$ O+ S$ o, \5 ^
/ N6 {* B) ~5 A: N* S. p
Int32 input_sample(void): y. Y* {" w( N: W |% D
{
6 q% s4 o0 i+ [ AIC31_data.uint = MCASP1_RBUF0_32BIT;" X5 {; b/ d1 M a+ V
return (AIC31_data.uint);( W0 P9 F% D- F l) n
}
7 e: h: g* g) A! N7 l6 Q7 L& G) u, {! k* Z4 S% \
|
|