|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
0 e/ Y1 D% b* T' ^ U# N- [code]EDMA sample test application
! d! W& h3 T8 F9 }: E - /*
$ _9 E0 M$ z7 M* p2 E L - * edma_test.c
( _' z7 [$ t" Z - *# F( d5 J$ A1 x( n2 \ j& ?1 _
- * brief EDMA3 Test Application: \' Q0 t' P6 \1 k3 ~" m
- ** b7 y$ } s; l9 h; P
- * This file contains EDMA3 Test code.
. J# w+ o& x1 P - ** A3 ^( M! a+ H7 ~& U
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE" X3 e P! J6 o( Y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) W; K3 E) K& A' K" ~ - * TO CHANGE.) G5 N4 s9 o8 C, ?( |
- *5 L2 L) B' {7 O1 g* I7 P# O+ t1 c
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' N. O+ Q/ e! Y; Q* t2 Z; }
- *
0 ? e; T B- e4 j4 M* n& u - * This program is free software; you can redistribute it and/or
1 w0 k1 |. O6 p' p! ?- d0 r* ~ - * modify it under the terms of the GNU General Public License as
* q" Y3 y/ r, \: ~- z ] - * published by the Free Software Foundation version 2.
5 ~5 U$ ]7 r1 k' [- {( ~7 @ - *
. F7 z. d# V6 @3 f* s; @ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
2 J% U# ?, F7 {% D% K7 U: T - * kind, whether express or implied; without even the implied warranty
; t6 k1 C, }: ~ B$ f0 h - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' J/ m- F1 D/ w, z; ]( i
- * GNU General Public License for more details.1 m+ n% [7 s8 z, s3 j1 ]
- */6 v$ G1 u. r- y" @! k3 m* d' |0 a" e
. k; X# }2 Y# U+ ^7 c/ d+ W- #include <linux/module.h>/ Z" ]/ F2 D9 F$ i, M5 P
- #include <linux/init.h>
7 |7 U, A- K2 y' o( [ - #include <linux/errno.h>
# G1 x0 [5 t9 y( b/ m - #include <linux/types.h>
5 g( Q7 H1 x. c3 t - #include <linux/interrupt.h>
k0 i/ e9 P4 I8 c# r - #include <asm/io.h>
* {! C8 h* E% O6 `& c/ ]/ p - #include <linux/moduleparam.h>
6 J. e. | b# ]% Y6 c, J - #include <linux/sysctl.h>6 N( K- y( M$ ?
- #include <linux/mm.h>
, e4 p: c1 e* d$ I. v: o' J - #include <linux/dma-mapping.h>0 v' d1 g, K: ^( p) h1 y( B
W+ A8 e' Y$ z# o# L* r* a- #include <mach/memory.h>' g0 E( L+ I$ z2 t5 p3 l. X9 P- y
- #include <mach/hardware.h>
g$ q. c. m/ W - #include <mach/irqs.h>
; F6 c& \. v3 u1 u" C - #include <asm/hardware/edma.h>: c* Q& H2 C. o2 W0 D `5 Q
1 N3 w' q' U4 \" ]- #undef EDMA3_DEBUG
9 H% t9 f( ]1 ?& Y8 R4 h9 P - /*#define EDMA3_DEBUG*/ J% x2 C/ Z W3 a
' ~% x' [7 g0 W5 E+ b! v- #ifdef EDMA3_DEBUG
/ g: v& l1 Y! `, `, I* g - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 C( u) J& m+ ~0 ^4 ]6 b) h# W - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
4 b* F, N$ p. j - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 S0 h- J( r# O" T - #else) Y' O+ ?% s5 r1 E8 U* N5 ~' e
- #define DMA_PRINTK( x... )* r2 C! ?% I. W$ @0 o
- #define DMA_FN_IN% v8 v2 N! m1 N' C9 V# C) i
- #define DMA_FN_OUT
0 M9 O2 w! M. [3 K( T" U1 `; P# w - #endif
8 ~0 W, y* Q& l
; z& [) P' S$ B2 q- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
1 h" L) _; o1 X. }: w - #define STATIC_SHIFT 3
5 _3 Q7 Q& v! ?. ~ - #define TCINTEN_SHIFT 20
9 G. O1 a* \0 }9 [1 h) q, d - #define ITCINTEN_SHIFT 21* J* X" ~; k @1 L/ o: v2 {
- #define TCCHEN_SHIFT 22/ r6 }6 b/ |+ _
- #define ITCCHEN_SHIFT 23
) \/ S" Z( O; P% K - + v1 { v* i( M, f3 k; B
- static volatile int irqraised1 = 0;
% T& @# `, o, v# T - static volatile int irqraised2 = 0; I4 L$ Q) y8 J% _8 G U
* m; P j H! z6 N' A, E- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ @: h) ?9 _/ I) d+ m
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 H8 u4 S( B9 j$ z
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 c4 ^" Q! Y; P8 W% h& F/ S
- 8 w! c8 A: e; Y/ c, V
- dma_addr_t dmaphyssrc1 = 0;
( i6 f, A, F; \5 s+ e - dma_addr_t dmaphyssrc2 = 0;) ]; l$ U& C" j
- dma_addr_t dmaphysdest1 = 0;
4 P# t# O( D5 Q1 E; Y! V - dma_addr_t dmaphysdest2 = 0; u) M8 i1 K: K% `' L% F9 f* P
: j: T; o% c, X' h+ u- char *dmabufsrc1 = NULL;
4 q0 m% x5 i1 J: K& G j# l; m4 } - char *dmabufsrc2 = NULL;
T& r/ f! [; O/ }: U - char *dmabufdest1 = NULL;* P1 @- j0 _# n* v, Q% s8 Z0 W
- char *dmabufdest2 = NULL;
1 A' y( \: A% Q$ |1 z
6 v* }. l1 m6 p% z) N5 X- static int acnt = 512;
6 ?$ O+ }$ I, M( \ - static int bcnt = 8;
! T8 p' E5 Y. f+ F- c - static int ccnt = 8;: z- n+ z) Y/ P! {3 X" [. l$ X
- 5 f+ d. B5 v$ b9 B- d U
- module_param(acnt, int, S_IRUGO);* R- f% M2 e2 H/ e# F! E: j
- module_param(bcnt, int, S_IRUGO);) A! a9 u5 H. k' r
- module_param(ccnt, int, S_IRUGO);
复制代码
- c, ]' m& r# }5 S9 n# w8 _9 k( |1 [- L* c4 d' O
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 I( M, ]' x/ h0 N- J5 W* Harm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 [( Q! H6 b: O+ g; u
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
' v9 H5 l0 m6 g
% P) [% T% X) G1 @' Z: F$ W" G& k% B- v i
|
|