|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 C- U% M0 r! z! S; U! M% C
main文件:5 H; h# q# I# s5 Y
interrupt void interrupt4(void)
5 g' ]' v3 G# j m" p/ E. {{4 Q1 g y) D9 Z1 _
Uint32 sample;
1 J4 T2 a+ T0 V, S/ n: L3 A) j" [7 b
sample = input_sample(); // read L + R samples from ADC
+ [+ P1 k! l7 y, g output_sample(sample); // write L + R samples to DAC 9 g- Q: b" b/ U* C$ f0 i! T" _
return;
9 `0 ~' i% F7 u$ R}
. _9 x I& ~! p) W& y! V* ~9 I* g2 O. j
int main( void )4 H( w( f8 \7 v- F/ f$ y Q! D
{8 v% J3 q' }/ m+ \" E8 T
( ?1 o9 x1 p; s3 D/ V a4 A6 g% Z
/* Initialize BSL */
% h- ? @ i: Q" l EVMC6747_init( );
+ I9 ~/ v* C" V. H3 J% U /* Call evmc6747_intr function */
' Y+ S: U) x( }2 a% f D: H2 A2 J& ^ aic3106_init( );
( k5 r- Z) i. \ while(1);
% T: B2 I1 Q" i/ b( ^6 Z. p( W}: o C6 o! ~0 X. p! R
3 R: ]* j2 p) o( L9 @8 }0 E
( V: |) z F, G8 D. }# Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# A9 I8 ^5 s8 {; ^7 J- v; K
/* Initialize MCASP1 */) J2 i: Z* |. U9 d
mcasp = &MCASP_MODULE_1;
* ~9 O* o; K6 n V9 O5 y# ~) [4 ^ mcasp->regs->GBLCTL = 0; // Reset4 b' C5 K1 B4 w& o: M* X9 {' j# Q. `
mcasp->regs->RGBLCTL = 0; // Reset RX
& J- }9 y8 q! Y, } mcasp->regs->XGBLCTL = 0; // Reset TX
; j0 J2 g" Z& ?- s mcasp->regs->PWRDEMU = 1; // Free-running
( u5 M; Z8 F9 t8 \+ X( {0 Y // configure McASP0 receive registers& w, R$ }: l5 n& R8 B. S
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used9 `9 N' H6 t' c0 ?- e# u$ Y
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; I- h) K7 F$ o7 m- x mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 J: ^8 E$ J3 H- o3 A
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 }; v" c/ m! q8 N# G mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
9 h& y; B) l. Z8 N: [. h2 J mcasp->regs->RTDM = 0x00000003; // Slots 0,18 } u f- u/ m# J7 M( _; T5 C" Y; r
mcasp->regs->RINTCTL = 0x00000000; // Not used9 e& V/ `; Q7 D, `, _7 y; J1 l, g4 l
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 S# y l. W2 g) p: @2 B
. ^8 K1 j' i3 P' q7 \ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used+ ^, j1 n4 G2 X1 a5 d" \
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' a+ |" a6 y- P* [" {! ~6 a8 d- l
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% \9 P* j+ e' Q5 \* R2 G mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# _: O8 l$ M U2 {" D" h mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK2 A/ R3 y. [! u$ P3 o
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
" K! b- n* S# Z* {9 R8 o mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
, {& O" q- p3 t) M8 f mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 b: T: d* r) j1 R) j t0 r) O: h( v& i' g5 d6 o) P
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN* T3 h7 c0 G1 |
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT) a% }- d' ~1 ~, i: M
mcasp->regs->PFUNC = 0; // All MCASPs' e# o! q- J# F$ N( S+ p
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; N; l7 F$ u2 g; e! m
/ v4 N) K* j# d2 c mcasp->regs->DITCTL = 0x00000000; // Not used% H' F. S8 y. y# h7 X7 z- I3 E
mcasp->regs->DLBCTL = 0x00000000; // Not used2 ?: c f" ]1 S8 ~/ }6 Y+ z6 A
mcasp->regs->AMUTE = 0x00000000; // Not used8 {$ @4 l6 x9 [* ^: x2 N- a
" s' B) Y: l- p& d4 G% S" k( C/* Starting sections of the McASP*/
; Z. Q* c) f8 E- k9 A mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- P# H0 f" l2 l( w9 ?( q while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
# x7 G' X0 s* P; Q: Q) d mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 Q3 B, b2 Z0 j* H" z* u& ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
Q7 o$ O( g2 A. f/ m
. p, `# T# q" ?0 @+ L mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 ~, ^9 |7 R2 s' |' |, s( k9 O& ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& }( h" u- F8 h; L% I: Y mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % c! Z3 \; M+ k
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 t$ O1 o, b. }1 W3 e. J* q
; r! w* o$ k/ ^5 s3 t' i mcasp->regs->XSTAT = 0x0000ffff; 8 G$ b" ~# x4 w( b( U3 ]
mcasp->regs->RSTAT = 0x0000ffff; & `) M7 ^2 \+ P7 o
& }# ^1 b _+ s8 |1 d
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ m, }0 r% S& v
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 C+ A: _; ]9 I: N6 e- s7 r$ a
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; o: p% K# N, o9 d5 y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 _" h# E* K- E+ u1 h4 R, Q3 Q3 X4 b* m
/* Write a 0, so that no underrun occurs after releasing the state machine */
* G5 `5 x4 o0 R5 l! o) z! S6 ^ mcasp->regs->XBUF5 = 0;; C- W& k4 z8 x- n$ Q! F3 U
mcasp->regs->RBUF0 = 0;
& o1 b" D5 L$ t3 f; B% d
5 A* d9 O7 j r$ e% F+ k# K mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" o% }4 E5 v9 |3 q/ z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 l O/ s) H& |/ `9 V mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
P% \ R. N3 B* v1 ~, d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' I @* N# K3 d6 e$ N6 n6 q2 _" r" M$ }& Q( d& f- E
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; U6 G8 u, d2 @' ?6 X
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! ~+ }* f. U: c* z9 S& C mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 E H5 x4 l5 p8 W. ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" h& F% e) Q0 X/ G4 W5 a) Y9 N0 p% L5 f0 b; Y
CSR = 0x0000;
- K. s9 Y: b4 A! C7 c" e INTC_INTMUX1 = 0x3d;
3 L' r2 A- B4 |7 D# V( U ISTP = (unsigned int)vectors;( j6 y4 w, t$ p% ?% R- e( O. ^
ICR = 0xFFF0;
! s7 Q& w3 o2 I8 p1 i( H5 t$ J' ]& I IER |= 0x12;
# F/ a1 C. X% a* O( H CSR |= 0x01;
# }& R& A$ i0 A8 L+ ]6 |- M. ]. |5 h% W
" B5 g: {4 z ^& d9 \) Y# H5 A6 `8 `
3 }- [+ i. D& G% S c7 \( p( S
5 Q; ]6 a% S c% w还有就是两个输入输出函数:
) ]; h* G- @& b5 n7 }6 zvoid output_sample(Int32 out_data)
, u+ k3 t3 |5 _ ~$ O, C; L5 F{
; M- t! c* l+ p+ m2 | AIC31_data.uint = out_data; % L0 H4 j8 A% V7 x' z
MCASP1_XBUF5_32BIT = AIC31_data.uint;' x3 R9 G% m; x" \0 K
}
+ [- t) ~( p( ^+ q0 U' k; J7 N# Y5 f, f! k! n- F/ M$ ]
Int32 input_sample(void)
9 K- V% t: K1 X{
) | H3 Q4 d C0 T2 K$ A AIC31_data.uint = MCASP1_RBUF0_32BIT; E; j+ G- ^3 I& d1 e; I
return (AIC31_data.uint);5 {/ u7 }' ]. t/ L& a' U
}/ ^" ^5 q9 C# C1 E5 j% c
; P5 L( _, p9 R4 p |
|