|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! a3 `% r6 H5 o4 Q" C' x
- [code]EDMA sample test application
$ z9 N2 Y. ~9 G7 v/ p2 Q- ` - /*9 O+ Z4 P* c. E+ J/ l# X0 M
- * edma_test.c6 N2 l2 S( z. j i; ?" U
- *
8 M5 u2 j+ G/ ]* p- ~ - * brief EDMA3 Test Application* _1 p6 Z9 m6 O! z
- *+ E- M/ j! L- N( n4 e
- * This file contains EDMA3 Test code.
6 A' k8 |6 `5 e- H7 c; V - *0 w& J5 x* v1 }
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 ^8 `% A+ v: `% r. ~1 D/ d2 g - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT4 O4 U6 a1 j: `1 ?( R8 M
- * TO CHANGE.
% K' ^. A4 d% t1 v5 R - *# h2 h" u0 c% a7 M" e5 |$ L
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
6 r6 e4 r) ]8 E- ?$ U - *
' i' Z, i1 N; W - * This program is free software; you can redistribute it and/or
" E: n' S! p8 z) M* x* U - * modify it under the terms of the GNU General Public License as
. i* K! L$ J' G9 {! q' x - * published by the Free Software Foundation version 2.
+ P4 m, [) U4 G8 t1 W4 Z' [. V - *
2 Y0 l! n6 W* l( G! [4 ` - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
: R0 |6 x& T) B: U9 u4 } - * kind, whether express or implied; without even the implied warranty
4 s# `- U4 f2 R+ X7 ] - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) p% v5 Q$ K' s9 | D, N - * GNU General Public License for more details.: V/ y& W* k1 d0 p+ [
- */: R/ |4 W; Z( Z' L4 k
6 [$ Y% V$ q+ {9 T7 |: L- #include <linux/module.h>
, u4 v: v- p6 O4 V1 Z* g: L, A - #include <linux/init.h>: }, Z3 g: Y' P* N9 ^% ]: \
- #include <linux/errno.h>& K6 v8 S- D% D- L" p' ]& q
- #include <linux/types.h>& L8 B% u$ c" c
- #include <linux/interrupt.h>8 n# ]; i3 R& K4 |
- #include <asm/io.h>
+ @9 R4 a- f* i5 P2 {2 o - #include <linux/moduleparam.h>
+ W3 m; g7 m% `) I' R% s - #include <linux/sysctl.h>2 V5 l% w- B$ t7 ^
- #include <linux/mm.h>
. H. u$ Q& Q {( ~6 k - #include <linux/dma-mapping.h>
% y8 I1 U8 q' r' l' k - 3 H g# @" x" G& K( o- e, b, z
- #include <mach/memory.h>4 o3 n6 N; p. p2 u+ M9 @$ w
- #include <mach/hardware.h>
' s, w3 z. E- i& J, H - #include <mach/irqs.h>( c% E7 j) r* Y0 o; j; C
- #include <asm/hardware/edma.h>
; ?- `' d9 [ r; ^
7 d8 f5 A( k( V+ @0 Q9 L; S. k$ b- #undef EDMA3_DEBUG
" |& {/ A0 N! n/ r+ s - /*#define EDMA3_DEBUG*/1 `" R# c2 [& {) o; Q) X/ ~. m
9 [- Y/ p% s3 v( t! b5 Q1 j j- #ifdef EDMA3_DEBUG/ S6 D; @/ h: T& G
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 R! S) M, X G& h. i
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
3 z) X) H8 l4 _+ L: X% } - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
+ ?4 N. g0 _& ~8 A* z - #else& O7 z X% L2 d1 z
- #define DMA_PRINTK( x... )) [% j$ C0 c. }! n
- #define DMA_FN_IN: }/ F2 W( g$ Y. E" \; D
- #define DMA_FN_OUT* q8 S, l @. \9 I; o# y
- #endif
7 m) M8 V8 S- v. L - 1 P; U! k0 p! }& A. B
- #define MAX_DMA_TRANSFER_IN_BYTES (32768); o& P5 k: P, {2 W0 N' U
- #define STATIC_SHIFT 3
. V( O1 x0 g, X' _9 c5 B6 R - #define TCINTEN_SHIFT 20) X: u) F! d- A2 X6 U! P) P: C8 h
- #define ITCINTEN_SHIFT 21& z+ P8 B9 u: z% L9 ]- j0 W
- #define TCCHEN_SHIFT 22! ?6 A8 i( _; R8 q/ [
- #define ITCCHEN_SHIFT 23
8 u8 H) O. L8 M8 I" Y
/ g- f- r A$ g) m* j2 T3 T- static volatile int irqraised1 = 0;
* n9 G. N v, L1 r4 S - static volatile int irqraised2 = 0;
0 y! J* ]! P% k) i* G% N. W - 2 b E' j( x/ g. O
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); c- A4 u r! N5 }
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 h$ U0 f, x2 T; M - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% B3 K0 E, v; L6 h: K0 Y - " O" E c9 m, \: v; E! E/ {( B$ d
- dma_addr_t dmaphyssrc1 = 0;
7 Q- w& q u( _; ]. Y8 B: F' g% z - dma_addr_t dmaphyssrc2 = 0;! M; o9 F; Q7 J7 n0 B
- dma_addr_t dmaphysdest1 = 0;
+ y/ L- j1 @4 p# n' {# @1 D - dma_addr_t dmaphysdest2 = 0;
5 v8 q" d- U0 }! M C# _
) q7 N; X- x# o9 I" [- char *dmabufsrc1 = NULL;
% M3 O) |4 f9 X* p1 P0 ] - char *dmabufsrc2 = NULL;
0 v9 f8 e# V. I$ t& p: j - char *dmabufdest1 = NULL;
( v4 ~8 M+ K T: N& ? - char *dmabufdest2 = NULL;& T9 I5 z9 i9 d3 [3 ^4 y4 Y! t
- " S" q; u4 {; R6 c V* C3 Z
- static int acnt = 512;
7 G0 z+ O4 A, _% r* Q - static int bcnt = 8;' N/ F0 k5 r+ M2 L/ @6 y
- static int ccnt = 8;
7 i) M/ s5 Y2 g6 |3 j; n+ V2 t - ! b: `. B: l2 r4 }. k" j
- module_param(acnt, int, S_IRUGO);
- [% S H- t7 \- \' G - module_param(bcnt, int, S_IRUGO);5 q4 F8 R. l1 z( {
- module_param(ccnt, int, S_IRUGO);
复制代码
/ {5 D5 P5 G' Q/ m& Z0 |" U( Q& g! @+ e1 S& I: ]% \4 G& Z
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用' O' U2 m* u2 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- a; ~1 \! N6 m4 x; }- z 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
7 p7 h' R/ \/ l
* A7 t& ]7 J& o% K+ \# v8 G% P
4 J' Y0 i+ \" l5 D7 F& y |
|