|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& K, F4 J% g. p: a" V9 mmain文件:2 q' Z' [4 H1 ]! ]9 f( Q% D% S
interrupt void interrupt4(void) 2 v2 y4 P% S3 ]# L7 b4 U
{
" |! H2 ^& {$ z Uint32 sample;
/ A* y! K; G& e0 \2 w7 ?4 t. w' {4 ?* u9 N" J7 i
sample = input_sample(); // read L + R samples from ADC2 b8 v, p$ q2 M& B
output_sample(sample); // write L + R samples to DAC + j- B) h7 g! h, K/ ?2 F
return;+ G6 U) a" s+ R5 L5 E
}! s; j5 T, Q; g$ Z) M- f
, |/ J% R* b( _( J4 g9 A4 i. wint main( void )* L) K" _! a( t/ o2 _% d9 \
{
- [8 | K$ g& ^: k4 M0 M' M8 h# _! o& y6 d
/* Initialize BSL */% v( Z/ I! p& x. L4 ]( g+ H
EVMC6747_init( );
/ N. E! ^6 H1 V7 n s /* Call evmc6747_intr function */9 Z$ Z$ w& q2 E- u) K* C
aic3106_init( );" H$ r, a1 ?" R" i3 X2 {
while(1);
* H2 s% T1 }! y. y }3 D}& v, H1 i5 Q' Y, ?) [& A, p+ m4 {9 Z- D
- D6 D2 N) u. [& ?* M0 B2 g. Q+ F9 S
& `% U2 a! a# ], v- I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ U5 }/ F7 n, I& F
/* Initialize MCASP1 */
6 b- e$ s5 D: U0 @- G mcasp = &MCASP_MODULE_1;+ @+ S b( ]' ^' b; f
mcasp->regs->GBLCTL = 0; // Reset! | Q: @" J) Q% J1 @
mcasp->regs->RGBLCTL = 0; // Reset RX$ ?6 A8 T8 m$ u7 _& b
mcasp->regs->XGBLCTL = 0; // Reset TX
1 E& A }) s1 y/ U h mcasp->regs->PWRDEMU = 1; // Free-running
2 g6 D4 V$ h3 Q! s/ K2 ^; w2 \ // configure McASP0 receive registers+ |5 L3 Y8 [& k# M$ ?9 }& @4 S
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
9 z) ?, F) k8 U, o6 s mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 q* ]7 Z) \+ g3 O4 C6 e! `3 Y
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 L, u$ `6 ?+ J6 o
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ y1 j* c4 B' [' | mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 P- p6 X7 O- e
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
. E1 S& z2 j" d8 J" x mcasp->regs->RINTCTL = 0x00000000; // Not used
8 M; ^ U: c, U( a; d" E+ V0 H. y mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 t4 [# f$ K+ i( t; V0 @# r
4 ?2 g; t. ~5 L. y; S mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
. X. D/ K% _* ] mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ H8 S8 s1 h. y
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% H0 k5 m2 h# A
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; ~9 k) b \9 H) ~ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
8 L) R2 s; \' o( d# R" U7 J7 i mcasp->regs->XTDM = 0x00000003; // Slots 0,1/ x- h; u! B1 c6 b- j- `
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 S# J1 P; j" g3 P1 R$ F ~
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 O# ]* ~. t6 ?. k$ N5 b% ?
# P; \* A) h, D& |6 `. j mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN4 f- L% H+ j9 K7 Y7 @( l
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT8 }. O2 C0 `4 K+ [! e* o# p& g) Y
mcasp->regs->PFUNC = 0; // All MCASPs
, n/ j4 B$ Y' D) k mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* W$ ^ Y4 j# Z" l- D- s8 f% a8 h) s8 `) W |, `+ {
mcasp->regs->DITCTL = 0x00000000; // Not used& q+ s# y* ?3 l5 ~3 b; {
mcasp->regs->DLBCTL = 0x00000000; // Not used
1 x3 p+ M. a: g# y! S6 x/ c mcasp->regs->AMUTE = 0x00000000; // Not used
{! ?7 j$ E7 N* u$ Y7 G$ ], ` o' i1 D6 Y; O* X2 `/ s4 y, x: d! V
/* Starting sections of the McASP*/
, @: I0 j/ m v! A* }" ~( j4 | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* W4 H0 b. |& @4 [. O- Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
2 Y/ S) r$ z; N: b' Q8 D; e3 ` mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: t, N2 \1 c+ `# m while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: @7 v$ s: l' h' S5 q4 J# C* w$ _% t' ]
) T" a1 l" l0 s, W0 Q mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; t O& |3 f- _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 e5 {# h- Z) H+ h3 s: J( w mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " U* z! l1 a. S+ ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 J% e) J. ]% L( Z$ l/ \: ~0 h, w( I9 g( x- U X/ M) X
mcasp->regs->XSTAT = 0x0000ffff;
! Q! Z# }' _" g% `/ G E+ E mcasp->regs->RSTAT = 0x0000ffff;
n5 A8 X9 M4 i+ v7 j8 K5 l( x7 [2 K: @) G2 `( B
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( F3 T1 p( n& Q* o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% M& K" g0 O4 x5 g! F/ A$ h/ a1 k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& L+ `$ `9 [2 T& s' H$ b. d& T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# ^, _; d7 b1 M, b6 L; h
$ N5 L0 t# t$ f7 w$ U1 L5 o0 W /* Write a 0, so that no underrun occurs after releasing the state machine */* b. B+ f, t9 V' x
mcasp->regs->XBUF5 = 0;
0 ^+ S* T2 g) r mcasp->regs->RBUF0 = 0;2 h8 K6 @& u; _; a; i+ h# V1 b
& j' B$ n- k7 E. h+ n% `1 @ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 I8 U8 @) x4 ]0 o* P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 Y- p- R$ y) ^4 `* o
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 W) y5 U; a# q# u! H while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* g6 }0 T2 G- O
. @8 T4 P3 v# n. q0 t' K% ~
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " N- G8 J% w5 Q2 {( T d: z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' _$ u, A/ Y/ r& W7 q; S- ^0 r
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 a- O& O$ v$ K8 h3 X2 M! A% K while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 G2 ?0 X! {6 R% N' T
4 l/ b4 X* X9 H/ c CSR = 0x0000;/ F$ P0 K" }' |' B$ P* v
INTC_INTMUX1 = 0x3d;. v8 m) Y$ j/ B. Z, s
ISTP = (unsigned int)vectors;( ?9 q: s( {: F/ c5 Z
ICR = 0xFFF0; 4 C5 u( i2 v) w1 |5 ]
IER |= 0x12;
; Q5 i- Z5 M# ?' K( d3 J CSR |= 0x01; 3 V4 d+ x% |7 J4 `# f) v$ |5 C
+ G5 d/ O, [! E% g# d0 e2 V
' O' t" w9 `+ r
; G& T1 Q/ v% B' P" ]# J4 t2 |+ R还有就是两个输入输出函数:, R' L3 Z1 b' i* Q( y
void output_sample(Int32 out_data)
. q4 S8 L3 }& V3 ~' P{- a4 U3 A& P$ |* [
AIC31_data.uint = out_data; . Q; q9 u, H" G! m% F+ }
MCASP1_XBUF5_32BIT = AIC31_data.uint;
, R/ r& R4 ]* m! l; [4 n N3 H% r* z}( z: }# O# l: @3 x
& K7 O% a& W! l d
Int32 input_sample(void)
4 |$ V; p# f3 u: z' X/ `" `{ , f" S. R5 ~3 b5 U
AIC31_data.uint = MCASP1_RBUF0_32BIT;8 Z. D& F( v6 g4 V
return (AIC31_data.uint);) E8 } j% B! t% ?& T+ [1 W/ q8 h- ~
}& l, V0 [. L5 z2 u; v' m2 C
7 t- D5 L* h! m6 k" ?" P6 r |
|