|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* l+ Y* }- W5 J. `, Z
main文件:
4 v% D2 O& e) B3 A3 sinterrupt void interrupt4(void) 2 [6 O( v( a+ z7 [4 q! R# @& D! a2 h
{
8 v* U5 G- Y1 P' r6 W6 o Uint32 sample;7 W$ T( o; p, i( t# u3 {& H6 Q( F* W
* f" v' a# g' y. I, I" V6 V sample = input_sample(); // read L + R samples from ADC
* B K0 L( v: M) Z; ^: _+ E# |: h* s# S output_sample(sample); // write L + R samples to DAC
* |& D* t0 `! X9 ~- g return;/ J7 c7 v( c7 t/ r- X
}
8 D. e" u5 I4 f, y7 W
' V4 R2 B: C8 H) } ~; `int main( void ), r0 I) q( d$ d) J2 c6 i$ k
{6 F7 X8 O7 B1 L' |! s) b, n
4 X. ?, H- Z6 k. L0 Z& z+ \; e' `* A" S9 y /* Initialize BSL */ F9 t& R' t, h5 O* f' j8 f% u! ?% D
EVMC6747_init( );6 `' l1 e9 N" M0 E. f
/* Call evmc6747_intr function */
: I( i! e5 W2 H6 K aic3106_init( );
) @! f: V1 L8 Q7 [+ m+ x0 \ while(1);. ~4 A4 W4 Y3 M/ j v% p
}
K6 q Z6 v- C4 N, K( b- X1 G
) v7 _: ?" ?2 J) D7 x
* k2 L# E$ D( N0 }0 |) i9 m2 V$ uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 K1 X7 k+ q3 b; Q/* Initialize MCASP1 *// F. \. s3 d4 u: O* x
mcasp = &MCASP_MODULE_1;5 Y) u6 f$ f, ]: p
mcasp->regs->GBLCTL = 0; // Reset9 N( w) ~# y I6 {9 A
mcasp->regs->RGBLCTL = 0; // Reset RX/ j1 c3 g; T" N; e$ h, w
mcasp->regs->XGBLCTL = 0; // Reset TX; o* _+ | S4 W
mcasp->regs->PWRDEMU = 1; // Free-running c5 \, x+ d0 E( J0 k
// configure McASP0 receive registers6 z. q/ R; o" Q5 {+ [3 G0 Y
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: U7 ^3 X! k/ X ]4 S X mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 D K2 g( |/ v1 P' C) G mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ c' @' l& f$ r! ?; z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ d0 Q) J8 ` F/ o" v, r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)3 `5 ~ M1 b3 ^+ q- A% ~2 A. I
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
' J2 e1 E; y+ _0 _$ t: i4 s9 P mcasp->regs->RINTCTL = 0x00000000; // Not used
7 E- E- ?* e8 o% \+ {; J mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 Z7 X2 ?& M9 K% z) @1 J9 R! E% X7 x, ` k$ q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used8 V) r/ ~' g2 k& O
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ s! g( {1 t. G% A
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" k8 n7 z$ T- g Q% K) I mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* z# H- I7 ?& i9 c7 Y. m
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 C2 w, l' u$ b: ?* r; l- M* w6 t$ s
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- V& a }7 O* W9 ]: Y mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit! D) _3 X) _/ k7 [& ^
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
j+ t% ~3 O+ J& O
+ [& ~! Y2 O! y/ h! N mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
( F! E" p( Z, q% }5 ]+ N- a* G+ c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT: G/ L1 V5 J3 q+ N+ e
mcasp->regs->PFUNC = 0; // All MCASPs
+ P" a+ k, i$ ^ mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ ^/ U8 {* I- R* x2 x T" `; G4 i8 w. p Y8 o1 L
mcasp->regs->DITCTL = 0x00000000; // Not used+ p; ]; O/ q' |; P/ h3 x6 }
mcasp->regs->DLBCTL = 0x00000000; // Not used& f# G* \+ [/ m4 S
mcasp->regs->AMUTE = 0x00000000; // Not used& Z; G$ B* \3 ^) p4 t
) \! V* w8 Q: f
/* Starting sections of the McASP*/' }0 r/ y6 ~ h: I9 N3 m9 {
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 w& {& C; g- b: t! P- D6 f while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
W! z) L! @4 { G& z1 C& @ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 }; z) g! e& S* e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- E' N7 s/ m" R/ M3 f7 z, N& s2 ]( R) z
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " g. d$ e( V# Y4 T1 t7 L* h
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: T3 s* P; l: X2 l, k/ y( r
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 i; \$ k; Q0 a1 V. i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 V+ Q& ?' H7 `- f$ x7 S( \- V+ g5 ~
: } F$ B3 H) f' P$ E: Z# N' z mcasp->regs->XSTAT = 0x0000ffff; ( h b5 [2 h V/ b
mcasp->regs->RSTAT = 0x0000ffff;
- M3 m: V( O1 O7 u3 D2 ] U/ r" p% K3 v$ _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ y3 Q" Y) `6 Q/ D, ?
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ E2 N0 }/ Z: F4 T1 Q: ~* `
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 t! Y( \ V" x7 R8 t4 \) U
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: `) {- O6 c* ^
$ T( V1 t. y* z; |' V; Q /* Write a 0, so that no underrun occurs after releasing the state machine */9 V; w4 u- c7 U6 m
mcasp->regs->XBUF5 = 0;0 `7 u+ M. `( b a. w0 Y/ E, W
mcasp->regs->RBUF0 = 0;. V2 K: E. B5 C9 h
, ?9 @: y& J" A& G mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( j U& e- N" s/ n* F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% i4 ?3 e" p7 q/ H5 p' ^ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. ^5 r- H, R4 s9 F while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# S( z5 d, |$ Y/ l9 |
5 z- b4 }1 u" N) s0 Z mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
' b3 Z' ]4 L8 U q3 s while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 Q, X' @* ~5 a) u4 r r* T( o0 c
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) K. p; E8 u( [, I, P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );* A- a ^# u2 a" n! ~ B1 n! F9 z
9 E& a9 @- V o8 T
CSR = 0x0000;/ G' i9 e) q$ U4 C' S6 ]$ N4 q4 a
INTC_INTMUX1 = 0x3d;2 N. j' p! ~: Q7 C; L( @
ISTP = (unsigned int)vectors;
0 P4 i: C8 W" Z1 [3 B) J p7 J/ o ICR = 0xFFF0; - h% [0 B( b/ e9 ]- A7 Z
IER |= 0x12; $ k2 T$ Y. m$ O! E7 G
CSR |= 0x01; , G5 N5 t4 m; M6 s
# P# M( g" K9 _; x3 V+ a
& O- W1 s- z; U# K0 t3 s+ z+ K' w0 [ Q% T* C. K
还有就是两个输入输出函数:
& t( e0 ^/ L3 O0 b! t1 {0 tvoid output_sample(Int32 out_data)
; O5 O* \" t( k0 ~6 E2 y) v{. v0 f9 r1 w ?$ h' ]3 ?% L
AIC31_data.uint = out_data; : Z. l* y: l! C. K8 v1 @; S
MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 f2 q' T: D6 `9 d* D3 p( y# G3 r3 [}
3 N# E% r" S. j: F+ j$ E9 S1 i9 y! W9 k8 [/ X
Int32 input_sample(void)+ Z Z- X% E) n. s) Y+ f
{
4 w; J0 @: B8 N( G. H5 |3 W" _ AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ g1 W! V: f5 z! S8 B return (AIC31_data.uint);
; G2 x8 Z$ h ^9 j: U}/ z6 w) k, m& W1 H9 n( {' P4 h
6 l o4 V, c8 V; V r
|
|