|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ U7 R" t# A7 smain文件:
4 O& |' J5 Z0 E& ainterrupt void interrupt4(void) $ D7 B/ a2 `2 `1 ^, d8 s# e0 V
{
9 u0 g7 M, R# B; u- x- T x% A Uint32 sample;5 ? @- W! {) q; {
2 `" T4 u6 v) X) a. i
sample = input_sample(); // read L + R samples from ADC
# s$ ]! A' U6 a6 t) W! X# N; K3 l output_sample(sample); // write L + R samples to DAC 6 t/ A2 @* N/ a% w) P; T
return;; T* R4 F5 k* o
}
) Q# v% Z U: g x
6 t" n& \/ E* P- T* D0 }int main( void )4 X [* |& E( A$ D' {) _3 ?/ d1 k
{7 k- j. ~( I/ k
" b i! D4 H, K) {, t v. k
/* Initialize BSL */. |8 y8 _6 p7 U' }/ X; L8 M
EVMC6747_init( ); N( C6 Z: F# y) E7 M& I
/* Call evmc6747_intr function */- ~% B f+ o' s4 q, U
aic3106_init( );- P$ P E, _/ G( d! A
while(1);
5 N; o% B" r- m& s2 r}* _7 x. ?* Y) p8 C, s) l
M/ a! a- w: G+ b2 M0 w. Z' B
- \( E6 I3 U; b) O p9 Y Y" C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, c4 @# q& S2 s( Z: r' B' U5 V
/* Initialize MCASP1 *// o% F# n- c, i* S4 {5 n- W6 k! X+ r
mcasp = &MCASP_MODULE_1;
; Q+ @: o9 A. H; P/ b( t L mcasp->regs->GBLCTL = 0; // Reset3 g0 v" c& H' w9 r
mcasp->regs->RGBLCTL = 0; // Reset RX1 W# F( w) V) c9 N; B' V% ?7 N
mcasp->regs->XGBLCTL = 0; // Reset TX
3 T3 M5 V2 h% _1 e2 O+ |( y mcasp->regs->PWRDEMU = 1; // Free-running
! q5 y+ R* b, {! f& ^8 Q6 d9 ?1 h/ Q // configure McASP0 receive registers1 U: `1 P9 A& r5 B/ J
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 H9 I+ M8 ]; u8 u( v: M4 a mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _: s f/ { V" D6 q5 d u
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word! V) Q2 X U' B
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 n$ E/ V& r: b. X' m. t( [ mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)( f9 W/ X1 u7 \( T) }
mcasp->regs->RTDM = 0x00000003; // Slots 0,11 w7 U0 H, g4 r. T
mcasp->regs->RINTCTL = 0x00000000; // Not used4 K( ^' C+ y8 _3 k
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 g* R; t# X' z, r+ G
( E; R* J3 S9 g& [( i' A5 P& x mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used: K: G& r+ G: l' O+ _' [
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' s [2 [8 r% G8 ~- c0 {! K4 h( H7 i& p mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! G/ ^5 d8 P' ^( ^9 ^; F! o+ n2 Q* \
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 L7 L" B" P/ @6 W) m9 x4 L- c
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK: g* j C4 f+ }0 G7 q$ F
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
. b1 k5 q8 a' J1 C6 v7 | mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit. f9 c9 O% ~0 D1 M* U% D
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' v T, r0 l. f6 G% j( p1 c4 W
) y3 B% g: L$ W# C. {% J mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN& B6 P/ ?, j9 A
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT& P) N H7 {( a1 \8 Y% H
mcasp->regs->PFUNC = 0; // All MCASPs7 p6 V H7 H3 l Z" ^4 r" M$ k
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
h7 s+ M s6 b) Y) o, F1 s: H2 _. }4 v8 P& J. u2 ?" J
mcasp->regs->DITCTL = 0x00000000; // Not used
; I. Z! J3 w7 g. P/ w6 \* g mcasp->regs->DLBCTL = 0x00000000; // Not used. q" X- d1 Z( G
mcasp->regs->AMUTE = 0x00000000; // Not used4 [4 b5 A6 f1 N/ `$ g" h- D
, `0 w8 `+ z4 \3 g4 _! a
/* Starting sections of the McASP*/3 t9 v: u7 @+ y9 Y9 w
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 G7 w. A. F' p. `4 M; ]: t ?! l
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 4 s( f0 c2 \) X! Z0 j
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. M; r' r( p2 P* g U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ b6 l0 r* D& f2 K- W2 D' s3 d5 m) `. W4 |) ~2 N
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 S# [! V% C. b$ y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 \) H6 Y4 H4 z# ]/ L mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, b5 B8 R9 o3 `7 O( c while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
# j0 r' J7 i/ V. ]- Y* _9 ^" E% |/ P$ e
mcasp->regs->XSTAT = 0x0000ffff; % P- ]9 ^/ }. L% }6 ^6 h% F7 V2 F
mcasp->regs->RSTAT = 0x0000ffff;
, e& Q( ?" l5 e9 T* k! c7 g1 ?8 {6 s8 \3 Z/ N: _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 [5 N5 f+ e1 e4 x# H# y+ c while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- C* N8 E( t& p* `8 }. X mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 o! N' N/ G& ^3 ^2 g) H# j/ K) ~
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% P5 ]8 \# z$ y1 M
* d+ w: X+ h' M0 u* v /* Write a 0, so that no underrun occurs after releasing the state machine */( t6 B% c! e# r. i+ C. S
mcasp->regs->XBUF5 = 0;7 K0 O G& p% n1 F- A, H+ \
mcasp->regs->RBUF0 = 0;% {4 f! F9 q$ O; k, Q+ ~
$ M" \+ K. d0 c6 H
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 o; e* D& b) {8 R) n
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ \. W- X; O w' _( G
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ I4 Z) r! r* b% e2 o: N+ W) I while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 A( F ^$ t8 Z' ?) C
$ o# B0 w% n4 _6 D
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ \, w7 C m3 Z3 j1 ?! u4 r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ x+ l* q+ T- ^7 m! z. f5 v3 @
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * R) |6 t) w: p7 m W5 w+ f% I
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 F- G i8 E; X
1 t' b P2 D) m1 M0 P' R9 n CSR = 0x0000;1 b4 L$ t1 u- K& c6 Q+ c
INTC_INTMUX1 = 0x3d;
# f% A* R! a H3 B ISTP = (unsigned int)vectors;
; }. U: b& H! O+ V7 o: \/ E8 I ICR = 0xFFF0;
7 h! K; e! }$ O7 J7 r IER |= 0x12;
% P9 r+ h) _5 R: j CSR |= 0x01; - r# P# k X: z! E: H
- i4 |7 J$ P6 b5 T8 d
' ^- t+ }8 s) E9 M' I/ U1 D
$ d# f6 ?1 x! h( @% w4 O, b+ G8 J# Z
还有就是两个输入输出函数:' ~7 a; F( B+ [1 y/ W. p$ z
void output_sample(Int32 out_data)% C4 A* F) E7 l- Z5 P) C3 y ^
{6 `. u+ K8 {- _
AIC31_data.uint = out_data;
6 F& g- G' I) Z3 b9 G MCASP1_XBUF5_32BIT = AIC31_data.uint;
A. ]; _. |* o+ T}* h0 c0 \, w& z* d
; [1 c+ m3 Z4 O" I: X0 c
Int32 input_sample(void)
! n; g/ I; q7 m) a{ ) s2 F8 d6 ^/ @1 S( Z, s
AIC31_data.uint = MCASP1_RBUF0_32BIT;
( z& t0 F: c/ o! [* N% d# d2 y return (AIC31_data.uint);
$ E. i6 F6 _7 m# f6 k" n4 S}! ~" k# D6 Z! @) d; C
! d% i+ b" _- a. d+ A- e; O' B5 N5 T
|
|