3 v0 k- V7 m" Q. s$ M" {/* OPT Field specific defines */8 x |- I6 W; ?0 J8 P6 l
#define OPT_SYNCDIM_SHIFT (0x00000002u)8 h9 T. }( K0 J' l, p
#define OPT_TCC_MASK (0x0003F000u)# s1 c1 V I6 j- L Q
#define OPT_TCC_SHIFT (0x0000000Cu)- Q X$ a" r; n' _1 Z
#define OPT_ITCINTEN_SHIFT (0x00000015u)- q" k: Y( w6 R
#define OPT_TCINTEN_SHIFT (0x00000014u) + `$ {: t$ ?. y7 _$ ^% p8 _* s' m1 J7 i: M1 v& t+ Q" K
char ping_buffer[PING_PONG_BCNT]; . W4 Z" V& |3 @: o }/ b2 ]char pong_buffer[PING_PONG_BCNT]; ( f" i v w8 O ( u5 m+ F( H8 d* ?; z0 `4 h1 e7 z9 s- K. U
! \: d. b) s1 N) |; V
% U! o0 m& d, Ystatic void ys_edma3_init()& k1 ~2 \& t. h8 K2 @3 }9 D, g
{6 Q3 c5 ^, Y9 F) U, p
EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};) w7 S* e Q" j8 o4 e
EDMA3_DRV_Result result = EDMA3_DRV_SOK; 8 w/ ?) e! O8 E- H) Z: ] EDMA3_DRV_Handle hEdma; 0 g& C q" {6 t9 X- A. \ uint32_t chId = 0;6 A+ t- P5 Q$ b8 |" p
uint32_t tcc = 0; . ]3 V4 |) s; {7 `5 A* X8 P* q& e5 |; O" |9 N) ~
print2arm("edma3 driver init...",0); 6 q2 ]! u2 G$ ?( ]* U7 R. C& f $ H8 e. @4 P2 v7 K hEdma = edma3init(0,&result); ' I/ M) n u1 i/ M( F" v if(hEdma) % x. _4 f$ b+ e+ J! k { # H0 i! Y, _! u/ s/ x. B" K0 T/ @ print2arm("edma3init() Passed.",0);# }! E( H+ a- M! z L6 \. Y7 G
} 5 ]" Q6 ?$ J7 `/ o1 W4 } else! D' A9 H8 X! `, F) x! Y9 U
{; Z5 R. p( ], L' a0 G4 t1 C
print2arm("edma3init() Failed.",0);/ d+ u# T5 x* a+ [4 V% M7 z
} ) o A/ \+ h/ l. Y; ~: u ! @: ], Z7 }7 r' }* }9 G
if (result == EDMA3_DRV_SOK)3 E4 ^* x+ h& F
{ ( h1 ?& p7 W( g3 g$ R& D result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, 5 q( F8 Z0 e' K# ~+ J (EDMA3_RM_EventQueue)0, & `) ~2 A) `$ n* J/ z5 _, _, \ &edma3_isr, NULL);; I3 ~1 j: R9 t2 ^% f
} # @4 Z3 C( C, M& E/ Y& S - d1 O2 I) c# y' s
if(result == EDMA3_DRV_SOK) # B t+ P% B& C% |1 r {/ n2 [1 |% F1 `: s
paramSet.srcBIdx = 0; I6 W7 k% n& m) I" I
paramSet.destBIdx = 1; |3 N Y( S# S3 F) b paramSet.srcCIdx = 0;5 w! Z) u( ~0 B# i
paramSet.destCIdx = 0; ' n' _3 `$ {8 n* |4 C5 i0 q paramSet.aCnt = PING_PONG_ACNT; $ H! {6 m* a9 l, A; s5 [* ]* e paramSet.bCnt = PING_PONG_BCNT;* C6 V) \$ _, u# r; _
paramSet.cCnt = PING_PONG_CCNT;! z# S1 w' E7 B: m
" n' C5 a) T6 k2 w /* For AB-synchronized transfers, BCNTRLD is not used. */ : |% T' S5 K v9 z4 _- R paramSet.bCntReload = PING_PONG_BCNT;1 E, ~4 ~) T: {
+ H- r2 |/ |8 t1 C/ D
/* Src in constant mode Dest in INCR modes */ # I. z) g( b1 L+ M paramSet.opt &= 0xFFFFFFFDu;* N$ c" g1 G# L. W) |9 Y! v' r5 P
//paramSet.opt &= 0xFFFFFFFCu;" x- g' @/ w2 E% \' L
) [+ \! O( }* e+ P/ `' j1 [1 J /* Program the TCC */+ S$ \9 @9 I' N- {
paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);0 A- p3 O+ B. C+ k+ d/ X
, z1 A. T4 F- i" O4 z# F' N7 o$ b /* Enable Intermediate & Final transfer completion interrupt */ 5 i- B1 Z4 p2 J8 ~" q7 y paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);9 E3 w4 O$ N% p1 w2 Q
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT); 7 t [% @0 [7 M% _1 [6 [# p' C0 R( D5 `# L) z5 l
/* AB Sync Transfer Mode */9 V+ o9 a7 G6 ?! H
paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);8 y( c, j. h) a5 _' X; R
# g, N W7 Y$ q: ^ k% D6 G8 v
/* Program the source and dest addresses for master DMA channel */ & d# x- [( `. T3 [- Z: }% K& z paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);! R: o, d7 Y; e, ~- h
paramSet.destAddr = (uint32_t)(ping_buffer); ! y. t0 G8 B. y+ g+ p! w! U$ J4 L j' d
/* Write to the master DMA channel first. */ 9 g: D3 N5 b1 U. y' M" w result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet); ! Y. T! D) x4 p8 x5 ~ } 5 m# ~+ M! z* Q* u* R7 k1 I
4 x2 [7 E8 a, G$ F, Y result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);( _# D! _- m3 o. t( o