|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 W1 J$ g7 |: f w2 wmain文件:5 T3 y6 b5 }8 d
interrupt void interrupt4(void)
9 E3 n4 D5 T1 u3 i E{* ]8 E- ~, Q+ s1 s( O
Uint32 sample;
# c: d m! l: f4 x* x6 F" }- Z. z) _7 N% U! y/ C
sample = input_sample(); // read L + R samples from ADC: V5 k/ ~# ?6 u+ M; `
output_sample(sample); // write L + R samples to DAC
8 Q( V7 u' ~% A$ w7 u& q P& O( Q- w return;
& S* f: z% B7 ~' q) k}
: I' g, u0 X) e! M6 m! _4 `3 n7 R; ]* L( r
int main( void )
: h& `3 m5 b# u{
6 C* p0 w8 \1 D: R* \& T. w1 @& a9 {3 [& d% w" a$ ]
/* Initialize BSL */1 H* u7 I2 o$ L$ a7 F
EVMC6747_init( );+ J0 p1 q/ a6 l$ R: [: D0 r/ _
/* Call evmc6747_intr function */
- e& ?1 m7 O! p4 V aic3106_init( );5 H( C1 y. u0 M
while(1);' I0 i+ W$ I7 x* G5 X* @; b, w
}
) Z$ `3 e: B3 ]9 \3 u& j9 O4 }5 b: J; G
- `. H5 F5 Y" M' r& Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题 k& L( Y' R1 |5 n5 @' i
/* Initialize MCASP1 */
! B& j, m0 k/ g1 s. j& x mcasp = &MCASP_MODULE_1;
T# B1 C, Y; N$ P mcasp->regs->GBLCTL = 0; // Reset' ^2 v! L H. p D, X( h; T
mcasp->regs->RGBLCTL = 0; // Reset RX- r% s8 t( d! d+ \
mcasp->regs->XGBLCTL = 0; // Reset TX* ]/ V) e: ]. y
mcasp->regs->PWRDEMU = 1; // Free-running
! Y/ A! ?8 c" b+ |7 g // configure McASP0 receive registers% Y; k" A% ^2 [* T, L
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ U2 q; v3 e" A( K mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& h$ ^1 e5 y7 A# Z2 j( g mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 }. f7 O* k4 e
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 v" K3 G. X0 T6 a3 ] mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)- x* ?1 C4 U q7 s k, ~
mcasp->regs->RTDM = 0x00000003; // Slots 0,1! a, @1 s" Z+ h/ B
mcasp->regs->RINTCTL = 0x00000000; // Not used
2 b7 W) d# f, \8 r B' `# l mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& x2 `% g6 d0 v o: ^8 e8 X6 h+ Y
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 R8 V6 M# R. u: I! M2 X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% M5 ?! m- n: H& s
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 E8 J s _/ l* {4 N# {1 p
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% |0 q9 a1 i/ h5 T7 v
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* f3 w1 D% n" o" i: W" U7 G1 D8 S. Y
mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ M( c2 K& J5 f3 M7 A3 ?
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
( \% u/ i7 W" a7 c" i6 \ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 S' Y5 G2 b9 a2 ?2 y& O2 s8 U- d1 ]
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 e) y: M8 t7 V5 B! R" o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
& j6 r' Z$ ~0 U1 j mcasp->regs->PFUNC = 0; // All MCASPs
7 U9 |! x( X$ X* `, N. g5 I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ O/ u3 N( T0 A9 J* S% A
; }2 v1 r+ ~ _* D: Y4 P mcasp->regs->DITCTL = 0x00000000; // Not used
# E$ l* p% ~0 @) O" G4 U mcasp->regs->DLBCTL = 0x00000000; // Not used
3 W% P9 y; q* s2 X' h" B mcasp->regs->AMUTE = 0x00000000; // Not used7 a; _* I- [% \+ Z
7 a7 i) C$ i5 d1 a
/* Starting sections of the McASP*/; ]+ I6 f: f8 _5 J, T4 q8 W& q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: d( a" h: {3 e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! o5 @# n# Z. U' S$ i( \, J) g6 h mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 A3 m# D' \) A: @; H/ o while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! c( N- j) ?7 K) C2 b
( s. O E% U( @* A% T
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 L; F# a' [, y9 D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( X5 g1 \5 V2 n5 y
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ C D1 U ?6 y1 t+ c6 C% U8 @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 `$ }% i% X% x9 @% v: o |+ B
0 O) @" P2 n+ [ N" ]0 r1 ` ~
mcasp->regs->XSTAT = 0x0000ffff;
4 W, \6 S- @7 r- u mcasp->regs->RSTAT = 0x0000ffff; 8 D. [' g" u- x) Z, R1 p2 D8 m
0 x& A/ m* S/ t) Y% k mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- M+ ]2 ?. O) b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% c7 w( g8 l2 x% D: E2 G. C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 c* @8 j2 z3 H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ _5 y7 ?' o% N! K: R. A
4 x( V$ y; g7 M
/* Write a 0, so that no underrun occurs after releasing the state machine */
( o/ L( t0 U" C+ L mcasp->regs->XBUF5 = 0;
1 H' T' K9 d1 i mcasp->regs->RBUF0 = 0;
9 N3 n/ j* Q8 p! M( i+ p+ N: C# C- g
2 y$ m' R a; q: I1 r9 u- ^ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 D1 f+ w, `; w' C" o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( g. O6 O. i1 H7 q$ x1 R J, n mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ `( g, F: u- n4 K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% H( d2 i; Q% L1 X5 k* Y+ T) c& @1 B- n! ]% V9 U
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- j$ N; o* Q. x1 j, ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 i; _1 w5 p3 m( u
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 m" { F2 H& Y& Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( K& \/ b4 M8 ?% R* R/ r' t5 j( V
- \$ V3 ], K2 N4 B7 m3 y CSR = 0x0000;
5 F% C5 b& T' [; X% X2 p2 O INTC_INTMUX1 = 0x3d;8 {$ s6 o S& f4 P. m4 ?
ISTP = (unsigned int)vectors;
; O8 @% V1 ~1 ^3 F, t# B8 x, m ICR = 0xFFF0;
R- J, n7 s* k IER |= 0x12; . j6 Q! \! o: e4 p3 b
CSR |= 0x01;
) h* _0 L7 q8 w5 N+ ?6 q* H6 M* l, B: Y7 ~5 E" z2 z! T% T
$ Q5 l5 s0 q; Q7 J0 P2 Z3 z' x" H1 c' Q$ v
还有就是两个输入输出函数:# L+ ^) s+ W6 x' t
void output_sample(Int32 out_data)% m* H# j: f6 Q
{
: [2 {, U3 c8 H# v1 @6 c8 a- z AIC31_data.uint = out_data; # T1 y) d+ B5 L/ b1 S4 Q6 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;* O4 L n9 b% A
}
2 n/ ~. o8 {$ B
% r* g R3 [2 UInt32 input_sample(void)
* J3 T5 l* z( Q1 `{
8 J) i/ X+ D( x2 [: \! K* C AIC31_data.uint = MCASP1_RBUF0_32BIT;2 ~! ]# L( Z+ X" n
return (AIC31_data.uint);
* s' r( f4 j2 R; E; x, |$ I& `}* X2 M% M+ F2 P1 L' z- y V( {
' @, j6 k0 l4 V
|
|