|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 \: p) l6 z4 j0 X
main文件:! ~! }" G3 s( O! @7 H3 p
interrupt void interrupt4(void) ' [; s1 ^7 w. g. o
{; U7 x( K5 a2 O: k3 H$ Y) ]
Uint32 sample;
) _7 ^7 U! | \2 K6 I) n h
( ^, v- B5 ]8 l, V+ ^# U2 r sample = input_sample(); // read L + R samples from ADC
! @8 k; O; V, j) b output_sample(sample); // write L + R samples to DAC d' U2 ^& ?4 w' U
return;$ G5 W( q& G @
}
: Y" a1 e# H6 Q( m" Z8 _3 @) g( d L5 G' \, C. t7 ]% e
int main( void )
4 o% H+ T4 g- P B5 C& N2 e0 u{3 N4 f! Y( K& W: y. i
! H6 \8 k. {1 Z /* Initialize BSL */# k8 | P! |+ C) T5 E
EVMC6747_init( ); h! `. y! X- d4 c* j
/* Call evmc6747_intr function */
; Q9 H, x! p/ s5 J7 @' c aic3106_init( );
8 G# U u7 I( y/ ]+ h while(1);, T8 s( C+ e, C
}& |! {, H1 c+ J7 W4 }( Y
! h8 W# \ W4 ^5 ^/ z$ T1 N7 i' d
& u# i1 P, M+ u% |) ]2 d% Taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( G# m& O7 b. o) A/* Initialize MCASP1 */6 {, { e# k% Q7 {
mcasp = &MCASP_MODULE_1;
- _* G. p9 R# v' ~ mcasp->regs->GBLCTL = 0; // Reset0 ]# X7 @% x7 J* ~
mcasp->regs->RGBLCTL = 0; // Reset RX- v, l, p3 M1 a( @0 B8 u% n
mcasp->regs->XGBLCTL = 0; // Reset TX& O! p$ f, u" |5 F4 B5 v+ _
mcasp->regs->PWRDEMU = 1; // Free-running
( L) C' x" \4 {; |% W- ~ // configure McASP0 receive registers! x" @$ x5 h$ B) c5 e; t ^
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' \. _0 I. o3 k; u3 A% r; d* }" \ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# h7 B2 Y4 @9 z& d
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
`! }- \1 ]9 i' z! G" K( @* F mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! T/ G; x$ [' `3 S
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
* x9 l+ m5 d0 P8 v0 l8 S mcasp->regs->RTDM = 0x00000003; // Slots 0,19 z( e( P& Q9 }2 ^1 k0 Y* u" O
mcasp->regs->RINTCTL = 0x00000000; // Not used2 d* j9 u! [0 F# _: r- j
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }0 [. u3 E2 b1 O* \
: Q# A) D! i) N7 f8 N3 q6 q* l
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
# {8 A/ x- b% {: z mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- R5 B# g, L. t! {$ M# d* I3 E1 J2 r mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ t7 ?! _: y6 g1 d6 [ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* D# ]6 _% K/ S$ ^$ o# J! R2 C
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 y. w! s/ \0 i7 ] j
mcasp->regs->XTDM = 0x00000003; // Slots 0,19 i3 @/ o* {. J, Y$ _) b0 n
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# e5 O8 N3 {/ r6 f$ l8 z- \
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 C0 I, H0 J1 y0 V
3 [' a$ I! p- A% V: R9 B" u mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- D! }) R3 F. U* q( H1 A+ ]- o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- }6 g+ i8 x$ _" p, H, G
mcasp->regs->PFUNC = 0; // All MCASPs
6 Q5 z" q( G8 c8 `5 N# b mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! n) h! E! _# a/ g
; i, O2 e+ J" X mcasp->regs->DITCTL = 0x00000000; // Not used
; t6 Z7 |& a' H& j mcasp->regs->DLBCTL = 0x00000000; // Not used
% e K$ n; b5 ~# p( d mcasp->regs->AMUTE = 0x00000000; // Not used. G q9 {' A* F% b! U9 N
0 F9 m* P; D _" |2 n
/* Starting sections of the McASP*/
* m3 A1 M2 L. U6 b* d) x* N, R mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. a7 i( m5 n+ K0 s& ] while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 @; D' a/ P) }9 A: l& I1 W8 h% x# l
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + [$ T$ |( z3 k0 Q! D, a4 k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 m6 U+ Q3 d0 {# K3 l( h: O9 I1 d& |0 B3 N* B" ~- t
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 H6 [% t7 N8 F$ t. f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( A8 o# E. Z9 {# {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" z3 l x0 V# g) u1 u) C while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) H Z0 w+ N. k2 D( N
5 l, e/ F8 |- |& ]- ~
mcasp->regs->XSTAT = 0x0000ffff;
% [ N: ] o" e& r' f, [# C$ p mcasp->regs->RSTAT = 0x0000ffff; % }! Y/ x& @% ?# u) M( V
+ x7 C" J2 o" X/ [
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: R) L! n, n; f$ H' ~7 \
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON ); R+ y; \5 T [9 @
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * b2 L# R; x+ t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ P4 x: g* h4 r" S+ F
6 D8 r; U. b% d8 U- s3 i0 s
/* Write a 0, so that no underrun occurs after releasing the state machine */. |+ g c5 G$ O& G0 S G
mcasp->regs->XBUF5 = 0;
' P( o2 v3 w: N6 O( M0 P0 u0 Z* j mcasp->regs->RBUF0 = 0;
' k& W6 t: c! x! a% L+ u
2 D+ M; B7 X9 I# _ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 f: t4 z9 |5 p. a% _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 V6 M/ D' v2 X0 \; A3 r8 z mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ {3 I! O$ k& Y0 z! v
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ~& u( T: Z8 c
% R5 ?/ \ ~, e& @; K
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # X& P! z7 t4 v; D" H% p+ T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 \" o1 O$ D1 q9 |% r0 s
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ b9 a3 \4 R. Z! h6 ]* C
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 @; `) j' \1 ?( R4 Y
; v9 J* o3 h& T+ ~7 q& A J CSR = 0x0000;
" i& D* q1 J$ f" J( K# e' Q* D INTC_INTMUX1 = 0x3d;, @' C2 J( m/ [8 u
ISTP = (unsigned int)vectors;7 r% P F. ?( Z
ICR = 0xFFF0; % c$ c' D9 J1 ~8 e
IER |= 0x12; % p) Q: Z6 d4 }+ @9 c$ U9 W
CSR |= 0x01; % W( d" |' c, j% {
$ M0 _- T" u7 f% F% x
' ?5 r. e5 }2 G
- R9 l2 q" T. [! O# D( R, ?6 N6 z( g还有就是两个输入输出函数:9 X! N3 J1 W8 H( d& z% a
void output_sample(Int32 out_data)
8 H. Z& t5 |8 y# G6 s' v% C9 j{
* r" g3 X6 R) r AIC31_data.uint = out_data;
+ E" B7 I4 Z/ t5 s& B/ X MCASP1_XBUF5_32BIT = AIC31_data.uint;
' I, ~, n2 M+ T: L* y5 @}) d y5 `- M- J$ T; c* K
/ b6 T: y4 ^, S& d9 { r! YInt32 input_sample(void)# o$ \/ D. `0 o2 a8 H
{
7 n1 F: ]; y6 L1 Y) c AIC31_data.uint = MCASP1_RBUF0_32BIT;3 W" H. r( O f) Z9 g
return (AIC31_data.uint);
6 @; ~/ K# Z( h, z}9 A0 M; e& b$ `& y, |( a( j
# c: l7 A' G8 {: D
|
|