|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" m5 H O9 g) [main文件:
, T* R9 |# a9 uinterrupt void interrupt4(void) / D# a- A# @# K" S$ t F- z
{) G3 u5 l' D' B- Y$ u. w2 H
Uint32 sample;
6 e& z' B7 A; O( y. r1 s P
) \$ i3 J/ M6 \6 | sample = input_sample(); // read L + R samples from ADC
: o3 l8 z1 \: n output_sample(sample); // write L + R samples to DAC
A& s, k' [+ x, i6 K) g" ^ return;
% o% ?5 O2 e- S0 \) \: b}7 p; ?8 R& R) Z& [0 Z7 {
9 T: t$ r! _/ v& C
int main( void )9 {7 [+ \$ {+ x% d0 ]" M& ~! e
{
% ~1 [9 O; o6 {+ H3 u$ s- t& e# A; o+ h, A* W
/* Initialize BSL */2 \; ]; ]$ x; \" k8 |3 b' t: e
EVMC6747_init( );8 P4 K& e3 H" [9 P' Q6 [
/* Call evmc6747_intr function */
& T, x& G! z% T" e# ]8 \) V aic3106_init( );
, h5 u; e3 `2 @) ]; L6 n while(1);& a2 Y9 U, @1 k
}
, h6 x) [% x! d
" a# Q% f2 u! E8 _( g- P
6 E9 L% J( H W8 ]0 Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( F) M- u, k9 |2 H/* Initialize MCASP1 */
* P, ]' y1 O- ^ mcasp = &MCASP_MODULE_1;) D# |8 a9 b: }5 z3 \
mcasp->regs->GBLCTL = 0; // Reset8 x7 e9 N0 }. t4 O9 l7 g( B8 n
mcasp->regs->RGBLCTL = 0; // Reset RX
" \1 |: ]3 f6 j1 W p0 i mcasp->regs->XGBLCTL = 0; // Reset TX
# x# {+ f! L' S$ I$ v% Z' h mcasp->regs->PWRDEMU = 1; // Free-running
& |1 m0 H: y, Q- e! E // configure McASP0 receive registers
0 S! j, E- Y4 }' G mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
6 j# m' n! X; ?, z" U/ R f5 p& U/ R5 k( q mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" h8 K: N: x& I; S3 _
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 T/ Y; }& c# t! c+ E! z/ L6 D5 l mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- G% h$ o" Z( ^/ {' I' m( h
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)- r6 b0 f7 q+ G3 K
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
+ B( E O2 o( o3 G8 z+ s. Z6 i mcasp->regs->RINTCTL = 0x00000000; // Not used
* H2 E; K% n+ O+ X mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 c }# H" a* {0 M8 [3 W
5 B. Q' R; H. I
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
: r; Y8 E/ a) }1 Z% } mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ G6 G: o3 R; g7 Q$ Y
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
G0 S2 d9 N" v `- |8 z mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ N! V+ o! s3 s
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* b# _. U4 g+ |' I
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
, y+ K' K* k7 p0 P mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit- b3 n; N1 S" N) W
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 U' q0 M! ]7 ]5 k
8 \2 I) k% Y2 p9 Q3 F" B mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( a- c7 T* M, V+ w/ n- x2 O
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
8 [" Q) @1 B! D% ~$ D: k1 H0 `1 i% N$ c mcasp->regs->PFUNC = 0; // All MCASPs
' n9 A7 @1 d6 b' J. w3 G mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 @' D$ t' e% _: F9 e
- z: E. x2 V. f/ ^. ]3 V* F mcasp->regs->DITCTL = 0x00000000; // Not used
; {6 B8 ~* U' c6 A mcasp->regs->DLBCTL = 0x00000000; // Not used- U; h1 d, ~0 o9 A9 a; B' ~
mcasp->regs->AMUTE = 0x00000000; // Not used8 u0 e& j+ Q4 f+ e7 u6 o; }6 o( q4 t6 a
% p$ T) b% s3 ~- m: e4 N
/* Starting sections of the McASP*/" P% a i: a! n9 Q7 `6 H
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 W1 g$ D. G* _4 x8 l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
7 s% ]5 V7 [3 j4 U. F5 T$ ]/ M mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ w& q6 l( A0 m; ]" @ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; J/ `$ w0 ?9 ^9 e3 E+ K% {3 b
0 d( y) e6 O- O: j mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @) ^! j$ R2 H: N! [ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 X" O6 r9 a7 y4 X; c8 d$ t mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ l3 Z/ \2 S/ R3 G$ J$ `9 E6 N$ Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \1 `8 N* S& s7 l8 p6 B
& }1 M5 ` I2 x' q3 ^7 ~6 e mcasp->regs->XSTAT = 0x0000ffff; 0 [* P, e/ Q' S' n/ b
mcasp->regs->RSTAT = 0x0000ffff; - V. F# |! s# p8 ~/ f" u. R
; t3 M p! x# Y5 U/ d! k! R8 u mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( l: m( ^3 B' ~7 ~& S* T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 q& i+ ?- h a+ w9 a0 n1 c- n( U mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & j& X+ W, m$ d* ]5 R2 s4 K
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 U* Q5 G( p. ^" `: ]
& y6 f4 J I+ C- K0 h6 V8 R5 F
/* Write a 0, so that no underrun occurs after releasing the state machine */& k1 V; `; g0 u- U2 h2 d- h$ O. L
mcasp->regs->XBUF5 = 0;7 M2 b! h% A1 [7 |$ w Q
mcasp->regs->RBUF0 = 0;7 ^2 T! u( W& \- W; G# d
/ B1 |( c& y. J o9 N% B
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( R9 N m2 s5 d$ g3 p while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 y/ L% I4 Q9 m1 L8 | mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 @( A, f' U' n! a7 V while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ X8 f& |5 _, K$ Z+ U9 t
) S( b( |( v! \) i& i) N mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! e# c. ~3 T% V# Y% `* Y8 `+ M, R while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y) i. j" C4 q mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 X; ~# Z3 Q5 \8 W( N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; P+ n* I1 l" {; R( F& j0 J
% A- o# r* A, s+ u: }# C) s CSR = 0x0000;" g' X4 f5 j( h* D& }, x
INTC_INTMUX1 = 0x3d;# a$ n% z5 l) p% x( [
ISTP = (unsigned int)vectors;
0 V9 p1 X+ m; o: j& G& l5 K ICR = 0xFFF0;
2 T. K0 R* f( u IER |= 0x12; 2 ~! n' R5 m$ C" a
CSR |= 0x01;
* Q1 Q, H3 M# o4 E( H# y6 k" Z) I+ C
) k8 {: E. i0 c9 Y7 k6 |8 C# H9 z) ~$ F- t
) K0 y u, p' x ]还有就是两个输入输出函数:* d/ {1 D% I2 G5 m! d
void output_sample(Int32 out_data)2 N! p `; R0 i' ~9 B) \7 E0 y
{
; @& C( n/ e$ t0 @2 i3 L. t AIC31_data.uint = out_data; " t5 ?. ?" j6 h" C7 H
MCASP1_XBUF5_32BIT = AIC31_data.uint;
% Y3 e/ N; n; j! I6 N}
6 I$ h. q3 d" q/ D$ ~
. Q( Z8 m' [% I+ R% tInt32 input_sample(void)4 o3 h* f0 l* E7 n% t r" Z- C
{ / S; c" W' A8 K) X3 z, i8 a; U% M
AIC31_data.uint = MCASP1_RBUF0_32BIT;
! c$ }; f2 {' P+ o return (AIC31_data.uint);
0 N0 D0 @. N) Z- c, d: A" D0 S2 }}
5 a& |5 U! y; O) N( Y$ }4 W- ^* w: W6 D0 B2 b. U5 K
|
|