|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& @8 X- N5 |7 f% d/ f- @
main文件: T+ c0 _" r" q% C7 @6 g6 o
interrupt void interrupt4(void) 2 K- O; U$ t3 [/ o. {/ s2 M
{& ^' F5 O/ Z0 O
Uint32 sample;
# ~) G( } J/ e; l! L x
# `! [# l# K7 d. k$ _ sample = input_sample(); // read L + R samples from ADC
9 [. A0 m a: S- \7 a- O output_sample(sample); // write L + R samples to DAC 6 ^$ O* O4 e0 Z) |) w1 ^; K
return;1 o9 P! e' K" U' {1 n$ ?
}! X9 m2 E4 U2 L3 u( }8 M0 c) g, @2 O
& q ]) a* M3 K, H% S6 w2 }& g
int main( void )/ u# H1 F P# S$ B% r7 a! E! P
{
& i% U: `- p$ E& V
9 v7 Q5 g: Y0 ]* G) U- H5 ^0 M /* Initialize BSL */
, O: C+ T* C3 G2 `* w% V0 p5 b8 C EVMC6747_init( );! c+ R8 e* I: y6 E/ F
/* Call evmc6747_intr function */+ m5 S- }# ^& i" C+ r
aic3106_init( );
2 P. @" ]1 t. f* s z* M, D( L. _5 ? while(1);; |# n9 O* \& i( c/ ^9 B5 j- S6 \
}
5 B% }& x6 Y, m: ^! @ z+ Q! T8 s) U4 z( S1 D: y6 Z
0 n1 p: d( U3 ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- m, i& t5 C$ f# g
/* Initialize MCASP1 */
+ V7 J# { L+ `3 P% C0 r mcasp = &MCASP_MODULE_1;6 @2 Y2 t3 T5 H, d' k
mcasp->regs->GBLCTL = 0; // Reset$ ~" C9 F5 z- [& N6 ^
mcasp->regs->RGBLCTL = 0; // Reset RX
7 E5 A6 z1 Q- B$ L4 I* H6 L& ~: ^ mcasp->regs->XGBLCTL = 0; // Reset TX
5 U d2 a9 @4 u; [7 M% |5 n( \3 f0 g mcasp->regs->PWRDEMU = 1; // Free-running4 x! p4 ~1 m0 t0 \1 l8 D
// configure McASP0 receive registers
. B: Y1 m- X1 u mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used3 o; [$ M& K. R# ^- P; D+ {9 h
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. _& B" Q5 ?! d9 r9 E7 h mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word) ~6 {8 V* R. S+ g" ]
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): i, z5 x) E& ?5 s/ u
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 x' ]5 b1 B5 j) V, ~1 D, p
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 B; N$ f, q, d0 E* S: v# I) A mcasp->regs->RINTCTL = 0x00000000; // Not used
. \& C8 r% S" Z2 w mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 S2 q2 i3 R1 v: K/ w
/ {# H: Y1 [4 O, c3 O mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used) U! ?! ]8 E/ y8 r% B
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ N# {5 s4 ?0 a# [( [1 Q! G
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 y$ Q9 s3 s( `$ i" P# O) I# @ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! o" L: R" {# X3 A1 s& E% q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
& c4 d7 G- W! t& c- K8 Q mcasp->regs->XTDM = 0x00000003; // Slots 0,1! b3 g6 R" c- |- m E
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit1 e+ O' e/ x9 b7 e* j: N4 j7 h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 U& s) O% V J2 I! m+ G+ k- ]
! u* V# s8 R# N, P% u J" Y! P( d" L5 z mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN- j8 X/ K4 R1 [8 X
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: d0 [1 [5 p4 m( E0 J
mcasp->regs->PFUNC = 0; // All MCASPs
9 p0 q' K" m/ y6 q5 g7 a9 g mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 t% a+ n) P' t' N2 {+ x8 k
3 w0 }/ F) ?4 H) A2 [+ T mcasp->regs->DITCTL = 0x00000000; // Not used, ^6 }% v9 C% p4 |; \1 G
mcasp->regs->DLBCTL = 0x00000000; // Not used1 B) Z5 G1 k7 }
mcasp->regs->AMUTE = 0x00000000; // Not used- k, {7 L8 `5 i2 N- C1 d' E$ `: ^
# S) O9 S# W! F' P* L7 G
/* Starting sections of the McASP*/
: A! E& ]7 V0 {( A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; + Q d) J/ H; M& Z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
1 j7 E5 i3 B! O! Y9 x mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # U% E0 Y- [# Q5 v* \+ r" ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( Y; x5 Z" s) ^" h7 L. ]2 E
/ \% K* e! t: }# a: R mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) N6 Z3 S) W: U) B8 \8 x while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) a3 A" |3 @) Q9 H
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ C9 i4 k4 Y$ M {9 ?3 j& y" P" S$ O! K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
A* s" v4 n1 d2 Q" z5 v$ A( w& z+ d5 W3 P; o
mcasp->regs->XSTAT = 0x0000ffff; + \2 i" I! D; m7 u
mcasp->regs->RSTAT = 0x0000ffff; 8 c$ z2 @4 u# I( I1 i
( `" E, Q) N9 j: H
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 t; Q1 \1 @6 C3 d8 [- R4 d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 y# }* ]! D5 I! I9 { mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; ]9 o2 x( e" W5 N+ C ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. R) c, n! f0 B/ W. M6 M8 X% R( i% e) M! G
/* Write a 0, so that no underrun occurs after releasing the state machine */
) r) @* c+ R0 J& | mcasp->regs->XBUF5 = 0;) y6 r# q! ?! M; e. l( Z3 j4 {
mcasp->regs->RBUF0 = 0;
& A! v3 n. J$ k2 q$ [7 O+ b; G9 a0 S G
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : ?1 t8 _, R- S5 v% n$ s) w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* R1 l7 M; y: [ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# i9 f3 A k$ U6 e: w5 B9 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 E- @. W# j& d
- C; X! x% U; @" T. t& o mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 j4 p+ o! g2 z% B3 x1 x3 M' b3 t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% x4 ~+ c. n. A. {/ h5 C mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 n, P7 ~5 r. v3 W. o% ?. k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 `; [5 Z+ B$ v3 e) A+ ?0 N4 [& `3 y0 Q0 h
" Q5 W# t: S- `, b
CSR = 0x0000;, V A* w; O R8 {
INTC_INTMUX1 = 0x3d;% w& \ s, y5 K! d
ISTP = (unsigned int)vectors;9 N D3 I' f& C
ICR = 0xFFF0;
' \; Q, h6 J" k, l: { IER |= 0x12;
) H) d: E) g$ Z7 A& N6 ?6 a2 C CSR |= 0x01;
1 |* q v4 t8 x* f0 u" e
/ T! O" q( U4 V9 z$ \9 r) U# Q( V2 g' s5 V
* ]1 _8 ?1 D9 Q" g还有就是两个输入输出函数:5 P& a4 H' B6 E u% }
void output_sample(Int32 out_data): Q% ?, a- |" I- d- s# ]4 Q# {& }# k
{
2 j& }$ V& E: S; M! n AIC31_data.uint = out_data;
! J# Q5 c- o$ H. B* b+ q8 G+ b MCASP1_XBUF5_32BIT = AIC31_data.uint;( l; x5 t; |' C; N `. r
}
2 v' E/ X- R" {0 d; z2 \6 x$ F+ e
+ g, T7 [! x) I( D; gInt32 input_sample(void)
& a$ b) ^ [% I0 n4 @; C{ " y9 h' o7 q! m/ Q: r& U
AIC31_data.uint = MCASP1_RBUF0_32BIT;
# h# Y" v$ o. p4 |2 [ return (AIC31_data.uint);
7 |& p3 C& o8 U6 o7 x0 v}
0 C( O/ h6 \7 b9 D6 I6 N, x+ s5 i, T. Z2 I+ M
|
|