|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : z/ { K. Q- w
- [code]EDMA sample test application& I) h: u7 F; [$ ^7 G* l
- /*9 c7 o% h" p @# U6 p
- * edma_test.c
. n, n$ Z5 f5 P5 O6 i& w3 u( L - ** X, Y/ L$ M8 z
- * brief EDMA3 Test Application$ P+ D! o) @3 K2 f: j T& N
- *+ ]/ C" ^5 j6 A4 }5 p
- * This file contains EDMA3 Test code.$ H }9 H u7 `! Z! y' l. @& C* M
- */ k$ v$ a2 V' P4 j4 I! w- g/ y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
& ?; c9 [/ K/ U; X+ j* ? - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT5 P0 k, X8 p8 R4 [, e
- * TO CHANGE.: q7 l# D8 t! R& S
- *
* j, r& _0 Y0 e; u3 S; Z. K - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
e" o+ I5 M. D- e" P% }8 R - *3 {( N% b% t9 A( ^ L+ K% g
- * This program is free software; you can redistribute it and/or& R% U! I. x7 g+ |8 H& Z" c2 O) v& f
- * modify it under the terms of the GNU General Public License as
$ V0 n( [! h( P* F" ?) d - * published by the Free Software Foundation version 2.9 J2 S$ o' s3 \' J$ |! v
- *
- d: ?) A, j* W. E2 u# }3 i - * This program is distributed "as is" WITHOUT ANY WARRANTY of any. I8 r' E X" ]& A8 T
- * kind, whether express or implied; without even the implied warranty3 y$ N1 z( v" x3 ]6 `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" o; V* c8 D8 v5 n6 |% ? - * GNU General Public License for more details.
} J- C$ `# | E- z - */8 {8 m1 L T, J
0 y2 y$ o* x: t( E- #include <linux/module.h>7 S% T9 C: S v( R: Q6 z# x
- #include <linux/init.h>3 S2 A7 X n6 k
- #include <linux/errno.h>; F9 H. Y1 w. _3 j# d2 m; X$ s
- #include <linux/types.h>
5 i; a, D* j0 l1 m - #include <linux/interrupt.h>
- T2 R7 n( W1 q& k - #include <asm/io.h>, h" \+ u: |% a. F" b9 m3 E
- #include <linux/moduleparam.h>& h+ s; w/ ]: R+ K3 i
- #include <linux/sysctl.h>. H. @; n+ y9 Q3 Z1 q0 k1 W) D$ b5 a! [
- #include <linux/mm.h>9 g0 u; u$ Q1 G8 C
- #include <linux/dma-mapping.h>9 _( [* z8 i- f& `! J5 F
1 Y) r1 m0 d# C# i- #include <mach/memory.h>
- q4 c4 F0 q0 C+ A, P' l' R, ? - #include <mach/hardware.h>" S( x8 D2 p7 B4 A8 G
- #include <mach/irqs.h>
% P; Z, \# d% D3 |9 k - #include <asm/hardware/edma.h>3 {" c3 @' F% p( m) g/ @4 X! m6 `
4 \2 m( Q8 G, s! U1 i2 r- #undef EDMA3_DEBUG- j& x5 }$ x; e1 r, E; X; v2 ?2 S% I
- /*#define EDMA3_DEBUG*/7 s4 t- m9 _0 t( P7 h' H( a- l
/ ]$ G: l1 k* ~8 [$ p5 y- #ifdef EDMA3_DEBUG
+ B7 u$ z6 l1 Z+ g% t3 t - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
( o, [* ~. l- a+ u7 K- H; L, q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
9 A+ \' [+ m) [1 u - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
( n- R3 {! v4 v; _ - #else
+ i g) w2 Q, c# M2 F7 h, D0 N* } - #define DMA_PRINTK( x... )
. `- D) D U" r+ @ - #define DMA_FN_IN. z, t, \' k3 m0 P
- #define DMA_FN_OUT; e5 ~: Z9 i, ] C- H
- #endif
6 B% \9 N# q" D. W' o( x
4 k0 c% k! Y& O/ ?* ]* O- O- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
8 R! S+ F0 n7 S, _. G/ i3 x2 q - #define STATIC_SHIFT 3
5 [3 J# E" n* u# r6 R1 \. V - #define TCINTEN_SHIFT 20 g: |( _9 Z! j4 y
- #define ITCINTEN_SHIFT 211 R4 ^ |9 ~( [# j% @; X4 i+ L+ C
- #define TCCHEN_SHIFT 22
0 m, V4 R' A5 ]; R" @0 i8 T- g& n - #define ITCCHEN_SHIFT 23
! } z4 S4 F) n3 O% G) n6 A* S5 U. H - 0 V5 m0 d# o$ [& X( s
- static volatile int irqraised1 = 0;, f* X; i5 U8 B( i" O
- static volatile int irqraised2 = 0;- l. T* {1 W2 J- i3 E
1 ?% b! j$ D- B3 s& h' g- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 a# ^6 N0 N5 ?! [% G1 Z0 b9 X - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 _; \7 C9 V- P/ r, ^3 v - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. e5 _5 p1 z. Q5 K( x$ _9 r
- v. R8 Q4 t# H/ N6 q- dma_addr_t dmaphyssrc1 = 0;; P k# N: T6 N4 E% @) T/ Y& |
- dma_addr_t dmaphyssrc2 = 0;
8 n# F2 D. n% C: M: y - dma_addr_t dmaphysdest1 = 0;8 b z% x! c% I1 M$ c
- dma_addr_t dmaphysdest2 = 0;4 v" r. ?3 P# v0 V4 v; w
2 Y& t# `5 M! s5 ?4 f" v; E0 ?- char *dmabufsrc1 = NULL;, }, @& u; Z. L- N$ M' t! v" V: i
- char *dmabufsrc2 = NULL;
) C8 G# u7 C$ z: y6 d! I - char *dmabufdest1 = NULL;
% ]& {% s* u! M6 I - char *dmabufdest2 = NULL;8 G1 m3 N' ]1 V
, ~' E7 m* \! M- static int acnt = 512;
% c/ E: l A5 @ - static int bcnt = 8;
$ _, n5 `. q4 r% h. t1 ^ - static int ccnt = 8;; U" p* z0 v8 ?0 d
8 P9 |- V" b( r, p! m$ k- module_param(acnt, int, S_IRUGO);
) W; S9 Q# S s' ?+ G - module_param(bcnt, int, S_IRUGO);
Z7 d w# e5 P d - module_param(ccnt, int, S_IRUGO);
复制代码
0 D% M, V0 J& @& W1 Q0 }; x( f b) V$ w2 g" t, ^4 c' S
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用5 `3 ]/ F3 `, V+ u& n' N* V+ n' V
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。% @& m: X6 o( G/ h- v
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( q0 x! _1 e& E& {8 X
' O- M, m& ?$ w
7 k/ k7 B7 t4 P2 G2 M |
|