|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 }* o+ Q; A2 X3 X% Nmain文件:% X' |3 ^+ l1 k8 Y$ c/ W- B. \
interrupt void interrupt4(void)
& R7 ~/ l) j! F6 E{4 Y) v/ r) w% u
Uint32 sample;7 J& G# x4 D7 t/ F9 E9 a
+ b) `5 ^$ v) M* f& [2 @7 u+ e sample = input_sample(); // read L + R samples from ADC
8 c8 U, e+ I1 K output_sample(sample); // write L + R samples to DAC % |# ?& _ W/ j" O: U% Q# {1 R
return;) B+ r, Q7 N, ?) Y8 w- f% K
}
. k% z& a/ L: M0 `8 O- m) v# n/ o+ W$ v1 {! c1 L3 N
int main( void )
$ ^( `9 M) D5 B7 P{% u! j- E6 E! A3 l, P
! p2 u1 }' K. y* H; ^ /* Initialize BSL */. r7 Q/ R' q# \$ @! ~; W' s6 H
EVMC6747_init( );
5 I8 P1 G( `. J6 r5 r /* Call evmc6747_intr function */5 S2 I% X8 l' g9 B- m, t
aic3106_init( );1 J4 ~5 N% L3 J! b! h
while(1);9 e% U6 h# p8 Y f
}
5 L$ l/ V- Y# N
6 f! f$ Y5 U7 p) r0 Q
6 P, u) z4 r) p& y( e& i' paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ v+ a( k8 Q S3 {1 b! A' B. W/* Initialize MCASP1 */) c- o7 |" D U+ N1 W5 Y6 C8 [
mcasp = &MCASP_MODULE_1;) W3 u* m8 b; F$ G. z. L8 u1 O
mcasp->regs->GBLCTL = 0; // Reset3 E# [5 d) Q" v' t' g
mcasp->regs->RGBLCTL = 0; // Reset RX' i' \5 O ]; [, z
mcasp->regs->XGBLCTL = 0; // Reset TX. ~3 G/ w" s/ J& K' o; L
mcasp->regs->PWRDEMU = 1; // Free-running- j5 Q/ y$ k. B( |& I5 H( s% b& J$ v
// configure McASP0 receive registers
. f" o3 C7 G$ J/ X2 o2 R' n& X mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used0 `% I: f, Q. D6 d
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ @* y( i, Q+ W7 ~* ~9 v1 B
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* M) b# }, e* l6 W# y9 U' n mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! k7 [. _) G# i9 ^- A$ e' b7 ]
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
2 F) ~3 Z+ J/ S. F mcasp->regs->RTDM = 0x00000003; // Slots 0,1/ y X. J# c4 T
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 Z1 ~! L# [2 `3 n/ k+ P& |- v mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 a9 l' o" Q: y( F7 ^% a1 y
* T1 p1 Q! `: M; N
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
$ E" P- c, A" X0 c. |7 Y/ r mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 P( C8 [: t2 u8 I) ] H" y mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 E; x5 l8 d! c mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& \) {' Y3 s% h7 |! E' B I
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK h5 i9 u! q0 E) m. V* [
mcasp->regs->XTDM = 0x00000003; // Slots 0,1! P1 z1 X+ H' F% y4 S
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' w3 S$ X( {' }+ n. i: @% [ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ F% |& f( m% Q3 j% h. K8 l! ]" P6 K' k/ J5 F
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN7 \6 X" k/ |" `$ q9 v
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT3 S% S) C$ L* U% t6 B# |# Z6 g
mcasp->regs->PFUNC = 0; // All MCASPs$ n2 T4 M+ e# ^ l& J; Y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 d# |7 F/ j* d6 l; j/ A4 F- H" Z
: l7 p% N y: W* I' h# W mcasp->regs->DITCTL = 0x00000000; // Not used, x$ u# O" [: ?4 u$ h7 K
mcasp->regs->DLBCTL = 0x00000000; // Not used
& J) Q+ M7 S+ F! a7 L mcasp->regs->AMUTE = 0x00000000; // Not used
+ \! t+ e8 i8 O/ |
. v% c! w. O( X( T' e' U/* Starting sections of the McASP*/
2 K9 i ~4 k( |: N mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! o: B7 I3 g" `+ \, ^ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 v: P) `* {8 J" e5 A mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
/ s( A! x7 H' D; U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% f- m4 y8 w) H4 |. K9 f6 o
/ E* E1 M* B$ s* l mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 P( s f8 }+ `' V& b* I+ X6 N
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: f0 u3 e) K% y$ P% r mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' p5 U! B' i. W* j5 ~2 ?/ X1 } while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 v, f1 e4 P3 z: m' V9 s: q
# ~, }! D9 p" F3 j/ M2 B+ r
mcasp->regs->XSTAT = 0x0000ffff; ! ^+ U& `" r8 g
mcasp->regs->RSTAT = 0x0000ffff;
R5 [# o x2 A, l8 g2 i; K( [' w# v, T5 _1 E5 J; A. A; G
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; u \# C$ k- M8 ?5 s1 g" n6 {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# [+ E `. }) e; L1 U
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 S5 S; w4 T( k! C+ z
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 t" p e# ?- |* d
$ n& }/ e/ ~" d7 h; D /* Write a 0, so that no underrun occurs after releasing the state machine */
0 O; T ^! B* L mcasp->regs->XBUF5 = 0;
6 e9 T2 U4 e; E0 b" s9 ?' t5 J6 d mcasp->regs->RBUF0 = 0;
. W+ G3 F5 q' ^! \7 i L4 }+ Y% ~( P& W3 U4 ]7 k
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; w0 @. L. R8 i; x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 s5 p. x0 k2 } mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # i0 k6 ~1 Z5 ?4 J S7 b
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ @$ ?: l% o1 O, f+ W( D% {; ]6 g& N8 w3 m5 G6 a: n
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, Z7 ?' E0 `$ R; `: S* h& ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 i. i' |3 U2 W: f i mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 4 @3 `) H3 q! o* ]* b# T% n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 M" l4 v3 k* Q$ @
2 M" s$ D& w2 o
CSR = 0x0000;
( `+ r: B" I3 D' w" {% S* N. Q* ] INTC_INTMUX1 = 0x3d;
* p& K& y! R9 Y/ O8 { ISTP = (unsigned int)vectors;
c& u; q! B5 t" e9 H5 ] ICR = 0xFFF0;
3 b. g1 ?4 l8 ]9 {/ L& l# R IER |= 0x12;
P/ W4 W. h& j/ W, k2 y" ? CSR |= 0x01; 0 q3 b$ r, E% U1 R e6 V3 b
" X+ D" A& a5 J& S1 O* Q; w; N8 ~$ M. G' i& d* T) S" V
, i) L( i4 {; s' D* W还有就是两个输入输出函数: m2 N6 a4 z9 ~4 `! h4 m$ m
void output_sample(Int32 out_data)( {8 q* S- r1 M$ J& r
{ @: ~7 T) m+ m0 r) b
AIC31_data.uint = out_data; 5 o/ R8 f2 E* T
MCASP1_XBUF5_32BIT = AIC31_data.uint;' {6 r \$ z1 h. z) E/ ?
}: M7 _! h7 t( s2 n
' u3 S5 f( S' j8 f! IInt32 input_sample(void)+ L. Q p! I7 ~) _# Y
{ 1 t* O( a. Q! u0 O9 _
AIC31_data.uint = MCASP1_RBUF0_32BIT;
* l+ n% j" r4 }8 J: d+ q6 P return (AIC31_data.uint);) ~$ t6 V) Q/ a! f
}
7 b' {6 K& i; `4 Z" G: @5 |* y6 m3 _0 b* F
|
|