|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 # r" ~; @5 ~) k9 x' B" \8 a6 R4 }
- [code]EDMA sample test application
- o* L; q' z" Y6 [9 f - /*- o1 J7 y' W0 A2 r
- * edma_test.c, r$ j5 @8 h2 j* a
- *
! d6 a5 K7 X4 p& _; L/ h2 g; W7 P - * brief EDMA3 Test Application O" ]* ?) l6 S! w0 n. X: |
- *
3 i& V. V5 Q" o+ W2 z n - * This file contains EDMA3 Test code.) r! D, M L0 b! ?- V0 W( M; S
- *( J* i# l1 _. S& [
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
. w5 u( G6 t. f# f1 T2 O# `$ i - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
7 g& S2 t4 R9 F. d - * TO CHANGE.
% ?6 r9 W1 z# k8 O - *" r4 q7 g3 G: e, ~
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
3 A% r. I: c& w- H* O0 p0 W - *, p8 ~0 v8 Z% @; ?- Q
- * This program is free software; you can redistribute it and/or
% b a2 B) e t! h - * modify it under the terms of the GNU General Public License as
, T3 I+ P0 V$ S: h! ~ - * published by the Free Software Foundation version 2.' M4 P& n' e+ J7 |2 a- r
- *
9 Y5 p {! C; k& S. Z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 @1 @ n% D: U. d8 w, R - * kind, whether express or implied; without even the implied warranty
4 R2 d& p( {+ K. y5 ] - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 ^+ \8 l9 b& G - * GNU General Public License for more details.6 L9 f. S9 ]$ H% t/ t+ g+ A
- */# j) O5 |+ U# G% ~9 a. Z( L
- 9 ~6 W- C' X( N$ f0 v8 K
- #include <linux/module.h>, `7 L$ X6 v4 V* b6 n. G0 x* y! }
- #include <linux/init.h>0 w+ k* Z6 B0 F G
- #include <linux/errno.h>1 ^( I9 F+ F4 ^- P+ t
- #include <linux/types.h>
2 W$ p) W7 M7 e9 n - #include <linux/interrupt.h>
" S& j1 V8 e' s" u3 L3 f - #include <asm/io.h>
# y) n) d2 ^) h" N" l - #include <linux/moduleparam.h>% ?5 S# w; h5 O1 B
- #include <linux/sysctl.h>
* U) C9 [, ~3 V- L$ i* S0 J - #include <linux/mm.h>
! N: j; z( k) K# x& d" F - #include <linux/dma-mapping.h>
( B0 x- W. Q- |, A8 q- |+ ?0 t
$ y* O+ u- z c8 q- #include <mach/memory.h>/ Z8 R7 h( `1 Z/ c+ f6 _: T Q
- #include <mach/hardware.h>
6 {+ L( C5 T+ ?! K" t+ ] - #include <mach/irqs.h>
2 e& b% W5 `- L) z9 _+ ?% E - #include <asm/hardware/edma.h>
a* K2 y6 }, ?% J% g - $ p: {$ ?& q) z3 ]- S O" m
- #undef EDMA3_DEBUG
- P7 [; @3 |3 m8 f# } - /*#define EDMA3_DEBUG*/- o0 X$ r+ ?' t& L" N) K: X9 m2 |% c
/ l: V) s' ^% w& C- #ifdef EDMA3_DEBUG* A' K0 m2 f! e
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' f/ |) w( P9 \4 D' U0 G
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 o0 Y1 i, k8 E, Z1 \ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)6 S5 x9 h7 x1 w) n
- #else
8 l# K$ w$ \- L7 \' a' v% n7 \. ` - #define DMA_PRINTK( x... )! r* h1 F0 f4 B
- #define DMA_FN_IN
* ]( Z- \# e' V0 n0 v" j) y* ] - #define DMA_FN_OUT
0 u! ~ c8 l3 X - #endif9 @7 Q9 n+ s1 a/ D' k
7 y2 s8 ]. o/ d0 v4 w% a! i: r- #define MAX_DMA_TRANSFER_IN_BYTES (32768) N, C9 r) q' h ?& P7 @6 x. V
- #define STATIC_SHIFT 3/ @9 T# e/ q; M M* H
- #define TCINTEN_SHIFT 20# ?3 O5 |9 ^& Q, d, o( U4 k
- #define ITCINTEN_SHIFT 21+ }) V' h3 F7 d& l: Y
- #define TCCHEN_SHIFT 22% B& H0 K9 U4 W5 `
- #define ITCCHEN_SHIFT 23 E5 I. f8 t: L* c
- & f& z/ ]$ z [' c" E% m6 s& J
- static volatile int irqraised1 = 0;
: J2 R, I8 z" X/ u& j V0 Y) S - static volatile int irqraised2 = 0;
a. v* O: p; Z1 p
# y: j9 e- I% _& N' i- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 t* b2 _$ m |, i. z# m5 F" r7 I - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, }6 p P* ?4 P! j8 A; U5 I - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% ?% S6 D5 G" g2 X3 L- ~
- 1 V d! m0 Q$ w3 r( P
- dma_addr_t dmaphyssrc1 = 0;) Q6 c: I/ Q: F& N) H
- dma_addr_t dmaphyssrc2 = 0;% ]: |8 y- L4 @, i
- dma_addr_t dmaphysdest1 = 0;% h* V& }, ]% [4 h4 T
- dma_addr_t dmaphysdest2 = 0;
9 v" y9 {, Q1 Q+ p7 ~
8 J! l. D( Z3 ^- char *dmabufsrc1 = NULL;" g2 y# B8 O# ?4 T) ^( ?
- char *dmabufsrc2 = NULL;
* V; O7 `) ?! K! k; s( w0 x' Q - char *dmabufdest1 = NULL;
?5 b8 h( a- g, k. ~( q - char *dmabufdest2 = NULL;
% N& N* d9 o+ Y& Z - ; g* ?$ z2 m' E/ f
- static int acnt = 512;) f/ v7 u4 W3 {# h
- static int bcnt = 8;
2 V+ X% Z: a& D8 _; A( B/ T - static int ccnt = 8;# Z% z4 K d) q4 t/ L, d
3 m7 _/ ^3 {3 j- N- module_param(acnt, int, S_IRUGO);
, V. l" h( `+ W; x$ P - module_param(bcnt, int, S_IRUGO);5 x* x% }/ E; a) t0 x3 U7 c
- module_param(ccnt, int, S_IRUGO);
复制代码
& g$ { }1 @/ @( w8 s% c3 S/ x" a) {& W0 o: q& E/ M
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
/ ]2 [- Q9 c$ C, aarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
4 g% x' J, e0 |" |+ U* z0 _ ~& V& C 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
7 [! j3 x9 k0 l" T. r+ V+ [' e6 U7 W/ T4 F+ |% |
2 h( M! W% q$ r7 m( R |
|