|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
) b: L& }) o+ Z1 O2 j% Q- [code]EDMA sample test application
2 @& |! t: Q* g- O0 d - /*
; h6 c2 B, X I, L. F) T - * edma_test.c
; t- \1 U4 ]+ Q- i/ z# l. U- K - *
, b' N) t T2 z' G" t4 D, h* R- W - * brief EDMA3 Test Application
: r1 U, N, f, Y5 w' g* [/ F( I - *
5 c7 w C' ^9 i3 l0 | - * This file contains EDMA3 Test code.; \8 I9 K) R" @3 Y! ^
- *; n2 L, W6 z9 \4 g9 P4 \* b, f
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE3 o/ E6 V1 ]+ H" }9 }
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
. @6 |' n: M! z - * TO CHANGE.9 Y2 V! U6 \1 u6 `; p
- *
- C. F3 l/ a" ?0 X- _! T: y7 l( d - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ b8 a+ ]3 A. \
- *
4 g' L% d/ B" O4 P - * This program is free software; you can redistribute it and/or- _/ ?; v$ P" u5 }6 y; g# S
- * modify it under the terms of the GNU General Public License as% K M$ I& Z( Z1 N
- * published by the Free Software Foundation version 2.9 b) B$ t, d( |
- *
: a {: W- x/ _ z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# ^0 @4 n5 j( t6 F w$ O' l9 e - * kind, whether express or implied; without even the implied warranty
" F8 ]) c9 U7 l; E - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" Y/ ?' b( F% y3 h" l
- * GNU General Public License for more details.
3 Y$ i0 R" \, N4 R - */$ F8 R: Y" W/ D: [% s+ @! d9 `% Z
5 L$ i1 ~7 o6 @4 w- #include <linux/module.h>, H) p8 F) m( R! m( w: ~+ M
- #include <linux/init.h> k# q: i3 X$ B8 C" _, e
- #include <linux/errno.h>) `% A, D/ d+ v* v8 Q7 [
- #include <linux/types.h>% g3 }" z; w7 m+ }/ D3 N
- #include <linux/interrupt.h> V4 g/ h, F" {$ S- Z; k
- #include <asm/io.h>
+ w4 N: S) j1 v) V( L. E - #include <linux/moduleparam.h>0 b* [4 p5 J1 v6 s
- #include <linux/sysctl.h>0 M/ i" Q1 X% d# Y/ u+ k1 ?) F4 b8 C
- #include <linux/mm.h>
. x9 \7 q9 b; @* \ - #include <linux/dma-mapping.h>/ M0 p: L5 K+ V+ d" X) f
- . K0 Y; x- O I; Z
- #include <mach/memory.h>
9 M5 I; d2 O( t0 r9 v5 K! y - #include <mach/hardware.h>
8 ?! |5 K# o& @% K - #include <mach/irqs.h>% ?1 b; v- P T$ j1 Y+ _' [7 T5 _
- #include <asm/hardware/edma.h>
0 Y" C a$ k+ x/ D - " _0 ~* N8 I, w. O4 h
- #undef EDMA3_DEBUG; F& y M$ `/ N+ P0 q
- /*#define EDMA3_DEBUG*/! t/ {0 m' j* y& D# }
- ! W* {6 e6 [' D0 _8 k# P1 `
- #ifdef EDMA3_DEBUG/ \1 X7 F- `; ]: N# ]
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)6 a; t, u; z$ n! u( Q" B, u9 s
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 Y3 k8 `/ w( t" i2 i4 e( j - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). m2 J( ~5 v1 J1 u/ h3 |
- #else
2 l3 [ F! X4 c$ c# C& K - #define DMA_PRINTK( x... )7 Y8 x9 \6 k- |' |4 u
- #define DMA_FN_IN
" I; ?& C y7 B* ~6 O - #define DMA_FN_OUT! r. M$ e7 a' C# r0 N2 u
- #endif
" C I3 r0 O& ]: e - 9 S- Z6 |2 n6 k y
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' I9 t" W& w2 u0 W; U: }- v
- #define STATIC_SHIFT 3
9 {4 f. H) }) v: o7 e4 h - #define TCINTEN_SHIFT 20
, h" z; r7 H7 |! q) i - #define ITCINTEN_SHIFT 21
& {( \, M- M, @& ` - #define TCCHEN_SHIFT 22& B" x2 g# T' D- w' U# {5 V- c
- #define ITCCHEN_SHIFT 23& N: e$ V; f c5 Y
2 P8 k% M6 j/ D; e" ?- static volatile int irqraised1 = 0;( e* Q5 ?( C6 b% Z. v! A
- static volatile int irqraised2 = 0;
$ p! T9 M- W9 c6 Z5 `" Y - . j( ^. n( _% a: j
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! \* K+ c# i8 L2 v - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' d0 t7 l9 e! N1 i - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ I5 h9 E. H' R- m# b; N1 K - * i' Z& W0 ]/ W' V9 p
- dma_addr_t dmaphyssrc1 = 0;
9 I$ h9 R+ `* R% K) l, P - dma_addr_t dmaphyssrc2 = 0;
( _. \4 M: j" B) q" s - dma_addr_t dmaphysdest1 = 0;! L7 z# Q9 ~; M; b2 B% }/ U: e
- dma_addr_t dmaphysdest2 = 0;
9 W* C: o1 l3 M- X S - 7 H4 R4 r# z" ^3 [- K
- char *dmabufsrc1 = NULL;
3 O( O4 ^5 P4 o m t - char *dmabufsrc2 = NULL;
* C1 O3 b+ o7 m6 P - char *dmabufdest1 = NULL;
0 ~+ e+ c* w( \6 Q - char *dmabufdest2 = NULL;
6 Z' m4 h. `. @ - 4 T0 I& z4 v; w7 E8 K
- static int acnt = 512;
3 m+ h( Z0 Z. B( z* J - static int bcnt = 8;" c% f/ K9 ~1 P/ y
- static int ccnt = 8;
) Z- i& R: ]! N: |5 f3 l- R. ` - 7 @5 ~8 I l6 B; U. U
- module_param(acnt, int, S_IRUGO);! }7 a( g7 x7 m% C9 s
- module_param(bcnt, int, S_IRUGO);! [5 p/ A$ p; z
- module_param(ccnt, int, S_IRUGO);
复制代码
4 N& y( p; C, p f' O
) \) G ~& w9 h# D B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
( i$ R1 W n3 f. U; Y8 Marm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
! }" v$ W4 B4 u( ^% s! T9 X# h1 E 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ r- T) s. o9 A$ ] B t+ t
$ {/ S4 r$ Y( K, @; s# p6 y7 p$ [. G
|
|