|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) f- [' |: V( j/ N
main文件:
0 B! K# W1 y, Q: u, d# Cinterrupt void interrupt4(void)
/ N8 q* B3 _% j4 \( \{
( I- }7 `6 g# N s! _( k# ~ Uint32 sample;
; f5 u+ |* K0 O; _8 A" F! c) u8 C: g. r2 p$ D3 ~' b) T
sample = input_sample(); // read L + R samples from ADC" @4 y O) s8 p/ o) F2 J
output_sample(sample); // write L + R samples to DAC 4 t1 S: q0 N) r+ \& \! P+ _( F
return;$ u! G' L. S. t
}# L: y, ~) ^: d7 J" F1 Y1 X
/ [2 s1 ^' g$ f- ]6 s3 {! R. b- }/ |. y+ Qint main( void )+ w) z* k3 Y6 l5 |7 {1 O) N* r' M
{
- Y: ]9 K ~" H9 y# t8 U& s
- t0 G$ C: i# l$ h6 M% Y/ z /* Initialize BSL */
! S3 Z" A0 L; l$ U' X EVMC6747_init( );
+ s4 p& a9 y1 u3 o {: O /* Call evmc6747_intr function */+ m* ?" e4 l p5 y
aic3106_init( );
! R1 d( a8 Y) u4 M# a4 g while(1);: W* e! q4 ?% h: `' t$ v7 Y
}0 X2 m6 f3 K( ]0 ?
) U; @- D! ^0 ]+ @0 j9 ]
6 ~3 f- N: m; Q! E, s( t/ j2 Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 ?; b5 `! z* h1 J6 Q* L8 ?/* Initialize MCASP1 */ u2 \1 O( J9 Q( M, L
mcasp = &MCASP_MODULE_1;. e+ m% I, _9 b
mcasp->regs->GBLCTL = 0; // Reset
7 D5 S# t2 t9 M' t. P- t mcasp->regs->RGBLCTL = 0; // Reset RX7 g' y5 z5 u" g
mcasp->regs->XGBLCTL = 0; // Reset TX# A6 ?0 u' q* |7 [8 A) J
mcasp->regs->PWRDEMU = 1; // Free-running' j8 {1 h% v( O% m( _
// configure McASP0 receive registers- W! C k! @% q6 C- Q \% x
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used% B( W/ A* Q/ I8 o' m3 b# @; O/ Y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, Z- Z' M' i* o) B+ J( j" U- k
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; [" k. f! R8 J: S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! A; l7 f* }) k5 [
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
+ |8 c/ y+ z8 P& a' M8 j5 d# q. c mcasp->regs->RTDM = 0x00000003; // Slots 0,1
6 O- R7 \! ~* W* Y$ \ mcasp->regs->RINTCTL = 0x00000000; // Not used
1 K5 U6 r+ \5 U9 C$ O5 | mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- a* q8 z9 K$ e, r8 u0 R
4 C! e4 k: b* j1 j* y/ h) f5 [: y0 u mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
/ n/ U: _1 e" ]/ z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 C( p" e9 q5 n& g% N) Y) _, A
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% z- [+ |$ {2 p5 D
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: F2 c' A% {( l' w( T4 ^3 V mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK$ n# Z1 W/ f8 p9 {' x1 e+ d7 D
mcasp->regs->XTDM = 0x00000003; // Slots 0,1+ ?9 x8 f3 i3 M, Z% e \- n4 P
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ B, A. V; `* C; G
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 H p% U4 T( f8 w! i
: ^+ m, [' I! s; W/ [
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
- f* K; }" N% s mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT0 h( c, X, Z" z" r2 L5 }8 i1 O0 X! |
mcasp->regs->PFUNC = 0; // All MCASPs" L# }5 e, e- T) w
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 p( @" H2 d* ?8 S! @- |4 G, P5 N+ n, x- s) k# l: w
mcasp->regs->DITCTL = 0x00000000; // Not used" _& E J' _( H+ M) H$ C. t. y
mcasp->regs->DLBCTL = 0x00000000; // Not used+ h T/ ^7 A$ w) U3 D1 p; B% q
mcasp->regs->AMUTE = 0x00000000; // Not used
9 A7 J# A0 P2 |1 S2 g& W" e" m. ]3 d/ \8 Z
/* Starting sections of the McASP*/
# G. |. Z0 o" N, N& _; G% d mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 z: B$ i- l# X$ G3 E' V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) a7 S& I3 O4 n
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ h, N0 X) [# P- D/ s6 w
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ b/ h' T/ t4 N# o
9 v% L1 T9 }9 B- e9 [0 l9 C6 `0 } mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
u8 k& F y- x1 b+ R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, u, a0 D. C* \) n! P7 ?6 w8 R7 Z9 V
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 A1 K3 Z4 n; j2 K6 e- z, Y& a
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( y4 ^& ^- |1 h1 |
: a' C; Q! X: L
mcasp->regs->XSTAT = 0x0000ffff; # G9 ]/ q5 ~) Y9 t
mcasp->regs->RSTAT = 0x0000ffff; " j+ L) C( i: l T
+ W, ~4 g# ~# G% E# N' k7 H mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, y, k4 Q! F" M4 e- g: z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ H& e* D. I3 K y+ g mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # |) d1 C. i+ ]6 g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );& Y( ?% W7 m2 S2 P5 @
6 @4 ^! e6 E% }6 j1 ?
/* Write a 0, so that no underrun occurs after releasing the state machine */+ S4 Y5 ~, p9 b" T
mcasp->regs->XBUF5 = 0;
, @; g9 T4 o. A% y% b4 M, q mcasp->regs->RBUF0 = 0;
, I, M9 Q2 T3 h# d% V+ v: k0 B3 Z3 I _' Z: G! A" V
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* P# E( Y- Y6 y% v$ } while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! s* [+ H& R p5 D5 W
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 g$ J; \# O. H: a" ~( t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* `4 l- Z/ D+ g- X
) P, w" P' r. k( e& J mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
# _8 _! z3 f- A5 {& f" q7 g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. ~/ r% p* f/ s2 I( A
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & P* T6 V) U5 ~/ T( H
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" h0 p/ l* x. D' l
1 k& |2 F1 E8 D- N% M CSR = 0x0000;
4 t" A/ `9 Z0 h r9 Q5 A5 ] INTC_INTMUX1 = 0x3d;8 t) c7 n+ G1 j$ r; J7 A
ISTP = (unsigned int)vectors;
6 u( q4 c( t8 Y/ Y" t4 w# i ICR = 0xFFF0;
6 u/ K: p/ }% I; \; M# | IER |= 0x12;
' p( B% T& ], r& C1 n) |* ~, Z# @' N' z CSR |= 0x01; * a2 k2 q, K4 i- x% z
+ O6 A' f; t# c2 I
! E7 v. F% D& E& `8 L4 S2 P
/ M3 v+ |# ]+ X/ x& e还有就是两个输入输出函数:
- [/ K$ m$ J! O* S9 t: vvoid output_sample(Int32 out_data)+ d# F& {9 {- t6 r
{: ^3 r) Y9 t$ W, c1 ^$ \
AIC31_data.uint = out_data;
, \7 L B6 P( `3 q, j. G MCASP1_XBUF5_32BIT = AIC31_data.uint;& L) q, X4 m/ Y1 a. O, [
}0 V3 o! q7 P1 }
: G' O% k0 v' E+ I6 n& G5 TInt32 input_sample(void)
; t6 @6 d) u* ?+ S& ]. g. X{
. F0 G4 C2 B8 J7 f6 q AIC31_data.uint = MCASP1_RBUF0_32BIT;" M# q1 l1 p' l
return (AIC31_data.uint);) E. B* M& k4 H" W; n- o' H
} P ]; B a, A
0 e3 c& h( M# n% N4 |
|
|