: c; y$ B: g1 v. z# o% s/* OPT Field specific defines */ 3 Y! N/ |' h$ ?) m4 O#define OPT_SYNCDIM_SHIFT (0x00000002u) ( y( F+ L! u7 Z ?8 [/ L7 U$ X- ?#define OPT_TCC_MASK (0x0003F000u)1 `" H$ z7 H E5 b8 O( l& u
#define OPT_TCC_SHIFT (0x0000000Cu) `9 B8 N" H# S/ a4 o
#define OPT_ITCINTEN_SHIFT (0x00000015u) ) F. R `6 D2 F! F8 g! Z0 K#define OPT_TCINTEN_SHIFT (0x00000014u)& @& N O: K, S) V7 U, C
- y8 _0 g. J, j, g" ?* s+ r
char ping_buffer[PING_PONG_BCNT]; @. Y3 K, K) X2 z* [ V. I: e7 lchar pong_buffer[PING_PONG_BCNT];3 C) e, Y e4 J/ _
" n# n3 H; t+ @ c' V* s. j2 p* l5 @1 w3 Y3 W
& D0 H% D1 g, n+ O/ E) e 5 E- I8 s( _& S- p% z2 G7 {2 cstatic void ys_edma3_init() ) [6 F' V* b2 D' K{ + C2 v" w+ w2 B6 u2 Y2 a EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};. d$ M9 f s- E. Q$ O% A
EDMA3_DRV_Result result = EDMA3_DRV_SOK;# {! X! Q M/ z/ M8 o8 H
EDMA3_DRV_Handle hEdma;- v. r4 k; F/ l; j" m- p# l+ ~( U
uint32_t chId = 0; x( P7 ]( R* h0 i$ S uint32_t tcc = 0;# W+ ]4 f0 m: k6 @2 a/ u
" Q# T; r' W- a" a; C3 |% _
print2arm("edma3 driver init...",0); 8 Z1 b7 r' l. E* R$ q& ~8 d$ T$ |
hEdma = edma3init(0,&result); ' B+ ?0 u5 F5 s) M if(hEdma) ' a8 y! q7 h7 c% B% p5 f { & L6 b8 q& S; m5 o7 E% T" w7 l print2arm("edma3init() Passed.",0); 8 t' {2 J$ ~6 t4 ~ }5 W( U) Y2 L' [& K' }0 Z7 \; H
else . W# R9 l" O) k% u1 } {8 ^$ K0 G; y, E- }7 _5 ?
print2arm("edma3init() Failed.",0); % F; D7 e$ d; x. L L/ J2 M7 Q$ k2 M }" O* ^9 L5 u3 t
, ^& Y. @, u* S9 l* X if (result == EDMA3_DRV_SOK) 1 Q) ?3 A+ A: ~$ ?7 S/ I, | {) Y, }- r% x6 g3 Z. C
result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, : r2 z8 c- [( @1 K$ K; \5 d5 j! G (EDMA3_RM_EventQueue)0, ' y9 e5 Y# l2 I- N &edma3_isr, NULL); : E. Y5 B. K8 x% ?8 j }: f1 k9 B! X0 {( C5 a4 n
, Y/ h2 G1 [! [$ E! D if(result == EDMA3_DRV_SOK)+ O' N6 Y, _% K: B9 n7 z9 S
{ : A$ l; [" r3 g; g' M- L paramSet.srcBIdx = 0; 1 O- M2 O" ]( Z7 k! v% j paramSet.destBIdx = 1;* q( z1 n4 ]8 n1 K
paramSet.srcCIdx = 0; - l" e$ U# z1 `/ c paramSet.destCIdx = 0;1 J& E9 \' q8 G& Z. K( X
paramSet.aCnt = PING_PONG_ACNT;. V7 _3 @7 ]. u4 s# _
paramSet.bCnt = PING_PONG_BCNT; 0 z0 j% h; {0 F) [1 t @" G1 ` paramSet.cCnt = PING_PONG_CCNT;3 C' v: Y% d! s. v
3 x, e8 @: a3 C D( S2 B' v /* For AB-synchronized transfers, BCNTRLD is not used. */ 5 \. x- j g/ q1 B% S0 g paramSet.bCntReload = PING_PONG_BCNT;9 m8 D: D; O& r" P- |; D
( `4 E; `) X3 F9 n ~9 J9 c /* Src in constant mode Dest in INCR modes */ / L9 W- Z+ O3 I8 S3 i paramSet.opt &= 0xFFFFFFFDu;6 _+ |) l) y, ~, o/ u' p1 B
//paramSet.opt &= 0xFFFFFFFCu; 0 A0 h. p2 m' k 5 k+ I6 L- E1 i- j5 ?1 V% O
/* Program the TCC */ 8 T' [, n! W0 N- D' M y paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK);( E# C# \3 r4 P0 i k- B
7 K5 _% E: D# r# h" F% @1 Z
/* Enable Intermediate & Final transfer completion interrupt */. X3 D; q1 U% D. X/ M) V6 a' N
paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT); ( O8 T8 b7 M7 Y# x: y paramSet.opt |= (1 << OPT_TCINTEN_SHIFT); t3 c7 H! J4 @- ? . p. g+ [( [6 i4 g" I /* AB Sync Transfer Mode */ _0 H+ U- m% E1 `- r$ j- n
paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT); 1 i( F5 a) N0 N, ]& C2 h & [ k e" h p2 V! C a0 l /* Program the source and dest addresses for master DMA channel */# ?) s7 g/ n% h6 v4 T
paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);5 U$ A6 [6 b/ k, ^$ O9 W
paramSet.destAddr = (uint32_t)(ping_buffer);# A2 @ X# c) ?/ P
. C/ L$ U. M! H5 P /* Write to the master DMA channel first. */ ( L* {, l" @+ r& ^7 ] result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet); / w0 ?$ `4 X5 W n2 D9 Y3 D" R) n } ! X& v+ t/ S! p* X' o* R' e6 M ( Z( Y% j+ t' T2 j/ X E) H result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);: y3 r$ `" l. I; ~' o% }
, e7 m3 V" Y+ | if(result == EDMA3_DRV_SOK) ) y3 x; t3 {. U& s& ?, N5 l {0 ]& f2 V, w1 Q$ U0 F
print2arm("edma3 driver init success.",0); 5 ]: [+ d6 L6 ^5 h8 ~8 Y9 p } , k/ P2 ]5 e# X( D
} - X; J: z8 l- |& h/ v# Y! b6 q0 f B- Q* x$ J- E/ U) z