|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 }& A- u7 j0 z$ _/ I: T+ Rmain文件:+ E& G/ p4 E9 y/ W# [
interrupt void interrupt4(void) b' J$ L( \* _3 [/ c3 w
{3 S! [' z5 U. p) x$ f
Uint32 sample;. W* d% b( }: B. E$ J% Y# W- M) c
5 k* [7 n$ S8 Q& l; D r! P0 o4 g sample = input_sample(); // read L + R samples from ADC+ n0 r2 ^/ c, Z9 z
output_sample(sample); // write L + R samples to DAC
1 k& K/ G* C+ B return;. z/ P; j3 c: U( l. }+ T
}
# ?3 U5 o, R. S( ]9 G
( y, }: O: |+ h. p. Gint main( void )6 {. Z# A- ?" E9 |$ v
{# c6 v; [' I/ W2 [7 o, n3 T
6 B% g: W% f8 I0 f$ R2 v /* Initialize BSL */
. L* K) \& a1 h6 F" y7 U6 G EVMC6747_init( );, }/ v1 C1 l9 l7 L! b9 T8 U2 ~1 E; l
/* Call evmc6747_intr function */# F* K& x, D, A
aic3106_init( );
, p, O3 v, d D* @ while(1);
; g5 `3 q# _9 k6 e0 B4 r# U}
: I, _( h. q0 \8 I1 [& j, i$ r: O& N2 j" P) D9 F) n; y3 Y
) g( P% P% p1 q U- L/ N
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 @' s$ C; \, g3 K* [6 h5 m/* Initialize MCASP1 */
2 T, i6 b) [" Z! H3 X$ o mcasp = &MCASP_MODULE_1;1 c. V! S+ ?" X. C% W( k
mcasp->regs->GBLCTL = 0; // Reset2 A, J7 [, u* T" M! L% z
mcasp->regs->RGBLCTL = 0; // Reset RX7 c8 z1 d% j2 v' o# V- X
mcasp->regs->XGBLCTL = 0; // Reset TX c) R, H( q Z/ k9 v$ `
mcasp->regs->PWRDEMU = 1; // Free-running5 J; x+ s" }% }6 G8 F; l
// configure McASP0 receive registers9 |$ s$ m6 y/ ]# _. B
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 `) P: b! M" U5 ]4 X
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 [$ R/ ~) r$ e$ o9 w" l# X! H* p
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# h/ W, s1 C% i, h5 ]- D
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 E. h! n7 o/ Q _ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 w% k2 f( G' r; u& O# p
mcasp->regs->RTDM = 0x00000003; // Slots 0,1$ P/ Z; L. L1 S1 t2 c9 N& Q
mcasp->regs->RINTCTL = 0x00000000; // Not used) }/ h& g* b( N$ z% I) ]$ u3 ]+ u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 B) l" Q- e4 ^, T2 T
: g& M, {2 Q; U9 ?9 `+ g, P mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
7 k3 G2 {# g6 r9 Y mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 v2 G8 G9 i8 O
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word8 r) D9 ?# ^3 S! `/ O( s+ a
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# @+ L' w V. A
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
6 w7 k) @; G) U3 ] mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, z9 a2 o' S- x- d mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 j- }( p8 F% b5 O1 i" @
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 |8 V i, q% C3 D
: T" R4 u( w/ ] t( E mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN Y# o9 L; |$ t# f# [+ h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
3 [" g* {6 Z: R mcasp->regs->PFUNC = 0; // All MCASPs
' K7 N" m- J q6 z { mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ {, M5 n- Y4 q- Q3 b/ R, O# S" e: K" q
mcasp->regs->DITCTL = 0x00000000; // Not used0 h/ |8 ]2 t5 c3 ~0 k
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ p @3 E$ R' b2 W4 J mcasp->regs->AMUTE = 0x00000000; // Not used3 Z% W" I) |0 W
. u t( ~6 e V1 |) T. u; H. c
/* Starting sections of the McASP*/+ d7 e. \3 |9 [2 d1 Q, S
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) |, r" _5 ^1 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : `; f2 s: @% h1 U6 Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 k$ @% S; }- y/ U0 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ M1 [2 I- i$ K" u$ v5 v) a& |
7 {) `) I) b/ J. C9 T mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. y2 P% y X1 _' q" q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 d8 \/ u9 j4 P' |8 N mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 w/ Z2 l4 e1 z( M- _+ I0 _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 }, V# d2 P! c$ p) F9 S8 e- `- c" _
mcasp->regs->XSTAT = 0x0000ffff;
# H3 C ?' p. B6 j W mcasp->regs->RSTAT = 0x0000ffff; ) ?+ q; R2 n% c
+ @4 J" N* e! D+ A: [ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 L: r+ q T1 `4 |2 _; { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" S+ w6 r5 {9 [% _" u1 }+ ^# b
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* z! Y @: b/ z* ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t, V, u/ O0 T1 \
$ y4 G: x) E9 R% x' {% A
/* Write a 0, so that no underrun occurs after releasing the state machine */7 X/ w$ ^0 k9 b! M1 d( D# g: |
mcasp->regs->XBUF5 = 0;+ g/ J# g+ k5 p
mcasp->regs->RBUF0 = 0;
9 ~6 B) m0 S% `) t' \) n, u4 f" j! d
+ a* \0 |9 r) [8 l( I+ M1 H5 @/ p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 h+ ~8 t% q2 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 ~. [+ j7 Z. ^; G6 Q. @
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 n# V& v0 v6 y" h* p while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. {: g" p& ]6 o5 G
/ A. o2 l8 l0 ?' u' e) S% t# U mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 F5 P- S5 K+ _8 p6 N4 Z" s, a9 ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
- ^9 l; x2 N( J( M mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" ]" e5 b" V0 G% ^; h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 Q; [% C9 ?- S2 D# }
1 i8 R0 p, N9 p, C `. B
CSR = 0x0000;
, S1 y1 M/ ~/ g' k* }: { INTC_INTMUX1 = 0x3d;
9 w5 G$ r( `. ?. \8 [) R ISTP = (unsigned int)vectors;
; e7 t+ P C! `+ z8 ]9 Q" ~ ICR = 0xFFF0; % h& ^; w! R. ?3 g) Y4 n
IER |= 0x12; # j6 @7 a7 S( J( L% v9 [2 v
CSR |= 0x01; , b! X- N$ G2 M; c1 z
* b( ^9 J& m& P) z; @
4 L) O: Z# Q. U4 {- _
1 z# |: A/ ~; s+ ~0 o. ]还有就是两个输入输出函数:
V! I& \0 Y- y5 F/ Uvoid output_sample(Int32 out_data)
; c, O) V3 i8 J5 [2 D{3 z; Y# t5 j+ h8 Y) v% n
AIC31_data.uint = out_data;
3 j: h8 g) c9 A) U MCASP1_XBUF5_32BIT = AIC31_data.uint;
" A, m5 k8 ?( K* ^& X9 {}
5 ?4 L/ V( o' X7 e x$ e. P9 n) [5 J$ w
Int32 input_sample(void)3 _6 Q( g% r2 W3 T& g
{
1 x9 O5 S+ s2 a8 R3 S5 R AIC31_data.uint = MCASP1_RBUF0_32BIT;
% d3 W$ P# z& e. x' C ` return (AIC31_data.uint);
, V8 {, |& ]8 r0 B7 a& J7 D; o}: G$ s, Z; W. ~0 c, T& V
" z; y/ P" T3 ~* r( u& `
|
|