|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
& Z7 s) A1 R# N9 G, ~6 ~3 f+ ^3 C$ W- [code]EDMA sample test application
5 B) Q/ C9 x7 W, V3 Z - /*
w7 O! T6 ~& O; _, Q5 N3 X9 @4 w" I - * edma_test.c
4 @- O$ Z9 {4 B" \7 }" d9 j - *
* @4 f' V% t3 b, S3 d2 O/ ^7 \: B - * brief EDMA3 Test Application
% V1 |4 v" l7 p7 f7 p - *: o# p8 x2 Z' v+ I; k$ z! J9 w
- * This file contains EDMA3 Test code.' n" D {1 L' i4 S
- *+ _( z1 g1 A3 W7 K1 ^9 a4 F% h
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
?. a. F# P2 }( {% ?* e - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' p3 _0 O1 v& G( d - * TO CHANGE.
% [7 X! T1 I: ~% P - *
6 _0 ^6 L# P( e# d" c5 V* j7 K8 { - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* Q+ l0 l8 z, p k7 t
- *# a. M* k/ ^* j! g% O
- * This program is free software; you can redistribute it and/or5 Z1 Q* }% ~3 L6 q* C, {/ a/ C
- * modify it under the terms of the GNU General Public License as9 { h4 ]" N+ o5 V( k0 _" K5 H% W- V
- * published by the Free Software Foundation version 2.: Y. d. S7 g' V2 ]
- *" m4 V4 S5 A9 a @- m
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
3 z. m4 }/ [+ S; N5 s- a - * kind, whether express or implied; without even the implied warranty
6 F, \8 C0 C8 K6 I9 I - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" X, ?) [) C0 q
- * GNU General Public License for more details.
- |: p j2 R7 b+ i - */
* h' B/ {) H' i8 F3 e0 [
, J; O! Y( [0 f& }9 {! v( s- #include <linux/module.h>2 H Y- R+ w9 g0 f: n
- #include <linux/init.h>2 j- f1 s1 n8 j, k
- #include <linux/errno.h>. j3 J2 Q- b) ~/ Y' O1 W/ T# `
- #include <linux/types.h>
+ {/ z( t+ [' z! ^ - #include <linux/interrupt.h>* V5 p. o! U1 z5 E0 \( J, G7 U% j3 K
- #include <asm/io.h>. o& b: }; I1 A/ ^4 }
- #include <linux/moduleparam.h>; x' ]+ X- o7 ]8 w& T7 v/ t; a, A4 E& E
- #include <linux/sysctl.h>% J3 C3 K0 X( ?% ]# u
- #include <linux/mm.h>
9 \5 E+ ?( D; o4 P& P" ]* w1 _5 T - #include <linux/dma-mapping.h>
6 w" f9 O% `' K- x8 ^ - : [! S2 m$ \1 o2 t2 v* M ]! W
- #include <mach/memory.h>8 c; f$ f/ q+ ^: P, \
- #include <mach/hardware.h>- I# C: ~: F E
- #include <mach/irqs.h>7 a! h5 i& s" L! d3 F
- #include <asm/hardware/edma.h>
$ v- {2 v2 r* m( l0 h0 X/ w" [
' b9 _" \4 o( O+ T, h, H- #undef EDMA3_DEBUG
3 u5 y# \" |% _! R. B - /*#define EDMA3_DEBUG*/
+ k3 M; R2 c2 S+ M0 Y8 z7 n
( o% H; d m, S Z' F- #ifdef EDMA3_DEBUG1 u3 H+ [6 I' m' i- F
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) S: W+ f& n: f7 U% T2 \. B - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, n+ v, v, U- X - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 g/ q# B9 P, a s! C, p" X - #else& u" M* S( I- \) U4 D* B8 x
- #define DMA_PRINTK( x... )2 j9 C' E9 P, b' ~% `
- #define DMA_FN_IN
9 \- K% W" l" r0 t, j - #define DMA_FN_OUT
. ~, s: a0 S) v. p8 G* f* t4 R - #endif
" w8 U) h: y- w( D! Y: G
7 @3 h. P; E+ o r& x# F- #define MAX_DMA_TRANSFER_IN_BYTES (32768)$ A4 V; e1 v8 B+ S1 j" H- x# A/ ?; ]
- #define STATIC_SHIFT 3 [) ]" X$ i( u% }$ D4 B
- #define TCINTEN_SHIFT 207 Q8 l" Z, ^+ N; Y4 l* i- p1 L
- #define ITCINTEN_SHIFT 216 |0 S$ ^9 |6 w* C; t; C
- #define TCCHEN_SHIFT 22
% y% A* E) u3 W% q, T( X, a - #define ITCCHEN_SHIFT 234 k7 M& q7 D3 W( I+ H& y
- - [! u8 U$ }& J' @' a: k$ e
- static volatile int irqraised1 = 0;% V( v$ G/ E8 k$ \1 n+ d4 L
- static volatile int irqraised2 = 0;' |" K a( F4 j8 ~2 N( \
- 5 x. O# ?8 h. G+ n6 B8 D; F/ x
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# P9 m* G8 F$ d& F$ G - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 M9 j$ x; F* _ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
o- r6 q4 L: ~1 ?2 @( Y- } - 1 F: w9 q: N. W$ ~' ^- B4 x
- dma_addr_t dmaphyssrc1 = 0;
' o. d$ F# S+ y" i; F5 X+ n ` - dma_addr_t dmaphyssrc2 = 0;: W" z: I7 b- p' c
- dma_addr_t dmaphysdest1 = 0;
, _$ c& M4 { R2 \ - dma_addr_t dmaphysdest2 = 0;8 ^4 [( o& j) g L, J# S) l
" X4 S4 m+ Y1 v8 Z" [5 R- char *dmabufsrc1 = NULL;% c& @' a `& Y# a7 T
- char *dmabufsrc2 = NULL;$ x4 L8 G$ J) n [
- char *dmabufdest1 = NULL;
1 m: b0 m4 h4 L0 H. Y5 h1 {" M* U - char *dmabufdest2 = NULL;$ o' h5 Z6 R) }
- 7 A9 O1 ]+ w7 N% K& U/ E6 a- R
- static int acnt = 512;
9 B8 L* N7 X/ n- M8 G0 } - static int bcnt = 8;
$ h) [6 {+ W7 e, b, h - static int ccnt = 8;+ W4 q& ]5 k; e8 A) H: D4 Z& p
- % d- g# c) k" F( E. s2 F9 q* @; z
- module_param(acnt, int, S_IRUGO);
0 ?( e' ]( K. e- _, X0 O - module_param(bcnt, int, S_IRUGO);
3 U c# M$ _) \" C$ R1 f# K. _+ M - module_param(ccnt, int, S_IRUGO);
复制代码
1 q; O" q" i4 C3 L1 l+ b/ s% C2 v; q* Z, H
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
0 N' k6 S' R: i6 s- G# s& Warm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。; O8 X' t% I, R5 m0 V1 \. m! \
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, e/ Z9 C# R9 S$ C: p: G |/ u+ u6 a
0 J; [) l) S$ f$ C |
|