|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: Z _, h& o% t/ V$ {main文件:
7 P" R+ d$ ~& B% ^# T" c/ Pinterrupt void interrupt4(void) * ^$ O1 d- T3 _! t, L _
{, `: H3 V& j1 e8 l/ T
Uint32 sample;, g9 [9 J# C, u% _; @# f9 o$ ~
; J) @0 g3 ]0 D y6 g sample = input_sample(); // read L + R samples from ADC9 U0 P* k; s/ d8 z; N" E3 R
output_sample(sample); // write L + R samples to DAC 3 z$ N, T) @% H/ W, n3 \
return;* a0 R+ w a# b3 l
}
+ C4 M5 h' S- C
# p7 x) f* `' d- y1 Qint main( void )
( _" ]! R# J Y) Q- N{
5 K5 l: A7 B) I2 e' m! K2 W: a) x9 f1 r4 O# e
/* Initialize BSL */( F P7 k8 \- c* D
EVMC6747_init( );
& ?/ H4 k4 A* e8 j# e /* Call evmc6747_intr function */
" x5 _9 q5 W0 ^1 F! w7 F aic3106_init( );5 K/ [: U& B, R5 H9 `
while(1);
* `8 h- m) L! [- t! z6 m5 H}5 K9 u! m* T: p' r; f5 ^
* Q _ g& r0 I; G4 @0 e( w
- w' i9 Z; ]. {1 {9 E8 {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, k1 \, d/ z" w$ {/* Initialize MCASP1 */" m' O1 D7 z$ i
mcasp = &MCASP_MODULE_1; O7 E9 n! Q- S( c9 v
mcasp->regs->GBLCTL = 0; // Reset
8 x: {/ e+ A2 F9 b$ F" z8 a' f mcasp->regs->RGBLCTL = 0; // Reset RX
R: \$ G" P0 k* i3 O mcasp->regs->XGBLCTL = 0; // Reset TX
& ?3 }$ Z- t% w& d mcasp->regs->PWRDEMU = 1; // Free-running
/ H! R: Y# N* H ?) _! \2 b // configure McASP0 receive registers
4 ~- V7 |( B4 [; V( Z5 H mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) \' \ [8 Y% e9 V+ K `0 s' L mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 Y/ c3 T% G! B* Z8 z4 v
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& w( v, D$ q/ k! y) ] mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 T. a( [- l. R/ t. S
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
) M' \/ D2 C+ J/ d mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 i$ M1 K% ^* M, t4 _ mcasp->regs->RINTCTL = 0x00000000; // Not used
7 i. }! ~" P6 q4 |3 @0 c+ Y9 v mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ P! Y6 X- ~+ l
: @* n9 |3 r! ~
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
4 S* Z k5 `" A; Y9 M mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 A. D; W" z; e/ p) Z
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 n) N6 x+ \4 k& K9 T mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- C! H5 D% ?* s a1 ] mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* t7 s( v) N3 C& J( F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) g( d) e+ b8 U+ B4 G mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 X! u: |2 Q$ _5 W) | mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# c+ k: E4 p" H/ h' N
" }" c) u( h9 w/ M mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
. A) Y' E" G" A4 e mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% [: A4 C* |; e' @. K mcasp->regs->PFUNC = 0; // All MCASPs" n+ w, \9 p! ]" [* N
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
% _. D0 D% }: t+ C' @( v. y/ S7 g, n" n
mcasp->regs->DITCTL = 0x00000000; // Not used5 `9 ?; n! M) F/ T @1 u
mcasp->regs->DLBCTL = 0x00000000; // Not used
% _9 _& \6 c6 K9 ]9 ^+ P$ F% s. x mcasp->regs->AMUTE = 0x00000000; // Not used: G) i# ?$ ^* m) M
1 A- @+ o9 F; q; K5 o( s# u/* Starting sections of the McASP*/7 ~; W, r/ Y1 M2 g
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 S1 Y K& R0 p3 b8 o* } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 P/ d! L" r, v% n4 s" Z
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) z: S2 }4 C% Q! |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' ^% S/ R# f- x
' W! t9 C+ k( O: r mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( o" G) H* G8 w8 c; `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 v6 ]5 h* C+ s" U5 D% C& y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 9 S, f T! F: K6 b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 f$ V2 W# ~ S5 S' w3 r/ g, T& M! f2 h: l7 [
mcasp->regs->XSTAT = 0x0000ffff; 6 n% Q* j5 m- I1 H7 x/ O: ^ r
mcasp->regs->RSTAT = 0x0000ffff; 7 Y" l i! O$ S8 T! }
6 m. R3 }: b3 y7 L5 A8 s mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, w6 K/ t1 a% n O0 a: M5 i while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! z2 {) {0 z" ]: N! J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 y, ^7 \# v5 Y! e; ~5 H' j, ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 B, q9 X, G8 `& L
6 p% L% }( x# P/ c* q t0 L /* Write a 0, so that no underrun occurs after releasing the state machine */6 N9 u' l! L! N u; N, U
mcasp->regs->XBUF5 = 0;
) D/ K- R8 M: S6 Y, j2 H mcasp->regs->RBUF0 = 0;! F) g' C' U, W _- h
: B/ _$ ~+ f4 V6 P! ?% d& Q4 i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! Y+ y2 s2 M0 W+ U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( ~7 F' f: E* p2 X( K" j1 M% q mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 b4 v2 U2 ~9 v& l- F% [2 M7 S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) ]# k; {7 N( \9 H) [; C! ?* w# T! h3 J8 h7 F ]! C
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " j3 N/ O/ l/ o) p4 s. J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: U* y/ ~+ t1 F# l" o: t mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 G) Z' A; B: C4 U4 N5 G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
! b$ p/ v+ s8 |" f, _+ c# i$ C+ [- ?5 ^
CSR = 0x0000;$ `( d, H6 c- T& H! [( @# M6 I4 U2 X
INTC_INTMUX1 = 0x3d;
) `8 S b1 {' \; ]% e! {7 r ISTP = (unsigned int)vectors;; }, s2 z! l( x( q+ s8 N
ICR = 0xFFF0;
) C: }( t3 W5 `5 A) e$ H# z% a& S IER |= 0x12; " O2 w) F3 x: ^8 o
CSR |= 0x01; 8 ]- S/ e, E# j) E; m
$ w1 I2 H/ Y5 J/ C9 r, S! S- w; Z2 b
& v ~5 O2 |6 F% U, K, o- b& v& n- {9 d7 X: v' [
还有就是两个输入输出函数:/ u1 \- [! Z, S, E& T
void output_sample(Int32 out_data); T- u1 t! W# o6 ~* R4 P% q
{2 m% I# } O7 ~5 ^: v$ q
AIC31_data.uint = out_data; # q+ }3 J) r: ?, w
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 Z" ]% x4 h: }" ]+ Q
}
. C- j+ p+ `; Z! _9 s9 i: A" P* g6 L) k3 [
Int32 input_sample(void)+ d. L; A$ X, i9 n7 Y
{ : _; t! x- t; i
AIC31_data.uint = MCASP1_RBUF0_32BIT;0 f5 w1 B( X: ?. p6 x. e
return (AIC31_data.uint);* [( Q x: y; o( r" A) K
}( g& X- N9 I4 b6 G' U& m
2 r4 @/ p [) t% @# W
|
|