|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ' i2 A+ j5 {" }
- [code]EDMA sample test application
& f2 Y: t9 L$ T0 O - /*
, g5 q" ~! |+ F1 N9 I" T" O - * edma_test.c
5 ^" z: ]! a% \/ B. R2 l& q1 ] - *: a3 j- L. h" R& r
- * brief EDMA3 Test Application& N9 }- g) Q" d6 E6 c W% x
- *5 l' \: v& m* J
- * This file contains EDMA3 Test code.2 q# a g1 _" K3 M5 {: N2 H( B# f
- *
7 i t$ }/ D4 G0 P5 z6 |# {* P - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 p$ h' f! e3 N
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: z8 e6 Q& ]6 b3 Z, X - * TO CHANGE." ~' ? H a8 B2 _. P2 t6 n
- *
x* I9 {: c% L0 Y) R - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/( F/ D. ~2 L" ?& }' R) @
- *' b# u- @! J, F5 a' }, D
- * This program is free software; you can redistribute it and/or) z9 @, |$ M' I3 A; p9 I' L% t+ j9 `
- * modify it under the terms of the GNU General Public License as
) A; ]6 ]+ c2 f - * published by the Free Software Foundation version 2." p7 b+ N: m; ?( b6 X% }# W
- *
' O" a9 o5 ]5 O& C/ J! d - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. o! L) [/ p) \: Z3 @ - * kind, whether express or implied; without even the implied warranty- G# E- u; u4 o6 s8 J! L, Y& Z' n
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! r1 n+ A7 U: \( ~9 @ - * GNU General Public License for more details.
% p# ^4 f8 Z. l' {9 u/ Q" r - */ X& h& J* [3 Q) D; n
8 h# e1 V% r7 ]. Z. o. b# C- #include <linux/module.h>
I& n) @1 b# k0 a; Q; s U( q7 C - #include <linux/init.h>2 n, x4 d% a0 [4 ?
- #include <linux/errno.h>% n0 J$ X, [, V V* F
- #include <linux/types.h>9 M* m. C( K9 y5 T' n; ^* u
- #include <linux/interrupt.h>; U) Y# \5 F9 o; W+ B9 _6 _# ^
- #include <asm/io.h>8 g9 E5 E- }. |6 V4 v
- #include <linux/moduleparam.h>/ q7 C0 Z+ m( v5 d( r+ n
- #include <linux/sysctl.h>
* y6 |6 W3 {$ A - #include <linux/mm.h>; p6 l, I8 O0 y" o
- #include <linux/dma-mapping.h>
9 `9 T2 o* n v# g9 \9 d* R
9 z2 I, g( P. U5 d- #include <mach/memory.h>) m. K7 Q$ r, B
- #include <mach/hardware.h>" E9 k0 K( q4 N5 a a; e# |, S
- #include <mach/irqs.h>, {8 c; e' M9 d8 X ?' V
- #include <asm/hardware/edma.h>
* F! S/ r: a( z# B0 N% G
" D6 o, ^; P( ^; q- #undef EDMA3_DEBUG& q* U ~* G' U V9 C8 `
- /*#define EDMA3_DEBUG*/. v$ \8 u* u7 w
- ' S9 r+ Y2 o" h
- #ifdef EDMA3_DEBUG
) I; b H8 ?+ e6 p4 ^9 a1 V2 L" o - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)+ L; J/ Y) ? v, g+ l0 L) C! i# k
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__): t q3 [6 N8 p: D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__); X7 L! j- Q" j9 x. X/ F+ Y* ~
- #else+ x+ E/ S$ i6 k+ Q" I" L) N' h
- #define DMA_PRINTK( x... ); N; s$ m3 p/ B4 e
- #define DMA_FN_IN
8 H o2 K. ^- L0 F& e - #define DMA_FN_OUT
8 T" ?$ S0 C! E. A# O, T7 @ - #endif
( ?9 B8 c6 C1 X* b9 B! P S, C
0 _9 K+ ]" c, t: v% M- #define MAX_DMA_TRANSFER_IN_BYTES (32768); R- q$ f' o+ |. m& e
- #define STATIC_SHIFT 3
. q7 o8 |" P/ s - #define TCINTEN_SHIFT 20
7 l9 {, d* R( J* M/ L - #define ITCINTEN_SHIFT 210 V+ M$ c2 @% M( T
- #define TCCHEN_SHIFT 22
( `) v4 R U' r5 X% ~- V - #define ITCCHEN_SHIFT 237 `9 z( [3 k2 t% P3 k7 e, C) N
- n# y( H& m$ Q) [3 f
- static volatile int irqraised1 = 0;7 S* i$ [) q# _) x$ f3 j7 ?1 r& O
- static volatile int irqraised2 = 0;
6 T1 t! ] h" p, v2 q0 L0 E - / |% u7 [. T" F$ p
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& i' z4 b, z! a$ O
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& a V' ^ T6 t- ~3 h' |+ o( F
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 c: \9 T$ w# _ S$ Q+ M
. u% B; E1 L d: i( Z9 t0 H% o# m& e- dma_addr_t dmaphyssrc1 = 0;
. B, N5 d7 H. E, E7 [ - dma_addr_t dmaphyssrc2 = 0;9 d+ G' H" u5 B# |$ [. z7 ?, }
- dma_addr_t dmaphysdest1 = 0;4 e/ s7 v1 w4 b r6 j4 T" a
- dma_addr_t dmaphysdest2 = 0;7 } O$ U! S& B
" h3 Y; Y, i5 o/ n& C# T6 b$ j1 c- char *dmabufsrc1 = NULL;
: i7 a& G+ n& `3 E4 U - char *dmabufsrc2 = NULL;0 [% w5 m5 ^' U" U* t- P0 Z; d; T% \
- char *dmabufdest1 = NULL;
( y0 v5 O2 G5 L5 F o - char *dmabufdest2 = NULL;
$ K. R% p# ~5 U) o+ u: G3 h - 1 Y" p; A7 q* O u: z m: f, U
- static int acnt = 512;
/ W2 T$ w. B- x/ ^ - static int bcnt = 8;3 U6 ? c3 _8 `
- static int ccnt = 8;
) c1 S! a5 `3 w! g0 \ - 0 G# Y0 U- V5 Y; P q$ B
- module_param(acnt, int, S_IRUGO);: W7 g N! S b# `- f6 l& t
- module_param(bcnt, int, S_IRUGO);
* g) p7 u! D; e! G% \4 n8 R - module_param(ccnt, int, S_IRUGO);
复制代码
! h2 f9 Y7 b/ n+ B9 z* Y( k( |8 ~9 W
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用( P! j2 [2 J* E+ n- _
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. Q( o' n5 g- x% O6 O
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。( `# s8 n. I* x
# z. d* i P6 @* x- _
! K& L6 j \: S" ~' s0 N+ V/ t6 } |
|