|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: D1 L! \! F. A) Imain文件:0 b! f/ H2 X1 n& I
interrupt void interrupt4(void) : K+ t0 h4 e2 B# B% w; |/ C
{8 i D$ J+ R0 e }7 E2 q
Uint32 sample;/ I/ v; P K5 M3 D0 N; A
0 e6 D; r6 }0 d3 H* I
sample = input_sample(); // read L + R samples from ADC6 u% E) T9 g( H' M
output_sample(sample); // write L + R samples to DAC 1 f% v; V7 [+ l* D
return;
0 m& B4 L+ V8 e/ V: x& z3 a- \" |}" N+ p" W: ~+ n. ?- l
; f2 ~9 o$ [' [' J+ b7 x& I8 e& @int main( void )0 `5 l: n1 G: @% r0 r
{. t8 q) ^9 g; t3 h
! A$ p+ C* L; \ J7 E x, j7 B+ ] /* Initialize BSL */
/ G, s4 K7 f" q EVMC6747_init( );# ?& Z0 \+ d: `6 b4 r% B9 f
/* Call evmc6747_intr function */
3 A5 b- k1 p& m; J aic3106_init( );. U, T' K0 M [- L2 r
while(1);
( H* q. m, J, J3 b. Z}- u+ C1 ?8 T; Q" f
6 C) F+ E- ?5 P0 R& ~0 b: L% M
2 @8 x/ G: O2 ]+ R" X5 faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ T1 q t1 |9 j; Y/* Initialize MCASP1 */
& o. p: R C( H5 i* h mcasp = &MCASP_MODULE_1;
- S' U0 j& g/ d mcasp->regs->GBLCTL = 0; // Reset
* `1 X8 L3 X* w8 L3 i2 D mcasp->regs->RGBLCTL = 0; // Reset RX8 U- l3 e+ g8 Y z
mcasp->regs->XGBLCTL = 0; // Reset TX0 P1 B9 C( }: U! C; R: D$ {6 s
mcasp->regs->PWRDEMU = 1; // Free-running
6 ]7 |, @) A1 e# a3 _8 I // configure McASP0 receive registers' N5 E# S8 D: M$ w
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
0 N" S9 a8 S, a3 ~' V/ e. Q& R- _ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! d, e- W. E ^9 W+ }0 ]
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word# o2 q& u7 V# k% M5 v$ K0 g: @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 \ p/ u+ y7 I" O/ o mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 r- \! W2 x& P, \4 x, _) y* N mcasp->regs->RTDM = 0x00000003; // Slots 0,1& n0 D o8 M4 b$ r6 ?6 a. V
mcasp->regs->RINTCTL = 0x00000000; // Not used
' j7 }5 I0 Z7 u3 d3 k4 _ mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, q3 z6 x0 ~% Z4 w: @
8 m$ J9 C% @! G2 \ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) X& C% ]) z8 [* l. u
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 b8 S' k; r8 K& E$ x1 p( _% ? mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 k+ y% [; s6 m- \% {- S mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 R, O$ `3 d0 _7 z$ c+ j mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* F& ?& M. @- J% F/ i! A
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
; @. W3 v6 a: l8 C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, f9 B1 w* A3 A' g" I! Z' I9 t mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( X% V9 w; K. u: X+ s! O5 i
5 c" w% w# Y% S( t mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
8 R$ j4 q# N5 K. r: n mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& A& k4 k5 r: m G6 ?- K8 m
mcasp->regs->PFUNC = 0; // All MCASPs+ D" {8 T1 z( D* x
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 S7 v, t' s/ P
; y) Z+ q! L1 o+ p5 s
mcasp->regs->DITCTL = 0x00000000; // Not used5 d- k0 A2 J. c
mcasp->regs->DLBCTL = 0x00000000; // Not used3 K' N$ g) S+ D' Q
mcasp->regs->AMUTE = 0x00000000; // Not used
: M- r/ N1 ?7 n7 F/ d
& F* o' N/ s: {/* Starting sections of the McASP*/3 y+ j3 b/ ?! R2 Y% u% g% Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 C+ u% N. V& W$ z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 X, h! L0 z- ^7 u! }" @ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # R+ G. b* Z P G
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, E0 w: f1 A5 }8 V% R
8 V3 q4 |/ I. o- I# P
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . [" L8 }( k% g& w% _- z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 u- K& Q2 g0 ?1 A0 a) |1 L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " j% W+ q# K- v u- W: q( Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
^# \, ?1 o. j% Q( Z% ?! X
2 ?) J4 p" I( Q! I. v$ A mcasp->regs->XSTAT = 0x0000ffff;
7 [7 L, } s/ A" g B& ^5 [ mcasp->regs->RSTAT = 0x0000ffff; 5 a+ @6 y9 U6 l
0 P1 a) v$ z) ]0 I- X
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 Y( b l+ `) ]- s% f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 c' [7 y: M1 i% d1 p1 t
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . u5 ]7 N4 _' m# |' e8 T$ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
' K0 @1 J S5 n& C# e% N# T3 l+ i9 b& x; U' C
/* Write a 0, so that no underrun occurs after releasing the state machine */
' w) |4 C1 H6 _3 G mcasp->regs->XBUF5 = 0;# x3 _2 M. i4 w2 P
mcasp->regs->RBUF0 = 0;! R9 u! r% O% o2 ^ U& x: ~
8 J$ E) Q( g R( v+ e8 a8 `
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " w% Q3 K# m3 f4 U3 U+ g/ M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: p3 m2 X* c* _/ z% i6 C
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 T% `2 m& c+ k- ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. r4 M b7 D6 V( M3 \0 }+ n9 ]3 r: R9 p0 t2 q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# N& B) M3 ~, x% @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ T: f7 {2 {9 ]% o& g/ e' u) V mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ t; _7 y p0 c8 h+ V1 c% V& O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! c( i" m5 o& a
' j+ w% H6 Z E+ k CSR = 0x0000;- H. N# q$ y0 G4 t- b Y
INTC_INTMUX1 = 0x3d;
9 r8 ?/ G" s$ {1 M! I ISTP = (unsigned int)vectors;& A V* z4 [+ S3 j) P! v, U# z
ICR = 0xFFF0;
?. u7 o9 Z) I$ z( r9 h0 F8 g IER |= 0x12; * k- q4 o( T) h$ m/ i+ v! t
CSR |= 0x01;
% d* F* L% H6 P! G9 H5 m' T' _
% R* T3 `. g7 c% y) {; R& t$ O1 J9 m! r8 |; z+ X7 B! x6 h& r; U
4 C1 N' N4 x8 n" e
还有就是两个输入输出函数:' V q6 j' R6 E. ?9 m- I
void output_sample(Int32 out_data)
& N# L3 J, G( w; T# m4 j" R{
8 Q/ f7 L1 _) L! f8 S( ]4 A4 g* k; T D AIC31_data.uint = out_data;
' p7 w. l! n7 u( d+ _. N, u MCASP1_XBUF5_32BIT = AIC31_data.uint;
& F5 M- c4 f0 G" R8 {6 c}# Y/ C3 c! G- C9 K" E/ v
! [+ m# q& v5 E# w* |Int32 input_sample(void)
/ l- Y9 ^! R/ b/ j( d5 T{
2 [ `. C' T, C AIC31_data.uint = MCASP1_RBUF0_32BIT;- L$ F1 D& i3 C9 O: |) o
return (AIC31_data.uint);. x+ @: E4 U* i4 ]5 ?
}! t: {6 ?1 s* m3 T* q% p
: A+ m+ z( X3 S- R# [
|
|