|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 R; Q9 W. D& X# r
main文件:" `7 o2 {0 B3 h! c% p
interrupt void interrupt4(void) # `9 r. Y& i* w9 y; s* o& _1 ^) ^" V5 a
{6 C0 _1 I1 q5 f' N3 s0 o0 O
Uint32 sample;. O ]3 S* f0 g- `1 \
A7 v0 l6 N/ _8 f: R* ^ sample = input_sample(); // read L + R samples from ADC
f, C. P9 I( r* A0 \2 | output_sample(sample); // write L + R samples to DAC ' {( D+ }5 \3 M/ A' X! q+ @
return;
+ W* H2 M, p4 m}$ K( V/ b* Z [) C, a
J, i6 ^' G# D0 z& l
int main( void )
$ V+ ~% I) E: W0 p& M: e, @, i{
6 z: `1 V% L$ [, _, p$ V! x- P5 K. y4 A
/* Initialize BSL */
$ K- H7 s1 d( V7 u: a% z; Y EVMC6747_init( );
7 Z' r" g& H5 M /* Call evmc6747_intr function */
4 p4 k. P. s; O" Y5 f* z aic3106_init( );1 L d* D& e: h; Z+ k0 q
while(1);5 E" `. t: T+ z1 K5 K1 Y% [8 j
}
- ]# V6 b# a- {7 Y+ T2 t
2 p* u- {5 F9 i* ]4 t! E4 [2 C6 r2 ^3 v
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" r6 l9 M( |( w. z: E6 `+ [
/* Initialize MCASP1 */
% x; g4 @% Y* D% L% ?9 N# c- p S mcasp = &MCASP_MODULE_1;
+ S2 \& L/ |" L# ^" X3 W mcasp->regs->GBLCTL = 0; // Reset: T4 ]: a' L3 s9 v$ p0 l& D: f
mcasp->regs->RGBLCTL = 0; // Reset RX: l; _' P. F3 b, Y( m& b
mcasp->regs->XGBLCTL = 0; // Reset TX( P5 n" z8 Y1 n3 |3 V. C w
mcasp->regs->PWRDEMU = 1; // Free-running
6 |! t" ]7 A c4 H; I9 B, } // configure McASP0 receive registers1 k' O6 Q8 `7 }' X2 E( T3 U
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
2 W6 q0 |; m9 ` mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ?/ j3 v5 w) X; E- w
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 E! \" G( p1 |" Y+ c) ]$ n9 u/ m1 F- m, B/ p
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 W z2 \) L9 j+ o) ]; I6 _
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 l/ J$ P: B+ L mcasp->regs->RTDM = 0x00000003; // Slots 0,15 S4 `% s0 d6 S! c3 f% {
mcasp->regs->RINTCTL = 0x00000000; // Not used, N3 Q4 _/ q( q4 |, k6 H( ^& m
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 q4 z2 {1 T) ~9 S2 K( E' k4 B$ U: q1 p
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; ~5 @# h& `% F5 G mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* V1 B7 q9 D- ^ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) N( O- H4 D; s# K/ \8 a/ k* A1 _
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" y& ^% w" n5 }! A ~/ ?
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK& J9 A% }; v `4 h, }; z$ L
mcasp->regs->XTDM = 0x00000003; // Slots 0,1: W# N$ m/ X4 u! n4 g! `( z# ]
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
; Z, p2 z% ~" G+ ]! _7 T# Y* Z' R mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 H" N1 ]% Y; W- O: T3 E# u* r8 b- m0 x
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
5 n1 |1 V5 q- p* V mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT/ d, X. F$ C1 I1 T7 ]* L6 E/ g
mcasp->regs->PFUNC = 0; // All MCASPs
! q3 \- Y9 m' L0 S8 u, Z; P3 S" H mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ N. A( D {5 F7 c$ C* p
2 v j% j! a! b. ^( Z# L6 H0 l mcasp->regs->DITCTL = 0x00000000; // Not used' u2 m5 m7 D1 ] Y: W" {* W! C
mcasp->regs->DLBCTL = 0x00000000; // Not used9 p) _4 N0 m+ F7 t9 Q
mcasp->regs->AMUTE = 0x00000000; // Not used$ `" d/ o0 F- `/ P4 E6 |
. @: J9 R3 o$ l6 {7 Y' m! Y, X
/* Starting sections of the McASP*/: I9 x) g) {' Y: y Q! O- L4 W1 s
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) v+ q2 Q9 G# z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 0 a/ H9 B3 c6 C+ ~
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; , y$ f' C/ m& s. [8 E$ t8 u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- w% C# h9 C5 P5 k
# H3 X5 x5 d5 I: P2 U mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. A H% l7 `% h6 c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 R4 x3 K O3 d; W9 y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 ]7 Z" d9 P% ^, U4 i- w/ Q" E3 X
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' G# T$ e# O/ E* V
! z) f2 q' p3 E9 g3 y8 p
mcasp->regs->XSTAT = 0x0000ffff;
4 P1 ^7 p5 @0 H+ P mcasp->regs->RSTAT = 0x0000ffff; : w5 ]% S% N* A8 s. j! |' X
6 K: p5 G% r: h6 ~8 d% v* x mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
% k+ I8 a2 J" l' y1 b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! Z" Q, ^8 j' t7 L; _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
, k0 k6 n: x, m" e+ z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ G' d5 ~( b" U
7 Z6 R/ H( p# K
/* Write a 0, so that no underrun occurs after releasing the state machine */
. y3 ^; L7 V' D& z mcasp->regs->XBUF5 = 0;
" S D6 N0 Q, o mcasp->regs->RBUF0 = 0;. }9 F. _ j" I, [5 L4 z& }
7 e8 D% n! `( S/ ]8 }* u
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' ?$ b3 k8 x7 H: x' Z* \! ~9 H! h while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% L x% w/ w6 f, z3 L5 _' X
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& S. {! |' U% J7 l% s while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; D5 T' `4 R. u& D. G
9 q" ?: d( o" Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! i9 ?9 U* T/ v3 f5 s2 z8 ` M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( I% @3 ^: O" v7 ~* \4 S. w
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 ~7 n; f) b) u! `+ e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' q/ O" ^4 K$ _( | L: \
- v5 T: ~% o1 l* z CSR = 0x0000;
' N9 a, ]: J+ F& e( f, y INTC_INTMUX1 = 0x3d;
+ o! t2 |- @" g$ P$ K5 D ISTP = (unsigned int)vectors;0 S. Y" o4 w4 S* t' h
ICR = 0xFFF0; : i9 ?+ C, V; ?7 w! b7 J& _
IER |= 0x12; . ?3 k4 P3 F1 y G, ^. K
CSR |= 0x01;
( z w2 D& N/ m/ `; G% i0 u8 t: \( h# o7 v2 Y. O
7 S. a# ^" |8 e7 f$ b1 Q
9 ?) b. y( D) c+ P: _ D
还有就是两个输入输出函数:
6 H4 g& b+ k9 H1 Z7 r1 tvoid output_sample(Int32 out_data)' t6 [% \; _+ \# \: y
{
% T/ \8 ~& @$ J) r" V/ d) l AIC31_data.uint = out_data;
/ K/ c/ v) o" f( F! \ MCASP1_XBUF5_32BIT = AIC31_data.uint;, @8 d9 S I1 D9 f( R
}
) F* y( a6 d8 ~% f. R* l, s* v7 b& g
: Z# u! I5 E. N0 s3 Z) TInt32 input_sample(void); r( i, k, W s- V/ X
{
1 v$ D* @8 y' y0 M AIC31_data.uint = MCASP1_RBUF0_32BIT;
: { e8 w# Y. U) [$ H return (AIC31_data.uint);: {) | @: F% P$ l4 F
}
; y% k5 i$ ? `. |' R
, A" ^3 ^& l; |- z6 a* l |
|