2 d8 f, k% _4 n* a9 w/* OPT Field specific defines */ " g& O' m3 m) n/ `#define OPT_SYNCDIM_SHIFT (0x00000002u)& b2 s1 b( `8 K; `; E
#define OPT_TCC_MASK (0x0003F000u) 7 |) W9 E- X: X" ^#define OPT_TCC_SHIFT (0x0000000Cu) 7 M, L# m- E4 S#define OPT_ITCINTEN_SHIFT (0x00000015u); H' v, `8 L x- U
#define OPT_TCINTEN_SHIFT (0x00000014u)* f. ]$ z) T) s( R# F) I4 f
' E5 a1 E8 i5 c% V- i5 w0 y5 \
char ping_buffer[PING_PONG_BCNT]; $ d8 `# j+ O$ g! ^/ v; tchar pong_buffer[PING_PONG_BCNT]; 8 k' d2 \( X. R6 [/ J( Q/ c $ e1 [6 P. N f. R5 ~9 M9 z * h; t2 W. `5 T) @) I/ `7 X) M: z 6 @5 ^8 p$ e, v( x; P & y5 b# U" X" p; H0 `; istatic void ys_edma3_init() 8 \" J5 H9 Y6 N- J{- h K Y) `' ?
EDMA3_DRV_PaRAMRegs paramSet = {0,0,0,0,0,0,0,0,0,0,0,0}; # g' H6 `) v7 {% p: ~ EDMA3_DRV_Result result = EDMA3_DRV_SOK; 1 I5 G* s6 y1 y: Z0 A/ E EDMA3_DRV_Handle hEdma;1 s5 Y1 u/ c* R1 A9 l4 o
uint32_t chId = 0;2 R! m4 A3 f) B4 u
uint32_t tcc = 0; ! i! R1 ^3 M- H8 R# q) q ! }) G2 w; }! Z0 a4 c4 e print2arm("edma3 driver init...",0); / q4 M0 S+ T; k3 ] 7 U+ n; @& K! Y9 g" L! U hEdma = edma3init(0,&result);# ^% k- ~- S9 Y
if(hEdma)3 P" {8 F- F1 r. R B1 Z) b7 t
{ 2 o2 ^$ L( `& X+ |$ l* C print2arm("edma3init() Passed.",0);. M4 x" d+ Q5 t3 J, _+ T1 Q
} ( K2 U+ B% z$ I7 b0 q" s; M else 2 U. t0 Q2 x/ Z9 h8 v { 8 U$ D/ |; z8 p. T/ D print2arm("edma3init() Failed.",0);3 l( n9 |" P; i# k% x
}+ \$ r/ B" l2 x2 K" u. |- P
- {7 k2 v5 r' c8 N
if (result == EDMA3_DRV_SOK)0 c7 W/ C! \' k r) n& S
{( Y& E! B4 e, W, ?4 Y- V5 e# M
result = EDMA3_DRV_requestChannel (hEdma, &chId, &tcc," @9 |1 j1 m: V* | Z
(EDMA3_RM_EventQueue)0, J& y" S! }0 e; t &edma3_isr, NULL); ! l1 q- E+ ]$ d {: s" T% v } , T1 w- u/ n, H* k- ~ / V3 o8 C* ]$ z if(result == EDMA3_DRV_SOK)' ~$ d) H- h) A5 B; @1 T1 Q
{% A! T0 X% q" M( R8 g
paramSet.srcBIdx = 0; # I0 T4 V+ h+ c( p% s9 H: Y! y: G paramSet.destBIdx = 1; 5 _) Q* ]/ q" z. T paramSet.srcCIdx = 0;. z) p# O0 y# R2 k/ T+ P
paramSet.destCIdx = 0; 8 f8 S8 r; c# P; Y2 H8 y+ j paramSet.aCnt = PING_PONG_ACNT;0 t% Z$ I4 k, T% Y
paramSet.bCnt = PING_PONG_BCNT;( O; [. M# F8 J& g, L+ _2 M! V ~$ N
paramSet.cCnt = PING_PONG_CCNT;0 b6 b% d, I2 _; V8 Z) M( X
) T o, y6 r: i& a& ]* D, Y1 o /* For AB-synchronized transfers, BCNTRLD is not used. */ * S0 J1 v/ P2 n& C8 @ paramSet.bCntReload = PING_PONG_BCNT;' Q/ S7 ?7 n5 U) t8 B& `
+ R" ^. U: M+ V; c0 {$ L /* Src in constant mode Dest in INCR modes */ 9 V' h* X: u/ D9 h paramSet.opt &= 0xFFFFFFFDu;' U7 ^. D" O% s
//paramSet.opt &= 0xFFFFFFFCu;8 j( f0 i8 d! F# m
: o/ k* K0 z* x \- Z+ j- S( L* o
/* Program the TCC */ " w/ n8 ]8 o$ s paramSet.opt |= ((tcc << OPT_TCC_SHIFT) & OPT_TCC_MASK); 7 E/ {, W5 R6 Z9 H) K( {- y, }* B: L! ]
/* Enable Intermediate & Final transfer completion interrupt */ $ Q3 L; j, \: p7 `4 { paramSet.opt |= (1 << OPT_ITCINTEN_SHIFT);/ `% G5 j# {, w7 S4 L, k
paramSet.opt |= (1 << OPT_TCINTEN_SHIFT);/ U/ v7 D6 t8 `; h* ?" W
' \- |: D/ \* I+ V. W+ { /* AB Sync Transfer Mode */ 4 z/ |& |5 }% q( l paramSet.opt |= (1 << OPT_SYNCDIM_SHIFT);. r( d* ? T& r/ w1 \
1 E( x) v0 W. i" P, H2 t
/* Program the source and dest addresses for master DMA channel */ $ ]( H( M) `; M# z7 E, s paramSet.srcAddr = (uint32_t)(MCASP_BASEADDR+0X029C);% R: Q: Q" ^ U2 `8 o+ v
paramSet.destAddr = (uint32_t)(ping_buffer);( a! D. |- A. G; C$ E$ O+ v7 b/ ]' b
. m" H9 p, u1 D/ X0 k _# l" d /* Write to the master DMA channel first. */ / H9 A6 p# Y9 L4 P7 j# P4 C result = EDMA3_DRV_setPaRAM(hEdma, chId, ¶mSet);1 l4 f1 ]2 {. r- R" A7 O( F- d
} ( D9 N$ V& S- U3 X3 p
2 Y9 }; Y/ @; f ]5 W" ?! d
result = EDMA3_DRV_enableTransfer(hEdma,chId,EDMA3_DRV_TRIG_MODE_EVENT); 2 I7 \& \/ H0 E5 u# C $ [. u) z* s# P. t5 P4 ^$ } if(result == EDMA3_DRV_SOK) 2 ] z$ J9 a3 w8 L
{ 1 B5 v3 g. d' f6 |) ^, C* E3 Z print2arm("edma3 driver init success.",0); ) i# @$ g. G. Z" h# r } 6 r+ ^5 `. U% I3 F' [6 k; B! c} ) M6 F) d4 j3 x6 D' q" z, L& E7 g; R5 ~5 z
) L; U! @! ?) M0 ~EDMA3的配置就这个函数,是由MCASP接收事件触发EDMA3传输的,中断函数edma3_isr只能进去一次,请大家帮忙看看哪里有问题。。。 * J( D/ b$ t0 } u 9 \! l' _% y4 d+ z1 T# ` ?' d. y& I) h c0 o作者: Lewis 时间: 2015-4-24 10:47
每次DMA传输完成后都要再次使能传输作者: silent123 时间: 2015-4-29 23:25