|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) h5 x* ~# Y" Q0 ?& c1 W% I. n
- [code]EDMA sample test application
7 z9 g6 g8 H3 ~# J/ ?3 t% [/ p - /*
" O% e/ g b" I& i$ \. f - * edma_test.c( Z9 ^: g" }6 Q' G4 V* {+ k; @0 b# u
- *+ O; A. l" i D% j& A: d
- * brief EDMA3 Test Application; B+ @- p) a1 x! A
- *
5 D% ?, N" g2 x; [8 Y' e - * This file contains EDMA3 Test code.
, U' d/ G, P0 E: ? - *
& \, o; R! K t# ?6 W3 K4 W - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE p- h$ U+ V# o8 W ?# ?
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) B6 U/ H; J7 O$ K - * TO CHANGE." f9 K2 r+ c k, H- @ w! G' \
- *9 J U) L, t' @2 N, r* P. Z
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) G6 N' K% p/ G
- *
; T* z# c0 g/ Y% Y' l - * This program is free software; you can redistribute it and/or
* |1 @9 s! G5 W2 e* |. `/ @ - * modify it under the terms of the GNU General Public License as( [: ]9 F- v: D" P5 \: _; Q/ G& w
- * published by the Free Software Foundation version 2.
" Z' O* i" m, T/ r% B; {8 f* x7 Q - *: p8 Z2 E9 X6 D$ O
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
8 V" J# @& E- K/ w - * kind, whether express or implied; without even the implied warranty: R6 v3 B5 h& ~2 `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ C6 X4 L( C; b9 Q' z* h
- * GNU General Public License for more details.( a4 V5 h" B: ]7 q
- */9 X( v1 ^6 p! H' n* A
/ e) J8 o$ e2 ^ Z- v& [- #include <linux/module.h>
" O% R$ y X0 X- T0 Q - #include <linux/init.h>( r; Z- G" \) E+ S% ^
- #include <linux/errno.h>) W& c- f8 A4 p0 q2 m& H
- #include <linux/types.h>
8 G \6 l4 w0 N8 l0 u - #include <linux/interrupt.h>4 X: j2 H" g$ ?# o, O; U8 r o5 t& e
- #include <asm/io.h>
9 D& E M8 s6 ~) S/ C - #include <linux/moduleparam.h>+ v% c7 V/ n- d0 v
- #include <linux/sysctl.h>% m& m! c! z5 [0 v" \& C
- #include <linux/mm.h>
5 h! C: q, J9 m0 G3 q) L - #include <linux/dma-mapping.h>
' L8 a* T" E( d M - ! [# ?6 H0 b. Q. c, |& i. Z) C
- #include <mach/memory.h>
$ W6 Z- T$ K. }2 d5 c - #include <mach/hardware.h>$ Q4 H: D! s6 \5 P8 {) C# e
- #include <mach/irqs.h>
/ a* u5 p: w( u3 f8 ]6 f - #include <asm/hardware/edma.h>, h k C; I# e9 \ t' b3 X% i: T
8 f" A/ q& t7 a# [% n7 @8 R5 A- #undef EDMA3_DEBUG
3 A& V" W3 u8 q4 H1 G3 @( j2 O - /*#define EDMA3_DEBUG*/
' a' ^* B9 a( B. N3 _
' B2 C' X' |+ ?( q* ^- #ifdef EDMA3_DEBUG4 |+ Z# M/ s$ e: p4 P+ f
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)6 [1 E1 ^3 N8 p; V- y; i; s' l% a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 J3 B* J/ f2 ~& ` - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
$ E/ _" a1 a' Z% @+ b2 b - #else
8 C/ Z+ f! r8 O- q# ^: G9 v - #define DMA_PRINTK( x... )
. q! v h) V( q/ u' \* p7 S - #define DMA_FN_IN
+ `; Q+ }1 {" e9 ~1 M - #define DMA_FN_OUT4 U( W1 I1 k6 x: k
- #endif
; [+ t/ k4 m; W3 r; |
5 M `; v& l. w0 b% U- ~# K- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
5 `) u0 u# \+ v( D: d1 H - #define STATIC_SHIFT 3. y9 D9 _' l2 p) z4 d7 o0 z
- #define TCINTEN_SHIFT 20
8 H$ P! G" ~: w0 I% l - #define ITCINTEN_SHIFT 211 O, z. w) J/ Y
- #define TCCHEN_SHIFT 22
: w+ V) H) E, u$ J- u* J - #define ITCCHEN_SHIFT 23& I( m! q) {- N) F' y
' q, g& t1 r, z7 i- static volatile int irqraised1 = 0;# S( F Y j) m' B* a; P
- static volatile int irqraised2 = 0;7 Q X* |2 j4 U# q- o! C! v
- z% i/ x& c" G% q2 }9 b
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 |6 L8 d4 R* z* M. N& d: ^& o$ ]6 B
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 `; D: N2 u* |/ w+ [ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 |9 ?! G* T0 b/ h& \
8 [& U" I* W/ F$ s6 @0 G- dma_addr_t dmaphyssrc1 = 0;. Z. M3 }- a9 h# U/ o
- dma_addr_t dmaphyssrc2 = 0;9 Z0 S1 C; ?7 b
- dma_addr_t dmaphysdest1 = 0;
) b* I/ q- V# i9 I0 k - dma_addr_t dmaphysdest2 = 0;
4 B9 _ D( f4 y+ A$ K1 i
8 J' I( z* f1 e" V! U$ d. c! k, l' j- char *dmabufsrc1 = NULL;
1 }. y' s! C Y- ?4 | - char *dmabufsrc2 = NULL;
+ T+ \+ R. ]' ]# _& p/ v: G/ u) g5 I1 ^ - char *dmabufdest1 = NULL;# w+ A1 B' U; f) f- J( C' f4 |% M
- char *dmabufdest2 = NULL;
1 |9 O3 s% H3 ~0 B* \- K5 Q
' V9 }, Q- Z- C) U7 r8 n- static int acnt = 512;; [+ `! j+ x/ ]
- static int bcnt = 8;
) U0 K- p$ s, O# C3 h" G( {0 l - static int ccnt = 8;
3 ]7 f x7 H% J; r+ k - : @& z/ j- m0 G; Q2 E$ P% B6 B
- module_param(acnt, int, S_IRUGO);! y7 F1 q# n/ r4 A% f0 Z1 `( p
- module_param(bcnt, int, S_IRUGO);
- Q! U; S! h$ J" K7 |2 |( o - module_param(ccnt, int, S_IRUGO);
复制代码
4 `1 w! m! V4 y1 S5 E' S& p+ q
5 O* a3 }' }4 x4 ?" P6 O+ d 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
4 Y! n. Y, F- d$ Xarm-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 N" ^# f+ a) [) E8 B8 _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。4 G# J! f2 X- r( z, ^! C; R/ a
" J$ E7 ~* p9 _9 L0 K! h
) F( s4 G8 l, b7 j, ~ |
|