|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 J M; @& _( n1 d1 w5 x3 r
main文件:0 c, ^: z2 R6 m; U: J1 a
interrupt void interrupt4(void) , X" o# A1 N0 I1 c- N
{! m, F. X6 U6 g# r
Uint32 sample; K4 H0 r( c) }: B6 {* K
3 o$ w5 @5 T! b; l* @9 K. I" N
sample = input_sample(); // read L + R samples from ADC
! ]; _, t4 `2 u: ]% U" R9 ` output_sample(sample); // write L + R samples to DAC
# `3 x% a4 C& q) o4 w! ^ return;
, ?/ U+ H6 c3 |}( g5 n4 Z" T; s/ V* N& B# r0 e1 L
( ~9 S/ Z1 f' x7 k! n- h* m, Cint main( void ). v* T# k, H# @) o
{
9 N. @" N: i' y( J8 J9 u9 e, E. u7 q) s5 [$ ~+ j: m
/* Initialize BSL */; l! ]9 S# W5 T
EVMC6747_init( );
/ w% ^& N2 v' u+ j" E# | /* Call evmc6747_intr function */
& b$ V2 c) Q% |( A aic3106_init( );
& d( O" j/ h. I7 Q9 d; Z+ A while(1);/ ~. x" Z: w) w; Y
}
, e8 }3 j1 t( k; z2 @! w( B% ?% {
$ E/ R G( N+ a; G. h Zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 v1 O' A6 E+ v/ s) E6 F3 @
/* Initialize MCASP1 */, W4 I4 W9 a$ q
mcasp = &MCASP_MODULE_1;
, t6 v ^1 i7 y mcasp->regs->GBLCTL = 0; // Reset
# V% @- L9 d2 U. C* E* J& x0 f% l$ @ mcasp->regs->RGBLCTL = 0; // Reset RX
' z$ D# E, L: R mcasp->regs->XGBLCTL = 0; // Reset TX
( X1 I+ Z+ M6 O mcasp->regs->PWRDEMU = 1; // Free-running+ d9 | ?# e& _( [4 t9 n
// configure McASP0 receive registers
6 O1 V2 e( E6 G+ B; t( |: e mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used; W& v5 m" ^8 u+ U2 N9 U
mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" C; a9 l' ?7 L' H7 ` r1 R
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 w# {9 @, w! ]# Y |. W X/ j
mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 X$ m: D; A& t! x* c6 T+ g mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" j* ^! \6 d0 `# j4 Z
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
2 y- t. P' G& ~/ D mcasp->regs->RINTCTL = 0x00000000; // Not used3 l6 I; P5 x7 r
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 C6 b0 j# i; `' h2 Q {. Q' T }" J
+ z/ a, }5 T" K, ^, c' S u t
mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used& K8 {# `* g V* b$ Q$ e6 }3 S
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' @6 {- @* b K: f f mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ f7 k1 c4 W/ J$ E/ }
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 ?. A4 r5 {+ Q3 s/ |8 b
mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK
' M6 j0 p9 Z1 m' g* S mcasp->regs->XTDM = 0x00000003; // Slots 0,1
- Y; N/ `! `7 ? mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
% V5 Z9 o: T6 H# Y' h" A mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' C2 A O% N" D5 r& j" `0 o/ c( B7 b" j1 S/ q4 D
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN/ i" G5 [3 G+ k2 a" d- ?( o
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT
2 `1 o! t! E, A' K: } mcasp->regs->PFUNC = 0; // All MCASPs
9 x+ f% o" O5 Z$ S3 i mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 J2 q8 G' J# ^: ?3 K
3 i8 D; H/ F" X" @/ i% S mcasp->regs->DITCTL = 0x00000000; // Not used. w8 B9 a0 Z0 T. n
mcasp->regs->DLBCTL = 0x00000000; // Not used0 g" ^6 U& p/ ^
mcasp->regs->AMUTE = 0x00000000; // Not used
) O7 C4 k3 M% f% }( J$ Z4 |- Q0 V
/* Starting sections of the McASP*/
$ {" X( ~3 f, |7 e; m9 Q$ l mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 A1 A: v7 C2 L) \: b while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
) Q+ r) t( h& J, i% B mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / `' r. C4 ?+ @5 J* n
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ K t9 i( e0 D% d$ B2 N9 x6 P) o. \3 v# i y$ K$ _3 Y# U+ |
mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 O% j% v0 \8 x1 p/ M7 t4 q- }
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );8 v- `- M! s1 f9 g5 i5 a6 f7 y( q
mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 _3 `$ n2 X. K( J/ V( y
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 h! p' K! b9 E: N) f
& {$ v# @, h* a$ [/ e9 p
mcasp->regs->XSTAT = 0x0000ffff; S+ A# U+ b( V( m
mcasp->regs->RSTAT = 0x0000ffff; ' u& a7 }/ j/ n
" q! x, V& H/ p# \ mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 u6 S" j: W8 N @% o0 k while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ H( F+ X8 ]2 j- u
mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% K" s& O3 j( |2 z9 M! R0 L) y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 x" q. \; P0 H8 Y+ d
, s5 ]: Z" M2 G |: b* d9 g
/* Write a 0, so that no underrun occurs after releasing the state machine */
4 o1 t$ V0 K9 r [1 Q3 ` mcasp->regs->XBUF5 = 0;4 {) r( ?/ x' M. c
mcasp->regs->RBUF0 = 0;9 j S# \; I2 p" x" O$ T
& L: y$ f- z0 C: [ mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! j6 O& Y( N4 r/ O% j while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( @1 ]' X- T; e) R9 Q% o mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 T- P/ o( z% e& c. r$ w- E while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* n! R0 k- h) M7 [& c
: Q Q1 a0 `5 f4 V. l2 L8 C' \) N2 F; K mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 L- y1 H2 a" \% @. r
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 _' W! J3 F# f mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) x: K6 x3 V' j: \; M' i
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 k: Y$ o' Z+ q8 e3 U' L
4 K7 p/ c R% q0 g+ D7 K
CSR = 0x0000;" V$ m2 J" U' w- x4 c3 p
INTC_INTMUX1 = 0x3d;* C+ e- h' d- e5 H' X
ISTP = (unsigned int)vectors;
2 p* Z3 f1 [& l) T7 ?# | ICR = 0xFFF0;
e: n; \/ l5 t E# {! u6 P8 {$ | IER |= 0x12; 3 g; X5 ?) W; X* @3 s2 P5 X
CSR |= 0x01; 4 s) z3 l4 q% n, F- w- Y3 v
( R0 {; d. S6 j3 B
$ D, Y6 t6 u, Y, {. S0 z
7 p0 J0 T0 g' c3 H7 x
还有就是两个输入输出函数:* ^7 V# J6 g. K. T# w1 @2 B* X
void output_sample(Int32 out_data)
3 O$ q4 G g, b% W9 K6 m; w{
! q- f- ~. d5 e* k8 v$ d! J# } AIC31_data.uint = out_data;
, d( J- _2 m4 h- }* `' d" D) L MCASP1_XBUF5_32BIT = AIC31_data.uint;
% H: |# K9 {% K4 H, A1 D$ A}
' ]7 d0 T6 ?, S3 [) a: S: p0 t( c6 ]1 `
Int32 input_sample(void)9 ?! l& B4 O" {6 b
{ 4 c* c7 h$ Z7 o9 [9 z8 r/ B6 E
AIC31_data.uint = MCASP1_RBUF0_32BIT;
' k9 O1 z7 u% B3 Y return (AIC31_data.uint);
: Q' `+ {. o9 c3 }% L- h' w}
# v; {5 w( U8 y! ]' _
% ]# v# f, c1 j. \% ~ Q5 ~1 \ |
|