|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) n( f( k# R6 W' ^
- [code]EDMA sample test application! z0 Z) j% e, X5 T; u
- /** ^1 v% M3 |6 T& H
- * edma_test.c( |* o' @" ^1 p
- *
* h2 e/ {+ s8 q9 c* c* h2 [ - * brief EDMA3 Test Application
: ~, A4 ~8 D1 W7 ~; S - *; W/ L9 }* z' ~1 S a& G) J6 O; \' r
- * This file contains EDMA3 Test code.' N0 C8 k3 q' R8 C& L0 }8 l' T6 B- `
- *& a/ H. f5 o' B: Y- g
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
1 J( z5 r' ^- b* Z+ A& Q N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 `# m' f5 m' G9 _& }$ q
- * TO CHANGE.- }% m! u& ^& k0 U! @
- *& Q/ F* J, j; T# W6 C3 m" ~
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
; Y" p" t1 N) w5 k - *
# P& m+ s* M' k - * This program is free software; you can redistribute it and/or
/ n. `& X' W8 @# ?& t9 V8 |$ U' Q - * modify it under the terms of the GNU General Public License as) n: U) \- f& O# \# r
- * published by the Free Software Foundation version 2.9 ~" l* [: N C/ w- }! @0 t
- *
) y8 m2 u! V3 t# J# V - * This program is distributed "as is" WITHOUT ANY WARRANTY of any8 @9 K! t. e$ c) E8 I
- * kind, whether express or implied; without even the implied warranty
3 E8 w* m4 U W6 D0 G - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
, J D, A! D, a3 f$ v - * GNU General Public License for more details.) _! r" R) d! K; @! L
- */
. w7 X( a; y* _6 l/ k. O
& L+ S6 ] J3 s- #include <linux/module.h>
1 l( _/ ~/ j' M3 ?% @4 d - #include <linux/init.h>; Z) ?6 `* `' B/ t: Z; h7 K
- #include <linux/errno.h>3 M" V! }5 \5 R3 B9 L( i
- #include <linux/types.h>
1 c* T% D$ a @ - #include <linux/interrupt.h>
1 o8 `; J& i8 l1 n - #include <asm/io.h>+ k4 B1 ]; V- e) h4 B7 R1 P
- #include <linux/moduleparam.h>
$ G0 a# ], \/ ^, T. A, r& O - #include <linux/sysctl.h> B1 g3 u* N) k. S2 v9 y& e
- #include <linux/mm.h>
* _) ]- q' R m% P% \8 s! e; I8 U - #include <linux/dma-mapping.h>8 O# d" c2 L. C! G( G' X
( O8 ]7 Z- P! b* c- s- #include <mach/memory.h>0 t$ A' t8 t i- q
- #include <mach/hardware.h>. Z7 ~. E2 w1 k% P* ]! O
- #include <mach/irqs.h>
) b' o; K; r8 X6 t1 y5 z - #include <asm/hardware/edma.h>* w! T9 h! F e7 X: q# z
$ s# K+ S+ S$ K3 y( h2 H+ a3 ?- #undef EDMA3_DEBUG( `2 E$ _: Y$ l9 P* `$ {
- /*#define EDMA3_DEBUG*// o" d; w% g" @3 V+ K4 Y
" O2 K/ r! q& U" R4 x- #ifdef EDMA3_DEBUG
9 Z+ D/ s: U3 u0 o - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' B( h7 @) J9 k5 v r% \/ A8 a( R
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)/ Y( W8 d4 I. m, ]" G& M% I- H
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)0 C) {- ~, l8 _& J
- #else
0 o" K1 o, {+ B% ^ - #define DMA_PRINTK( x... )+ w- t, X. I$ [
- #define DMA_FN_IN. ~+ `0 q' Z& P- ]! ~. }
- #define DMA_FN_OUT4 x3 v9 t+ S$ S* p8 K: O& Z; m
- #endif
Q6 r/ `, ^5 s" W
% l+ o: z' z6 ]$ j, M' ?6 r: E- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 R7 W* e' ~9 \/ J0 K# p5 D9 r8 d - #define STATIC_SHIFT 3
9 v# A, i! u) z" B4 P - #define TCINTEN_SHIFT 20" q/ d# Q) `' @* }+ W4 _
- #define ITCINTEN_SHIFT 21
6 Y. Z5 P4 G: b$ @. y3 N: K - #define TCCHEN_SHIFT 22
( D7 _: o7 M* I0 x5 O* Z0 Z - #define ITCCHEN_SHIFT 23
. j# c: A; B5 h! h$ U: L
/ i/ |" r: i1 c- static volatile int irqraised1 = 0;6 J! h& e; x% }9 [
- static volatile int irqraised2 = 0;2 d5 }8 y" S# C
- : z/ T9 x% }5 A9 ]1 _
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- i5 d! {7 b5 T$ a5 m - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% a8 A, C2 h: R: N. z2 p - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 }# {' S7 z9 v( @
8 C; o( {/ l% ~/ O# a( R2 s% \- dma_addr_t dmaphyssrc1 = 0;
4 O# d( Z$ ~2 b/ B3 I! K - dma_addr_t dmaphyssrc2 = 0;
$ ]4 _& o7 i1 ?+ S/ i - dma_addr_t dmaphysdest1 = 0;
8 G8 n5 @: H) H3 H - dma_addr_t dmaphysdest2 = 0;7 ]/ R; j# B/ G5 W8 B
( k# k; p# X8 {5 U, X9 ^* y: V+ O9 x! m- char *dmabufsrc1 = NULL;; k+ r9 ?, H* g9 A
- char *dmabufsrc2 = NULL;
, o. {/ Y; ~: \+ k2 Z - char *dmabufdest1 = NULL;$ K/ Z" L! g+ L% ]
- char *dmabufdest2 = NULL;% q& ^8 [; N/ J) z
# L7 p( G! G6 J9 c4 q- static int acnt = 512;9 Q2 a* K. @! e9 ^8 R
- static int bcnt = 8;0 j, s( G4 v" u* @3 A' P
- static int ccnt = 8;! o9 f5 I. P5 u' K: w. r1 ^
- Z1 U7 e- W( S7 |+ {: J( K7 q- module_param(acnt, int, S_IRUGO);
5 ~" Y8 W9 [8 W+ b1 \1 G& j, C - module_param(bcnt, int, S_IRUGO);
. M& {( a7 P7 Q( _; n+ ?/ @ - module_param(ccnt, int, S_IRUGO);
复制代码
. v6 B* H. O/ h* \; w. N3 q0 X/ v5 v$ K9 n a7 Y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
( M* J- r( S. u3 z* s! \8 E( y. qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
" x3 V# g' p+ a; _# m 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* u* e& s9 ]$ @: X+ A0 }2 S6 h
9 [% N( G; w9 O/ t
3 L: S) C& n' l4 c( Q- x7 Y) h |
|