|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ e- X! T2 p tmain文件:
0 k+ F9 _0 g) k$ P! C5 Y, U* ~interrupt void interrupt4(void)
" n1 N3 o& C8 |5 c- m{5 X( ?+ l& A* `6 ]4 ?
Uint32 sample;
, J; O" l' W5 k0 X. K b" z
4 u+ D4 T$ ~' s) A sample = input_sample(); // read L + R samples from ADC
3 I" F W; ?. n5 \) z# s output_sample(sample); // write L + R samples to DAC
( y" b+ ?1 ~, y+ S# K0 @8 |; R) j. A return;$ f+ J( I( z1 k. w* A& E" v5 D
}, j! ~9 \, n/ f e* x9 \4 X! y3 h% v
+ ~+ w) j' Z0 s4 O O2 C: o
int main( void )7 f$ q0 f/ x {+ D/ E$ w
{; u4 p9 V( E/ E1 B8 N2 Z
z0 y) P7 D" Q0 ~8 ?; B2 v! p
/* Initialize BSL */, |6 x3 s4 ]! i! V
EVMC6747_init( );
7 F& }" a& c& g Y6 n/ B" Q: x /* Call evmc6747_intr function */
5 h$ |, @1 {( [2 G" l- u aic3106_init( );
# N6 q | c, A4 w5 U1 w while(1);
3 X8 j" Q; i2 x; s8 o}
; g5 U" B( Z5 a, j
, P3 l1 [* A1 ]( ^* v0 O
6 o( }, `' Z+ Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# C! ~2 X; q% Q) V" A6 w: {/ w, g
/* Initialize MCASP1 *// R5 K7 A( ~7 r* |+ f' }* h
mcasp = &MCASP_MODULE_1;
/ u5 S; R' X7 H5 Z! r9 Z; { mcasp->regs->GBLCTL = 0; // Reset" v" j$ _& Z9 |
mcasp->regs->RGBLCTL = 0; // Reset RX
* W* r" M6 D$ [9 s' m mcasp->regs->XGBLCTL = 0; // Reset TX- I4 ^3 `; S, H5 v6 \( m
mcasp->regs->PWRDEMU = 1; // Free-running
8 N" `6 P9 A+ i" n) u // configure McASP0 receive registers9 p! T- q) c% I+ J0 _7 q& T3 G
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* N2 f& [5 o' m9 ^! \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& s T7 Z d! z9 n i
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( ^5 b2 h2 A+ B& d& B# i mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ J- b' f! e9 r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
0 C4 l9 U! s: S. _. N6 O mcasp->regs->RTDM = 0x00000003; // Slots 0,1: R' ~% C5 {0 H
mcasp->regs->RINTCTL = 0x00000000; // Not used/ u; N# _! [* I A+ F! S0 a
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( t' E) T5 k$ y
8 Q3 g$ e" z4 R9 } mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used% U" W$ n8 N2 d" q( P
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. A9 G! ?) F( h1 s |: K* M
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* c2 D2 s& ?2 q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
$ o- p# c5 T, I3 C5 J, B9 i mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 e* l3 N8 `2 q$ U& i( O$ a- b% y8 R mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 X6 W& w! Z8 V. h/ q9 R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 D2 X% t0 j" E1 g ]
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( k1 v& Z7 z! z# Y& V0 b' _
$ v6 d* T2 B" Y) I& T& ~$ q8 U3 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN) k3 y; @/ n. r( p, j+ Q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) O( _( Z+ L! }9 A4 n0 v mcasp->regs->PFUNC = 0; // All MCASPs c. E- t1 O" l! X6 R/ n
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& [7 r5 l: S/ I7 L/ z7 I
) s5 R5 O2 ]) n5 B mcasp->regs->DITCTL = 0x00000000; // Not used
$ S9 X& c) S. D" z: D mcasp->regs->DLBCTL = 0x00000000; // Not used! f% Q7 i2 T) F G O8 z: N
mcasp->regs->AMUTE = 0x00000000; // Not used/ e1 J: ?! ^2 o. M) \
, L2 c) W# q" Z5 y" n
/* Starting sections of the McASP*/
) A; r A/ D. R( j* ~- G mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) k6 M9 v& Y+ X4 [& [' h, _" L
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
Q5 ^; r5 i# K' T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 X& B# j# S% Z7 u: Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" @' Q1 b8 \4 H4 h$ ?% z0 o
* S! y; n, `0 P+ n+ E( j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 l u* J" u) a) m! U; x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ N& h; r) ?5 v% f
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , n7 _. N8 o/ ]" r% a4 ]3 c) g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( h0 y% n" P5 [8 P- p, [& j9 z* O# a
( _3 a2 Q8 X& K$ F4 i mcasp->regs->XSTAT = 0x0000ffff; ! \: a8 n/ a v- y8 Q# h
mcasp->regs->RSTAT = 0x0000ffff; 9 q: K" H X( P" o8 u
2 D9 X, v- y$ s! D3 r) d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' G. }0 `9 Z% F( p0 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 ]; N) ]+ O6 ~3 f0 U. o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; j, s1 a; _$ o# |+ f0 f0 S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( T9 j3 z- ]: U1 L
5 I- O& u+ Y2 |" w6 W! | /* Write a 0, so that no underrun occurs after releasing the state machine *// w/ [3 e8 s* n+ Y7 _3 q/ A6 o
mcasp->regs->XBUF5 = 0;
7 e- l, B% \+ W: ^5 n; T mcasp->regs->RBUF0 = 0;
9 P( W/ @1 w1 ]+ X" n
' j& @* ^$ \% x2 Z. V mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( U5 N7 P" C. V# a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 D- J( ?- g$ H) }' j
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 b8 ?" X/ P$ m$ H' @) t; w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- b' c; K( q* U) z
6 o7 h6 u$ ?+ h' r" o; d
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; k0 }# C1 y2 t p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, V. k- j' b+ u* F4 l: Q4 E( m, d mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ {# K( q2 E/ a5 Z, E4 A! { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 P- A! ^$ G3 y/ e/ r
& Y: l- a6 `4 d
CSR = 0x0000;! s1 u1 u2 ~+ v) j y
INTC_INTMUX1 = 0x3d;; X4 @$ V d/ v) G8 Q: r
ISTP = (unsigned int)vectors;) b) Z& L* x: ^; X6 |
ICR = 0xFFF0;
: R1 L0 h9 L% m7 u7 q IER |= 0x12; : A' c1 k5 p& d: ]$ g
CSR |= 0x01; 4 S& o$ F3 n+ U" ]8 [
% m# h$ J0 k6 A, o1 C/ V
3 U( U' K! ?) K- ~
' g+ m. L& W i; o* ~还有就是两个输入输出函数:0 w$ S8 Y% \+ k, ?' u
void output_sample(Int32 out_data)9 u1 H6 Z% ]; t! U8 @$ h0 X8 P
{
( m. {! C+ `3 l0 m& | AIC31_data.uint = out_data; 1 O! |! B) r' ]
MCASP1_XBUF5_32BIT = AIC31_data.uint;
" P, ~- E/ j( i5 T" j) C6 A0 S9 G}
6 j s, H8 t3 b' ?. j2 X" Z
: y/ t" C) a# E% K2 xInt32 input_sample(void)& t2 l/ V; w. R- a, u. q9 @+ H
{ , _5 J: V9 v9 V- k0 V4 z# Z( X
AIC31_data.uint = MCASP1_RBUF0_32BIT;
# m& y% b! h4 q! p return (AIC31_data.uint);
) M$ p# N4 o, h2 C/ a}
8 m# z' P# j1 J% K! w: e! z2 p/ I7 J- |/ R7 B% z) O3 T8 q1 m
|
|