|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 & R( ?; f: b" G+ [
- [code]EDMA sample test application
( m( p2 S: }5 u' b$ `1 U. V( u# X - /*
: e9 R; u$ R6 | - * edma_test.c! L }( j8 }0 V, F
- *
( m3 ~0 R" [" T3 l8 J - * brief EDMA3 Test Application& Y3 D9 x/ E- B$ X/ l* _7 ]1 d$ ]& b
- *
7 u. Y$ C" L% p( B7 [ - * This file contains EDMA3 Test code.* B' m$ _) n2 @8 C, ~0 s: _
- *
3 Q& A" w! z; P) B3 N7 C# ^ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE) [$ o6 a, Y' D7 R7 L
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT8 }4 G3 D; Q% T4 P) T& Q* ^/ C
- * TO CHANGE.
4 U$ I$ Q; E C - *
5 B" Y* b: ?2 {' U1 ~* c5 R$ l4 E - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/; k4 @" T& E. m" ]0 p1 @" U
- *& u. h/ N0 |6 v. C8 R
- * This program is free software; you can redistribute it and/or
$ n8 ]! R: y1 I) a - * modify it under the terms of the GNU General Public License as2 J) n& b) O# Y/ \- B
- * published by the Free Software Foundation version 2.
) b% h9 z' D! J @( B! \+ X, @ - *
( Q7 r& X, {, i! x8 E% w) h. d- W - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# h# i8 j0 |' c, E - * kind, whether express or implied; without even the implied warranty. h+ D7 K" d, k) q4 ]( r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ [- z8 p% {) d: K8 h
- * GNU General Public License for more details.
' |, w7 ]2 P) z" N - */ X+ }' u9 G4 z8 b( e" K) m' S
2 ?" Y. i, F% \/ r- #include <linux/module.h>
1 H8 L6 s- g" E3 s" u" N. B# t - #include <linux/init.h>
7 H" y' Y r* W: [ - #include <linux/errno.h> C, w* M# w/ `2 I/ U- z
- #include <linux/types.h>
6 _3 k: f$ l# ]; D% T - #include <linux/interrupt.h>
4 S2 R7 z( A: m - #include <asm/io.h>
8 g4 G4 d- T( o: |+ _' e - #include <linux/moduleparam.h>' ~) F% U. o6 C5 Q; M9 m
- #include <linux/sysctl.h>9 p3 j K" Y9 d/ M7 @
- #include <linux/mm.h>7 e" g" M. C" G
- #include <linux/dma-mapping.h>
2 t. N i3 y/ t ` - ( D, }" ?( \9 R
- #include <mach/memory.h>( }+ |3 t6 s' j1 W6 n u
- #include <mach/hardware.h>3 ?1 E/ x% O m9 q, g
- #include <mach/irqs.h>
. p+ l( ?; G4 L- n - #include <asm/hardware/edma.h>5 E/ ? }" j, n1 d* {
" j* B0 n& R9 N& u- #undef EDMA3_DEBUG" \2 M ~8 ?& G6 g5 d2 T
- /*#define EDMA3_DEBUG*/0 Y2 O/ w6 ]7 `4 l/ k3 O
- 1 B1 G: s9 O8 d9 K5 Q* w+ w* Y
- #ifdef EDMA3_DEBUG
) Y6 c" ^. e5 h - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)- _. x4 A0 k* q1 g
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
" X# w- Z5 X2 ] - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__): w2 n8 k: l6 Y9 Y5 e( z
- #else" O" q' V* R2 ]) R) [
- #define DMA_PRINTK( x... )5 o0 c- b* j( Y. I( u, @
- #define DMA_FN_IN
0 F. ]. d; ^& C: w" s - #define DMA_FN_OUT8 ?/ Z9 A5 G% N" F
- #endif
2 d, `, P# d% x% |. d
' \! @& {0 v* H' Q a: N+ s- #define MAX_DMA_TRANSFER_IN_BYTES (32768)2 Y1 P* U* H9 g, j
- #define STATIC_SHIFT 3
. _5 K8 P, c' J3 \5 Y - #define TCINTEN_SHIFT 20
8 ]) ]% _; D8 t7 J - #define ITCINTEN_SHIFT 216 c& Q9 N6 k3 b# x, h
- #define TCCHEN_SHIFT 22+ M/ t! v3 `5 E. ~' h0 o
- #define ITCCHEN_SHIFT 23' T. ?* R; p/ }9 z
7 O: d2 \0 ~( i- |: i- static volatile int irqraised1 = 0;
4 F) z9 i& b }' K# n6 U5 C5 T; ] - static volatile int irqraised2 = 0;# A2 j w; c) c( E
' ]$ B7 y- z! ?- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); G6 N {: b3 x9 d R
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 Q+ {8 u2 r N; t1 U+ d) I- Q, H
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- a/ |* ^4 v7 w3 g
( ~$ a _9 T) x# k' ~- dma_addr_t dmaphyssrc1 = 0;
! y0 R- W0 ~8 K - dma_addr_t dmaphyssrc2 = 0;
3 w9 |* r* X8 V - dma_addr_t dmaphysdest1 = 0;' v8 A% T4 z: A
- dma_addr_t dmaphysdest2 = 0; ^3 I# g* I+ c! K
2 c; X8 y) k4 t- H. e- G& e- char *dmabufsrc1 = NULL;
- E7 j& `$ ^0 k) ?: o( b2 [ - char *dmabufsrc2 = NULL;
J/ r9 F" k* _( ] - char *dmabufdest1 = NULL;
( e' O! m- _/ ^ - char *dmabufdest2 = NULL;
% Z0 I* s) ~; K( C# S- H- g
# X9 M4 e5 x+ y" a# K- static int acnt = 512;+ T: f& k% I5 X1 [# h* ]
- static int bcnt = 8;
6 l) U- B) H! ]8 j M; |2 f( v - static int ccnt = 8;! x5 O" ~7 R' I+ \4 u4 O
6 [7 I5 ]) q+ j1 A* J. r3 C- module_param(acnt, int, S_IRUGO);
: y7 a% O d6 z) I - module_param(bcnt, int, S_IRUGO);6 m- e/ h6 |3 ?: j( c7 B7 B
- module_param(ccnt, int, S_IRUGO);
复制代码 & P4 |1 g5 R6 t
& o8 G: Q' [0 N5 `; x
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用* U/ U# J6 m/ a- b* t
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ }* b& h; n: u% _2 z' p 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ p" J! ?; d" I3 Z' c2 B% L/ d
5 f; O4 z+ H# B/ l7 i+ _2 O% ?$ b4 `; g0 T
|
|