|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' J. k, g4 q \5 i) o2 A) S- O7 B- [code]EDMA sample test application
8 ~1 b/ x& T. _7 E( l6 f" T - /*6 G% r, m0 `7 u# K7 p
- * edma_test.c% @1 O6 q7 ]) p0 S; X' e+ w' u H0 h
- *# m: E2 }; k1 R9 I! P' a4 P
- * brief EDMA3 Test Application
/ W# H( T6 m4 a0 @$ Z - *1 V6 u% e( Q7 ]7 U# h2 Z
- * This file contains EDMA3 Test code.
8 G q, s. |! [+ D9 q/ [+ [3 I - *
: e8 U( P& I& k" ?! _ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 j. h& l, ~/ C0 o, N' U
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
- ^ v; x& u B( m% l8 k - * TO CHANGE.$ M A1 u; h3 C2 }& U& V& L) w% a
- *
; S' p. ~6 z4 n# u; _8 b - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
) A6 d u) Q% `- r0 Q7 e - *
+ H1 N% _# ^6 ]- q" y% i( X - * This program is free software; you can redistribute it and/or
& O9 \- T4 g2 i* Y; Q& h3 r - * modify it under the terms of the GNU General Public License as
5 i7 p) P1 K9 S* W+ q" q - * published by the Free Software Foundation version 2.$ m3 M- O- l! O; q7 n9 U
- *
/ b/ `; |: n% u& H! t' j& w6 Y - * This program is distributed "as is" WITHOUT ANY WARRANTY of any1 U5 r2 I6 m4 G s& ^5 v2 E
- * kind, whether express or implied; without even the implied warranty. G$ M3 P+ r" H2 x
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' Z7 G8 h2 @3 d& j l2 K
- * GNU General Public License for more details.
0 p* [5 _( Y+ Y' l# c* O - */
) k5 t. B! e: z
1 x; `" a+ N3 |, K- #include <linux/module.h>& i, ~9 V7 I" s6 O
- #include <linux/init.h>; i& p) `( g7 X1 X. y9 u6 y
- #include <linux/errno.h>' ^* j- r' ]4 w' y; h+ t( F8 T
- #include <linux/types.h>
# W9 t: U0 P4 n* F3 L - #include <linux/interrupt.h>' w+ Z( l) j; |
- #include <asm/io.h>( y* h9 ?$ U6 A+ G
- #include <linux/moduleparam.h>
6 C% }. W5 h: M* a - #include <linux/sysctl.h>
4 H: N& C9 g" R- O* C7 x - #include <linux/mm.h>! q: K! }+ @% ?# y) u. G6 E' E7 @
- #include <linux/dma-mapping.h>6 ^3 z/ [# L P2 `
- $ a5 D! w1 L; C/ N5 g! J4 _
- #include <mach/memory.h>
' a' s4 ^( [# i, Z, M7 f - #include <mach/hardware.h>( _8 a! N6 J8 ~1 m5 _6 N
- #include <mach/irqs.h>
$ p7 Z+ V. F# k7 q2 c4 s+ A - #include <asm/hardware/edma.h>. B3 N* Q! ]4 Z# e. _# S: j
- 6 L) O8 m+ n S* c0 n! T6 R
- #undef EDMA3_DEBUG, o2 L7 t2 |! I) j
- /*#define EDMA3_DEBUG*/$ N1 t! e$ X. F. e
- . J7 T z/ m2 c! y; x6 A' P
- #ifdef EDMA3_DEBUG
% \/ l p! x. B1 K2 e5 v/ ?5 D; B - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% E4 m$ @0 c3 p7 Y n3 ^9 l - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
% P7 V n. |/ |, n+ e5 I - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 w! h1 I$ j# J& g6 X - #else
7 v1 J! N4 E1 ` - #define DMA_PRINTK( x... )
2 z7 P' N; L& b! p$ D8 _4 @! x: P. ? - #define DMA_FN_IN
+ I, l# J3 p6 \* t- M - #define DMA_FN_OUT, {5 W6 W* `3 \& h, J, I3 ^2 p
- #endif+ M, }- N" `' q) d5 Y
. t& o3 a6 D# t( i) o& A6 ?% j- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
% I) e* h& A7 x/ u5 P+ ~5 E - #define STATIC_SHIFT 3
# K$ j% \6 i0 I, w, x% \5 w - #define TCINTEN_SHIFT 202 X! ~# p5 T9 x& S1 q
- #define ITCINTEN_SHIFT 21, _4 g4 v f8 [2 a
- #define TCCHEN_SHIFT 22
! P8 _- }0 h- A - #define ITCCHEN_SHIFT 23
4 U* _2 M$ K- T5 v0 e# T1 D/ V
- ~4 t0 N* v6 ]' @ w- static volatile int irqraised1 = 0;1 t% } U1 x5 v% _; P
- static volatile int irqraised2 = 0;
1 B6 ^% \2 M. {) o' K' T% {* a5 S
6 ~ j5 R' U8 e0 q o- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 z4 H4 W2 \$ Y. ^ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# ^8 v. a% H+ ^9 v0 I, i - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ f1 c: R, ^4 x1 [7 `
- 7 r; V7 ~5 ] O
- dma_addr_t dmaphyssrc1 = 0;. _$ D$ Y1 C3 u( m2 a7 V* j* x
- dma_addr_t dmaphyssrc2 = 0;
. p, i3 Z" K0 j& S C - dma_addr_t dmaphysdest1 = 0;% R8 `- k: }- b/ {0 }/ `4 P
- dma_addr_t dmaphysdest2 = 0;
/ _7 t1 z, P! M, l' B8 t. y, P* _ - \: g l2 S7 T+ r: ^, N5 u
- char *dmabufsrc1 = NULL;
7 B" w2 \" c! S+ J. ?: Y - char *dmabufsrc2 = NULL;
- P# a% Z" _% N - char *dmabufdest1 = NULL;! ~% Z( G. E$ w6 w8 ^
- char *dmabufdest2 = NULL;" N- v d1 u& j1 o7 T
- * U8 ?- v* v! q
- static int acnt = 512;
& k5 I B0 ^3 l/ F. i - static int bcnt = 8;
6 C( R/ T4 H4 e9 i" u5 `4 ] v7 j% M1 b - static int ccnt = 8;
3 J& W* L3 }5 ]# M9 J' j - : v+ e5 o) H0 G: z& a- @
- module_param(acnt, int, S_IRUGO);: @' s$ W. k. n; W
- module_param(bcnt, int, S_IRUGO);
" _9 R7 g( @9 Q& p7 c - module_param(ccnt, int, S_IRUGO);
复制代码 0 ]6 ?' `" T- [* O$ N" ?
+ T+ j$ y% l' {
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# m, h7 S4 x4 I) c: Parm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ @; `( D( I+ g( ?2 Z$ z' P" y
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
2 Y( t' g6 W% z/ ]. `
) M( T/ h7 ?8 v1 h7 F
, ` I* E3 L4 e9 ~- K |
|