|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- d0 u: `6 \% b: {8 Nmain文件:
5 K# i6 q; Q4 C/ [interrupt void interrupt4(void)
, F9 r: g3 W3 w# T; ]! c5 S{* s m4 K% o; p: x% a
Uint32 sample;
: ~8 Q8 h% ^: g/ X @: A s, E% h8 ?! _
sample = input_sample(); // read L + R samples from ADC
+ L: \& f3 m1 k7 w2 a1 L& N output_sample(sample); // write L + R samples to DAC 8 q5 B$ E$ C9 q) M& ?6 a
return;/ E: q& Z* `3 {0 B8 `
}
9 { d9 L$ f, S0 R8 @9 f8 N1 t, |. M8 T
int main( void )
1 @) I: J0 A+ m& W ?" l{
* A/ v( _4 h7 m* ]- h# \, [- p% U1 u+ m1 Y- N6 Q: _' S
/* Initialize BSL */4 m e6 ~; Y0 b' v4 G% L" x
EVMC6747_init( );$ K% y- |0 p) ]/ L& B
/* Call evmc6747_intr function */: h9 E: `0 { P! F' E0 R" D
aic3106_init( );
; c$ n2 U$ j" b- U$ m* u while(1);
3 z% Q6 K( @6 T4 z5 ~}
7 v. k3 l* h% i4 k8 v1 t& i |5 T" V/ ]! J) C) U
* O! K9 S1 e% S* q( Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ?$ k! j* Q4 c) h/ p$ b# z. o
/* Initialize MCASP1 */' Q2 o( o3 I/ Z) K0 U
mcasp = &MCASP_MODULE_1;
) T/ v' G5 h( |' ^ mcasp->regs->GBLCTL = 0; // Reset
3 ^0 {* o: D* Z! C: \: w; U mcasp->regs->RGBLCTL = 0; // Reset RX
3 y. y% j z* a4 m8 l3 h% ] mcasp->regs->XGBLCTL = 0; // Reset TX$ S# t, V7 X' w* Y
mcasp->regs->PWRDEMU = 1; // Free-running
8 S7 F8 v% L9 ~ // configure McASP0 receive registers
5 S- y/ z% \. E8 g/ ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
; N2 ?4 S8 T% Y' ^ mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; }. Z) c2 R, } mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& m) d0 U& ^* X' D# S mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 b% d0 i. P8 |- [4 X
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
5 q2 E* f/ Z* ]$ z y mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 ?3 U7 ^/ V4 V% H! y( F mcasp->regs->RINTCTL = 0x00000000; // Not used8 j/ E2 `6 f! {* \
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& L6 b9 g& Z8 |: x& n9 T5 [
. |1 E- U' \; B6 B2 [
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used7 W$ M$ S- O/ M+ m4 j
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) u" }5 d7 e6 C! b1 ^3 j( ]9 r* F
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 {8 P( ]( a& y9 ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 u/ Y" Y) N0 @! c
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ ]! v8 w3 G$ u% y mcasp->regs->XTDM = 0x00000003; // Slots 0,1* y4 O( i6 S+ ]7 w
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit$ A9 }4 x2 p$ f" h# }* t8 g
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. x1 H5 S1 y# [$ @3 j; F/ z% _7 V& X2 ?5 W- d! f0 X
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
3 U; ]% p* ?$ v2 [ mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& w2 m8 [5 O9 W
mcasp->regs->PFUNC = 0; // All MCASPs R$ p% C% ]0 L9 H* F
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ o9 D* o( l7 q9 T; d' X
* D. t6 }5 H8 _3 I- I. r' g) {% j& e mcasp->regs->DITCTL = 0x00000000; // Not used0 G7 r% R0 p; _. q5 ]& B! i' _7 G
mcasp->regs->DLBCTL = 0x00000000; // Not used
* V0 n6 U7 u" m! P3 X, [$ W5 N# s& | mcasp->regs->AMUTE = 0x00000000; // Not used# v/ {8 g# l7 B& ]# T7 h+ }" q
; W- ^9 B5 K( P: M; N8 F/* Starting sections of the McASP*/7 {( G2 K& u& Z5 K, z
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' E& f% H. B) M. g while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
$ n4 s4 U ?. x2 N. h mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 `5 W5 s- d7 _2 V( q, }$ K5 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; s+ G' i& P; {- z
; Z, M1 c7 C$ G
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 [+ O0 `" v" z0 b0 Y5 ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ l& S) _2 O7 W" j" P( H& l
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. w% |! ]* |( c1 ` while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( W. i! J9 K/ w9 P+ B5 X+ l) H) S0 q" _. g5 ]' j$ g' g
mcasp->regs->XSTAT = 0x0000ffff;
. v4 ~0 a/ H0 e$ B+ X3 }% K mcasp->regs->RSTAT = 0x0000ffff; , C. [* @8 J G/ J4 R( T
" q% n: o# o& W. F" O! ^
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; _+ _- u$ E% x9 J# n! {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 E" u/ i7 @, o3 H) e% @8 ?0 |/ z mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ c. l, s/ i- Z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 M0 q" w4 j- d$ d0 {5 G& p$ f4 c. S0 J, R6 _! \5 p8 ]
/* Write a 0, so that no underrun occurs after releasing the state machine */% [( ~9 Y" C' |& z% E
mcasp->regs->XBUF5 = 0;8 @) e7 |& O1 |$ ^4 i* G
mcasp->regs->RBUF0 = 0;; y# x" ^# i: W4 i1 q( v
- Z6 J7 K; ^/ `) H" k
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! `4 W# C+ I1 V1 a$ [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; I" g" _7 t5 n mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + T3 K* X {% b2 F- P
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
_- b" b4 F0 ^- ]
. F& P; ~( I# J mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 r/ }" o. c; n1 D: j2 S
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- X: A- S4 w8 O4 m6 k
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , }9 J8 m: C8 ]+ p+ L! g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- H; ]% R4 ?2 b8 G
. O' c! P0 t! h+ F1 o% b; U
CSR = 0x0000;- y6 [2 g. C" a6 w, t+ }
INTC_INTMUX1 = 0x3d;7 E2 [' M6 q# Z# U
ISTP = (unsigned int)vectors; S6 O8 M, W( ^1 }$ k6 {1 N( V
ICR = 0xFFF0;
0 q) I" d# w3 s0 ^& ^3 \4 @ IER |= 0x12; . V( U$ g* _4 m
CSR |= 0x01; 5 L! e1 R( k4 _$ d. F
! s# x5 V( i( J! P" F* \. W- D' D1 J( F5 c- Y
2 ~. m5 i4 R! R( h5 t还有就是两个输入输出函数:
' F7 w' B& Q( H7 T8 T y) tvoid output_sample(Int32 out_data)
: p9 E o* @! ?3 o0 H{
: L- M0 j- B3 }& Y! ^: Z AIC31_data.uint = out_data;
# K6 q( E8 ~" c9 k% R9 L: H3 @ MCASP1_XBUF5_32BIT = AIC31_data.uint;( x# ?% w6 M1 c6 ]
}, b, a2 z& P9 ^( Z
$ [5 B' q2 M5 @( L0 b. @4 BInt32 input_sample(void)9 a, A q/ m+ h+ K2 k* T% S* _
{ 3 G1 @+ A6 K3 I7 Z' f
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' F5 O8 T. B [ return (AIC31_data.uint);
* R3 m2 U1 j J0 z- s# r) Y}
: q7 G9 Q1 U' Q) ~. I( |+ R1 H# n* A% U/ f$ f; E5 f7 y4 Y4 [
|
|