|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
( A* `# n W: u' hmain文件:* b( M+ r F5 H a
interrupt void interrupt4(void)
% L. n* v; g- ^/ Y1 l7 S{$ c4 q# B2 Y/ e7 o: H
Uint32 sample;1 c; |! F3 O! X$ ] t
a+ L: B/ W# k' K/ M
sample = input_sample(); // read L + R samples from ADC8 X* h5 m( n. w4 m8 o R1 V% z
output_sample(sample); // write L + R samples to DAC
' M% _0 G+ v4 ~! R/ W return;
5 m& Y8 z: W: V( _) S5 S* m1 e( o9 @& K}
' D2 m6 h; A. h# g( Z7 K; j
8 b9 @+ P7 F: }' s% h# hint main( void )
7 I8 p( U. t6 [/ K, e. ]{
, Z8 S, Z0 F6 O, q ~& ]$ H
Z* a# J( ]& L; P I( ~" g /* Initialize BSL */
6 p( |) N; t" u ?/ }2 @ EVMC6747_init( );3 c: L f2 X U; X/ ~
/* Call evmc6747_intr function */+ w- V9 J2 L# t) r9 B: ?/ _7 m( V
aic3106_init( );
& I5 f; v2 D& d% U) O+ H while(1);
7 U4 `# ^: ]1 R, F0 R8 ]}; U `7 ]3 P% A5 S) v
4 k' {% c$ F% {. \$ | _
& C9 P5 G5 @+ R8 oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: u- M3 P2 [9 z7 q4 U. ~
/* Initialize MCASP1 */
# F7 C5 U' ?) d9 K/ i mcasp = &MCASP_MODULE_1;& O7 y" R( d! Y8 C
mcasp->regs->GBLCTL = 0; // Reset6 K3 O. D3 d0 {# c( W( w
mcasp->regs->RGBLCTL = 0; // Reset RX$ i- \$ f) w4 ]+ g. s; g
mcasp->regs->XGBLCTL = 0; // Reset TX
A6 k: G/ q, N7 M, U mcasp->regs->PWRDEMU = 1; // Free-running, j- M* h. \, u" h! J
// configure McASP0 receive registers6 _# a9 v$ ?9 e
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
X/ s' e& d' X3 F+ w6 @ j x; P# q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 P% h! U& F+ z7 r3 h
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, L' {" q* P4 Q( R9 L+ N mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 I9 V( v, ]- j. I+ @4 E) U, v p& p
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)$ m& V. y0 t+ Q
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 m! Q1 v$ x& f' }$ G2 {
mcasp->regs->RINTCTL = 0x00000000; // Not used
) z' i3 U$ C6 c$ Q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: @3 a) I( w4 M) ]
: c9 K! B0 b; s5 S6 ^3 N( B. O# P1 A mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
) h5 U7 m" [5 u A# H9 F mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 R8 R* X/ Y, T; b2 B$ ]8 [% f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! @& ~2 p4 u9 U7 L" `7 G/ y+ W0 t
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( y l# G7 ^* V
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
1 b5 m& W$ i$ ] f/ Y& G' C" q. ~( x mcasp->regs->XTDM = 0x00000003; // Slots 0,17 C4 Y$ D% t8 }- g2 f* O; P! ?6 S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
- J+ L2 ^" h# E mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ g# d) X7 s* T4 F W
5 d( O% ~2 z2 B; q6 Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 A P; `# T* t+ D% k
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT" A* ^* Z; ~7 s; I, i+ _. z
mcasp->regs->PFUNC = 0; // All MCASPs! ~0 {; m* E; ?9 y. Z2 l0 P# T, ?9 n
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. J5 v0 g& j- H9 }1 g8 @
5 U& M) c( b+ q, E7 J mcasp->regs->DITCTL = 0x00000000; // Not used
" P+ C5 V* j/ g5 l( F5 ~ mcasp->regs->DLBCTL = 0x00000000; // Not used
. X7 y6 P+ C2 B mcasp->regs->AMUTE = 0x00000000; // Not used1 B6 u P$ G" p) z7 s( q0 H( m
0 _4 y2 e% H3 S# I( _8 L
/* Starting sections of the McASP*/: c, z; f$ b, ~+ S; _/ |) V
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 F- g e/ Z- c8 A- a8 h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); a/ J6 S7 R/ X' a
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) C3 {# i2 j) x' s# m# P while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% P% }$ \2 k, o/ G0 n+ t' C
# T! C# y% f$ p" Q9 B6 _ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) ~; n4 R- B3 ~% d( u' p) G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 K) F g" ~) U7 T. }1 g) W mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ X+ T. q5 C# \! b d: s" R
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
o& o* x$ p" ~1 Q! M! l0 M
- K0 w' G! a. Z4 v% m/ h" J mcasp->regs->XSTAT = 0x0000ffff;
) b. G k8 O# F mcasp->regs->RSTAT = 0x0000ffff;
. ?( I7 J! x3 W' ^' q+ |6 W7 k3 ^ s1 k2 ~3 m. S: j
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, ?6 M( Q- f6 C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" ]- O" E( E: {
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" |6 V4 }/ a5 m7 ?- w% ^/ C2 _) e while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ [; b: s& c# _
& t- u/ ?1 V' R+ a8 n+ | /* Write a 0, so that no underrun occurs after releasing the state machine */0 u. N& I, e$ q( W" z) n
mcasp->regs->XBUF5 = 0;; e4 N2 O3 u9 a8 Z% ?9 s# l5 e
mcasp->regs->RBUF0 = 0;
# ^6 e" w+ @6 }3 v- G6 O+ d4 ^0 E' P2 w; W. |! y8 E
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 l L: Z0 v y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, b! t3 B0 I! v9 i( O8 j: I# V
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : o+ Q! K. l" d6 d& [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) O" Z0 `7 ^& [4 [" a( H5 u: c" K7 [6 ]( p/ h# Z
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( b3 U( l& `# e while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
4 E* m* ]2 u% Z4 d mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
F1 b" ?$ R7 [: w: p/ R2 P$ U# a( q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- j8 q/ K$ b6 {" T* S8 g
# A% C: A3 r9 h; ?$ D s
CSR = 0x0000;
& k' Q. C# D; Q/ I6 B INTC_INTMUX1 = 0x3d;: Z' d, `! g# M; ~2 I4 B, f
ISTP = (unsigned int)vectors;) g# W; X- i" F- S7 K* Z* k
ICR = 0xFFF0;
$ y3 Y4 N! M2 b9 s$ ^ IER |= 0x12;
) G+ L6 k7 \; s( c. j, `0 {4 k | CSR |= 0x01;
K# e- ^. P5 }5 H a4 E. t
E7 L) J6 N( f, H1 t' v' r# |6 l" J; O: M2 @( [7 t, {4 G
3 C) Z1 J, _# Q7 ?* s5 \. s还有就是两个输入输出函数:4 T7 F: X% q; n8 I) m" @( [; S
void output_sample(Int32 out_data)
; ^' M8 h5 S7 q0 l{2 p/ ^8 G4 t4 y5 v2 @ b: C
AIC31_data.uint = out_data;
, Y0 s/ [% T8 z6 J MCASP1_XBUF5_32BIT = AIC31_data.uint;' S& q& R3 J+ V! y& q
}2 N. D( }$ B0 \% z1 D
0 o1 m! J& K% }8 TInt32 input_sample(void)+ c& Z Y/ d& c1 E
{
$ z( _$ ^$ B E. H AIC31_data.uint = MCASP1_RBUF0_32BIT;: F: \4 a( t8 D
return (AIC31_data.uint);
+ d) Z$ t( `7 X4 {& \' X ~$ `}( Z( b b: b8 E
9 ^9 x- z" Z, }3 c& f |
|