|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 V* u3 o) h! w4 ^: k- ` {main文件:
* Y7 h8 x% a7 |+ h) J! _interrupt void interrupt4(void) & f) T; b/ B m( z9 h
{; K F& ~0 H) [, G& i
Uint32 sample;, b; d5 l- i$ G) J D- Q: Z3 ?
a. _* N" D5 o6 x' v- I
sample = input_sample(); // read L + R samples from ADC. `2 r1 l$ l y& m: c
output_sample(sample); // write L + R samples to DAC 7 a; Y$ l) Q/ @" v; D
return;
* k" s9 l9 F* c+ a9 {" \}9 b @$ X. p1 @7 N0 _; L
# E' m6 V- ^) O+ z; B- M# p% v2 ]
int main( void )' F, ~7 @" Q/ m7 v) e i7 ?9 k6 E
{! x& R" [' p: [2 n9 J) g) y
5 Y* f0 }6 r$ _ n- c( d4 L: A" ?9 x /* Initialize BSL */
0 U9 T% [2 J | EVMC6747_init( );! p+ j4 E- F( Y- p8 K' I
/* Call evmc6747_intr function */
. ~ m P- t! D( F2 V aic3106_init( );
9 L& I4 U+ Z: z# F7 A% h while(1);
7 U& _( D8 u0 y}
/ S% F0 G8 s T6 R: T- a% {# k/ s5 W
w$ ~ y% w) j4 x: a( a* i8 g2 g/ }/ a* Y' X) v9 {$ W) J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 h$ I7 l1 x: b4 F% d6 t/* Initialize MCASP1 */+ S R' L9 `, R
mcasp = &MCASP_MODULE_1;6 w7 D6 a6 P0 M2 f H
mcasp->regs->GBLCTL = 0; // Reset; h# P a( a, d; n" G8 @! u
mcasp->regs->RGBLCTL = 0; // Reset RX
' K7 ]& Z+ z- w mcasp->regs->XGBLCTL = 0; // Reset TX! x) z4 W6 c C! j
mcasp->regs->PWRDEMU = 1; // Free-running1 q# R- H6 V. B1 g m
// configure McASP0 receive registers8 P# Q9 p3 e, k! v, j$ \0 W
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 j6 U0 k+ _2 ~3 ?' H P
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" m. O1 [0 D Y: l8 P5 p2 L mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% I9 f2 c- y# c* E; S" S/ r* a3 a% g' @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" f1 L) x* U3 V4 o) J/ P3 M mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 |% L5 t* W* ~' Y& w6 W mcasp->regs->RTDM = 0x00000003; // Slots 0,13 x* F: j! B& y1 y+ P5 I
mcasp->regs->RINTCTL = 0x00000000; // Not used
. O }) _. |7 G$ H8 M9 o6 h$ u mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ c$ @ f n* W( ]1 N/ s0 p* d, a" F+ K, _% i5 v8 `
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; e# ^/ D1 q" ]* ]+ H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 ]! h/ v* X) x, _0 H
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 Y7 y7 v9 E2 z- ]
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# M5 B) v3 g- D% P mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK. ]( {! [4 K& R+ z: f6 z* e
mcasp->regs->XTDM = 0x00000003; // Slots 0,16 V( v3 r- f9 s) x" E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. ^8 U( g6 {5 x3 F
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 t9 Y& D7 d4 G# ?* ?' X6 g; F4 K( _1 k. J$ i3 n; E
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
R K* J( x. W( x3 y' z$ t3 F: s mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
$ l1 T$ j& t+ }* @. d& g5 B mcasp->regs->PFUNC = 0; // All MCASPs
) \6 H+ k+ T2 q2 H: m( P9 h6 E5 M& B mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 `) `: T9 d' J5 w( v. u6 F
* X* X: T9 j1 e$ v8 ?. V8 r h mcasp->regs->DITCTL = 0x00000000; // Not used
9 }* i* m3 a9 f. P mcasp->regs->DLBCTL = 0x00000000; // Not used" |5 q3 w- J$ h- ?$ L
mcasp->regs->AMUTE = 0x00000000; // Not used. H; k. N+ ?% u3 e) O0 p
. k `6 k7 \6 s9 |
/* Starting sections of the McASP*/
2 [* o. S; K/ @# T mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & T$ T1 R$ A6 f$ q0 |. z: H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , A/ `$ i5 a# E4 G' m) C
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ }- Y: ]* E/ v& Q# Q3 [- e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" ~5 _2 x" |% Z
" _; G7 F, g5 y( P' I mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ a* }6 B+ V7 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" ~5 q6 [5 L( [# G& y H! e3 p4 l
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 p, z E& Z% y. @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 g: r" G. V+ a4 e' u9 j6 \! w8 m! Q
mcasp->regs->XSTAT = 0x0000ffff; # e9 t/ E2 f; H7 p& ~% i
mcasp->regs->RSTAT = 0x0000ffff; " U7 q7 u, d; B7 P* n7 R5 i+ n
" E' J7 I6 a/ s8 X4 L0 T
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ c- W, s. q3 ]! e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& X( L8 L1 M8 H6 u mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & I$ E1 r. k' n9 G( U( z9 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 k3 T6 j( ]4 K1 Z" X" o: D4 U" N" @! j$ h; P! Z8 C! ]
/* Write a 0, so that no underrun occurs after releasing the state machine */9 ?) B8 o9 r- D0 L
mcasp->regs->XBUF5 = 0;* s8 G, a/ R4 l! m2 X0 b
mcasp->regs->RBUF0 = 0;
! D$ ~: Y* `. t" ^; U+ L; ~
; q3 Y; t; l% ~5 c1 [9 p$ P' g& E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- X- X: l; G: M5 o5 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, i2 a' n! j: K; D/ b5 w# r0 S
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 ~+ d0 ? T/ H- O9 F
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 R) A, N0 \! U ]
b W% a ]$ {2 s! v mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' n8 o' g4 ^: Y! x+ O1 g4 B2 c$ M4 M, G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 C8 B4 g: @1 `: w8 K; U
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( ~! B0 j, C2 g- [* s3 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* @1 \) M: p/ G, I0 U9 m6 C9 t* D, e k$ V0 W
CSR = 0x0000;
2 c7 g6 ^' p0 ]) r INTC_INTMUX1 = 0x3d;
7 }0 f* P% J" Y' v% Y ISTP = (unsigned int)vectors;! q0 D$ t. \8 ^) P. j% [* y
ICR = 0xFFF0;
. @; Q3 m4 I' p4 i# S5 w& x IER |= 0x12; ( }; @* a$ J3 L, Q1 R. m( m
CSR |= 0x01;
, g2 D1 Y8 {/ j H/ O4 b9 O; a1 d z1 p
) r& I* j8 t1 u8 \# Q
; I* `+ m C" z3 p3 S还有就是两个输入输出函数:. r. x" B# q, Y/ |( w3 |
void output_sample(Int32 out_data)
8 K! c* b# V3 |% n{: B+ N9 y4 z3 g; I* o; s
AIC31_data.uint = out_data;
7 F. _" Z. p: e) ~ MCASP1_XBUF5_32BIT = AIC31_data.uint;6 V* e j; e- j. ^: N6 c% d
}
6 {) X+ a+ S4 H, l
f# e7 W0 C6 {# L& n# m$ r4 BInt32 input_sample(void): [) ^5 f$ O |+ ]2 Q' g
{ ; }2 F ^% \# E5 g4 R4 t
AIC31_data.uint = MCASP1_RBUF0_32BIT;8 Q9 s" M* f) }7 p3 R" `
return (AIC31_data.uint);& I4 e) L) ]$ }% H6 v3 m$ }* r& @
}: }% R8 m8 B; P3 ~. c+ R
6 E7 S( Z/ p( x W
|
|