|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( y, ~9 |' o/ s- k& U9 `% }- Amain文件:& c$ E- }: O: ~6 M- b
interrupt void interrupt4(void)
; @5 R3 [# I5 _) U% B% w{
7 K) L- `' g1 G* S Uint32 sample;
/ @8 q7 ~) x+ H! _. g- q1 c" K* `' k2 P& K r- ^$ d" |6 `0 p
sample = input_sample(); // read L + R samples from ADC
! E) F! e2 C, @, r output_sample(sample); // write L + R samples to DAC
5 J2 J' |* ?( }$ g3 ?6 L return;
& a. L8 m' ? L* m6 H2 w& h6 b, I}7 g) r8 p T$ k0 n p' g1 W! I5 G
4 F4 r+ c0 d( p0 P, V& c" ^5 i* j3 g0 R0 jint main( void )" E/ p* g! C( g7 k
{2 J' g# j1 m+ e/ A H
. e; W" d3 W* @) X- F# ]
/* Initialize BSL */
0 w4 u$ X5 O6 e/ O( ?* c0 C EVMC6747_init( );
9 E9 `4 D+ n( ?$ {/ A8 _ /* Call evmc6747_intr function */4 W5 w; e7 z* ?/ S4 |" \0 c* p* y
aic3106_init( );
# V! a5 N+ x9 L2 @0 J" B5 y while(1);
8 L. h) V0 }/ \ C0 G. q! ]# u}
& Z4 V. @) ]5 D( u9 g* }
/ s, x% t+ z* U$ o5 a4 e3 I- _2 o, h! Q7 g! `3 S' B1 P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题4 T) w( F4 ?5 \0 \% k2 r& A; o( }
/* Initialize MCASP1 */
8 ~" B8 e, d) ]+ l, s. g+ g6 W mcasp = &MCASP_MODULE_1;
6 ~& k6 h' G% Y2 w* I' s6 n( [5 D mcasp->regs->GBLCTL = 0; // Reset
: t; Y. `( @' \ mcasp->regs->RGBLCTL = 0; // Reset RX6 L% T+ X" X1 X* w- {$ k- I
mcasp->regs->XGBLCTL = 0; // Reset TX
5 T/ h( v7 |" j% _6 f mcasp->regs->PWRDEMU = 1; // Free-running
$ ^3 \* b- d- E/ W // configure McASP0 receive registers
* M4 B. N# T K* J1 v mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
) w9 Q/ i3 @9 F& p* }, v1 `2 q( y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 g q. V$ Y( T6 r% _+ |" _! r mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% b) E7 X+ Q8 {2 X
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 A% B; U8 B c/ Q mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)% {, j+ d! U3 u/ m9 R
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
' I8 S' H6 P4 ^0 l1 f; A" J8 C mcasp->regs->RINTCTL = 0x00000000; // Not used3 e) v( M% a i2 S2 H: @
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 E' B" w3 v- s5 b" Q/ t3 V
_8 ^$ |- L2 l0 f* K
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ |( G+ Q$ q; s
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. C1 c9 X( D; R$ p' f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* z+ G4 T& b: a9 c$ W mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" z/ j# i$ ]3 T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK- I6 E5 f% R& U; @! s
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
) H6 B5 {5 C! _: A( z3 l- Y5 Z mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 G- z; |" F) X) {: H( N
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. y+ A" k# F/ E" V& s2 W# J j
3 r. Z0 M" U: ^
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
V9 B7 s4 P8 U2 `3 E( V9 B2 r mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 Z+ S8 s q3 I, S7 ^3 n9 E
mcasp->regs->PFUNC = 0; // All MCASPs
3 n9 h- ?9 |5 g$ L3 i mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ \8 S# l0 I3 v
: c& O8 P- v% K9 B9 p' I mcasp->regs->DITCTL = 0x00000000; // Not used+ L! X' [6 z1 X# F, `
mcasp->regs->DLBCTL = 0x00000000; // Not used* W* V2 j1 P Y9 N
mcasp->regs->AMUTE = 0x00000000; // Not used% z- c. q% |5 L3 s e
: x- n& j0 i$ b y/* Starting sections of the McASP*/, p/ ?6 c1 d" z4 y; W
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . O: z5 _4 u) x; ~* Z1 ^, a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
: A8 f I! c1 R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & t+ ]8 I# W' i# b3 P. W
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, i$ F+ g. q& c8 r6 z! b, ]7 c( m) t7 R9 a
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
c2 b$ W: R ]- k& q3 L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 O; l9 b, K+ T: n) z3 ?0 u4 w8 R mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - V/ X3 P' g+ r$ q5 V' e' t2 @
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% S( S# B: ^; }0 m$ b& w' r% m. d* K) v: R7 T& n
mcasp->regs->XSTAT = 0x0000ffff;
4 m& }: W' D6 n5 p mcasp->regs->RSTAT = 0x0000ffff;
! R4 |$ |! |# X( f% M9 S8 G! ]
" B8 ]' ]( r& W# O0 n4 t% r mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% e5 [' S, D& d# J: E6 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 a" |, S! Q& _6 S% } mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
0 w! ~- v7 d6 _# F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# S+ U; X6 K% x. s
% ?+ t7 h. R/ Z) s* C4 ~& q /* Write a 0, so that no underrun occurs after releasing the state machine */# J; v0 |! G9 U+ G3 G
mcasp->regs->XBUF5 = 0;8 M* A" Q( ?4 L: e
mcasp->regs->RBUF0 = 0;
u. G% |. \2 N0 H1 e; g0 C) h8 M4 @+ {
! u6 V3 d1 C* b mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- ~( f p" e7 w0 U# [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, O/ F3 H9 P: ?' z* `3 R8 j: Q6 F mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 ^& C4 X. w) H- w4 i" P7 Z5 | while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 G# a1 t" z8 e; \( M
& }3 S3 [6 }! y$ _6 I. N mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- J# m4 o7 F, _, Y {" L; W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# ~; v8 x! c' L6 N6 G mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . m3 `% O. c( B" b8 U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; X$ A6 L9 s4 [0 o2 f& |! Y2 D% A" A+ i# \/ x( V
CSR = 0x0000;
3 K( N$ W) {2 ]/ l3 R* J- M INTC_INTMUX1 = 0x3d;
: c: K/ A. t; b& t1 T$ B# ~1 I ISTP = (unsigned int)vectors;- w# x$ v6 b/ @
ICR = 0xFFF0; 0 h Q( G# J) f: u$ s
IER |= 0x12;
! J- m) u4 z* v CSR |= 0x01; 9 C( h% r& Y" m9 |1 D( `' f+ w! B
3 e+ q0 d. o* Z& z, n
2 b! d! h) `) A
) l( @' f/ i& |
还有就是两个输入输出函数:/ {6 O2 D$ N- L' A
void output_sample(Int32 out_data)+ Q# A: N% D$ Y4 V5 Q i; a
{* c- b% N& x, X8 W& P' a% Y
AIC31_data.uint = out_data; . J. \; c- q1 O; V/ [+ ?. |
MCASP1_XBUF5_32BIT = AIC31_data.uint;% U" @! a# V# }1 T; f4 g
}
2 M. E) I* U7 r; P+ k
@8 D7 M* P. X* i; I$ j- S6 mInt32 input_sample(void)( b' q- F6 O9 R
{ ' V0 ]- z3 b2 y3 L- | D: r1 P
AIC31_data.uint = MCASP1_RBUF0_32BIT;
. n G$ ^" _" H" I7 y, T# o) p$ { return (AIC31_data.uint);
: k; O: C0 u, N( a6 ^! u/ C}
$ g' J4 C, T3 h( T$ p) X$ t4 U4 Z% I
|
|