|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! |/ V! C5 W: J# n0 Lmain文件:
; y. k6 q. h1 U9 [3 e( v6 yinterrupt void interrupt4(void)
) ^5 @" r: j4 k3 e4 a4 T{
- d/ S$ @9 B) [ Uint32 sample;6 G L* \, Q% g2 W: l. F
2 S; S; O+ ]8 g6 w0 l/ ]9 l& Y3 M
sample = input_sample(); // read L + R samples from ADC* J# I6 R1 ~; E% V0 z7 A2 ~2 U
output_sample(sample); // write L + R samples to DAC % R- D- Y v/ D; g
return;
; e q7 j% }2 d3 z9 p! }9 F}
5 b$ G6 {$ N1 x: H3 h/ P5 x5 k( q
int main( void )
' T( l( h2 r9 I* x! x6 m{! g% ^8 G9 d) y; z
# ~9 D) W2 _; f' p /* Initialize BSL */1 \ ^9 ~# J5 [' L0 k
EVMC6747_init( );
2 E* o+ Y3 w/ c/ T( m6 [! r /* Call evmc6747_intr function */( ~' d% B7 X6 `- H0 v2 `9 i' f2 Q2 |* a
aic3106_init( );2 h- Q3 C" X- ?; W9 E) I
while(1);
, B' f: q( c" ?. c}4 [) J! B- ]' A3 d* m, J% d
2 R# v2 U. o$ `$ V# t) ~
; x) @2 ~: T$ C0 J- t2 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. _" e$ S: a8 M% P4 v0 B3 B& Z/* Initialize MCASP1 */
% {, _% U( }% K- @) t mcasp = &MCASP_MODULE_1;
) F$ d" b: H8 w& Z. \( H! m mcasp->regs->GBLCTL = 0; // Reset
# @2 z( v" O4 g* I% k/ x mcasp->regs->RGBLCTL = 0; // Reset RX
4 v$ d. k0 a( X2 S* r mcasp->regs->XGBLCTL = 0; // Reset TX3 `7 ^1 Q7 }# y* S. Y4 w
mcasp->regs->PWRDEMU = 1; // Free-running4 l3 @7 w% G0 x" ^8 D$ b: p
// configure McASP0 receive registers
8 p) U+ U, S3 Q' G. N2 B5 ^4 K mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
# b" y3 Q7 b0 p3 A9 ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 O; w8 ~7 l$ V) n* Q( `, a! K mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ P. v# X3 W3 c( s
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 W: Q2 _, F' K: x- S5 ^" e mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 @6 H$ X3 i- p5 _+ |3 | mcasp->regs->RTDM = 0x00000003; // Slots 0,1
) M: d$ n) Z( | mcasp->regs->RINTCTL = 0x00000000; // Not used, D6 J) e4 |( ~9 u
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 j' v. e& w. t! p+ B
4 m' X6 w/ G" X1 Z0 \: f" [1 A mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. W E6 y- G6 f* V
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: Z7 h1 t8 P* s5 I$ T- E
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 B7 L) v$ e% c; q, N
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! f/ i. q2 d- a- L5 |- Z& q2 ?+ c
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" j# M* u' U: t8 E/ I mcasp->regs->XTDM = 0x00000003; // Slots 0,1
4 k! l, ?. j9 w2 [4 ^ mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* G) r* {. A% F! {3 X5 i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ C+ P+ z- Z5 P' L$ _
! R, F4 R# k- a% p" o( K' O0 d$ o mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
2 W) U5 p. i* s+ E- y mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 t* L9 {- p. {2 n
mcasp->regs->PFUNC = 0; // All MCASPs
, p0 j0 T3 R8 i0 W mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ e" b* Q6 x m# y c5 L
0 Q/ t5 k! x: D4 T1 I- ~* [ mcasp->regs->DITCTL = 0x00000000; // Not used2 v4 u" D ~9 `" c0 Y
mcasp->regs->DLBCTL = 0x00000000; // Not used7 `" F- ? a" g# s N# Y0 s7 k+ K
mcasp->regs->AMUTE = 0x00000000; // Not used
, E0 N. n4 U' h7 e$ M6 E& F
- b/ |/ c9 w: O1 n+ |/* Starting sections of the McASP*/
& o% Q2 O( z! F- t& f' w mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 J; u" d# `/ a, x, _
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
% t' }( l: f: z# P7 G mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' f/ z: b+ `2 W! W2 h6 v4 Q8 x
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 |0 M& i P) c" b3 n5 m
1 u' t: g$ g+ Q2 |' b+ Q3 ^7 T
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 ]! x# o w( w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 p" f# c8 J( l1 U: J
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; l4 {- k3 d# N! g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& ^2 f0 e5 p! [8 q. {$ i* O5 r
7 [7 A" s3 [) s6 p; U mcasp->regs->XSTAT = 0x0000ffff; 2 `; C3 f5 R# L4 L0 O5 d* J
mcasp->regs->RSTAT = 0x0000ffff;
- Q/ j2 I- q, f6 @4 s C# {8 M$ l9 f& U9 }. J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( v( ~8 h9 ?; \1 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 y0 c; G. J9 p# h) f+ E
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 ]# I* J" o& Z" b; { while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 h f- n) o7 }1 r! `4 W: g- H, L
+ T3 v% f8 V) N6 m
/* Write a 0, so that no underrun occurs after releasing the state machine */
5 h+ ]* _2 y' [$ m mcasp->regs->XBUF5 = 0;
& b% \) u3 A% Q7 R4 A: q. M mcasp->regs->RBUF0 = 0;
8 [( ~6 o# \ z3 J' T. D8 Y) b
) q& _$ | i [0 `: g E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 [7 A+ z& H2 V% o. m9 ]. {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 G* e4 Z* w1 u3 ~# {& ?
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ K! R' @& H7 E6 L/ P3 @5 T G; ] while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 J: z# P% y* H& ~3 U% J) P6 I; j1 g0 z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 I$ N$ ? i- x+ g& ^- |- K7 d" P
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* H, T! b/ L5 \. J& I* X5 Q9 K) D- P mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & p1 x2 ~0 p+ A4 e9 i* v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 F, e, Q4 \" {' Z I- M
9 G; S; W. T5 J9 h0 N. J CSR = 0x0000;* \3 f& O: H2 F; ~0 ^! a% r6 F
INTC_INTMUX1 = 0x3d;
' x- i/ d6 f" G5 D& F8 j ISTP = (unsigned int)vectors;4 l7 R* {; Z* D
ICR = 0xFFF0;
3 x" c/ K( H3 w! W IER |= 0x12; # g% T9 n& X2 b+ \: \# w8 J
CSR |= 0x01; & z" ^4 Z8 B+ G$ ^8 h$ m
! h# D# Q: w# ^1 e# T
1 d- O8 h9 r) r) G
; c% i7 Y7 B5 ]- U E还有就是两个输入输出函数:
, J+ L" J( T! \2 x! T. uvoid output_sample(Int32 out_data)
, ]& I% j9 k: r! t{& R, _* f. f/ Q) X
AIC31_data.uint = out_data;
& V* B/ a' _; f; T$ r9 J0 r( n( w, N8 Q MCASP1_XBUF5_32BIT = AIC31_data.uint;
) b+ v) ]7 d' g# W' Q7 z- V}* Z2 }. a3 o M" Z {* O$ S0 v6 n* D
" m) B/ ]( B6 BInt32 input_sample(void)
- }1 N% ^; V( k8 ?8 L6 t{ : u' k1 T3 ], F, I! A& w
AIC31_data.uint = MCASP1_RBUF0_32BIT;
# ]8 x& O$ B0 `0 I0 Y return (AIC31_data.uint);" ~2 F+ e+ ~0 O& V) K5 z
}& V! d! `* p! p; q' u/ m2 d3 F
: T' `# u3 r z
|
|