|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 I: ~) `; o3 `5 m% @% M
main文件:3 T. y F! H$ o8 E
interrupt void interrupt4(void) 7 X0 g2 |2 m6 U; Y- ^
{$ @) E0 X) R" }$ c
Uint32 sample;
9 P$ G4 K- _+ D ~- L3 m
8 M$ o8 }0 |5 w sample = input_sample(); // read L + R samples from ADC
0 a; k2 d% m$ S* Q! W! A. J output_sample(sample); // write L + R samples to DAC
, g* H+ y6 Y9 B& ~4 ?0 l return;
1 m8 ]# d- k2 Z2 |6 t U3 D}# i+ N9 L! ]& b1 ~3 `* E
7 D7 Y/ | }. \: e' Rint main( void )
$ T4 g3 F% o5 ?8 y9 F" s{. k! X' T5 I, j
4 t( ^/ r8 Z) i: p3 f3 B# b/ ~1 _) U /* Initialize BSL */4 V( O: A* K8 T* l& N
EVMC6747_init( );
% E9 N3 f# H* @# \: k! f1 y3 r2 b /* Call evmc6747_intr function *// I1 P% N: A. c* W' f# z) E
aic3106_init( );
0 b7 [! _: f7 U while(1);
6 |7 L; h1 p/ h! `}
0 {# S$ I+ g5 K1 r# \/ b
* m. `+ |- N b8 U3 S# \2 _) [4 Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 N8 r1 O! u K% _
/* Initialize MCASP1 */
& N! h0 O% f$ {8 \/ q' o+ u) }* x mcasp = &MCASP_MODULE_1;
, d; |7 S6 |( t# E0 ? mcasp->regs->GBLCTL = 0; // Reset
( a6 J: Q9 g x, K; k0 D9 Y9 j mcasp->regs->RGBLCTL = 0; // Reset RX# |! e: E5 O. w7 K' k. K% C
mcasp->regs->XGBLCTL = 0; // Reset TX- T+ Q2 P1 h" |" X
mcasp->regs->PWRDEMU = 1; // Free-running. P7 `& I. ~$ ~. y
// configure McASP0 receive registers$ t* c+ z7 Y" J" K
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used/ e" f% E8 Z, U( R" v! B" z- |: N
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* z7 D7 }6 S1 C mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 I5 n0 l, r/ {9 Y" @
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
s3 ?# e% n6 b+ A mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
$ A1 l R$ n0 X6 j- q) w mcasp->regs->RTDM = 0x00000003; // Slots 0,1
8 r' H& V( l8 X mcasp->regs->RINTCTL = 0x00000000; // Not used
1 |0 U1 s, Z& y; ?. q& a mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. z& k; W$ o) W W* S1 J$ k
% k* z- S0 |) e mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used$ M# p' o) U& h3 R9 k* t2 {
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( ]3 m! ? b1 L% `/ c0 d mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, {9 X7 G/ z6 B' O2 \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' [5 C* t$ r, F& i
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
, ?" ~; K1 ^- v% O0 L; }# ?6 k mcasp->regs->XTDM = 0x00000003; // Slots 0,16 Z2 R( c1 A, g1 ]9 {
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit6 M4 k# A! b& J* y! J5 h
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) B% Z, u; Y$ n1 o2 `8 P- |9 R1 C; s) B
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN. ]+ {! z8 G0 A+ h# A9 m: Z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
: O- q3 F: |6 V mcasp->regs->PFUNC = 0; // All MCASPs
! t6 o q, s" d mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* q: [ \) y0 P# z: I2 t
: a: ?. s) H! o$ j/ x
mcasp->regs->DITCTL = 0x00000000; // Not used" y4 C2 [$ ` W* t" q; s2 r/ U% v% z
mcasp->regs->DLBCTL = 0x00000000; // Not used$ h- |; P5 d, m' `2 P# ~/ p
mcasp->regs->AMUTE = 0x00000000; // Not used
- o4 M% |3 N% {2 X Z, ?: k) T9 ]. b0 a9 e/ T
/* Starting sections of the McASP*/6 @9 h/ ]0 q2 M. u2 D
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. S( M" U" ~2 a3 G while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
( N# ]7 T# H* H4 R9 b+ ^ mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 G; p8 z# v8 o$ N% ], j5 t" r while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. t# B5 C0 V: o* } w: l6 ?; y
3 E# h* h$ i9 j: J- n; X8 g mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; " B8 e1 n+ N# N+ }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
: J* e/ w* ]+ n1 B3 d: ]1 h, V mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 8 D4 y$ }- b) _' j& m0 s
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, J, p; v. \; r% N K6 K( Z, @, X% X6 }" P Z, _
mcasp->regs->XSTAT = 0x0000ffff;
' k. {( ]( F8 m# b0 W mcasp->regs->RSTAT = 0x0000ffff; : H4 O, z9 K: J9 b
; k" {' Z/ L5 H' P
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# B, b8 k6 G- l6 ^+ g) I& Q
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" x6 Z% H# n1 z& v mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , g( j, F+ S _1 D( g+ g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );1 _; d5 ^3 [, G9 o6 i) }$ q
" C" z6 `" p0 |. [* O3 s /* Write a 0, so that no underrun occurs after releasing the state machine */8 [1 G" q5 u4 }& P3 N# d z, R) E4 K$ d
mcasp->regs->XBUF5 = 0;
0 [" X9 B0 _8 M# N1 z- C6 W mcasp->regs->RBUF0 = 0;
7 r! i+ n8 t+ ]9 d
3 u3 c5 ~' \6 d4 U" B+ j0 P mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 [+ f; _5 [) S, M, b& V3 m8 T
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- s3 h) o; @6 @; h* s! n+ W- G- B
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' @, g. L, `4 l+ x7 s* w while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );1 {. B. o! F7 G' d6 @
, F4 E3 K3 Y8 ]4 Z: m7 Z! Y mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 @" U8 k. n- `0 b* N, u4 r7 u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 p5 q; m1 d& ~% X" @! o
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 O- h* P) ]+ Z8 c& q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 q* y6 o$ U+ T" D2 G6 {3 H
8 }8 O( N. ]. {0 k% |: X
CSR = 0x0000;
! N( P. D/ u; a9 j4 n2 } INTC_INTMUX1 = 0x3d;( O- I& ]2 }; |% A* g6 {2 f" y. e
ISTP = (unsigned int)vectors;0 w( m' C4 g- L6 _
ICR = 0xFFF0; * W- h5 R1 e0 m# t
IER |= 0x12;
( F4 Z v6 y# M8 L CSR |= 0x01;
2 W+ w% J; O( S* N" t6 Z* L" D+ w
7 j6 h0 j% k# H% w. H
7 N- W8 Q+ ?# \, J( c# O# q# q( o还有就是两个输入输出函数:9 L* q3 A# A. S$ z, z
void output_sample(Int32 out_data)
* G( F) n6 R4 j3 K+ Z{/ l3 ~) t+ }$ E+ G3 l
AIC31_data.uint = out_data; . c! c9 q3 P8 [1 R1 H
MCASP1_XBUF5_32BIT = AIC31_data.uint;9 @; a* Q7 Q& \4 z! z9 R
}; Z$ u8 g7 [6 a& v7 [
( C! j& q: g. U9 L' S! TInt32 input_sample(void)
# O5 U5 J) M- w, p" N{ ' P% d& ]5 A' n- S/ Y
AIC31_data.uint = MCASP1_RBUF0_32BIT;
, G2 Q$ a; G) T5 }" e2 @ return (AIC31_data.uint);3 B/ b3 d6 l% P, Y* p2 P
}
+ [) n* q' a3 G$ t
4 {" x" \" ^+ G6 ~5 ~# V |
|