|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- R2 I' F/ b0 l9 {/ vmain文件:$ I9 G) @8 ^# _( A, O/ p9 U$ }6 A' k
interrupt void interrupt4(void) 0 I0 s* M. e+ V$ B& v) i8 {
{% b8 l: P7 ?* i& x% ?. y
Uint32 sample;( Z6 `/ @: \- O' y- `
: ^9 k% L9 G1 W+ A7 s
sample = input_sample(); // read L + R samples from ADC1 s9 m$ S6 F4 r' }3 P/ ?
output_sample(sample); // write L + R samples to DAC
+ `( C. T9 T" m$ V @ return;
5 u) {( \/ k% u}
( k: Z( u" l! H, U4 f8 m3 o/ x2 ^2 }6 C
int main( void )
C) c, g7 @+ N* i6 I{
! F0 w9 B- K ~" C/ }: }) P, f4 }% V$ L0 |, g
/* Initialize BSL */
. m% B1 G: C9 Q. b( F EVMC6747_init( );
. y2 c8 a3 c K9 ]/ Z+ R/ M /* Call evmc6747_intr function */+ ~; S4 y6 {% ?) v1 x3 e/ A
aic3106_init( );
2 J* r3 w8 @, U$ y6 a while(1);' a3 M+ c9 v" v7 @9 c- @
}
9 L. y0 X1 n8 s p
( m$ W* j) _/ z3 V4 A9 ], K q8 e7 @- d7 N2 ?0 B* z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. c' ?& e/ o. G
/* Initialize MCASP1 */9 _4 j& f; D9 @1 q
mcasp = &MCASP_MODULE_1;
" r0 k! l# D; d' ^; @; | mcasp->regs->GBLCTL = 0; // Reset
( [0 `( n; f6 D% O7 _3 \4 W: u mcasp->regs->RGBLCTL = 0; // Reset RX# B% }$ h2 K8 ~+ A9 \! E
mcasp->regs->XGBLCTL = 0; // Reset TX; c9 R& a: I- }% S [# h+ ~0 x# T0 b
mcasp->regs->PWRDEMU = 1; // Free-running
% r& a# ^" ? B& q4 q // configure McASP0 receive registers
% J9 z m1 g+ a7 g, l" Y, E mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 e+ ~1 P) S3 ]3 v4 u
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 Y; j; P7 {- T1 ] mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 H- M1 P: `6 H) J: k- k mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ r& s! s; R. E, w( X5 v mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! x+ I$ t+ U+ [+ F! D# B mcasp->regs->RTDM = 0x00000003; // Slots 0,1& k# J/ I% V1 o \1 c" b
mcasp->regs->RINTCTL = 0x00000000; // Not used
4 i2 p# v4 l: a, z; x; W mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 w" _9 f. ]5 Z$ e$ F
' H8 g2 l9 u$ u; k7 w& b; G# ] mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 S; _% Q4 O/ Q7 g3 Z- g4 j, `
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) @6 p, f( e7 c2 {& e# e8 P( E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) l2 y y, O1 D: x' c6 y" H
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 f1 @( @' H# N
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK D; E- V, F% A/ g! `! c7 n
mcasp->regs->XTDM = 0x00000003; // Slots 0,1% S! @0 p) x7 V1 l
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" x! y! z r. @$ u( x# ~3 o/ P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, N" `7 g2 L+ R+ B
4 M! v; j- T; _7 i, O% q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" m5 F# c. R4 Z. f5 N, X mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 E5 H0 Q0 M4 k3 R. b* A: P
mcasp->regs->PFUNC = 0; // All MCASPs
. C& m. o. n8 o# R) E mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- W2 i0 P7 V% |/ s" r
1 H8 R) P x$ @ mcasp->regs->DITCTL = 0x00000000; // Not used$ t# o O5 k3 j6 |% ]
mcasp->regs->DLBCTL = 0x00000000; // Not used( r; @' m+ X2 E) ^& H
mcasp->regs->AMUTE = 0x00000000; // Not used
4 C* Z/ i \; H3 M7 e* M* z7 S9 G& l+ G+ V6 r3 e' k+ Q
/* Starting sections of the McASP*/
- {# a$ \7 N( C5 |, S8 }$ m) J+ q/ a mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 k7 J! B8 L' r/ _& g: Z1 G8 X1 U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 D Q9 z; u% c; T4 ~3 ~ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 Z. p/ G" B4 [4 B* V1 F6 Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# ^* ^" a5 \2 w" I5 n2 y$ m
W' i& ]" @3 v2 H: f mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& s. m9 i, T' I. `$ p: [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ W- U1 O6 L- M5 G6 s' o
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : c4 R* P- A# P! a) I1 S/ @/ i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 }! k% t9 ~( Q/ B! J
, `3 w4 \" z* }# R1 ^8 X: L mcasp->regs->XSTAT = 0x0000ffff; 0 r: ]) s5 t7 f* J3 P
mcasp->regs->RSTAT = 0x0000ffff;
+ e' [. v4 l* M/ ~, p; |$ u n5 n7 m& w6 _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; M* W; Q! S( z1 \" T1 [: E3 W# ~9 n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 t% X) y3 N/ K. K4 Q
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; @8 f3 l9 i& ^8 q5 m I. J3 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" C; i1 F% O- |$ `, q ?
" M' L2 H7 e$ ^1 {
/* Write a 0, so that no underrun occurs after releasing the state machine */
: C1 X. Q6 i1 r& r7 e mcasp->regs->XBUF5 = 0;
6 g" ~; ]. r* t, T mcasp->regs->RBUF0 = 0;
; x# g, ^' O- x2 U$ [
2 g0 l& t. X" U$ T/ s mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; Y! n: D: b* P8 U" F# ^
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );) a: X. i9 R& H7 _
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" i" H' e! k% {% k Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );# }: Z1 p. i1 G" s
. l! Z9 B1 y0 _7 d3 l- D) E1 ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" a. |; T; R& K D- d3 B& f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 ]& a1 C* ^7 J2 k; h: \
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ v$ \" F/ l3 p( H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# I) Q) x. D) v' ?" n) S n1 \( H
% V1 p8 i& n3 Q8 i! t CSR = 0x0000;$ u4 S' x$ |( U
INTC_INTMUX1 = 0x3d;( s+ J8 ~) z" n' V
ISTP = (unsigned int)vectors;1 D' x6 n, A. m/ Z% z" W
ICR = 0xFFF0; # q+ o- W! d6 C4 [4 J5 z
IER |= 0x12; $ K- `2 n* V: a# a* r( o* {2 m% m
CSR |= 0x01;
) E+ K0 P! v7 S8 [- G; F# ]. ?3 v9 p3 p. M: u0 D$ s/ Q
. i- q9 R3 ~% f" ^+ v3 f, [
# p9 B2 I1 A% W1 I9 Y" w" c2 ~还有就是两个输入输出函数:( p. j3 m; c+ m. N
void output_sample(Int32 out_data)9 H9 {2 m% U6 a- o$ ]8 w! ]
{- E8 d ]5 B2 T5 ^! H
AIC31_data.uint = out_data; 7 P: s0 }! m9 j) H
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ L) W$ [: C1 g7 j
}$ K1 @. S) G+ r9 \- h
3 ]4 n' s: |. d. Y3 {! i8 L8 DInt32 input_sample(void)
( Q# s# e5 i1 W. b) G* {+ U( O{
' A: G" ~" J) h AIC31_data.uint = MCASP1_RBUF0_32BIT;1 m f% v8 w8 |6 ~- K0 A+ A
return (AIC31_data.uint);2 m G" ]3 B/ Z& p
}& \5 \2 X/ {. ?+ J' k/ D
4 k7 ^! n, {/ d6 p: _% D
|
|