|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 z8 e* o: x6 V6 K
main文件:
# ^: e; u2 Q/ k3 `4 M" n' Ainterrupt void interrupt4(void) j) L b' w0 v: X0 G
{
. B) m( f- o3 T* |& K4 F) t: w Uint32 sample;" R# e; z6 P/ Y6 ]
# g" ]+ y9 ^: x4 m
sample = input_sample(); // read L + R samples from ADC
- i* h+ D9 q* t; S o, e* s0 q, \ output_sample(sample); // write L + R samples to DAC
9 f/ K; X) o1 d0 S1 d' H7 @7 I return;
5 A$ v I% c7 _+ g* d}
$ Z6 {0 o2 Y& _; e
& n' v4 v2 h8 i) O; r6 fint main( void )3 |; l B, ~# s: h( b; M3 V. i
{
' M5 d" `& z: G
1 r$ V0 [& m+ u /* Initialize BSL */
& u2 q) c, l) U4 S5 m EVMC6747_init( );' z. k8 x B' }* u
/* Call evmc6747_intr function */, C0 e+ v3 r2 N
aic3106_init( );3 D* b% a! W. C4 B! B3 e8 H
while(1);
L; i {+ N9 K; |9 d" {* n9 A}
+ J: p! ]$ n0 _3 g. F; S! F- R. S" u5 a T) R' l6 c
/ i! b8 w, B5 S: t- D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* p2 V Y% [+ `/ `" }+ a# Z
/* Initialize MCASP1 */2 [ o) B; m4 c& T% u+ e
mcasp = &MCASP_MODULE_1;4 W+ l8 Y) S' n. P. t2 q
mcasp->regs->GBLCTL = 0; // Reset
* l: D1 n: l3 M) k+ j) p mcasp->regs->RGBLCTL = 0; // Reset RX
2 h* g7 |; G! ^& e& |' m2 w9 z mcasp->regs->XGBLCTL = 0; // Reset TX" P5 L, W6 _! x4 C3 @) \! @
mcasp->regs->PWRDEMU = 1; // Free-running
; K @- j/ \! z9 ]+ m // configure McASP0 receive registers
. Z7 m1 g% \8 ]+ e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 k, r# t5 u4 ], u) u mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ Z% U4 l( H% c& o* j% o! K mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word, w* v( f/ S4 |
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). B* Z0 u2 F' A) i6 J
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- ^1 n8 D4 {- U4 U) J mcasp->regs->RTDM = 0x00000003; // Slots 0,11 P3 K) B- r5 p$ C+ `. _5 j/ \
mcasp->regs->RINTCTL = 0x00000000; // Not used
* U. R6 { h3 x& B mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E( ?! C( r2 Q- a( j
1 B0 E/ m* R& P7 |" _3 I$ _, X
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: F- J( e' R2 t. ]4 k& X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 ]. Z, p. B X% g7 J& ` mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 a* d* T% I: A! [) ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. x3 {6 h/ Q9 |$ B1 [" z" \
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK+ {5 }- d( l% I; a: @1 e# r5 m/ N
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
& c' {4 e# _! p; s2 X mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 q t+ d! k/ l. L( _5 R& e
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) @: K1 e8 W' y" O" t
5 ^% u; f' J9 P! B mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN# W$ \& N6 w; S0 O
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT* s& i; o3 u6 `1 l: J& N
mcasp->regs->PFUNC = 0; // All MCASPs2 ?. n. q: V; ?
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ I# o5 s, ] o7 o: g
0 l, O, u3 u# m' o- n1 { mcasp->regs->DITCTL = 0x00000000; // Not used
! D8 J+ _' `, w2 l4 X: x! B mcasp->regs->DLBCTL = 0x00000000; // Not used
( x6 P8 v( f9 G* ^ s# T } mcasp->regs->AMUTE = 0x00000000; // Not used
! ?0 R7 s; u9 X, }% Q; h7 g* v {& X+ J% L
/* Starting sections of the McASP*/
7 R: ^; Z) v+ b mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 k+ U9 W' u5 c- h2 o. G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 6 @ Z5 h1 c9 \# F$ U
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * _$ R" s7 t, j [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON ); M: }. Y/ x6 Y8 l# Z! a& U
4 V. p4 ]# d% c, n6 _3 | mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 E7 n) T( \; u0 Q5 G" ~3 ]3 ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# A: N W; L+ O% L0 O: N+ t* w) S& ]1 a
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 D7 ^6 D4 i) i4 M+ ?' m" y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 C- ?' w; a7 j; j7 D
; x/ z7 u5 D1 B
mcasp->regs->XSTAT = 0x0000ffff; - Y* B" |* S4 J7 G
mcasp->regs->RSTAT = 0x0000ffff; 6 X* {& m/ I! q% u& s' @/ K
7 c/ v) g t0 }, o- t, T mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 u8 a5 }6 `2 X' ]* p. I while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# b- k' b9 W5 m+ ]! N0 O mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; d* k9 x9 g4 d+ h
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ D) X+ u2 i6 y9 s8 D. b# Q% e* ^4 ^; c8 j3 _
/* Write a 0, so that no underrun occurs after releasing the state machine */
0 N; b: t7 R/ S- c$ a$ m mcasp->regs->XBUF5 = 0;
$ @/ w+ s/ {- A K8 z mcasp->regs->RBUF0 = 0;7 i9 n/ M% k. P1 i, n, o8 @- d
% B$ ], m$ x" N+ h mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % b4 F0 m# P! G9 s! H
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' ~* a$ S; v+ s& w mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; g# ?6 u g7 G4 u* F; i |
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. F$ d1 D1 I3 S9 q+ j/ U# i
2 ]& C$ z- y/ y$ F mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : p3 j2 L" V9 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 M% b1 Y# X ]- Z7 { mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @5 S/ l. M$ s. O+ n0 J% ?! I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 \6 Q7 S# H+ R* `: L# n9 P5 U/ t
CSR = 0x0000;
% C* l: h. |- w INTC_INTMUX1 = 0x3d;9 x7 Z, ]* U7 R2 P
ISTP = (unsigned int)vectors;# j/ d- p( O% P4 g7 c
ICR = 0xFFF0; 2 m+ h0 \1 v1 {+ |# z% i
IER |= 0x12; 9 |7 U- l/ F/ R
CSR |= 0x01; ! c0 \3 T& v9 Q& e3 L; p
; \( }$ y) e* E" A6 p/ C9 r
2 \- L5 V5 k1 q
; j7 V- T! K! G0 B还有就是两个输入输出函数:
9 X. \5 J- T# J1 s8 k3 {) n, x# C0 Nvoid output_sample(Int32 out_data)6 A3 @ z, A+ i$ Y# ~; d k
{
3 ^' y y3 _6 ?6 z3 A$ ^ AIC31_data.uint = out_data;
1 ]0 `, u+ g& m: ]1 a MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ f1 y7 e8 H' P6 ~}
$ Q0 G3 e6 S7 W" B i4 p0 v6 a% W5 u+ P ]
Int32 input_sample(void)
; O8 y" t8 A% w" [9 `{
, b; P: e, Q, q v AIC31_data.uint = MCASP1_RBUF0_32BIT;
# H9 ]+ S4 S" u/ I# A1 U3 m0 q return (AIC31_data.uint);$ j+ c. Q |; r: i* ^5 m
}
( f2 s/ }3 V5 H7 U- [
, c8 L$ r$ I* P% q |
|