|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序: ?( Z0 k3 v7 C/ r8 r. [
main文件:! X' E8 _5 l- e2 I( j. f8 S. A4 J
interrupt void interrupt4(void)
5 |4 H* q6 {3 E+ ~+ D: }. V{
8 }0 g' p) G# r Uint32 sample;6 ?# ^* F& F: @* R& W# @7 I
- u+ _: g' t3 Q
sample = input_sample(); // read L + R samples from ADC
9 c8 y, u9 S/ s# E6 ^& J% W* V output_sample(sample); // write L + R samples to DAC
- d' J6 B" g5 q$ E9 f return;; H# X q3 F5 E
}0 d5 a+ R7 z# K [8 [
' f( a' _, |+ q0 ~/ C6 U$ fint main( void )7 c, T4 y* ?. b! T; R* a
{
5 \) @- O$ ?& t" o4 u" N
' E' U% }8 N+ ~# w /* Initialize BSL */
/ e/ l4 S2 Q3 M' M+ B5 t/ s EVMC6747_init( );* M$ C9 S1 G0 M7 t" w. u' O& {. x
/* Call evmc6747_intr function */
! u5 R- a$ H9 @4 \7 s+ l. X aic3106_init( );! p2 ~% E# _, \" @
while(1);5 h3 d, H4 r2 }1 f. y" L" h
}3 D W) \0 K/ O+ |# z( t9 `
( R* S$ j1 e/ z! W
& f. i$ q _& A0 j: [" }0 ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' U' y4 e/ Y7 |9 F3 v3 `' u6 A/* Initialize MCASP1 */( h7 D2 j8 M! i: E+ s
mcasp = &MCASP_MODULE_1;2 q( w7 |1 T! e' ]
mcasp->regs->GBLCTL = 0; // Reset* Q5 z! m# E, j# L! D
mcasp->regs->RGBLCTL = 0; // Reset RX3 Q D2 `% L" C* k% \1 G
mcasp->regs->XGBLCTL = 0; // Reset TX! b! f2 L d) n- B' y8 ~7 ]
mcasp->regs->PWRDEMU = 1; // Free-running
! a' M( f$ I5 U0 b: M/ Y7 c; _/ v // configure McASP0 receive registers
: k( s! p7 o T4 H; I7 L mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
5 M' Y9 l3 S. C mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 ^+ @: x: ^! c3 ] S mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 q7 m' t& I( q$ {0 u mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); s2 a: S0 ~! G* p& N
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ e/ j9 `4 c9 ~: {5 q5 v, i9 y; y mcasp->regs->RTDM = 0x00000003; // Slots 0,1 e* l" J$ U6 i! U6 P1 F9 {7 e
mcasp->regs->RINTCTL = 0x00000000; // Not used( Y7 A1 q e" l l' n9 x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" W% f: T. |/ @& J! x+ n8 ~
8 q7 \+ h7 A. @+ K6 b, ^( h# X mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& |( l; f4 j# g! S2 r& u5 _ u* r) K( N
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' j! {7 Z+ S5 ~5 T% _* h
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ C3 W" Z/ v ^) m, J9 S7 E
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ {8 m8 k! }3 ^3 a
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& K4 u, P: w2 R6 q) v8 L+ z mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ O; X6 x; k+ [; j
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& m$ }; Y: X( G& E) ?
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! l9 s+ h! z$ C
7 q! w! X9 A) S% _ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
: t: p L d/ ~5 Q, ] mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT, E5 |) b+ O' t4 ?% R- @
mcasp->regs->PFUNC = 0; // All MCASPs; K! o" F0 i: P" A1 r( S% \2 u e
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 Y8 p. s& t \) |0 V
3 b8 @" D/ @9 O# R mcasp->regs->DITCTL = 0x00000000; // Not used
, r4 l7 ^% H/ m mcasp->regs->DLBCTL = 0x00000000; // Not used
& Q0 \3 I+ g4 ^- i' I0 H mcasp->regs->AMUTE = 0x00000000; // Not used
! A4 ? L; ~# _' Q
2 B, m5 i1 C; L3 J/ D/* Starting sections of the McASP*/
% u" t3 L, l: o- m7 J% Q mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 n- h. E* Z3 J* G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); : b" C( g5 t( v+ e
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
L7 v3 D: `+ j: ?, S4 Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
j& V+ d7 @9 x9 N/ j6 P8 ]7 k: y/ }) D! f3 k" ?- l
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 U, I* B, z7 k) t* F8 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 O, b4 d; b3 t7 `
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 E8 z/ u8 q4 N5 y& N! }" i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* c8 L9 n2 ~' W0 K e! \
; t8 l9 j$ m9 g( I7 t mcasp->regs->XSTAT = 0x0000ffff; ; b. n& |5 x2 ?$ W
mcasp->regs->RSTAT = 0x0000ffff;
7 a$ g0 B" i3 F, A& c6 I$ p. j; L i; _5 g8 s5 l0 o
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 K# W3 T: p/ j. Z V+ _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! D9 | u9 f3 r8 j mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( p, ?' |* a$ z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# s+ h! Q+ C4 h0 u) Q
1 \) q" p" x5 w; [* S: q+ | /* Write a 0, so that no underrun occurs after releasing the state machine */" Z' y3 t# J3 p1 r8 o& n9 O
mcasp->regs->XBUF5 = 0;3 y4 S- v+ r9 i8 F7 X, [, d! d
mcasp->regs->RBUF0 = 0;- M6 H9 F4 e$ _3 |6 T8 V
' V' O$ T$ f2 p- V' _ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 _7 t" o# p& C5 ^; c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% d/ r2 n' }* G
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # w: Z, R# \1 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: m2 r/ ^# z( D/ G; `0 x
( @' {# B- T) W# q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + v) ?/ N6 P; p3 G6 s" i7 j# u+ J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 h- h4 }# C' ~" d) v mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. u6 r) n+ P5 r! o% ^6 P' J. { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) k5 a2 v% t }' l
$ \3 `6 t( V" g) z. x. x! _ CSR = 0x0000;
6 D" a0 w- K2 l' z INTC_INTMUX1 = 0x3d;5 J# g+ @5 D$ x! s) x: q
ISTP = (unsigned int)vectors;
( [& b, F/ a2 j8 b5 C+ r2 t+ F0 t; x ICR = 0xFFF0; & e5 ]- r/ _' T1 I5 ^) w' u7 \8 l' k
IER |= 0x12; ( r: e; b% F9 A( Q; W
CSR |= 0x01; & ^0 U. r1 i8 E2 A
Y7 q3 o4 V4 \: I
* u. b. u" C9 {/ a X6 Q
5 c N" r7 m0 ?还有就是两个输入输出函数:
; ^1 J+ O+ h& f5 zvoid output_sample(Int32 out_data)" D: F% ~+ K* K$ [+ ^4 X- {
{1 U( b; K: ?/ [ G7 y0 m; f2 \
AIC31_data.uint = out_data; 7 r9 d3 f1 R4 a( S$ o3 K- r' \
MCASP1_XBUF5_32BIT = AIC31_data.uint;
' Z4 H. l! _5 G3 D" s: R}
$ @% m1 I# L) ^8 ]) P- G- w; N2 W2 |4 l9 r
Int32 input_sample(void)
4 W! c( o& S0 F. }{ 6 I, }$ s! g7 Z! ~
AIC31_data.uint = MCASP1_RBUF0_32BIT;
: f6 Y* z* Z* g* V! Q( i6 p return (AIC31_data.uint);0 B/ J, V" X r
}
* [( i. x1 l. C' T0 H2 B
7 y- U* J4 z; Y& F7 b& I: M, m |
|