|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, H2 p" q |! t0 K* b6 {
main文件:
5 b( g/ C* _( _interrupt void interrupt4(void)
: I- z$ e& A+ i{4 V! B- g$ j1 \8 P, n
Uint32 sample;
; L: F: h- K$ t$ d7 ^: c! N6 T7 Q# k* }" c8 |
sample = input_sample(); // read L + R samples from ADC8 d2 ?, [5 J% t; f5 g
output_sample(sample); // write L + R samples to DAC
4 i$ p8 }0 i* N6 I return;% V+ X! o$ G6 \2 R h) ?7 o# `
}
4 X) Z! C" q1 G& q9 Z, W
( A: m4 x; l8 c: u5 z) Vint main( void )* G. Z, ]$ G8 h& o
{1 c" j/ f/ D+ u
6 W9 f$ l8 l9 ^
/* Initialize BSL */
3 j# V# ]" L5 A. H R s- ?* Y* b EVMC6747_init( );4 [6 a9 Y! |( C9 F
/* Call evmc6747_intr function */
- P4 Q7 L9 [1 T! a: l' | aic3106_init( );& o: a; c( F) b# D4 I7 w$ i" y
while(1);
* ~" S' l! B( w}* i9 ^6 W- P6 i9 @ A9 l# M. G
' U& h; h( \& O* J! i+ @! ]
' Z5 Y2 g) [# J1 W0 C# H0 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 [+ o; |/ _4 z, e* N/* Initialize MCASP1 */6 W$ [- R) U# U* }# {7 B
mcasp = &MCASP_MODULE_1;1 d2 f4 r: b, d; B
mcasp->regs->GBLCTL = 0; // Reset2 @7 ]4 P2 h4 t0 T5 U& z2 a$ Z
mcasp->regs->RGBLCTL = 0; // Reset RX
3 J% d0 ]- [3 q8 r- E9 g6 o3 D. T0 G mcasp->regs->XGBLCTL = 0; // Reset TX: E' _3 \0 l3 k- B9 O) Y2 A
mcasp->regs->PWRDEMU = 1; // Free-running$ |0 `7 n) q4 s+ K; s
// configure McASP0 receive registers w5 m) `: [: t
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
/ d% r# U: T3 \1 i" ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ A: ^8 J, @8 J2 U
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ D2 `/ S+ {9 {1 V% h! B' Y mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side); j" i; c- T" X) p' t! H
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
( M7 y' O; w9 }5 b mcasp->regs->RTDM = 0x00000003; // Slots 0,15 {1 c$ \# T- N1 X
mcasp->regs->RINTCTL = 0x00000000; // Not used! J2 b" t+ A. ]$ e7 U5 |, ]
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, Y8 r( n! _1 C3 H1 |5 V" U8 f _
5 u9 {( B9 l9 N7 i' Q/ X8 e" ^5 B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used q" T, S E& ?8 V8 n5 G
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- e4 g; Y2 m2 J: Q% B; ~% P) z0 C# E mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( I$ R/ \2 K: Q- F
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
a1 M+ F( G6 @$ c# ?$ z# j ? mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& z6 X& y2 Y1 [1 V8 C( L ?
mcasp->regs->XTDM = 0x00000003; // Slots 0,1* @7 V* n% O7 H r* k
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! V" C3 s+ F: `, a: y5 S
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- l& ]5 z: [: y) c, P5 \# m
( |' k* E- `2 y/ I mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN" N4 N) L* w$ a) L" Y' [# H
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 N2 j" Y2 E4 e: l, h) {: c6 r
mcasp->regs->PFUNC = 0; // All MCASPs
0 q0 _; v# ~4 u* J; B mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* Q# ^5 d6 o6 V: f( x
- H, D5 O S* |' J% c ~! g mcasp->regs->DITCTL = 0x00000000; // Not used
7 ]6 L, ~' ]2 b j* \& S* D mcasp->regs->DLBCTL = 0x00000000; // Not used
9 P) Z, d7 w J% V" e mcasp->regs->AMUTE = 0x00000000; // Not used
9 k$ ~ O3 }9 }$ B8 C/ @! b4 a D7 Q5 U' f$ U) y+ I \( f
/* Starting sections of the McASP*/4 I7 A. @* K" r- C* K8 h
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + D, Y& g& M- w0 h2 Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 ?: G8 m' A( P1 f5 J4 m% R- v9 ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' n3 p0 V5 M2 a& @- U& r. Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 H$ d j! I9 s3 A, P% m7 d! P
: D- @& M! L. b- O: N+ ~, E" q
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; \% y- w. n0 l* e( m while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 M* \; u6 V$ G4 W+ N mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) p9 f& H! Y) p0 x2 e6 z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, {: ?' A5 r* A9 N; w! Z) V
4 ^- Q0 [: [3 ]. N' J6 o/ q mcasp->regs->XSTAT = 0x0000ffff; 8 ^/ L! X8 F" A& g- z# o; L- e
mcasp->regs->RSTAT = 0x0000ffff; 2 j3 f; ]5 M+ t
( T; k1 X7 j8 |8 f0 D' @
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 O& m* t5 S* d# P3 _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 n6 }& [$ C- ~ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & E8 w5 Z9 K* e; C) Q6 x p; G8 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 B& h& ?+ J* k. p, v! f/ b( p
9 F: o' \9 q6 u/ J, ^ /* Write a 0, so that no underrun occurs after releasing the state machine */
7 ~5 ]8 s' ~) C+ y* H: D mcasp->regs->XBUF5 = 0;
% N' e/ b* K1 K% T& V mcasp->regs->RBUF0 = 0;2 L9 P+ m {! n. @
# {; U, q @& M& e, o mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ^$ |, }2 w, S' n6 m B7 Y! D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );1 E. B9 q% M6 o3 D3 Y# O4 E! n
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; D6 f8 k- Q- _8 O# `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 b/ w. ~0 k6 c. ~5 x% ^9 \' K
1 E. k% f2 X; e2 | mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : P% V5 N: t( c$ H5 y- Q; r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 c2 c+ Y$ h5 K- ?9 h# g u/ ]. n
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ {6 A6 ?/ U2 x$ I d0 S+ d) I; f6 c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 l" Q l+ I2 L0 K' w, Y
3 }3 I5 f' T1 A6 a X CSR = 0x0000;
0 k9 |9 J3 K% y& O! ~ INTC_INTMUX1 = 0x3d;
$ g) l4 h: x& I" H ISTP = (unsigned int)vectors;
4 J9 Y5 z7 Z% q l ICR = 0xFFF0;
: E. U. K7 \# J: h) p& e8 H, j' s7 e3 M IER |= 0x12; $ X: Y7 d& t+ ^+ m9 e
CSR |= 0x01;
3 S% I H9 h0 g3 V' h3 @
* A& ]6 J" ]. T* r0 |8 I
; g: c1 K* F4 ~2 [, S- ]4 U
6 |+ ^* r/ h1 c" n6 t% f' ^还有就是两个输入输出函数:
" j% y3 V& I Y+ Gvoid output_sample(Int32 out_data)8 \' H( Y/ o9 Z \
{
1 V3 d4 I+ ^5 n AIC31_data.uint = out_data; 2 V* z: I( Z# r: R
MCASP1_XBUF5_32BIT = AIC31_data.uint;
; S4 w6 q) ~/ R0 `. W4 E" `% a}* q" `5 I+ i' J% b6 d
4 Q2 A0 o4 x2 z, k" d7 z" bInt32 input_sample(void). R' @ |& x; z, v4 z4 s
{ 1 `. Y+ G4 R8 Q, O7 X& |
AIC31_data.uint = MCASP1_RBUF0_32BIT;" p6 S! }/ w) S$ W
return (AIC31_data.uint);
* h0 L0 _& U# m2 m}
6 N) p; m6 n) Q
. x( K; e9 B/ S/ s; |. x" k* V9 e |
|