|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! o! r ~5 s R x4 T( Omain文件:
* }: n# p1 A8 ~4 `! ^% f1 Rinterrupt void interrupt4(void) - ^' X3 K! x" S
{/ d1 y9 X0 t3 X, S+ k( C9 T ]
Uint32 sample;6 H9 @+ I+ o; ?
& M* V" ^0 s9 D r4 q/ c/ v3 c sample = input_sample(); // read L + R samples from ADC
2 C1 k Z; T0 { output_sample(sample); // write L + R samples to DAC % c6 r1 k$ ? o' J
return;" x! {) _- `1 @
}
$ k) j4 N5 k- k ^& J
. ]* \9 N4 x$ g6 b0 G) [int main( void ); h& I: V4 E% D- s! n
{
1 u, _7 i0 V$ D9 {! e! X3 a, j- ]$ r: h& T) ^7 R& A
/* Initialize BSL */
* e, a7 T6 O6 C7 o+ t7 L) R EVMC6747_init( );
& X& {6 r0 {( R$ {5 J% A6 e8 l /* Call evmc6747_intr function */& [" I. h0 j9 p4 |# t" n$ H
aic3106_init( );
7 Z2 U9 O& ^+ `: l) f while(1);$ c a3 `& d, X( ?7 X6 X3 h
}
5 ^- ]$ I6 N" ?! N% x$ y, J7 E5 c8 b
- I6 B/ T; s0 S' G3 U' ^; \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: B/ B" C- E2 `/ M' S/* Initialize MCASP1 */. `8 T/ T( x! t' W
mcasp = &MCASP_MODULE_1;
( J% o# M! b4 S% h4 o# M+ c" L4 g* \ mcasp->regs->GBLCTL = 0; // Reset
) v) J2 h/ E* b$ B/ A( N mcasp->regs->RGBLCTL = 0; // Reset RX: ]7 T6 n! [& o; X8 s% X: |0 O
mcasp->regs->XGBLCTL = 0; // Reset TX! v( V# \" N% o# s
mcasp->regs->PWRDEMU = 1; // Free-running
$ V9 Y; j" k, H, T // configure McASP0 receive registers
) a" @0 O8 L. H0 @% A mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
7 g( @: o4 D# {5 x* f$ N' h: _2 a mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 _6 k: T, V/ Z! F q e7 s; G
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) w- h' _6 c2 J) \6 o mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 I% h& n3 t, B% ] mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! M8 H8 Y' H" }' M: }+ h F0 C' X X
mcasp->regs->RTDM = 0x00000003; // Slots 0,1+ O6 m( _9 w' d' ^
mcasp->regs->RINTCTL = 0x00000000; // Not used+ z" c. x0 V# M3 u* q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 j8 T7 F3 p/ D6 r6 m! k
/ C f% M( h# w- U5 O mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
9 }9 v' R! p" G8 V4 E mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 ]5 C9 ^7 P8 u" p
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" ]9 Q! d/ n0 y$ q, O% j
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 i( ]0 A' a# e6 F; B7 w8 v! _
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
- Z* K6 m% |& F% w! h' N( P, g mcasp->regs->XTDM = 0x00000003; // Slots 0,1
9 _: J, n2 ]/ a* x! P: w+ ]/ P* F7 _ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
1 f9 s& x L5 g" V, e" g0 p mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 ]$ q3 E7 h t" a w! W
9 G9 q0 x+ `' X u" F0 w mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
0 M. ]* Z3 k) m, [! G# m mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT# g. N# v9 x2 I B' n
mcasp->regs->PFUNC = 0; // All MCASPs/ y/ J. r6 W* B. ]
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! U2 {! N4 z4 K, @' j' `+ Y1 b& _+ d6 g2 D, N/ R6 }! R2 a4 |
mcasp->regs->DITCTL = 0x00000000; // Not used6 ^$ k/ R/ g/ @* R" `
mcasp->regs->DLBCTL = 0x00000000; // Not used, }; w) X( i1 M" {. c, n
mcasp->regs->AMUTE = 0x00000000; // Not used# U3 h5 k6 o+ Z) P, X, r
2 T7 D/ |+ O# t/* Starting sections of the McASP*/4 ~: r, `0 E3 w( n9 _
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 z! Y! G9 R& V1 z9 d while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
" W1 V% K% H9 x5 n* W2 \8 T7 T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 i2 z: X+ ^" M4 m% B! T
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 m4 ~7 j+ {3 T: ]. T9 e: J
: g; h- X6 O3 F' y8 Z8 }8 Y& j# h
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 ~ K, S4 S, P( m- \& b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 ?+ u! ]! ~7 c) l
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 V1 k' l/ N- ^ w* }- n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 z- ~" B. x3 O$ s5 n, y+ [
# y+ e, H, Y, s5 A5 J$ h8 v% Y+ i. x mcasp->regs->XSTAT = 0x0000ffff;
" D/ H6 Q0 h' g0 M mcasp->regs->RSTAT = 0x0000ffff; 7 T- t, e5 m+ q* B O" ~
) Y; X, V( b; Q- M mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 Q6 [, @5 q2 y. b- y- Z" H4 g! q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- k _" {( X/ @* y: v; M
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 B- j2 R$ n9 ?' f( R: W while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: m$ R0 @# S' D n% c" ]7 C, o2 i O4 c I) G U) l E! N
/* Write a 0, so that no underrun occurs after releasing the state machine */
* K6 o( U$ K9 {7 b7 x. k mcasp->regs->XBUF5 = 0;
6 S! `& T H0 D+ @ mcasp->regs->RBUF0 = 0;
6 \; U9 T9 w s; o
& `1 s2 M3 X) n! D. d/ [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / E* c y8 X; n) v; x( q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
+ i; [- k- w& a8 t; a5 o: r: y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , D$ c1 _8 b% c4 k) x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( [/ z. Z* y# [8 T4 r n8 t: c. Q& b1 n# o' Y+ W- S
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 u0 \8 o7 L# {: }0 ^7 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 w7 F! m3 ~; ~9 s
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + C' [, d) s- Z5 ^! ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 `. m5 M6 Z& D/ x
4 M4 E9 [! }! N8 L$ w3 k+ ~ CSR = 0x0000;3 h1 c- {2 V* `8 o9 |* v
INTC_INTMUX1 = 0x3d;, W: E6 d/ Q1 W" Q2 f6 j
ISTP = (unsigned int)vectors;
6 u) }' p( @( ?9 ^5 H+ |) C4 p. ] ICR = 0xFFF0; 6 G6 y- B. I9 X, ^; N1 c
IER |= 0x12;
. a. I. w- H/ u6 F3 Y4 B+ b- P CSR |= 0x01;
0 D8 C& p" E8 |1 `, J3 [6 ?
S/ D' q1 l, N. T7 P+ c5 o) W" e* ^; P T
8 @0 C% R6 d, u+ t还有就是两个输入输出函数:
) o: f+ U: Z! z$ z: l5 J2 G5 \void output_sample(Int32 out_data)8 Z; Z7 J. N3 w/ |5 S1 I
{% t" q5 g3 [) f- q6 S
AIC31_data.uint = out_data;
# T" _% V- X2 B( w6 S1 f MCASP1_XBUF5_32BIT = AIC31_data.uint;5 \: d$ J$ m( k; T. i2 O
}
* ^ W. P7 Q1 M6 {' m5 J! }" b- C! d- A
Int32 input_sample(void)7 w7 M2 m, A4 F2 O5 J
{
|5 p# C. L9 R$ n# H/ ] AIC31_data.uint = MCASP1_RBUF0_32BIT;3 ]7 ^6 N3 ~: E% z( x# V: u* S. j! u
return (AIC31_data.uint);& _ P _# R4 P: q
}
0 t, T: w! [& A: M- U
4 V& T* W! x& D( G! i |
|