|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: { d# X! I a0 M5 ymain文件:- P6 f# r& e( r% K) B
interrupt void interrupt4(void) - c0 b& c0 j, h) b7 G
{
! Y5 |0 E- a; G2 N+ O3 K* I$ e Uint32 sample;! M4 T4 T9 P t1 k: y6 b
; p. E& v- B; T3 E+ H sample = input_sample(); // read L + R samples from ADC" D `# {" P/ Z% t
output_sample(sample); // write L + R samples to DAC 6 G/ d2 d4 ]1 e5 Q) I/ b3 C
return;$ C0 n; w# p: V- {
}
* f2 A, W. C7 V1 c% K6 \% G$ l2 \
% ?) a. v' _* ~& ^& J. B+ zint main( void )1 a2 m. _' { Z5 l$ n# B9 {( x3 s
{) q* [+ _2 s6 }5 X% i; _ N+ c
2 w5 N! c, x+ h9 p8 P ] /* Initialize BSL */
& F. ~# B1 }* q! E EVMC6747_init( );$ M) P3 d4 c7 Y+ {3 G" {
/* Call evmc6747_intr function */0 e8 b8 x2 q3 M( _6 o6 L, H3 P% B/ S; B
aic3106_init( );
8 z0 e0 {$ j/ S8 S( [) k, Z$ P( ?5 d+ O while(1);) Z Q4 V, _" e8 u, ~
}2 A9 O( t# p1 p) Y, T
0 {+ a# m0 Z+ W& F/ o# o
& ~; t% {/ A; l7 g, \7 y raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- ~. _. f2 O; B0 V
/* Initialize MCASP1 */
; m, H. c$ z" n) N+ K# G7 V. L mcasp = &MCASP_MODULE_1;" @* f8 R/ ~! p2 M+ g. t; K& K
mcasp->regs->GBLCTL = 0; // Reset
3 d3 {; y7 t d9 W mcasp->regs->RGBLCTL = 0; // Reset RX
' p, b/ z- a9 D; D8 |, X6 U mcasp->regs->XGBLCTL = 0; // Reset TX
9 G9 V6 I6 R$ j mcasp->regs->PWRDEMU = 1; // Free-running# S: {* n2 V; E/ Z, M7 s5 T
// configure McASP0 receive registers: j- c: i% r2 a$ I
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
8 t2 `* `1 z3 Y mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. R5 \, ~6 Q$ a* P6 n3 Q( s
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word& l2 L Y# d, a7 T0 m R& i
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 H5 e* I* l" L, z: c
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)
N1 m; {* n, P* S9 |/ t mcasp->regs->RTDM = 0x00000003; // Slots 0,1. X2 J4 H7 t4 f& q n
mcasp->regs->RINTCTL = 0x00000000; // Not used0 _3 ^" m& Z, U
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 t7 U2 t% |% i- V# i
9 ^. S$ p$ ^; h3 y/ \
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used
6 p/ w7 Y7 u2 m/ s7 ^/ l. ?9 ` mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 I! l% O/ A) b' P7 {
mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. J% w5 S7 ^8 V mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 A* i! s: S9 u4 J* ^" w! Y+ S: A7 p
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
$ p1 A* A( ~' d) F mcasp->regs->XTDM = 0x00000003; // Slots 0,1' o0 Q' X, m( U* e- T. T& ], S1 s
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit: f5 }2 U C+ H3 M
mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ \1 K8 A& l4 x0 p' j5 j
& Z1 {8 l: F9 b! d7 L. M0 r c# [
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN( M4 ?! f* X' |+ |+ D' t% n# Z
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
0 t9 n! x/ ^& |+ S, `2 ^8 n mcasp->regs->PFUNC = 0; // All MCASPs
0 ~- o9 l. m( }2 c1 P" K: h mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 A' a, L6 H% x+ U3 s# f
~8 _# E! D( M: j: z, A9 j mcasp->regs->DITCTL = 0x00000000; // Not used
" y) C9 s) V8 F! w$ H" R mcasp->regs->DLBCTL = 0x00000000; // Not used' g6 c) o) {0 M. |
mcasp->regs->AMUTE = 0x00000000; // Not used4 _& M! k2 I& N' Z
% r1 u/ L ] z/ O7 F
/* Starting sections of the McASP*/
8 n! I& y4 t6 @( c2 P; t6 a3 A) } mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& j5 J5 i" x( z. Y9 `9 ? while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
2 s; Y r2 G( y* W mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 ~* d" X0 ?& R2 r3 J& g
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
7 `# C" B! i1 S" S- c0 t/ k3 R/ a' A% L; n' b% K/ B& y
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) x! ^ U' K d
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 t% y4 n, G" V' f$ B( _ mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 {# q9 Z" ^; i9 I" n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- R7 P; `- Y% C% z% }9 ~) E" D2 O" D
mcasp->regs->XSTAT = 0x0000ffff;
1 R' R5 O5 \( ]7 U- f mcasp->regs->RSTAT = 0x0000ffff; 1 A) I: U3 `7 {% C$ y3 S8 I
# H# S: {" s% ]" A, U2 K) _
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, z) E" y0 R9 I0 a+ S9 z while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 t. s$ d6 w: N0 l; B% k mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 E' u5 p3 s/ E4 y( t6 d
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 Y1 y% g! b: V) G) P% q e3 j7 g/ a) x: E& m0 y1 e8 a
/* Write a 0, so that no underrun occurs after releasing the state machine */
D! R: v9 X$ S* l mcasp->regs->XBUF5 = 0;
* r3 Z _' d6 _ S5 W# C mcasp->regs->RBUF0 = 0;$ m' ]7 F5 Q9 c8 D
* ? j8 T" ^9 K2 E9 @( a9 W( h( u mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / g2 e2 \4 b8 A0 A+ x
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 T m: t: R/ s4 f8 }
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 s$ p: A4 G9 C* G* Q while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 I5 T- Q; l" J) L. q8 V* W C$ e+ n0 q6 N" c. z' t
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 c2 N* }& }5 k" C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) D# N Q! f: T) `- x- D8 H: W9 F
mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' T0 x0 S# I' s- q: m% F! n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 l( k$ }, W7 C( {
- c' I+ X/ v3 `( z; @: x
CSR = 0x0000;6 y1 v. |6 S+ F
INTC_INTMUX1 = 0x3d;
- p6 c2 K( p6 q# P- t3 Q ISTP = (unsigned int)vectors;9 v( V7 G3 [. C% r1 l/ f
ICR = 0xFFF0;
9 H/ `/ W. Y! P' S% Z1 r z IER |= 0x12; % o) a; K& p# a2 m) L$ o- \- z
CSR |= 0x01; 5 ^3 K! e7 Y$ Q; p, `5 L" X
: R: |/ S2 {, m- t: X' {8 g$ C
& D# \ B8 L- ?9 B
# N3 \0 s( @) O, u; Q
还有就是两个输入输出函数:
( F2 ]& x* T o$ jvoid output_sample(Int32 out_data), D3 w& l9 l- d* J3 U9 d
{' |/ p# a1 m3 P3 Z- C3 ~
AIC31_data.uint = out_data; 1 T& w2 O, |6 z/ H% p7 S
MCASP1_XBUF5_32BIT = AIC31_data.uint;( u/ K# P$ y# s o" M7 u
}
6 Q% w: o) s7 L. @1 A' e" R/ X" P# L3 }( s8 s) _& t
Int32 input_sample(void)$ J$ c- K* X. ]/ O
{
, }8 `6 U' W6 ]3 y5 J$ g AIC31_data.uint = MCASP1_RBUF0_32BIT;8 ^8 d# W$ p3 }3 i5 K/ S, _
return (AIC31_data.uint);
0 L* P# z, @( h4 x}- s/ ?$ S0 ?' z/ m: T
: K0 L5 b4 U4 _9 E. S
|
|