|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" W, U3 d( W* y7 c! |main文件:2 y- E0 P; K) A6 R/ E' [( h. @
interrupt void interrupt4(void)
& s7 E- G5 y( I5 K( a) I{0 l) z2 D h6 _" d! A, J
Uint32 sample;0 a* M% F, k2 o* k% K/ _7 I
$ ^3 ~' _# _2 v' f! o& G0 n; P
sample = input_sample(); // read L + R samples from ADC" M3 n6 C9 @' S
output_sample(sample); // write L + R samples to DAC . ^: ?4 f4 i4 ?7 O! p! v' {3 k
return;
/ f% B; m+ t5 j2 K1 ?}
+ d, ?# D& R# J# ^' I* V5 W2 a# L7 f; ?- U
int main( void )! q8 ]5 i: n1 m6 y
{; q2 O/ y! V" q
! d+ z- x5 @* O( {
/* Initialize BSL */0 K6 n0 Q8 V8 Q
EVMC6747_init( );
) ` o. i3 c$ }" z ^% F) M /* Call evmc6747_intr function */
! H8 u6 n! M. O( U; ~+ i aic3106_init( );
, ^* t1 {5 ]( T* j% g8 c while(1);/ Q3 S" E9 b1 P& D/ ?+ e
}
, z+ [3 Q5 q7 O) b8 `% s- ?' u: h. R+ n
: x( U. d6 n" h; d- ^( ?& J5 g" P" v( ^
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, _2 Z* G! d m9 k) F/* Initialize MCASP1 */, t9 `7 I: k' ^7 S
mcasp = &MCASP_MODULE_1;2 z: F8 V; w+ f$ R ^. p
mcasp->regs->GBLCTL = 0; // Reset
1 B7 ^$ k7 \: H3 x* E2 r mcasp->regs->RGBLCTL = 0; // Reset RX
% V, s- B2 B% R7 y mcasp->regs->XGBLCTL = 0; // Reset TX
. S4 V9 \( ?- Z mcasp->regs->PWRDEMU = 1; // Free-running$ D( d3 Z( t4 d; n9 U
// configure McASP0 receive registers# d6 F- t- H; e2 H+ u% I4 o5 ~
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
: i( P/ l, H ^; f# u, o mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 |. m9 q' P4 z } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
" `6 Y" U4 |2 @/ X7 A8 c mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)+ z& c4 x: D0 g9 V- t
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
7 O8 A) I$ L( I; i- K mcasp->regs->RTDM = 0x00000003; // Slots 0,10 | [5 u G) Q" g+ J: Y3 G4 o
mcasp->regs->RINTCTL = 0x00000000; // Not used
; _$ a6 O' l7 Z# X! w& L, A mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& M- l( R6 Z8 e4 k8 |$ o! Q" F* W7 g6 l0 G) G8 c$ S
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
; M. s0 @/ }- a$ |( } mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 c5 R( H9 l" V& @* W mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ f, P* m6 A1 n6 N2 m mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% `; D1 z6 A+ }3 f mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK( u. q5 p% G# _ O
mcasp->regs->XTDM = 0x00000003; // Slots 0,11 a7 p7 w) o6 i, o! x
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 Z* ~* S8 }2 [7 i% r mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 _/ Z+ t& w: V, U8 s/ o
# f5 B# x( s( t9 y mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN1 ~3 O" n0 o' h
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
" R; v4 Q6 q; N' {( [, p mcasp->regs->PFUNC = 0; // All MCASPs
. c8 p- L' w+ z- \& k: k4 r+ K mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( ^( L$ n5 J8 t% L
5 D8 M8 ]# x2 X9 R5 J
mcasp->regs->DITCTL = 0x00000000; // Not used4 @& }$ a3 T6 k! V; k8 S
mcasp->regs->DLBCTL = 0x00000000; // Not used) N5 u2 N6 h4 N8 D5 {8 i; Y) ?
mcasp->regs->AMUTE = 0x00000000; // Not used6 S" P0 U% ^( B
) W0 s/ F& l3 k7 v8 B( k
/* Starting sections of the McASP*/6 Q( K- O& g) u- w: [1 z0 R6 O, f
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
d1 u' P! e) o1 c; ~ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # f7 P5 T2 G! V& G" J1 p7 Q" m
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 ]. t! p' X% Y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 ]. Q3 a* W# T* k i
( ~4 h* h& b0 ?/ Z' P: U
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ l) N) i, w7 T8 A+ c0 A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 B0 e: m0 z. B8 r) i( c mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 X5 W2 k8 Y' I m5 o$ i* A5 X6 z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. _% h6 W) h- t8 X# F! W8 w# E/ a# x: N+ n; E
mcasp->regs->XSTAT = 0x0000ffff; ; \# W. a1 \# o/ F, I
mcasp->regs->RSTAT = 0x0000ffff; ! S3 O9 I" V8 c. V" u* t$ h. t
4 I/ \( v* G- x' \9 }; ` mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. c- a, ]: N. w v+ W; s
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" B5 I$ K# [. _& O mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! }, {1 V9 { L( e+ P" T while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 |* V7 p v& w n) V: {) ^
! \5 f) }, Q% J6 n. X! M+ L /* Write a 0, so that no underrun occurs after releasing the state machine */
: L. c# j! A+ \& M% O mcasp->regs->XBUF5 = 0;; n- j" S( C3 T9 T0 ^. Z/ g$ u6 v
mcasp->regs->RBUF0 = 0;3 c& j0 s2 A$ R- w, P- N J' z
0 i* N+ A' B) p% k5 q
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# S' V, S* H2 i x: k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, N1 a" K! I3 n3 R0 R9 b* r- ^ mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 }* V) n4 E) C: \$ \
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 p! `: Z5 T( P
7 Z# B7 a1 M0 V2 [0 y( C1 e Y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , P K+ k7 @- o' i) p* `8 E9 }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( W: \9 [7 j5 k! `7 W
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 ^1 Z, p8 c; q2 Q* b; R$ J4 w# c- X- g' S while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 v: I* {" Z; ? t7 Q
; l3 L8 B& y) K+ X" r( Y# z
CSR = 0x0000;& m- R0 R9 a& D( ]8 X, Y
INTC_INTMUX1 = 0x3d;! f+ p! u+ n [8 Q
ISTP = (unsigned int)vectors;( _5 S3 z1 N R, y
ICR = 0xFFF0;
* S( e8 ?1 b' b& e IER |= 0x12; $ Q$ U) }9 U- O8 ^5 S/ z4 D
CSR |= 0x01;
# i6 F- N9 m. Z* \: Q u/ [
8 F; m* m! `8 U; k H: g2 E& X( S/ N2 ?& }: g( p' P8 S& v" M
3 J: @" c, z# o8 u y/ r' v- V
还有就是两个输入输出函数:
- t- P9 a/ d) N+ Lvoid output_sample(Int32 out_data)
9 q& b+ {% b7 D5 |+ w1 ]; @8 U' L* t{
# x Q% C' t8 u K% g% t6 D AIC31_data.uint = out_data;
% G0 w0 V' X" E% A( D8 r3 h+ \: t MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ h9 [' a: p5 R& i; E" d3 k0 j}
; u. @8 s) j% l, s4 h1 M' b' ] t& b4 q' b( L/ ?
Int32 input_sample(void)9 P* R6 W) _' p+ J& j0 t A
{ ) j/ |$ c9 d7 L, D; S) H- l; F" V
AIC31_data.uint = MCASP1_RBUF0_32BIT;
# p2 A- d3 |/ \ W/ T return (AIC31_data.uint);' I- O$ d7 Y) Y: A
}
$ m* a# X2 L; b9 v8 O2 f! T6 Q" o6 U! F) X) B! |) F5 r) A1 {
|
|