|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 2 h$ @! `1 q' J% B
- [code]EDMA sample test application, h, a: t. T/ h1 _; w |& p
- /*/ u- Q, ~4 S* _
- * edma_test.c
% X& e p9 o* q5 N, p: M ^ - *, K+ y7 b) H) A- x5 v' ^
- * brief EDMA3 Test Application
* f$ ^8 K8 K* Z2 L+ ^) v - *, x' u1 ]8 h4 ~! k% O
- * This file contains EDMA3 Test code.
8 g I6 ~0 D& v. d - *
) X! Y/ d5 f, L8 b6 q7 \% ]+ d - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 F0 a* m- B$ t/ L w) y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
6 L% z2 @# C ~. {0 a& p - * TO CHANGE.: [/ r3 J3 ?5 p4 x E( R4 n
- *: S5 d0 C* M$ o2 Y. j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 U; A, p6 p# \- B& T
- *
/ U+ {; _0 Q. G2 j9 A/ c, ? - * This program is free software; you can redistribute it and/or
- X) G6 C4 \- p! B5 E. c1 L - * modify it under the terms of the GNU General Public License as
2 T% j& B$ k7 D4 F; l+ u - * published by the Free Software Foundation version 2.1 o" ?$ o$ ^& b9 ~
- *
" r! ~6 m; }3 i7 l' U, R - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 v" j U' {9 \0 l+ w1 h: B0 m - * kind, whether express or implied; without even the implied warranty* \ q3 n+ v4 C* N: B( X
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 S7 M: E" m D& W5 W! M, C - * GNU General Public License for more details.
. Z8 R5 A8 q" `1 l/ r - */
2 a4 w& A- u8 t7 x/ X6 O; {8 q
2 w3 P( l8 N+ d: |- _- #include <linux/module.h>9 ?( X- h, H0 Y2 O) A5 Z
- #include <linux/init.h>! @& W/ n8 V, x4 | h! C% H" F
- #include <linux/errno.h>( j/ z* {1 E, I0 b
- #include <linux/types.h>
u4 K# G1 y# O- M0 V, o - #include <linux/interrupt.h>
! I% {: y, x4 e- ~ - #include <asm/io.h>1 U/ i8 H6 R2 G% _8 U B: { e; H
- #include <linux/moduleparam.h>" n y5 J7 `( w1 u1 e
- #include <linux/sysctl.h>) S& c: H, S+ T# [
- #include <linux/mm.h>" t' w) a o) F0 l
- #include <linux/dma-mapping.h>
7 v% S6 g1 H$ ?$ ~ - - d+ I2 H! O }' U, G. R. M
- #include <mach/memory.h>
/ a' k6 I( Q. ^6 B3 G - #include <mach/hardware.h>
5 C- t+ j; o& q5 x/ k1 s - #include <mach/irqs.h>
% J F1 m( o9 ^9 Z" _) W - #include <asm/hardware/edma.h>
4 _$ u! B" V4 `; X - # D- s/ O. M: R0 \, _3 C
- #undef EDMA3_DEBUG
9 d& h. q5 P5 u$ y, | t - /*#define EDMA3_DEBUG*/
3 A& v/ B! ^5 T8 b
. z( Q+ i7 u- p1 Z' }0 I1 D4 u" l( V- #ifdef EDMA3_DEBUG
( y! w7 z* Z5 O- u$ H - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 W5 b8 f% y7 E- ]$ j$ K9 v
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
% r0 W; C, g+ T( a; A - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
7 t, a( D4 S" k0 B Z - #else. d8 w2 [6 b2 G, T) l% i
- #define DMA_PRINTK( x... )" E7 v e. a; C- Z% b
- #define DMA_FN_IN
* c$ i4 ~- s' |/ T5 r - #define DMA_FN_OUT0 ]; f$ @+ M! W% C: B
- #endif
2 T. Y4 ]' V, h8 @6 H: H! q Z - 5 H7 t7 v# j; g' C+ v, F
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
+ |# j0 h: @; f$ s5 x$ Q% h, Z - #define STATIC_SHIFT 3
2 \; N2 M4 c' v - #define TCINTEN_SHIFT 20. { o9 u( d; i B
- #define ITCINTEN_SHIFT 21
6 e5 b9 P3 T: |3 _/ G+ e9 q, F - #define TCCHEN_SHIFT 22
0 V9 z/ g9 P) ~! K/ L% a9 } - #define ITCCHEN_SHIFT 233 n: r/ J: y% K8 x
+ @$ s. W$ s. z- static volatile int irqraised1 = 0;
' M& m$ [- i- Z, O3 [8 | - static volatile int irqraised2 = 0;
7 O, E* T% z2 l5 N! Z
4 L0 n0 s: f: }- S7 m9 B. M& H2 L- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 d' z) j* r7 o4 j' w/ L6 v - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- W U/ G* ~! M9 I4 a. T
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& F. ~, @6 a, N) J. q5 W+ b" J
- ) r, t. x6 E; W' o' ]' w
- dma_addr_t dmaphyssrc1 = 0;6 x S2 i6 R5 N2 Z! }6 q' B
- dma_addr_t dmaphyssrc2 = 0;6 @9 X! x& ~2 q% }% _4 B1 l
- dma_addr_t dmaphysdest1 = 0;
2 Y# n0 f6 f& r; P t - dma_addr_t dmaphysdest2 = 0;
J7 I8 Y5 A, |4 f" u; z9 x1 |8 u% T
* G7 I* [5 J& o) }- char *dmabufsrc1 = NULL;5 H5 K9 }, v ], o$ S8 s- Y4 R
- char *dmabufsrc2 = NULL;9 X) R: l. S; s4 d" D
- char *dmabufdest1 = NULL;' g4 k: s8 K g3 ]. }
- char *dmabufdest2 = NULL;
9 k- U0 q# y# d- B8 `8 n - ; B* ~2 P- X$ p6 }" K. X
- static int acnt = 512;# t% @9 p( |" B( f& r8 T
- static int bcnt = 8;
; y3 j9 R0 }5 y0 r- @" R3 c - static int ccnt = 8;7 M7 o4 s+ u. H, @/ @% ]
% B$ P$ K- G; p" x- module_param(acnt, int, S_IRUGO);
9 W O h' @ `* W. u) D - module_param(bcnt, int, S_IRUGO);8 T9 d5 V% r" Y1 i1 h4 J! k
- module_param(ccnt, int, S_IRUGO);
复制代码 ( h( h- \, W! I+ B1 K: @8 W
! }& A* l: z% q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用8 R3 I! R; W- W! X e
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
) x- F( w0 T. M% m 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
1 Y n1 x. V, q9 L+ E" @
4 q4 P' a' x9 ]. v: ^7 R) f5 T8 ^" k, w& U0 u* f8 G6 d
|
|