|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
8 \$ l R" O) N7 Z J- [code]EDMA sample test application* |7 U4 C: ?5 K4 t- r) }9 d" W. I
- /*
- `/ h; t- C0 k! Z8 s - * edma_test.c
( @, A: g' L& v( w7 Q - *
, { V" c) j; x# \) \6 i - * brief EDMA3 Test Application8 Z1 ]2 u& P; `# R2 \7 U
- *3 q0 J! [" F6 ]' n0 E* e8 _
- * This file contains EDMA3 Test code.- B7 r( e1 C. {; Y
- *3 f8 \6 G k U* ^- m
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
/ u1 X# \' S. A7 g" v, ? - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
( \0 m$ h! v; m8 S. c1 o5 e8 A - * TO CHANGE.4 ~$ `& j, ~2 S
- *3 x7 L: _3 n& F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
- u+ i3 m& l7 Z - *1 v: u1 D9 F% Z# q: [
- * This program is free software; you can redistribute it and/or
$ N7 |9 M8 g9 i1 L, m( T2 W - * modify it under the terms of the GNU General Public License as
" E$ e) C1 S( o1 \ - * published by the Free Software Foundation version 2.0 {* G& T I4 q& A# I+ G5 B
- ** P" [! I, ?, g4 U3 g, ?
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any: E- a: M* y) ?$ s" `6 i
- * kind, whether express or implied; without even the implied warranty8 X4 e7 M; |! [8 G. X6 \
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! e' @" o8 S& S8 Q K' _; C Y
- * GNU General Public License for more details.8 B7 Z& K* n8 s. h
- */& R4 _7 |* m0 z; d- x( j0 ^
3 z& |4 X/ `4 E$ c, h& Z2 P- #include <linux/module.h>2 L; c, i$ v% C. {( @
- #include <linux/init.h>
: {, _2 t- [- U+ b4 I' u, C - #include <linux/errno.h>
/ T1 S- w- v( I: P) {" `, m - #include <linux/types.h>" a b, J1 ~$ C! y) n6 B/ g
- #include <linux/interrupt.h>$ J; ]; a6 `& g2 e
- #include <asm/io.h>
, x0 E: t/ a2 t5 m - #include <linux/moduleparam.h>
% V! S0 \- \( U0 S - #include <linux/sysctl.h>
# h0 u# h9 @/ U$ _2 e) @7 G$ v - #include <linux/mm.h>; M. A" n' P" Z# S/ k! y2 p
- #include <linux/dma-mapping.h>
' j4 Z7 K# I L8 `9 I4 u& s( T
5 e7 P( E0 q5 n) |) R0 A- #include <mach/memory.h>$ W7 F2 T0 ^* L9 C/ w% R
- #include <mach/hardware.h>
2 s" u4 T! B# Q* v6 T - #include <mach/irqs.h>
) {. F) w5 h1 d7 Z7 p - #include <asm/hardware/edma.h>
+ H* M* E3 F$ n) F - . v$ G( \9 \' G+ W# L( [6 {
- #undef EDMA3_DEBUG
# A/ z# p. L% i. a: k - /*#define EDMA3_DEBUG*/" x% n7 _# }- n" [. O* j
+ A& Z( h! ]6 i3 [& V- #ifdef EDMA3_DEBUG
- n3 q% B- Q) O% B - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
8 A6 G8 `, |) l. M7 J' w; c" A - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
: @; G; P" U1 u$ m - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 q' k. H" u5 a6 n; ]; w - #else
2 V/ `; S7 h% ]" B+ b - #define DMA_PRINTK( x... )3 `- E4 C: S" j" `' j4 y
- #define DMA_FN_IN& b1 `, V" u# I$ S8 T* \/ d
- #define DMA_FN_OUT5 _- t8 k4 M: A2 _. ]
- #endif$ J* T. h6 T& U* d
- 4 w% B1 b: x% }
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 p$ R n5 h; O' { - #define STATIC_SHIFT 3% Z# ]9 A2 f. q' m( b9 z. b
- #define TCINTEN_SHIFT 20
1 D" C9 l4 p/ K - #define ITCINTEN_SHIFT 21
* _* l1 g9 b D0 C/ y% W - #define TCCHEN_SHIFT 22
( [! P3 O: A* G7 b; v2 ^ - #define ITCCHEN_SHIFT 233 u: U4 [/ z8 e! I/ N! c
- 5 Q/ s* V0 j1 C" B5 N8 R
- static volatile int irqraised1 = 0;
( E- `* A- A. S: B1 n8 z) C; s - static volatile int irqraised2 = 0;4 {6 L" @, ~/ |% f
- * {* A* @& P D
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) o- }" ]9 n: R3 ]' T3 F
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 ^" R' R6 `8 i2 v9 g& N/ v - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: I6 B/ ]6 }3 v9 B7 @ - / z% f# T6 q4 s; x$ Z) n. H6 c
- dma_addr_t dmaphyssrc1 = 0;
9 W9 Z @) J6 x9 ^) H2 H' f - dma_addr_t dmaphyssrc2 = 0;5 ]# U& h( G1 l- V( c
- dma_addr_t dmaphysdest1 = 0;
2 Q' F* ~/ ~0 O& u$ a# d- S3 |4 [" N7 { - dma_addr_t dmaphysdest2 = 0;
6 d- \( z& r3 l8 k4 N( `! _
8 {# Q8 u2 A" U& [) h- char *dmabufsrc1 = NULL;
5 @$ b6 F. }) D' d - char *dmabufsrc2 = NULL;6 X! n3 O, T _, g' u& }$ G' F
- char *dmabufdest1 = NULL;2 D7 Q( m: \, a/ X2 X# {# ]- l
- char *dmabufdest2 = NULL;
8 i1 W! x: X/ R! M+ M
" d1 G# J; G. e- m" ?! |$ J- static int acnt = 512;
) `' B" K1 c5 O2 y$ a$ R2 F - static int bcnt = 8;0 T$ X1 c g8 L$ a8 N
- static int ccnt = 8;7 j$ x9 d- H; X# k& x* l- \
: e* i- s% z9 w s2 |- module_param(acnt, int, S_IRUGO);
4 J9 r X }% \3 K# W; p* m - module_param(bcnt, int, S_IRUGO);* ~, R, E. B9 k: S; d9 a7 H* J3 p3 r
- module_param(ccnt, int, S_IRUGO);
复制代码
. O e5 q5 {9 w5 O7 u. O& b- V3 `( `" u
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# G3 `+ l0 p+ e2 Q8 zarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. U$ Z8 u* ^2 t: I4 Q
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
# X# T+ M2 _) V0 R$ V+ ? q. n- J" n0 W6 v" z( X
6 D! [8 M: ~/ x |
|