|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:5 a2 g- x( M) N, j
main文件:
' k6 X0 r0 v7 U9 e2 W+ finterrupt void interrupt4(void)
% m( [8 v8 L) h& o7 J{! q: b( a, T) p [2 P
Uint32 sample;* ~' @# c P% {- |7 N3 F
7 `' v* ]( o5 @7 m0 j Q. h6 K2 P# ~ sample = input_sample(); // read L + R samples from ADC
) c9 ?4 s% Z6 Y% ?: q# J/ A- r. S output_sample(sample); // write L + R samples to DAC " ^3 I- S" h2 q9 P
return;
( E2 M2 x" w1 i}
o/ ?2 N$ r# v! f8 k
; b2 V5 j1 n. S: _" Jint main( void ). r2 D0 k8 i/ e5 J
{
. r8 ~. A6 k9 o7 Q& b
0 F% ^" r1 N! \ /* Initialize BSL */
/ `; c/ N5 U, C* \; U EVMC6747_init( );
0 T9 Q8 _& N$ d: L" I$ r9 \ /* Call evmc6747_intr function */
0 ]4 @* b8 b+ x aic3106_init( );6 j6 s) v. u3 N* i k6 Z: ?
while(1);
9 V; E0 g) J; q8 `% v* v$ K1 T}
) ]" j) ^0 ^6 ?- c C' {6 F* r% ^: t* }# S/ v/ Y, P! H
" | A! i8 H( s9 A& I5 \aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ \/ v( K% A1 K" s$ W5 ~5 v
/* Initialize MCASP1 */' l1 ~! F4 x; M, b; x) J9 E
mcasp = &MCASP_MODULE_1;# G+ L; n; @8 j/ O |# C
mcasp->regs->GBLCTL = 0; // Reset
3 s* u* @ Q/ |1 n9 G+ J9 W mcasp->regs->RGBLCTL = 0; // Reset RX
; [' u! Y% y4 c mcasp->regs->XGBLCTL = 0; // Reset TX
. }# c$ a6 n) H: B m mcasp->regs->PWRDEMU = 1; // Free-running4 i3 Q7 n e6 [* l
// configure McASP0 receive registers" g8 _0 p1 O- x/ }9 R' S
mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used$ Q/ T& D" d6 N3 B/ o& W" S
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' X' u6 T9 D( a7 \! p3 x2 _
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word% Y4 {' Q9 @! p0 x! r# W
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- S* }5 L6 r4 c6 \8 ? K) h; | mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)+ a. Z9 \& e9 Q1 s" h+ K
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
5 U+ I: y0 s: R) D1 m# @! S/ a mcasp->regs->RINTCTL = 0x00000000; // Not used, P, p( H* m0 o7 o
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% _+ f0 x F6 C+ {9 {
* l6 d! l! M6 V! `: l y/ X! s
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used3 N3 `$ v) p9 a
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. B6 E- R+ B1 A5 |4 @) u mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 E- N+ R" w# ] mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' @6 E/ G7 V% i( |( e1 |
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK* t! x& o7 F7 K" }
mcasp->regs->XTDM = 0x00000003; // Slots 0,1
: e& @* G& _* S* r& H' w mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
3 j5 T: M* H9 i( j4 Z. g mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 f9 w7 v) d9 r) \* b! ]$ O! {/ W, b% m! c, r. B1 g. \2 {0 ?
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN9 T/ ^+ H: d% r
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT' j2 U- _( H( R8 m: J0 H
mcasp->regs->PFUNC = 0; // All MCASPs; R& W4 y& C8 \5 l P9 H
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' k" ^$ [9 m; W" H: \9 }0 x$ T: B
: Z6 h" s% f) y, k mcasp->regs->DITCTL = 0x00000000; // Not used
0 i. C* g0 F* i2 g mcasp->regs->DLBCTL = 0x00000000; // Not used
- _7 r/ X, a" \: y' G mcasp->regs->AMUTE = 0x00000000; // Not used
6 m6 |3 y! g; _0 ? z, j" H$ u5 `) K# {5 }% C5 m. \* _. d( l8 M, i
/* Starting sections of the McASP*/
5 h+ D7 `- C, Y8 A# P mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
5 K/ P/ U9 D/ ^' H; u4 b2 o while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
0 ?1 u+ @. L6 ]: h3 T mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # G0 r- C7 x4 d- p
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 r. D2 e' O( c& b3 R& X1 V# p' F) c3 L
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 L2 Z% @! H/ H2 ?6 M/ w while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 q) H! l+ ]% G2 t( O mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 g2 Q# ?# z2 ^" {. a# ? while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ _/ k* j& e3 e, N, o5 q8 X. \! E2 w. u2 }2 Q6 S+ i
mcasp->regs->XSTAT = 0x0000ffff; 4 |2 g+ M) W8 |/ l: `. {
mcasp->regs->RSTAT = 0x0000ffff; ! f6 R- ?$ b# ?
+ N! Z* H$ x. ?& t2 Y
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 B; u! N$ x* {
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% U" |) m& L/ v- H4 g# L, b, _ mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , I2 t1 l; s6 Q
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; Z" p/ q5 w9 r; C$ S9 H- N: q4 [3 }! M
/* Write a 0, so that no underrun occurs after releasing the state machine */
+ L8 Y0 R0 {+ k7 W. c5 K! x mcasp->regs->XBUF5 = 0;: h; C+ g9 v9 S1 q7 |1 u
mcasp->regs->RBUF0 = 0;
7 e6 P: p# [+ k/ A/ k r0 ?7 E8 j* J3 p- c3 N
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, u% }% S3 y, a: T( k; P3 E B e* A$ H while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, m# s& w6 E: h( G3 F6 | mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 D& N: k+ I- T0 n# h/ d while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) e& s1 m" Z% G& f6 j
! @, J* O9 T7 P
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % v1 C5 r; H1 H8 M9 J u
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 V9 o8 z' V" t0 M1 e U8 a, ] L mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : f9 d7 v. ~- I* s$ S: `
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! b! z0 ]) G+ t- T }+ T4 t
; r/ ?, c: T* Z8 ]
CSR = 0x0000;$ y) h! M U* B/ g. I5 h
INTC_INTMUX1 = 0x3d;' N3 k1 q$ T% Y7 J$ ]) r
ISTP = (unsigned int)vectors;. i3 Y; v, J- k: Y$ `6 Y* w+ G
ICR = 0xFFF0; 2 H* P$ |3 \6 A; N" t
IER |= 0x12;
6 {% f, q1 q6 C8 ?8 r! Q CSR |= 0x01; 9 k" ^7 E, f: N: x0 w; Y. j% U- n B
3 W8 o2 z) C' X' O. m; `$ e: \' D1 @: l2 [# c) i5 ^+ S
+ E' R3 \9 R& W' i
还有就是两个输入输出函数:
" L `8 O' I) X, R) j) O5 X3 ovoid output_sample(Int32 out_data)1 \+ ~. [6 w# C$ C9 y) t0 x
{. s7 I( x5 u0 J* |3 G, K/ F
AIC31_data.uint = out_data; $ o. {: P7 m: o+ d) q
MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 g' G7 X2 _( T}( a# } T8 e$ @0 _
! j% u' N% ?% R L% N! X8 T( I$ J/ z
Int32 input_sample(void)
% Z( {, u% G5 l) o# ~& k* C6 j5 ]: ?{ " B9 C# |8 `( x' }
AIC31_data.uint = MCASP1_RBUF0_32BIT;
! b. ]; z! h9 e4 f- r4 f0 n! A return (AIC31_data.uint);
+ K% B0 N0 Y0 ]# _( s- L} [1 E& r; U; k# D
( h8 }! H- h g( V$ e
|
|