|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 4 B5 M" {& m. {/ ~
- [code]EDMA sample test application4 i* R2 c5 D. I' k& G
- /*! M! P3 ^+ u! |$ ?3 ]
- * edma_test.c
& k1 i' W1 ~5 Q4 {7 H - *
& [: V0 Z) A* H - * brief EDMA3 Test Application) B# }" {! d3 \0 U
- *& G: y; a0 P, H5 F- K, S3 m: F
- * This file contains EDMA3 Test code.
# |* ^! b0 u h+ f( z& _) X - *& V2 a9 w* g g L: x6 c4 o
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE7 H1 o% q' x2 B- {
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# E& s' ^9 n9 P
- * TO CHANGE.2 N7 Z% W }6 o/ M; [" c8 [
- *+ V+ D! B1 \ u3 W8 y0 k( [
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
& m R8 U8 L5 p) B* p5 r, i, {4 A7 _ - *$ G6 B& x7 O; V* s
- * This program is free software; you can redistribute it and/or
: k& i. u- y* H/ z+ h0 r, d0 q - * modify it under the terms of the GNU General Public License as) V9 d: t4 {; L' u! E# x; Y" _5 d
- * published by the Free Software Foundation version 2.
# p3 n6 g4 U$ u' s/ Z# R; {" e - *
9 ?/ R6 ]$ \( x; R$ s# x - * This program is distributed "as is" WITHOUT ANY WARRANTY of any2 u# y3 B! V v+ g7 c, n* t
- * kind, whether express or implied; without even the implied warranty- a% }1 z& q! z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* _" Z: l" ?. z5 a4 K" W; D1 I5 l
- * GNU General Public License for more details.# D& u" P% J4 k1 U+ a
- */7 }+ d4 \7 U& h. y
( {5 [$ O% b$ S) x: N m# h, S- #include <linux/module.h>
% ~/ Q# o# f. U0 ^ - #include <linux/init.h>
8 U5 X H; `. P- N - #include <linux/errno.h>8 R1 ~) X0 [3 p! B9 s z; H: ^
- #include <linux/types.h>& O1 |1 \+ U* N8 l% k; G
- #include <linux/interrupt.h>
3 @8 ]) |; x& z8 H( Z - #include <asm/io.h>
) I: E6 ?2 h2 D. ^ - #include <linux/moduleparam.h>
6 [4 x" a B( f3 Y6 G: A5 ?6 ~& b - #include <linux/sysctl.h>/ v) C, [5 X" e% t" c2 A
- #include <linux/mm.h>
- c( Q' e5 L' D6 L - #include <linux/dma-mapping.h>, D, X$ a# X5 a* b1 k k6 ^
- 1 R7 l, i% l* n6 E, b; C L
- #include <mach/memory.h>) S4 h/ [( i4 D7 k4 ]4 @7 R( d
- #include <mach/hardware.h> ^, e6 X7 G& F8 B7 t
- #include <mach/irqs.h>) [& f( T* c% \2 E+ Y% \! ], b
- #include <asm/hardware/edma.h>) \- @& s7 y ~! V8 j
( F0 a1 G5 X- t- #undef EDMA3_DEBUG a& { z3 |) K$ `) h
- /*#define EDMA3_DEBUG*/. q* g5 l1 N" v
- ) i# j/ N. }2 q% ^1 L3 T; m: Q
- #ifdef EDMA3_DEBUG: M) p& D( c4 x: T2 m
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS), w( a% W/ t7 L7 U9 Q- V1 x2 Q
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
' ~- e: q1 j$ y( [ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* f* ]1 }& M: w, ?) m# U8 M. M& O& q
- #else. C6 a+ Y; u; S4 F
- #define DMA_PRINTK( x... )
1 v6 S& x- O/ t5 n8 A6 F - #define DMA_FN_IN
4 r$ _3 w( k2 a8 R - #define DMA_FN_OUT
: F+ g9 C# ^' R t7 |7 z - #endif
. \' e9 {2 A$ s# r) X - 2 }5 k8 G$ L" d2 X( z
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)( X3 z. `! s+ @. Y+ m
- #define STATIC_SHIFT 3
# } Y) i6 q7 P) s* O - #define TCINTEN_SHIFT 20* T w* C. Q' V$ O# ~9 j
- #define ITCINTEN_SHIFT 21
4 _0 B5 A) ?9 k$ z, r& | - #define TCCHEN_SHIFT 22/ N) L2 h4 }' h9 ^: F
- #define ITCCHEN_SHIFT 23
9 w; {9 P# z0 e - 2 q$ h" O7 _* V
- static volatile int irqraised1 = 0;5 Z3 Y# a7 ]* T7 q& J- B6 i
- static volatile int irqraised2 = 0;
6 {( E* N- e3 W6 R0 l
M4 v% W! b/ Y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 E3 _9 x: V( d# P! m6 v+ }
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ |: `( K/ v) _, V$ t - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! m8 o( K: y& ]2 P- z$ B6 p# P
& N; ^ F' G9 V$ T) V- dma_addr_t dmaphyssrc1 = 0;; l) [: Q" o0 }- G7 j
- dma_addr_t dmaphyssrc2 = 0;
. N j6 Y) t, r/ ^4 p. A - dma_addr_t dmaphysdest1 = 0;
4 `( n/ J# T# y) J( e - dma_addr_t dmaphysdest2 = 0;
: Q, [4 Y r; I. y - ; l( {9 z4 _4 t, x. O, W
- char *dmabufsrc1 = NULL;
Y5 F1 o7 V! @* _: q! v' x2 v- y - char *dmabufsrc2 = NULL;# A+ @, b; s3 _: F4 M
- char *dmabufdest1 = NULL;
; D6 }2 H' w1 ]: [ - char *dmabufdest2 = NULL;
8 z& M8 M( o3 V2 j
& U! W) z& h1 `! f# Z1 m2 [6 O6 ^- static int acnt = 512;
# q" s) H% s$ I - static int bcnt = 8;
3 ^: I' J; K. J# f - static int ccnt = 8;. ~" }$ R' a4 i; V6 A* B& P& Q
- $ l6 q2 b% j3 s0 Y+ }3 o
- module_param(acnt, int, S_IRUGO);" _( e9 b5 E' g4 e( A e4 f
- module_param(bcnt, int, S_IRUGO);
7 r( r8 {, s6 b9 M) ?/ | - module_param(ccnt, int, S_IRUGO);
复制代码 : x: I9 }6 S0 h# |% }
( q+ V7 O9 U+ w+ i! S
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用" B" u; M* N6 V% x/ L
arm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。, h. l$ j2 @4 n D) \; D
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。5 M+ X. { M. w v
' w6 D' z+ ?' v
" b: N% }2 Q- K* @2 @. b6 ^8 V+ F |
|