|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 F _: ?0 ]; \, o. Q0 t+ `
main文件:& F u! n8 p8 |& F" h
interrupt void interrupt4(void) 1 q+ s% L' Y) q" g
{
7 x! i' }' V+ _3 g Uint32 sample;
( j' p8 { ?# k6 `4 Z5 E+ L+ @$ e' b; S! m
sample = input_sample(); // read L + R samples from ADC! u7 c Y3 d/ u8 |+ J+ o0 F
output_sample(sample); // write L + R samples to DAC
# g. r$ I; G' ?8 ?7 ? return;
% P( l1 A, y# S6 Y}1 \7 y! ~5 |# p5 V
, {, C* }( F! k' {& E, N4 A& q8 O
int main( void )8 }6 s/ p" Y6 B; y$ S6 P O* `2 a3 k
{
" {# P- o6 t+ N3 {- ^: V: e0 q
/* Initialize BSL */
8 o$ S& N* r) I2 x* W7 h EVMC6747_init( );
?5 B0 m: I+ w# d& o8 m/ @ /* Call evmc6747_intr function */' K. Y/ q- r2 W$ @3 J+ f+ Z/ |
aic3106_init( );" w; l4 k& T+ L- ~0 v. r. ^
while(1);
}9 y9 e" n" Q1 `" v9 D}, E* M s. S5 z- `1 r$ `' ^8 \
( J4 I; `2 O( {6 W; M/ Y" G
* v( K5 m9 m* Z( M; u" J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( V# M" N) u: m/ o D
/* Initialize MCASP1 */
k7 X) X6 B, t mcasp = &MCASP_MODULE_1;
/ F& x7 G$ J2 m7 ? mcasp->regs->GBLCTL = 0; // Reset
* Y0 m/ K4 `! u3 s1 Y% Q" b mcasp->regs->RGBLCTL = 0; // Reset RX
% a- t* B9 E# N: v6 Z% u+ ]9 w mcasp->regs->XGBLCTL = 0; // Reset TX; D! Q( X: D7 z/ X6 b* @4 W+ |
mcasp->regs->PWRDEMU = 1; // Free-running( i2 X1 m1 J+ v
// configure McASP0 receive registers9 C! h# u- {& ]" c) i+ D5 Q! _( n
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used: J- Y2 d& y0 _
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ T( G) X1 A& n+ Z6 l mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word: g+ a5 g C; d+ _! `2 r# P; [- R0 `) ?
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side), }1 v/ q+ s" `9 y
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
- _- c8 f0 c0 `# K; T! D0 Y( { mcasp->regs->RTDM = 0x00000003; // Slots 0,1; P8 e( h1 q+ }$ \
mcasp->regs->RINTCTL = 0x00000000; // Not used" }. n4 }, S/ l7 q
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# Y9 q C6 G. Y$ g5 Z0 r$ {
- e8 k) t- X. b7 E8 l: U- h" h& A mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
X Q5 u# U+ r- z& N mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* w* r, u- a8 i) O' [5 j/ E, }# T9 F
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# O2 a$ N( g, f, v
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! V3 d3 ] L& p5 r+ k
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK! V; S, p; V' N: {7 Y8 k
mcasp->regs->XTDM = 0x00000003; // Slots 0,1( D# [5 H. K+ R- Q8 o9 U
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
$ _& x8 d! s8 w) @* \" Z+ i mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 d1 M6 P; L# p, w/ ?' x/ a
# Q7 e1 t7 }9 L) u$ S& z3 G
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( {/ J; n3 P* C' |* V: d* o7 a
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
/ [! m- H U2 e+ i) a mcasp->regs->PFUNC = 0; // All MCASPs. z/ S9 l3 b7 F! g) r
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 z& R; P3 L1 \- w5 f" U1 i8 `* c7 g, Q$ i
mcasp->regs->DITCTL = 0x00000000; // Not used
7 y4 T* H" @, {" f4 d8 \& @4 v( ~# y& I B mcasp->regs->DLBCTL = 0x00000000; // Not used
+ N3 X8 U8 j+ K7 l2 Y4 { mcasp->regs->AMUTE = 0x00000000; // Not used6 ~4 V6 N1 {: X. l* ?
: j8 ^' }# K }; G- s | f+ U1 [
/* Starting sections of the McASP*/# ?9 ?( `3 } _& a1 J% L7 @
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- }& t& M, [" X- a) M while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
. M. [+ |! E+ e6 ^; s mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & N# Z5 s8 G8 k. q' g: @& e O' O2 N
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 o! s0 X* j4 K% x3 Q& @' M
8 v$ M# s( _9 G! c; `4 ^ mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ e* O& ^5 f. q. I* _0 w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ L: y/ P$ T6 O8 c- E
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 V$ M4 F9 b3 B2 l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON ); z5 l9 L- U; l5 q, I- j3 {
- G; ]. l; n& S mcasp->regs->XSTAT = 0x0000ffff;
! e3 k; i4 @: T9 L mcasp->regs->RSTAT = 0x0000ffff; 4 k1 D+ s+ v8 r1 v7 [; _3 J
8 O, g% A. w6 e G& Y3 b& {
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 e J9 }# f( [, q4 R: @( a$ a while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 c3 F6 T9 \8 R. L$ _; Z6 F& o mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 x$ a w" X6 n/ R& ]8 @# D while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 T& G2 m: a) K) I5 I+ Q) Y
9 x( s% c/ {9 I2 Y; Q9 S& X7 _' d /* Write a 0, so that no underrun occurs after releasing the state machine */( L. {9 G+ e8 @1 ^! l& @: N
mcasp->regs->XBUF5 = 0;8 o: |& H9 _9 L! b) W0 t
mcasp->regs->RBUF0 = 0;- b9 w7 e. D$ v$ E; {% P3 \
) Z* y: e8 T& L5 X7 p mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + @1 E. ]/ e* n( c. u; k; [
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; O' h2 x, q/ h: i
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. c! s- R' C! g7 L/ F$ ^ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- P2 ?* N8 F/ ^& \3 ~: C3 R7 A8 t
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & d& }5 u7 D+ d* q4 ^$ {# z
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 |: l# \+ d# X# O, i! J5 z/ m) A& D mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; Y, x! v: r6 M6 n5 u* e
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( {5 Q* e9 K% g9 B+ B5 B- W2 n, t; p& x# X* l
CSR = 0x0000;5 d) U! s; _' ]) Z% E8 p
INTC_INTMUX1 = 0x3d;+ ^$ g+ h3 S: T% K( z* p% _
ISTP = (unsigned int)vectors;, Q' }! y/ S1 e' | \
ICR = 0xFFF0; # [0 C& f6 [$ z8 t8 O
IER |= 0x12;
' `" M4 U8 r" v3 t! o m D" o- o CSR |= 0x01; # ?& R4 _- r2 h v
% V t) z M- g/ n v, w
1 r! q4 [8 ~5 j3 V
5 t# w4 B6 k8 ^! ^% F( O$ ~/ C: a还有就是两个输入输出函数:' i: U6 M( N7 q, i) f* d
void output_sample(Int32 out_data)
1 m. z$ l5 {7 I- o4 J{" I/ d- y' x" {
AIC31_data.uint = out_data; ) E$ f3 A0 F: k. M0 Y5 R
MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ w5 M5 i; F/ d}) [8 a9 ~6 e o9 d2 Y, w
6 h9 k, q, M: I$ Z; PInt32 input_sample(void)$ o9 ^+ L8 ^ b1 M
{
+ n: e/ P2 V f- D; n7 O% g AIC31_data.uint = MCASP1_RBUF0_32BIT;
. V1 X. q& _5 s9 O( U: \ return (AIC31_data.uint);; o3 m( c! V t* b3 D9 D' J- E/ u6 ?
}
1 @4 a) _0 S% K# P+ X% i
0 [2 c+ s$ }+ x: N9 |1 @; O' N8 } |
|