; N/ E7 m' m7 D) S! t3 A/* OPT Field specific defines */4 P" W; h* W) Q$ Y, L' R$ j
#define OPT_SYNCDIM_SHIFT (0x00000002u) : L. a' N' i0 T+ x' ~$ o$ f N#define OPT_TCC_MASK (0x0003F000u). x* \) p8 ^# H8 m
#define OPT_TCC_SHIFT (0x0000000Cu)0 w5 s+ n& Y( \; Z' l
#define OPT_ITCINTEN_SHIFT (0x00000015u) . s0 A% ^! K% ]# B/ ?2 O3 E: j#define OPT_TCINTEN_SHIFT (0x00000014u) / m( p/ ~0 v# F; u! n+ {6 G & K- [9 ~) n1 n2 i! vchar ping_buffer[PING_PONG_BCNT]; % Q" u3 j! Y% Q$ n; X* @char pong_buffer[PING_PONG_BCNT]; ) i8 a; z& y# x, j! X% N. u6 t' I/ L; l+ ]3 K7 w) n/ Z8 u1 z
4 A' Z& U% D6 u' R4 ]
! C* Y- ]2 Y( L4 d7 u1 O9 y$ d+ N # [! U+ W' S" I$ rstatic void ys_edma3_init()# P: R% S( L* G9 ^) E
{& l$ x* E3 o: f
EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0}; $ i5 W7 i' r8 R EDMA3_DRV_Result result = EDMA3_DRV_SOK;. ]- `2 [5 t4 j6 M( b. a8 ^& G
EDMA3_DRV_Handle hEdma;) ~( c/ U# p8 @# D, V( {; V) q+ Y
uint32_t chId = 0;6 y0 M5 F" y- ^& ^+ M
uint32_t tcc = 0; 9 ?6 U. r$ T0 t- @ & J' R/ O* ~ S print2arm("edma3 driver init...",0); 2 Q$ v/ T0 c6 _) W8 P6 x$ e$ e( j- ^ $ N5 g$ E8 W& m hEdma = edma3init(0,&result); ; r! A% m( W$ h4 \6 A) { if(hEdma)# M0 \- X$ e# x/ G5 D2 r7 r
{ , I! j1 ~# ]2 H" e. n. M print2arm("edma3init() Passed.",0);0 n5 Y+ F0 B. V1 m! Q
}+ Z2 m7 ~" c, P! e4 J- u; e
else6 y" I# w9 A. B
{ ! x1 R3 L8 ?: D: _/ J, O print2arm("edma3init() Failed.",0);) x* ~" v. w9 h, I/ x, W
}, D' @( r" ~4 M3 |7 z
9 t) S7 ]6 w! h" f
if (result == EDMA3_DRV_SOK)3 k/ F$ n& d3 I4 i: O1 T
{ 8 c! a q, g# [$ ]- A# K" C/ X result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc,1 G9 k/ @; y& I$ n% l( q2 w
(EDMA3_RM_EventQueue)0,3 r5 K, ~* p$ n
&edma3_isr, NULL); 8 X9 u' f% b6 T } - [( j- n, v6 m d$ o2 E" L2 Q0 V3 I6 N0 z2 u( K if(result == EDMA3_DRV_SOK)2 l# x& _; q6 Z3 N# _, s
{9 C' @) G7 C3 o9 I$ F( ]
paramSet.srcBIdx = 0;* U- K* V# D/ x( r' L1 I! s: i) z
paramSet.destBIdx = 1;1 n( K' ~7 M; @7 q0 m
paramSet.srcCIdx = 0;- K( @$ d% J7 d+ u2 b% V1 \2 R0 J& H' S
paramSet.destCIdx = 0;8 p7 @& Y3 e* o" A( H
paramSet.aCnt = PING_PONG_ACNT;3 d! C: x6 |. a+ y
paramSet.bCnt = PING_PONG_BCNT; . A: _* q! r. E8 p paramSet.cCnt = PING_PONG_CCNT; 4 X! @$ j6 a( m, s4 Z" E7 \ 1 d) W2 F' o0 d3 M6 G$ L% B1 H
/* For AB-synchronized transfers, BCNTRLD is not used. */ . l+ Y7 @% L9 x9 _4 w, m paramSet.bCntReload = PING_PONG_BCNT;9 O4 Y% l1 z$ D& _4 P2 o& |
m: [+ Z9 G; i, ? /* Src in constant mode Dest in INCR modes */; a7 i$ f8 j/ M D. j# b
paramSet.opt &= 0xFFFFFFFDu;9 G8 c9 K8 E' c* L
//paramSet.opt &= 0xFFFFFFFCu;4 r! h! ^; K$ n3 h
" J2 E* ~1 g+ ^' C3 w /* Program the TCC */ % O k3 n% E- G( {$ g paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK); + J5 K5 \1 N. F4 y! L8 x( A8 }1 n0 j! t+ n3 f: f; d5 L
/* Enable Intermediate & Final transfer completion interrupt */ % |/ C F5 H0 i paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);4 m9 Z% E' _* h* c
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);) }" p. d4 q( |2 f9 `4 U+ Z; {
( f) r, a( t+ t! B- h /* AB Sync Transfer Mode *// \. b* I, j( Q" N' m8 B A, W4 r) ?+ I
paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);$ X7 e2 y5 ~! m' ?1 [0 ~
% Q- H+ _* r3 z2 i: i /* Program the source and dest addresses for master DMA channel */4 H7 E! Z& _$ x, Z
paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C); 0 F) Y, |" o! g- m5 B paramSet.destAddr = (uint32_t)(ping_buffer); , D9 b+ L8 r h/ r- {6 Q9 P4 }7 ?& S' F! [0 X2 u/ { ?7 K# i
/* Write to the master DMA channel first. */1 Q( d- |8 a9 u; J
result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet);/ B) D5 G$ {+ a Q: Z" x
} # @* v K9 u8 T7 T% o0 [3 v2 R
4 s( ?3 r* ?5 K. U) n& R5 s
result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT);# b% l; E; a' B5 E
# y+ v# `5 F3 j) i# Z r if(result == EDMA3_DRV_SOK) 3 R/ i2 l& {( c" N9 g' E" o { % c4 r7 v Z' Y print2arm("edma3 driver init success.",0);( p' J/ |/ X: [; G8 q, E) |2 A& `
} + A. D5 y6 D, G- C" M
} 9 q) S- b M- K5 P) ?& ~/ v 8 P, n, i9 \( \4 z! q& Y% G* u, o6 P1 w) k9 O) {5 G8 f
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。9 k7 N- R, U( }9 K9 l
- [9 b! _6 f) d# d) D * ?6 @' d' \. O7 [4 G作者: Lewis 时间: 2015-4-24 10:47
每次DMA传输完成后都要再次使能传输作者: silent123 时间: 2015-4-29 23:25