|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 / [, x; u. b5 a+ v: s
- [code]EDMA sample test application! O6 A! b1 ~3 ?+ j. d0 {: N
- /*; d1 [" h' F% i& q) h' N5 v- E
- * edma_test.c
' T" C8 B( p8 _0 k- V - ** c) H: D- b! Y3 i
- * brief EDMA3 Test Application$ \ z' R7 z% f4 F
- * ~5 S; y/ g+ w
- * This file contains EDMA3 Test code.
# s! w4 r& V( k, g3 a( D - *
# [8 g; L* {+ C+ T6 R+ P - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 N! K. l/ c# z% L1 I' a' J* t" T" P- n
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% T: Z( K/ |( L$ Q2 E+ W0 O/ f; b - * TO CHANGE.
" s y; O2 K& m m2 J4 ` - *
7 @* p1 f. @- f/ r" b4 s - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
1 j. C! x x+ t# j6 F - *
& [+ T3 K$ m! i1 o" h - * This program is free software; you can redistribute it and/or
, U: @" x% t& }2 m( C' u x' E$ ~8 y% r - * modify it under the terms of the GNU General Public License as# w# C3 V- }- h( j; @1 O7 ^
- * published by the Free Software Foundation version 2.' _6 G9 M& c7 I& u) a m& u' P
- ** H4 z, k. ]) q7 k) \
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any4 m' _) Q' e, O0 Q( e
- * kind, whether express or implied; without even the implied warranty
* c2 d# M4 U, z6 V9 P4 }0 k: f - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the2 T& U/ S, w5 @4 C3 y3 b2 v, ]2 ^( B
- * GNU General Public License for more details.- M1 C+ v$ W. C. e; Z V
- *// {2 t8 `4 Q7 [; [% X, @! ?
- ) A3 {, f+ b* _* m+ D
- #include <linux/module.h>) n& f* p/ J; h- L6 V- V* J7 D# x+ ^
- #include <linux/init.h>$ x% }7 J: N5 y( n0 ~" u$ c
- #include <linux/errno.h>- Y2 ~% ^1 K* i/ a8 |( O
- #include <linux/types.h>4 i; |# z8 }1 s
- #include <linux/interrupt.h>, w- ^0 @3 n" w9 A( B- p: ?
- #include <asm/io.h>4 s$ X( Z6 R0 [' x6 h! l
- #include <linux/moduleparam.h>
" Z) ^4 T5 @6 D3 \9 Y# N* I$ F$ d - #include <linux/sysctl.h>" N: r/ I* Y- r, [
- #include <linux/mm.h>
b' T; y+ F5 W3 }! N% h) |) q - #include <linux/dma-mapping.h>
9 l i; V* ?" g+ Z/ }$ l0 w3 n0 l - : b0 m& R% `" Q, V
- #include <mach/memory.h>$ _$ P- M. O8 u: d8 G
- #include <mach/hardware.h>
- `% o. f6 B \; R8 V [' ]) ~ - #include <mach/irqs.h>
5 h" o: d1 ^ O4 Z3 ?( ~ - #include <asm/hardware/edma.h>
6 Q9 _# B5 E" K4 z6 z: _ - 7 o* ]& H8 z, B. r5 q
- #undef EDMA3_DEBUG1 E% x3 z! v/ ?- ]3 L
- /*#define EDMA3_DEBUG*/
" h& G9 e5 n- T" ?/ o) h - c! ]2 s6 Z) C9 c" u. P
- #ifdef EDMA3_DEBUG
3 C6 q4 {* e( a- f% E' t/ [ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
6 z. A C+ W. Q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# G4 c& x4 F6 C9 q, h& E4 ` - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
% O. y# m! Q+ ~- N7 G5 A - #else: x6 {* y7 H- c- p. S- ^ D
- #define DMA_PRINTK( x... )
' f/ r6 u7 H3 d+ z4 a5 Z - #define DMA_FN_IN8 g1 r6 A' w$ u& H. N
- #define DMA_FN_OUT
- [9 _, ?1 H7 L4 S3 {$ j - #endif9 g$ N1 I9 L0 H8 C# k% P
: X- T w) q+ o2 v- #define MAX_DMA_TRANSFER_IN_BYTES (32768)& D( `8 p5 b" L" N% o
- #define STATIC_SHIFT 3- a& k6 A6 L: ?- s
- #define TCINTEN_SHIFT 20& I8 W; Q g- \! v" S+ g# _
- #define ITCINTEN_SHIFT 21$ [' o6 C; O9 Q6 t
- #define TCCHEN_SHIFT 22# Q: X0 t8 M- H" a
- #define ITCCHEN_SHIFT 23
6 r4 d0 h) K- k
/ W s, V% F* x, Y3 p- static volatile int irqraised1 = 0;
! c, D& T# E! L/ B7 h) h" R - static volatile int irqraised2 = 0;; v- ~ x/ d. f# V0 E; i$ H- k
% r+ U( }% F( A$ D* X- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 C# m: r/ b* c) [ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 u/ |" D) v6 l3 s9 g5 n# t$ C* S2 n - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 ~) \+ w* v" z# k7 `3 }$ s1 \ - " K2 s3 _0 m' L* T
- dma_addr_t dmaphyssrc1 = 0;
& a/ V, C+ P% b% X) b$ t* _4 K - dma_addr_t dmaphyssrc2 = 0;' h2 j4 }* p% h- i/ J) L* J; R
- dma_addr_t dmaphysdest1 = 0;
) _2 g! k: W6 K3 l - dma_addr_t dmaphysdest2 = 0;) y0 k: A! @9 g& k
" B+ X' \% A$ p9 d4 }7 d7 A1 s$ m- char *dmabufsrc1 = NULL;
+ F) m0 _, S4 J, ` - char *dmabufsrc2 = NULL;" m; y; p. R* Q# @7 V M9 F
- char *dmabufdest1 = NULL;! b4 `( W8 F7 Y( A- R
- char *dmabufdest2 = NULL;$ Y8 }3 R. d* B. T3 P0 }+ K* n
- ( j& `6 G( T9 u
- static int acnt = 512;0 S0 _3 M: ^$ `5 H1 f2 M4 @( s
- static int bcnt = 8;, |8 Z0 F! ^% H
- static int ccnt = 8;, ]: ]( q( N8 m. Q' N
- 8 s* n" i" S' g* M2 T
- module_param(acnt, int, S_IRUGO);/ F+ U! |# k0 a0 y9 W+ o6 ?
- module_param(bcnt, int, S_IRUGO);
' |9 b% H& X3 a8 d3 \9 v - module_param(ccnt, int, S_IRUGO);
复制代码 8 I3 B+ D3 l$ I, b$ \) J$ Q
* q! N: ^) R/ z# r# S6 o% J0 y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; L" h5 U$ e' P( v: Narm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& r& Z c5 z0 |5 b
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 @" s' Y. @- @ e7 g% C
( E8 G' @, F" A8 Y& A1 g+ a$ L2 c: A3 Q9 s- u4 L1 M p0 ?2 r) T
|
|