|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! n! m0 H( G2 ~5 hmain文件:5 F7 B; y( v# y* j8 {; I
interrupt void interrupt4(void) $ G. B1 F& G/ D" D
{ Z9 N1 s+ y2 u
Uint32 sample;0 K9 _1 R" G& l
- t& R; }$ F0 M0 @. C# Q5 O
sample = input_sample(); // read L + R samples from ADC
# \: z$ u% S4 F. @7 ^ output_sample(sample); // write L + R samples to DAC ) k, I. I/ w% _* U
return;8 D: w( {" _0 P) k
}
& e {8 r0 z: Z) c6 g0 l
, v3 T; x$ S9 _/ ]int main( void )
/ F6 u! E% \. F' ^- T1 R% M{4 l9 d+ T$ b8 h! q
0 o/ l+ C! Y. V. p3 t /* Initialize BSL */
; g% o9 g0 u$ R5 d$ X( T0 \( m6 K EVMC6747_init( );! _4 o) _/ |1 P+ @8 ]0 k& ~
/* Call evmc6747_intr function */, d: E; A" M" ?) }
aic3106_init( );- _" H- L# G5 B- g. w0 H
while(1);& x9 c/ j$ \ ?- s9 p8 a E
}
- K9 z* Y' q8 a8 O4 H/ B: U' w1 x- Y5 N) h9 ]: e, e
% n% D1 H' W8 J, |, p& b6 p# a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; N" x8 H3 c2 [ p
/* Initialize MCASP1 */
7 i' F: k7 J9 D: B @$ D" @ mcasp = &MCASP_MODULE_1;3 X( m8 @% l3 A7 T' U- l3 r) e: p
mcasp->regs->GBLCTL = 0; // Reset
6 H- o# W4 u. d( P2 G mcasp->regs->RGBLCTL = 0; // Reset RX
: ?/ h9 R% F) a7 c" B mcasp->regs->XGBLCTL = 0; // Reset TX3 |; a5 X- i& g2 f# |$ X2 n
mcasp->regs->PWRDEMU = 1; // Free-running2 q% T5 g4 N* `$ W
// configure McASP0 receive registers: B8 Y$ r4 l: q- X
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 H' S. |, s, C( ~
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 }, [4 o7 O1 @ mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ h5 Z( Y/ `6 H
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% b$ I/ M. o5 p$ a) a0 D7 \
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% }' O9 K3 B* a& |* B" \ mcasp->regs->RTDM = 0x00000003; // Slots 0,17 a8 \& _/ |- i4 L& V+ x% l3 \
mcasp->regs->RINTCTL = 0x00000000; // Not used
) C1 e9 X% J* ~4 b9 d mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 S! p# t) [8 N6 M( h5 H$ i
& X) r) c7 w' K
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
1 [7 y/ O0 c6 z. x i5 z& f' X mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus ?8 p. ?7 C c' Y2 }
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 b% I# ]. Y1 r* [* P. ]% y
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, s/ Z# m, q$ j( ^' b V) ?2 B mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
K- E% c& G# m8 V! o5 e6 f mcasp->regs->XTDM = 0x00000003; // Slots 0,1% X7 Z3 g5 }! B
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 y" w. x9 Y+ f1 ?
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 ^6 d% s4 b1 [+ x
6 o4 K! D2 _# r, @8 |5 @$ y: }
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
' ?0 e9 c; s: b# \& H0 N$ f9 p* E4 \ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, Y! c* ~5 j1 @9 r7 u9 L2 L mcasp->regs->PFUNC = 0; // All MCASPs+ E7 |6 p2 N( z
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# i. }; a' o1 X! _2 z
. D1 w8 {% t# |9 S% m1 a1 ? mcasp->regs->DITCTL = 0x00000000; // Not used
: o& O, A+ R/ Z mcasp->regs->DLBCTL = 0x00000000; // Not used& w. r: r8 A* r$ j- U- e% N
mcasp->regs->AMUTE = 0x00000000; // Not used* V) | l5 l2 k
+ A5 n- i( o! t7 k b9 s5 T
/* Starting sections of the McASP*/& A) r" l# d5 @- T1 p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 ^/ L9 F5 o) [ o: |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ; o/ n- S0 ^$ v% V
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * a* t: ~3 C4 x0 _: d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ a6 b# d- m6 I8 M5 Y i! v. r' d6 s" ?* P+ Z; o
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
A- y: F& ~. w4 R' G: f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 ]3 H* E$ w0 X3 t
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! V I% S/ [3 z) u [! L# W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ S7 J3 w1 b+ \0 X( J, W) ?4 n) u: f/ P n
mcasp->regs->XSTAT = 0x0000ffff;
" v5 @ T& M6 b) K/ O mcasp->regs->RSTAT = 0x0000ffff;
+ ^9 S5 J3 ?& ?* y! s& A% {: u. c/ v' S# l" T
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) o: W5 g) G, U
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, i3 ^1 ?8 F* n: Y$ k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " o4 t2 L9 k) v8 A$ q' C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 O7 C/ ^+ Y5 c+ s1 s
" @1 _. n" Z2 G* ?! f /* Write a 0, so that no underrun occurs after releasing the state machine *// ~/ T! ?6 ?' R0 { }1 r
mcasp->regs->XBUF5 = 0;" X" g7 n- a0 y$ D
mcasp->regs->RBUF0 = 0;: H2 a) E8 ^. E/ M; z
7 {4 v. A) w3 d, G2 e* ?) B. y( \8 _
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 h- O+ v( V0 I1 |. W/ L' ~+ B while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ x$ I, k: B @' t
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; f# U8 v; Q; \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" T9 o6 A4 V+ T' ~$ N5 G
* @: h5 s6 F8 l6 I) B mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 t, f j N- }3 {8 n/ D, w# C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. _8 l, A2 I4 l* S S4 z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 o( ]& V& f. C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 n. z7 s& I B2 w
3 Z# i) a' {: P3 T! n9 p CSR = 0x0000;
+ a* E* C1 Y) L1 B INTC_INTMUX1 = 0x3d;3 s. a# z# g, i, X5 [# x/ U" l; G
ISTP = (unsigned int)vectors;# w3 ^. ~# n5 h# [
ICR = 0xFFF0;
2 |; e% }1 x: i2 }. g9 l8 F& w3 Y IER |= 0x12;
/ V" p3 p& U2 r. V! r! o, O4 w CSR |= 0x01;
' @; L8 D5 T5 o$ ` w1 k" p v
9 e. z( N2 t/ H! v5 y0 s, q7 k8 T& F$ L. T6 @8 `9 S
$ B3 L6 I' L9 j9 A: N, R
还有就是两个输入输出函数:8 k+ E2 y. a& G& G# y& y
void output_sample(Int32 out_data)! }( p d& C) H
{
" l- [8 f( j5 R0 g0 P! j0 { AIC31_data.uint = out_data;
/ K3 P; I. ?- a MCASP1_XBUF5_32BIT = AIC31_data.uint;6 K5 n9 K) C' T$ b8 @( y2 X
}
0 e2 G2 W; I4 R: e: J
6 v! ?! l' p, P# I- L" ~8 c; }Int32 input_sample(void) |8 S% I; H( V
{ ! \( `# N/ [- \
AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 g6 M2 s/ R' m$ X c+ ] return (AIC31_data.uint);
/ n5 H2 _% s L# O" h}
3 t) n( X6 I9 I+ ^1 ~
8 K& l' t6 v8 G$ H( A) a8 d |
|