|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 & U1 P7 I; f& o4 Q
- [code]EDMA sample test application
* |, S: k, x: V7 ] - /*
* R0 A- ^( m7 j; I - * edma_test.c# k6 ^% Y. V" D d* o' p9 W
- *
7 |: } i" q" Q" i - * brief EDMA3 Test Application7 @( W1 c5 J3 ]# @ K% U2 Q
- *, Z$ ` H3 d n/ A: w
- * This file contains EDMA3 Test code.' v; g. m, f8 E$ I
- *& k3 x9 C; b. u z$ i; S
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
4 B# O; ^- r; Z1 p% U - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
4 [2 G, H+ I* x3 Y1 M - * TO CHANGE. w6 v! K9 a. z/ [5 c% @
- *
`! A+ r1 U6 g# }3 G - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ }$ x: h, ~; e p
- *$ c W2 X1 `1 o5 j$ g
- * This program is free software; you can redistribute it and/or8 u8 g3 W( f' F: F w8 }" A
- * modify it under the terms of the GNU General Public License as
) Z* a' i0 W5 h5 a8 s! y5 ` - * published by the Free Software Foundation version 2.
9 X0 E. X2 p0 S R' t - *
" p# i! C/ o3 H2 L) t) I2 S6 p' S - * This program is distributed "as is" WITHOUT ANY WARRANTY of any! m& I) i# B1 U( k
- * kind, whether express or implied; without even the implied warranty
, Y9 U% X9 g5 f/ x - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" q, |$ H% S) x# e; n) R
- * GNU General Public License for more details.9 b+ @- S9 s5 r! S' ^3 `
- */
7 M3 O6 F) ]2 h/ E* O - , w% M9 }5 N) \* _$ p, P% q: d
- #include <linux/module.h>
3 b# J. |+ `$ y; Y - #include <linux/init.h>
' X5 Q/ _$ ?- U0 r) {; g# v: N; L - #include <linux/errno.h>
* ~+ }) {& W. R% z1 B# E - #include <linux/types.h>
8 t i* c/ j3 L - #include <linux/interrupt.h>
; K& J6 u* p1 d - #include <asm/io.h>
( J( j, R p6 c& @5 G - #include <linux/moduleparam.h>9 E' U4 e1 f' f v
- #include <linux/sysctl.h>6 E+ b* |- C# c8 i$ X/ N: N- R4 o8 G0 l
- #include <linux/mm.h>
1 U, H9 \& t% ?) t( R - #include <linux/dma-mapping.h>8 _3 b+ M$ @! B+ ]
3 h% i5 a# g8 t$ {6 h8 \2 P- #include <mach/memory.h>; V7 y" h8 x; K/ x" Z) r! w0 x
- #include <mach/hardware.h>; d3 b, O* w3 Y2 `4 c: W' |+ A- N
- #include <mach/irqs.h>
( ~) z8 {. f# C* B/ d - #include <asm/hardware/edma.h>
& z' x; {$ m9 G2 z! b% {2 j5 V - 0 d8 d/ j, r+ Y+ G: V$ i5 G6 a
- #undef EDMA3_DEBUG
- N9 }/ N) L" B6 i$ z8 Z - /*#define EDMA3_DEBUG*/
4 e: K2 ?4 U0 T3 B% k2 j5 l - 1 k0 Z+ Y2 X/ b" [. I
- #ifdef EDMA3_DEBUG
: r8 E8 S8 z: d, @9 P5 r& X' j - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 S5 r3 U( e0 v% O - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
/ _$ `( A* a$ S% M' o) S# y. M0 d9 X - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 _" T+ o6 I p3 y$ e9 \1 v* m - #else( H, A0 T: m4 A# M0 |$ h
- #define DMA_PRINTK( x... )
* A5 N% k( g: q6 j' X - #define DMA_FN_IN
5 J% @3 C$ H0 O - #define DMA_FN_OUT" t3 F' I- S! J- `! f$ `% `
- #endif" S* N( S9 H0 @% ~
/ p6 `: r# U2 W& v5 |1 h- #define MAX_DMA_TRANSFER_IN_BYTES (32768); I/ y" ^$ ~) A1 z$ v
- #define STATIC_SHIFT 3
7 @$ k! y5 B. T) e& m - #define TCINTEN_SHIFT 20- }$ b) ~$ t9 A- A
- #define ITCINTEN_SHIFT 21# @3 Z( ~8 ?# g+ x" b& i0 G
- #define TCCHEN_SHIFT 22/ e. I1 H# [8 n4 c/ w1 z9 Q
- #define ITCCHEN_SHIFT 23
& q# a/ j* W8 |% I2 M" c - + {6 G- d' i3 n+ {$ V/ q4 v
- static volatile int irqraised1 = 0;5 {1 \1 E6 o ]
- static volatile int irqraised2 = 0;# [* z0 Q _9 o5 Q0 r) v+ f
- ! |4 a& p8 x7 l: ]
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 x: N2 g, S& d+ X% x" a8 v( R* @
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' n- [- J; A7 V& _. Y* k2 x, f6 h - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 V" m( v* }; ~! a( c8 f! X
- 1 i1 u4 x: v# l& k+ O5 `9 U
- dma_addr_t dmaphyssrc1 = 0;
; W3 v) M) x3 g% k - dma_addr_t dmaphyssrc2 = 0;
0 {/ [/ l. [' b0 x6 y% X& ^" U - dma_addr_t dmaphysdest1 = 0;2 U3 H: C. x4 p6 }8 ?& L
- dma_addr_t dmaphysdest2 = 0;, G& G) Y; h6 p: n- g
- 8 j3 n. \$ Y# Q4 z
- char *dmabufsrc1 = NULL;
$ g2 B Z, K/ x* L - char *dmabufsrc2 = NULL;+ x( O3 b2 }+ r/ ^! T4 ^
- char *dmabufdest1 = NULL;1 m2 S+ a7 J9 ]2 X u
- char *dmabufdest2 = NULL;
( z7 V4 s0 ?) s" Z6 t. w8 n6 ^
! Y: h' C8 K* K- static int acnt = 512;
/ i6 H( f8 j2 M0 T! @ U - static int bcnt = 8;. n4 k# b; \ g9 e U$ v$ y' X! j
- static int ccnt = 8;
& f/ }$ B/ T4 h! ^0 R) g. [' E, b
5 I6 R2 G, m: @$ C- module_param(acnt, int, S_IRUGO);
9 O" y7 l8 k& Q) i - module_param(bcnt, int, S_IRUGO);1 v' D) v; l" Q7 _$ j0 ~
- module_param(ccnt, int, S_IRUGO);
复制代码 ) r/ O3 Z% C0 K! H; z4 s
) O& d7 R) H. h& T1 T' u9 a
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用5 m5 E( K3 r u2 E7 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
: a$ Q6 p1 a! G4 J 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。% x* J3 z) u6 o! N0 o" n
% F0 |) l) z+ w( N
! M" y* \( C$ p |
|
|