|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : a u) j1 v3 [1 ~
- [code]EDMA sample test application$ O4 S9 k4 K9 p$ } E+ s
- /* h( }# r9 W8 S5 L. [# N" U
- * edma_test.c
3 H3 ^9 a# |7 @+ L5 i* o - *
* B7 q! b3 X" T/ i9 W - * brief EDMA3 Test Application
) P5 w3 C0 b2 Y7 V - *
6 [) }# z( j. U* T; i& G - * This file contains EDMA3 Test code.) ~6 T! X: L& m. m
- *
& e! M. f) R5 W - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 D% u* N9 T" x/ A y& t
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT/ P* Y# T2 M% p/ _- e9 R$ \' W$ L
- * TO CHANGE.
. z0 S5 x0 w! u, ^% }. C. I - *3 I& _: p5 D4 B; U: `
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
V a$ Q" j d7 Y8 `; o4 x% A) K - *
1 n, n( \- N$ y& P - * This program is free software; you can redistribute it and/or
/ W! G5 H8 z, s3 h - * modify it under the terms of the GNU General Public License as; A& I0 d) e$ M" \+ l. v
- * published by the Free Software Foundation version 2.
! x* n# M1 \/ F1 N5 `+ G - *8 ~" @) S( j$ H% g
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any9 e4 f& \7 n0 g- H& E( [
- * kind, whether express or implied; without even the implied warranty2 ~ E* n. `2 z, i
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the6 }6 r: x0 x0 s R0 V1 g
- * GNU General Public License for more details.$ w+ M. k+ p+ X0 k! B A
- */
9 m0 u8 g t5 S$ V. u6 n( M - & [1 N0 q6 O& o! s
- #include <linux/module.h>' o7 E3 q- t9 g! D0 [$ S
- #include <linux/init.h>
% a3 Y4 p! A: p) Y& v/ @ - #include <linux/errno.h>
# j$ v- } M# b* K; o. v - #include <linux/types.h>( r, K) {: B9 s5 j" q& J2 ^+ r
- #include <linux/interrupt.h>
! I" R8 m! @* d# @ - #include <asm/io.h>2 v0 P. A. L9 x# Y3 _8 ?+ r
- #include <linux/moduleparam.h>
2 e5 _0 W& `0 R* V$ e - #include <linux/sysctl.h># K9 x% Q9 t M+ k3 Y! f
- #include <linux/mm.h>
4 d- t# q. ?- @9 n - #include <linux/dma-mapping.h>3 E2 K: I6 v* K7 Q7 e
: f% r0 k2 |; Q* R/ ~" p$ d3 q- #include <mach/memory.h>
4 _( k6 O8 u- C: l - #include <mach/hardware.h>
3 K9 s8 z0 W7 j; L6 j# X5 h5 S - #include <mach/irqs.h>6 n1 s; {5 f- `, j& R
- #include <asm/hardware/edma.h>/ w: n/ G. w) @# I
$ O8 _$ u3 [5 p! Y$ k- #undef EDMA3_DEBUG% \( m; E" K/ i3 ~0 x& L' A
- /*#define EDMA3_DEBUG*/
4 J+ s9 b. x7 y& y5 V# w3 l, V! k - . f1 ^% q6 T: L5 r( V* R
- #ifdef EDMA3_DEBUG/ S, r @' O1 ?; q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) i+ S* |4 S: w% B/ G/ }( J; ^ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
) F# @2 s! |* w - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
L# v' z; y1 Z - #else
' h. C. k6 ^( X. z% X& D - #define DMA_PRINTK( x... ). T/ ]. y' B) f3 G5 f9 K
- #define DMA_FN_IN2 p% B2 W1 G: d6 r9 j. f
- #define DMA_FN_OUT: \0 e" c/ V; v( J
- #endif
u7 x* n- v4 s% G% o) C" @5 P4 @5 A - # D2 x0 w8 g; d5 Q( {, \: L- P
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" j1 D' K$ e2 F) x& m9 r, V9 K6 v5 h# K - #define STATIC_SHIFT 3# Q s0 J6 x/ \- U, R
- #define TCINTEN_SHIFT 20% x2 Q5 @5 G3 G* F, S1 e; a0 U% L2 g
- #define ITCINTEN_SHIFT 21# k- K+ o, O* @/ l% P* r/ }" b0 \3 J
- #define TCCHEN_SHIFT 22
( T3 ^! o5 ?- J - #define ITCCHEN_SHIFT 23' G* L' s7 P; a- V# M( m
) z) ^1 x1 ^. m- static volatile int irqraised1 = 0;4 i& N! p' P0 R, q/ S/ W
- static volatile int irqraised2 = 0;( S; U1 s& J" B3 b7 W8 Z
- # _# t& G1 m2 K
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, h/ J, q# b/ n - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); |% M% c3 G( {5 ?* M3 K2 f
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 W5 }: z9 e# t q s& h4 _5 ~
/ `- }) M2 E( k/ b& b1 V2 `- dma_addr_t dmaphyssrc1 = 0;7 u) ^9 F1 v, `
- dma_addr_t dmaphyssrc2 = 0;$ f! r+ n6 q' j6 ~
- dma_addr_t dmaphysdest1 = 0;
, D3 r$ t" _+ W - dma_addr_t dmaphysdest2 = 0;
* ^% w6 H+ A3 S! b0 P/ l/ ]$ n5 w - / e% Y1 n2 i- O/ `$ Z' S
- char *dmabufsrc1 = NULL;
9 y. f9 C$ E0 T9 r1 B [. S - char *dmabufsrc2 = NULL;9 V# \( p! p& @& v2 O6 f
- char *dmabufdest1 = NULL;3 d3 W h$ O) z! w1 y, z* m
- char *dmabufdest2 = NULL;
( w6 U9 `- Q. _
* u6 i% y+ ^& R X- static int acnt = 512;! f5 e& a& T+ z R( J* f
- static int bcnt = 8;
& v3 y3 G9 Z3 s4 S - static int ccnt = 8;( \; H/ K- p: w' n" T
4 \# m% b# ^$ |0 n; E- module_param(acnt, int, S_IRUGO);! |) e5 X: c: W% O# k
- module_param(bcnt, int, S_IRUGO);) T/ u" G- D, z# S9 C
- module_param(ccnt, int, S_IRUGO);
复制代码 7 W. N- M2 @8 P* u
% v5 t" q7 Q% W7 N+ d' c ~5 O7 G5 c- D
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; G! d/ X6 r3 B) T2 qarm-none-linux-gnueabi-gcc -I /home/tl/omapl138/linux-3.3/arch/arm/include -I /home/tl/omapl138/linux-3.3/include EDMA3test.cpp -o EDMA3这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
: v+ j% K4 y1 {: c1 } i7 b 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。/ o! R2 j* v6 J) M2 ~
; @% f8 @+ p0 U4 p
6 _% r2 e# x& ?) }$ b% j |
|