|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
6 v* d) ?4 i- h7 C& H5 }* v! I- [code]EDMA sample test application( i# o: N7 M* N4 c7 y9 ^
- /*
5 g& L* x: p. R- L; L: z - * edma_test.c
T7 i, j. g$ }% O% o* f$ e - *
9 X0 f% V/ n* ^2 D a) G' j - * brief EDMA3 Test Application- F# n( b2 s0 h% E0 j1 }
- *
/ \; k! h! ?' l3 \ - * This file contains EDMA3 Test code./ Z- H/ D( G1 R9 N
- *
8 J5 m: G. l' N - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 d: F0 r' @( l; K f( I - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
5 [; p7 j) I: b0 U - * TO CHANGE.' ]8 e5 B! u X2 O7 ^. ]
- *
7 i/ [1 z. `$ z) l/ B( H- v - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 s+ T2 u3 D" c/ P( B - */ ~# j- q9 ]$ ?& N( E! B. E7 M) h
- * This program is free software; you can redistribute it and/or
- t. d" @: r, {+ S/ D$ h4 m - * modify it under the terms of the GNU General Public License as: ^# q. Y2 M6 ^8 x" J; j/ X' e Z
- * published by the Free Software Foundation version 2.
* r/ f. t2 Q7 ~$ z% o - *0 _' g) Z& {5 W( j
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 N0 Q* a: L2 w3 r
- * kind, whether express or implied; without even the implied warranty
, {7 x+ r ]8 |% J4 b - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 m, N( F f0 ?" r3 o; P
- * GNU General Public License for more details.
5 C6 k; L$ Y' @! R - */
% x/ F- R. z+ j8 j' c - 4 U" A# T. }/ V& g5 m7 ~
- #include <linux/module.h>
/ ~2 T" F; }( k; d - #include <linux/init.h>
" T- n7 m1 ?3 O$ ]5 U' z - #include <linux/errno.h>
! c% P. S6 o1 X - #include <linux/types.h>
& B0 U; {% G0 g0 ` - #include <linux/interrupt.h>0 r1 O# x* `7 c4 Z; U& h
- #include <asm/io.h>
9 ~% j& p5 c7 P7 K2 c* Y - #include <linux/moduleparam.h>, o# L' g) X5 x# H6 [, L
- #include <linux/sysctl.h>% s. @4 t# q" g* C6 ~6 P
- #include <linux/mm.h>
$ d5 a9 z8 w" M# z( b - #include <linux/dma-mapping.h>
5 X$ I( _5 u A1 ?+ x4 ^ - # v4 L1 j& y) I; a3 L
- #include <mach/memory.h>
& S, h% N) A6 B$ h0 {% f - #include <mach/hardware.h>
9 m* ?1 k5 O9 v6 @' Y# V3 } - #include <mach/irqs.h>
: r4 N A' l: ?9 F* Y - #include <asm/hardware/edma.h>
) q% O# c! t' y2 M( y
* I1 q! | u- z1 y1 t1 g" b- #undef EDMA3_DEBUG% q+ }+ B* t* S7 N: _ |; [6 K
- /*#define EDMA3_DEBUG*/
}! P% W' |: t" D2 q- b4 p$ h - 9 X. Z- D- Y7 L6 S3 I/ J
- #ifdef EDMA3_DEBUG
" R) H* S! j- x" _5 L - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* F3 S. }0 K9 o- |. @4 I! D5 H W - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__), y5 ?2 ?! Z6 C; L3 [% Y: l( K$ p2 {
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)! c( b6 H( h- `0 ~1 ]9 t
- #else3 c! k. T; {4 `! ^4 J
- #define DMA_PRINTK( x... )
* B' f4 w; b+ s - #define DMA_FN_IN( m% F5 ?2 b2 |$ {9 |6 Q* y
- #define DMA_FN_OUT
4 q- C# y1 ~4 ^) Q - #endif
+ V3 z% ^6 f; u' j$ n - 0 J* k9 W7 l; j; M. @
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
; i0 Q4 } o; `: |/ D - #define STATIC_SHIFT 3
5 P# y2 o* I, i* c - #define TCINTEN_SHIFT 20
4 b6 k( {5 V# {( w2 h: } - #define ITCINTEN_SHIFT 21
, C% L6 `6 s: C - #define TCCHEN_SHIFT 22
) X( O' |. }" @4 ]2 ]& X% o - #define ITCCHEN_SHIFT 23$ i) L% y- z8 l
0 Q# A( v) p$ P! U, _- static volatile int irqraised1 = 0;
2 R) ?% N g* L/ H- M; ?! Q+ A6 w$ f - static volatile int irqraised2 = 0;
+ ~2 p: T0 C- ?0 G9 M - 1 v. H. ?( \# l' v$ V8 |
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 C( C8 J4 O& f2 J - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& l; u+ o% \$ \; { - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 u4 i6 e$ @5 k1 z/ J; t' g( Q
- 7 \, G0 ~; ?( Z# ~3 m
- dma_addr_t dmaphyssrc1 = 0;; _2 T7 J$ p0 S j
- dma_addr_t dmaphyssrc2 = 0;
- t. b9 r( s$ W% [4 k - dma_addr_t dmaphysdest1 = 0;
$ O6 D' a4 N+ O* ^: k - dma_addr_t dmaphysdest2 = 0;2 k2 {" X. Y. z! W1 V
- 4 x4 u$ J! X$ y
- char *dmabufsrc1 = NULL;, `" Z7 b, o" P- e
- char *dmabufsrc2 = NULL;
7 }: _ |' I" v: a5 ~ - char *dmabufdest1 = NULL;1 t- E. o4 i/ F9 f: e: Q6 }
- char *dmabufdest2 = NULL;8 |; {" x! R0 ]3 e
- ! d* y% f _! ^, K& z
- static int acnt = 512;
( i. C9 C9 K1 @9 z - static int bcnt = 8;2 P6 i( m9 e: ^* y$ S
- static int ccnt = 8;
& m' n) I- V9 c. K/ }/ K - . F" j% P6 v+ o w" g& V/ V c
- module_param(acnt, int, S_IRUGO);
& x) L3 c9 X: r" m0 k/ v - module_param(bcnt, int, S_IRUGO);! `% Q" o2 ^) M8 c3 e7 s
- module_param(ccnt, int, S_IRUGO);
复制代码 5 e, @& y$ y# X. d. `' v
# w& m: ?3 m/ y4 z$ `
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
: i4 [" ~6 B2 L7 Larm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. M; B) o2 T6 l" T R& b( y6 K 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
' i; ~3 v1 F" i3 I0 K4 {
, w- ? h1 w( V: p) L# I
0 b |! Y& ^5 ]# \2 T3 `' W; V& P |
|