标题: edma3中断只能进去一次 [打印本页] 作者: silent123 时间: 2015-4-22 22:01 标题: edma3中断只能进去一次 使用mcsdk中的edma3lld库写的edma3驱动,在omapl138的dsp核运行,但是中断函数只能进去一次,路过的朋友帮忙看看,感谢万分。代码如下: / @& c0 m. I1 j. O5 Q#define PING_PONG_ACNT 1 ! x, d; r; P* _; k s# z#define PING_PONG_BCNT 8*32*40 : ], q4 X) @5 O- |1 H//#define PING_PONG_BCNT 1 # z3 }; V+ q1 ]; p
#define PING_PONG_CCNT 1, v7 V- x! o2 M( M
#define MCASP_BASEADDR 0x01D00000 6 y/ E9 i, @4 h/ y" h) N! X( }#define Mcasp_RXEVENTQUE (0u)5 _ d9 @8 J5 ^. a
( Z6 x7 ? m: {8 u; @- ~. y
/* OPT Field specific defines */5 z3 y, p6 k5 j7 i: ]
#define OPT_SYNCDIM_SHIFT (0x00000002u)* w g4 R$ a+ J7 ~3 E
#define OPT_TCC_MASK (0x0003F000u) & |- n: \# I# \. o t1 F& H* w#define OPT_TCC_SHIFT (0x0000000Cu)5 k9 Z/ s7 Y& C. i5 T) l
#define OPT_ITCINTEN_SHIFT (0x00000015u): v+ j, E9 G" d
#define OPT_TCINTEN_SHIFT (0x00000014u), \" ] ]6 Z! x5 N- j/ o7 G
2 H. z. f* I/ m3 Pchar ping_buffer[PING_PONG_BCNT]; : R; {" s6 w ?char pong_buffer[PING_PONG_BCNT]; 2 g9 m5 J; k* e# V6 d. l* z. U0 r0 X
: @; q9 v7 ~, u4 o. a; e
) k! O# p4 G: ]5 p% Q2 ^% D# r a4 _& y1 X7 _
static void ys_edma3_init() ) N ?( n# m( C{ . M0 a1 n" b ^4 o7 a EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};$ U# F0 `4 M1 R8 [/ h
EDMA3_DRV_Result result = EDMA3_DRV_SOK; & e- |% j- M+ {. T EDMA3_DRV_Handle hEdma;8 T& ~, \* s' [2 j; L0 o
uint32_t chId = 0;# S1 n0 I! v6 B/ m+ V, N- a
uint32_t tcc = 0;6 h! J6 J8 P* U6 `9 N
* d) M! `" q& S* z" l" J# D/ }
print2arm("edma3 driver init...",0);: g6 u) \+ c0 W& }1 f0 k
* y+ s) v8 |' E" T( q. m hEdma = edma3init(0,&result);1 i; E# I F+ z9 @
if(hEdma) 2 p0 F: b% `& y" |9 P9 J9 r3 R { * \9 k+ G8 D" {2 ?: _$ w1 x; y print2arm("edma3init() Passed.",0); 2 e' Y" g. C9 ]2 ]" a$ g: B# ^: x }, j: ?2 [9 T$ m3 k( U6 d
else % A+ o; x' n+ l+ P; C# U% b, m* i {0 L# V" i2 h, H+ P; r- }4 f
print2arm("edma3init() Failed.",0);! \7 N* j$ @: o. B, v( v$ }
}" F+ ?. S z) x" m: Q0 f
. N; {" s3 J" q/ a) b `* ` if (result == EDMA3_DRV_SOK) 4 f& J5 `6 o8 j9 k7 i { 8 {% e- e' g# ?* `0 i7 `- h result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,3 V: X7 p& R- T8 Z: s3 R) V9 G" {+ V
(EDMA3_RM_EventQueue)0, , P" U1 v0 l7 ]2 A @ &edma3_isr, NULL);; u7 ~' ~/ Q. h! r
} a: F$ M3 s, M* G. E ; _+ W5 V+ P, P, `
if(result == EDMA3_DRV_SOK) 0 H h1 n! N$ c) B( t {& f- d) W2 l( I. ~9 P, }) S6 s$ E
paramSet.srcBIdx = 0;* w8 a: A, C$ b5 F% T, J
paramSet.destBIdx = 1; / J& ?. i$ G5 l) C3 c, c) E paramSet.srcCIdx = 0; . z5 b7 X9 M @! ^2 o Q: ^ paramSet.destCIdx = 0; & q) x5 v- }2 I" r$ _8 l paramSet.aCnt = PING_PONG_ACNT;: V: F# k* \4 V y
paramSet.bCnt = PING_PONG_BCNT; % c/ c+ F5 L' l6 i paramSet.cCnt = PING_PONG_CCNT;1 M7 u" C) f; D2 C. L
8 e( l: |; w% w! u5 _ /* For AB-synchronized transfers, BCNTRLD is not used. */! i# @- w$ L' F6 g7 [1 s/ b
paramSet.bCntReload = PING_PONG_BCNT;4 S& s' Y- _, ~# G8 s
: V5 ]7 u2 v& C /* Src in constant mode Dest in INCR modes */ 6 A X% s+ Q( n* ^& i( _ paramSet.opt &= 0xFFFFFFFDu;* Z/ G: ?0 S0 H: ~+ t
//paramSet.opt &= 0xFFFFFFFCu;5 }7 }* @6 G. `( m6 N/ U5 P- f5 S2 J
, k4 _3 X: I# g# S9 |# [+ |. c /* Program the TCC */ 0 x# G2 e. X# F1 d" P paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);5 `. G# {" C! D# j/ o$ b