|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 , j. k Q5 o6 S
- [code]EDMA sample test application
) v5 v& L6 q$ [1 B - /*
. S* U/ v% [$ t1 r- T- R - * edma_test.c# O7 J4 L5 J* k' J
- *
4 q8 B, @# ]9 E: w* I - * brief EDMA3 Test Application, l% L- |7 R% `+ [
- *
8 U, F: Y" x* k - * This file contains EDMA3 Test code.9 o/ D; ~+ W( e* @$ g
- *
" m+ r9 v' j3 r& J/ z. s - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
: \- j/ x! l1 z, [& n0 ~8 a - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
+ X6 B: v# p# `, G; [$ u - * TO CHANGE.
. K' D; }* N$ O: z - *
! @/ C) R) I' W' r - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/, d B3 }, U" f! A5 B; E
- *
: ~" h6 u( W& ] - * This program is free software; you can redistribute it and/or
" w; f# s! P" d1 R" M' S! S - * modify it under the terms of the GNU General Public License as
3 d3 j1 q; z+ Z9 K# Z - * published by the Free Software Foundation version 2., }* I/ Y& Y" o1 k5 d+ { P
- *1 H$ A* q2 O5 \$ a
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 h) P, v* z7 ^- Y/ P3 z% }! L - * kind, whether express or implied; without even the implied warranty; n9 A! e7 r) R6 G; V
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
. w" u9 S' R8 C- ] - * GNU General Public License for more details.
% }6 Z% A1 m( P3 L - */9 k. |* L) m- y8 S
- 1 _- t7 j" D% b& n
- #include <linux/module.h>' l6 g( n5 [; \ n) ?/ e
- #include <linux/init.h>
; h7 p1 I- \4 R - #include <linux/errno.h>
1 P6 [+ H v- k9 |7 a - #include <linux/types.h>. Y* A( r) @& ?3 i8 b
- #include <linux/interrupt.h>% a9 G. z2 _8 p7 w8 n
- #include <asm/io.h>* o) [, i1 J; P
- #include <linux/moduleparam.h>, \' d, X+ d" d6 G2 M3 ]
- #include <linux/sysctl.h>' Q- X2 f4 @% X+ m1 X6 d
- #include <linux/mm.h>
6 j2 j% y n% M; S$ z - #include <linux/dma-mapping.h>( u5 K& @& A% y) m7 Q1 L3 Y1 F
- 0 O- h# T& e+ H9 c
- #include <mach/memory.h>
) N9 u- w# S3 u+ R) t2 ]! D' R# k - #include <mach/hardware.h>
6 P1 n5 C7 i7 s, R9 p - #include <mach/irqs.h>
) M; v# d! @7 i9 N - #include <asm/hardware/edma.h>: r" B+ _3 a% Q; r }8 {" ?
- , q h# Q" d1 c ~4 L- x( ]
- #undef EDMA3_DEBUG
$ E! E+ r9 q6 v6 h - /*#define EDMA3_DEBUG*/
. K1 i8 s% c& B6 @
# Z( c$ z! f- F, t- #ifdef EDMA3_DEBUG
$ w. E" S3 ~) j5 Q% T7 O - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS) K& s/ t6 f# [+ g
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)( P0 N8 n$ N5 t$ g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
( X {. m4 x4 k* Z" ]. } - #else
' ` g$ A1 E5 J& } - #define DMA_PRINTK( x... )
/ I, D% d. u9 o% {& K - #define DMA_FN_IN7 g" e- }' M- ?9 Q3 ^' C: A
- #define DMA_FN_OUT
$ j" f! O5 {& h2 A4 M; k - #endif5 v# B4 s: w& W
- : m9 T1 ?. I. P8 }5 F
- #define MAX_DMA_TRANSFER_IN_BYTES (32768); L! ~# s$ c; H7 p% `4 ^: V% ^- A
- #define STATIC_SHIFT 3
/ p+ i, v* h# Z - #define TCINTEN_SHIFT 20/ Q4 p' A, G' |! T$ N
- #define ITCINTEN_SHIFT 21 \9 y4 T/ T/ z; g9 v/ V7 o$ }
- #define TCCHEN_SHIFT 22" A# t. K% B5 |# F1 p' U
- #define ITCCHEN_SHIFT 232 B: [% z* l- r
- 1 a9 u. c! t9 F5 o9 N) I" m- ]
- static volatile int irqraised1 = 0;
, o* w2 _) Z; [/ @" S$ d5 | - static volatile int irqraised2 = 0;
* H4 @5 h* }6 ?/ R: O - 3 J3 p. O9 P* b- j4 O
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 }9 B( ^8 K9 I/ { - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# B9 r1 f" ]6 x& I9 L
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 r& |% m7 {* F$ g0 b9 N% H
t0 [! w, p" F l! A: S& ?' L+ d% _3 `- dma_addr_t dmaphyssrc1 = 0;1 Y a, q4 n* ^! F! o' Y3 e
- dma_addr_t dmaphyssrc2 = 0;
. `0 M3 x" I% o - dma_addr_t dmaphysdest1 = 0;# r" I$ D1 |: G
- dma_addr_t dmaphysdest2 = 0;
$ R+ v* v2 `; v/ t2 s+ { - 6 p* m/ n1 Z: b# F; k& a
- char *dmabufsrc1 = NULL;
# F% P3 w. M' K% ]2 r. H5 w" i - char *dmabufsrc2 = NULL;
# Z4 N2 A+ f* N e - char *dmabufdest1 = NULL;
3 n/ o$ {& E& _* f - char *dmabufdest2 = NULL;2 G1 v* d1 P* m
- 9 d2 M" R& ]" ?
- static int acnt = 512;
& O8 ?; ?8 h/ b: D' x- v - static int bcnt = 8;7 G8 g; _ X# p
- static int ccnt = 8;
# W1 [2 C2 i$ P' \ - ) D+ |' \2 d' k" [6 C
- module_param(acnt, int, S_IRUGO);
7 @, [! m( c( ~: ]3 g( j" [ - module_param(bcnt, int, S_IRUGO);4 G! U' z- L9 t' Z% w; P) O2 M% S
- module_param(ccnt, int, S_IRUGO);
复制代码 + f1 t* z) j, h1 I
1 G8 ^# H1 G" C: d
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" ?- R }: I* B' h5 j" _, }/ r/ darm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
9 C5 J+ N) X! J* P! U. s7 t 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。) j# K- x, L, a. Q' G0 g
( y0 ?0 o8 b& _# U
+ y5 P- i) e2 |- N1 L
|
|