|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' [( H& G2 B1 G1 i5 V: P1 d- omain文件:* m6 \/ N! A) v! ~
interrupt void interrupt4(void) & h$ p. ^$ N. m& w6 \' X) U
{
1 v# ?" [" M+ B6 p$ {0 g# M Uint32 sample;7 m2 R( K5 g; e' x
5 f2 u- Q; A; b. |) J sample = input_sample(); // read L + R samples from ADC
4 l0 Y" x( G4 f. q! _& V output_sample(sample); // write L + R samples to DAC
) Z+ W+ t0 t# g% _+ u2 a/ D return;
3 z9 ?! ]! a( s}
" O3 p, c" z: L, H k) L1 O' @! X9 Z$ t* V3 B$ r/ w1 ^
int main( void ) a, m) Q6 S! f( k' u
{
+ L* v; }) N/ Q& E- m1 V0 x' r% a& Q; H: [! C0 o& T- ~1 C* q
/* Initialize BSL */$ S+ z7 T* A4 D4 d4 c7 f* }
EVMC6747_init( );
2 k6 c! e% @9 r8 s2 ~: O /* Call evmc6747_intr function */3 G- f5 i" n) [
aic3106_init( );
7 h8 N% Y, R! f. U- P- Z while(1);6 d+ F7 I8 |# r }( @6 r
}1 n+ Y& {8 k& D% g8 `
0 _7 ~# J5 S# q9 }2 Q3 i8 C/ e
, Y2 m: x1 D+ ?4 maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 X c- p- l4 A( \% t
/* Initialize MCASP1 */, }1 V3 ?! }. r9 K
mcasp = &MCASP_MODULE_1;
0 n6 ?+ E; x, u1 Q mcasp->regs->GBLCTL = 0; // Reset2 I! a5 z9 j9 [& u2 s9 R
mcasp->regs->RGBLCTL = 0; // Reset RX
& T+ }# `4 N) s; t( o& n mcasp->regs->XGBLCTL = 0; // Reset TX
1 T' c! r, X& K q8 z) }4 Q mcasp->regs->PWRDEMU = 1; // Free-running0 t# g# ?: c% G$ A# t+ Q
// configure McASP0 receive registers. ` `2 U/ a% O9 U! S5 \
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used) j3 G: ~7 z/ R$ G2 H/ m/ Q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 k R* D7 c' ~1 e- h3 Y) C
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# c/ x$ e4 p# B5 ^: ~ mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; s. _; _9 S& X( b2 z4 G+ d9 [0 L mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)1 J' P' d* V6 i6 w" E- m1 v
mcasp->regs->RTDM = 0x00000003; // Slots 0,10 p! B& p- K# |$ C
mcasp->regs->RINTCTL = 0x00000000; // Not used
$ V ~, t$ \+ {+ e5 b7 f mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% x5 n0 b, T: f( I* H
* f$ M7 N/ |% T- W# [$ R mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used' ~9 m, M3 C1 q o. ]2 I
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 H0 i$ D, k9 k: Z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! t$ }# I( ]1 r5 h% {3 q
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: @5 V8 S3 T0 {: b" t
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK0 G4 v$ _+ E6 J' d- ?* g
mcasp->regs->XTDM = 0x00000003; // Slots 0,1; }( Z/ P3 s/ o6 k2 l y0 U
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit& I7 @8 K. x! L2 G1 ]8 G/ r
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# c* B S" ]- ~. ]5 T
. ^* j% e) _9 M. N6 q mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN5 V* o! z# V% G2 ~& i, z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
; z2 K( v& J% c mcasp->regs->PFUNC = 0; // All MCASPs7 X6 R, o0 h+ b6 H/ ?! y/ R" U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 w0 p9 y8 ~. w
5 [$ B! Z* F$ L+ j5 z
mcasp->regs->DITCTL = 0x00000000; // Not used
# D$ [: @. w: p+ l3 d% h mcasp->regs->DLBCTL = 0x00000000; // Not used
! G+ P* W/ t3 p, L% i4 ^& I mcasp->regs->AMUTE = 0x00000000; // Not used, j5 @/ Q9 I: \" I2 _
% |- F5 R' M) w. o O/* Starting sections of the McASP*/6 [) a- F$ p0 V! g- H' ?" ` p
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, g/ Q8 X9 X0 Y0 Z2 Q6 U g$ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); ) c+ g/ o3 s# A) R! _$ B
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 D2 e: k( g. f" G A: n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. e. K1 R$ {$ f5 _8 N9 `; v
+ V4 T, M- d% [2 e mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( j1 F# Z; |& H$ g
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' }8 o6 C0 g0 D4 P" N0 D: D1 e) d2 e
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & |2 I% i$ O2 z$ a d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# ?7 A8 E1 k: @4 y* V
0 S" ~+ z3 N) Z
mcasp->regs->XSTAT = 0x0000ffff;
7 Q9 y( Y2 ?* }; R. S mcasp->regs->RSTAT = 0x0000ffff; 6 N Z: \$ P2 y) s( b2 e* y
$ {2 D4 J) p% L+ j6 p mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( @* e( J: s. r0 o6 N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ V$ t" \5 v- z; i) Y! `
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 C. K' u8 V5 g1 T1 U' v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( s ^4 Z _! o$ k8 m, t% s* @
8 W, `5 J8 h1 [& W! ^ /* Write a 0, so that no underrun occurs after releasing the state machine */3 r w7 g( m" _
mcasp->regs->XBUF5 = 0;
- I; ]6 U5 \0 [! x5 K mcasp->regs->RBUF0 = 0;8 ], m! @$ M& H! B0 c! z
2 K; H4 Z& m6 A+ I
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
+ s$ w( y* S, G2 Y% Z/ B8 {7 z2 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 L; N2 W: J7 ]2 E" \9 ^- @9 Z1 Y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( d/ |- n2 m* V; O2 ]8 w [. J
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* t- j5 J1 ?( n" J8 I* `" F+ y- }! V; p& |! y
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + m) U, d9 V+ |- K1 m$ ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ S: S: _- h; |5 B7 k& w! R' W; Y mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. N& J% U; X1 \ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* l- l# E2 S8 C3 d$ e* U3 ?/ R; O
: F+ s! L4 z+ P2 g8 O$ i! j9 D CSR = 0x0000; h, p5 K% I! J5 j1 o4 j% G
INTC_INTMUX1 = 0x3d;0 P/ Q) B( Z; C4 M6 t1 C
ISTP = (unsigned int)vectors;
+ F" _' M( n7 S' S f* J; a ICR = 0xFFF0; $ w. F8 ?- ~( w
IER |= 0x12; $ h( A4 S. p+ t, T) j- D: n
CSR |= 0x01; 0 @- K. ^' t8 S! t4 P3 n
- z) r: f2 J, R
3 N! B: l1 C3 C$ H: O0 |( F7 _0 d, m6 z
还有就是两个输入输出函数:/ W8 v" j/ o% L. R5 p9 e
void output_sample(Int32 out_data)5 Z. N3 }- o, N% P! e
{
, o3 u! M% F5 x' r( m3 k0 s6 k AIC31_data.uint = out_data;
- B. h1 R* ]3 Q, g y; A, F2 c MCASP1_XBUF5_32BIT = AIC31_data.uint;/ E) L2 {0 i" N; w- V3 m& H
}6 J' {9 G( p5 b1 a
' n' ~" ~# ]5 }; m/ DInt32 input_sample(void)& P# D1 w# M) {2 H
{ 9 f' x2 p$ ~' U Z, B. z5 J
AIC31_data.uint = MCASP1_RBUF0_32BIT;: Y. L4 \* _. ^' g
return (AIC31_data.uint);1 E% i: ]" n. M, \
}
/ c4 D% G9 A+ A7 C1 z. z/ B1 K: Q% n/ C2 \5 _8 W3 L
|
|