|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ w+ c! j1 u$ k6 E" i" t
main文件:" R- ]' Q$ A& _5 J
interrupt void interrupt4(void) ! d% ]& F, i( U! X( ?
{# p* P# ~- y- I4 l: t
Uint32 sample;0 L- s# x( s' }! O" X! H
5 Q' ~1 e, o: z3 y
sample = input_sample(); // read L + R samples from ADC
% b( n, U0 j7 [' A/ M/ \- W output_sample(sample); // write L + R samples to DAC
j) `4 [& H' v( Z R+ C return;) u2 ]% D0 T/ D$ O, G" Y4 C
}2 K: S2 ^: K4 B) Q
9 ^' t+ m v# M: F% gint main( void )
& j5 Y8 ~7 T$ K J4 \; p{5 J2 C( p G, R) I6 E7 _
0 m' s$ C% F5 h8 u7 ? U: G /* Initialize BSL */7 G" p* P8 K% z* y
EVMC6747_init( );
8 o4 Q/ u/ A0 O- [4 o+ I) q! v; B1 f; L /* Call evmc6747_intr function */( W6 f, I; W) q% W$ Z1 _% {- C0 {
aic3106_init( );1 P7 L: {* ^9 F4 P, `
while(1);
& R, D. C3 Q* u/ W% ~+ R$ A# s) c}
4 F' l3 {# h+ ~ y a) d- O+ Z/ R; Z3 v# }+ x0 r
Q; w- \8 }$ U$ a6 `5 ^2 s8 @$ j5 r
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; b' I% f4 |% h
/* Initialize MCASP1 */
. S4 j0 z ^: V! N* `9 H) D5 m mcasp = &MCASP_MODULE_1;# G7 ~; M/ m, Z2 I+ b- W7 M
mcasp->regs->GBLCTL = 0; // Reset
9 |6 |: ]: X: U3 Z mcasp->regs->RGBLCTL = 0; // Reset RX
7 Z6 N/ B! }" [ mcasp->regs->XGBLCTL = 0; // Reset TX1 a% Z" {7 T! I' _
mcasp->regs->PWRDEMU = 1; // Free-running6 I% T2 F" M8 r5 t
// configure McASP0 receive registers
: H0 M; E, `/ I9 C mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! q O& J; S) `' A
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 h n3 j4 {: b6 c1 ^3 O- P& w* e
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word1 q- |4 b' ~( x% j( Z
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)# G. H0 ? O8 K; A Q6 r
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side) e8 L# I e+ {) t3 V- F6 }: ~: w
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 {- x# N" f) V1 A& W/ Z2 s# E
mcasp->regs->RINTCTL = 0x00000000; // Not used
+ J f6 B( s& a+ d I6 t mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 T3 d' L( o4 k, ~
& E" f: Y+ j& F2 v& ^2 Q- { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used1 ?. ^% ~' c B5 q& z1 o/ T
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 K! E1 O. f* L# R2 D: c$ y4 ?4 A3 z mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 ]0 N3 J0 F0 h+ H5 L5 `3 |4 S mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
q4 S3 L" G' x/ F' _9 X. z. T% T mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
/ |) F2 A2 A" R2 d$ j mcasp->regs->XTDM = 0x00000003; // Slots 0,1
' [% u: r* ?& i2 A' o4 t C mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
4 g2 ]) s" w2 w: ` mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" G4 @8 R6 F- w& o0 u) }% ~8 M0 a5 U# H( f
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
7 y7 Z: _( k7 h6 \5 J0 q+ f! c mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
% ]* @9 `* |8 X6 U9 y, ^ mcasp->regs->PFUNC = 0; // All MCASPs
# n3 N3 f- d( ^: g$ T mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 e( B$ f- N4 w" Z, x! Y& v
/ }: r) t$ V5 e+ q3 i
mcasp->regs->DITCTL = 0x00000000; // Not used
; a+ B) v+ Q! G( h mcasp->regs->DLBCTL = 0x00000000; // Not used
. x7 `" m! j U" U- P3 j( m mcasp->regs->AMUTE = 0x00000000; // Not used
4 n. s5 r4 G, j* U2 V# z) a6 p% g$ J+ U3 g) J" Q
/* Starting sections of the McASP*/
1 g2 q% I' J$ C ]# } mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 v' h) ^/ Z' _+ \% a
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); # V6 I5 D9 k: {) M0 j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 i o1 e! N& l6 m R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ E& f9 K/ m0 I
: B `; H& S, w. i6 B mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
R" f _, e$ ?( Y7 [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- {1 O. }/ g) M7 h# \; s
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ [- i2 Q( W( i2 E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# i8 x1 T" H8 m
* C- C4 Q- Z9 u! q! M% c mcasp->regs->XSTAT = 0x0000ffff;
4 U- t- T- Y K ]% q7 @ mcasp->regs->RSTAT = 0x0000ffff;
7 I; @2 a6 ?: r! j3 Y! \! b& |5 |" B3 |
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 | W! _) j. d; w7 u while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 O- H/ K0 s D mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 q4 Y% |6 c) d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( r4 }- f/ a, W2 A: i
7 B; o$ f6 t' n2 S /* Write a 0, so that no underrun occurs after releasing the state machine */
% d' X' l6 Z$ G; D4 Y mcasp->regs->XBUF5 = 0;
2 P& n, L: U4 S4 z mcasp->regs->RBUF0 = 0;, K; m4 I* T* G4 {# N5 F' {% }
& r2 f+ y9 V7 R- `# j" m mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 ?& p4 [2 I+ w; W- P. w
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
: x. G% }" M: b& q: f. D mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # d N& I8 B1 l9 o8 F4 z: d K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- s7 H' J4 ?; h& C* j. U. P5 L) I/ F/ `& k. N- T
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* c2 b) t$ f' j+ ]1 H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 ]4 x9 b5 Q( ~% b/ M5 h3 x, L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- H6 ~+ B9 I1 L; ]! h- \* v while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# W% ` n6 K# _) u* m4 t, [2 _( |* u5 v* M1 k( q# \
CSR = 0x0000;
$ a" V7 `' q. m/ E* A# x INTC_INTMUX1 = 0x3d;& ]& J! E$ g% g1 M9 T3 n
ISTP = (unsigned int)vectors; N& E5 F2 [8 q# Y
ICR = 0xFFF0;
, H( ]/ }$ \0 p ?" h" p IER |= 0x12;
( f) z7 d, a S; u CSR |= 0x01; - d* @% i7 W* s$ c L$ }% m
% ^' l0 v8 d+ |1 Y
& f F' v6 f* L* z& O4 e- E# k3 l! {5 w! d& z7 V
还有就是两个输入输出函数:
) ~1 \' j m- D+ r$ l4 M0 Yvoid output_sample(Int32 out_data)
) M+ @+ ?3 b' E+ z' H" h{0 G; f0 Y; d# r
AIC31_data.uint = out_data; + Q8 N4 j7 X4 C' t/ ]
MCASP1_XBUF5_32BIT = AIC31_data.uint;8 T7 e" y/ W L/ u
}1 S* w' n* _4 s# j0 p+ Z' j
0 h; R( _6 Q/ I# A6 [Int32 input_sample(void)2 @5 D9 O1 Z( {7 V/ h
{ : n% g! [% D5 }# Z- ~
AIC31_data.uint = MCASP1_RBUF0_32BIT;: N' P5 O$ s- }2 b. a
return (AIC31_data.uint);9 A% o& |+ ], [6 ] U. p3 t# Z
}% |# ^- }6 s5 C) s* t$ h7 Q" q
2 o2 [ j" F% y+ {$ i
|
|