|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
/ J& P9 O2 M& W" ?- [code]EDMA sample test application
# P! }! R( ]1 Y& {0 X3 _6 M - /*
$ A7 O5 x2 _: d1 @ - * edma_test.c
* W; m4 ~; z V+ f - *
" k1 C5 x n* \8 ` l! _ - * brief EDMA3 Test Application6 f' ]' f( ? l( ~% h- m0 u9 \. r
- *
6 m- d" H$ G: q5 ~" t* S - * This file contains EDMA3 Test code.
6 h: k4 [6 @5 n/ j - *: n7 V, w) [; Y- D# B4 P- Q& W
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE1 L' a* P3 B5 s+ i P% b: ^' @
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 [% m: c& S/ h2 J* G; Y% P - * TO CHANGE.: |: d. }5 F) n% [
- *
" V& k% w: }! B1 ` - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ V, }: C6 N# [1 N1 o+ ^
- *2 n+ M+ |2 I8 K# z) R0 J
- * This program is free software; you can redistribute it and/or8 v1 a5 v) |+ ~: T: i
- * modify it under the terms of the GNU General Public License as d1 I& r9 Z7 S5 @) Y! s
- * published by the Free Software Foundation version 2.! }4 ]4 p" J/ v7 u2 H, Q* s2 {
- *
, `1 X' H1 p2 k3 A, e: E. ^ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any; X+ g8 Q! |# c4 ~8 h S& F
- * kind, whether express or implied; without even the implied warranty g5 W( F* r- n( F! q$ |! G% o
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 l4 j. H& P: z) ` - * GNU General Public License for more details.
6 C, s T5 J @* ` - */- k+ N$ R% i/ F) k0 T* B
- ' F, N3 P* h2 F0 O u0 u; D# N
- #include <linux/module.h>3 ?' P% u0 w9 ` m
- #include <linux/init.h>' d% h' U3 o; y1 [0 C+ ?) [
- #include <linux/errno.h>
. n; G4 O- z% M: e - #include <linux/types.h>
7 ^* M- e5 s5 h; i - #include <linux/interrupt.h>$ \0 o4 P5 f0 G; M
- #include <asm/io.h>& K5 i4 P7 }$ A w
- #include <linux/moduleparam.h>' J2 ?& Z2 D8 d! e8 P5 _
- #include <linux/sysctl.h>
- x3 h) v" O. i - #include <linux/mm.h>3 K+ y+ H" B6 M
- #include <linux/dma-mapping.h>
`, X# F: t& x9 K5 {
' e; ~" L; v8 o, @- #include <mach/memory.h>
9 \/ u9 g2 e2 e! V/ r% r+ G& | - #include <mach/hardware.h>+ R- |% F* J+ B" G. B
- #include <mach/irqs.h>( |' z* L% ~0 K9 D
- #include <asm/hardware/edma.h>
6 t( n) `2 }8 b1 h$ \4 L
' d7 L! x8 }* z- n" ?+ L3 ?- #undef EDMA3_DEBUG2 m4 s: \9 t- Z: y4 M) F, Q
- /*#define EDMA3_DEBUG*/
2 k, M: f2 |% h3 A* T - 5 b% X- o" K' N6 q' p
- #ifdef EDMA3_DEBUG& p, o5 F3 ` `( m0 M8 T% y/ j
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
" i/ [9 g( k" A1 x - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__): V6 n$ q# R0 R# h
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)9 a, q- k! T" p: K
- #else
f" R+ T2 R; o! z8 q# K - #define DMA_PRINTK( x... )
. b# M+ U! {: ]0 U+ S) }* }; T - #define DMA_FN_IN" n+ ?9 |4 { v8 ?% n; g$ K/ _
- #define DMA_FN_OUT
: l$ [* R+ P% y7 A3 B, [ - #endif
* i$ j1 v4 d! i1 g8 @5 J - 3 }$ }- p6 y d$ Z1 P
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
5 G/ R* g2 N: n4 s' L- Q% Q - #define STATIC_SHIFT 3
6 { V M" _ N0 v$ a3 H - #define TCINTEN_SHIFT 20
+ T- \8 t9 _7 @5 E) O" w! Z$ E2 C - #define ITCINTEN_SHIFT 21
- g' Y1 q4 Y- v! Z, @; _ - #define TCCHEN_SHIFT 227 c1 j- F7 p2 P* P$ t
- #define ITCCHEN_SHIFT 23) o- N& U' T7 D6 e& f
- , q$ \' d4 q$ [' w( i
- static volatile int irqraised1 = 0;1 l" _' }1 D. I* v" q: O s/ G
- static volatile int irqraised2 = 0;
- I i1 N. [8 U - 7 ?# l3 B" C7 l, S2 y9 U! y' P% @% m2 t
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- M+ T( b6 b6 H0 V/ Z0 T' u4 f
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# ^+ D, S/ G3 Y* V
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" G2 Z/ y: d5 k; Z1 T! z7 t
6 r0 m; R: q# h- M- dma_addr_t dmaphyssrc1 = 0;* r x' y( O* U3 c; P' Q2 {
- dma_addr_t dmaphyssrc2 = 0;4 c9 u4 X& o6 r' l/ D X
- dma_addr_t dmaphysdest1 = 0;
) \: }9 `: S% C. Q( ?0 [+ |6 z4 V - dma_addr_t dmaphysdest2 = 0;7 N) m; c& V( V, y, k
- 6 q' T. |. y" B- w$ ~3 J+ |, T6 u
- char *dmabufsrc1 = NULL;
/ m5 {! Z! Z! ^3 _ - char *dmabufsrc2 = NULL;% ~! g7 l; I5 S
- char *dmabufdest1 = NULL;$ W ?& [3 k5 {& q7 h
- char *dmabufdest2 = NULL;5 i; m% z$ M) `3 t D
9 O- g B8 u5 U6 p* x3 m- static int acnt = 512;
3 w0 Z; B8 ?# x* q( d0 n- l( C9 _ - static int bcnt = 8;5 W- y9 V, {+ E: U! x H' }
- static int ccnt = 8;. C$ h% ?4 s. u: c! J6 L
- ! m3 l. Y4 g* h7 f. v" h! X$ d
- module_param(acnt, int, S_IRUGO);" y R" U" J# c& _2 t
- module_param(bcnt, int, S_IRUGO);4 T) k+ K2 Q G6 e+ ]0 ^ P0 Y5 H& U
- module_param(ccnt, int, S_IRUGO);
复制代码
6 \& ^% O8 u0 \* f& Q
4 F9 |& J) I" ~6 O" R. A& f 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" b1 v" L" J3 zarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。 o0 L; V# k" m" B, e+ [& _
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。7 F3 W6 X3 a$ {+ {! d0 S! u% s5 L- d5 W
2 P' X/ @' m+ e8 N; ~& i! D
$ _2 _+ s2 w5 P6 B6 f5 y" H
|
|