) P4 S6 I9 @/ D/* OPT Field specific defines */4 _4 F6 ~0 z( ?/ F
#define OPT_SYNCDIM_SHIFT (0x00000002u)* s5 k- [9 k! \) z0 {! }
#define OPT_TCC_MASK (0x0003F000u)3 X) R+ H4 i3 R# w- y3 ]7 [
#define OPT_TCC_SHIFT (0x0000000Cu)3 k8 J& B/ k% Q- y& p0 ^3 N8 `
#define OPT_ITCINTEN_SHIFT (0x00000015u)' V' j3 u/ p7 M- c0 Y/ c
#define OPT_TCINTEN_SHIFT (0x00000014u). R4 G! \) e. @- m' [
% @# H" u+ r5 W, T. R2 R
char ping_buffer[PING_PONG_BCNT]; 4 q$ J& i9 u, D. n+ {8 y$ c! `2 mchar pong_buffer[PING_PONG_BCNT]; 5 Q, C8 T. g2 d4 d L: b9 Q3 V% W& g. N. t6 z' [
3 @2 _+ @2 W, C
9 Z1 F' E3 |3 S* F; O( \. x1 r" N' K' w
static void ys_edma3_init()" W9 w# R7 m. W
{* V" e2 }" _8 f# D' s) ]/ Z$ f
EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0};9 ?' M7 K8 B6 B6 z4 I |8 q
EDMA3_DRV_Result result = EDMA3_DRV_SOK;: N0 {- ]( a( k" `8 A
EDMA3_DRV_Handle hEdma; ) X9 O0 ^" Q. i; e* x uint32_t chId = 0;. \6 ]# ?$ _8 y9 F# A
uint32_t tcc = 0;# a1 G9 B% a9 z$ T
3 c- n" e2 i0 f: W! Z# y9 X+ q
print2arm("edma3 driver init...",0); 0 b3 F* A* K! y' ]; _( ~& T# L) I% I+ w0 A+ X1 m
hEdma = edma3init(0,&result); ( l- E9 |; K- l/ k+ Y* q$ ?5 ]( Z4 ] if(hEdma)* x7 j6 _- f2 B2 |6 n' i
{ ( {: ?" t9 y8 b) k U$ q4 [3 } print2arm("edma3init() Passed.",0); ; t a% o# f9 d2 w0 e% O0 K }) T" W6 u" I' g* T( I) {6 B7 R; j
else! C; m- { J- E! |3 \- Q% Y% ^
{- ^( P P. \/ Z. i8 n
print2arm("edma3init() Failed.",0);# o) B! S( H9 A
} 6 r0 E9 \+ Y+ P+ O3 |; D 4 C: Z& |2 H; P, _ if (result == EDMA3_DRV_SOK) $ Q3 b0 N& {" g% K+ ?; m, a& Y7 k {5 S( C3 U4 Q6 i& h8 {6 {2 V
result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, 4 E( m% t+ j& M! ^! d6 b1 h (EDMA3_RM_EventQueue)0,+ c' U0 A! s8 O8 T0 {: y& z
&edma3_isr, NULL); ' f2 p. |6 a$ u8 [# B& ^1 c N7 J: a } F$ l4 G% x. j6 \ . B! I5 l/ y: M X% \ if(result == EDMA3_DRV_SOK) / r. `9 W2 Z; T1 |8 V' \6 `9 @ { ( {2 v' U! \0 a+ ^/ O3 J+ h) B paramSet.srcBIdx = 0;4 V; S5 V# P% B9 R- l; |" x! K
paramSet.destBIdx = 1;/ m, D, R, a8 ]7 X+ s, o0 _( R/ `) W7 x
paramSet.srcCIdx = 0;& G: O6 q1 ?! h! C+ I
paramSet.destCIdx = 0; ; B! j- ~% w( ]2 O4 s paramSet.aCnt = PING_PONG_ACNT;& q/ k \. {: H6 m# Y1 n# p+ P
paramSet.bCnt = PING_PONG_BCNT;0 Y1 }: x; v/ U/ x- b! D
paramSet.cCnt = PING_PONG_CCNT; % @# d/ o' S: @8 D ; X; Q6 S0 t# y/ _. q /* For AB-synchronized transfers, BCNTRLD is not used. */ 0 c! g' W# g4 z. F7 t paramSet.bCntReload = PING_PONG_BCNT; $ M- L3 `- B/ X1 {# F; e' c5 x# a4 o
/* Src in constant mode Dest in INCR modes */ - Q% g/ W( M% a, ` paramSet.opt &= 0xFFFFFFFDu; . C- F2 T$ `) i$ f) b8 o //paramSet.opt &= 0xFFFFFFFCu;: d3 \5 ]1 Z2 x
5 Y9 F' i9 V$ \1 X p4 V /* Program the TCC */ z6 s- x0 N- |
paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK); ) D. | U" ]4 j ~2 R { ) z% {- X+ o& A# F /* Enable Intermediate & Final transfer completion interrupt */' \7 T/ Y8 m/ J, q
paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);/ k% p9 j) v/ p# h# h. B, y' v+ n) e, ?
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);- H2 S% \+ }; V5 |0 M, a4 c* u7 }2 z, G
; _! M+ w0 d' H! w6 s' y /* AB Sync Transfer Mode */: t! j4 x- Q4 z2 B' f6 t# m
paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT); / }7 u$ g% l' H$ y8 p+ m$ i5 Z 1 Q2 q; `( J; f% t
/* Program the source and dest addresses for master DMA channel */ 0 w# X" A( [& o# J0 ^" a paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);# o) \, _' z V. {
paramSet.destAddr = (uint32_t)(ping_buffer);! A' |" f. h; M; G: A& S
4 y G+ S g2 G+ T5 N /* Write to the master DMA channel first. */ 7 h3 b7 x: n! V8 N1 q result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet); 4 U2 ?1 P: r: a" r0 k! Q4 E, m& d9 u2 ` } . d( i* @8 r% ^: r: k( z4 s * o% p3 J5 z! i. f% M0 Q# h+ S# w result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT); a h9 I6 B. d8 C. G0 i . _9 P9 W6 N6 ?7 p n; \
if(result == EDMA3_DRV_SOK) $ Y6 ]+ d' |( G4 m9 Y7 J. n8 Z {8 O3 M. N! g2 h; s
print2arm("edma3 driver init success.",0);! E) ?# Q' h9 I3 N' l, n+ M* ] O; w
} & d1 _9 B! U2 @ O}: T+ f5 R' Y, h# o0 J6 k: m) u
) J4 H4 [% y S6 l3 E' e