|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 % G' a8 j/ T7 Z% q" T5 Q& g
- [code]EDMA sample test application( Y( x+ h6 \% `' W4 l
- /*
" \1 P; Z6 o5 E$ C - * edma_test.c. f- t% F; }9 [5 R
- *# ~1 F/ X* Y8 t( {: Y
- * brief EDMA3 Test Application T9 v$ |" X2 i4 j4 v
- *
) o& K V( Q, h - * This file contains EDMA3 Test code.$ b4 q/ q. O3 a7 Q& E0 c, @1 p* }
- */ o! I! d% k& g8 m
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
) [ G3 n+ O1 {: ^. I [4 L5 L; [ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT" Y7 W- g% @1 x( ^ I
- * TO CHANGE.
9 s' M q8 P$ i - *1 M' b0 c: {( R A
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ M7 N: [' U1 T - *. }4 H2 w8 \4 b3 |% q
- * This program is free software; you can redistribute it and/or
) v% j4 O+ |' f0 V% [- R, m# n5 m - * modify it under the terms of the GNU General Public License as
* C3 W4 \( ^3 J1 Q$ s2 t - * published by the Free Software Foundation version 2.; B: X& v! ]2 ~7 y
- *8 m2 h: |5 q9 {* V9 F5 K
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ \7 A6 ~/ Y/ a, _0 M - * kind, whether express or implied; without even the implied warranty+ G1 q' j( q3 C6 }! G+ B( C
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- D% _; B6 ?& ^$ ?& z8 ~+ o
- * GNU General Public License for more details.
6 k% ?. r$ p. a- A" F, s) O - */1 A6 _9 Q) v; R& z
7 l, C# x. F* o# a; n- #include <linux/module.h>4 @ {0 \3 J; L! K
- #include <linux/init.h>6 T/ @; @% [, j4 _( G
- #include <linux/errno.h>. l8 N& m! Z& b7 t1 ~& _% j" ]
- #include <linux/types.h>3 | P" G7 l* J
- #include <linux/interrupt.h>
/ c* V& q% t; v5 y: L7 F - #include <asm/io.h>
1 E7 S* N+ N% @3 g5 ?/ l3 b4 X1 A" } - #include <linux/moduleparam.h>
# _* ^+ C$ \& ?: [ - #include <linux/sysctl.h>
0 n5 T) {! { l: H3 w/ M7 n" g - #include <linux/mm.h>5 l) Z3 p0 J4 L1 g$ F* g; m D
- #include <linux/dma-mapping.h>
E. p* Z" Y# e( c2 H0 R - 7 c% \% x* _; d! j/ ^/ [
- #include <mach/memory.h>
) Q$ {- x1 q# e" [+ B: @+ G - #include <mach/hardware.h>$ H2 p0 n' s; N' Y* W
- #include <mach/irqs.h>
2 Y" e. Z* \* ]6 ] - #include <asm/hardware/edma.h>
4 Y j( d. E3 z7 A a1 j7 z0 X1 R* o - 2 J5 G% O1 j/ n$ @
- #undef EDMA3_DEBUG
0 h/ u4 J9 C, }1 J* |/ B - /*#define EDMA3_DEBUG*/9 O7 J! ]; T. c! E# u4 f7 v5 Z
- + z- }# g9 J1 o$ J+ U( g: T7 R
- #ifdef EDMA3_DEBUG
/ W( i+ `7 X1 W) T) S' r+ y& z, I0 q) a - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)) M+ k/ }" ^8 G3 m1 H
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, a9 ^; I7 O- Z3 e/ a% m4 x - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)' [$ [1 G, s% J8 o, T
- #else
1 h: Q/ J! J0 |! L% R - #define DMA_PRINTK( x... )
" L5 {! O6 b `7 A8 T - #define DMA_FN_IN
5 T9 s) V2 d6 N) C) F - #define DMA_FN_OUT
: G! N2 V- J, [0 z - #endif. `+ g- o6 } A* Q0 }
9 k9 B$ y" u- X+ ?3 T- #define MAX_DMA_TRANSFER_IN_BYTES (32768)" j9 E: z+ r" p1 w% o
- #define STATIC_SHIFT 3
# y' \# z* m2 V2 Z8 a" n - #define TCINTEN_SHIFT 20
" `8 d! p; S+ x% o - #define ITCINTEN_SHIFT 218 L: \9 Z0 F7 ]: Y. q/ Y3 G( ^
- #define TCCHEN_SHIFT 22$ o& f5 P% N; f! Z; D
- #define ITCCHEN_SHIFT 231 ~! J4 }8 A+ ]# J, C L
- % U. b; J, f7 d9 M- X# i3 b
- static volatile int irqraised1 = 0;
6 F+ _1 Q9 R5 Q: u/ p' y9 ? - static volatile int irqraised2 = 0;
# m% h: |5 }) I' S8 c
+ ?3 D; ?. K& M8 a- ^6 j- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 S% O6 K1 Q$ x" ]( w" z - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 ?6 o7 q4 j/ v - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( B7 w: H" q& O$ F3 W - % m+ T& R8 e, r! T' Z7 o6 |
- dma_addr_t dmaphyssrc1 = 0;
/ u( `) |% C. {9 O( a - dma_addr_t dmaphyssrc2 = 0; g- n0 `1 j) X+ U
- dma_addr_t dmaphysdest1 = 0; }* U" e8 }, d$ ?2 R1 Y
- dma_addr_t dmaphysdest2 = 0;7 f7 q) i# h r3 ?7 u/ r2 k ^% j
- 9 G" t+ p. P% G0 b
- char *dmabufsrc1 = NULL;% t X7 \/ n2 s- J( {! r+ G/ A
- char *dmabufsrc2 = NULL;
; i' w. m6 g) }6 ?9 d - char *dmabufdest1 = NULL;: C- F# j' U8 d6 i
- char *dmabufdest2 = NULL;: J( u' D( x8 r+ z, y' F- z
- 4 s0 T6 f0 Z3 { ]1 W
- static int acnt = 512;4 j! ^& F" t- v8 ?4 V
- static int bcnt = 8;7 F( D, D& j2 V; `9 o
- static int ccnt = 8;) m1 y6 }9 q4 N+ G0 @
- - Y$ i: ]- D6 x4 V5 Q0 \9 w, A
- module_param(acnt, int, S_IRUGO);' V* d: L1 h) ?+ l% _
- module_param(bcnt, int, S_IRUGO);
- d. P7 N4 d9 w1 V - module_param(ccnt, int, S_IRUGO);
复制代码
) y, v) \$ \7 g
( w1 a5 @9 P7 D4 _# n 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
' e+ l; R$ ^ l; o8 ]3 u) {9 x" ^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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
, S3 s- g0 v# ^! T/ ^5 {. N. P 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。# s" O( h6 ?2 H0 M# K6 q: ~/ S
: ?9 i2 M" d$ P. l$ R9 F8 W
8 p- Z6 ?7 |& o6 o
|
|