|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: C# | B' U2 z5 b& S
main文件:* r, z1 k: o- `' X
interrupt void interrupt4(void) * m7 d$ h* \) |: l
{
6 @, Z" F4 T0 {0 l2 R Uint32 sample;
! d6 m" m) I+ p; E, _8 T/ G% u1 ?, C3 n' r/ m7 }" z
sample = input_sample(); // read L + R samples from ADC
/ ]; y. ?3 c0 T8 W. T( m% |3 W; F output_sample(sample); // write L + R samples to DAC Z# A- {# B! G3 H) a0 ]% [
return;, {" v+ |- m1 S8 @$ l
}/ h% A% B7 G W
: T% A4 w' V R L9 |: Y) ~! o
int main( void )
( c' k+ ]7 X+ }2 _; h{# W; b; n2 i/ R+ {; ]: V4 V; P
* B- J; \: x3 @- P8 e
/* Initialize BSL */6 B ~% {, n, @1 U% q
EVMC6747_init( );' Z0 |; k' w& M* u0 ^3 @4 s8 k
/* Call evmc6747_intr function */6 ~1 k* i; Q+ r4 Z6 D, D
aic3106_init( );
) t; D# [: t% L8 @ while(1);+ x% m3 G* k9 K3 b" I# ~
}! p! G5 f$ A& E6 O$ R! C& j
7 \" C6 `- K: ~& S, {; J$ |( P! {! S0 S; {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, d j2 W t9 `: U/ ?! B9 q5 m
/* Initialize MCASP1 */: q0 q# o+ s7 C j1 ]* h$ F
mcasp = &MCASP_MODULE_1;
0 ~. {$ v( x3 S4 j0 X9 Q3 e8 h& [ mcasp->regs->GBLCTL = 0; // Reset
( I0 |; f- s0 }+ O8 }$ D. u mcasp->regs->RGBLCTL = 0; // Reset RX3 E7 G( }1 @" S7 `; L5 T
mcasp->regs->XGBLCTL = 0; // Reset TX
) o6 b) Q' Y1 t5 v mcasp->regs->PWRDEMU = 1; // Free-running
3 ^! c. C9 r5 _ R // configure McASP0 receive registers
0 p$ n% N/ h3 o8 A. ~- Y mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
( S% X8 f |1 A) R/ ?* Z4 i8 A mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: x; p: @. Q% a/ H) P
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word j2 `/ A3 J$ D1 A. A9 _
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side). z( a* [+ k8 t2 M/ C; R& x' B& J2 x
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)# Q! f& G4 l3 O4 i
mcasp->regs->RTDM = 0x00000003; // Slots 0,14 d0 K8 Q$ o& ^
mcasp->regs->RINTCTL = 0x00000000; // Not used" b) s, S: E0 E- _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 B2 R' v- i, n; I
, Q+ ?+ r# s! u2 o' L( Q
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: h" p& r% {! K# k+ x2 A; L, X
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% M/ d9 p' X! C' B9 o mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# ]. X% J% y, U) R/ ]( @ mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. u m/ L D1 [7 H* s, T) Q mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
% J- [4 n9 y( N3 t. }' W- V3 A5 h mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" [- p4 |1 K( x8 E: r$ a mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
7 @ N- `3 ~3 _* d mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 r# O7 n I- }% ~2 H5 _
* M7 |. _% N, H6 z* x& U mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
$ u% ]0 }& g( [1 W, {* f mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
4 \# }; n! V. k E+ F6 Y( {- Y mcasp->regs->PFUNC = 0; // All MCASPs/ ^. `. A) r6 b7 {8 V" c! [
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1( b$ l2 O8 G! e; K
9 c8 d t( l6 W6 V- q mcasp->regs->DITCTL = 0x00000000; // Not used& z% B" \3 C& ~" u; V% m
mcasp->regs->DLBCTL = 0x00000000; // Not used
& Q) v5 Z0 h' M* ?/ T mcasp->regs->AMUTE = 0x00000000; // Not used
" U/ q3 w/ _* ]9 V* ^% |1 X. V+ r0 Z# f
/* Starting sections of the McASP*/) `/ M; D1 a" M2 r( K3 j
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, D9 G+ T, b1 {! ]7 k4 a3 W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
% Q% ?& Z" Q: S' a0 X$ V mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ \; \0 r% @. `) m' y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( p+ @9 f' _. b s2 N: w1 z- d
\" d2 g: d7 @2 l C. o mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : A- W0 O8 j1 g$ K# B: v( }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 w# B4 l+ k7 o) k* Q mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 ]) T k: Y% F- g( c9 _ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. j' J) t* ]+ F& g$ s4 S1 Z2 T
3 M# o4 @8 u, h6 p& ]# _
mcasp->regs->XSTAT = 0x0000ffff; - _4 z4 @; g0 v: _9 V5 }8 m; F
mcasp->regs->RSTAT = 0x0000ffff; 8 Y1 G- k0 U* Z+ k" ?: m9 I) H
0 B* {" o, o; q7 D! ] mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ \. y% }% H& @1 I% Q! j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 P* X* h. O) H( E6 P( F& x# j+ J2 B7 {
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! `# s6 r+ j! K w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 R5 [& N% P4 J* Z% [1 n+ j; f
' S, I' F8 Q3 M* K3 k
/* Write a 0, so that no underrun occurs after releasing the state machine */( O# b. b0 t, p/ ?, \
mcasp->regs->XBUF5 = 0;
/ v; W7 e% b& ^6 y& } mcasp->regs->RBUF0 = 0;
1 ^6 V9 w5 Z+ s% S/ n4 o# r0 K- a9 x) L- U% `
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 d4 q% j+ g, o
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 K x* f+ }2 ^% x2 j5 x5 y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 w) \! ~( R$ B( \* \, D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 ]9 g+ K$ P( v( n7 }7 P) S
8 K7 N, f" ]6 J9 j mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) ^& [( O: B+ Z- t
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ A L5 D3 v$ }
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ p) ]( Z( s& X* `' c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 Z9 W3 K& N# K! n( |$ I% |& f' |; ]+ G
' d @8 B+ N! ^/ p' x CSR = 0x0000;" F3 o- Z, S3 n8 b
INTC_INTMUX1 = 0x3d;
7 R+ I3 f9 T% F2 v: l ISTP = (unsigned int)vectors;
+ _1 s* t- r C" L ICR = 0xFFF0; 7 Z" J# u( v- c' M
IER |= 0x12;
" j# Z2 R3 {6 j D4 { CSR |= 0x01;
v( B( h$ T+ a7 d5 l( }, ^- s B; F4 s: Y c
3 W1 h% x: H/ p7 Y' u# t( c+ @+ p$ h5 t0 ]% M% R
还有就是两个输入输出函数:3 e6 t( R4 |6 `& m. ]
void output_sample(Int32 out_data)
/ ?% v# \ T& `{
' Z+ I1 j: w# d' I AIC31_data.uint = out_data; 6 E) C% T: A5 D' U% J* [% ^
MCASP1_XBUF5_32BIT = AIC31_data.uint;* v' @3 I' t! ^0 |
}. s) ^" Q$ |2 e
2 f0 c; z l( X9 r2 r- P- e$ O
Int32 input_sample(void)2 N1 Y) Z; n' x6 f% X
{ 2 a6 Y: P* t# n
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 I: \/ S! T2 Q/ n8 y return (AIC31_data.uint);$ H5 d2 l' B: B9 b2 a% L1 b& P
} x0 ^, }- z- p0 C$ q2 v, t
. j+ {2 v4 [7 O @% a5 ~ |
|