|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 ]# R" M" C1 g- F8 S; H4 nmain文件:2 p: |0 ?( o( {% k- {; [
interrupt void interrupt4(void) 7 p- O& V7 P# A
{$ ?' }4 a2 K L3 N' W
Uint32 sample;
: d& N6 J* J) i- s' o
7 G" \2 K( Z. p4 f( s sample = input_sample(); // read L + R samples from ADC4 [% h; c6 V8 j" t: i8 L5 b6 A- J8 C, W
output_sample(sample); // write L + R samples to DAC
; [: J! g9 J$ C- b# q return;8 X" ^7 c- J3 E: a2 d+ A3 l& J/ C
}
* ^1 B/ |. a/ r+ ^& G. U
" O5 l7 G% h6 rint main( void )
9 U9 I" X6 T3 g% |' p( S{# j3 y _4 w( I
J( _) d' l0 f& G4 y3 B /* Initialize BSL */
+ L# \9 e" G1 R EVMC6747_init( );& m" U9 x ]9 `; E8 b
/* Call evmc6747_intr function */
$ a, W6 X5 G# N( Q3 O aic3106_init( );
; m) Q0 i# U- D( h6 c+ N while(1);
- j2 k% `3 L; t3 {& d}
7 n( V5 f% e- N( S3 G& G3 W
: Q ~' K7 D- ~) l' H0 h( t' J/ B- L4 u+ V( s, ~# ]( N% a0 E0 b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 z5 \6 T1 H/ D: \, [: L; g
/* Initialize MCASP1 */) f3 G$ j* R! Z( R% j
mcasp = &MCASP_MODULE_1;
+ ] o( `( y- V+ u; s3 e; q+ O mcasp->regs->GBLCTL = 0; // Reset7 |6 ?/ l; O1 e/ E% `: X" A
mcasp->regs->RGBLCTL = 0; // Reset RX
2 E. N( Q; H( {: s2 j) k5 Q mcasp->regs->XGBLCTL = 0; // Reset TX
% T: [; F# v' r, ?7 @8 q, n mcasp->regs->PWRDEMU = 1; // Free-running
1 p: P! v/ L, @) q; c3 x1 E. D // configure McASP0 receive registers
8 J, o6 L) C& b3 _( ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used* N0 M; y+ Y- Z" ^
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* A* V. J& U$ s/ U4 F mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word* ~: F' M$ a& A% [: V. X9 O" N; ]
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- l" A! e1 Z; M( P% Z$ R Y' E" B mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) w8 X& ^, L7 V, t0 w$ H' I
mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ t! `+ ~, V _ f8 V
mcasp->regs->RINTCTL = 0x00000000; // Not used
, E$ x8 K- d" {/ h* d/ ^ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 \ p' Y- L/ U& `# E# c
G* D& k9 a6 P" t! B$ k
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used0 ]9 A4 d& h3 P) k+ l; S4 n
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% R H9 [/ d4 `' @6 q& F8 R
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. P8 }/ A' T3 s0 g2 @: |. K
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ j2 p0 a5 E% J$ F6 k6 X mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& Q( f3 q L4 h8 s! B+ r mcasp->regs->XTDM = 0x00000003; // Slots 0,10 I. u7 V ~; _/ y- i1 {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit0 t N P/ G8 I X
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 @' n8 q( a4 E2 F9 m+ z3 M+ U+ M
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
6 N0 `; g1 g$ h% W% m5 Y* C mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
) `8 G7 C3 b' A/ c3 n: A" A mcasp->regs->PFUNC = 0; // All MCASPs. {4 q* J* ?( m* Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 x8 H+ Z; d# [3 v" t: w K% X" t+ B, e
mcasp->regs->DITCTL = 0x00000000; // Not used
, U7 {8 U. t5 p( w1 y" ?. M$ I. { mcasp->regs->DLBCTL = 0x00000000; // Not used
: D L) `) c$ H5 Y# a' T: U mcasp->regs->AMUTE = 0x00000000; // Not used3 H/ b7 ~2 ~, l9 v8 H
% P- w# z6 u0 S% n0 D/* Starting sections of the McASP*/& }/ X7 T: h$ ]# r
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! P' h# F9 G! q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
/ O m9 c l, U+ R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " Z* ^3 G' r# n& O, u. ?5 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 b4 a9 e) y4 o8 J) S( C
7 l* q$ c- X% n3 B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ J- p8 |6 W2 v( X3 j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 x3 j- @$ }/ M! r: O9 V
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; N1 V: `; s2 T+ U) k while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; B& p* ^+ k2 W; X8 m8 q
- U4 m1 q |5 i& H, t7 K+ q P mcasp->regs->XSTAT = 0x0000ffff; ! x( _) h6 n% t M( o; n
mcasp->regs->RSTAT = 0x0000ffff; ( z2 \. t7 l6 \7 N& x& b, E
! ]' J: g }8 F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% |2 ]- B& | u" I$ x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; o; _. Q, m: I& X, G0 { mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ a3 r! S: g3 Y; j8 ^, u while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: q; `/ |8 y# |/ a+ u) S
" _9 z* ~! w; B8 F' N /* Write a 0, so that no underrun occurs after releasing the state machine */4 _, f& h& t* A- a P4 k4 i; J" B; D
mcasp->regs->XBUF5 = 0;
. W, o7 F c/ @6 L" x mcasp->regs->RBUF0 = 0;) S( t0 U6 K( i3 S/ J* }% A1 M! i) U
; {% T" ^/ t/ ~$ ^* J) O3 }: [. I; p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & ] v5 \1 d J
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 E& Z& d2 {5 [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 c$ S: E+ G J) e1 h; k# P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ G. T8 O+ O& d
- z9 K+ i1 I1 p* L$ b# I mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* r$ P/ Z7 U8 }! L# s: W* r9 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; h0 B1 Q- z$ ?* S& I mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 g* Y. R& M4 r7 s7 Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, v" @# V0 y( b: O, ^
7 g) F( o) s, i. [% P$ \" [1 d- m CSR = 0x0000;
; [8 ^6 N5 t, [; X6 V) D INTC_INTMUX1 = 0x3d;
1 h7 D, u: y/ h' O( r9 T4 t ISTP = (unsigned int)vectors;% c* C9 i4 |, L) G' ~
ICR = 0xFFF0; - \7 ^' f% G6 N: W
IER |= 0x12;
* o- ?& A5 o0 ^+ Z* _% Y CSR |= 0x01; ) f T, l7 x3 l( m1 M& ] k
+ g. d* Q" W0 F: {' V5 G$ u1 X& c: r8 I _# K5 A1 L3 J* L
; s. ]: O5 s5 f8 i. Y4 G
还有就是两个输入输出函数:
. |: q# E, ~+ X; o; U+ i8 @void output_sample(Int32 out_data)9 Q9 v3 u5 O& ?1 A( i
{8 I" D1 i$ o- J
AIC31_data.uint = out_data; 5 W5 w3 _% X) R0 E7 y% _, O! O' y
MCASP1_XBUF5_32BIT = AIC31_data.uint;7 c7 t4 u0 J; g
}/ x9 v( {+ Z7 f) @9 p# F
9 `% n6 c* w' i/ q% m5 B$ CInt32 input_sample(void)3 y( P8 [: k" J# i
{
- ^' C: T% G# S3 L AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ b1 n4 Y$ W7 ] return (AIC31_data.uint);
* c. P" Y) C/ R; M N}4 D4 p: H3 _. ~; v
- F4 v$ d& d! q7 K6 w E- U; Y |
|