|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 n; E7 }& a1 [4 M! n T) \4 a z1 jmain文件:
, U5 X. |* _( {interrupt void interrupt4(void)
' s, ?' r1 x* \9 z* e3 e{4 v- _" g, _1 U
Uint32 sample;
) ^' F' i( f0 i+ z9 v& y+ X* S( I& ~$ b
sample = input_sample(); // read L + R samples from ADC
% x( U# e0 _7 [+ P6 p8 K# G output_sample(sample); // write L + R samples to DAC
% y1 I j2 {. D& q# p return;& _+ n2 T/ B" A0 G+ l! P2 n
}
3 P) ]% j) _/ w/ s( x
& o& C3 E+ z1 S% `, ]" E# a f2 ^int main( void )
+ N/ C) h! @- v! ^5 f# A{
) Y: F( E4 Q; h8 c1 |$ h r
+ N7 ?2 m. t' @( K8 w, F /* Initialize BSL */) [5 i) i j% }9 w* `& j
EVMC6747_init( );$ W5 ~' d$ y( \- W, J
/* Call evmc6747_intr function */8 X/ d0 Z! V2 M+ y T, F
aic3106_init( );
7 S& j8 l: S# j5 a while(1);( i) p& F+ O% T
}3 m5 V1 O Z- O" Y+ I* {3 x
8 V Z- e+ [# W' P0 l( P4 Y
0 \" \3 V1 s4 z; v8 g% M: [; V6 q5 [aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# {; f# W g, t! W5 J
/* Initialize MCASP1 */
; F T2 Z) w5 ]! J' F/ l mcasp = &MCASP_MODULE_1;
1 J e3 Z2 b1 H j5 v2 p7 g8 o mcasp->regs->GBLCTL = 0; // Reset; H- z- N" l& m; L7 V* _* k
mcasp->regs->RGBLCTL = 0; // Reset RX+ P0 a7 S8 K5 g n# }2 p+ F" H
mcasp->regs->XGBLCTL = 0; // Reset TX" U( P$ Q* b' t2 P! c- h2 V
mcasp->regs->PWRDEMU = 1; // Free-running! h& c3 {) j1 F
// configure McASP0 receive registers
8 @! u8 d6 U5 ^5 O4 M/ J5 h9 R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used! }# M; }- o0 f( m
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. R7 J, c. Q, }* |: ^9 j mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 ^6 t6 x) K! `( _
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 U) [6 N5 K3 T% i mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
; y3 ^6 j6 J! g. @ Y% {4 P, ]% ?& O mcasp->regs->RTDM = 0x00000003; // Slots 0,1# e* ]! i8 c" m2 @6 C( W7 j" ?: B, [6 D
mcasp->regs->RINTCTL = 0x00000000; // Not used
: q, [ n7 d2 I* [4 q {4 t mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, i4 X% u- {# ^/ V
6 b9 F9 [% a9 m1 e$ i
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
+ C+ z4 x5 ]% p/ x- Z) n* { mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, g( A3 _& Z8 e mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 d U' P& b4 G, G8 _/ X
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. w) S8 q" R } mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
# h3 L7 {& R) g! X mcasp->regs->XTDM = 0x00000003; // Slots 0,14 q' s1 R6 I0 k! w. v
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit# k* b4 f- z# y1 A
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. l, B- A4 j. V5 Q, P# ?4 L9 G+ l
3 t+ y9 i h0 Z: N. e$ I6 { mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
, t4 {: F0 `1 d mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
, S4 Y: @6 v$ U! B' q( T5 r; M$ n mcasp->regs->PFUNC = 0; // All MCASPs
" @3 Z. X2 W: }+ u/ p1 H3 J: I mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& q4 m% p. X k' t" f" C
8 U' i# _; M7 S' E b/ a# @4 b, c mcasp->regs->DITCTL = 0x00000000; // Not used$ Z% D/ |0 O* ]3 \9 S0 w) ^8 Q+ E7 h
mcasp->regs->DLBCTL = 0x00000000; // Not used
5 c U( w* B- J4 f S mcasp->regs->AMUTE = 0x00000000; // Not used
1 r( M ^1 [0 U9 @1 p/ ~* ?+ z: `
/* Starting sections of the McASP*/" B+ k$ Z# u4 T3 d1 \0 W c
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - ^8 {# H( U! [# d: R
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); " L" X$ x) Z0 k/ u0 n
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 \' s: @# a$ |. K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: v' [! x9 g! Q2 Y: e& h* i& E: e% s3 O" U" ~3 l1 \3 c
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* ^# l1 u% g8 I( }5 j- [! {- ` while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, G5 c& J) d: A+ J3 H9 z0 E6 i2 h) {
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" [8 I7 |/ u5 O3 I7 q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 G2 k6 a% L& Z) \! Z3 \, I
( E6 C. a6 k; X8 a6 j, u mcasp->regs->XSTAT = 0x0000ffff;
/ K. u0 c! d# Q mcasp->regs->RSTAT = 0x0000ffff;
, q2 b: t' u) v$ C6 ^
. K& m+ e. m3 n mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, E" c* w1 `# @% \: D while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; l2 ^3 ^& L) c j) P mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ V( h( A+ g4 E. g- I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 D. h/ F! k' I. f
% d# U$ q7 }5 w Y2 C9 p+ E4 e /* Write a 0, so that no underrun occurs after releasing the state machine */
- F d. X- _6 E mcasp->regs->XBUF5 = 0;
! Y; O& Y. s- X( J' t: w) h5 W/ a mcasp->regs->RBUF0 = 0;7 l' w4 n9 k8 K x4 H
: j! h" E( h. ?$ p; l
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) H6 T4 z3 U3 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! ]3 q9 v9 E! S5 V: k5 C( f
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & r- @. Z# |" @& \! _- o
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' d+ C# N' T; k* Z, c' L$ `2 D6 Z. P( [, J1 {3 Q
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 t9 T4 D* ~! F; `% u/ ]7 U while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
; h* Q0 O* J5 p8 x& l% K/ o6 f8 J mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 I+ j( u' e! V( f ~ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 I# u( I" _- F
2 `& i, E3 j. v7 M# Q CSR = 0x0000;/ ~0 | w7 b6 `; @! P/ ^
INTC_INTMUX1 = 0x3d;
2 J- K* _9 N* u# a ISTP = (unsigned int)vectors;7 D j8 b$ h% R. i' y# T1 b
ICR = 0xFFF0; - k. a2 }7 t( f
IER |= 0x12; # g; [$ l/ ~. O5 ?
CSR |= 0x01; d/ a" v2 w+ x' C& a
: \" Y- ~) e! f: b
! m* x) _* `& k3 o! z4 H" ^ f7 s5 C- D) }5 V5 O, @
还有就是两个输入输出函数:0 ?" m/ x1 N5 l/ P
void output_sample(Int32 out_data)/ l" I$ F9 A! @1 L4 _9 E3 R, l
{! U" @9 v0 M6 C/ g' j {9 M
AIC31_data.uint = out_data;
5 M; o% T( ~- v5 H4 v! k9 W MCASP1_XBUF5_32BIT = AIC31_data.uint;
, r' g( v0 X1 G2 d8 p}4 P$ e$ m: R A1 E
% h1 N t; R( q1 c/ b
Int32 input_sample(void)& ] ]- d/ V! L* h
{ 9 }* h% o& x0 d c" h
AIC31_data.uint = MCASP1_RBUF0_32BIT;0 w- Z7 O# e! k/ Q' j) [
return (AIC31_data.uint);
/ m) W& f8 y# I7 x& M v8 |: v- g}
# A) ~2 n7 j# n& Z6 e$ C! a+ N; n+ N* Z6 B% J
|
|