# o) P' B; M" d/ w+ estatic void ys_edma3_init()4 d/ t: `. z$ X- r4 X
{5 A' n- ~$ X/ {) t4 K% P
EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0}; 5 c! V3 F% h- f" R EDMA3_DRV_Result result = EDMA3_DRV_SOK;# |- e! s* ~, [9 f* J
EDMA3_DRV_Handle hEdma; 1 {- @9 J! o8 ]0 |2 @ uint32_t chId = 0; 0 L3 c' m- n8 T uint32_t tcc = 0; ! C! D% n. i# h& H* C V& X/ o5 U: @5 p( j! \8 c) B
print2arm("edma3 driver init...",0); * O# G3 B; s8 j! k9 `" w+ f * \5 u% O- Q* d- y) k: R hEdma = edma3init(0,&result);- L' o! |; J7 Z/ G
if(hEdma) {2 `2 i7 T) v- E O) a { 1 R: e, i% M7 E print2arm("edma3init() Passed.",0);: U! p, ~: ^& f8 {# Q2 K
} $ f- H6 `# \4 W& e* b7 B else* e; f- a- n' r- R8 C# M
{# }* p( G4 \5 v3 j0 X1 b
print2arm("edma3init() Failed.",0);2 g" K0 M6 e$ s' z' ^' k) Y) I% t
}" E- s# D9 I' F; M# f* n
0 m+ X; P u7 r5 b& v# s; x
if (result == EDMA3_DRV_SOK)* ?( s9 g @ G
{ " u7 @+ N1 V0 c' S$ l" v result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,8 p6 `" L7 i8 a+ K& B
(EDMA3_RM_EventQueue)0, % p0 ?7 d% T d' @$ v &edma3_isr, NULL); " m4 H! Y4 u6 m( m0 H: X7 a! H }2 D2 d+ r5 g' Y" c2 _" m, h9 Q
- g/ d) Y# x6 p2 o; Q
if(result == EDMA3_DRV_SOK) $ \5 ]) a4 j' O: ^" s { 0 ?$ X& Z+ `( I; k paramSet.srcBIdx = 0; L( V0 f- i: ?2 h3 f
paramSet.destBIdx = 1;1 O/ T/ F2 p8 M, h) i; A3 D
paramSet.srcCIdx = 0;3 ], E# O$ J( p) {6 O% u7 b6 O
paramSet.destCIdx = 0;+ s) I1 ?7 I& F" }& i; B2 t
paramSet.aCnt = PING_PONG_ACNT;, b, _4 _5 A; o5 L
paramSet.bCnt = PING_PONG_BCNT;( I3 j' K* G+ t- o
paramSet.cCnt = PING_PONG_CCNT;' _/ H$ }9 O+ B. V& l9 l3 d
3 H6 m! ?; m4 B3 m0 k P /* For AB-synchronized transfers, BCNTRLD is not used. */+ n5 F7 Z3 n4 h i
paramSet.bCntReload = PING_PONG_BCNT;3 K) q4 k6 M3 g. u1 t" z
) v$ u+ ]1 f; f h! ?
/* Src in constant mode Dest in INCR modes */: `3 k$ K; O/ S! W9 I5 ^% e
paramSet.opt &= 0xFFFFFFFDu; k2 Q( L4 z+ |# G //paramSet.opt &= 0xFFFFFFFCu;# E, s; S4 N( Y" N. M; l j
; R* [# B) d Q; ~ /* Program the TCC */ , |8 X" p9 b: h% }, }7 N( F2 S paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);8 U0 p3 U3 x1 e, V
z0 f# H) U8 I8 n. P /* Enable Intermediate & Final transfer completion interrupt */4 c* w) k8 a) D/ o. a2 Y' P) F
paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT); # D6 n# J, @; p2 E paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);, k3 l- }1 A. x! D P/ w$ v9 t
9 T7 v) K; l. y @$ a
/* AB Sync Transfer Mode */ 8 C5 f, M: c8 \# ]( \ paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);/ ?9 I7 X; o3 ]0 N+ z
$ Y" G+ A! p$ S0 S. a, ~6 L1 L0 L /* Program the source and dest addresses for master DMA channel */8 E$ U9 H9 a) b2 G: N. J* ]& |
paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);$ `6 } q6 \6 n
paramSet.destAddr = (uint32_t)(ping_buffer); . L0 K2 |* G- T. \ 5 Y! f+ i( [/ [$ H& P3 K0 a3 b /* Write to the master DMA channel first. */ @. \5 G! c8 q# l" J+ a
result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet); 6 |! h$ {& c: s$ Z$ z: k: ] | } d& r/ { O3 T7 O( F! |6 V' Q7 ?
8 m" F- }+ p8 m( ` E! m- y result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT); ' F" \ Z& J' X) Q 6 u- a6 ?- O5 w) Z- \' M if(result == EDMA3_DRV_SOK) 2 V/ n& z3 C Y { ! r0 a* d7 [$ _ print2arm("edma3 driver init success.",0);7 W' s; y/ C" h! {
} 3 z/ w" w# e2 h, h0 c+ a1 \ N( i) O} / {& _' Y/ a6 E. G2 s8 J. ?" Z8 r- H4 b1 D
' W: L6 T, M& F3 U
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。 2 z+ V2 ]6 R/ q! ?6 H# C* b4 K' ~2 A: @5 r1 O3 W