|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 F4 u8 A6 [2 d- [code]EDMA sample test application# {* C% Q" u. o% }
- /*# m l* t0 G) w# `+ a
- * edma_test.c
' s& l# R3 ]: j5 S - *$ u9 {2 ]' t2 Q0 c. J
- * brief EDMA3 Test Application) T' ?+ h( A, o0 @& O
- *
; O0 J+ [9 f3 ]/ ]& { h - * This file contains EDMA3 Test code.
! {* J2 Q. M$ ^) } ? - *5 \/ s$ U- h' A" b7 d
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE; ~2 ^4 f$ V0 j* P) A
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT' D$ o9 ^& l! R) j! s9 i( Y6 m
- * TO CHANGE.8 P1 l! F8 N5 d7 ^7 t d
- *
4 ~5 x$ R7 L2 {& |+ ^+ s; G - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/% S. k* D% M9 }/ z/ N. d+ k
- *
: I5 }5 V- T5 v. V x- ^* ?2 K - * This program is free software; you can redistribute it and/or
% T- A6 B; {4 ]9 D4 t6 ]- ?% Q - * modify it under the terms of the GNU General Public License as
X1 M% o( t3 u, @1 Y6 e% }( h7 T- L - * published by the Free Software Foundation version 2.7 _# m9 B4 _* W+ M6 ?* V+ b$ v
- *4 R0 f* A# N& Z3 b$ J1 Q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 {# E: J/ \, P l# c
- * kind, whether express or implied; without even the implied warranty4 F! n& W0 w8 K$ ]/ u$ D! J- x
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ `4 K4 ~4 z; Q* I& e - * GNU General Public License for more details.1 B2 v9 P5 k9 e7 ]7 T' o `: Z
- */
* H/ L1 j$ ^ Y. a3 f - ( Y# m, `9 k! R! T9 V$ E
- #include <linux/module.h>$ L U" |; e4 W- z
- #include <linux/init.h>
, c! H, {: t8 \* `0 J5 | - #include <linux/errno.h>, U$ w x: Z# h5 F
- #include <linux/types.h>
b9 Q; m8 h7 ? - #include <linux/interrupt.h>) F [) R. z. I- `4 w4 K/ F& r; Z
- #include <asm/io.h>
6 S; j! O0 ?9 v" R! c - #include <linux/moduleparam.h>- Q& y: L: L, ^9 b, e' `4 G
- #include <linux/sysctl.h>
. r$ C5 F2 K, K( o! i* z6 D - #include <linux/mm.h>( `$ n8 y! o0 i8 j& e; S+ x" _
- #include <linux/dma-mapping.h>& N7 y1 ?8 k( x
- 8 m' O$ X8 I2 m& Q v& Z5 U& M6 S
- #include <mach/memory.h>" G0 a3 V* w, r& v0 y3 S
- #include <mach/hardware.h>1 V! _ H% O2 B( w' e8 H* C# Q3 V
- #include <mach/irqs.h>
9 h. A T( z4 I. j& `0 W - #include <asm/hardware/edma.h>
' @* y: D; p4 C, ]8 _. }/ P7 u - ; G: H8 I: T; b+ v+ h& B
- #undef EDMA3_DEBUG
# I" M+ X! Y$ F* \$ L - /*#define EDMA3_DEBUG*/. W- G1 g: |/ ^8 _
( G2 J5 z: Q( e. }* ^! B+ j4 x1 p- #ifdef EDMA3_DEBUG
. s" C U# c4 [( Y - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)* p7 H- W, }$ p
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)- v k8 W2 u5 o, w6 w5 [
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" q# \" Q- t; B6 F$ L6 T
- #else* q5 }7 }( f, B. t, d# G
- #define DMA_PRINTK( x... )0 q J M: @' W H
- #define DMA_FN_IN$ b$ {- V+ {# F( ]& `+ V o. {
- #define DMA_FN_OUT
8 g" _, z7 X$ C) C5 N8 S - #endif
5 i! z( J+ C% G( z5 f9 k2 j! S - 3 }( T r- s! z3 o+ B* z) l
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
2 [* v9 \, s: c7 T8 D: Z - #define STATIC_SHIFT 3$ E% }; n/ V2 p5 ^* b5 o. l$ j
- #define TCINTEN_SHIFT 20
% b. {* F! H1 J4 n; ~. ?. d - #define ITCINTEN_SHIFT 21
) B" r% ~$ X( |- N6 ? - #define TCCHEN_SHIFT 22, e$ d n6 h4 i
- #define ITCCHEN_SHIFT 23/ g' Q" z& w$ k
. z0 N" ]/ f& k# V1 u- static volatile int irqraised1 = 0;
8 J, @7 q) ^9 L7 v' R) X0 Z" b - static volatile int irqraised2 = 0;
Q& ^ G+ d5 X2 Y! _ - 6 ]; K- q: g; L1 M0 o; a
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 ]! ]4 e, ^! s3 C( I; N, P
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% j( V9 o5 ^( l A1 F3 G8 S - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ ]: A/ ^* T0 u: C1 E$ q* o- E. j
q6 j2 ?' Q( S$ b% W/ m- dma_addr_t dmaphyssrc1 = 0;; x* W3 R8 T6 p
- dma_addr_t dmaphyssrc2 = 0;. W, n ]7 ]' z2 }( V9 P
- dma_addr_t dmaphysdest1 = 0;
, V: B6 F9 O* `) o6 \; s* }% T - dma_addr_t dmaphysdest2 = 0;0 ^6 Q5 j; a% A2 }# U
. E* b4 E" F- I# ^2 g u* y- char *dmabufsrc1 = NULL;
: J) }/ P6 b0 H" }: { - char *dmabufsrc2 = NULL;
0 p9 {$ d; ^* h$ j8 A* f( ~ - char *dmabufdest1 = NULL;
- }( h2 [2 }! f: z7 V- ? - char *dmabufdest2 = NULL;
* D1 H" A H! l+ @5 t; o- V# F
1 \/ ]% w0 E! H2 U4 g7 e- b- static int acnt = 512;
2 C/ m0 W& A2 H9 w. B3 w: A - static int bcnt = 8;
4 i' |6 q- G) M' }$ P0 W6 D - static int ccnt = 8;2 ?. v1 t( r$ g
# { b9 ~; ]% D# z! Y- module_param(acnt, int, S_IRUGO);
: k% M w: O p+ f+ A. M9 u - module_param(bcnt, int, S_IRUGO);5 }- q( k' S5 P/ V, k! l( B
- module_param(ccnt, int, S_IRUGO);
复制代码 # `( Z. N$ Q: N
( p/ n6 n/ j( o, W 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# h! Y& Z r( {; q$ D# d3 e9 Qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ t3 L6 n+ O5 P' R8 u% {* o' m
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! Q2 |5 u4 M' M' y7 |- O @2 H. ~' c( U& r
) P# r! B2 I t" [
|
|