|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) z' z; l) o! c2 L0 R9 f- Z
- [code]EDMA sample test application/ ?/ o2 B$ T3 r4 s5 ]+ \ s
- /*
/ z0 c/ ]9 q; Q0 Z4 i5 D - * edma_test.c, U& r; q2 `2 u
- *3 A. @% i9 }( p0 P3 e. W
- * brief EDMA3 Test Application, C8 j' ~$ H4 K! {3 o- X
- *
/ I: j6 P F$ m i( m! p+ S+ ~ - * This file contains EDMA3 Test code. g9 b! r* [: F) ]/ `. U
- *0 w* A, X4 A5 ?6 L* ^
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
+ @5 S3 ^4 s3 d0 s g$ j2 \/ |' P - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT+ ] \. s1 \7 r: A0 P% U
- * TO CHANGE.' @" h& l! V: K. s: N: j
- *) s. u! n2 N' B8 G7 |1 t
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
% i+ `( |8 s0 m - *+ }0 ^& S2 }# M. I' B: ~. _( x
- * This program is free software; you can redistribute it and/or$ i9 d5 q }' z& U
- * modify it under the terms of the GNU General Public License as( ^7 x* S+ H! s \/ [: T. Y+ g
- * published by the Free Software Foundation version 2.
; c K8 R& G' s- K5 Z$ E2 X4 X - *
x# P7 e2 q. F9 B% [ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any8 m$ h8 F1 E" W& O
- * kind, whether express or implied; without even the implied warranty
; p' t) y l) u/ Q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 j6 t; K# u* D% ~. F$ [
- * GNU General Public License for more details.
. g. b- ~( p- r# x$ _4 E, R - */" h. t6 a5 @* Z6 Y) q6 k; e# d
- # V" Z" k; \+ L1 w/ }
- #include <linux/module.h>' }# g7 x" J* A* h& A* g
- #include <linux/init.h>
7 O7 Q( z% ?" m# `- O2 x: B% I - #include <linux/errno.h>: H7 _7 ~ x# |5 g. o. J
- #include <linux/types.h>
% L: a- g+ |+ V" s) P2 P3 q& O0 i - #include <linux/interrupt.h>
1 p9 ^' E8 v1 K. l+ F6 h; \4 Q* j* [ - #include <asm/io.h>7 g% T9 {4 U4 ]: Z4 ^/ ~
- #include <linux/moduleparam.h>% N: E( J+ N3 u1 l5 y+ H2 Q1 m. j( T7 ^
- #include <linux/sysctl.h>+ r. a- W6 \ ]3 v5 ], O( _" {
- #include <linux/mm.h>
1 G3 o' D& ^8 p; }9 i* _9 q/ U( g0 W - #include <linux/dma-mapping.h>
" ^# x* L# L, Q, I& @' |1 f
6 q5 |. L, a3 y2 \- #include <mach/memory.h>* S4 @) U$ Q. N2 K
- #include <mach/hardware.h>. o" z' @! Y/ V+ z
- #include <mach/irqs.h># b; A& ^. M) m9 ^7 \
- #include <asm/hardware/edma.h>* `" D) o p: z# B7 R
- 7 @1 U! v! i+ {, C
- #undef EDMA3_DEBUG4 C+ n* [ i0 q7 }9 h/ ^2 I
- /*#define EDMA3_DEBUG*/
" e' N: j4 e8 E& U' u; P
% x! Y6 b1 S+ [- #ifdef EDMA3_DEBUG3 a7 H6 C4 Z. H4 s( n$ @
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
+ S4 m( A. w. d, X8 G Z+ T - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__), T3 r# F- A$ E. R7 f
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. T2 c! q! Y2 ^, q3 ?4 A4 J - #else
6 k+ p: }% L8 w8 M' _8 ? - #define DMA_PRINTK( x... ); A7 H, t1 u6 K I
- #define DMA_FN_IN
# }! a$ B" s, J3 Q4 y - #define DMA_FN_OUT
8 L9 N1 _4 f* Y. d* j# a- Y - #endif
. a( i3 b. s/ U' P3 W - % ], D! z* N+ }# ~
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 w V2 l3 e) ]3 t - #define STATIC_SHIFT 33 M# h4 Z9 a. t& b5 V5 n. w
- #define TCINTEN_SHIFT 20
- g( w' |- T: I8 q1 e, b B - #define ITCINTEN_SHIFT 21
v' U8 w# D0 Y! l# O - #define TCCHEN_SHIFT 22
4 v% ~- I. t* h. X - #define ITCCHEN_SHIFT 23
- R" R, r) z5 T$ Y6 D - 9 }( c+ n0 e$ [5 \# ?( ^6 H
- static volatile int irqraised1 = 0;
1 A3 K1 O" _0 B( U" y# Z2 B0 E - static volatile int irqraised2 = 0;
9 b% r$ ?5 J$ M, n( e( D0 V9 O
- @! W7 t2 ]5 u2 a: q- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* U- ~2 @1 S T6 s. G+ F! X( ]3 P
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! B; C& F4 G4 I& y/ Q: E
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: O7 t }3 q! ^1 M3 @/ A+ S - ) o( C- u6 P6 G3 O, Q1 i9 ]
- dma_addr_t dmaphyssrc1 = 0;
M: C' ]( N `$ Y9 J3 ` - dma_addr_t dmaphyssrc2 = 0;
: B4 Q. P7 i+ z4 x8 X- D" N. f - dma_addr_t dmaphysdest1 = 0;! d$ j7 O7 r5 A" s8 P! h7 s. }
- dma_addr_t dmaphysdest2 = 0;$ i8 H6 a: V: ] r" p! t
5 l& V0 G" z, J0 W5 ~ V g0 K6 J- char *dmabufsrc1 = NULL;8 T' s) ]+ Y: L* q0 d
- char *dmabufsrc2 = NULL;2 i/ W: P/ }3 n
- char *dmabufdest1 = NULL; p/ m# d" p$ y% r5 h/ [- s5 u
- char *dmabufdest2 = NULL;! m- ]* H1 W) _" f! S; B
- 3 q+ J1 |% d' R* j* Q
- static int acnt = 512;& v4 m4 ?) @; y! G) p4 _ Z4 t4 l
- static int bcnt = 8;5 w$ R' K7 h* k9 M* V3 L0 p$ @7 B
- static int ccnt = 8;
9 p0 y1 ]+ \; z5 j - / C0 Q3 O: a2 z- k* P
- module_param(acnt, int, S_IRUGO);; R6 H3 R1 _: r1 V+ d8 M s# b
- module_param(bcnt, int, S_IRUGO);
+ _; x" C& k' h - module_param(ccnt, int, S_IRUGO);
复制代码 ' l1 B1 f& p0 q& ?1 }
2 j7 P, |3 |& U% M+ F6 U
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# M4 h) W! o; O* l6 d; {* `! Barm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# G# u4 s2 a8 ~
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
- m; f& O/ F' [0 j5 \" I g2 i& _& Q
$ b( q. k) v8 h8 z! r; u7 u
+ V" B8 A- B% ]9 A5 R4 z" m |
|