|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 i' n' }& P9 n0 h0 j/ Lmain文件:2 s' y5 T$ w" H: P O
interrupt void interrupt4(void) $ x7 q- B8 w6 }! A$ R
{; h$ ^2 g8 @! ]8 g& ?
Uint32 sample;( Y3 G( D* B4 ~6 N$ ^) o
- P+ b3 Q9 F F. |) B- Y" ?
sample = input_sample(); // read L + R samples from ADC# x4 g' A, h5 M$ A( ]/ b$ H
output_sample(sample); // write L + R samples to DAC 2 `7 O; }: L. k6 z( S7 ^5 A4 G
return;
$ u+ Y$ n4 G! b, n1 {4 F7 b0 W}
' I" @. a3 H, ^6 {- w* B; M$ _0 C* C4 v0 W: m
int main( void )+ \: X6 I* k+ ?* W
{
; U* y& i x$ d! k! r1 P4 S* u2 u( X* o
/* Initialize BSL */4 \5 {% t+ h7 P( {5 B
EVMC6747_init( );
. C; ^0 P, P% n /* Call evmc6747_intr function */
* l3 X$ L5 `2 E" Y aic3106_init( );
; J6 _; u) S- t while(1);3 F: s+ D/ N) m e7 X8 _- H
}6 s' ^1 C6 s( u0 M0 Z
$ z; H, q0 V5 h+ T
2 l$ ^- i6 C* ?5 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' p9 h" T0 o/ u1 _
/* Initialize MCASP1 */# ~3 z7 h5 ]" ]& S- n, Z
mcasp = &MCASP_MODULE_1;
! n0 l( g9 o7 W, n mcasp->regs->GBLCTL = 0; // Reset
# n: R$ M" ] N) D/ d1 r& ?! p mcasp->regs->RGBLCTL = 0; // Reset RX
& n' V3 K! H0 E0 Z/ J o mcasp->regs->XGBLCTL = 0; // Reset TX
0 j' B: K N, c% ~ mcasp->regs->PWRDEMU = 1; // Free-running3 h/ E' A* v3 K0 E- |# B9 w1 y D
// configure McASP0 receive registers: a1 R4 _* ?- X" T
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used h+ k' {0 H) Y1 W* O h
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& X5 N3 }7 b O6 n7 R3 H7 h$ F$ t mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word" X) g0 T( z" o8 T
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 F6 `: ]8 v/ S
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
% H+ a! \5 J1 Y( ^ mcasp->regs->RTDM = 0x00000003; // Slots 0,15 J& q$ n' n0 _" T
mcasp->regs->RINTCTL = 0x00000000; // Not used& S3 m% T2 n3 P0 n- x
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ d" Z7 R( a( W7 j
, J5 v2 V, L$ C- s/ B mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
1 u; K7 H$ V$ B# W, i; L1 a% @9 I3 u( J mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# Y0 j2 l: E: S& C
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! v6 N/ q2 e6 R& X9 s+ O, R+ f: S
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) @$ N0 ~) N; B& G0 G mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
" U/ b/ ^+ Q& p8 H mcasp->regs->XTDM = 0x00000003; // Slots 0,1
6 ~. c( I5 N/ d/ p/ F mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
6 {$ I2 Z+ |! n3 n6 e$ F' _ mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 [9 G) R' n7 |+ Z4 I$ @" ^) G7 \+ P% @9 A$ j! ?0 ` b
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN z- g' h* Y$ D, J/ ~* H2 v
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- K9 Z" D& s, @
mcasp->regs->PFUNC = 0; // All MCASPs
& }3 K2 }% d9 S) O% r- d mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: A3 T& ~5 A: ^1 Y) J Q
: d( V' y0 d# w0 i3 S& _2 r, E mcasp->regs->DITCTL = 0x00000000; // Not used
% B9 a, O. i( S mcasp->regs->DLBCTL = 0x00000000; // Not used9 l* W4 V3 d* r; o3 S: J
mcasp->regs->AMUTE = 0x00000000; // Not used
& J# j* X3 o' [' o q( M) h {
G, `& s6 ^, z0 k& o/* Starting sections of the McASP*/
2 d$ ^4 r* N5 _$ Z* X2 } mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 ]% ^4 V- R) N while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. f0 V1 ^; D+ P* | mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # v1 L2 G" c' H5 z& d3 M. I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; R3 K3 W6 \2 [$ E
# ^: O+ N7 Z' i mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% o, ]# J }7 I- z; a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ b7 T p. p# C
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 B# B# q7 V) ]6 i7 p& [
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ L" X! O$ O) X$ A5 Z
- [0 D' R8 ?, c: _" a mcasp->regs->XSTAT = 0x0000ffff; ; R; `" n2 S9 m# A- A: @- N
mcasp->regs->RSTAT = 0x0000ffff; 1 u8 g4 a8 ]& O
0 @/ \; x- f: h) S9 }9 l
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& N- D1 G% }1 l2 B9 }: n! j
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
W1 C0 @* k2 v5 i5 m mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; D9 W# J5 ~5 T: J: s$ D: @1 A
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 G* y$ A- ?1 d) c! d& l
+ ^ ^+ a* C8 v* R" m6 b; _
/* Write a 0, so that no underrun occurs after releasing the state machine */
" R" h v& J( f7 m( |% z- \ mcasp->regs->XBUF5 = 0;* H Z4 Z4 B. K
mcasp->regs->RBUF0 = 0;
) P) }$ \* f3 t# g$ ?+ L' h4 j; X7 d2 B, q. U
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % f2 F# U1 z2 q3 h8 M# Q7 ~% ?# x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 [6 s$ t& \, S mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, d. Z M0 [: t$ N$ ^3 f2 r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ t0 J& K# F( ^# @9 M+ s" y' b9 j9 H6 Y6 p& |; Q/ S
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ q5 M. M3 ?' L5 { while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# \6 d: D! \; ] mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& W! q8 F) J! ~# l: g2 R while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
. a0 Q5 d& d$ K& k: u
: l; D- X3 S( z( \- E7 \ CSR = 0x0000;) k* [! h4 l( B Y* ]
INTC_INTMUX1 = 0x3d;& o2 z" H5 E8 D8 v/ j1 l2 H
ISTP = (unsigned int)vectors;( O/ K% @7 w* x1 Z1 Z
ICR = 0xFFF0; ; q* H6 a g5 a1 z; O7 h [* k" p2 k
IER |= 0x12; ; t- p, J1 e& S. E% g
CSR |= 0x01;
( i' [* V% c! K# U9 D8 O% C" b; J. Y8 X4 p: n! A/ I
9 Y8 v; V) ?0 j f/ b; {) O X% X; @& k9 F$ {: j
还有就是两个输入输出函数:
& Q4 }# y; X9 Y6 d" Svoid output_sample(Int32 out_data)
) E" I r4 D# t0 F{
0 ^" L! X( z* m; J AIC31_data.uint = out_data;
. Q/ }$ }/ p. D. ^* @5 C+ t/ f MCASP1_XBUF5_32BIT = AIC31_data.uint;) D$ Y" k4 u6 |! ~ K, g- u
}8 z) E$ V& t F% x
; l; a* r7 j+ z" ]1 C9 k' L
Int32 input_sample(void)! D" x, Y$ i0 c, I* U3 s
{ - {* ]- @) P. X$ g1 \# P# l- e) P
AIC31_data.uint = MCASP1_RBUF0_32BIT;/ q$ i& |& s Z
return (AIC31_data.uint);
; B4 K: F* c$ F, e! f}1 L! q0 C0 ` |4 I; }3 ~7 \% W
) L6 K8 e3 S) K% p, S/ m" K! I |
|