|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: _% S% B* F) k0 v' k9 ] R
main文件:
# b( b5 q: V. M9 c% G3 H& Minterrupt void interrupt4(void)
' B/ q5 I9 U8 g" s( o+ y{
% `0 _3 Q% W% K2 ^. d! t4 d Uint32 sample;
( O9 m1 s/ T; T; {# y& ?1 N
0 a# w! @6 }$ n% I4 H. Z f. { sample = input_sample(); // read L + R samples from ADC+ x- s8 n8 W) b: B+ M+ Q
output_sample(sample); // write L + R samples to DAC ( c% Q' n$ F* J& N# K$ D& V
return;3 t3 m9 ~3 U' M, V
}4 e1 U# j- j5 _) z6 N
4 `! X7 j$ j/ I Q5 h0 G+ _
int main( void )
/ R1 \* i% L$ O- O* U' o{
, C3 f: \2 F0 o3 j0 S/ h, _8 f5 G a c& T( y0 q+ Z
/* Initialize BSL */
0 W9 V q% `8 p$ M& {! ^2 ]: [# U3 t/ l, G EVMC6747_init( );0 H' @* }% C3 c: j0 f
/* Call evmc6747_intr function */
1 I! U4 S G+ E+ r8 Z+ V# X* ` aic3106_init( );
' ?2 s. {5 x% f6 M7 N p' W1 A- _ while(1);; m1 y9 Y- G$ _$ }
}
9 S6 Z# j0 g" v, Z/ ?, k/ h& l" r" }* i" T' @8 A
! t2 l0 h8 x% P$ [0 Daic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- ~ z; L/ l9 d+ ?
/* Initialize MCASP1 */
4 \0 ?" F9 l% z" l' j mcasp = &MCASP_MODULE_1;3 B1 `0 j6 t, I' K
mcasp->regs->GBLCTL = 0; // Reset1 r& l" w+ f+ o; x1 o7 Y' @" T3 D
mcasp->regs->RGBLCTL = 0; // Reset RX5 C3 N( `( }1 z0 T8 R
mcasp->regs->XGBLCTL = 0; // Reset TX
- ~0 w: Z% C) C3 L }- C2 d: P r mcasp->regs->PWRDEMU = 1; // Free-running
1 X* v2 s( `6 x! F* A+ B1 l // configure McASP0 receive registers
9 u2 p$ F5 y* d+ f3 { mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
3 U: [5 Q1 q+ k3 ~2 E; Z mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 c4 Y& V% L7 H9 r% P* ]
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) }+ d& r' E) t: t9 l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! i( @2 X& S. T, D6 p7 `$ M' p* p L
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side): {2 t$ g3 z( `. z+ m
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
4 }; E* t+ _; a) L& u# i* ~, ~ mcasp->regs->RINTCTL = 0x00000000; // Not used
; r2 G5 i b7 j9 V# A; V E mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& W4 Y8 ?, V; m+ w3 m: [! a
9 W+ Q$ N; Y, H2 B: O mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used2 r7 ~. p5 {2 a+ @" }" V7 B4 o( o
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! O$ I" Q, v- c0 P: G mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 t ^) g7 X% }+ i: X/ }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# N6 R( |% s, h O; S( Q9 R mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK5 M% Y3 D, u2 `5 V4 c& Y" ?+ b/ L
mcasp->regs->XTDM = 0x00000003; // Slots 0,13 i8 _1 x' V1 w: ?& [& V$ n# I2 X
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 f7 ?4 b' o' `$ `% ?$ L
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: B1 I. S ^7 z$ c8 J) O1 \7 ^3 a5 t2 A+ e) W* C3 b" \
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN8 N, v5 s, ~) K3 o% N; j( y
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- T* c; b8 \9 ~2 ^) F. O
mcasp->regs->PFUNC = 0; // All MCASPs) E; ~0 T( D) {3 y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& f- H; V$ Z0 \2 T# F
2 @' s2 H& D% R0 ~1 L/ x9 N mcasp->regs->DITCTL = 0x00000000; // Not used
# J8 b' ?% }8 Q mcasp->regs->DLBCTL = 0x00000000; // Not used
4 }/ q' w/ E1 ] C mcasp->regs->AMUTE = 0x00000000; // Not used) |5 a$ u3 N" M) D# B: \: \( A: O
" k$ ?( b1 B* J3 |
/* Starting sections of the McASP*/
/ p/ c. \: x* P8 u; y$ p* [ mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 W( `0 _2 C/ x* w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
! ~. g: q$ b7 J6 R mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . r% {& l9 `5 ^
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( [6 O, y! W" n3 O/ ~/ A0 s4 C" _) M# X) v& H$ [/ s
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# B: H& P a6 d/ i/ N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! V9 e7 t/ m) Q% V
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# [0 m; w: Y& ^: u6 y: J while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, |9 x% `, D t
& p- [7 e8 s) U1 |
mcasp->regs->XSTAT = 0x0000ffff;
- p* b J9 o8 y/ V4 [' j mcasp->regs->RSTAT = 0x0000ffff;
) P4 }* s# C+ w: A4 N
+ A" q1 J/ t/ D" d mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 l+ [! y0 }+ `) ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! F3 \1 E& Y1 M( F* T- ^ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 L7 w8 K) U; Q8 @; ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 H% v; V+ ~$ H
/ }- P# ^! \! _9 R
/* Write a 0, so that no underrun occurs after releasing the state machine */0 e4 U+ { k4 U3 ?
mcasp->regs->XBUF5 = 0;
/ ~* ~$ b9 @' X# \ mcasp->regs->RBUF0 = 0;
2 g$ H7 q6 p$ M* r) ~' }# V e. q' ?3 n" N: f
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# g7 M+ S4 U/ ~% M" r1 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON ); N! N% Y+ a" i8 O+ G% k& c
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( n {9 ^# {* E! A2 ]% t
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
m! z( R. P/ C/ E, d' F5 d" _& @
7 ]8 X. y. y4 u7 o1 {2 g2 W mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 K( ~* d9 P& w: L5 o' v' A
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ ?$ H3 I$ r; X8 k/ }! L
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' _2 Y5 }' _( c' R( X* D% r( ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 K& H5 P. k8 |2 `: ]* m- P
. _4 L1 W+ V- N+ h: _8 B; @ CSR = 0x0000;
Y8 s( m( t d INTC_INTMUX1 = 0x3d;9 m7 \& m" }" M2 ]
ISTP = (unsigned int)vectors;; R9 a- Z# O- C, e: N
ICR = 0xFFF0; ! H8 K2 n2 G5 C( {! e
IER |= 0x12; + _% M% {- f% R ^, s3 V
CSR |= 0x01; " ^% _* F7 ~5 ?. _
, q; \( R4 R2 b
% D- f9 ^4 ^( C$ h# K3 h: m
: ?$ A2 v% I b" B/ \/ s/ f还有就是两个输入输出函数: L5 u7 {0 N+ Y+ N
void output_sample(Int32 out_data)
/ `# D! ~% t; `& ~; K# o{$ u' [/ \, L7 v) ~. h
AIC31_data.uint = out_data; + @+ a, X* H" y( Z
MCASP1_XBUF5_32BIT = AIC31_data.uint;+ A" P& @5 [0 }7 H6 |
}' Q5 W1 k5 y3 P- F" ?& z# N3 D
, H: _4 Y# h: E! i, p
Int32 input_sample(void)
7 X5 ~& A' }3 K; c1 v8 k7 {- R{ 3 s2 O" R% m8 T) }) e
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 H1 m3 w9 P% i1 \9 [) X return (AIC31_data.uint);
; ~: s$ F6 w# [6 \}
- r3 l3 N2 |6 w0 R
+ v) ]3 D) ^; h7 q- D R E |
|