|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
* y3 ~1 h( R* j) J- [code]EDMA sample test application" h5 o8 Y* R( ~8 N/ [" `! X% g' H
- /*
; m$ T( N/ p6 c: e9 H. F - * edma_test.c6 ~' P' V1 r8 g: t6 }, s' y9 }
- *
5 W- e, Z/ P) g4 F& s - * brief EDMA3 Test Application9 r- s* B& E9 T9 { S4 P
- *+ G7 u& s$ [& ]3 A% [1 Z
- * This file contains EDMA3 Test code.+ ~4 R% N. O% j# @6 ^$ G0 g
- *' i% Z9 c& K1 r/ d z9 h/ z
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
. K B( F0 S6 ?9 k0 A# i" U - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) a- K+ D( i) ?3 s! n6 P - * TO CHANGE.- x, U! [2 s0 q* D
- *. [! m1 Y3 i; j, N
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4 m, O1 y" d( E8 r! z - *: `2 a' h& w9 K# V* _9 u; Z. w
- * This program is free software; you can redistribute it and/or
% \! Y. d5 l. q$ [* |8 y4 [" z - * modify it under the terms of the GNU General Public License as& c! i g$ Z% s: z8 F8 E
- * published by the Free Software Foundation version 2.' i3 Y! j* `+ J6 y& |/ H0 J
- *
7 H, l( I" S0 ]8 n; F - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. C; |/ c2 O: ^3 w/ F - * kind, whether express or implied; without even the implied warranty
; v! ?5 u; T9 _1 N1 A' f - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ U9 K7 M* q" N7 b& \: U - * GNU General Public License for more details.
( G8 t5 g) f5 }) P! s5 Z8 \# A - */
& s7 p+ H* `* z5 \& o+ S - $ F1 p( a- |" c8 ~% F5 y# |9 U
- #include <linux/module.h>3 D! g* g4 g( C/ E
- #include <linux/init.h>
6 T( |4 O. r' r1 ^* i - #include <linux/errno.h>% ^: U c' \, e/ f' ~
- #include <linux/types.h>
2 U- r/ Y4 Z7 E; q* [! ^9 A - #include <linux/interrupt.h>
/ B2 u* Z; r$ H" o y5 f/ z1 T* V - #include <asm/io.h>
5 F* h f" F- s/ Y - #include <linux/moduleparam.h>
4 i2 N& d: b1 Q8 m" H$ T, Z/ i - #include <linux/sysctl.h>
5 D6 L G/ @1 o. U6 B+ k2 }# H - #include <linux/mm.h>0 m5 b$ X6 L8 L: c! P. t
- #include <linux/dma-mapping.h> b# r, m7 N( Q+ H% \3 H4 h- v5 `
! P, R8 a0 Q) R; L0 Q- #include <mach/memory.h>
8 B; h4 Y- A% i+ ?, u% I - #include <mach/hardware.h>" f5 J# n0 v) } N- ]
- #include <mach/irqs.h>+ l- ]2 {7 u3 Z! @8 G
- #include <asm/hardware/edma.h>
" D+ H, o, u/ X
$ j, u' Z8 D, q9 C4 R( ^8 J ]- #undef EDMA3_DEBUG; _7 \4 `# M. R: }8 j$ R1 y
- /*#define EDMA3_DEBUG*/
P$ q! U: }8 U1 M u
5 c: g# L1 M" p, T; L- #ifdef EDMA3_DEBUG
[0 Z# A5 v0 c) J0 P% K - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)& \" }& P- D# t0 s& J
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; b, X7 ^4 t2 C4 K7 ` - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* N! Z" N$ O- _( E8 W
- #else; D+ g8 T/ p' l) J( p: f$ g6 y
- #define DMA_PRINTK( x... )/ p0 ?( F v& Q% z& @( C- Y4 k
- #define DMA_FN_IN
9 k1 j; \; U. x X4 F. J1 q - #define DMA_FN_OUT
0 B+ {/ [1 f& j$ [ - #endif
& G* V; D: M. n) t
' m4 q- n2 Z! o& \) K& {8 v# Z- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, E( ?. L' a7 A - #define STATIC_SHIFT 34 r; ~- o3 a3 p5 i" V; M
- #define TCINTEN_SHIFT 20% z, V# W# ]4 I7 K) ]( i
- #define ITCINTEN_SHIFT 21
' F0 V, x5 V6 d: T2 ]4 R5 g7 v - #define TCCHEN_SHIFT 220 }7 D c5 k9 O2 ~! d, M
- #define ITCCHEN_SHIFT 23
' `( }! p$ R4 I6 r1 C - p* { a7 L" i& `. d% N! [. H( R
- static volatile int irqraised1 = 0;
* u3 [/ d- }6 W: L1 z1 X7 h: p - static volatile int irqraised2 = 0;
* s% {9 F# x/ T/ T! F# i! Z
4 G8 @ `1 D* y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% G0 J# Z9 j9 |+ h - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! q O' }. s& B! N
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% G( V" j% z9 C$ g
8 ?0 l- ~; P! ]9 h {- dma_addr_t dmaphyssrc1 = 0;+ p5 |4 B1 N7 \6 M% [7 O
- dma_addr_t dmaphyssrc2 = 0;* `2 Z M/ ?0 f: K. T. L
- dma_addr_t dmaphysdest1 = 0;
) T/ E+ }2 i4 X5 z* }8 N/ Z - dma_addr_t dmaphysdest2 = 0;
; `1 r, q4 ^2 y4 |2 w) O: [8 V L
' t: p. p8 N7 X' d( n- char *dmabufsrc1 = NULL;
$ A* Y* X+ e/ e O1 r4 Y. A - char *dmabufsrc2 = NULL;+ w5 n' v7 o+ K7 x. r
- char *dmabufdest1 = NULL;0 G8 z. o" [) I F8 v: k
- char *dmabufdest2 = NULL;
* J( z7 a2 I/ e% ~0 T: v0 h - / e7 d& D( z: a* T, Z5 C
- static int acnt = 512;: l5 g/ f. s$ q) l4 P1 s
- static int bcnt = 8;
' ^ P3 r' z" D; D* W - static int ccnt = 8;; v* |/ D( R- V0 C8 ~4 j @
- * P# h$ z4 I: w2 ~
- module_param(acnt, int, S_IRUGO);
t6 o) E& t( T' k# U7 `( G5 o - module_param(bcnt, int, S_IRUGO);
2 \* y2 }( s/ U - module_param(ccnt, int, S_IRUGO);
复制代码
' z. ^" h! A5 l) v! o% e+ ]0 F
) v7 T0 L0 j. P( H 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用8 j y% X$ E9 q q/ ?
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。7 {1 |& R( k+ X
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
% g$ C. o7 D- K1 h% L5 H! n5 O3 ~2 ~9 ~$ X
) z4 D8 C4 I2 f
|
|