|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 t% z; H3 O* m- ~main文件:
2 V1 Q: y1 x4 R$ L6 zinterrupt void interrupt4(void)
$ u6 s3 {& D# B$ I{
8 Y1 m: [9 [- T, a Uint32 sample;5 f. D; {" \( J$ k& v, I- [; i4 F1 d
# M% F6 r% @7 ~7 w% t2 L
sample = input_sample(); // read L + R samples from ADC
3 F$ \/ n" w1 m7 Z5 t output_sample(sample); // write L + R samples to DAC
( n7 i+ n% |! W* n' \% X return;( n- ]! T* y ]% a6 l4 y
}
E% @4 Z$ y. a! X1 A
3 B8 K4 L$ t& z+ y$ Q4 _6 Dint main( void )! N3 z+ v+ q4 b
{
$ l& Q" i+ a7 x* B" }6 S8 m5 A) c+ Z; ~1 D; U7 ?9 G v
/* Initialize BSL */
% M" V; H) h# p% u EVMC6747_init( );" v4 f; R9 X" Q; {
/* Call evmc6747_intr function */# A& A+ [3 n6 q2 o$ `, i( y, M( p
aic3106_init( );$ [- b; n4 E Z6 X/ ]
while(1);3 x; `% H1 v; ?
}7 K$ N4 j" Q3 g+ r, k5 L" X
3 _" T. I1 t8 t8 z. _" r
_ R4 N- q- e7 k$ r/ }) z1 V9 ~
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! a# \' A, D& U$ y, A8 K/* Initialize MCASP1 */( J. o# e i# U3 j
mcasp = &MCASP_MODULE_1;
# u& d* G% D/ t4 E mcasp->regs->GBLCTL = 0; // Reset+ S* v! F- C4 D9 z& s
mcasp->regs->RGBLCTL = 0; // Reset RX
2 R+ Z% l" F2 k' T mcasp->regs->XGBLCTL = 0; // Reset TX
" H( v8 h8 Q, e9 v5 I* r mcasp->regs->PWRDEMU = 1; // Free-running
* k9 ~; W8 A0 R // configure McASP0 receive registers( o7 p" q, }4 [9 s
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used1 N+ a9 a. h |6 i+ J8 R+ o
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 s5 O# | j) v) v8 X
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word' }7 V, P Y% d( R
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% T+ z: A3 C) F, G, u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)! ?5 l6 E/ B& B
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 R% s3 V3 h4 h: K7 ~ mcasp->regs->RINTCTL = 0x00000000; // Not used k0 k$ z* B: Y8 H$ N
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& N- e' t5 N, h# `5 M$ ?5 I7 c* G0 U- J5 S
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used, ~: v# u2 N) Z1 b+ b! R# {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 X9 |" ~: E( R0 U' v
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& h; ?( X! M' p5 N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" J* _/ P1 I3 Y4 u. n4 h. y' B% |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
4 P4 i, N3 K1 C+ ]; o mcasp->regs->XTDM = 0x00000003; // Slots 0,1
$ I* L" t; @2 I5 X4 r mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 P, `$ b" Q7 S& H! Q; b" Q- M' ~* h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* S+ U! o9 k+ ^$ a
4 J" J) j% U# q6 D mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
# }$ |/ v P0 {9 R/ _0 c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT; ]; b. Y2 Y( ]; g( M
mcasp->regs->PFUNC = 0; // All MCASPs
F$ T+ `+ X+ t% I. C6 _6 } mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 G3 d; U* B% _
* W. g) K1 ~9 S- x$ B8 t# n; V' w mcasp->regs->DITCTL = 0x00000000; // Not used
u) _, a' e3 l6 `+ N mcasp->regs->DLBCTL = 0x00000000; // Not used3 k0 j. y$ a' ]* {$ g
mcasp->regs->AMUTE = 0x00000000; // Not used
3 `: V: p. w+ K; i5 i& ~# [% R1 o7 _/ I$ x2 Y: b5 ~7 g4 U+ Z- v
/* Starting sections of the McASP*/
6 a4 e! j) v/ X! S; i mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" l8 A1 E" T& H( q |) S while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
8 t; c V& l K5 t/ `) ^0 E( i mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! W. @7 W7 a6 m. u( b5 K) ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* {; z# u# K1 d( k7 w' m5 b
0 x9 \" O& O6 g& g mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 B, h2 H i+ f% e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: k$ f& K; I# k# Q# ` mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; C9 c1 R) V2 v L; l- {4 W0 ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
: K0 B- j; ~$ ?0 c3 Q/ S J& ]/ P' @$ E, u( |- V/ e! q$ @/ z
mcasp->regs->XSTAT = 0x0000ffff; / z# d* R7 e( I/ g/ q
mcasp->regs->RSTAT = 0x0000ffff; 3 U: @8 i& L3 n* K
9 g' s, v: z! y9 c, x mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% u5 u; b5 V$ l while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: c" R. t0 y! ]' E4 _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 ], O7 g; r4 d- k( P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& Y0 ~/ c$ _2 I( X* I, M2 @4 D5 c
2 R/ H( B7 B3 K /* Write a 0, so that no underrun occurs after releasing the state machine */
( r6 ] W/ W) ? o7 I8 U' h4 g mcasp->regs->XBUF5 = 0;
3 q' S% n o3 Y4 S% ] mcasp->regs->RBUF0 = 0;& @7 \3 `" R5 {
( e7 d' W$ \" v; h6 W4 R6 [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, r: \) A4 A- ~1 W2 V! s! w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! q" i% r( p8 @ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) c8 @/ ]2 K" _$ i* ^' K! i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 h! m+ v% F& O) b9 x3 u9 Q2 M" V/ j. Z$ B: @( ~/ D: Y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & ]' H' W/ X$ A2 l/ C8 s# E8 H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 a# I& o( M" ^5 r- s% o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 t. t! i" L0 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' u+ p5 M( s& V2 G* o% W0 \( J& K0 d4 Y1 c7 I1 ^: g) T d* a
CSR = 0x0000;
/ W- r0 S( j( I9 H9 s INTC_INTMUX1 = 0x3d;8 a5 l1 W. Y" X) @
ISTP = (unsigned int)vectors;
8 j$ ?6 b; G4 R7 w3 ^+ d. _. V ICR = 0xFFF0;
6 R8 o# p( _6 R. C& y, u# q IER |= 0x12; ) b' q9 O. e; {$ O( U2 X8 r
CSR |= 0x01; ( B/ A9 O) F6 m7 m! d! Q1 x
( _* @; l G0 o& c, S) u4 S* ]
8 l0 z2 z1 L: O0 [/ o
- }# L0 U2 j( E2 \+ m0 o还有就是两个输入输出函数:$ Y$ ?% x' l" C7 q) K6 w5 ~ ] g
void output_sample(Int32 out_data)
u/ o/ A* b! |- Z{+ D% {5 N9 ~5 M& u3 o+ W1 c7 e5 ^4 p- b
AIC31_data.uint = out_data; - h( M5 i1 m/ J. m$ v
MCASP1_XBUF5_32BIT = AIC31_data.uint;
) \# L5 S- b( S r# _5 x+ u9 ]9 n}
) T1 I* S- c. n; u
# m! E0 G+ Q+ T7 ]7 C! |Int32 input_sample(void)
. B2 J" v( ~7 D+ X$ X{ + X9 Y4 w E8 C9 H& h
AIC31_data.uint = MCASP1_RBUF0_32BIT;
G! [6 O2 @4 W/ o O, l return (AIC31_data.uint);& A4 k, W2 W1 f5 J& }
}) h6 y& r. K( y1 F- Y
+ ~8 S( ~4 ~. W1 s* b
|
|