|
|
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 d! Y# a3 T8 r9 [: Smain文件:! O% f/ Q/ d; d+ @
interrupt void interrupt4(void) , z4 d( `$ a. T( F
{+ ~( r0 E6 {( U% R
Uint32 sample;
3 Q' F- s9 x- t+ B1 p8 o+ \" X- Q- f# f- k2 s
sample = input_sample(); // read L + R samples from ADC$ w6 F" e5 @ G( r2 t$ q+ d
output_sample(sample); // write L + R samples to DAC 8 h/ m2 e4 W! k* |
return;
8 D9 k5 I* K0 I- [4 e0 O}
9 }+ I( U: {% X. `* z" @' M
" p; @5 C$ w: p( W- y7 W4 Kint main( void )
; {' Y. c* U# Z$ S1 e{
# G& T7 O6 B8 k% |" ?9 s5 p, ?6 G. ~$ {
/* Initialize BSL */
9 f) }, X3 g) W EVMC6747_init( );
5 ?$ M6 o3 ]6 ?0 p- p( f7 Z$ b/ D /* Call evmc6747_intr function */- B( b) ~4 K7 h
aic3106_init( );, T3 Y2 ?. X+ B% N c- h$ ]
while(1);
5 B+ [# W& N- m$ n2 L6 c3 o}9 i7 T% ]6 Z9 c' ]6 E" Q
6 E+ X y7 u2 A
/ D0 U' u- ^: ]/ g! Y3 z* `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) M1 K& Y; ]$ E) f/* Initialize MCASP1 */) M) s+ u! k! R6 p7 U& V
mcasp = &MCASP_MODULE_1; e$ u$ _* V9 K
mcasp->regs->GBLCTL = 0; // Reset
5 }8 T: i/ a( N7 }6 D9 U; x' O+ c mcasp->regs->RGBLCTL = 0; // Reset RX7 ?* n) B- O: P+ L U- S' t
mcasp->regs->XGBLCTL = 0; // Reset TX
# o% U" ^ g6 v mcasp->regs->PWRDEMU = 1; // Free-running. F2 {9 X8 o8 A1 x2 V
// configure McASP0 receive registers
+ o5 @- @# ~; H, R mcasp->regs->RMASK = 0xFFFFFFFF; // No padding used
+ q4 \) g( ^* p' ~ K& r mcasp->regs->RFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 u) Q V4 R2 s% s
mcasp->regs->AFSRCTL = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( H% H7 i9 w1 o5 x4 u mcasp->regs->ACLKRCTL = 0x000000AF; // Rising INTERNAL CLK,(from tx side): {1 t p7 H# y" {$ Y1 Z& _% j
mcasp->regs->AHCLKRCTL = 0x00000000; // INT CLK (from tx side)" l3 l- b- _ o. @. R
mcasp->regs->RTDM = 0x00000003; // Slots 0,1
& L1 Y# A* ~, Q5 m9 r% s+ x mcasp->regs->RINTCTL = 0x00000000; // Not used4 G0 G' D- N% B% r; V( L/ _
mcasp->regs->RCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ S0 M& y$ L& A$ j7 v. ?+ O
* Y4 K' n Q1 K9 Q' U5 a2 S7 ~ mcasp->regs->XMASK = 0xFFFFFFFF; // No padding used! R9 N* B* X% c* o% j$ l
mcasp->regs->XFMT = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 z8 \! q- k0 D; x3 e9 w4 F+ D mcasp->regs->AFSXCTL = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' a" x5 _. \' `) u, y& x: R
mcasp->regs->ACLKXCTL = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 H2 I, M4 I" T3 R; n3 @2 a mcasp->regs->AHCLKXCTL = 0x00000000; // EXT CLK4 I' `- Q3 Q& [. d+ M
mcasp->regs->XTDM = 0x00000003; // Slots 0,1* @/ o6 B% |6 M
mcasp->regs->XINTCTL = 0x00000020; // interrupt on transmit
' C1 b# h2 L) P9 p( K3 W mcasp->regs->XCLKCHK = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 e% a# d x% a. f6 k
, P7 s( q. T$ D" z$ j6 F Y
mcasp->regs->SRCTL5 = 0x000D; // MCASP1.AXR1[5] --> DIN' o0 g$ p4 F+ H& _: z( S
mcasp->regs->SRCTL0 = 0x000E; // MCASP1.AXR1[0] <-- DOUT7 J, {4 L. d0 _; ^
mcasp->regs->PFUNC = 0; // All MCASPs5 C& f4 E) I# C r; q
mcasp->regs->PDIR = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* i; s* |( y$ k8 k: S+ p
* E- m/ Z2 S8 V6 q; f- p
mcasp->regs->DITCTL = 0x00000000; // Not used$ c3 Q( z% H; M0 |. ]4 o! _( M% @$ t D
mcasp->regs->DLBCTL = 0x00000000; // Not used
/ u; ?( K+ I, t8 E7 R' S& Q mcasp->regs->AMUTE = 0x00000000; // Not used
7 b; i l. Z! X: d4 j* o- h- x$ P4 T& w1 t9 S I2 N4 `# S$ @
/* Starting sections of the McASP*/% t2 ]$ {' Y+ |* @' r% c
mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# Q3 a4 l7 X4 s3 F- a$ k) W while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );
- Q, F- j- n( G* b9 D1 m mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
) e3 A8 o( z- A% i while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' W: e. `; h) I( L) ~+ t: L5 C' F
) Y9 P: h# H- x2 A$ Z8 x! X mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 @. E. L% |8 `! a! ~% p3 ~
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 p; m4 j: T0 a- S mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% X8 @) ~) t* W) z1 l1 [ while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 O1 G% c5 G/ X9 y, m
* e6 z/ A- q- b7 i4 O5 E! H mcasp->regs->XSTAT = 0x0000ffff;
2 v% ] ^; _) w! d, X mcasp->regs->RSTAT = 0x0000ffff;
! r& P; M. F8 @8 ~; m1 w5 o3 {) D4 H. G: ?" D% J
mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 \+ g _# l9 a g( ]& w4 i: a5 }# e/ y
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! C: [# a4 U3 j mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : U( a8 N. q" N; c
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 `! T6 T; E8 t" ~6 @' t
: v! i5 |7 L: r
/* Write a 0, so that no underrun occurs after releasing the state machine */
$ A. B+ ?% L X8 `( [& D4 Q5 N mcasp->regs->XBUF5 = 0;& B. c5 ^& b( p% J" n
mcasp->regs->RBUF0 = 0;
/ A& ?2 r- O% d8 i# a! h: h$ e' s% H* T& f7 w
mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! U/ b t- E, r+ f
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 I# l2 r) G' a+ l& ^) m: E' o' `
mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # q/ e5 V* d" G& u
while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! u2 b* [# @( R; I4 e
, b% V. ^9 o4 p$ p/ I# U( D8 s
mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + W" o# }% b' C
while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 G* F: V5 E$ `" s- G, O n0 P d mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: L* d2 I. ~2 ?) Y while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ k' l# L! {6 a8 h: Q: s7 ~# `# H$ d0 |& n1 u( X: `# Z6 L& K; x
CSR = 0x0000;
% E; c# u `8 K/ }: R INTC_INTMUX1 = 0x3d;6 Q% z$ {2 c: C
ISTP = (unsigned int)vectors;% G, S8 N# N# x3 G/ J
ICR = 0xFFF0; 0 k. V: d# X7 P' i2 O3 L
IER |= 0x12;
) s" N) S6 F. y/ l CSR |= 0x01;
- D/ G# ^3 @0 u: L; D& \( n/ Y8 ?# y2 D: f- p' y8 W& s) S
) y' \4 F' I) S. _+ o T+ D- Y- r
5 } A$ a h" V% t$ |& \还有就是两个输入输出函数:
) M1 b9 F. m& M* K; `2 e# B0 jvoid output_sample(Int32 out_data)
# e, M- O8 \2 o# c" B3 s. r8 a; i$ l{
0 s; H2 p( a) _# J. j( l" @ AIC31_data.uint = out_data; 7 R& o# T$ ~+ e* ^" e/ b
MCASP1_XBUF5_32BIT = AIC31_data.uint;* t0 E1 e+ e8 i5 F8 ?
}
! V3 E0 |5 V9 H( L |4 w! q7 Y8 i% n. E; U3 j4 G
Int32 input_sample(void)& Z |, k8 z! n+ x* r' }2 K2 W
{
7 R. V; w5 q3 [ AIC31_data.uint = MCASP1_RBUF0_32BIT;! q% j* @" h" B* Q6 T5 g1 n$ r3 g
return (AIC31_data.uint);
9 }; D# S+ c% T/ p/ m}
' P" M+ U( s6 f9 F% _. [5 P! C( m% [, F: x( u
|
|