|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ `8 Q. n4 f J+ A
main文件:
/ j' G+ L% Q% j2 o& x5 D7 u/ c( binterrupt void interrupt4(void) 5 b L3 F) ^) L9 {3 v/ T/ h: H7 n
{
# V* T- P. d, i% D6 P; F. z Uint32 sample;. `& s2 u' @- K- A
( n! g. O$ I: X, w; Z" K sample = input_sample(); // read L + R samples from ADC
) z" k* U" c* Y1 T0 w2 R output_sample(sample); // write L + R samples to DAC ' w9 Q/ M7 w4 G% ^( V
return;* X& F+ M4 \9 G
}0 D8 I+ C3 P5 ?
/ t ?3 ]& H3 {
int main( void ). W& k9 G( a8 {* Q0 z) C/ L
{
7 c/ g3 \: |9 I: @$ M. [3 t$ D- v" \' l
/* Initialize BSL */
, A+ A' k9 k" y EVMC6747_init( );1 C' D' e! ]/ c
/* Call evmc6747_intr function */, x: n- t, r% w) R: K- ?( g
aic3106_init( );
( G. h' |. w8 J! }7 ~, ^7 h while(1);
5 B5 F% a; z0 d% T. D+ c% u7 A}% O* m0 w- P" c+ |- }* z
8 b! `! J- H8 [& P# d) h$ p$ @. ?& I4 E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ^- V7 L) x2 t/ t+ t5 u
/* Initialize MCASP1 */$ M% n7 H/ C1 P1 }2 U( Q- I, h# U/ O7 L
mcasp = &MCASP_MODULE_1;$ y3 W7 D* {2 ?2 }/ v8 u, ]* `9 F
mcasp->regs->GBLCTL = 0; // Reset) L+ M( f$ e" o! G4 S/ @
mcasp->regs->RGBLCTL = 0; // Reset RX
) T2 h. |" r; J mcasp->regs->XGBLCTL = 0; // Reset TX: t" ^# Y, ^. [6 r% E
mcasp->regs->PWRDEMU = 1; // Free-running
7 l* X: g( c1 ?; Z) T // configure McASP0 receive registers
- Z# V9 Q0 i1 U; q( I4 p mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used8 q( m6 @! c! R- a
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- _; D* A* D+ B" T$ y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ d) A, L% \4 k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- |6 l6 _% U4 \2 C7 e
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ X" `9 |2 `" g, b
mcasp->regs->RTDM = 0x00000003; // Slots 0,19 l" H% I4 f2 e0 L4 J
mcasp->regs->RINTCTL = 0x00000000; // Not used: B% c. d9 h( w0 w* h
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; d5 ]5 W% E3 y* u, N/ F* Y( f" r+ c! |$ q, B
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ X, {/ E& }$ ^8 t
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ S7 M+ n* K9 P# B, w/ s' F+ N& d
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( ~4 l$ b; I0 F mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 I: H! N. V; ~" Z Z
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK7 N( U+ S) o V: |" q
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
5 L' L" h7 {% f4 M. z mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ B7 G+ _: {+ t4 N1 n+ D
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) C% x6 ]# H* G
3 n" k; o+ K6 I) `5 C
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 ?6 p0 P& q# i' X1 d( g O7 h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! t; F' J G8 H3 h% h mcasp->regs->PFUNC = 0; // All MCASPs1 l1 w" z* Q5 s" O+ r; }
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' t5 {& y8 W! F& R% T: _# J3 P1 S2 j* K+ h
mcasp->regs->DITCTL = 0x00000000; // Not used0 M& p. m; A, \) |
mcasp->regs->DLBCTL = 0x00000000; // Not used- @4 }" q2 C" Q$ S, \ j
mcasp->regs->AMUTE = 0x00000000; // Not used: w- d& ` [+ G+ b4 V# C
: e T! V2 J0 J5 T( u4 B# h# _4 M* q/* Starting sections of the McASP*/
Y0 W* V( S7 [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" ~6 g8 s5 s1 k, i/ i3 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); & K0 a. K' R- C$ f2 T: w& O# }" e
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# Q8 X! J2 [6 h2 r; V! P% t while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 ]7 |; A5 p8 u+ `# L/ q
) A4 V$ \! u7 @( {) A+ x) t9 ?
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 [8 h- f" {2 x5 Z0 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 R% `2 `/ N9 K9 S
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 l# ~' C& u7 K$ t6 U$ _; Z" a" j
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; Y; c! p |% R0 j
. J# ]& D {; @" G7 g( c mcasp->regs->XSTAT = 0x0000ffff;
5 d( w! B5 x2 [1 G& B, f4 b mcasp->regs->RSTAT = 0x0000ffff; . T1 d' g8 H0 b6 C6 h
9 T o$ y+ m+ C8 u( j& \' Z mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) u( P6 F% G, h: m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ ^. M, H2 |2 Y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 N5 O3 h$ P/ s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 A* C" ]+ }$ U5 Z5 u
) S) z3 [. f. h6 ]& t5 R
/* Write a 0, so that no underrun occurs after releasing the state machine */! [9 {, H0 h' t1 e: j: s1 [
mcasp->regs->XBUF5 = 0;* v& l* A q8 A) c* O- s6 ^2 T
mcasp->regs->RBUF0 = 0;
! @, i' K0 [" x, O
! r& l1 f W0 V; [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 I8 O! J5 p% g# X9 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 n6 m5 X2 _( M, i; ]6 s+ d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + @3 c; R& `; L( X/ G; W0 h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 [9 Y& Z/ ^* w6 ^8 H! G1 j# S
- p% o" A& D" V3 W# A
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & J9 m4 ]) Q9 W2 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; L( C: z7 c* R5 t mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" P" M/ J$ P! s+ I) X while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 b/ a2 f6 z' E7 j5 J1 a
& W1 ~2 F3 k5 z4 y' ?! C* R CSR = 0x0000;/ k7 {8 w0 N$ Y D: k: j; |
INTC_INTMUX1 = 0x3d;
1 K2 Z F) t2 Q! N* f6 j e( b. y ISTP = (unsigned int)vectors;% s* J7 x, i" C' ^: l7 g
ICR = 0xFFF0; w7 n9 \" x5 ], w8 \# w& I: C
IER |= 0x12;
8 Y( O# u' T- K Y% x) ]$ n. i CSR |= 0x01; , Z! y% n s5 ~
- X, [9 D/ n& P! u, d+ u) ?$ i5 l
; A' i7 Y* a! E2 l' a* l1 Q" @+ a7 a: s/ z% n0 B
还有就是两个输入输出函数:1 u4 m% H! `# C' t7 H
void output_sample(Int32 out_data)/ t1 p: a& K+ R1 f7 Q
{* _, q/ R2 y( M5 s! b: J0 s
AIC31_data.uint = out_data;
& u" Y" g$ o/ I- s+ K9 a MCASP1_XBUF5_32BIT = AIC31_data.uint;. B/ e3 c2 ~1 t6 S$ b6 N% W
}
i% j* D/ w7 p) i) y5 C! C4 \2 _. g9 J; }$ E5 {
Int32 input_sample(void)0 J/ W6 F# C& I' n3 z9 a
{ + J M" p( f2 G% _ |' E4 F5 J. E
AIC31_data.uint = MCASP1_RBUF0_32BIT;# s! a5 V5 ~# t* C H/ b
return (AIC31_data.uint);
. c/ t2 n( c* K* Y9 K) A8 o}$ ~8 }1 p; a0 D) k4 F5 j: N; j
. U1 F/ j! n! l7 o. N1 p
|
|