+ ^( y% S, |* n ~ print2arm("edma3 driver init...",0);% Q9 `) o) Q( R. Q' P& h
' W3 Q6 i7 `8 [+ f" K" G: B hEdma = edma3init(0,&result);) U9 v# z4 k% K9 ~4 F2 U7 U: M0 Y, b
if(hEdma)+ K4 n3 _6 r6 z# h7 q
{ 2 `9 u" g6 {; X print2arm("edma3init() Passed.",0);2 E( E$ ]; Q, ~8 U" J5 R
}, q5 w; n9 ], Y: O
else2 i( Z- C6 {) v! h
{ ! F! ^/ g- _; k7 M* X" u" X print2arm("edma3init() Failed.",0); 1 d6 m# e1 g4 ?8 s" ] } } 6 K# N6 I2 u7 Y# Z% ~$ @) r/ h - [; E/ s% k% V
if (result == EDMA3_DRV_SOK) 2 Q+ ]0 } t5 J5 x* Q { 4 T$ K6 H9 C1 ^) ~9 m* b$ H8 y result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc, + k$ Z0 \. j" I9 C' v (EDMA3_RM_EventQueue)0,4 b" @$ q$ j# a% _' q" I" |
&edma3_isr, NULL);% L5 g7 x: ?6 R+ A- J+ V
}7 o7 {8 s1 W6 Y8 U
+ i2 _- o) }7 {0 W: I8 D if(result == EDMA3_DRV_SOK) 0 A2 ~: l4 e, X { ) I; o3 t8 r$ D- g/ k6 k6 A paramSet.srcBIdx = 0;. T- E+ ?* \3 [# S8 `
paramSet.destBIdx = 1; # o" \8 k0 h0 J5 m4 d V( j. K* E% _ paramSet.srcCIdx = 0;$ u$ a5 q0 s0 l \! v, a$ K) w( U
paramSet.destCIdx = 0; 2 S7 D$ B( l: K: Z paramSet.aCnt = PING_PONG_ACNT; " {0 ~$ P" l+ Z) y. i# t paramSet.bCnt = PING_PONG_BCNT;# R2 B; c5 Q# @& H3 Q1 S9 g+ H
paramSet.cCnt = PING_PONG_CCNT;; C. z4 x R- T* {4 C$ D6 K. Y
1 f9 O8 s/ U. j
/* For AB-synchronized transfers, BCNTRLD is not used. */1 R" [, G! c+ |+ N
paramSet.bCntReload = PING_PONG_BCNT;' c: {3 G" D4 ]2 N3 K
1 r \/ f3 M( E/ H /* Src in constant mode Dest in INCR modes */ c- X9 Y) |8 w paramSet.opt &= 0xFFFFFFFDu;. ^) w8 i; E* ^3 e
//paramSet.opt &= 0xFFFFFFFCu; 1 }/ H. C9 s' ?6 b ! E$ @: t+ x( M' I# s
/* Program the TCC */ 9 x4 i8 ]7 j$ j4 z& d- M paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK); 7 A2 }/ \# k/ U7 Q; \& X0 x6 W( E
/* Enable Intermediate & Final transfer completion interrupt */ . \) ?/ y; f6 @ t/ h6 q- c) |! U# {8 j paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);, _8 r6 N% A* c' A4 y% P
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);4 ^$ p5 @1 U C% U x4 C
4 P) ^ B7 Y# @! @9 c /* AB Sync Transfer Mode */ # n! q2 U5 R2 e: E8 r$ a paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);$ q K! q5 O( t- J& m6 I
% m- q6 |& t% O /* Program the source and dest addresses for master DMA channel */ 2 s$ g' r% Q, s; A7 g paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C); 6 o5 {6 J$ Z, N. d paramSet.destAddr = (uint32_t)(ping_buffer);: h" L6 J: W* ]8 H/ a
1 X5 ]) K7 t# q& U, Q8 P: o /* Write to the master DMA channel first. */; A/ ?7 F# i& D" r, V! _$ q" ~
result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet);/ |, E6 }) k) `; H- D
} 3 N( q5 D" F/ B" K, S4 u$ c' M; i4 l" i
result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT); 1 J% x: t0 v$ w. |2 | ' B# x; u- w& t9 u! w4 N
if(result == EDMA3_DRV_SOK) 2 i$ e! ?1 Y, z3 T9 ?0 J( r- ^- I
{0 s/ L9 E( s) k4 }5 `/ l
print2arm("edma3 driver init success.",0);6 c6 q. W; C8 \ ` u6 n& `3 b. J0 ^
} . p* @% M# [# g* `1 R9 D
} 0 x- Y& s$ O4 t0 x6 P; B- i/ W# X' [% i* ^6 m
- t, d2 ^( f3 k# O4 v6 w# o
EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。 2 B4 H9 W6 h- k, n) } 2 g9 t2 X2 L6 q$ f3 u1 w/ p& J2 K% V" l* e' K9 D7 B8 g! v 作者: Lewis 时间: 2015-4-24 10:47
每次DMA传输完成后都要再次使能传输作者: silent123 时间: 2015-4-29 23:25