|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 8 Y5 Q0 b+ h4 K: }; n, o
- [code]EDMA sample test application
: `& g' Z* `4 z6 n9 p/ Y' q5 ^) I - /*
" T0 ?$ N9 r" q' S" a" C! E \' E - * edma_test.c0 @1 z$ z* x; f2 ]; ]
- *6 u1 @. L( Q+ U+ b& l$ _2 T
- * brief EDMA3 Test Application/ R7 q- `6 O7 }0 s0 u6 a
- *
9 p" g N. \: y" ^+ g5 J& w+ M: K - * This file contains EDMA3 Test code.* R+ n0 g# u+ D2 s
- *
, l7 v G* O8 v0 J! X, R - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
; V# J, l- y5 c - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 C4 T+ U- G% |: d- @% h2 v7 o - * TO CHANGE.# u0 [. @: H# N3 @5 O, o
- *
4 q+ ~" Z& [2 c - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/: q7 K: H1 q) E5 {3 p
- *4 `+ M/ Z- t3 v' V* U
- * This program is free software; you can redistribute it and/or
" Q. e* u4 I/ G% d$ l9 d - * modify it under the terms of the GNU General Public License as6 _/ V9 _/ h( x
- * published by the Free Software Foundation version 2.
( @" I% ?3 _" e5 K" h1 Q2 M9 z - *0 ]! Q6 t5 i- ]! c2 G$ `$ K
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
; A2 L% D! X" n2 c: t5 g+ C - * kind, whether express or implied; without even the implied warranty# J) E3 Y* ]0 w+ ~5 q% C, M# z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- q* u- Z, w5 n$ [( Z* A. F - * GNU General Public License for more details.
' s) C( t( l, u6 h - */4 o0 b( I0 Z- |* k: _0 z$ D! e$ W; g
- - s: v; ?. T- q+ R* ]6 s
- #include <linux/module.h>
* F3 q$ G* n8 S, D( t - #include <linux/init.h>
9 B1 h% K' V6 W5 J' p - #include <linux/errno.h>
, [' D- _, Q# m0 k1 t9 F - #include <linux/types.h>6 g6 n. {% C1 g q
- #include <linux/interrupt.h>1 G' D# O9 c, [; v: U9 F, I
- #include <asm/io.h>
+ H- L) L5 p, l. a - #include <linux/moduleparam.h>. |5 E6 `8 z' E; Q
- #include <linux/sysctl.h>
; v3 t0 U" T, P4 p' R - #include <linux/mm.h>
/ l3 Y ^, B0 ?1 ] - #include <linux/dma-mapping.h>+ Y3 W' Q& t! L- b% Y8 |
6 e7 D' Y3 c4 }- #include <mach/memory.h>; a3 T5 _( ~0 z
- #include <mach/hardware.h>$ R( F& M* g& x4 t: {. a
- #include <mach/irqs.h>$ P4 a Y4 O5 A: r
- #include <asm/hardware/edma.h>+ z5 e& p. u' T4 d$ q. t1 _7 m
- ! b0 I6 ~& T* e- H7 a% s
- #undef EDMA3_DEBUG8 ^/ `) b0 _# D% R$ }4 O" R9 c
- /*#define EDMA3_DEBUG*/
' i) S( e' X8 p8 R' N) J - 6 e) n0 p3 T8 v$ M) ^
- #ifdef EDMA3_DEBUG6 ?- D5 D6 F8 Y. \. ^1 \
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* {, v( K4 i: Q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 M% [% p5 A' _1 Q) q# U - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
% q# W/ u8 @. C# A! p8 ?3 S) F7 T - #else+ y6 k3 |$ R0 O, t/ |
- #define DMA_PRINTK( x... )
8 b) J4 p+ k/ d; R) E) A- W - #define DMA_FN_IN
+ u& r' p3 d' ^% @ - #define DMA_FN_OUT
/ z1 F, K* _- D q* a" P: O - #endif" k9 G/ m$ Y" Y. }3 Z, s
. }0 u/ f7 \9 M$ `- #define MAX_DMA_TRANSFER_IN_BYTES (32768)( W& U8 R$ K: ?* @5 x- j1 P
- #define STATIC_SHIFT 35 X: m0 E. C. L- m( H$ z1 z
- #define TCINTEN_SHIFT 20: F6 {* {& D6 f/ H( E4 U. n0 i
- #define ITCINTEN_SHIFT 21
3 E1 ?4 _ o. M1 x7 P" s& @ - #define TCCHEN_SHIFT 22
% \0 w W1 | {+ { - #define ITCCHEN_SHIFT 236 N, Z; m7 Q: I" ?* I
$ P! \$ x* q$ u- static volatile int irqraised1 = 0;
5 c5 K1 A6 _% z% N6 Z o; X - static volatile int irqraised2 = 0;) r: h% D3 _* P6 x4 L/ k
% A- q$ ]7 D1 m3 ^- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& l# y' F& d4 M- E6 d - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: G, I, c2 E l3 y9 x+ {4 j: b m* k - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ b/ N& X# j/ ^! z
- 9 ?: O' Q3 i+ _8 K
- dma_addr_t dmaphyssrc1 = 0;* ~+ Y; s4 D0 j7 d$ o
- dma_addr_t dmaphyssrc2 = 0;
" z# W4 {7 H* z4 P - dma_addr_t dmaphysdest1 = 0;
t( e& P1 Q/ B7 B - dma_addr_t dmaphysdest2 = 0;
& e, t0 r' ?4 ^- \, Q) K& C: m
. g9 e* R3 K$ Q8 B' Y- char *dmabufsrc1 = NULL;8 P2 Y( C6 e! `. E6 B" ~! V; ~
- char *dmabufsrc2 = NULL;/ e# X3 P9 H/ ^+ Q& k& N5 ?: ~
- char *dmabufdest1 = NULL;
) V: n5 _% M* U; x - char *dmabufdest2 = NULL;
/ Q, L4 Q+ Y$ f* I! I4 S
2 e9 z/ m/ ]5 U7 S* D- static int acnt = 512;
0 |. N$ K: p! I/ h1 s8 p! P - static int bcnt = 8;9 f! P( w$ }8 J3 {" c5 K: q$ g7 n! s
- static int ccnt = 8;2 Q& x. z; e# Y- z, j6 v+ F$ x
/ o* z) B! i! K0 U& `7 N- module_param(acnt, int, S_IRUGO);) i0 V2 I& U+ M, o
- module_param(bcnt, int, S_IRUGO);+ N/ o- t; X0 D) C7 O
- module_param(ccnt, int, S_IRUGO);
复制代码
% a, W3 e; l& l- `! Z3 \
7 g) B1 G. I' a( X: z' o7 P; c+ A 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
6 e3 n) g+ V6 Q, ~& F, s" Oarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
6 m9 W' T, N2 [; e; A& u 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
) _' A" t& m- C* a' L; Y; \$ h) e: v# j4 y# E, b- ~: Z0 W
7 r7 U0 w+ n6 i" T |
|