|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 }# Y4 _, Q9 N% z- [code]EDMA sample test application+ _% D' B ~8 i5 I, t9 K0 u
- /*1 O! K3 a. y# y; W; Q Y
- * edma_test.c
7 @5 H2 j4 M5 n, o- n - * @" b$ O- F; G* `, h A
- * brief EDMA3 Test Application
& ^/ W+ v7 a* X, e - *
& M9 [7 _2 X9 l9 L7 a% z* U - * This file contains EDMA3 Test code.7 ~+ s7 ?" z" C2 U, W0 y
- *+ v6 N* g+ w) |/ A2 M! g
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, n5 [. O2 I- w0 V; @+ P* L - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT0 u9 h9 v# z0 L1 D3 v% U
- * TO CHANGE.
' e1 x8 P4 B; d: z2 Z - *
/ u4 \8 W9 V7 g* i' U Y - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/1 B2 Q$ W. J7 [* X* u. y' l6 k
- *
; H# |. R- q( e; o: D* M i - * This program is free software; you can redistribute it and/or
/ j8 \7 T& |/ s5 R! Q- Z- D2 k/ @ - * modify it under the terms of the GNU General Public License as
4 E R2 S" R F - * published by the Free Software Foundation version 2.
1 L. i( z/ d3 d+ d8 c" @1 m2 l; u - *
5 L+ }# K' |' S1 f ? - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
( x4 ]2 R2 z) L - * kind, whether express or implied; without even the implied warranty: L4 t6 I) |% }) d4 q
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the8 E) U$ G! _! m: S
- * GNU General Public License for more details.3 D; v$ u! B z- ^
- */; }5 ^6 z" s6 I q [; t* }
# v+ b" R! u( b, i' H+ h5 }9 T- Y- #include <linux/module.h>
- J: w; w* z1 c$ S - #include <linux/init.h>" o: H' l2 L: Z$ p; v9 D: Y, {& Z
- #include <linux/errno.h>' O, U( q1 J( ?6 @# g
- #include <linux/types.h>
' f: {; J$ k% ?6 Z - #include <linux/interrupt.h>1 J; `4 x& R% K; H a7 u0 [+ y4 p
- #include <asm/io.h>
% B" R) r7 J7 R! s0 }# Q - #include <linux/moduleparam.h>
( o4 ~1 V, X* m, M/ s) C! P1 V - #include <linux/sysctl.h>
7 C+ e# k, j7 o* V$ }6 C7 ` - #include <linux/mm.h>
4 n- d- w* ?1 c) j) h0 D7 x - #include <linux/dma-mapping.h>0 [0 V9 @- U! x& a
- ! C% c/ ~. t+ }$ K
- #include <mach/memory.h>* J: j: g, n' B K9 z* ?+ y
- #include <mach/hardware.h>
) I; B1 M' O' C6 _ - #include <mach/irqs.h>
1 i- j* A: j; ~0 j4 k - #include <asm/hardware/edma.h>
4 F* i, i* a- W - ' @1 m0 f6 I/ u" n% H# a
- #undef EDMA3_DEBUG$ D: x6 y1 u. F! o" ^. \: D9 W2 J
- /*#define EDMA3_DEBUG*/
- u# y3 u( g% F: w - & Z& ]( v' Z5 E0 L
- #ifdef EDMA3_DEBUG+ q4 v) o& ~2 e2 g0 I, [2 _ u
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 c) c# c9 R( W& G; N
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__) @7 m/ o1 ~1 N+ Y) M' u* i( M, ~
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
0 g1 \) P9 v/ N: a& | - #else
, j1 d) \3 P; C. |# v - #define DMA_PRINTK( x... )
1 s- ~ p9 L7 G - #define DMA_FN_IN) ?7 h9 p# ?; S) q. u' j( C
- #define DMA_FN_OUT# \* p3 i' F- }. e$ X0 L1 [
- #endif. r w) }9 E9 {2 t3 V8 d: e
0 b$ r: X: i( a% P A- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) T3 ]/ M9 d; ` N - #define STATIC_SHIFT 3( L; Z! A2 c K! A& {
- #define TCINTEN_SHIFT 20
% Z" F; C' o+ ^! J9 m) F - #define ITCINTEN_SHIFT 21
+ ^+ u/ f7 Q) p- N& m - #define TCCHEN_SHIFT 22* e2 q( Q" D9 a& N, J
- #define ITCCHEN_SHIFT 23( R0 ]4 e* G7 `$ ~. `3 M
- 3 P# _ ^. W: O- ^
- static volatile int irqraised1 = 0;
9 i, ]% u1 D9 u1 _" H4 p" g9 S; D - static volatile int irqraised2 = 0;. k7 o8 K* s/ g# ]3 M) x4 P
- . x. r# {. D1 _
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 V; R/ l, D7 |8 s! S! ~+ }' F7 _- | - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( D1 b; z u: Z: X4 Z
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& f; y1 [7 P+ z8 m( `
- ' l9 O E; Q: C
- dma_addr_t dmaphyssrc1 = 0;
' W5 S# z5 V& x6 N2 ?/ c4 z6 K - dma_addr_t dmaphyssrc2 = 0;
/ M# i+ z- j O; t& b i - dma_addr_t dmaphysdest1 = 0;: x# u- Y8 f/ u2 Q: O& x
- dma_addr_t dmaphysdest2 = 0;
3 p( y- c* G1 o# A - 9 A; b" L( Q% @! v: i: S" a+ S
- char *dmabufsrc1 = NULL;
/ P& \" A) A! O% W; l - char *dmabufsrc2 = NULL;$ P' k" K$ s0 t
- char *dmabufdest1 = NULL;
+ P5 T' P: ?( w% G - char *dmabufdest2 = NULL;
5 ?5 L2 B) k" N4 |
/ ?5 D- h/ {1 j2 C3 ]0 C- static int acnt = 512;
; L) ]! N' @ L - static int bcnt = 8;
) F# X3 n: h! j- `: t* W n - static int ccnt = 8;
: i( F) g# X/ l% r& ?0 I O
& z* y0 _6 t9 `: w# |* c/ W7 a- module_param(acnt, int, S_IRUGO);
* e' ^; D! ]! u" Q9 h* C - module_param(bcnt, int, S_IRUGO);
1 ^3 R D# i% B$ a3 Q - module_param(ccnt, int, S_IRUGO);
复制代码
% i& \# M) @* Q
/ l5 F0 `* h5 B( H+ V 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
8 n" [1 i7 a6 k4 Y Z7 b" Tarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( X$ w' a! c8 b; V$ N) S 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。' ^3 _0 H2 P+ f* {1 s E
# K. w$ N" v2 U" A% L, U
6 Y0 ~0 j0 F3 e6 _, D# N
|
|