+ j! _- S) S- |& F. r/* OPT Field specific defines */ - w3 E' G" ?. E, M5 U9 F#define OPT_SYNCDIM_SHIFT (0x00000002u), I( E' ]) }' A/ w
#define OPT_TCC_MASK (0x0003F000u)" S. z- Z( c. y9 D5 m; W5 N/ r) C5 E
#define OPT_TCC_SHIFT (0x0000000Cu) * T9 W. v* ]( U7 D/ g#define OPT_ITCINTEN_SHIFT (0x00000015u) 7 u d, h& {+ w$ ^1 ]6 |3 \#define OPT_TCINTEN_SHIFT (0x00000014u)7 q0 y8 V, M( E p( L/ P
5 Q7 G2 m, O& X& g# G( H. j
char ping_buffer[PING_PONG_BCNT];$ w+ ?) D' w& y$ J
char pong_buffer[PING_PONG_BCNT];) w- Q, V' ~4 T
& e: \; {4 u) Y! s
/ L1 M3 d8 W5 D1 y; T. ^ ~8 b+ w7 v( ~) f
6 `$ E0 u; R+ I* L# w3 l4 q
; V' j- T" @6 \9 @static void ys_edma3_init() 0 Q5 {$ ~, Z5 s* n{ 2 X1 M* y- |. ]/ x1 J! X EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0}; * K) y. ^) s& w# E8 v/ S EDMA3_DRV_Result result = EDMA3_DRV_SOK; * P; P# j0 s* t EDMA3_DRV_Handle hEdma;, c+ A4 i+ s a' x5 Z& r
uint32_t chId = 0; 3 X" C) O: V6 S uint32_t tcc = 0;5 i& E8 F8 z8 o3 {5 v% A
/ G+ Y$ s2 p) d/ Y3 Y
print2arm("edma3 driver init...",0);, t$ M K9 x' f( `5 r# j+ D
+ \$ z1 b l3 C2 a hEdma = edma3init(0,&result);3 }3 g/ d& O1 i4 k
if(hEdma)$ \0 J3 M' D# [
{ ! U8 Z' ]9 X7 Z. w6 D print2arm("edma3init() Passed.",0); 3 X7 Q5 B( S& J; `& e5 {- { } 6 v* {- c0 d- u+ m else 7 ~5 T/ Q; p8 B0 e8 g$ D { ) s3 `( o: Z4 ^' `- {! l. J( k print2arm("edma3init() Failed.",0); 4 {6 Q E8 Q5 S, A }8 _$ i' i E6 a% }( y
+ g k3 H! O0 X3 F& P% K
if (result == EDMA3_DRV_SOK)! B8 X( x6 b/ g+ Q
{ 8 Q7 {# k6 U5 r* a, K. d5 N8 _ result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, 3 s. e) W' T/ b ~# z (EDMA3_RM_EventQueue)0, ; k& J0 S' D/ E8 Q) T" Q7 F7 D &edma3_isr, NULL); . \* j* U, d/ H } # N- c9 c& X* E. q & T& I) ^; F& c& S. ]# G5 ?: n
if(result == EDMA3_DRV_SOK)5 E5 C5 Y9 ]9 e: y& t5 N4 G& V
{ 6 I4 Q7 g3 s8 h$ x paramSet.srcBIdx = 0;. [* ? O+ ]1 R
paramSet.destBIdx = 1; 9 I- g, ?4 C, R, p, D paramSet.srcCIdx = 0;( P" |2 e9 f# e. N; ?5 a3 {; F
paramSet.destCIdx = 0;) p, w0 ^: r- u' V" o3 o
paramSet.aCnt = PING_PONG_ACNT;5 u8 A. b$ w9 d2 ~) G
paramSet.bCnt = PING_PONG_BCNT;3 S8 W6 F0 Z5 A" J+ _
paramSet.cCnt = PING_PONG_CCNT;4 E6 _5 T$ }: n& X q4 \
: o8 a8 W3 S7 r. ?3 q2 e0 ~8 V+ U: F# g /* For AB-synchronized transfers, BCNTRLD is not used. */ + b7 m! Y0 g1 T/ ]+ Z! X paramSet.bCntReload = PING_PONG_BCNT;1 W' f8 C4 C, N9 s9 B
+ |. p+ x1 s1 u! { /* Src in constant mode Dest in INCR modes */, j& h3 O/ s2 U$ Z' W" X* I; Y: c. g
paramSet.opt &= 0xFFFFFFFDu; ?! h' i" @5 s, ^
//paramSet.opt &= 0xFFFFFFFCu;& R& o v0 ]- V- S0 A3 q
4 X8 ~+ C+ u: [ /* Program the TCC */* D9 y* I; v: u; p2 z1 q3 Y4 u
paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK); % u# u5 \/ B* a6 D, W+ j. A& j : _' H+ D1 k; } h+ L, Q% I$ H /* Enable Intermediate & Final transfer completion interrupt */0 q, L. J! m2 C& P
paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);# w/ X! m; i- X+ g K9 n5 G
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);. ^$ D, b. u! r; Z. G: x! M
- ]5 k8 ?0 b+ J+ |
/* AB Sync Transfer Mode */ 9 {0 j; O+ r( C5 G9 u( q& m' N8 M paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);5 |- L/ M9 x6 }1 A0 X1 f& A
9 K [) f& O% s1 x0 J! e6 P /* Program the source and dest addresses for master DMA channel */8 o& [2 F, n, g. W4 l2 U
paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);5 V" r/ {2 d+ \* X4 D
paramSet.destAddr = (uint32_t)(ping_buffer);& ~/ l# z; U. {7 T, [& p% d
$ H! N$ e8 X$ q /* Write to the master DMA channel first. *// C& g. j' Y0 y9 [7 A" F3 a
result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet); F, g& W5 R U- V/ y9 _3 U7 _6 U
} 2 U! f/ |1 T5 \1 c$ K' Q+ s% r6 k' ]5 E i! b0 l: a
result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT); ' l* h2 O& a1 z2 {7 I1 H; ^- r9 o v4 X- {5 I( l if(result == EDMA3_DRV_SOK) 7 \4 I! x5 ]1 U' |9 d {8 l+ s+ @$ O+ i! H3 ?- b6 z. Q0 l% s
print2arm("edma3 driver init success.",0); . Y5 T# B* r* m% z$ T+ d" } } 5 X! z. B9 {" ^- w( w: q
} ' t. n1 f! k$ E5 \- s ' J5 Y" Y' G& j0 a; t : s. l( z( u) SEDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。 5 E6 c! B9 h4 k9 ^ }+ t6 o# J! m z9 {
/ ?! x F+ b. Y2 V- P8 B8 `作者: Lewis 时间: 2015-4-24 10:47
每次DMA传输完成后都要再次使能传输作者: silent123 时间: 2015-4-29 23:25