|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
^7 o. K- h& x3 v1 tmain文件:
7 t9 {9 f# e/ o8 b5 W4 S9 ~interrupt void interrupt4(void)
( K2 s. C7 j+ k: X. Y; {/ l0 r{
* @ _" X* w+ {. J Uint32 sample;
& h& \" a( D b- y$ U: F# A& N: m0 f) F7 D& D
sample = input_sample(); // read L + R samples from ADC
- G0 u/ Y2 B! }: v+ Q output_sample(sample); // write L + R samples to DAC
& \5 [! K6 k1 y6 R return;0 h! i% {4 p5 R, y* a
}
: @5 I+ i, u& J' L" U5 J4 v+ s6 F3 x3 J# ]; @
int main( void ); B( [/ m% m ?& Y3 @- a
{. }, o: [; C2 m+ M2 D* B3 r2 k) _( X! j
" c) Z1 d. k* }8 \! l0 k
/* Initialize BSL */
" ~( z; n( l5 ^9 ]6 z6 ]0 D EVMC6747_init( );
% ~5 ^. X" j& X3 b' t# S /* Call evmc6747_intr function */+ O; O1 J0 X# G. n! b- s
aic3106_init( );1 n$ y. F* u1 c% W2 h4 }8 ~% |
while(1);
6 ]7 C$ A6 S& i- g1 p4 ^7 g}1 a8 u3 E, C: @1 f6 Y* J
& ]( s1 b6 u& X& X0 l
# F; _3 P* T0 N+ K# v: {- \+ G( b& vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( W3 \/ q# `0 n% c3 n6 `/ ?/ g( ~1 |/* Initialize MCASP1 */1 _* A" N4 y/ | o/ T" \
mcasp = &MCASP_MODULE_1;
4 r ?6 Y; S6 x6 s mcasp->regs->GBLCTL = 0; // Reset
, N9 Q7 t6 z# e2 j" ^& j mcasp->regs->RGBLCTL = 0; // Reset RX% |5 I( F* @+ Q; j4 C; v+ S
mcasp->regs->XGBLCTL = 0; // Reset TX0 [0 z" z4 N6 @8 Y4 X! ]! V
mcasp->regs->PWRDEMU = 1; // Free-running0 \+ v L8 Y; Z7 B& r
// configure McASP0 receive registers
4 N9 Z& c* U% s+ E8 j/ ? mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used( e! ^. Y A+ m+ f& g) ^3 [' y& E
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ X# C- Z+ K4 a E- p mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# g$ [8 b; f& K* ~0 ~, {& ~- W' H mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 V# B$ L9 T G; A$ X
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; O9 |/ `* ]2 `+ v3 ] mcasp->regs->RTDM = 0x00000003; // Slots 0,1# X" Y- o+ S; W
mcasp->regs->RINTCTL = 0x00000000; // Not used
9 W7 d A9 X# B" X; h' B/ k: Q mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 C! t9 U6 S3 Q; h* q' F: `4 p" d
, Y( z3 `9 F- w4 |* e: ~
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
( E# }9 Y& G: b$ d mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, a- E+ V6 Q% @ mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 V2 ~* K8 A( G
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T4 V2 ^' O7 Q* b: ^& p1 v
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK) M7 y! q, h% B- l5 U; G' ]* l
mcasp->regs->XTDM = 0x00000003; // Slots 0,1, ~6 w" Z) R1 N
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 g+ o; J. V0 N' q; } mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' z& i) h) W4 _
3 Z, t$ n0 Y8 E' g* N, @ mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
4 [( L4 r: Q6 s/ \- Z5 n mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT4 R3 Z$ X3 t0 Z2 k8 J& R. q0 [
mcasp->regs->PFUNC = 0; // All MCASPs: ?+ t4 d# G. ? T- I" U
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ q1 U$ ]3 f9 S6 G2 P( ~+ v
' h! a: B6 y; y mcasp->regs->DITCTL = 0x00000000; // Not used. a, i+ n, Z0 o
mcasp->regs->DLBCTL = 0x00000000; // Not used
7 t! m' Y8 R; m$ F$ |5 ?# x mcasp->regs->AMUTE = 0x00000000; // Not used( k' E9 x9 v L/ D# |0 y4 | z. q
% `5 j$ k* w1 n4 k1 Y/* Starting sections of the McASP*/( B% t6 c, x3 k K- Q
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 j+ a/ D% g: E
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); + i9 G, n+ `- q2 y
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 X" U3 [1 S4 d! ] V' B
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; k, r9 \: @8 b$ t! K; ^) C; O% X: c3 t- Y* n' o
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 g2 M* f# O1 q3 | while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 U' V5 F; b4 ?# N: B2 H" r# G
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" D( Z7 K% x6 L; t n( j( O8 ]4 Z while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. ^4 [+ C) J! [% H0 R F: N$ V% b! {
mcasp->regs->XSTAT = 0x0000ffff;
( L+ @/ I3 C g# Y mcasp->regs->RSTAT = 0x0000ffff; ^% ^: T4 }4 r
& O7 a6 J1 t2 f; ]* P& G9 N mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 ^% p* D; } w; S+ J' H! L while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( |0 a6 s- X4 M+ k4 s7 C
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : ?2 y8 J& _! S: B# G4 L
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: t% Z3 @* C% V/ ~6 m: p& X% I+ r( u% E8 ]
/* Write a 0, so that no underrun occurs after releasing the state machine */- f( ]7 N' y( D- q6 o+ S+ G+ I
mcasp->regs->XBUF5 = 0;* U% ~) q* @# v! k. ]% E" I9 b
mcasp->regs->RBUF0 = 0;
7 U% Z) @# c, \8 D9 e$ _+ E9 ?" a( J& @# J/ Y
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) L$ G3 v5 O: J" c
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 u& Q7 H) K+ d" \4 Z# C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; g9 `% O8 }2 O$ I0 g! o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 ^/ q7 |' G, q
4 F# ]% a0 [4 _! j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 r* ` C" f0 l2 i8 E" }! N8 M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
`! u# f2 l8 d1 C/ Z mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 Y r) R$ l( l% G while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: }$ H1 B- D7 W4 r) C6 U) N
s# `: @' ^( {5 M8 Z( w {
CSR = 0x0000;& K- q ~/ }9 t ~1 b9 s$ x
INTC_INTMUX1 = 0x3d;
8 L% y9 X1 d6 S' N. b' `1 R ISTP = (unsigned int)vectors;
' _7 R% {# M1 y" I ?, O ICR = 0xFFF0; 0 L! G5 ]/ \, u+ N5 O
IER |= 0x12;
- y" u3 ^3 m& ], W4 F1 W CSR |= 0x01;
: l' b/ c4 N% b6 q6 B: G
* D! ~3 ~$ P7 H# z3 g/ _: d: v u1 C3 \+ g" V/ H- f
" f% ?& v8 P0 ]: x7 W+ K* A/ K还有就是两个输入输出函数:* D/ E2 W. @1 V: M) E- a, F
void output_sample(Int32 out_data)
# x3 G) ^. W4 L4 I/ I8 e: k' C{
7 O# A0 G4 M/ E) J AIC31_data.uint = out_data; ' m1 X5 _5 ~! b/ B# `) X
MCASP1_XBUF5_32BIT = AIC31_data.uint;1 ^" R& @- T5 O4 W4 T2 ~
}4 K' i. I7 }& x; U( j J4 b/ n6 L
0 r0 \% _+ S- j: Y# s7 w8 o- e
Int32 input_sample(void)2 n, t8 Y( ?2 D, ?- V4 d' d4 ` b$ \
{
/ ~1 d0 v5 U* u4 ?, u# S. W. x- D AIC31_data.uint = MCASP1_RBUF0_32BIT;1 Z; z, ~# H7 W/ t8 N( d, |! p
return (AIC31_data.uint);3 r# M/ C% m; r# C6 W* k ^% [) I* i
}
5 N2 e) F: W A- U+ e. g5 v. `
0 ~' d' w; }+ i+ s4 d9 Z |
|