|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* Z$ S+ z( H$ i$ d. `/ m6 C; h9 bmain文件:1 w& z4 K; N% c
interrupt void interrupt4(void)
0 d* o+ C: [! ^ E{
' g$ G- S$ x# ?" V# D Uint32 sample;) A) V5 v4 I3 C1 }, ~9 Z) X3 P
& _) U' f" u- r" I# \ sample = input_sample(); // read L + R samples from ADC
* ^* Q( }% k: X+ {$ H, x2 N# Q output_sample(sample); // write L + R samples to DAC
; @" h: z2 v8 }. N* s: g6 C M: X( z return;. W4 Y- v7 ?% n: g# X
}
6 }. D7 w, R6 A; p# d, i1 r; v8 ?) V
int main( void )
/ H! z! S8 ~8 v1 C{
, r2 T- Y: w% f# e
0 v( [7 K1 k8 X/ y! r /* Initialize BSL */; G3 Y5 G- ^+ @# o. F, e) a
EVMC6747_init( );1 N- K/ N3 @$ h( Z: S$ b8 A9 w- o
/* Call evmc6747_intr function */. v$ @. h8 ]6 p; z' k2 Q3 m
aic3106_init( );
( X+ r R( O: ~2 X while(1);: _ I' K8 C, L2 h* @& ]
}
0 O: C4 ^& \5 q: M5 R
+ N9 i; {' Z, P9 N# {6 o
: p( j8 x3 \! d- C( O0 J, \4 ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* N" e7 O0 e! w9 w1 ^7 t/* Initialize MCASP1 */
' l" Y& v# o, d0 z( r mcasp = &MCASP_MODULE_1;
6 Q S, J+ C8 q5 e1 f% g) ?0 ~ mcasp->regs->GBLCTL = 0; // Reset! _% ^0 q" V& D
mcasp->regs->RGBLCTL = 0; // Reset RX
) V( h+ [! E" P- ~ mcasp->regs->XGBLCTL = 0; // Reset TX' Y% {& U* }( k9 w0 g, h
mcasp->regs->PWRDEMU = 1; // Free-running
( S' x F7 F n" C8 ^# H( t // configure McASP0 receive registers( C- s9 G2 h- h1 c/ `& {9 A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) @* ^, ~# U7 L# Y- Z
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. n$ {+ {8 D+ t" N- g! l* d# ?
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word. |: l) E( [- p& s
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
1 H6 i @$ a* J6 j8 ` mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# r4 h- B3 {4 u8 D: G/ }
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
/ [) K2 C. x4 q$ @ mcasp->regs->RINTCTL = 0x00000000; // Not used
* V, k9 W* l% d( A5 L3 j mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ k/ X* s# E0 i- ^
! [0 v, o \2 n- c4 f( b mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used6 z7 i! d' G0 p/ _
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' I V1 [! {: A( G# x6 g. h7 Z7 G
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 b, `1 E0 |* k# g0 o* L7 ^
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ F3 J( d0 O6 n1 J mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ V; X: T; C; y* B. d: p( I mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 V. D' X: h8 T' p. P1 m, d# I mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( ~, n7 L, t2 h. B1 P/ W/ c mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 c$ k( ~' j# W6 `8 y+ P! K5 ?6 ^3 @' z& i% W% O) L
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
+ ^* I. Q0 J0 ~' E9 l4 v mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT( @: f) ]5 I8 |, I- L) U% |. _
mcasp->regs->PFUNC = 0; // All MCASPs
% @$ `; v: C; W- Q; m& R mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- s; w4 P- Z4 J+ y$ t1 I
1 y4 A4 q$ U8 a( @0 v9 ?, |
mcasp->regs->DITCTL = 0x00000000; // Not used
3 N0 w1 J# w6 A& O mcasp->regs->DLBCTL = 0x00000000; // Not used8 R& F5 d' ?; [8 q( _; h7 {
mcasp->regs->AMUTE = 0x00000000; // Not used
( H) T1 H g! l# d3 z9 O# q* ?$ P( {& F2 T6 f
/* Starting sections of the McASP*/
" B; H z$ G( f mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( ^( G) r( R0 @, d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ! [) }6 f0 I& t% }
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 n2 g( X" m" g$ t( R4 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ~& j! F A) c3 K6 ?+ ?9 `* U) x
* h x% L0 f3 ` q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " S1 }& S/ A5 i( R' Y, Q. y0 b8 M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- {" G5 @! s2 ]% a1 p mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; E; `! z7 C3 [9 w6 k- R) u( s* o' R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) ~9 ?( }9 p. F7 z/ g, S* d9 n7 N
3 f0 X1 s' q$ c y, v2 B mcasp->regs->XSTAT = 0x0000ffff; 6 e* d# a8 A K
mcasp->regs->RSTAT = 0x0000ffff;
- i. @2 t, X/ j j" t; i [6 x% k# ?9 w% ]
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 E/ S+ h- Y p5 \% j. U- m1 Z' j: W; D: O
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' q" o/ X c4 o8 _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # n3 Z% j1 G9 B' h5 M/ p4 R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 n0 [. P" m: L, F4 x9 u1 {7 ~. L! r3 g2 G: e
/* Write a 0, so that no underrun occurs after releasing the state machine */
2 g4 H5 c$ f4 i6 p [/ ^5 ~ N3 d mcasp->regs->XBUF5 = 0;
8 R% v `4 |% `$ i6 c mcasp->regs->RBUF0 = 0;3 B; c9 P+ d, P1 y/ X1 _9 u/ q
r: l6 V3 L4 k, L
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : x7 l* u* Z/ ` u7 `0 _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, v5 H9 ^% H+ m# u4 |
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - M3 S. B2 ]2 N9 W" W+ Y! L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; ]) v9 ~9 e6 k2 B+ Y1 v! O6 r) H) E
0 J( R% \. n2 W' m) n mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 T c9 u& u7 s+ \. W; e
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 B4 r- E# H6 k+ s4 L# d3 @ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' M# ?) j: U8 f7 t" O v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 a. h# L' U1 B+ o4 W4 e
9 l# k4 t- k' Z. Y: f/ S CSR = 0x0000;
+ c( b1 a% s* m& p# |; h) o6 c( C9 [' l. L INTC_INTMUX1 = 0x3d;2 R. Z# G. W, G: z4 {# {0 {5 u% U
ISTP = (unsigned int)vectors;
t5 G* e s0 }; o ICR = 0xFFF0; ' v. a* z- F. g; r. ]* k$ S
IER |= 0x12;
. r- X% }2 q0 L$ h CSR |= 0x01; 4 x; L4 l3 L4 s
2 |3 b( z- Z1 o, R# e f4 c
* d7 \" I! P! r) z1 d9 H. S, k
* w8 _; l6 y6 m. C; m- i还有就是两个输入输出函数:
" }8 P$ x. E' ^7 _/ ivoid output_sample(Int32 out_data)8 G: Y0 d/ g8 p9 w! s. [) v; G4 e$ X
{
7 H, N# d9 e+ V$ R1 B- a8 ~ AIC31_data.uint = out_data; 7 l% o/ Z$ J$ \9 @4 d# V% H
MCASP1_XBUF5_32BIT = AIC31_data.uint;; M; ]+ F1 c! D& o
}
$ a/ k4 c4 F1 z( Y
! A% K V- ]+ IInt32 input_sample(void)
) s% R, s; E0 y2 X+ M# V' \{ . P1 y8 A( q0 Y0 u2 c3 O
AIC31_data.uint = MCASP1_RBUF0_32BIT;9 w* e9 X6 @$ V
return (AIC31_data.uint);
5 L$ d% q# n8 ?1 s0 V. o}3 n5 L7 B2 u1 C+ S8 Q9 ]
( I! ]+ f- h# s Y
|
|