|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& H+ {6 y" l7 [0 M; H+ z+ U! Tmain文件:6 ^6 ^& n6 R' c) y" }: p. J
interrupt void interrupt4(void)
# g7 E8 {8 U' z3 L! X{
9 J$ K, w) J# k! D" b Uint32 sample;
; G3 k) m+ ^/ L ^$ V4 M
) |7 q( E- p2 n& m sample = input_sample(); // read L + R samples from ADC
p7 _ p+ C3 A' k, c8 ^ output_sample(sample); // write L + R samples to DAC : A* v# ~( y' a& Y( M4 g
return;
& I/ M" ?0 J' r/ V* X}
1 M* b! T. f$ W( I" l
+ U) A: o' G2 T# yint main( void )
2 X. k( f/ q' c{
1 ]: \2 u8 }7 J# u0 [, U
. J& Q x3 D9 C a; C /* Initialize BSL */# }% Z. b0 _/ M# O. W
EVMC6747_init( );$ j! @+ u& H/ T4 F
/* Call evmc6747_intr function */% e0 y3 x% g) z! n" Z `, x
aic3106_init( );
8 e; F* S6 y* n9 E while(1);
4 _) t3 N5 B% H6 S: ]7 S# t/ L! M}
! x- X- N( P4 j9 L( v4 Q6 _2 ]3 _ a A" G; ~7 g6 G* s% s% n l/ k; f
4 z4 `% m8 v- n9 N( d) kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ [9 V; H7 ]2 F" ]/* Initialize MCASP1 */# o7 J# P2 y( U, z# i
mcasp = &MCASP_MODULE_1;
9 J9 j9 r3 b$ L, y6 b" ]) b6 [ mcasp->regs->GBLCTL = 0; // Reset) \- d D* @0 B5 ?: [3 D( G3 b
mcasp->regs->RGBLCTL = 0; // Reset RX1 S4 H, @ Q, v8 x7 ~
mcasp->regs->XGBLCTL = 0; // Reset TX4 l+ |; a4 J( v6 I
mcasp->regs->PWRDEMU = 1; // Free-running, w- D$ v% a1 e1 L) ^
// configure McASP0 receive registers. L4 M- D8 J6 [
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used N% b0 n( W9 {
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( g" R4 c. m. {+ I, n7 Q3 S# ? mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! \3 U) E! O: L8 f0 J
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% u B ?" \* A! [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ ^& M3 a" i+ O" ~7 P4 Q6 M
mcasp->regs->RTDM = 0x00000003; // Slots 0,10 O4 U: b9 a: T8 T
mcasp->regs->RINTCTL = 0x00000000; // Not used' h! g/ q5 E) V$ [
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ g6 v0 W0 v& ?5 {1 N3 D4 z6 i+ N8 _
# ~0 W: n+ u/ v& v0 L' C mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used. A- v+ d# Q( W$ o; v
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( q3 R3 {# T: \& i- ]4 s" t mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# M( \: j6 V( w6 n( q: W
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 M4 i% k9 k: B; S9 B, d+ R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& X) G P$ k7 b5 h1 f
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, S7 Y% _+ E* }/ r0 K( \+ R mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
* N5 o# X. j$ w: o& y- F+ L/ k0 D mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; h2 K6 C% N. ^- V i( K* h7 e: Q2 l! c& e$ z0 i3 T3 y! r
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 u( t1 [4 x; W
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
! ?" u% u) ^$ P3 |6 |) E* P mcasp->regs->PFUNC = 0; // All MCASPs
) j- c0 y7 h9 x mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. `0 t1 [. C. D% ^
( Y& L4 O, G* ] mcasp->regs->DITCTL = 0x00000000; // Not used& ?# k5 m+ w. W$ x; A6 n
mcasp->regs->DLBCTL = 0x00000000; // Not used
3 `1 y5 j) ~+ i: N! D4 z mcasp->regs->AMUTE = 0x00000000; // Not used# K9 S8 w1 \! y' W, e# L+ J# U
) }+ J7 O5 R6 A3 n5 N' D- `/* Starting sections of the McASP*/
8 p% f% f# l3 C! d2 { r mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 S( ^5 _! A6 v/ ^ ]
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- X( ?! n7 i6 R9 y* W# h) P mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; f; w) ]/ e2 a+ U* T+ ?
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) h3 n# k- _3 s3 p" D. b
7 r) j q# V$ \5 j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 z. x1 z0 K& }$ v while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 I; P3 q! S+ Q6 n k
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 j* W" B" F' O# w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! T: J& Z3 X3 a% T9 x% M
1 l( o* o) N( j& F
mcasp->regs->XSTAT = 0x0000ffff;
7 B! L% m) H6 g$ y2 @ mcasp->regs->RSTAT = 0x0000ffff; # s5 U# h( }# p3 q0 m: ]) q0 v
" X5 E' P/ e8 E6 I k+ \! F
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- d" g) n1 s( F' ~4 ~+ @* @ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' T* l- s- c& z( F8 |" L6 k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* x8 N( ~8 t3 e" j' y v' U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# J% K: F, d& i( Q1 u
. F6 G* A2 g! o- y8 G /* Write a 0, so that no underrun occurs after releasing the state machine */
7 r/ [& `# i$ v0 G8 i mcasp->regs->XBUF5 = 0;
m) s& c* O1 V# j J; B mcasp->regs->RBUF0 = 0;8 s" a7 o; c0 J8 |8 O" H
; \0 @" a! N. C6 {1 Q mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * S4 C- N1 A! @! I
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- S1 h; M/ c- }3 X3 s) x' H5 p# B mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' r x1 C" Q0 i$ O! J, W7 P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! B0 u4 P. A; R" j$ E2 z1 I, }. y( s' x. ^# }
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 G, Y% t) z# X8 ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 K. v: x: O% g+ S) Y; j: ` \
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, _( `1 z# [; W0 ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ y4 S, w: I2 p: V% N5 ~% ^ A
; p: d; \' Q: [0 x. o: q% Y$ W CSR = 0x0000;
* b3 e0 I0 O3 D' ^, R INTC_INTMUX1 = 0x3d;
5 d2 w- D, s7 S1 w; @ ISTP = (unsigned int)vectors;# I4 \+ Z3 n5 F9 {5 E8 L* [
ICR = 0xFFF0; J, \/ ?: H* y
IER |= 0x12;
/ S- @% E8 n: x! F CSR |= 0x01;
1 M* C* q/ l4 B9 J4 G1 G# l* B) c. g. L! L! y1 S$ w; }
- E/ }% s; Y: u X0 j+ b( K
: s* K" g) f4 ]. e: J0 q还有就是两个输入输出函数:! i ~0 ?; _3 W+ A8 b2 S+ U2 I
void output_sample(Int32 out_data)' r$ n9 f7 }; l4 N. V, a J
{1 \! s o: r/ m4 `
AIC31_data.uint = out_data;
3 O( [& B: ^) s. B- J/ I+ f MCASP1_XBUF5_32BIT = AIC31_data.uint;! D4 q+ k, `3 h+ h. x; ~
}
) S, M3 N5 ~( J- a- x+ m. L0 H8 r" _( W S0 m+ ], Q& D
Int32 input_sample(void)& m: ` c0 D4 |0 E& N7 E
{ 0 F. g6 i% w I$ e
AIC31_data.uint = MCASP1_RBUF0_32BIT;$ W& n( K, g# a+ d, s
return (AIC31_data.uint);
- v' M% C, @% y8 ^}
" t, Y: i/ l1 ^1 t; M; O
5 Q6 t. a/ G' a7 n |
|