|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( p$ {1 y; E! Q9 P1 J5 Ymain文件:
! U" U$ A, R/ c2 S& w7 J' |interrupt void interrupt4(void)
7 j( B' f! z' S0 x% t% s{: l: K) G* R, _
Uint32 sample;
$ Q) P. \# m# b, N5 u6 N. |0 N/ B( X% W" K! f+ s1 _( y
sample = input_sample(); // read L + R samples from ADC
6 C: ^5 H6 N6 ~1 L5 q5 J output_sample(sample); // write L + R samples to DAC
9 a% H5 t _' t* N return;
! m6 n2 R: a- c, _9 w! O}1 L A1 x" o+ D+ H; r ^
9 p `* H$ M. [% w7 ]5 Hint main( void )
& }# }& V) T. W, g& C{5 S% [; V; A: ]- z" |/ D! q t' y
, L( J: F0 m! G7 i" C' }3 b /* Initialize BSL */
( Y6 B, T* u" E0 O, O EVMC6747_init( );( Y8 b3 @8 u4 q1 A0 N% u( Z
/* Call evmc6747_intr function */
0 e+ I- h( H* z aic3106_init( );
, L' |: h0 d8 ]: N while(1);
9 ~) J- n1 n* u/ a}
' J" m+ L) \* z+ v/ J% Y
+ O, x* v* W' `& ~% D: T: m3 M$ |2 f% L( _4 N' ]& E. f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: z0 e3 s4 f( h/* Initialize MCASP1 */; g s6 o, k" k$ y
mcasp = &MCASP_MODULE_1;
: c( p0 r8 y3 d5 z* w mcasp->regs->GBLCTL = 0; // Reset
V2 I8 `# A6 h- g! a! T mcasp->regs->RGBLCTL = 0; // Reset RX
7 q2 h7 Z/ Z; t4 y$ N0 Y$ s; x mcasp->regs->XGBLCTL = 0; // Reset TX! P9 s, O8 P) v3 T6 i0 C1 ~0 T9 N. Q
mcasp->regs->PWRDEMU = 1; // Free-running- M% J+ I" D' k/ H8 J6 U6 W9 O- }- n
// configure McASP0 receive registers( y! @$ p! x1 h" W9 r) R: @' l
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) d% X- H3 K1 D1 ^1 G- O; [
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 g6 I. D( @9 p5 R1 O; q7 e, o mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, |, ~( Z3 K3 X0 t- ?- |2 @& z$ ?/ o mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( q2 R6 H0 V: j2 z [* P% T3 A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
/ u+ V/ g2 e/ o: L mcasp->regs->RTDM = 0x00000003; // Slots 0,1
* Q- V: [5 h/ p" E9 N mcasp->regs->RINTCTL = 0x00000000; // Not used+ U2 _" `' U5 V
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* `" S$ g% r1 h# B* i. L- c
5 z: j. _1 \" ?9 \8 z mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
% [& X( _) h; M, g( J% | mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ P4 p' m3 |+ ]
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 y$ o( T/ b% Y- d3 z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 F! c( A: `( x, G5 I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
* r/ Y1 i. q4 X) G- D1 a; U mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) }8 j" T0 ]$ U$ A mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit" k" X9 A# U' G% P' C( X
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 _2 q: A; G% @4 \7 o
8 P m0 h3 N/ n: a- \; Y J
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN, k) Y+ v3 J9 X" c4 \
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) h+ i( j2 Z- ~. Z0 w2 F5 M mcasp->regs->PFUNC = 0; // All MCASPs8 G5 ~2 z9 M, m# E5 t6 b9 g
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 p# k0 P, Z" O+ V, x* z7 ^
$ S% ~& i% j4 \ mcasp->regs->DITCTL = 0x00000000; // Not used
" E D/ v* u/ d! R4 r3 f1 V9 e: J mcasp->regs->DLBCTL = 0x00000000; // Not used+ }+ d& F7 G/ d
mcasp->regs->AMUTE = 0x00000000; // Not used
: X) k* |$ }/ t! n+ V. c
0 I3 u8 c9 T) W; F7 i2 n/ S/* Starting sections of the McASP*/
4 o, `$ g5 B; q, b mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ ~' b( x9 I! j% r8 F6 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! a d1 T$ h# [, K* R4 T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 s6 A! n# ~ e& W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );7 z* X# s2 ?8 r0 J0 h! |
6 f) G9 _, _1 A3 b
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , T9 i7 b* r; D% l. i$ @
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
. j8 R! X$ z' e5 n# }" P* O! M mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" t- t G0 i/ d; }- x- T9 s6 b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \* R" [5 H6 k3 `
4 E, D' R. c, i0 u: c3 H mcasp->regs->XSTAT = 0x0000ffff; # ^9 a% W. X* g+ v
mcasp->regs->RSTAT = 0x0000ffff; 5 T8 F6 g& g5 `7 `0 b- R6 n+ G
$ \9 E; h3 ^, Q! R! M: n* S* o mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON; h- j7 V/ \# n, R& a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 E _7 a& E) } e3 e( q" L& @# |
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: L7 h( W2 l8 D# Q# \; q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" m, o9 j# A0 S9 B9 P7 m+ L5 E
* j! D8 N8 B- K, ] /* Write a 0, so that no underrun occurs after releasing the state machine */$ v9 H! c+ m7 n a: x9 a/ n
mcasp->regs->XBUF5 = 0;5 N- M+ i! Y# J" R* n3 G
mcasp->regs->RBUF0 = 0;
2 Y U% h/ P" f+ h7 S t" M% H/ f; t! a
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' w. v+ d4 b& v' s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 q" w! \/ l+ Z! k
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 ~: S$ Y+ q+ i5 l. v$ L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) r2 o$ K I- s' S9 E' f
- X+ \' t# \; J8 u% e( T2 {
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; ~ {3 i, l+ p" Q! L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 y0 H8 ?3 Q$ t4 S' j2 s4 \ mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ ]' Q0 H; y! \# ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' p. D, k9 D5 Y6 X# j8 x- U" I4 r
) [" U, j) @/ o CSR = 0x0000;6 m' D0 G' w( E( b) ~
INTC_INTMUX1 = 0x3d;9 ]2 K" ]1 C5 h( G1 o
ISTP = (unsigned int)vectors;2 G& `' }# z* k2 [/ l/ v7 g
ICR = 0xFFF0;
! \ F: M; {! y) {/ [2 R IER |= 0x12;
0 m: v4 v# {8 R/ U6 K. G CSR |= 0x01; ( @/ i) `6 i# z* }
+ h/ u; W' M- t( L4 ?
2 W) K. t. O$ E' T4 Q( @3 Q4 f
: l/ w, `6 V( r1 z
还有就是两个输入输出函数:+ d& p$ U# t) T% L
void output_sample(Int32 out_data)
' y. E) y- g; I# I{
- P6 h- W/ n, M: b& \: t8 I AIC31_data.uint = out_data;
" D; u5 g" F5 n4 w* \ MCASP1_XBUF5_32BIT = AIC31_data.uint;7 U2 \% H" D; |5 j( V
}& f' N4 p- m0 b: }0 J
9 k2 s9 l3 C( y4 `0 @( s
Int32 input_sample(void)
& h q2 p' i* a8 z2 j{ 1 l( _- j6 q- y) g8 S
AIC31_data.uint = MCASP1_RBUF0_32BIT;
% G) C3 g, S; q return (AIC31_data.uint);
: r7 m# o6 I2 e/ m}
/ A! {* Y6 t- d5 K* X3 m* k9 T
|
|