|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 C$ v! P, V D
main文件:0 q% x3 q, O, S, b$ ?* l. V- @' w
interrupt void interrupt4(void)
+ P! w/ H2 i" R% f{! u, q* u& k0 C9 h$ e
Uint32 sample;
( j3 s k, Y" t" H6 E5 k1 s
3 U, N% Z1 c; ^$ z) \, w sample = input_sample(); // read L + R samples from ADC
$ C1 `/ w* Q: r" `" S2 H+ ` output_sample(sample); // write L + R samples to DAC ' S4 r" N8 k- g$ u! a
return;
1 M2 o' T3 _: [: D}
" x3 _: D4 u% R+ r% d8 ^$ @$ x; H! h! F' l
int main( void )3 w0 n% z% ~; [; L1 m5 E( r8 q3 Y
{7 X' O& N! z3 R& c
/ w+ b; ~8 \: ?) h
/* Initialize BSL */
5 U" C! d/ c1 j( o2 v1 ? EVMC6747_init( );
$ a# ^3 `" Y) o- b/ j8 Q3 C/ Q /* Call evmc6747_intr function */
/ H6 U$ r: G1 \1 M; s# ~. n aic3106_init( );6 H7 U) j( G# N: n7 j
while(1);/ j6 H8 e1 m3 ]! h' b1 l
}
$ O- m& X' b/ @" D
: r0 h- K+ `1 i8 S' a
5 u' N! ?1 X: iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ }& M _0 F5 }0 t: ?% H( |6 i
/* Initialize MCASP1 */- h2 a- X6 C* K" m5 `# c2 e
mcasp = &MCASP_MODULE_1;
# r9 A5 K- ^ }% N6 Y' q mcasp->regs->GBLCTL = 0; // Reset5 v: t7 [. a# u( z- g$ p
mcasp->regs->RGBLCTL = 0; // Reset RX1 Z$ S% X- s6 S# _# K0 }
mcasp->regs->XGBLCTL = 0; // Reset TX1 L" ~& }+ L9 V
mcasp->regs->PWRDEMU = 1; // Free-running3 L$ o+ r+ J3 @2 E9 b' U7 e
// configure McASP0 receive registers! h+ n+ p+ _* f8 g' i8 q: T& I! r
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 O Z; d- c% T mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. k% _, J0 n- f y3 E; F% H; v$ ]- h
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' p$ I) L+ u1 i e7 v5 m" q
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! `! ]) T% `, X mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 U, j, H" Y3 } Q0 W( W2 A8 S8 K mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 T) \0 a7 w1 s C- T. i+ ` mcasp->regs->RINTCTL = 0x00000000; // Not used
' ?! G' G' c* G5 H& x6 [5 o2 K3 @+ A; f mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 b9 l# r* a/ y! O; J# Q
9 E! G2 i& m. R* ?/ ~: p mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
' b9 u" e$ g, V+ a mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& a' c1 B' @2 |/ Y( ~ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word }/ N, G7 U. j0 S7 a; `( j7 M3 R
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( J' a4 M$ o2 s m: m, F mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
2 A+ j- {" n) J' |& t8 t, P mcasp->regs->XTDM = 0x00000003; // Slots 0,1$ G* Y. @- U$ v. d+ p J
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit, f. f3 [ L/ o+ a& Y& v+ n* P4 h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ z) @' e8 J9 m5 y, t0 t; @* r
: r1 M3 J l! f/ U1 L% Y, R& ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 ^" u3 Q2 ^1 [- R/ ]/ b V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
. Z- E1 n: G+ ? mcasp->regs->PFUNC = 0; // All MCASPs
+ q4 v8 T0 Q* h; n7 A! z- w0 o mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& C6 N7 w2 o. G/ d! Q" g
4 Z, y& k) O( Z Y, d; S$ L
mcasp->regs->DITCTL = 0x00000000; // Not used
5 o) G5 [; y4 |0 K$ p mcasp->regs->DLBCTL = 0x00000000; // Not used
$ y4 H. Y& Q0 N' K' ? mcasp->regs->AMUTE = 0x00000000; // Not used0 u% |. n" o2 w- L: ^/ N [
8 U9 M2 p8 j: B2 }5 Z$ a/* Starting sections of the McASP*/
* I% |; i8 `, ?, f* E mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! L5 m7 s) R/ }1 f# O- f4 c4 }; e6 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
9 r- ?9 Q: N# q, T. K, }7 s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; k* S5 j/ L' E4 T2 L/ d1 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 r3 M6 t1 m2 a( g
3 D! k5 U9 v! @ \9 H P mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 _: g6 H/ O4 r" J0 p0 X while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ b5 I6 c' ^( \1 R2 V* i
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. ~8 M# H$ p( Y+ ~; \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
) b/ }/ e/ W8 @. \6 w6 }4 W, {9 s0 j/ {
mcasp->regs->XSTAT = 0x0000ffff;
2 H9 ~) h8 ]+ @; k2 O: } mcasp->regs->RSTAT = 0x0000ffff; 1 } [( d) _3 [7 P5 D7 p
6 D- i; o, n5 J; I mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;6 Q9 N- F8 G0 |- I" N2 `2 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 a5 H" u, b9 m/ C8 j* F9 d mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 b3 }4 k; r9 g5 f1 G# h" [: z" [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& `, i! F# ~) b2 J- f& _" Q. \
% A; Z* Y6 v# l$ k% {+ S* ?7 o5 _ /* Write a 0, so that no underrun occurs after releasing the state machine */
A* j" z) B. C$ t! i. s( l mcasp->regs->XBUF5 = 0; [5 k+ |- ^2 b( c9 V, V( z( r
mcasp->regs->RBUF0 = 0;( f- y6 ~) E( u
H2 t' h; V9 k% |* g- r1 X mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 D( a t6 u; C" V0 |" D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 m1 f9 L j1 K7 l8 K6 W8 K mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 @. {8 W5 @4 S) _) @# H' F9 g! r, V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 g5 s# b$ G7 i; O" A" x/ m, y/ o
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- g8 D' @( v9 }- r while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 B, U _2 [( Q; t# w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. B+ f- h5 N1 |, H# _, ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* J& Y0 M# T7 \3 g7 V M8 K1 O
8 J5 P: j! E$ P5 i \( |: I7 R& m CSR = 0x0000;
+ M9 n& v9 Q. g0 Y0 T INTC_INTMUX1 = 0x3d;/ H4 }, D# r+ l4 u
ISTP = (unsigned int)vectors;
/ j3 z. y9 g# J+ [2 b2 x ICR = 0xFFF0;
* f( L6 {/ v- R8 y c a9 i) c" K% y IER |= 0x12; # f( v/ E; S6 j' r5 g
CSR |= 0x01;
; N% E* u" w' T, g# [
. n2 A8 Q- u# g; @. d/ N0 p3 [4 ?+ C2 o" j6 y( r
" |6 F" _+ a- X: O
还有就是两个输入输出函数:
' f, M0 v8 y: O( }! _5 G( lvoid output_sample(Int32 out_data)% J2 T+ U. C1 L7 T% A. H
{6 ?) |" O+ D, R7 D# X/ l. O0 i
AIC31_data.uint = out_data; . k! o% H$ Z( Q* t' m; B( h7 T* Z
MCASP1_XBUF5_32BIT = AIC31_data.uint;/ T& l" s9 G/ k9 n8 _
}: ]0 m8 O* P7 h+ }: x( m
6 {# V: e1 w! Z, ?Int32 input_sample(void)& B& r3 ]$ A5 [" {# x8 x$ R
{
0 Z+ z2 M* x! b3 k1 W/ e* Y3 B2 W AIC31_data.uint = MCASP1_RBUF0_32BIT;
) S. B2 [! Z+ k9 B return (AIC31_data.uint);
m- F1 t, D J8 k: _7 S: p}
' G% |! W5 N; B% Z$ K4 g- b# b/ a, d# Y( T+ X* L+ J
|
|