|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ {& A4 _, M) a0 Q- [code]EDMA sample test application5 e4 ^- C! I+ R6 u$ M. m
- /*
- r6 R& h' x! S# g - * edma_test.c- y, b9 t' w5 Q( b, Y
- *
! r! Z# R: u' b! n' v. G3 Y( _ - * brief EDMA3 Test Application0 o& g& t, Z8 F; b$ I& t
- *: L, G/ I9 b/ g* I& g/ L
- * This file contains EDMA3 Test code. q, ?3 e/ ^- S( u# w4 d7 |
- *
) P& ]# u( @% u) V# h& z- `. ]' W% t - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
3 L! h F; c) q2 T2 S9 q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT, v3 q% d, H- a% }3 k7 U( g8 M& H8 z
- * TO CHANGE.* H& i0 J# m/ \
- *- {6 f' Z! Q" _$ \, {3 J
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
8 F( W2 Q5 _4 L3 S, X8 M8 B - *( Z( W9 @, p+ I$ d
- * This program is free software; you can redistribute it and/or) a2 U& Q2 L) T# ^" X4 W
- * modify it under the terms of the GNU General Public License as ^! Y$ _: r A7 c( }
- * published by the Free Software Foundation version 2.5 P. S b ^5 U0 N
- *
0 _9 ]; s% r& p - * This program is distributed "as is" WITHOUT ANY WARRANTY of any p |- e8 M# S; t% G- Z. j
- * kind, whether express or implied; without even the implied warranty
* G$ m; k0 R5 C% @* j& U - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the% U/ v5 I1 v( e5 O& C; f0 i, u3 S
- * GNU General Public License for more details.
# m/ j' D; e/ r' m% w - */9 C/ p" _' ~3 H# t1 Y: r
- 4 j6 r8 L5 F2 Y7 q, k/ @0 M! x5 Z$ u
- #include <linux/module.h>
: I/ p1 E5 B8 k) B( {: h3 d7 B - #include <linux/init.h>
3 b0 G& y% v' e5 K) N0 N - #include <linux/errno.h>4 b" c* d' p0 g/ J
- #include <linux/types.h>
: B5 x1 @3 @! V" G+ C - #include <linux/interrupt.h>* p. U) ]4 U( {2 R
- #include <asm/io.h>
, N3 X* `5 o/ o4 a" i5 o5 b - #include <linux/moduleparam.h>
/ x& V0 z& {! m: H+ O - #include <linux/sysctl.h>
8 n8 S. N7 e& n) ]; L" M5 F - #include <linux/mm.h>
]; Q& G$ p2 k) v ` - #include <linux/dma-mapping.h>* W$ k) j2 @( f3 M! X
& Q( R! v/ Y3 X$ m0 G- #include <mach/memory.h>+ ?6 H+ W* Y/ D" H6 n. u
- #include <mach/hardware.h>8 m( I, u$ i( w0 h
- #include <mach/irqs.h>' \' ^/ \- `( G8 l
- #include <asm/hardware/edma.h>
$ ^3 X" f3 b6 `# m
+ {$ J. s* W( F$ r+ o* \# D- #undef EDMA3_DEBUG9 Z; V7 O- Q+ w1 l" i
- /*#define EDMA3_DEBUG*/
: J3 O- B8 U$ b# F' ~5 l6 U - ; {1 h1 N. T( @
- #ifdef EDMA3_DEBUG
_7 A$ C% _/ Y - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
4 L: b& c, N# Z) s& d& y - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( o( g8 y8 A4 ?+ K - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 ^* b. t! @/ T5 N: B8 C - #else4 N& X& x2 k& K" C: B+ S
- #define DMA_PRINTK( x... )- G, c; f9 K# I
- #define DMA_FN_IN1 t6 U; A7 ]3 M# o2 e1 Z# y
- #define DMA_FN_OUT
7 ~/ G# V) W6 V9 r1 n$ _! ~ - #endif4 J0 m" q6 f5 k' l$ z2 Y
- " B4 N$ f$ y& }+ }1 ~- E% y2 c0 C
- #define MAX_DMA_TRANSFER_IN_BYTES (32768); M4 }, m9 x* {7 G0 Y
- #define STATIC_SHIFT 3
. r: d1 l5 C0 |" N: ^; \1 L/ r4 B - #define TCINTEN_SHIFT 20
) o( w+ t3 g6 b1 k# _" K4 a' g - #define ITCINTEN_SHIFT 21
& i' {& s% f! Z# D. ^$ W - #define TCCHEN_SHIFT 22
1 g0 T7 E/ u7 o A: q. J# c' g - #define ITCCHEN_SHIFT 23- P& D S. s$ F) x, _4 ]" Z
1 n$ J; N: S$ F% U) ~/ B$ u- static volatile int irqraised1 = 0;" A! R9 P+ S7 J1 }
- static volatile int irqraised2 = 0;
1 }/ |% {+ @3 p- W g - ( [1 b. v0 w% x1 z9 ^
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) _: r7 f) z2 |1 K3 C6 D
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: r+ x; _5 h5 P H/ W! g
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* p- e2 \* n4 X& q - " O4 E; B5 X% ~9 k ?/ q" [
- dma_addr_t dmaphyssrc1 = 0;/ l8 a3 B- L& \5 ~' D/ R# _
- dma_addr_t dmaphyssrc2 = 0;0 i& H) l+ w( U4 s3 N1 Y. z7 ~7 U
- dma_addr_t dmaphysdest1 = 0;
# j- O4 c" l/ w, _3 F3 D% H8 {$ S - dma_addr_t dmaphysdest2 = 0;
) O# u* s0 S9 {; v; X1 h6 L9 M
( O9 `: q9 d/ |% Y( e- char *dmabufsrc1 = NULL;
. L( ~; B. I2 d5 ~ - char *dmabufsrc2 = NULL;; G; \( P8 L3 a. Y1 ~" v$ C+ m2 j6 x
- char *dmabufdest1 = NULL;% f' `" z8 N4 F- }" j T2 y/ C
- char *dmabufdest2 = NULL;
' e3 g5 s; M: ?+ K - / z! f; }# D* c1 ?3 v% @* n& U
- static int acnt = 512;
1 G/ I! S( [7 j, f" u - static int bcnt = 8;
6 R/ g4 _. {" |# f - static int ccnt = 8;
0 m6 Q' S9 q5 }5 c4 n
" N. {9 y9 Q. x9 A! b/ N) w- module_param(acnt, int, S_IRUGO);
3 q' B- W- h k. \/ ~' F! U- ? - module_param(bcnt, int, S_IRUGO);
2 M* h' e9 i; o. J! u - module_param(ccnt, int, S_IRUGO);
复制代码
6 O; }( c4 q7 E1 b# t* H( j( Z l0 i+ U, f' c
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用# w. ?: l; _3 ]& w1 _
arm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
! {) o! r8 I0 }$ i0 k 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。& d: u: U+ `4 d$ r6 P
: Y5 w6 s& C, E: ^, V
$ L1 L! G% {; [/ Z
|
|