|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
7 a* K* d& v+ {- lmain文件:; q6 [& p! } f1 W% ]( r0 t
interrupt void interrupt4(void)
1 P' w1 s/ q2 \{
" g0 G$ V+ ~# n W8 N Uint32 sample;
, F; L& B9 ^: w, s
/ ~8 Z8 j" v) Y7 v sample = input_sample(); // read L + R samples from ADC
. d4 i- D# C4 A5 u output_sample(sample); // write L + R samples to DAC
; H' f6 }/ T. c; ?( R; Q return;- w& M- q5 }& i9 ]- J
}4 J5 c- M- w; B+ F! n6 N
. U; p0 O; w1 t: }3 m6 D7 m
int main( void )
& q+ B# K& ~$ k% {3 w6 U: X7 U8 X4 }9 N! j{
3 p( V R) w0 M, d1 W, m# n% J% A% @* T- Y* }
/* Initialize BSL */
7 F2 t- }" U- j; p6 v# U; |) l3 s4 Z EVMC6747_init( );4 p% k" d Z0 N
/* Call evmc6747_intr function */
0 X" ^% e2 ]: [# W aic3106_init( );/ ?) C! k" F* a) W
while(1);
9 [8 h# a6 D3 b2 S" f4 ]1 z5 n) L( O( w}& O; ]% K) c! t& d, \/ T* k
# F% f# z7 X% u9 X5 v! K
$ o# O. j& N: S- faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 }1 ^$ w- a: O/* Initialize MCASP1 */
8 s! w) i0 a$ Z" j+ w mcasp = &MCASP_MODULE_1;, }% O% \! l3 B7 \' o
mcasp->regs->GBLCTL = 0; // Reset3 H; y# N9 l6 Z, z8 l2 ^, [
mcasp->regs->RGBLCTL = 0; // Reset RX
- j7 d7 N; J8 ~ C0 ~- ~ mcasp->regs->XGBLCTL = 0; // Reset TX4 v; c! j! z, Z, |& j+ m; a# c
mcasp->regs->PWRDEMU = 1; // Free-running3 @% J0 [2 f0 w- S3 T* g
// configure McASP0 receive registers
6 h+ ?4 m5 }2 | mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used& x7 N& K9 U4 n7 Y4 p
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 Y6 s) q- }+ ^; C2 w' H mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 R# F! g$ ]& [# G% |" w mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ c5 }9 g! F- O! [5 ~0 q; r mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)5 v+ k, Q( v; K2 J
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
% l9 V$ {( D( }# G) Q/ X5 } mcasp->regs->RINTCTL = 0x00000000; // Not used& W; D S, A# v R' y
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; N2 X; n3 W0 G( X4 |
+ D+ E* P& M% H* J% B' F, [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used4 f0 I* Y7 J7 j& }8 I1 k2 V7 p
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* U1 ~6 @3 n+ u* E' ^( S7 Y
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 c, B6 y; T y8 o
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
9 }, G# \+ J3 j' v+ l mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
: T/ @: ?3 W6 c3 C4 y mcasp->regs->XTDM = 0x00000003; // Slots 0,12 u) b5 ]2 W! r
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit4 |$ p W0 L% ]& U' J9 j3 \
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: p% ]3 ]( e: q: u: z4 Q. ~4 v" |
! ^1 O6 {1 ?9 d3 K/ \" N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 B M) ?0 ?8 e; q0 Q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 Z, S2 V F% K: x! N9 e
mcasp->regs->PFUNC = 0; // All MCASPs
* p F: N4 C u- ]6 A# M4 J- R. ` mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 K3 G2 s" C" k- C) j# _( q! {# z7 z
mcasp->regs->DITCTL = 0x00000000; // Not used
* d. a# n; D( m/ M+ }+ o mcasp->regs->DLBCTL = 0x00000000; // Not used
) r& U7 M+ R$ H) ^4 V mcasp->regs->AMUTE = 0x00000000; // Not used
& Y9 u) f0 \1 e0 D2 l# A. a" Z Q x5 A( n; R+ ?% q" @
/* Starting sections of the McASP*/
: e$ @9 S/ w9 d8 t% u! r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 G; Z, D g7 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 2 o1 u. A4 ]4 N! d
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- o3 Y, M0 Y& S% N$ N while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. o( \4 B( D5 j2 y; p) L# B$ b0 \8 q4 f% s9 E, `
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% u8 n8 r6 ^ A" c2 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 z$ W8 m3 X9 S" x. q, I/ x. g mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( H# v2 B' o' Q6 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 g! G9 F8 ]6 r) R, p2 E
: s& x% d% @5 F7 Q; u/ U( m N mcasp->regs->XSTAT = 0x0000ffff;
% ]) n( O: u* l4 W, e mcasp->regs->RSTAT = 0x0000ffff; ( F- U# e' v* R& u/ K7 ^+ Y
$ u9 W3 Z: {* V! \7 p5 K) q mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 t1 w8 n+ ] k: E while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! Y- F `! [8 W# \( k
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! K* } {/ M, a9 T8 Z" g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 i. x& A" A" }! W# F
+ W" l8 s7 L( x6 i: t /* Write a 0, so that no underrun occurs after releasing the state machine */
1 K0 i6 k4 G# V4 K I5 N mcasp->regs->XBUF5 = 0;
& P8 j! U" G& b! D5 ? q mcasp->regs->RBUF0 = 0;* W3 G3 B& G& x3 q/ N- C
2 }2 V7 Y# \7 u2 | mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 q6 f1 h# `# s W$ f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( n7 u1 @ k# z F5 [, d mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 o% K. o! _. c& V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* T4 `' n" d9 q" F+ y) C2 O$ z3 s. U: I+ {4 x% p/ ]5 O
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- e8 w p$ |$ u7 ^/ v$ D4 A | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; a: B& Y/ o9 i0 _' M2 V2 W mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; _; N* d6 L S
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ ]3 m2 R j N1 U4 C0 i! W2 {4 z! U- Y
CSR = 0x0000;! V3 v: }7 W6 z8 r/ p) G+ S
INTC_INTMUX1 = 0x3d;
' M/ g/ T! r" N5 l ISTP = (unsigned int)vectors;$ b4 {9 R! c7 c$ G. o5 w4 J1 k w
ICR = 0xFFF0; ' f! s/ T7 ~2 p x1 r( H$ Y2 S
IER |= 0x12; : _, M- I0 f& M) v# o, U
CSR |= 0x01;
' z0 q- B! C5 w& V# m0 ^) ~
- l7 Y" @( I& e3 m7 }( I0 i8 L! j
6 F( C. s" i `- E( I0 n# ]
) |& t+ k3 x' V5 Y# u还有就是两个输入输出函数:
3 U2 j( J5 ?+ O6 Q4 [, t. yvoid output_sample(Int32 out_data)! i$ F" O z; M2 O) Y5 _" D8 d) F
{
0 k0 X) ?: T) E( S AIC31_data.uint = out_data; 3 \; ^& Z" I6 S# Z% G7 u1 V0 a
MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 i* T9 c9 F& k0 i3 G# L}
- a3 S( n- Q: H2 T4 C6 `$ S: m! v' ~! C
: T8 e9 \! b/ Z0 ]. {Int32 input_sample(void)
$ u5 b; @0 v; b{ 1 U# Y# N* x, x, Q
AIC31_data.uint = MCASP1_RBUF0_32BIT;) g+ g% I' ~4 v* j* i1 U/ `3 p
return (AIC31_data.uint);
+ q+ l6 |9 ?# Y& H/ P} U; `' z5 _/ S$ |8 ?
, Y& e$ a# ^, j+ l8 q+ Q+ {
|
|