|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& g7 O5 _5 X& ?2 y# z2 k8 B) q
main文件:
x" x4 q3 g, D6 Iinterrupt void interrupt4(void) ' j' h6 g, }6 i
{
# @* a$ X: Z# _& ]7 A" { `% q. A Uint32 sample;
) J: V" G9 g# g
$ _. }; e5 }2 C, G( I9 M4 O sample = input_sample(); // read L + R samples from ADC' \7 K4 r7 a$ x7 N( S
output_sample(sample); // write L + R samples to DAC
/ v- C6 N! K7 U! M* n5 Q3 J return;& `2 u6 g# X; F. C" I4 w
}+ N P+ O3 S- z8 U& v
2 g0 Y) D, v9 {2 b. f1 F- T) i
int main( void )' D, h& M( j* ^
{
* O* Q: c% I9 Z: f B! r: b3 T. k; n% N! t4 U5 P- }
/* Initialize BSL */
; }% U- Y! ~4 X5 f5 e6 L1 m EVMC6747_init( );
4 t% d3 H* c: R) w- q /* Call evmc6747_intr function */$ B- a, k/ j4 ]- B( u+ T7 P
aic3106_init( );
! h$ d* Y2 C0 i/ w* V while(1);
9 ~3 Y) b! J( o& ~6 ~ E6 B/ I" L}/ J: g! ?7 z6 k* ], q; w
$ K( E9 |. q8 _, B7 u
R' o, f5 K# Q' ~8 iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- R( B6 c1 Z; F$ j1 K7 h/* Initialize MCASP1 */& V% `- W8 Z, R! X# Y- J
mcasp = &MCASP_MODULE_1;
/ i* Y& X; v& G2 G% e: B$ n+ ~ mcasp->regs->GBLCTL = 0; // Reset
! O: O) \7 l6 H mcasp->regs->RGBLCTL = 0; // Reset RX
# c0 M8 ^5 B( z6 b* T. W; d mcasp->regs->XGBLCTL = 0; // Reset TX7 \. ~0 E9 H8 H/ h0 l! M: Z% Z8 C
mcasp->regs->PWRDEMU = 1; // Free-running
3 C% {: h# G4 t3 Q- ? // configure McASP0 receive registers4 Z3 v n/ V% P; N5 k: [
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% M6 L3 r6 o" a4 P6 k2 w
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( X/ ~6 H: O! N5 g* P. z6 z; q6 m mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- L6 j) Y2 {2 l* _ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' W7 B: Z: J: W7 I* O' y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ b F4 e! \0 R$ Z mcasp->regs->RTDM = 0x00000003; // Slots 0,1
; p5 I5 N4 Z" ]1 h9 e0 F$ Q$ r mcasp->regs->RINTCTL = 0x00000000; // Not used
4 H a' Y& W, l) Y8 i% w( \' ^9 P mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: D& g: Y7 F1 Q3 ?6 }$ Y1 a
6 ~* R, e) y& f( q5 u" r3 P& D mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 V* w, `( h* e! ?- Z. }: n
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" u+ ^* ~( \% @8 T2 o; x
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: k Q: P2 D. o mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 X f5 O5 }% } z \6 y7 t mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" V0 c0 G( i* b, ` mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ b3 [' ^" V) e- C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit9 q3 g& k2 N9 v9 d
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! ^" A: w/ t Z8 N- R) \) L1 |: P9 x
7 t$ Y- X) t5 }' B4 N2 s mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( \! |* C7 N$ y; ~4 R3 G! H- V! F mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
# [( @3 a+ x ^3 R2 C mcasp->regs->PFUNC = 0; // All MCASPs
; h6 K( X- G9 }, J. K+ C mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 n0 v K' a& U8 w
) C; ?+ ]8 {4 ^7 p4 R8 e1 m( m1 W mcasp->regs->DITCTL = 0x00000000; // Not used
' U7 e+ C0 c! Q0 P( D0 m' m mcasp->regs->DLBCTL = 0x00000000; // Not used; H$ o- Q) Q, K2 L, j
mcasp->regs->AMUTE = 0x00000000; // Not used' a& V* A( c% @* P6 X
. q) j+ z( I$ F
/* Starting sections of the McASP*/4 H: k2 s1 z8 k D. L0 H' }2 _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * v8 a9 ?; T% h8 n9 a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ u# [$ A0 i( D mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % T. S1 w0 R$ B1 y0 U0 n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; t- }7 i* `: A e* X# O9 {7 @" K! x, x! e
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! E) j& a) s1 |" {6 P! l0 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* [3 O3 Y& w! _( t/ I
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " k9 q& \1 b4 F' L8 H/ i" r
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 j3 ~" e/ v% I3 d/ l6 r& H
1 W$ m0 P1 I' t% G
mcasp->regs->XSTAT = 0x0000ffff; / ^ a# C+ _! G- R
mcasp->regs->RSTAT = 0x0000ffff; # B D: t% S( X8 Y* S
A" V9 Q# u6 K0 j2 o2 M
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 n; ~1 w, s }. p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; d2 @/ J# v+ T" x4 V3 J* `& A
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. [/ `! X/ z: h while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" E7 @: G( r) \5 Q
/ A, A7 y3 c( S2 y /* Write a 0, so that no underrun occurs after releasing the state machine */. B- t6 f9 o+ } N! S# u- g* t% n
mcasp->regs->XBUF5 = 0;7 u1 v. Y, I4 l8 l; _5 o& }
mcasp->regs->RBUF0 = 0;4 H) f3 `! S) I
) A; f+ q* y9 H' |" E, P! ^1 j
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / O6 w9 \1 `) F: H" G
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' o& A: \5 @9 X8 E3 S
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 s7 ]3 k ?% T! W1 j! S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. U) Y5 i8 g- p) g' ]' ~! N/ ]' x/ @4 k5 g v8 Q$ E+ c- b
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 z% f |) a9 j: I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 I$ i4 }0 m/ r/ ~5 J& f& Z2 A, D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 w9 c. K$ P, e* U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 M. W$ E' M: S/ d
! o# Y: y5 k% @3 ]* b CSR = 0x0000;
! @* M' F9 c" [- ?/ d INTC_INTMUX1 = 0x3d;4 j" d6 G2 n8 a, g! F D% ?; @
ISTP = (unsigned int)vectors;
" f4 {5 C% ^- R# x& H- l& A0 T1 M ICR = 0xFFF0;
Y+ F1 U; K" E5 h IER |= 0x12; $ W( o! W/ B' k+ _2 Q( m
CSR |= 0x01;
0 u1 ?8 W+ k2 V- Q8 H, Y
* Z4 _" z! b N9 {: K/ n& |6 E# q6 ^5 R* v J1 u
7 J% x. d4 K2 e$ o: b0 \
还有就是两个输入输出函数:
v1 v7 o9 ~0 Wvoid output_sample(Int32 out_data)
, b5 V: Q! Y) ^( k2 _- I{+ e- R R4 X: V0 E
AIC31_data.uint = out_data;
" @% B, j$ ^) {9 C. T% d) ? MCASP1_XBUF5_32BIT = AIC31_data.uint;) }( q( B# s8 h; e& n W
}$ _3 u+ k! \& M) _
& I ^" S$ i7 X, \, G
Int32 input_sample(void); Q, ?7 `; N7 L
{
# Y* b ~9 X* e AIC31_data.uint = MCASP1_RBUF0_32BIT;9 ~! k# q- ~4 S6 w
return (AIC31_data.uint);; V, o2 J1 S4 w* [7 v5 h* G
}+ B. g0 [; l& U3 i4 y9 O
3 Q: k' i. m7 x7 H& W |
|