|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 k6 X9 g9 S3 S# Emain文件:
X0 H& k$ y' l% z, i( Winterrupt void interrupt4(void)
* i! v% F) }6 k- @/ O q: z{
& x4 W4 `; C+ p3 x Uint32 sample;
6 P/ F9 I+ l( t% P: K0 E1 o9 I' R+ M* R8 y6 w
sample = input_sample(); // read L + R samples from ADC0 @; ^, M% }) t& d' _
output_sample(sample); // write L + R samples to DAC ; @& I& @' s3 {& B; w! B
return;* g9 @& i! s9 @5 N3 e
}
; t$ Q) d3 s9 G
' B& A& q" I' X, O4 X+ iint main( void )
) F/ s, l4 }8 s6 D u' i) _{# Q5 Q, V9 e! R) \) E/ Z# U
/ ]# t' A% S3 @5 B /* Initialize BSL */* ?0 Q k% y9 [, K2 x
EVMC6747_init( );
. ^9 M$ _( J. Y /* Call evmc6747_intr function */
& h$ d& r! ~2 ]8 V8 f. Y. G! _ aic3106_init( );! \4 I, \" m& A
while(1);
4 h. {+ r9 X6 K}* ^+ Z' I/ S; o) M8 {. P
. E6 J0 d u* V) O
3 z: [+ ?# C) R- k& I( Q+ A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& m$ @+ E H% J( o8 d' ^/* Initialize MCASP1 */
' p/ [2 O: L. _2 v/ m& t mcasp = &MCASP_MODULE_1;
% K8 B8 Y" B {, j) {& P mcasp->regs->GBLCTL = 0; // Reset
, E& P$ y5 r, V! N5 F& V mcasp->regs->RGBLCTL = 0; // Reset RX
- e8 B& n$ i& y! b, m mcasp->regs->XGBLCTL = 0; // Reset TX2 d9 \: A# u' U: [3 g% z. [
mcasp->regs->PWRDEMU = 1; // Free-running7 r4 w, E$ j: O' o2 m
// configure McASP0 receive registers; o3 A. g$ s7 g! v X- D
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used# M, U; O+ u" T# D' q
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 `3 ]. b2 S* ~1 U9 p# ^# r f* Y' i mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' r4 c( U9 @4 m( s" _1 S# L mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 c) ~- y7 f, A% r! G! f mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)4 P( a. C$ e% s( P- w
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
1 T& J4 m: g0 P; @; ?9 R mcasp->regs->RINTCTL = 0x00000000; // Not used8 I* H; ?( Z# z: z: O
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% B+ A% u1 b8 j" n) X
! j- A3 a1 K1 v mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used; O e4 N4 \# \2 V7 _! D1 u
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% p' o- u, C( z* E v8 P. R# n! w' L3 l, \
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' m5 j& ~* y3 C& M$ p4 o mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 ?3 h4 a! l0 y% j1 Q; c* s& S
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
5 n9 k" F; d% z. q. u8 D mcasp->regs->XTDM = 0x00000003; // Slots 0,1 f8 y; e/ F0 X5 a, L
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit O& _* \4 W8 f+ r }/ m! J
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c$ z3 y1 ]. ~6 L P, r# B. z8 s
8 W( q; j! l8 }) h, j8 I5 I; I- `' K- P mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN
1 V$ i' C. `3 V3 m mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT- R" P9 g6 K$ g5 O9 V
mcasp->regs->PFUNC = 0; // All MCASPs; `1 h i2 W1 g2 y
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 }" _& p- D9 `) j7 S
6 G( ?1 v: z* J$ e( F% L, C, J# L mcasp->regs->DITCTL = 0x00000000; // Not used8 d0 C) S6 i! {% J
mcasp->regs->DLBCTL = 0x00000000; // Not used! z }9 \7 V- Y {3 J
mcasp->regs->AMUTE = 0x00000000; // Not used# C+ s1 v9 K$ X' Q) d( a, q
' z: B1 V7 Q) q: w" }7 ?( j2 }
/* Starting sections of the McASP*/
; Y5 n$ S4 o# F. a$ e! ` mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 F& F% E9 d0 o$ b- f. b: y while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON ); 1 j0 n& E5 u: J( V4 w6 r
mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
b: W& m6 C4 g; S5 U while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" \! ^% n }8 a' n
! z% \9 k2 x" c! v
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* s5 z" _9 A- X. F while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 x- r; Z' d( N; o* V# S
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* C8 W4 S; ?5 O' A+ O8 O0 O while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ l; P9 b/ E! E2 Q9 l; f2 Z
, C6 _, _4 g1 L; }
mcasp->regs->XSTAT = 0x0000ffff;
2 \( u6 _4 g, N$ ?$ I2 y/ X, R" E mcasp->regs->RSTAT = 0x0000ffff;
4 C# Q0 t3 T1 E2 Z' `2 a% N, L1 S5 y' i' q
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ L# x4 ]' {6 u' M
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( H. d, y: P+ {) E
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 P0 x$ M2 q- l
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 C6 ]" S0 m1 ]- q7 o5 E
' g- u9 r9 ^! x /* Write a 0, so that no underrun occurs after releasing the state machine */
$ k: n- E* x1 L; D mcasp->regs->XBUF5 = 0;
3 c1 w; @ Y& d' X mcasp->regs->RBUF0 = 0;: a5 D' n( A# v2 i! c/ T
' }& r+ d- n% f1 l. u, s: k) f# M mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 s. t% y4 A6 t c4 j2 w$ U2 m
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W' b1 H+ |7 y mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! ?6 ]( T8 A) \6 s6 c, _
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) j( v# ~+ @8 X
9 L' m8 A+ G% ?
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 c# b8 V& c! q( q7 i' a; V3 `
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 u0 w+ n# R/ x/ s mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ K/ \# ` A. b while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- [9 @( n& p1 ?, [* E& f3 v$ n# R2 d" x2 a7 A
CSR = 0x0000;/ p& ^. |8 c% F2 d
INTC_INTMUX1 = 0x3d;
$ i- }8 ]& u* K( Y# u/ w ISTP = (unsigned int)vectors;. s0 i O& z( G! \) o2 N7 y
ICR = 0xFFF0;
8 ~7 u4 R. K$ u" P0 R7 g! { IER |= 0x12;
: e$ {% W, R! }# y CSR |= 0x01; 8 w0 g6 i* _& B6 I. f9 ^
: i0 ^- l* f3 y w) f
. u8 M" F' n6 ^, ]! Q- K
# z! \) I; w1 t还有就是两个输入输出函数:
, q% t4 D+ x+ e0 J3 K5 t$ Rvoid output_sample(Int32 out_data)
. z$ k+ C/ R9 ]{& d0 X* j- e$ C! [" w6 r# R" I2 |
AIC31_data.uint = out_data; D! N. f/ }4 i6 w
MCASP1_XBUF5_32BIT = AIC31_data.uint;& F1 ]* Q/ r- I/ j8 D" P) v2 a
}2 U8 v' c! [9 `
: j3 |5 E) h$ b. {! @+ O/ ]- y/ p
Int32 input_sample(void)
) g5 [( i. C, G% \{
% k) c4 z1 O: x; }1 X AIC31_data.uint = MCASP1_RBUF0_32BIT;
& ?& u! u# N& ?8 [ Q* w5 d$ w return (AIC31_data.uint);3 d! ^6 _' {$ \- j! v/ [
}
( E$ C' ^6 L$ U1 {. ^9 ~; u# Y- A( H6 P7 o
|
|