|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# Q# B; g7 R/ I7 A( a! i0 Fmain文件:: f" Q: c( L9 l7 \! {# z z
interrupt void interrupt4(void) : a, k- }( h) m, D X* i
{
0 l' U4 _& Y4 A5 \ Uint32 sample;/ v( f# v9 `: t& `! \* j8 a
! F# H2 y% w) Y' Y) y+ p2 Z
sample = input_sample(); // read L + R samples from ADC
$ O- S- x. s+ g output_sample(sample); // write L + R samples to DAC
5 g- g7 L w/ f return;
2 t o3 C3 `7 k Z}
4 x. s1 {( D' @/ f1 u
4 ]2 B# J8 K* C* M0 kint main( void )7 y: n' @5 w) ^) X6 ~) ^! [
{
' G7 I9 U; u6 @! u, N
; q2 l _3 p! S: B( g% k4 l! `8 o /* Initialize BSL */ s F' R- w# K1 A! H# [8 a1 p- D
EVMC6747_init( ); B6 n- S; R9 Y* Y; E
/* Call evmc6747_intr function */' i/ d) W9 r/ w; G! w' W3 V
aic3106_init( );
4 b( u+ Q1 H8 G( J8 i while(1); Q @9 Y; \: Z2 z
}
# p+ K* @: p& X6 Q, r$ G0 V) z
& b: I' U! Y n% {( l& Y
- @+ E5 S& ^/ g G+ F1 X5 ~. y* Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% X1 a. E- L. E' |+ K n6 X/* Initialize MCASP1 */
; E) p) Y9 Q1 [$ C8 W mcasp = &MCASP_MODULE_1;3 E5 S7 L/ I5 _# B
mcasp->regs->GBLCTL = 0; // Reset& K. l c$ A1 O- t) i" ~$ h: O
mcasp->regs->RGBLCTL = 0; // Reset RX9 S A( x- m! X' g( k- x
mcasp->regs->XGBLCTL = 0; // Reset TX
3 j& t) u- u2 i6 C, U2 K! w mcasp->regs->PWRDEMU = 1; // Free-running+ X& e! E* F1 N
// configure McASP0 receive registers% D. G" y( _9 H! {0 E) t5 n& o$ \
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( v1 t! V4 a% h4 L! H6 E mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& \/ ~: [4 G+ h" r3 S5 r" z0 f
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 b+ T3 F5 ]% `/ H0 w5 q! R, w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' x' a$ p+ ?0 m$ d; w: F
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)) D( [0 v+ {. W, V8 r2 Q# {
mcasp->regs->RTDM = 0x00000003; // Slots 0,1, v7 Z" T: ~0 c3 @9 c$ t% \, f
mcasp->regs->RINTCTL = 0x00000000; // Not used# Z2 w3 X8 O5 r9 x2 |9 x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% D4 x) t5 L7 y. ]; a" I
0 }# [* g8 d7 B4 j6 l mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used* R- _% W5 ]4 m. E# i+ k$ H
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 }" o& l2 A. H- N
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ U- Q: }: u8 r0 q! s$ v. |0 [9 b5 n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' L1 [* E4 {1 Z" `
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ H7 L2 b- Z& l+ ?
mcasp->regs->XTDM = 0x00000003; // Slots 0,10 b. K+ M& h5 M) {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 o) F5 I8 R) `1 n6 i
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- V1 K/ N5 a4 `( g
, h5 `$ P V5 X mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# w+ i) b% C0 Q E b. D3 r5 X6 K
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 | W e1 ?0 ?' J: c# }/ M
mcasp->regs->PFUNC = 0; // All MCASPs
, V2 F$ D8 m4 e8 D$ W' D mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 g- B4 c2 A" i# N6 C$ X0 ^
+ ~; v& r, \. N: @: K+ t# ^ mcasp->regs->DITCTL = 0x00000000; // Not used
5 o; d* f4 Z0 k2 M mcasp->regs->DLBCTL = 0x00000000; // Not used
) o8 Y$ w) ]' O- c7 D) i" S6 B mcasp->regs->AMUTE = 0x00000000; // Not used' e" u5 e' A8 Q/ d
1 ?7 `6 d- k. ~1 j/* Starting sections of the McASP*/8 Y& O" [6 \7 t. |! n6 @9 R
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + J; e& P7 u% k" Y( G* N( ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
6 D9 p5 |+ ~9 e' m& U mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; K w& D6 v. Y# e2 d0 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" o8 \0 C. ~& e: n: T' E: g% C
( V5 Q+ m$ W+ A9 c7 B! ~/ y0 v$ { mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! s. y; Y$ }9 B% A3 c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- N% T" {' V# K/ W$ o6 | mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : N1 m2 S/ U' {4 \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ T" Y! [' j( ^3 v
4 V6 D' ^5 _& w3 e4 ?5 \2 r mcasp->regs->XSTAT = 0x0000ffff;
: C: G$ T0 C6 ~+ D& C! e mcasp->regs->RSTAT = 0x0000ffff; / \1 f f" n1 O [+ I1 x
2 l0 C0 S& t4 k5 @ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 n: G, R0 u6 C, z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, }+ n6 Q* k" W) L, F- J mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! ~4 z( {' z) Q6 e* Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. E5 u' e! {" a1 `2 E0 [+ s
# I! r! d& O5 ]7 h4 `( Z) z /* Write a 0, so that no underrun occurs after releasing the state machine */
( J0 } }% [* D mcasp->regs->XBUF5 = 0;
+ f2 l- R% g( B1 g. ^+ _ mcasp->regs->RBUF0 = 0;
4 a& \# N6 Q& h+ |# j6 e
" x( W) S" O% A: c& `1 h2 r mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 U6 N+ H6 r1 N3 K" C1 y- Z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 {; I3 F! ?2 X# p9 ^
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 Y, Q3 f# J `7 s B1 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 S7 @ u* [0 V* X2 T! h& n
3 C3 Z4 s7 a9 R+ F8 ~ mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 b2 G3 B+ l, @1 y2 d& S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( {& C9 v7 y4 }6 V5 a mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % t% w' @1 u7 }& u1 o( B! L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( ]5 b# b% l8 l
8 ]' a0 J7 i/ V' D CSR = 0x0000;& j( v8 k# z& d5 t- C5 D
INTC_INTMUX1 = 0x3d;
; G7 r. T% n7 C ISTP = (unsigned int)vectors; d: u& L) q0 \2 J' [
ICR = 0xFFF0; 8 j% B, K3 Y" g
IER |= 0x12;
8 v/ k: g; x& h! f" ^1 K+ t2 p" f CSR |= 0x01; 2 E" e# E7 z4 q: k; c4 |& N, V( l
6 {) y$ N2 }. X7 I% n
) q, k' X( U5 z+ U5 P
" V5 b6 d( h* U3 d7 U
还有就是两个输入输出函数:
; @8 n- f {! bvoid output_sample(Int32 out_data)9 B4 S. O3 c) Z, G- \4 i3 W
{7 |/ b/ U/ r5 _$ x8 b
AIC31_data.uint = out_data; / e4 i; l, o% x% P$ O! Q% n) U
MCASP1_XBUF5_32BIT = AIC31_data.uint;( P" t: _% b" c g1 F4 [
}
0 c' N5 r& P8 l+ ~9 ]5 L e) u. _9 s9 o' f# s# c! M
Int32 input_sample(void)- v2 h# D6 c' S% ]) T7 u( e
{
+ [# y7 Q$ u- ?$ `3 K AIC31_data.uint = MCASP1_RBUF0_32BIT;0 ~# h# o% d% e& |
return (AIC31_data.uint);4 b# C- ]% _% j+ g% ?
}( w1 H+ ^1 a7 r! Z% [! X
2 v2 a7 m* c4 u$ B9 J& c9 c
|
|