|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% W: [9 [ j- Z& |: Y
main文件:4 i: A# j- }2 \9 U
interrupt void interrupt4(void) 7 w' ]8 K# V" }6 m/ N
{
) i3 O& }2 Q% P* J D4 r$ e Uint32 sample;' I+ ?4 }+ f0 Y
: p9 D c c% m
sample = input_sample(); // read L + R samples from ADC8 H" g( i- W. f' r: D/ J Y/ V
output_sample(sample); // write L + R samples to DAC
0 M, l4 C* B2 Q M+ s9 c6 o return;( d. I$ z$ ]* O
}6 }2 D- u! P0 x6 f- O
. J& R8 ?, h9 W
int main( void )8 m% q5 L6 l# R# l" }
{% w( u% f( R) z" s
/ p6 S& t, _- A/ a6 b: O0 h /* Initialize BSL */
4 E6 |: } N) D; e- b: J( N EVMC6747_init( );: P6 Y' `5 @0 B5 Q1 L4 i5 L
/* Call evmc6747_intr function */; e0 T. y% n* h3 I, a
aic3106_init( );
9 B% S9 W) e# X, c6 j) W$ q while(1);; V) x, a( Y0 s1 |
}
+ c4 m" o1 a+ I1 [. U! ~& x) E, X1 G1 X i s
' Y0 i) E7 G# m& Y2 m3 U" l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 ]! @9 c6 f" c8 l
/* Initialize MCASP1 */
) O2 ^# S( `! J5 A6 A/ ~+ l: E6 ~ mcasp = &MCASP_MODULE_1;2 `+ o) N4 \% z
mcasp->regs->GBLCTL = 0; // Reset& U0 F' W+ v1 {* J1 j, h6 R
mcasp->regs->RGBLCTL = 0; // Reset RX
. b# {, u N) G mcasp->regs->XGBLCTL = 0; // Reset TX2 i0 D- T! }5 O1 b: z" [. t
mcasp->regs->PWRDEMU = 1; // Free-running
( J2 F* A7 [- X' ? // configure McASP0 receive registers+ e( w& Q. M4 T3 r, E% M! W& A
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used* |+ d3 A) D# h3 s! |
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 M. X5 q s, h0 u3 I mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
a/ b5 s: B% F9 N, P7 t mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; ]2 Q/ F) C2 P5 m$ G/ L! N mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ \7 V) Q) u/ ^3 O2 h. ^# S mcasp->regs->RTDM = 0x00000003; // Slots 0,1 }5 l/ D8 ?, \# ]/ t: {2 l1 h
mcasp->regs->RINTCTL = 0x00000000; // Not used
5 C0 d' D( k$ X* Y: B mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! A: H$ O8 R2 K+ C4 K! j% s3 J) E2 H. m8 P
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ n# {! P ~& D4 u
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& k8 e1 s+ [2 m; ?2 @ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 \, ]" G% @1 E8 F& E7 n
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! k" Y7 P& P1 J) a3 [ mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK1 Q% w4 F) O! n1 Q, E ~
mcasp->regs->XTDM = 0x00000003; // Slots 0,1' e' F- C1 E6 j7 h a! g
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
" U# q( T: A! ^ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 C( g+ u6 [- J
7 `; p9 R- f$ c+ R1 @" W mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN; v% o7 F# D7 u q7 N
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 O( m I) q) e) x0 _
mcasp->regs->PFUNC = 0; // All MCASPs$ }" G! N) F# Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: ?) H1 l2 Y4 m+ T# j
+ u% l l0 f3 }6 v mcasp->regs->DITCTL = 0x00000000; // Not used
8 N" [, _* v2 x, U5 R mcasp->regs->DLBCTL = 0x00000000; // Not used
4 C% G2 A# k) `* z) G mcasp->regs->AMUTE = 0x00000000; // Not used1 n# u7 i: M _; R* ^7 u
6 r( L( d9 {' C6 G3 g3 u5 b/* Starting sections of the McASP*/) E* M: t/ G z3 ?. |8 g
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ u7 r# f; }( M% O+ o! E4 V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); , ~" C3 [. w1 v! G
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( T7 [" T* o% f+ D3 V
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );2 J0 r: N& q$ U. P7 n% k
# M+ W/ l m! U6 A' ~/ c3 o: a
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
9 b' ?# B# N) F+ J/ u3 ?" ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" H8 x, x1 J& L) ]7 ^ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . y: Q' ?5 k6 O/ `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& {; H9 E$ q5 a% g# R/ s$ P2 w
/ D5 r+ c( u( X, D! X0 ~' S( t, P
mcasp->regs->XSTAT = 0x0000ffff; 2 B3 u/ C1 J9 n3 m5 E
mcasp->regs->RSTAT = 0x0000ffff;
5 H2 ~+ H6 O) ]* Z1 u& A% S1 @& \8 f: Y& @( t2 d- C2 P
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 b4 R b) P4 Z, ~0 j( ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ c+ P$ N! `# { mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; N0 k$ H$ q2 u6 W7 N e& U3 s* T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 h; G* d. N4 e
9 R7 R; T" |6 ]2 d8 [( | /* Write a 0, so that no underrun occurs after releasing the state machine */
V; r. e/ _# k, t, { mcasp->regs->XBUF5 = 0;
2 A/ f8 K, S1 T0 ? mcasp->regs->RBUF0 = 0;& _- S% L7 j6 n& ?, s
1 _$ W8 d* f* E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! J' N. ]* [8 X3 W
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% |" w2 P/ S# k& W4 q# ]
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 \; q y* _! q0 h! P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 \" w+ m6 d* k: L3 |4 j3 e0 p1 X
9 ?$ A/ A N- [+ l1 n* m mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: v0 d: k6 h# i* Q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! y( Q2 ?" Y1 Z
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 `, `. Q7 L8 p) A2 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- c; E: f, r6 L1 ~5 E$ {5 `4 n
% w* H+ Y. u8 Y' @+ c CSR = 0x0000;' P' _. o1 n% [
INTC_INTMUX1 = 0x3d;6 @; M0 s" @% D4 e
ISTP = (unsigned int)vectors;
* u8 ^( h3 p9 Q+ @' U ICR = 0xFFF0; * c: W( m/ V+ b+ }' ^2 o5 e
IER |= 0x12;
4 V5 a u9 I6 ]- t8 A CSR |= 0x01; # ]3 y2 I9 _( P6 C' I; V
- g0 ?3 N/ I4 S0 s$ O5 G
: ~8 m0 Q& Y' f( b# g
9 d7 z. C* E* x5 l7 ?0 M+ m还有就是两个输入输出函数:
4 ?( ]% l2 _0 s) k" \void output_sample(Int32 out_data)
/ h# C7 P9 h) b$ i! L" y{/ t k" [ D2 l
AIC31_data.uint = out_data;
) x0 q' O0 {9 J9 I MCASP1_XBUF5_32BIT = AIC31_data.uint;3 c* Z. T" ?7 A* a% A) J
}5 c. J+ B, O6 v9 T" T J
8 R6 @0 i$ q) ZInt32 input_sample(void)+ B9 d# s1 D! D8 C' @* y
{
9 R( U6 W+ g. Q ^7 H AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 v: h5 B g8 }( n) `6 B3 C, W/ E4 u return (AIC31_data.uint);" z) _4 s) A% ?4 J: i
}
* J0 p( m3 V2 a6 h) r+ r6 [/ f) r: H$ Q' `% x% S9 A+ b
|
|