|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 a6 n6 E/ [/ @: v$ _" d
main文件:
) L9 k- h7 ~+ v/ Pinterrupt void interrupt4(void) T7 |$ E9 e# @9 U* W
{ a2 p3 L0 `, _, R9 N5 l8 J
Uint32 sample;
# b" [5 ]2 x0 F7 Q4 E
& E" l0 P$ o4 _; L, I y sample = input_sample(); // read L + R samples from ADC9 W# B# g' y! c9 f: t
output_sample(sample); // write L + R samples to DAC # ?/ d3 m& U$ h/ [0 y
return;- T1 M" k" N& p. z3 y
}
B: l$ h* p! P. n. I+ s
5 y8 j$ R2 o: |int main( void )
V! B, @8 \9 `5 g% v* B0 D{4 v- `: g3 Q# ~; D
+ k5 Y8 t! _2 r9 B9 S /* Initialize BSL */
) o$ R3 _, Z' L, n EVMC6747_init( );$ |4 ]% D1 @3 \+ Q4 g5 v: _& E
/* Call evmc6747_intr function */
# z7 y. T: s" N aic3106_init( );
. w1 W7 i* i8 B- s H( C while(1);
+ A2 u. t! Y1 \' o# R/ e* L}; z: a% z, o2 [# J$ z
8 Z4 e0 g( ]: [/ i E6 d# @
5 T! ?+ k: h& k/ ^% s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- B( [( Y) H8 N, @6 D( V/* Initialize MCASP1 */
: o' K( \3 y9 T mcasp = &MCASP_MODULE_1;+ Y) d8 x+ B1 d5 e3 B) C
mcasp->regs->GBLCTL = 0; // Reset" i4 _1 {8 u0 i; O4 B# e; X' S
mcasp->regs->RGBLCTL = 0; // Reset RX! c9 h7 l1 w/ @' k$ a3 e2 p8 T, t
mcasp->regs->XGBLCTL = 0; // Reset TX
% d. a3 `# Q7 S' s4 ]8 l. C$ w mcasp->regs->PWRDEMU = 1; // Free-running
9 y7 k. i, i8 U$ C // configure McASP0 receive registers: L6 i/ s) G. c x0 j! U2 S
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 M( N, t+ I7 m0 h9 U' i mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 J" }- A. F. u+ W mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 z. m1 z! Z7 O mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ u8 q( i8 H$ n0 B2 q% Y- T' s mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)6 O) [2 v7 s! Y3 m
mcasp->regs->RTDM = 0x00000003; // Slots 0,18 R! {5 J( M" x5 b! N* p9 \
mcasp->regs->RINTCTL = 0x00000000; // Not used: T5 W9 `5 C- B
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 v1 ]/ K0 N# _2 o2 W2 e- G
7 [ |0 B6 L/ d, I* n1 J# H! K mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ N- e& ]8 `2 f( Q. T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# N# g$ |0 B1 D: P
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 V' i% k' o3 [+ |
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 [! R) Q# w! {0 r' @
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. [$ e+ G) ^) U, E H# o
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 @. M, O2 q, Z& ]& c K mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" \+ \3 L3 v6 s k8 `' i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) M7 B K$ v6 b% A5 k
- O$ x, b0 n( i7 ` mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ ]3 s/ _8 h, X+ x A" d
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# t$ g) d- ?- A( ? mcasp->regs->PFUNC = 0; // All MCASPs
8 t: i) L- @7 ]5 l- f( J mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 O! } q& n6 W' D) e
8 t, y( k9 g5 t7 q$ j. @ mcasp->regs->DITCTL = 0x00000000; // Not used# U% P, k- A" y8 Z
mcasp->regs->DLBCTL = 0x00000000; // Not used( `- T E3 b7 }* N: v- I7 C' t
mcasp->regs->AMUTE = 0x00000000; // Not used
1 ?! q1 [, L3 i1 m( x6 k6 W* Z/ X; o9 C& ?2 e- A
/* Starting sections of the McASP*/
4 H8 w; ^$ R5 v& d, K( Q( c mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 i8 [5 k% u3 a: y7 D# {6 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); . O3 w. Z" I( V
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . e$ ^7 ^2 \8 B- N; H' ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) n3 W( b0 c5 h3 j: r
* m ~7 G k8 k: h+ G4 t mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : N m1 Y( Q& c1 ?6 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) C% n/ C. J, ^ X
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 H" U) q4 v" _% q8 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ {- W* h7 p. A' L! r# N' |" H8 ~/ b4 v9 ~. _. H
mcasp->regs->XSTAT = 0x0000ffff; , \( H& e. d- a B
mcasp->regs->RSTAT = 0x0000ffff;
0 ?! R& b7 ?; j. W" x; N4 Y4 B8 u4 K s+ Q" C+ z! \: j; e' j* L
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: h5 ]3 Z. o/ \* B* V while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) W1 A% q2 C7 n3 ^3 `% x
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; c' E. j9 F; o3 X2 J! F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 W& ^) s' w0 H" q+ L
# S& q% z9 W8 M! s" l8 Q4 v% E O
/* Write a 0, so that no underrun occurs after releasing the state machine */8 C5 L7 [; D- S$ H; K9 R) D0 `/ W
mcasp->regs->XBUF5 = 0;& q. j/ r3 Q U. N W6 N' C
mcasp->regs->RBUF0 = 0;( s! P) m' ^ ]4 d' B
6 R% M1 l c. l7 J. L4 f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) e5 J# K2 n* C# k& g; Z: E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 D- k- T+ p5 e9 o2 t0 h9 T% K
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 \& h! Q: T- s' e) w0 ^6 r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 B; K$ h' ~9 J7 M- K
, x/ |4 h; U& \7 \) y/ }+ ]) x7 {( x' v mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 V- \1 E6 L" t y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' I7 e. A) `+ w& G' f) \
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & e; X% a( T" R& t e6 _5 D% F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; x+ h/ w8 J V' }! \) V$ A B2 w$ g+ l
CSR = 0x0000;
3 O" c' }# P2 C+ W5 i# l* g INTC_INTMUX1 = 0x3d;0 J' _ [+ ?, V5 u, ]: J! X
ISTP = (unsigned int)vectors;
+ u) q! O. m! \* a5 ? ICR = 0xFFF0; ; b* X' Y) I/ i1 [) L
IER |= 0x12;
( Y# q: q% [" B/ V8 Y9 b CSR |= 0x01;
, E) a0 i+ ]" D
- k. ?) ^* ]4 T/ f) L. e! r; B- [$ r
- W" J! y5 _8 Y5 ?% c" a. ~$ c/ \- [2 p1 M- W
还有就是两个输入输出函数:! {# M6 t4 r2 X( K% L" W" H
void output_sample(Int32 out_data)
* r e2 M& T1 Z* U- p5 [{
2 m. @; z* y7 `- r% ?- [ AIC31_data.uint = out_data; ) }: b3 B# b; [, K0 n& w
MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 ~ u% W: j8 h; F4 K3 C}
# v9 a$ x1 i9 v! Z. a: `( V6 }% d
# K, T+ A+ P$ W" t( B" X5 a! G0 pInt32 input_sample(void)
- f1 H* @. B! C4 ]: z/ @* T{ 8 T7 R% k7 F7 C! ^ d& F( m$ i+ N( ?
AIC31_data.uint = MCASP1_RBUF0_32BIT;
! J& q2 H6 s2 k+ p5 |$ R& P9 R* | return (AIC31_data.uint);
: v: b9 Z% w/ f9 P# Y}6 ^/ Z- A [& v. d- r5 s& g
) G- t$ ]4 L! [- y) a. `
|
|