|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- M& f) d H) ?0 Q2 M' amain文件:
% f/ }& n- K, ]# o2 t0 }interrupt void interrupt4(void)
. e5 {* O; C, C- S3 N8 d. o+ r{; m/ L7 m; y8 V3 V* I$ [
Uint32 sample;
& j" k1 P, [( U" l' O4 f! u, p* c1 _5 _( z! \
sample = input_sample(); // read L + R samples from ADC
- o" p2 I( G1 U6 }$ n1 p output_sample(sample); // write L + R samples to DAC : ~- ?% J3 x; R0 V" B$ Q- e) ?
return;+ A* a4 X5 r* @" r0 }1 q
}+ N1 F$ B4 V' i- m: U- M
) Q! @+ F6 i9 H- b, u3 i9 T: u! H" mint main( void )5 @4 q# v Z0 J8 I
{
8 _: O- T4 Q+ a4 l! i7 C7 S
# G" o# P) o( T9 \$ B4 k /* Initialize BSL */% G# c8 E' c+ i% j* c6 J% }7 ^4 s
EVMC6747_init( );. W4 I Q1 _& g' }! m+ H
/* Call evmc6747_intr function */
& }+ Z4 G/ `# L aic3106_init( );/ o8 `. W5 \/ k' s7 U( S2 D0 c
while(1);+ z& D+ j$ o1 z2 \+ [$ \* i
}
% a0 H E8 d& c% t1 ^0 S& b4 Y
% T5 M: p( i/ Q5 i# {6 i: q" Q; V1 O) Y6 N# a+ P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 J. s: _4 }0 ^1 j" l7 |, ]! K/* Initialize MCASP1 */' M5 z I- j4 p- _0 C3 J$ T5 y0 I
mcasp = &MCASP_MODULE_1;3 J0 J0 m. Z1 e
mcasp->regs->GBLCTL = 0; // Reset
& t Z9 M' q- t mcasp->regs->RGBLCTL = 0; // Reset RX H" |+ E5 O2 @0 F
mcasp->regs->XGBLCTL = 0; // Reset TX
$ V- k7 ?6 `5 n* B& y: Y9 ]5 v mcasp->regs->PWRDEMU = 1; // Free-running
% @+ |6 H7 V/ r$ F5 P2 X // configure McASP0 receive registers1 r1 E; @# Z+ N+ e
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
' M$ Q }7 p; A: m8 R# A3 b mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ G% l+ m( h6 F; D6 v8 ]) Q
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- z4 o: Z( {2 z: U6 F0 b4 C mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 B0 Q4 n7 X/ Q4 m
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- K& _' E) S# _2 w$ t% x5 Y mcasp->regs->RTDM = 0x00000003; // Slots 0,1 a7 X9 a" H& g5 V
mcasp->regs->RINTCTL = 0x00000000; // Not used I0 u" v4 ~1 u! t- D# w
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256 W6 \" ]% \& {, \) S. r( I4 l
B6 O5 ?3 ~, B1 a/ w6 B9 [' { mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
& D6 @- C2 r6 k% I mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" O8 `/ o+ ?% G7 u. X mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* K7 q! \. \7 V- Q mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) `0 w# u" T. \0 J' V' z mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK/ a% f8 J5 t. {7 H% L+ [
mcasp->regs->XTDM = 0x00000003; // Slots 0,10 O8 N. l# N3 Z
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
5 @' m; B5 J) ~2 N/ P mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 Q( Y8 M$ i+ ^ z: }& L
" V; C" U' r7 f$ u0 }$ L
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN0 O! E9 E" D% u
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
5 D# `3 g8 F$ Q# G% _. T mcasp->regs->PFUNC = 0; // All MCASPs9 B+ ]) B" v$ {
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. {/ w, h/ ~) o3 C# s1 h, g9 ]+ H5 q' q6 l* B/ f
mcasp->regs->DITCTL = 0x00000000; // Not used* _$ y9 [0 w: C) ~4 y
mcasp->regs->DLBCTL = 0x00000000; // Not used
l8 T% F, W7 w7 C* L0 j mcasp->regs->AMUTE = 0x00000000; // Not used: v1 M: F5 M0 f, v8 z4 F+ U/ }
* y, [& w3 y& O% F# U/* Starting sections of the McASP*/
# x) Z. D7 r" J9 g* ], A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( Y8 H7 z* T& X$ V
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
' j( S2 l# B8 p mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & ~( b8 \8 w9 b% M
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
: e, R4 x8 o5 j9 w0 s/ S
$ ^; x0 z7 k0 |% @- n$ Z9 e( u mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% e0 I4 V! w; O* r' O# U' C while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 V r3 G& h( |7 f) G mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; I; ~, j+ \" g. n ~0 ]
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 r H7 n1 V* T/ k( K
6 |+ h8 P1 g% _/ J) _% I/ g# d
mcasp->regs->XSTAT = 0x0000ffff;
6 Z4 l9 z2 P& \. t mcasp->regs->RSTAT = 0x0000ffff;
- e6 a0 q ^" B5 B4 o2 ?% O g% i/ Q3 A0 S* G; J( o4 ^
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ T3 C2 w2 T. s0 r# ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ p' \. D( q( E/ S' v d
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; m8 H, p' L4 A3 g; q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: P# k3 K5 g4 F. r3 D: ?( G7 ?+ F! T2 L
/* Write a 0, so that no underrun occurs after releasing the state machine */( i: s) S E, a# b! k! i
mcasp->regs->XBUF5 = 0;3 T. `# H |- z. d% q# v0 c
mcasp->regs->RBUF0 = 0;: P' M$ V0 ?( t6 e
2 v: t; k5 H2 P5 S" l* i mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 j; y1 l* I( e% R1 ~0 B% _ while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 R' Z1 y+ }& Q W5 c# s4 W+ C mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 r* |6 l* Q1 w! a& _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; V P8 O q# Y# j/ G
: P* j# c v' Z0 p+ Z& _
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) \/ V+ e) Q3 e$ j) k( P5 Z- M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );# X8 `8 S6 [5 Q' _# ^% H7 H
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. S) Y {- u/ E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );; [: Z9 s y1 z8 p8 N
7 O8 G/ V% i' Z6 K, v* [ CSR = 0x0000;
% v% u; d/ c$ V4 G3 Z# S7 K INTC_INTMUX1 = 0x3d;
+ Q1 K m- A& v$ v ISTP = (unsigned int)vectors;
! v4 B n% {: @ ICR = 0xFFF0;
+ _9 Y9 V1 s2 S# l$ S( ]6 n IER |= 0x12;
* s% U, `. f% V2 n4 F CSR |= 0x01; 5 T% R% k" O4 D+ E# y% m
/ I1 s9 I) E2 N' V
% B' d3 h) a8 ?; C) I9 D7 d
( ^, Z+ N8 x& C$ f3 t& t5 X* Z: m5 P3 v还有就是两个输入输出函数:/ m) \# F+ N+ X/ C
void output_sample(Int32 out_data)
0 b: i" B8 t: m{. q& c: E$ k) _0 u, _
AIC31_data.uint = out_data; : b- h, @. ^, }/ N3 `
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ f. D8 J D5 r4 J}. [. s. C, p7 j9 G$ H5 `: j/ g
# N9 a. y% \$ ^# N
Int32 input_sample(void)5 h. b% e4 Q# d7 b; ^
{ ( A# |) j% Q+ u0 Y) B
AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 [) u9 F+ {6 P9 K5 ?% T; k return (AIC31_data.uint);
" O* o9 D8 {% }* M}
' |3 n0 u2 H) K* U5 F2 X" M" e
|
|