|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 T6 x* \( M+ Y) j! {
main文件: p% }2 n2 l9 m) Z5 M5 F) g
interrupt void interrupt4(void)
/ v& r, R0 m; x: b4 t/ s9 q{
9 W* d7 b% K( T Uint32 sample;
`; O7 s* P4 A, _
9 d' O9 c# b( m8 S2 ~3 M sample = input_sample(); // read L + R samples from ADC
3 }# @* M* P$ r7 h* g output_sample(sample); // write L + R samples to DAC 3 B" a2 t/ Z- ^# w( r* f
return;
5 _5 S8 f3 u; X5 x. H5 ^+ {# D}
+ ^& x* R* O* j/ a; B( c( {3 i
5 a! X2 h J( n0 P4 x4 hint main( void )- j* e; S5 L+ Q# w5 }3 a
{
, N. i0 t3 I t, `# o/ @# \
$ L% k( V$ ?+ ` H /* Initialize BSL */" X# I) A+ t q; B6 z& m; u7 E
EVMC6747_init( );
$ \" G4 p+ k9 n3 M! W /* Call evmc6747_intr function */
% j* C5 h2 i* a. y8 e aic3106_init( );+ \7 T9 `" v2 r6 Q0 D W
while(1);! _! x0 l, b# v) ^( _* c
}0 a. @: B. K L6 _1 v+ D
( o" n9 B' F. N" V+ h1 z; s( r0 @0 W- T) V" I* o: p) [( X
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 g$ V F+ w! L6 s! B/ ?
/* Initialize MCASP1 */4 \1 i: d$ h$ ~* y) m" _6 W
mcasp = &MCASP_MODULE_1;. m! l( V/ E" U0 @9 i" X* d5 u: Y
mcasp->regs->GBLCTL = 0; // Reset# m" B3 q/ d/ i& i* L5 J' ?$ u
mcasp->regs->RGBLCTL = 0; // Reset RX0 c& z* j4 M( o# m8 T9 Z- y
mcasp->regs->XGBLCTL = 0; // Reset TX c n6 v1 n% i. p9 o: _
mcasp->regs->PWRDEMU = 1; // Free-running
- a' s, H3 y9 q1 g ]8 E2 {8 @ // configure McASP0 receive registers
6 s7 P) C6 b: @ mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
* v0 @# r! N% z+ c$ M& @ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" K0 K1 m. r1 U& v4 f' k; m! w mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! I1 |. I9 {# m! n1 k! C4 O
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 g8 r) P2 e8 Y/ _0 ~+ h1 _4 Z
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% r) s: T1 C! D8 U% N; ]
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; o# ?# d5 O! b, j mcasp->regs->RINTCTL = 0x00000000; // Not used
/ V4 t; \2 e5 L5 V mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; r! Z/ D' b& S9 a# b3 F
% W4 G7 `/ E4 p/ \- \7 b7 [$ w$ j mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 S% x% N6 J4 |3 W) V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! S2 H; Z! n( j mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( f- v- o) o/ M) _ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' b0 u& t* h) h0 m7 a A2 U2 l
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK6 O* x2 x; j, N: e7 J- M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& W* i4 H6 Y; R/ t6 j' G6 p mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
) {- m, u" a' U8 x( s; z# a" B' e6 ~ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ d+ {! c. O% d
) P' J% y7 H Y: Y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- `; m# ^( Z% {8 ]. N: W5 D# r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT+ ~' V: y8 ^( R
mcasp->regs->PFUNC = 0; // All MCASPs
$ i5 } e2 a ?3 ` mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
x4 O [$ b' j' `2 H `2 C5 h# q! _ P! V' C5 ^ v
mcasp->regs->DITCTL = 0x00000000; // Not used! b8 `6 G! Q) u7 A: U
mcasp->regs->DLBCTL = 0x00000000; // Not used' B' P: U' S5 d% H& | k9 D$ x
mcasp->regs->AMUTE = 0x00000000; // Not used5 _: b* e0 J0 I& K6 G
7 `0 ~) P. S8 \/ R x3 F
/* Starting sections of the McASP*/
7 Y: A" q) t7 f" `8 E; H mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 0 i, N6 B/ u8 g, }; B) I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ W" P$ r& s, Q' L2 I mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % g, A, C6 A ?9 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" _' x9 O) E$ C/ E' c+ h) S% s
7 x( e& \ t( V- z( F6 s
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 V' f4 Z6 I0 L. H; E. c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' W8 Y; q1 F" X
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& ^* ~# f4 t; {4 z, X+ ]( Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ j* {$ W% E- |3 j( @1 H' V! u0 d
" K R Y8 ?1 _% V8 j9 J0 s3 n. }. b0 X
mcasp->regs->XSTAT = 0x0000ffff; u; Z4 e" c- L! t) U" F
mcasp->regs->RSTAT = 0x0000ffff;
% f# ~2 o1 j' i$ d, s5 n0 E$ w* s. q" B$ G7 K
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- k! z2 s( F- e* y8 ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 i0 y- ]* C9 X2 D& A! W. T6 ~
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( H3 U1 e6 i: e3 N: ]4 ?2 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" { v# v! K" |' d( {- T
1 }9 D, M f$ T! l9 F
/* Write a 0, so that no underrun occurs after releasing the state machine *// c5 I' e, x7 ^# r* c7 [, w
mcasp->regs->XBUF5 = 0;
5 U( |9 K3 ]4 d, U) ?- Q5 ? mcasp->regs->RBUF0 = 0;2 Z& d8 _9 v6 N. C) g+ @, Y/ n, G
4 w9 D; T1 O& @. C6 T( |
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% e; n/ I. L/ {0 G0 ?* |0 V1 Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 m# j, n1 j2 j3 G3 v4 X+ E2 v
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 ?) {( C+ s1 T3 s* F7 o z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* [! @ [, q6 ]; Q, @1 @
' ?- z A& \, f, Q+ t# q mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 ]1 [3 f8 A( t+ x. o& C3 r6 R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 E1 f. y' p- B% {# u8 M
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) O$ r; R9 @# s* Q& z9 d; _& j$ {
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 n A; O$ y0 h5 S, d- c! C
3 ?) B# w- I1 J! e
CSR = 0x0000;# G/ ~/ F* e' Q
INTC_INTMUX1 = 0x3d;
. f7 A4 q6 O6 Z% ?8 ^ ISTP = (unsigned int)vectors;1 y5 Y! f. k8 A" z) d
ICR = 0xFFF0;
/ E/ W% \# Z& |' p5 j. i IER |= 0x12; 4 M, F7 L8 r6 `$ j( e- z6 B
CSR |= 0x01;
a& L8 t+ W+ K3 C% P
4 V I3 J6 [" [) e% T2 |0 [' A) a# n# x
7 r/ v3 m2 ` ~! A# X: \$ P还有就是两个输入输出函数:
) W7 D4 U6 S6 Y& I0 \6 \6 Xvoid output_sample(Int32 out_data)
1 T: o! ?" g& J9 a4 h{ r/ u9 h# J G
AIC31_data.uint = out_data;
4 n. d5 }9 R1 L* @7 F/ a) }6 I MCASP1_XBUF5_32BIT = AIC31_data.uint;+ K. [& H5 b+ M
}
}4 e& q; _1 ~& G" ~: k5 T
b/ R! g* Q; FInt32 input_sample(void)# `, _8 {$ v) S! Z7 Q6 o4 @
{ U5 ?- y! C" T C
AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 e* j% j' w0 j' Z7 C3 t5 R return (AIC31_data.uint);4 y, M! m9 x9 M4 ~
} n& o( h( o0 l' v' J3 t
3 R5 i7 l8 D! u
|
|