|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ c" M& i9 _, l9 h: J0 o3 C, t( w
- [code]EDMA sample test application( }. A1 x$ Z; J5 d
- /*" [8 k* M. Q- N% ~/ |, E+ w
- * edma_test.c
8 J- O; J, u5 `% c& h8 K! W8 Q - *
( J M' N- a) l: Y. ~9 A - * brief EDMA3 Test Application
2 T+ I; I/ `) u5 `6 e - *$ |" M9 }8 I L# A8 f
- * This file contains EDMA3 Test code.. v- T6 z( [2 g; J2 g
- *
1 g' d2 p% t; r) Y, C - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
/ o+ K3 ]: F: C1 i2 T4 c - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
; g4 a) X/ i z - * TO CHANGE.
: Q5 d) F6 ]' ?8 F7 b4 u - *! Y: G/ L' [6 T9 G
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ u7 j& @3 ]5 k1 v/ n1 J$ S: ] - *# _0 V: G1 \6 N8 `% L7 F- M3 x
- * This program is free software; you can redistribute it and/or
8 `; i5 a9 Z. e7 J: `- O: U - * modify it under the terms of the GNU General Public License as
+ z. p* }0 d; O! x5 p - * published by the Free Software Foundation version 2.
! m# n, N3 A" W5 P, r" B- Q) Y - *1 G# y q8 K/ x9 y& W7 v
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ a# g4 R% F! _) k8 k8 ]# V& v
- * kind, whether express or implied; without even the implied warranty5 \* E1 F/ e& J& ?6 e
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the% c. b0 O# b* y" I% H
- * GNU General Public License for more details.% b/ h& S) C) U0 Y, u. R0 q
- */
* m: g7 r6 U( {" f- M, S+ w; C; }) s - 9 j8 i* V2 {) g) G C
- #include <linux/module.h>
, h) v1 ]* R+ M - #include <linux/init.h>! }4 P$ y. n! n: _
- #include <linux/errno.h>
$ N4 G* Q. {7 K7 l/ X+ r" F - #include <linux/types.h>
. C! U; \4 N) K( o; p* `6 h. t - #include <linux/interrupt.h>; ?5 R4 @# K0 Z" Q
- #include <asm/io.h>4 p6 k# F- K' j+ u1 J( n f
- #include <linux/moduleparam.h>4 o4 J7 r' x. T0 I* ?& C( {
- #include <linux/sysctl.h>2 s3 S! E: t# @; z, g
- #include <linux/mm.h>, k% s7 M% ?6 |7 k$ x5 I5 b* I
- #include <linux/dma-mapping.h>5 g. @, Q' P1 H' R
- 0 D3 C5 B% n1 Q# @" }7 M
- #include <mach/memory.h># `* k* E; |0 l4 M9 {
- #include <mach/hardware.h>" f2 x& a% X6 U! f$ [
- #include <mach/irqs.h>6 [7 A6 H& [% }2 |6 o" a" e
- #include <asm/hardware/edma.h>; [# b! V8 c5 ^: h
- 5 i0 V8 B+ s6 z; w
- #undef EDMA3_DEBUG
# S' |. ?7 B* K( s! o: D - /*#define EDMA3_DEBUG*/2 @, X# I- h8 e$ P' d
: ~, b* Y4 R) C( I( [/ |0 B- #ifdef EDMA3_DEBUG
1 V( l( V/ J5 F* E( \3 }; _ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 R3 f+ u7 H1 C9 E5 T; e
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 e% y1 z+ I" Y& [! H - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
1 V. w- M. G6 M% [5 T! ~: i5 v- i - #else! k i) t3 O _
- #define DMA_PRINTK( x... )1 ]. N& T- D; i6 s% q* w
- #define DMA_FN_IN
1 T! c V) {. Y% a$ R. ~ - #define DMA_FN_OUT9 Y' C! w) D5 c
- #endif% J- f3 U/ X/ f' M4 u
- ' u& J' ~% ^3 L- l9 k
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
/ l( B* Z9 L2 l( B" M - #define STATIC_SHIFT 3
% L: T" A. v( ^. o - #define TCINTEN_SHIFT 20
; a" A' p# e b0 {: ^+ x9 a8 M8 d - #define ITCINTEN_SHIFT 21$ y3 h. I! e4 ^, m- r3 `# @" B6 z. N
- #define TCCHEN_SHIFT 22! w, l/ G9 v6 k% j+ }0 R
- #define ITCCHEN_SHIFT 23
6 R( R+ q e& h- I7 U, t - 8 W8 I9 |/ X" z7 n: a" Q
- static volatile int irqraised1 = 0;1 U0 D7 u, p7 c) m, _% f" L$ o
- static volatile int irqraised2 = 0;
. N" h1 [8 q+ b3 s - 2 {/ w1 p. O" _9 H* t
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ t4 ^% c n. ~$ R9 [: ]/ J
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' x1 j7 x+ Q" x8 X- b
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' k# r( I" e) i! }5 l' A4 N
* b' G, p7 b( a$ W4 \$ P- dma_addr_t dmaphyssrc1 = 0;
& }, m+ a( t5 d$ E! ? - dma_addr_t dmaphyssrc2 = 0;
0 P0 i' e/ C0 Z3 h - dma_addr_t dmaphysdest1 = 0;" c7 J' {% X" S; E* i
- dma_addr_t dmaphysdest2 = 0;
& T; Y, v* s* v- u - ' E/ l4 G0 B1 z V2 ]
- char *dmabufsrc1 = NULL;, t7 W5 Y1 ^; X% w5 Q
- char *dmabufsrc2 = NULL;) O4 W- a. \) _+ O0 a8 Y1 X/ C
- char *dmabufdest1 = NULL;7 @6 |0 ^: c( P3 S5 @9 t, E. k
- char *dmabufdest2 = NULL;
8 j% |0 \! H6 K G4 x
5 P1 x b7 A) h! W- static int acnt = 512;
2 @/ Z/ _) \- `/ L/ u2 R1 t+ k - static int bcnt = 8;
( B/ m" I7 G3 N - static int ccnt = 8;. l b8 s8 o6 k' x0 [
& q% X5 p' p4 C- module_param(acnt, int, S_IRUGO);- L! S+ x! R0 q: q- G: y' j) `! I
- module_param(bcnt, int, S_IRUGO);, G- U9 r7 d1 ~9 r$ C
- module_param(ccnt, int, S_IRUGO);
复制代码
* G" c+ x$ E4 c7 r. S$ Z. C# V* Y" M9 Q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
0 Q) Q( h# X! r1 P) 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 J7 _! `* K; V) F, \ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
3 ?) I- s7 W7 o- y5 [' `7 W" V, K3 A
4 m' h4 b% ]# i& v
|
|