|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 U; K' J O+ G* v- [code]EDMA sample test application
7 m( E5 B! m1 Q+ U - /*
7 ^. Z- f0 |# ]8 w: d4 _) H5 \. x - * edma_test.c. ? K2 N) I3 _9 G9 Q
- *
- d/ x3 I" ?2 g+ ^ - * brief EDMA3 Test Application% j7 \6 i9 @ W5 l0 d
- *6 l% O/ V& C$ [5 J& J7 y
- * This file contains EDMA3 Test code.% n2 R) Q) q* f+ a9 p$ b
- *
$ A s: B, @9 f6 b( a7 U1 ] - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 @/ L4 S( z9 U1 @1 X - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT; ~% e' ^6 P, J
- * TO CHANGE.. S6 W8 X2 q! u
- *
( w! [* N# _: \# ` - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
1 [: H w j+ d# x9 |1 w" P - *: w4 L1 A4 R9 g2 b3 e/ t
- * This program is free software; you can redistribute it and/or
# v. Z8 j0 }0 M' R - * modify it under the terms of the GNU General Public License as. {+ O( {7 Q) y( G! r7 V; n
- * published by the Free Software Foundation version 2.. B# ^5 C: y' p" U. a: o- Y
- *
9 `. N& r" b. E6 G+ H8 b4 U - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" R0 [2 L3 }0 C' L) v - * kind, whether express or implied; without even the implied warranty3 r$ e, L4 o) P {2 o
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- k8 }+ e" S6 H4 Q4 D6 { X$ L9 ]
- * GNU General Public License for more details.
+ N# [1 i9 L( ]6 C7 b5 p - */
' O' o% Y* Z0 D0 T: A - + M, _2 t$ z) `) ~& X
- #include <linux/module.h>9 O5 Z4 k5 p* [' C' m
- #include <linux/init.h>/ m3 M1 g# N" C/ @' ~ c
- #include <linux/errno.h>
* `4 I8 x$ P( [2 i: j - #include <linux/types.h>
4 G0 I& s! a- k" E; V- W' `' z - #include <linux/interrupt.h>& Q$ d4 K; q' |% N
- #include <asm/io.h>7 e' F2 S9 |, c! z* t# W* I
- #include <linux/moduleparam.h>" X. F) e) H; P# `& l
- #include <linux/sysctl.h>9 a; E: O5 Q+ {9 ]( \' A
- #include <linux/mm.h>9 m; _+ @9 L& [, C0 ] `4 t' M" U
- #include <linux/dma-mapping.h>
) h y- f- [( c$ d6 r
+ O; ?7 [* t* n4 Z3 E+ P1 o) d- #include <mach/memory.h>
7 e" `# k/ q2 |% X% E0 U - #include <mach/hardware.h>1 e7 Q* W6 s) H" a
- #include <mach/irqs.h># B; e! t. O9 _3 r
- #include <asm/hardware/edma.h>
. ~3 h0 I: Q7 }- L, z3 i
$ X* S% X+ r- b0 E- #undef EDMA3_DEBUG4 q/ A$ r# I6 I0 V! V- W0 A q
- /*#define EDMA3_DEBUG*/
2 \- p9 O' J/ t' y, `8 v& v0 n
9 K$ E+ Y4 ~- U- #ifdef EDMA3_DEBUG
2 f/ l" B; H; P) B0 T5 A+ @/ u - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)6 p4 a! G% N! z5 v% q
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)' R a" ?) X5 v, @) ]
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
/ R7 Q" V- b1 P: g% e% j - #else7 x" E6 j$ b, j) G
- #define DMA_PRINTK( x... )
0 X) }- ~- m1 o3 j2 { - #define DMA_FN_IN* l$ b E( j D
- #define DMA_FN_OUT
+ c& I& K' u7 d4 A% ~" q, c - #endif r! c) j" s( k0 P
0 r& o6 O2 i: `- #define MAX_DMA_TRANSFER_IN_BYTES (32768). ]2 Z+ w) p6 S( P% f
- #define STATIC_SHIFT 3
7 a, E" Y8 ?" x0 [ - #define TCINTEN_SHIFT 20
8 [6 N' |' ^/ z: V - #define ITCINTEN_SHIFT 21
5 a$ p( a- A0 c* m - #define TCCHEN_SHIFT 22
* h( l8 d$ P3 @5 P( a, a# c - #define ITCCHEN_SHIFT 23# B5 k; V+ h+ n( q5 d, e
- ; o, A% ]1 A0 W& T* p% q v
- static volatile int irqraised1 = 0;
7 ?. y/ c: l# Y1 d1 \ - static volatile int irqraised2 = 0;+ ]& j& y. ~ o! E2 ?
- 5 q% v. t0 @% o+ [" N
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, z: z" o. J4 ?' u
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 o2 D" k2 b. [6 z
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; f' G5 W( A+ b+ o& V+ a) i
& B9 o9 e" k$ Y" }1 ^: l/ b- dma_addr_t dmaphyssrc1 = 0;
7 G+ ~/ F9 V) E3 @0 S& j3 L( V - dma_addr_t dmaphyssrc2 = 0;
8 E3 c5 K: l+ O' j. y1 l% s2 C7 \: g4 R - dma_addr_t dmaphysdest1 = 0;# D$ I5 d6 s( k5 ~9 j
- dma_addr_t dmaphysdest2 = 0;4 D" I$ o* e2 E6 d t; Z7 Y
- - f8 c2 ^: ?% T5 l8 y* e
- char *dmabufsrc1 = NULL;7 w( u7 x" F1 l5 x/ O' u. \
- char *dmabufsrc2 = NULL;
6 T, m$ r3 K" Z" {" R4 W - char *dmabufdest1 = NULL;
( H. t; L9 H. W4 z - char *dmabufdest2 = NULL;' [' F* B; p/ G
. j% K i" g1 @" a. F: N3 C% S- static int acnt = 512;
$ E# H; Z0 }9 N4 p' x - static int bcnt = 8;
, H( t9 F) o9 e0 t - static int ccnt = 8;
3 I( v, ^# @3 g
2 Y0 e) c; H) ?& Y6 C- module_param(acnt, int, S_IRUGO);
$ x# z, v, K1 F! y - module_param(bcnt, int, S_IRUGO);
) i- O& f4 U/ T5 |. j( E$ { - module_param(ccnt, int, S_IRUGO);
复制代码 : {- F; z' \8 t2 b2 O8 z
$ H- i% p9 C' }: c' Z' o1 d @
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用0 R. v: M: C( k+ z( K* d7 D$ i
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。 S" s% [+ m; k9 F& n: F3 d
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
6 j6 q+ Y/ c3 u3 J1 R1 T
: ]+ Y2 m# P$ o) ]0 e0 N7 p7 r( D/ x4 U$ |) i0 d$ \5 v8 H
|
|