|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 T+ u9 ?6 F5 i
main文件:/ p' t$ A5 x6 Z4 m2 F3 w' _
interrupt void interrupt4(void) , m- y! W! h& c7 `8 O# g" m
{
4 v4 L' i3 A# J' d. x. l Uint32 sample;
4 i( x( N, C* P ]6 C/ ^
* |) v5 v* K0 c( i4 l( l sample = input_sample(); // read L + R samples from ADC1 p- R) u2 {% _2 O/ w, l
output_sample(sample); // write L + R samples to DAC
# q3 ~6 T" b$ p3 v return;' E0 r! k$ B& h7 ?( n
}0 a0 L! i3 m4 Q1 F
5 K. P/ X# _4 u; C3 i' H6 k! C3 g( tint main( void )
& l9 g8 _9 F* }7 l) k{
1 z/ T G5 C! g) G6 ]* [7 v7 v& r$ v5 P7 O2 j! C
/* Initialize BSL */
' @" ~! g- Y( M+ | EVMC6747_init( );
) Z0 P* W0 ?4 t! i /* Call evmc6747_intr function */
: E, r: K" q) y# N' I" _/ `% L4 X aic3106_init( );
7 |* W+ s" F: ^* n- { while(1);
- l+ D9 K/ u& k5 @, m2 t+ K}' [7 B/ ^ b' i i1 I1 y
! ~" \5 I8 G3 E2 t" t+ x* [3 Z2 h: b
* S8 P1 T3 g) F ]1 U B* z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& N- n! J- f) c6 W+ ^$ _) d/* Initialize MCASP1 */
" E, j; U' L* C mcasp = &MCASP_MODULE_1;8 U0 ?2 b7 u# ~/ E
mcasp->regs->GBLCTL = 0; // Reset
/ `: V0 `/ `6 X. i7 b! b- @; h mcasp->regs->RGBLCTL = 0; // Reset RX
' p3 B9 Y. D: K( Z5 f+ L mcasp->regs->XGBLCTL = 0; // Reset TX
8 M& K6 _) M0 [. `$ ?9 G mcasp->regs->PWRDEMU = 1; // Free-running
2 V! i; Y$ s+ V+ Q S, \* B // configure McASP0 receive registers
+ O2 f* P+ f) S: a( u2 ?- f5 v! U mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used- e+ `3 D3 r; _6 |$ i
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
b/ k- c* U+ R mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 r/ y% h, J/ Z mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ H5 D( c! [5 r. { mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 t3 G2 m& x! `# ?& m2 G. r mcasp->regs->RTDM = 0x00000003; // Slots 0,1! N, W2 N" P! e# ~4 ^4 }7 k2 ~
mcasp->regs->RINTCTL = 0x00000000; // Not used) \7 z9 R7 o9 ? g+ j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ Q e6 n" L1 z8 a, |
7 M! E1 c1 J4 \; [ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used5 U; r4 t1 `- b5 i
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 Q; C+ l: Q" O mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& y4 {- H p/ g1 B: [1 ~ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 a1 ^* `1 n$ b1 C& A4 T
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 x$ b% ^6 g/ e2 A" `' D mcasp->regs->XTDM = 0x00000003; // Slots 0,1
8 K# a/ M4 e. u6 {7 ^" ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit7 K% x, X' D2 \: z9 N* g1 E; n
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I6 B. ]3 I3 X. y; G/ F
, ?! Z) Y5 b6 u5 V2 _, O
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
" W' w$ P; H7 I' B* q mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT a. L: C! W' O$ V$ \
mcasp->regs->PFUNC = 0; // All MCASPs
+ {0 ]" `2 r6 N9 c- G2 K% a mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 O9 m9 \$ b& p% B1 i- n% A8 O7 u) R4 p4 j5 I" E
mcasp->regs->DITCTL = 0x00000000; // Not used
3 N8 ?5 k5 i6 l s/ Y' S mcasp->regs->DLBCTL = 0x00000000; // Not used+ M0 ]1 J5 [) B, |% C- M0 Q% I
mcasp->regs->AMUTE = 0x00000000; // Not used0 y E+ s9 A% e) f/ _5 j) F$ X0 |0 i
2 W. g# L* m8 r8 _ u; d" i. Z
/* Starting sections of the McASP*/
/ P3 L$ {7 `- m1 w2 t) J5 D2 | mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) V7 a$ H9 W0 G% O* g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 P! W5 @( f, y9 s5 i& Z1 W: N mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . c" Y0 x- V9 L3 n0 j. E: R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( d8 @6 A# r! @# S
" v: J6 A$ l4 i6 M3 v5 b2 d; c# b mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* N! d4 G8 X) Z4 ~( ?: n t while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 t6 A: |2 E; h; ~0 i6 o3 W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 Q/ L3 L8 P! n6 K0 I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' u% [7 b1 Y6 A ~* V4 P! ~# Q' l
/ b' P: {& E% r) E mcasp->regs->XSTAT = 0x0000ffff;
! U! q) D. E7 q mcasp->regs->RSTAT = 0x0000ffff;
- E6 b* r6 g" D Q) A
p3 d2 d4 T5 v& h% c( G mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 R. m: @! V- F3 E7 _# d& f I+ C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 u. O3 o% b, I6 f
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 f" Y* X) U+ \* i- O& `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 `' H) P/ B, @* n3 P, ]8 f
; _8 o5 n1 u& C3 w /* Write a 0, so that no underrun occurs after releasing the state machine */
* z# X) s# b3 ] mcasp->regs->XBUF5 = 0;
( e% c$ w! n' T5 e( J. D$ V2 U mcasp->regs->RBUF0 = 0;
" F+ i+ c, Y0 S# }. K+ \% b$ Y
% \/ v s0 V( X7 {9 L4 E mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 E( w. K# ~: s( C8 @4 I9 |
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: H% @- s9 H8 w f: x; M: d
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 c' D6 G& f! x* z+ m/ ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 W3 B# Q* s* C/ J8 Z8 a
$ I5 w+ I5 P9 `" n8 ` mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( _6 V1 R' _4 ~. \5 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
H8 R9 I B/ G( U# v/ p- F mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" \5 S# c" X% \9 i% ~3 w- P5 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON ); z4 S8 S/ ^' ~3 ?
0 R X$ }) _% u, G- S CSR = 0x0000;8 ]/ z, v G0 \$ \8 A1 k
INTC_INTMUX1 = 0x3d;
3 k9 B# ]5 q4 p9 _) y ISTP = (unsigned int)vectors; ^8 P! |3 ~; g/ O
ICR = 0xFFF0;
$ a& a$ q7 X; @0 w" q# e/ q IER |= 0x12; + H5 V" Z: J1 n! i( O9 d% r& r# w
CSR |= 0x01;
" x% U. H1 Z% H/ l! W& y# d9 ^
, n6 P: g9 v8 e- y$ H
2 O: {+ ]2 ]* A3 K+ i" l Q8 P) j' A5 ~. i, `1 Y
还有就是两个输入输出函数:
6 h9 |' T6 M5 C, G" d0 Ovoid output_sample(Int32 out_data)" V. A" M! [- r
{
& A+ d$ x1 W( p P8 @. G( y AIC31_data.uint = out_data;
" M! a l9 a4 |8 J' W MCASP1_XBUF5_32BIT = AIC31_data.uint;' p) m7 S; L$ W$ B Q( ^
}% N. p. J( I5 o' W1 G. q y
, I8 R' X/ g9 yInt32 input_sample(void)5 h; q5 T" k% S& S9 f/ J, e# j; t, H
{ 7 m6 c# a5 O& Z- [
AIC31_data.uint = MCASP1_RBUF0_32BIT;* ~4 m* o9 K, q2 h5 `0 J
return (AIC31_data.uint);
2 t8 S8 }, g, m n4 Z}
6 P Y: y. e$ H+ m
; I. B! i' k( P2 | |
|