|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' V, b+ i/ a) s: n- K
main文件:
6 z C2 S- t# u% N- |& binterrupt void interrupt4(void)
) |+ ~2 J4 X( {{
^* c! y, J7 P* S& P Uint32 sample;/ D% M7 p" v% K0 O1 Q8 b3 R
% A1 \% V2 W4 m8 \, D& L3 M sample = input_sample(); // read L + R samples from ADC
" e: y( a' P6 t# c u' a$ l output_sample(sample); // write L + R samples to DAC + X2 T8 z7 O/ }! p( E" Y
return;3 [0 o7 g" h5 n$ m
}
0 C; a1 w% g* M; I4 r* l7 S7 E+ _& s2 Q. ~# x R
int main( void )
0 ^. H3 P% l+ l9 Z. _) W{; q( u: q" ?! K. e" p: W
/ B* `4 D9 I! b \& F /* Initialize BSL */
; \6 e- b8 U( i) I* r6 Z% Z$ P EVMC6747_init( );
( T+ U' A p& P0 |! g# |! } /* Call evmc6747_intr function */8 \2 e" P, U1 s- F. D# v8 X
aic3106_init( );5 T8 Z) f+ i2 W9 b. `
while(1);
P2 L8 E5 z. |}* ~4 w+ w3 y, f
$ n I3 r1 c+ D: b
& E/ Z& W. ?) [4 Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 A ~9 G+ i T- U3 `) ]4 V: Y+ j# i' |
/* Initialize MCASP1 */
w$ ?. f7 T! s& P h$ h5 E) a4 y mcasp = &MCASP_MODULE_1;
( j' b' M" o/ V0 L2 ]$ e mcasp->regs->GBLCTL = 0; // Reset" p7 Q! r4 d3 n) H
mcasp->regs->RGBLCTL = 0; // Reset RX
a' u( n+ k, @ mcasp->regs->XGBLCTL = 0; // Reset TX
! T0 K! F& r1 G4 e( n$ q mcasp->regs->PWRDEMU = 1; // Free-running
% R! L6 L* e# L! P // configure McASP0 receive registers
' l) N1 y( x+ p' Z. n mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
% P% ^/ K% P' m: V9 s6 _ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 \$ L' Z: X/ U; |9 k) u' i5 t1 \ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& O: Z# f7 Q _2 q mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 p8 a ~0 C5 n
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)& `% N& `0 R9 W& a/ V5 p" f
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
% \) f2 J4 T: F mcasp->regs->RINTCTL = 0x00000000; // Not used P0 W9 f2 ~0 g9 O; K+ `8 z
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- |, O+ }, ?8 B) I
1 `5 i: Y! z3 c; K8 E3 j mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 ?. V. n4 V5 K2 s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ }& \& \1 ?. K, l mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 F* O' f: c; X8 r& Q' r8 O2 { mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' O; h, p W' v( U' w; l
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- P3 T7 [5 k. i: ]* y
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
3 M! N" e( S: I9 \ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
! C) L+ K" h$ @/ I, K) l mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 @# a4 I! y: A7 A0 h# }+ H) ]
2 k7 E. ^% L6 |% H9 h
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN+ {: ?# A/ m8 C8 O) q
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT! V3 C B: x W" K2 Y! ~
mcasp->regs->PFUNC = 0; // All MCASPs5 K# x9 ^0 X$ F( F7 u8 s! m2 V$ @
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" Y) [* R: n8 f, `& Z
" p9 j; Y2 X6 {' \1 g8 m mcasp->regs->DITCTL = 0x00000000; // Not used$ r' U, w9 t/ L: b
mcasp->regs->DLBCTL = 0x00000000; // Not used9 R3 z/ m7 y0 Q0 D. n
mcasp->regs->AMUTE = 0x00000000; // Not used
- d' y2 \- ?+ T. w3 {
. E- V* U6 f' w. G/* Starting sections of the McASP*/. ~+ U O* q3 ?/ R1 o
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' G4 [- X+ P+ A; G9 d! @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
& T/ B, q. a) Y& e0 W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' `! V& s, d% u8 x$ P9 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; u2 b- \+ E' o8 d6 e9 @
" v* v/ r, W! w) b0 |$ A6 \( g3 b1 K
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! V" c. c& \ W. C0 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- f F0 ~ z9 H5 b# {4 u2 x% p
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 C, r. ~4 f8 r- T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 u4 O9 S7 N) E( H) n6 L/ v% E9 {/ s; A' [
mcasp->regs->XSTAT = 0x0000ffff;
4 v2 J! O; w) i$ e mcasp->regs->RSTAT = 0x0000ffff;
2 i, L3 i5 i; t1 {7 p# ?9 `$ f* C# Z& a+ [7 I) ^ o/ s
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
X* F. _- C0 Z6 W, L5 P8 j- |* w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 p) m- k) b4 P5 @5 Y/ Q- A
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% {$ d8 G* [% j. o+ s# b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
, g8 @' {/ q0 q) V0 T
. u; }# X% n, L4 k4 s /* Write a 0, so that no underrun occurs after releasing the state machine */
`$ e, L+ F" V& W; @ mcasp->regs->XBUF5 = 0;
/ |& n% i7 t9 |9 n mcasp->regs->RBUF0 = 0;
2 b# z; Q, q0 M" C. q
1 s+ o0 p9 {9 p ^% j) w mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; n" J# M' B( L2 j6 ?, j+ `# i5 }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( D) w+ P, q" i* U( t mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 E3 O6 B+ `! `+ w) @6 V& U3 K. ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 w' [% Z- P" j$ T5 {* _3 M
. E, O" I) P0 V4 q& s mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ L2 b; v4 F; Z) O4 t* e2 j: }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& @- X- A$ h' W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- j# ]0 ]2 M$ Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" F- P! }5 s* C# p: W- d
! U# z& n' R9 F1 \ CSR = 0x0000;8 g9 q2 n8 i6 O& B; C- M
INTC_INTMUX1 = 0x3d;* g* L% j+ t- P$ e7 h
ISTP = (unsigned int)vectors;! h' |' M$ U9 u% R6 S8 q: B- L
ICR = 0xFFF0; ( S2 R) ~4 k, s% k
IER |= 0x12; 8 W9 Q4 l6 l- q: Y
CSR |= 0x01; 2 w! Q. n0 ?1 M$ v
% M1 i4 C. h% h( S$ }0 h7 \& C6 `2 ~' O3 E# a) l
: L8 B" d( ^8 r# Z4 p* ]
还有就是两个输入输出函数:: t$ y* Z5 C" Z' K+ r
void output_sample(Int32 out_data)
5 C' J% U, D6 E; h& Z/ ?{
: I# _) J8 V4 S* F5 b AIC31_data.uint = out_data;
, ]7 W# X& f8 A! t1 ~5 H MCASP1_XBUF5_32BIT = AIC31_data.uint;
* l0 |2 I( _. _( H) L( j* w}
# _: e) ]9 p( s9 c e8 y$ x: a7 S' s% S* |8 R
Int32 input_sample(void)2 E) i3 O) w! o5 U- [
{ $ p! k0 L; o( m' g3 O, _+ [
AIC31_data.uint = MCASP1_RBUF0_32BIT;+ v+ M' y( }7 d: q# s
return (AIC31_data.uint);
% P! e$ D* F" X}
# z3 m; r% \. `3 @- K, n' L
) ]. H( Q/ Q% H8 R, k" Z, R |
|