|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 - T: A. n: l- n4 t) @
- [code]EDMA sample test application
5 }, t) y# ~' [. `* z+ j - /*
$ X3 V3 ?5 h5 R; t# O2 F* e1 R4 f - * edma_test.c
- t$ T) M: T2 _" t' [. P* \ - *1 o$ |3 @) `! i# z( R& A
- * brief EDMA3 Test Application
- y/ |$ x6 z7 t/ n' S! j' `8 g R - *
5 Z6 {, @( R6 n, M. O - * This file contains EDMA3 Test code.
* f6 f- O# Z2 a8 v3 e% v4 E) V- b, T - *1 A f+ @ W# p0 x
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE, y9 U% Y7 m4 Y- b+ z# ?3 G) G
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT2 c7 _0 U/ L& U6 H7 V- A0 b
- * TO CHANGE.
/ W* @9 h7 X7 { T. d: @' m4 T) p, X - *
" a* w' t$ g2 W - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ h* U( C# d5 g7 q5 K - *
) I5 D( L6 L& Z6 W9 M5 I - * This program is free software; you can redistribute it and/or+ _$ t5 E% }7 v( R/ v
- * modify it under the terms of the GNU General Public License as1 p! H! R5 K! {$ m9 @
- * published by the Free Software Foundation version 2." C, O& t H0 Y0 v0 |, {1 U; Y
- *, T0 ^6 h* R, _+ s) e+ m# S) a
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any( O; E5 E1 W* u& r) i
- * kind, whether express or implied; without even the implied warranty# T1 l& `2 T% H( r+ ]0 j+ b: V- p
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 e( }( C" |; t$ S, @ - * GNU General Public License for more details., O, @! X4 A( g( \* n2 Y
- */! \* H" B6 E# h
- 4 Q2 k' Q, I4 Y1 n9 Y& U1 \
- #include <linux/module.h>& R' T" E1 d. Y2 @
- #include <linux/init.h>
4 P! F2 F1 @6 { - #include <linux/errno.h>; o* m, u3 L7 `) o+ e
- #include <linux/types.h>$ m" v0 A" `. D, r! P9 _: H
- #include <linux/interrupt.h>& u" Q8 V. K) }/ i0 \7 V' j
- #include <asm/io.h>; k% [, k: U- K
- #include <linux/moduleparam.h>
" c, |1 e! d G/ L; R$ D - #include <linux/sysctl.h>- _0 [1 h6 d9 l3 V, h
- #include <linux/mm.h>, N% P- ?% F/ I9 k3 x& e
- #include <linux/dma-mapping.h>
& w* N7 {; a' R7 [, P
% B8 H/ Y+ R* C& a- #include <mach/memory.h> a D3 H3 j3 a, b# F9 R
- #include <mach/hardware.h>7 K: V, P* r* l1 U* T
- #include <mach/irqs.h>
6 H- E% |$ l% H x/ B - #include <asm/hardware/edma.h>! e& I, R/ I* s$ y2 g9 p& y+ \! H( h
- 4 x1 ?0 }- `5 P
- #undef EDMA3_DEBUG+ ~: _5 r: D; U! e
- /*#define EDMA3_DEBUG*// l- i9 a `5 s3 o- h+ w* v
8 d. d! ^ x9 Q, U/ [6 F: P- #ifdef EDMA3_DEBUG
* u$ u* s* h/ J2 w5 D - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 V. t& P9 L. V: ?# Z - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)3 |, @* z. X3 d: e# ]
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" H+ U( X8 t; a' |/ j
- #else
3 {( Q1 P! @5 _ - #define DMA_PRINTK( x... )/ M% u/ o1 V0 ?5 @$ q
- #define DMA_FN_IN. j8 a2 z) f3 d( Q5 c# ^
- #define DMA_FN_OUT
3 t. u$ [9 }. x2 |# \. G, P - #endif
1 R7 x5 ^' B8 R - : d0 N$ ^: M# q( b7 @
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ \% D7 ?! Q E( {' U! d
- #define STATIC_SHIFT 31 |2 A- ^- E6 M4 b. Y
- #define TCINTEN_SHIFT 20 d% N$ s1 l- D
- #define ITCINTEN_SHIFT 21
, V+ [: K8 @% E* ^' v - #define TCCHEN_SHIFT 220 l9 v! g: f ?- Z. V
- #define ITCCHEN_SHIFT 23 ]- X/ O4 F0 {
- 0 u* A# i& h% F) j7 p/ `
- static volatile int irqraised1 = 0;
w; p& O+ y1 n2 Y) p - static volatile int irqraised2 = 0;+ `# l/ y" r) q( n4 |6 v
) ?- w% X& @$ ^& N6 ^( T- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! e) E1 ]# [: n- d9 V7 r
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 `; U* n* c7 k/ ~- ]
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' E" X+ v8 s Z% ^$ Z( O" m
- 7 u3 S8 A* B7 q2 ]7 c
- dma_addr_t dmaphyssrc1 = 0;
% l4 D. a; }% \& f& b - dma_addr_t dmaphyssrc2 = 0;- F0 `9 f2 D# Y; C
- dma_addr_t dmaphysdest1 = 0;
7 y U8 a f$ `5 d7 C - dma_addr_t dmaphysdest2 = 0;
5 r C- [7 z3 A; {" J
# t8 A7 F. V0 {3 x7 ~- F- char *dmabufsrc1 = NULL;
5 \5 g% i! a; k6 U, I! Y4 x - char *dmabufsrc2 = NULL;
" L! H( f' T: i2 h0 |. f; e; p - char *dmabufdest1 = NULL;
+ Z* ^2 E6 M8 W# z - char *dmabufdest2 = NULL;$ j* R" ]3 @9 f' C: I
" u3 c( ~2 F7 h- static int acnt = 512;
5 c2 ]2 A2 R, x% P" j - static int bcnt = 8;& u6 r5 C3 S, w! U/ Q8 t
- static int ccnt = 8;! J( ^) a( C$ c3 _: p2 F8 n
- 6 ^! G* T3 `6 k* z @$ V8 A
- module_param(acnt, int, S_IRUGO);
9 O" k3 \* k% J' W/ E - module_param(bcnt, int, S_IRUGO);
: W. Q8 \1 V8 O1 M) W - module_param(ccnt, int, S_IRUGO);
复制代码 ' n6 f4 X. m9 `5 m, M k# L3 e( W
. U; s/ ?* W. T" @) x1 I4 |2 t
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 L) `7 [- `$ w6 \/ s4 ^( darm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ c. c# i- U6 @; c* n5 Q
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。" G, ^, U* ] _/ h& A) V) p1 R: \
. Y% l6 z3 {* a8 o5 ]5 j ]
+ b" b5 P5 X0 v- D& l |
|