|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
0 v! x1 w- s# z K! h: @- [code]EDMA sample test application. |( _- {7 |1 f( p# b5 S5 J
- /*
3 k/ j2 f! r. H U - * edma_test.c+ K: |; v' x! a/ p: k* w
- *
; j5 r8 N6 I- Y' ?/ F( y - * brief EDMA3 Test Application
$ y4 z N$ }, i4 H: [ - *
3 f' Y- L0 E5 I g6 {# e - * This file contains EDMA3 Test code.! J0 X" b! M: S6 o$ ]
- *
f i/ E2 b' Z5 }# J& Z+ w - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
9 Q* O8 g n6 Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! A4 R+ @; [1 D% \& X$ A5 i
- * TO CHANGE.
: P2 C: i- b. F. Y p - ** C2 _5 p' w4 a0 {, \
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
! M8 m5 h* \ s* n7 m, z - *" [4 d6 F; S. W- }/ `: u G
- * This program is free software; you can redistribute it and/or: p! C" I( b9 Q J& Q% G
- * modify it under the terms of the GNU General Public License as5 ]. ^3 ~' r2 t/ v' ]3 G' ^- N- L' R
- * published by the Free Software Foundation version 2.- ]% l8 W S- u) c6 O& S' `
- *# K; d# c' ^5 p! q7 m: B+ t
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
( _) t+ N5 ?1 B7 G - * kind, whether express or implied; without even the implied warranty
" e* m" }1 K! n" H$ v- i/ G, K! y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the& N/ \7 K5 I5 a! m
- * GNU General Public License for more details.2 k+ H7 g' u' h. {& w
- */, [: G4 c- V0 r. W, h6 u+ d
3 ?2 `! X; S+ n) W- #include <linux/module.h>- s, J! ~8 p6 ?- \
- #include <linux/init.h>
( E4 T' K. T5 Z0 j* I - #include <linux/errno.h>
' K+ ~- J M9 H! K" I - #include <linux/types.h>) V, O# E% ?3 j/ h& R( C
- #include <linux/interrupt.h>
; j" o; d4 H( U$ q+ @ - #include <asm/io.h>
" ^$ Z/ c: H' S! m3 O - #include <linux/moduleparam.h>! u) m8 e: L l* N
- #include <linux/sysctl.h>
/ h. K/ ~' C$ Z2 s& d( P0 ~- B- u - #include <linux/mm.h>/ S! a1 w6 g9 P3 {" @4 }
- #include <linux/dma-mapping.h>+ E! P! X, v" ~' b/ O
- 4 {0 f4 ]+ z, ~, m
- #include <mach/memory.h>1 K Y& b: k" m; w
- #include <mach/hardware.h>" G& k$ Z8 S. h4 J% d) \
- #include <mach/irqs.h>
' \; r7 S# G( v2 O. m% _& p - #include <asm/hardware/edma.h>2 T1 D2 H; Q$ b* q% u
- 4 q& y5 u# K/ j5 P" u( L2 [8 D
- #undef EDMA3_DEBUG. S4 Z) y8 F4 Z7 N. m
- /*#define EDMA3_DEBUG*/
! l9 a/ G, `" H2 U2 _5 X/ E# _$ m
7 }' a* Q) R" W, [- #ifdef EDMA3_DEBUG$ h B0 M" R& a# r$ B
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS), m: E" l( Q* _& i
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)5 }' C. R2 r, S7 y$ o! C" h! D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
/ l ~1 j8 B* E; B - #else" K2 I# V( P$ P6 G
- #define DMA_PRINTK( x... ). m6 V( U; O/ V8 |! q; [8 g
- #define DMA_FN_IN
! F" m: {1 _# h$ W1 [. ?% Q2 P - #define DMA_FN_OUT+ c- b. p" K) \6 Q5 a
- #endif
) Z7 Y4 i2 k+ Z
( m& z7 X( ?5 G% E1 X0 q) c- #define MAX_DMA_TRANSFER_IN_BYTES (32768). \/ a7 }9 H; }0 A3 N0 |9 u1 s
- #define STATIC_SHIFT 3
5 Z2 E6 `( C) p - #define TCINTEN_SHIFT 20
$ o3 A, K3 t7 k/ U$ ? - #define ITCINTEN_SHIFT 21
) C( ]" H+ R% @ - #define TCCHEN_SHIFT 221 C4 J( z' Q9 }5 P
- #define ITCCHEN_SHIFT 23+ ]! n' T2 {4 k h% X3 W) E: X
- ! B4 B1 t- ~6 g3 p6 |! B Y
- static volatile int irqraised1 = 0;2 X5 @' l$ V5 B" Y. w9 Z5 v' L
- static volatile int irqraised2 = 0;
7 g4 N! }3 r4 ^* `5 j - 0 q$ X) ]; S( f( Q7 n0 _2 k
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% }& _* l* T7 k
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 T8 ]- M0 U: K
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 I/ E0 V2 I0 c$ y; G N# F3 q- b
! T$ k+ O! w* _- a( y" y: E* A- dma_addr_t dmaphyssrc1 = 0;
( w4 p5 C1 m7 M( \8 N - dma_addr_t dmaphyssrc2 = 0;) e; L5 A" V D( p" A
- dma_addr_t dmaphysdest1 = 0;
. T; `( X* d9 t, ~$ s& {- I - dma_addr_t dmaphysdest2 = 0;) z2 B4 C- @6 @# S2 u
- 8 i) ]) x" e. U1 |8 L. ?! |
- char *dmabufsrc1 = NULL;, h, `6 j) t# }. i) c X. T9 W
- char *dmabufsrc2 = NULL;4 Q- w/ O' n: \8 K: e
- char *dmabufdest1 = NULL;
- P" q! [6 |& _% C# s - char *dmabufdest2 = NULL;
5 }! Z7 b8 ?" j4 h - 3 r0 i' W3 w" m' b# w A d; n
- static int acnt = 512;
/ J, n5 k$ ]* N - static int bcnt = 8;
$ b0 i' t7 d* W( v - static int ccnt = 8;
4 V/ f( x; E* U; E# k- d/ b' e) ]
8 p3 h/ Z' I- C# `- module_param(acnt, int, S_IRUGO);
- p! I: G" e& w/ M% @% _9 z$ T - module_param(bcnt, int, S_IRUGO);- {: E% v1 @$ s
- module_param(ccnt, int, S_IRUGO);
复制代码
0 n6 N; u* y( X* a/ l: h) t' |8 N2 f
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用; d3 y0 }- @7 J, r+ J
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 @; D9 V% R. r* L/ O" [7 P 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; n8 C Z: [; `8 V* Y |- S
, \0 \) G* k2 z! g4 y
6 p* f5 l: O9 d0 ]9 s# K8 [ |
|