|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! [0 T/ G5 \3 F! b+ r
main文件:" A1 `* G1 X/ p! \2 q: }+ @
interrupt void interrupt4(void)
. v q! ]4 R' v- L- g6 V J- V4 r{4 z2 f+ Z: h- y7 m% W
Uint32 sample;0 {- n* p; Z( k* _
, z8 Y' G, I7 u: u, R" f
sample = input_sample(); // read L + R samples from ADC
$ C0 g' U) c7 c2 u5 J output_sample(sample); // write L + R samples to DAC
2 f' Z }3 F7 d1 D3 Q F/ l# ] return;
( J }. u; N1 m8 ?7 m0 v}
) G6 z7 J# G. x$ q& c% O- N6 [9 @) T9 Z
int main( void )
1 H/ o0 d6 Q; K$ S{+ Z/ d1 h* L; }" L
" [3 z$ E" ^) \- R0 h* ~
/* Initialize BSL */& l) K5 t0 x6 H/ b
EVMC6747_init( ); }; O" n5 o( h7 G4 f2 F( Q
/* Call evmc6747_intr function */
+ Z+ Q: @3 ?% Z P( s aic3106_init( );
/ Y8 g2 J9 b1 K2 i$ M while(1);
1 s5 T. k5 g& Q- h5 V}
1 q. F( c: v3 a+ K! c. m) H
& i* |% V" k W# h5 z6 \9 k4 f
& \6 w4 E S9 x4 B. K/ v; B" K* Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
" N% b1 U+ N4 o3 u5 W r1 q/* Initialize MCASP1 */ R$ Q$ @: l& b
mcasp = &MCASP_MODULE_1;7 u* @/ K7 I& K' ^ }6 a- s1 _
mcasp->regs->GBLCTL = 0; // Reset
# k% K. _3 P. e mcasp->regs->RGBLCTL = 0; // Reset RX8 o6 I, F0 X3 a, f: U# F
mcasp->regs->XGBLCTL = 0; // Reset TX
- j$ i4 A0 Y M' N% L mcasp->regs->PWRDEMU = 1; // Free-running
# F1 ?, r5 U; q5 ~# s% t. t. @2 e // configure McASP0 receive registers( J, Q( i- y" K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 r0 ?! g# m0 [- U4 S. W mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 \. x, t) P6 _" m( X
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& e4 z: n( F* m9 ~& `) W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 } v0 X, O% ^9 D: R
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
! X F; a) f8 X, U8 e, y mcasp->regs->RTDM = 0x00000003; // Slots 0,17 d* ~0 q. G ^+ J% e1 \0 j
mcasp->regs->RINTCTL = 0x00000000; // Not used5 E1 { [ e0 Q* @" ~
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' d1 ~2 _6 k% i* F' @
% c s7 t$ z( t% Y' Y mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! L+ R- k% X e3 R8 A
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 y- z6 |1 T, m* f0 `
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* |; a, V2 s% N: |. o# ^+ Q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 |- l% \& I6 l- b& {" v mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK3 M9 l9 K4 W7 B5 ^+ a/ F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
2 A9 Q2 {" U& w5 d$ _1 k mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; s6 m( \8 k3 ] c1 K mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ [5 K- a9 u! r( y j
/ n0 Z% z$ @# r mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: w, K5 D4 b$ H$ l3 Z' Y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
' R2 r$ i7 O9 P3 Q7 U! @6 _) r7 T( j mcasp->regs->PFUNC = 0; // All MCASPs0 H# p+ d$ b: u* S
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( s k5 K" e+ ]8 j
% n) S1 o; C% K2 i, N3 } mcasp->regs->DITCTL = 0x00000000; // Not used
2 i! S2 X' U; M: \+ D' {" a mcasp->regs->DLBCTL = 0x00000000; // Not used
( h) l0 ~& }0 h8 o6 W" R1 Q mcasp->regs->AMUTE = 0x00000000; // Not used
8 P" O) b# a. D) L9 Y9 Z% e! t) N0 ]* U! ?) L: M: @
/* Starting sections of the McASP*/+ Z% B' a) V) X4 e+ d: I1 F; ^
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: r) O8 n- x% W' h0 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 b- ~/ D6 N, ~, ]1 t/ O8 Y mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 ^- N( p% C5 [: }3 a while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 d4 x' r3 @% L: B9 q0 R
+ V. U8 ?+ n0 ?( K0 ^+ s \ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; J+ n3 i$ L9 C# |6 J! [2 b( R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( C4 r1 l% _# h) O/ V& \ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 a7 @: \8 \3 D" Q1 k% H$ I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! R8 W" K9 X4 p& d; v6 z
- I8 u% M: X3 h0 M( x: h! ^- i mcasp->regs->XSTAT = 0x0000ffff; % e* F# p3 V" A9 S
mcasp->regs->RSTAT = 0x0000ffff;
( k+ c6 C" ^9 `
8 y' H4 M5 L- X9 ^$ w mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 Y- A: ^6 j% k6 x0 b
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 B$ m% W' m- n( n, ^4 L- h/ g
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 d; @+ |7 \/ f7 ]+ i0 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# A3 x3 H/ E) \. s) B! J
0 H. ~9 A: P5 j" Z+ ~6 o /* Write a 0, so that no underrun occurs after releasing the state machine */
. E5 L. r2 ]& G& q( p mcasp->regs->XBUF5 = 0;
* ]/ G( B" ~/ s9 {& H) |+ w mcasp->regs->RBUF0 = 0;
, H2 S8 F2 y- p h7 m7 a& ^, x, h
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ r, K% M2 H' e6 U. a: p9 y! @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* \: }1 E1 @% A) l7 O6 Q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / v4 f& ~0 a! k5 i" r8 `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ X0 S8 Y6 l3 Z7 g7 u* U2 I: Y m% K: \, u# B; }; R% S9 n; Q/ t
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) U% S: l7 C, K while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( Q6 v: v2 y* A8 w m
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & X: L& l! @9 j1 N' E
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 v A2 u9 d4 J0 i' x* _/ k% \% d9 P
. }, V7 l! k' p) c4 t
CSR = 0x0000;7 H- x7 P' x! _( t4 n8 g" _" M
INTC_INTMUX1 = 0x3d;
4 H1 _' H) h# _, U5 ^ ISTP = (unsigned int)vectors;/ K; q. O/ b* G& N5 [
ICR = 0xFFF0;
' ~3 p* G: \/ o# u6 T IER |= 0x12;
4 D6 E, C' i4 {* e8 l' \5 A+ @ CSR |= 0x01; 6 A. g$ c7 }% w# m
! Y, w( j5 D& E( x& s& \' M+ M* n
6 e1 |. C9 M& t" @, r
9 r, e, C. `: J$ B还有就是两个输入输出函数:
8 a2 \ S& h$ C# d2 Rvoid output_sample(Int32 out_data)
( B# @; }* `. B5 c{; s1 p% W+ w+ s" `: X! o) t# M4 u" f
AIC31_data.uint = out_data; & d: t, Z: j! x, |( k4 f0 C. N
MCASP1_XBUF5_32BIT = AIC31_data.uint;7 C& j$ n# v* D3 W
}
/ _! U4 l. t0 o" m) v H( [4 Y" c5 Y4 |7 \" ?9 m! @9 F2 Q
Int32 input_sample(void)% b9 j% F, [ }7 u# t# L
{ e. K; L( e( l/ z2 e( R" R/ H
AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 A# c3 p/ g* p1 [" [2 {' i/ Y return (AIC31_data.uint);! v1 `3 P4 _- c; C. [" |/ g7 R! l6 {
}
. V0 ]1 b' m. |- I( d! T5 w2 S! M: g$ h0 Z$ W6 e/ A
|
|