|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 ]. L2 |: T: n/ J3 N* K" ?- s4 Vmain文件:9 e/ l/ i. W/ ~( H5 m
interrupt void interrupt4(void) ! r$ g6 [7 v3 I4 G8 T
{
9 r. _$ J) N) d3 Y, u1 K# | Uint32 sample;1 ]( c( U; K% c4 ^
- O( ^3 l0 V7 l6 ?% Q! P
sample = input_sample(); // read L + R samples from ADC3 M: q8 h9 e I3 b+ ?4 v
output_sample(sample); // write L + R samples to DAC 4 I% W0 ~7 H1 e: p& b
return;, E; S$ X, @6 r8 o( Q# L' S
}0 h) Q* U$ ~2 ~
' I* S/ d/ b9 Q+ a5 K5 Vint main( void )
$ f5 @ c8 f7 @7 Y5 E{
; I* x9 J! x" P, p: T
) L5 f' h; y, k /* Initialize BSL */
) w! b7 W) p4 ?9 B/ n; j EVMC6747_init( );: i5 R. B8 ^/ Y$ M8 ]' g1 c" ]
/* Call evmc6747_intr function */
3 R) |7 Z' A4 y u2 l2 D0 f aic3106_init( );
0 U7 U! S/ h H0 b! [$ u: D2 b4 x while(1);
% Y' w# X ~+ D. I+ x. Q$ x}8 P8 A& r" C3 b& J- k$ \. }1 i
* R. \' |0 z/ a9 r8 Q* ^: W8 X* M
7 u) A3 I* P6 E5 O$ h' i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, \6 q2 m' V& ]5 }8 w
/* Initialize MCASP1 */, Y( y% X- q3 d0 K4 v
mcasp = &MCASP_MODULE_1;
; W$ M0 M0 Y$ o5 I( ]" L mcasp->regs->GBLCTL = 0; // Reset
# N. L' C* U# X mcasp->regs->RGBLCTL = 0; // Reset RX
9 B0 v, v1 \2 P* Z: i mcasp->regs->XGBLCTL = 0; // Reset TX
1 U# Q! u' c/ V# K) ` mcasp->regs->PWRDEMU = 1; // Free-running
2 r: X- R7 V; k' [5 c" t // configure McASP0 receive registers7 o1 D$ Z# P x$ {2 F. c( J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
& y$ p/ J, E6 V% _: g4 { mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 D1 h& u8 ~) T& A1 t
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! Z$ T) D% ^6 [: h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% T" c3 q" r( e% x mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 p; ^. x F$ d! O) p mcasp->regs->RTDM = 0x00000003; // Slots 0,10 W& R* P4 X5 k+ y' k3 f
mcasp->regs->RINTCTL = 0x00000000; // Not used0 [7 ?3 w9 z. F. [, `$ s! E0 s# l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 {1 E/ L* _' G" c
) H0 u( T4 Y+ J3 V2 u mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 }% B' g5 A4 _( n3 ? mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 u( p+ v. Q2 \3 A, r1 z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 ~6 w" ]) n; t( ^) i
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; L( x* o( D& _3 F* B
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. K: p- \) V4 H2 K. k5 }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1" s# x7 b, X( a! |+ S, F
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit/ C* V w: h, e. l% C
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# b$ d2 U8 z( d. \
0 f! f+ P' F5 U& O* H mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" v2 u* V' t6 k9 @ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT. a. F4 [3 t' o+ a0 d
mcasp->regs->PFUNC = 0; // All MCASPs, E% i4 c3 r5 h0 Y* |: M9 a9 ~1 N
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 q4 o. z! ?6 n3 \: l# Y7 j
9 o' J, g( O5 Q8 Z4 U# G" G
mcasp->regs->DITCTL = 0x00000000; // Not used, J* _5 V- e Q& ^. s% Q& t9 c
mcasp->regs->DLBCTL = 0x00000000; // Not used9 {3 z5 k0 g3 K: b6 U1 f7 s
mcasp->regs->AMUTE = 0x00000000; // Not used
; k8 s% R8 h* {0 u/ o6 Z4 E) R- \
2 M% n4 @8 m3 \; l2 d* `9 X/* Starting sections of the McASP*/* J# D) }: e; t* ?6 B
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 W3 o; x4 ?8 Z+ R2 e, G& N* s9 o5 b& i
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 e! t3 S, x( j7 I; v5 g4 \
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 _: f# N3 S7 |9 [ A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" [: P& L0 v, ~4 ]+ l7 K: ?# K4 b5 S5 V6 ^
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 }4 ~( b3 z# g! r* V* n! u6 J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ M" O2 b) L) B$ U- n
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 Q- A7 T# I" K6 U/ h+ M while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 H" B) n' Z( L' A& l
8 ?; d& N! C Y- ?6 w7 @ mcasp->regs->XSTAT = 0x0000ffff; $ U9 i* _% g. \2 F
mcasp->regs->RSTAT = 0x0000ffff; : j! _& o: V, _1 U5 g
& r, T9 O: V& g! `$ L9 u
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; w3 c+ Q7 T9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" b1 r: z; _# u1 `* B e0 v3 H mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" ~ C7 U I1 s1 |) ~/ p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, t) t+ D0 z# r. O; j
9 q3 w% Q6 J# q3 J/ t S/ |$ A" B$ o3 ^ /* Write a 0, so that no underrun occurs after releasing the state machine */
' Z4 c" [& j2 B9 \* M- i4 P mcasp->regs->XBUF5 = 0;
# M$ X3 {" B. \4 K mcasp->regs->RBUF0 = 0;
9 w( T+ G8 v) X3 O$ S, I
K L; V% w) U M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 s; G& g1 {" M+ A% f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- p" d3 Q5 y$ K% R1 G mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 ~8 R" H5 u/ d9 U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) w& E4 N: e# `8 K" B. c8 w8 _ ~) B Z% ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 K1 @# K% Q# @8 o9 X; U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& D% R5 _; ^0 t: T. c) P mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " M6 W5 D$ V8 \* A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" l# J* }* Y/ _' P- v
5 c! ~) u( H. @. e CSR = 0x0000;8 T: d* {8 m* O
INTC_INTMUX1 = 0x3d;( {# c, S: ~+ K5 K; y) h' |+ Z* ?( L
ISTP = (unsigned int)vectors;6 D/ J( b7 j" r5 l$ r0 O
ICR = 0xFFF0; + r4 d( X0 }( R) h# G
IER |= 0x12; 0 y& \) D4 w: l, T+ p
CSR |= 0x01;
) i* _2 p/ U* e1 n) F4 b' s
& c! \$ ^! A8 F J* [, n, l$ Z1 k- Y; u, z, W3 `
2 X) V5 ^. P* {4 g3 N1 a还有就是两个输入输出函数:
1 _0 i% d% K+ ?% ] [2 D0 F, Vvoid output_sample(Int32 out_data) {6 o' ], q4 v. U6 z- B9 x' x+ i
{) l* i! l6 p! [, ^) U. i- l1 O
AIC31_data.uint = out_data;
+ ]$ \" J" e& x MCASP1_XBUF5_32BIT = AIC31_data.uint;7 P4 N. M" T2 s# M7 {% p! o3 }: L
}
! P6 D5 T C+ [' F7 m5 {" `5 Z; f- I2 ?. u
Int32 input_sample(void)
) ~3 _ O/ x: R% {* ?7 x{
+ T8 \) P" [7 @' |5 {7 @ AIC31_data.uint = MCASP1_RBUF0_32BIT;
; W8 u7 _/ a' Z9 i' j; [( p; t return (AIC31_data.uint);, w. v8 k2 D5 L1 T
}
# A3 E7 E ^8 `: J, g! a/ z0 T1 @- E" T7 ?
|
|