|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' W v4 _9 K8 c" d# ?& m- [code]EDMA sample test application
4 |; S8 C/ g* Q* |/ {" }: [4 ] - /*
Z: R0 U0 ]# C6 ] - * edma_test.c
9 f# x& S! a" S' T7 i - *6 d$ b: C0 M: K
- * brief EDMA3 Test Application7 g8 D3 W) R5 g) W
- *. L& q+ m4 E( P$ L
- * This file contains EDMA3 Test code.
) m1 @" B# Y* r8 ~ - *1 g! E/ C* H6 V$ g8 S1 p L
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE' U0 {6 k- B7 F& {) U( c" L# E
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT$ T* j8 q" X1 r6 `5 N5 m
- * TO CHANGE.% f1 |# w( z$ f0 \) m; r$ u% i \
- *
: p W; {7 G; l6 Q* c - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 Z# P( Q- O5 |& w% r6 Q/ p - *
) l; J: d& {7 }; v- {# `: D: U) N - * This program is free software; you can redistribute it and/or- Y5 Z# g4 a: |! q" U
- * modify it under the terms of the GNU General Public License as
4 J) j. B$ X" d# e - * published by the Free Software Foundation version 2.
' ~ N0 x2 A0 I - *
- B! s2 {& r/ _5 U* `7 ^! J7 m - * This program is distributed "as is" WITHOUT ANY WARRANTY of any+ ]' N# B1 @' E1 O, u7 _) O
- * kind, whether express or implied; without even the implied warranty
) k. X" f* X! m5 @6 O! F. |% q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) r- y0 ]$ i0 c$ C( \ - * GNU General Public License for more details.! `% s/ H3 k ^# F: _7 Q4 g) w; ~
- */ G4 \/ C. b: {% e
- ! e) H, b) g1 M$ v; d
- #include <linux/module.h>
2 n& w' I7 _2 A# { - #include <linux/init.h>/ K% E& f2 ^* X/ N6 u3 `# i6 `8 y6 }
- #include <linux/errno.h>
8 `9 ~: ?+ P, c$ y: a - #include <linux/types.h>! R3 T) g3 K- V' o- E) e1 M
- #include <linux/interrupt.h>
, b* X/ ^% O, i5 s, k0 h - #include <asm/io.h>; H# h( j; j/ w0 x
- #include <linux/moduleparam.h>
1 u* | w/ V# h& _- W4 e, R T* G - #include <linux/sysctl.h>
" w8 a1 j4 v% q5 |9 z' C - #include <linux/mm.h>
( L7 K: O, P1 F4 m; E G - #include <linux/dma-mapping.h>' j# E7 ~* a: F$ P: A1 q
- . ?7 |4 f, I; k
- #include <mach/memory.h>. C; g* ?! P+ C5 W$ P
- #include <mach/hardware.h>
! ?/ |; Q$ P6 i, ^5 w/ l4 V - #include <mach/irqs.h>
/ P% M; D6 w- o+ p7 ] - #include <asm/hardware/edma.h>9 m @1 E1 I3 T) |
- - c9 a% Z; C' x
- #undef EDMA3_DEBUG
: C- }* F, a; b6 [+ R9 t - /*#define EDMA3_DEBUG*/
$ j) e8 u5 X! m% C p" J
" U7 I" \$ z: Z" q- #ifdef EDMA3_DEBUG! E n: h% T5 `5 Z+ y! W
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
9 Q9 v. X' e, Q: k' Q e - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
9 n/ T6 f0 C4 w - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
5 s) J: }5 o% y0 e; {8 W - #else# c0 ]( E C# ?" O* ]1 q. E' X. W
- #define DMA_PRINTK( x... )
6 e5 ~& }' I( j, P% y; y - #define DMA_FN_IN
6 J0 q! l1 b' F - #define DMA_FN_OUT" l8 [% e. R2 @7 _8 t) B1 g, v
- #endif
5 Z3 b/ s3 N4 u2 D - 9 `. K. c& M& f
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
+ i8 r" d$ d+ Z. r8 @( }* S - #define STATIC_SHIFT 3
- n/ A6 Z! k7 G - #define TCINTEN_SHIFT 20: _, b6 o0 W) {% ^( Y" {$ d
- #define ITCINTEN_SHIFT 21
7 T ` F6 P, p% T& v) D1 [* _2 P - #define TCCHEN_SHIFT 220 O" u% e7 ~( o V3 N- G
- #define ITCCHEN_SHIFT 239 k: y$ g( D0 X O
) Z* T% v7 b; V- r) O2 l% C4 L4 z- static volatile int irqraised1 = 0;/ G7 S2 n7 u6 D) a2 M( \
- static volatile int irqraised2 = 0;/ T( x( _+ ]+ a. c- @# S
- % O, d8 t0 z7 e) Z
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; C O5 h! v! X7 {7 F# F: E
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 Q0 z# p) f7 c - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 R1 P# H, {% V& I% u5 c4 v# Y
3 Z/ L. ^, d* @/ z; o! h- dma_addr_t dmaphyssrc1 = 0; n9 ?+ ^* F, `' ?8 N) W3 s, p* w* s
- dma_addr_t dmaphyssrc2 = 0;0 E T/ [4 C; V. O4 @2 p, r2 [
- dma_addr_t dmaphysdest1 = 0;3 H3 _: U) Y, g; }
- dma_addr_t dmaphysdest2 = 0;
, g) u1 }+ m( S2 Q$ o4 Z - 5 ^# _1 I- M0 ?' j" q# p. Q* b z
- char *dmabufsrc1 = NULL;
6 [- m! e+ {5 g% @ m$ ^ - char *dmabufsrc2 = NULL; j s; G8 H7 j4 Y, i! G( R3 t
- char *dmabufdest1 = NULL;) I6 o" O9 d* ?
- char *dmabufdest2 = NULL;
" z$ u3 K! W4 w( o4 \
2 I1 |, Y9 m7 Y5 @) D) ~- static int acnt = 512;8 Y' y# E( f9 z; ]. x; x* C
- static int bcnt = 8;
. i8 r- S4 W1 Z) a+ l - static int ccnt = 8;$ E$ z$ e @3 i6 B
; [: ~0 p( C) ]/ Q5 q- L) r- module_param(acnt, int, S_IRUGO);6 c. n5 |* Y0 R0 s
- module_param(bcnt, int, S_IRUGO);, x# }' R5 f9 V
- module_param(ccnt, int, S_IRUGO);
复制代码 0 H$ O8 t$ k1 B+ l0 k6 r
& p6 I7 g% e, f) }/ [ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
$ l, R9 ^" z# l0 ?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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。- W( ~% y( n- F& {8 V" T
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。: B) f" }: f8 |, Z: }, w
2 ~/ y" b0 g/ G- H& Z# F
+ C: P6 B& R, I6 L, j |
|