|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# I' z8 t, K1 t( u$ w1 g% D1 dmain文件:' ]% m$ S, n& x
interrupt void interrupt4(void) ) ?) T2 o* |5 v; s8 {
{! b3 W/ x9 ~. H3 I s% J& s
Uint32 sample;" L f; L9 p1 l- M7 x
& z5 F' S# t" h' g+ ^7 C& y* t
sample = input_sample(); // read L + R samples from ADC
2 I" T. C" H2 U7 w output_sample(sample); // write L + R samples to DAC
2 _$ n; |7 L! W6 {4 ] return;
( J8 b8 n: ]' [: t) a! l. t* f- E}" T1 z1 q1 T$ |8 W F3 C
6 s6 z7 E, E! \8 d- Z gint main( void )
8 \2 e5 c$ j3 y* K/ A) d/ U{
* P- t0 ~* _$ o8 G: F5 t. |/ T9 T$ A5 k8 f
/* Initialize BSL */
% q) K1 D) x9 I/ x; k- y; K EVMC6747_init( );) c3 P8 G, ~" h/ c# _
/* Call evmc6747_intr function */: k# }* [. t& u; d9 l) Q
aic3106_init( );: h5 _9 J* K4 i4 B9 s3 A" i6 M# r2 v
while(1);& m9 Q; w! s9 t- \! N
}
8 ?% z( F, F0 d, J/ I) }! L% R; b0 c- H: r+ g$ W" d
8 D5 V! t( N! j) x( b$ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- }* u+ [# @& A/ A' F/* Initialize MCASP1 */' H8 ]# e, t! Z, O; S
mcasp = &MCASP_MODULE_1;# Y+ F, U; x7 y5 W
mcasp->regs->GBLCTL = 0; // Reset( C2 |& J9 X+ \ o4 I- X6 }% ^' H7 ?
mcasp->regs->RGBLCTL = 0; // Reset RX
* W2 V8 ^$ l9 t- i t. Z( g! ` mcasp->regs->XGBLCTL = 0; // Reset TX
/ [# q e2 u7 y4 B) d5 W mcasp->regs->PWRDEMU = 1; // Free-running1 R2 N' m4 J' s4 f
// configure McASP0 receive registers1 a, O/ s) O7 m G4 J D4 C( ~
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; y8 W$ Q2 {" q9 a6 E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- J$ N8 M% Y6 ?3 q0 W( t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, ^3 H7 r( y' h
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: M3 W( @5 d9 ^5 H5 \! l2 z" ? mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* I! l3 Y. A. x4 Q3 ^; \ mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; w& D. z6 a1 l) T7 J, z, o3 C' j mcasp->regs->RINTCTL = 0x00000000; // Not used
, u, ]/ @$ N) _% Q& C mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- n& M/ T# W( Q( v" |
% ?" N4 T- \: Q3 x* s+ u mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used/ F2 s2 |' q) H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ p# j1 u( g' l6 M! f- v4 I! v
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& B$ m& M U3 Z p5 E7 \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 G0 x' ^ y9 T, F mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 f0 k1 k2 W; u+ t: p mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 L8 _2 F: M9 H, N+ o# v mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 r1 ^) i3 g0 Z/ i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* o$ ~5 s7 P0 L, D. j
: \7 ^6 b- s1 y. L1 z8 P6 \ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' m) }% X# O4 w' e6 ^
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT2 D0 A# O+ W/ q# T0 y' q5 d
mcasp->regs->PFUNC = 0; // All MCASPs: S) Q2 l5 q3 f8 B; U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 w+ y1 n- E% ^+ ^3 V/ r( H) h) b" e/ h
mcasp->regs->DITCTL = 0x00000000; // Not used
3 C8 G" O ~/ j- o; W mcasp->regs->DLBCTL = 0x00000000; // Not used
5 q1 n: I+ l2 Y# @9 s mcasp->regs->AMUTE = 0x00000000; // Not used
" b* H$ C4 E" J1 X3 F- ?: l6 l5 o. c) \ K) h1 u/ w$ [" d' p
/* Starting sections of the McASP*/7 O y% Z6 d9 m. [
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& m% y. [: R, ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
4 D j& `% W; r/ P- P* G" v8 A$ F mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - r7 \! B5 v. I0 C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); c5 H. F+ Y5 C
# w) s7 |) G Z L) H8 ^
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 Q8 G! j8 b5 y- i0 i2 w# K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* H" p: Z1 X" @0 r* @+ \& G. R mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# N& d" R5 w2 Q- y1 S8 ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" S) R* c; K) t3 i
9 w, W y$ R! [; I1 ^ mcasp->regs->XSTAT = 0x0000ffff;
; f; J: ]5 P( [' M1 r d mcasp->regs->RSTAT = 0x0000ffff;
) ^% t) w9 f$ Q& {% O% r& m" N( q* p* @
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 L2 U8 \: |" m$ _1 U# ^- b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" ?$ _- B' G' W* R8 Z; ?0 [7 s mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 o% D. n' C2 K$ {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% W4 d* b; W# b* f# u7 C" S" I5 o$ I
) z. Q% A& M- F /* Write a 0, so that no underrun occurs after releasing the state machine */
/ n9 J w% F5 @- A mcasp->regs->XBUF5 = 0;
7 D. g7 ^# T, y, N! X1 C mcasp->regs->RBUF0 = 0;
2 f) u& y7 w4 G) A/ P1 ~, ~; {5 e" ~4 k6 j
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 J+ p& H1 {/ G3 X1 K6 u ?. q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ ?9 p1 ^: a! x
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 I( {2 `$ g% C9 _, `$ A7 r6 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );% y" U% Q1 P* |$ j& p* `0 g
% I: g, a+ Y5 ^0 J1 c mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' H% i9 `$ ?# u, K( J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% ~8 U. F+ `; W5 d" ~8 v/ {6 { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% x: B. Z3 ?( w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) j0 O" g- b# k3 j. o/ B1 c+ k
* ~# o% M! d. A0 y9 C! j) R/ B CSR = 0x0000;
# F0 t2 X0 o# l3 B/ e8 p7 ^7 g8 z INTC_INTMUX1 = 0x3d;
9 o1 |$ l) u9 K" Z ISTP = (unsigned int)vectors;
+ H$ A" Q+ s1 l ICR = 0xFFF0;
0 c# |. u, P& _! m% i0 j1 T+ c IER |= 0x12; 4 _/ m. K1 q" g5 z. U
CSR |= 0x01; . W R% R1 \- F' |1 S
; Y: M4 [: `6 C9 c7 I% }9 g# s/ a( W' Y6 R9 b7 k# E6 _) r! l
P2 O Y) x, [8 T1 `9 K8 a
还有就是两个输入输出函数:
4 B1 B& {2 F3 {+ _- Jvoid output_sample(Int32 out_data)- u* X9 b8 I9 x1 I" x2 H* ^) L
{
2 d7 I8 s! D. z4 u/ {4 ^ AIC31_data.uint = out_data;
( {9 W6 T# U& x( g5 ]0 e MCASP1_XBUF5_32BIT = AIC31_data.uint;
% f. y# j3 R4 s1 ]6 r}
$ V" H4 M; c6 s! |
0 W+ t# Z+ I- S, ^( tInt32 input_sample(void)
( H) @! Y" x5 W o; e{ 4 z2 k1 l! b, i" E9 u
AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 h. t8 }% w& i1 @/ x; r' g7 @ return (AIC31_data.uint);! f, ]8 ~% C0 B# z* _
}! C' t8 W6 m- @4 w- I" g
: N8 l' E: k9 f! t/ g; d' k
|
|