|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 x3 m" a4 R. u
main文件:. V/ |( F% S0 d" T
interrupt void interrupt4(void) + g3 ]' y, u8 N1 G% `) u: A z
{+ ^8 R9 ^" C6 P; m/ t
Uint32 sample;
( V; j3 ~' _/ u7 A2 }# r- p" [. @
sample = input_sample(); // read L + R samples from ADC* D+ n' A9 x6 x
output_sample(sample); // write L + R samples to DAC - j M9 N E4 V4 E, B
return;
# h' ?$ d8 |$ i+ G$ [5 V}1 n ?2 I+ m2 k9 f3 g# L
; i7 J4 K# }$ v: d# s4 \ g& p: a
int main( void )
8 r1 \% B. U: m4 p; f ?1 R4 v{
( V2 n2 j% g% }8 y' g5 z7 ~% R& I- B, B1 m; U0 w
/* Initialize BSL */
7 m s! n4 l2 b- I$ o: B& } EVMC6747_init( );
0 w# H1 ]' A- H/ c8 n /* Call evmc6747_intr function */- E+ ^% j$ w, t, p
aic3106_init( );
$ S% @/ f5 z) i* w while(1);+ d2 e z; x: T! n+ v% L+ ?5 j7 ]
}
1 P0 P! T- S) U4 O
$ i4 M- |0 n; t
( p$ x$ S& M; v: L, ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 p1 k/ p$ S9 F: y( {
/* Initialize MCASP1 */
1 a) u) h( A. U/ b/ w, u* d mcasp = &MCASP_MODULE_1;2 x. N) \2 h: j9 K
mcasp->regs->GBLCTL = 0; // Reset
% L! v3 u( [* q4 F mcasp->regs->RGBLCTL = 0; // Reset RX( f' _$ a3 f5 T2 n; I4 J
mcasp->regs->XGBLCTL = 0; // Reset TX
B0 v! p# B! Y mcasp->regs->PWRDEMU = 1; // Free-running" U4 w# q4 s' Y' b, v5 ~& m
// configure McASP0 receive registers0 z2 z l# ^6 d1 Q$ |& a
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) b* P& D: W+ @! M, o6 r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 v- O2 _1 }6 @* t; P( s- n
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" X# S4 t, Z# h! O. H; C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- G9 Q/ U( C$ S% R2 D
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)9 V# }" z4 ?7 Q1 ]& S, G/ `
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! V# a( u% k: F" j, x K
mcasp->regs->RINTCTL = 0x00000000; // Not used
3 P q Q9 u" I8 {. o" X mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ T3 L$ R" ^2 d3 X, s: L1 Z" V8 I
) B5 r8 N* {- N2 N5 F5 U mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ K; v) r" z0 y3 \7 l; I mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 A- \. r+ t2 Q/ F6 E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. v9 c+ S: O, M. ? mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16 V$ x' e/ @; }& c: ]
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
. s) z. G, M% d8 w R mcasp->regs->XTDM = 0x00000003; // Slots 0,1! H. ~% }! H/ _, h% d+ C, ~
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit' ~; _) v3 G& O6 @6 D R F
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 ?) V+ G' I4 v/ F& a0 v: w
, i' L$ u. z" F7 i4 u+ s mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, M7 F+ u$ S$ g: a mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT5 x( N1 a; N& a/ J8 l6 z% b# H; t
mcasp->regs->PFUNC = 0; // All MCASPs2 x2 j4 \. d4 ?! i; L+ j3 l
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ }) q7 H9 N: D3 ^9 U5 G* l$ r
6 ?# v4 a' f4 P2 Z
mcasp->regs->DITCTL = 0x00000000; // Not used
/ O( b% b# D. s8 t& E5 S4 ? mcasp->regs->DLBCTL = 0x00000000; // Not used
, y" W, H1 N3 M$ g6 s( r- H/ S/ b) X mcasp->regs->AMUTE = 0x00000000; // Not used
1 X2 _$ g7 I0 k( r! Z; B/ f G3 H" x3 w% e; Q. ~" B% U
/* Starting sections of the McASP*/
! X! w" O! L$ p6 G1 A7 Q- [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ E) v6 c( c+ j8 V; }8 T) p- N. u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 n \" `6 f2 m* X- P+ a Z8 u( U
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' {% G/ Y/ h- m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 l e6 w5 M1 I5 t3 I4 {" b" q H' r/ W
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& [! v8 q6 Q! x' L. P: J( h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. v0 [9 w1 V. J0 ^0 [% L
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 M$ ]! B4 E N$ Y+ t! @' m. L while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 l9 N! \( D/ O
! ~% C4 `! S! a3 f5 S) b0 m2 T mcasp->regs->XSTAT = 0x0000ffff;
% j1 E3 ^ E8 M4 E/ x mcasp->regs->RSTAT = 0x0000ffff;
7 M% a! C0 }: _- { Z% G/ I, I* P6 u9 J; |
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 G" ]" R2 s/ x$ u$ k. b" [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
x9 K% G$ |% a" c% y mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( \+ C. y( Z9 k) R( _9 W1 Z, b$ f
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( }0 q+ }4 a) Q2 Q8 {: ~, g( D3 \4 _. l9 E
/* Write a 0, so that no underrun occurs after releasing the state machine */" q+ y" Q ^/ N& @0 `$ v5 v1 b1 ]
mcasp->regs->XBUF5 = 0;% M" x- c6 j* _% l9 K
mcasp->regs->RBUF0 = 0;: o* t& o1 w3 I. [' `" K
T! ]: ~9 \3 l: u+ d9 F. ^: s mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ E( r, B. T# {7 _& L' m. e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' x6 g9 N, Q/ n' X0 ]- b mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 [: ~; y# L0 L% Z4 m& T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 D7 O# k9 }/ W1 T
( k- e9 v4 M9 X* i9 m7 G$ ^ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # e% z/ P% W: E: ?/ T3 Y: w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. d3 T' e. }8 [! k# q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 J' H9 }/ W: h7 B0 t) `: ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& d" o; |, X8 C, M# l3 |/ x
) I o* i6 V7 c CSR = 0x0000;3 I- G# E# d* U- S2 S
INTC_INTMUX1 = 0x3d;9 ~+ e( s1 x# m7 |% S4 F8 b4 t
ISTP = (unsigned int)vectors;# {% ~- W' z3 H! _
ICR = 0xFFF0;
7 B/ X# S2 z# d8 S% w IER |= 0x12;
2 d. p3 @, U2 h& T5 `) q- R& `5 [ CSR |= 0x01;
! g5 f' ^. }( A" u, \$ m; E/ Q4 H. a0 T, R( N
! O; Q0 O2 J8 o2 l" X! l
7 P2 O7 ?+ y, d1 b$ Y5 P8 b
还有就是两个输入输出函数:
8 x% F' }% S# a x/ l* pvoid output_sample(Int32 out_data)- J5 O& A) Y) N! c
{7 h; R" o1 `+ h
AIC31_data.uint = out_data;
4 a6 ~% e( }7 f% {) U4 f MCASP1_XBUF5_32BIT = AIC31_data.uint;
# X; |( K1 T- }! P! f$ [( }}( E( { @' k5 U, s7 \
4 Y7 H2 m8 R: w3 h+ T% a' gInt32 input_sample(void): B1 ?6 J* s7 J
{
7 \: Z6 O* f/ x AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 ^7 k1 {5 U1 W return (AIC31_data.uint);* ~9 f: ]$ Y8 ]0 {& p* F4 j
}
, O3 D: s9 V \; k7 V5 ~+ U4 z% C$ w, ` U
|
|