|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
# ]$ ], f: h& h% E- [code]EDMA sample test application
, L# s- v& Y: B/ m4 y7 I; Y - /* }1 x3 D. `1 w( G
- * edma_test.c
% ?; k- d- `4 F" _9 z' m - *
0 b# K! {" X0 @3 `6 T2 f3 @ - * brief EDMA3 Test Application
# V0 }) W4 ]6 {9 N - *
3 F% ^$ R' L/ a9 e, X9 b0 A - * This file contains EDMA3 Test code.; A/ f4 P2 _" E0 G4 f! H
- *2 ]7 B5 v {. ~- z9 I
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE t W1 h! {+ ]
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 K8 z" T5 j' i. v3 k8 X
- * TO CHANGE.; d! T2 A, C p1 U& ^; z
- *
/ L& w. Y4 \' J$ J5 A - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/0 T! D3 y8 }0 Q. ?9 ^1 T
- *
, t7 C# L! V# `5 ^9 v' W - * This program is free software; you can redistribute it and/or
9 S/ {" W, P; s( {9 C - * modify it under the terms of the GNU General Public License as$ c! I d8 _* h5 e, S4 M
- * published by the Free Software Foundation version 2.
# K; V1 M I8 X7 ] - *1 X% c% n/ g9 \+ ?% J
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
% T, ~' y, i0 B* g - * kind, whether express or implied; without even the implied warranty; E( }6 X w* o! z" P9 P, c
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! K3 c& w0 N( K; v$ g
- * GNU General Public License for more details.
/ ?6 Y, E/ ]) h& k3 s - */
% @$ M6 M( s7 c7 ^" ^
4 _" \( k% j. K- #include <linux/module.h>8 N5 D A3 z& ^6 t6 n
- #include <linux/init.h>
( I5 L1 Q3 L5 J2 b1 @ - #include <linux/errno.h>$ d% M8 ?/ t, I5 ~
- #include <linux/types.h>: U5 [: e: U' k; r* m. f
- #include <linux/interrupt.h>
$ L. f' Z. O8 R" s6 k - #include <asm/io.h>
\( K, j5 |" Q( c# i# T# v - #include <linux/moduleparam.h>! H) d2 Y4 h5 P
- #include <linux/sysctl.h>! G! d; ~+ z% y# \4 `6 B1 B; o
- #include <linux/mm.h>' f, _3 |7 B7 f; Q: B4 @+ L. I
- #include <linux/dma-mapping.h>
" r; t) a, j0 v$ E4 i3 V' V- s - ! o( R: i/ C& [. }1 p
- #include <mach/memory.h>$ g" ]$ ?# H5 f6 p4 B# m3 ]
- #include <mach/hardware.h>$ X) Y9 f- V( c, f3 z/ U. {" g
- #include <mach/irqs.h>, H/ s8 f, ~1 x; K# |- C1 R
- #include <asm/hardware/edma.h>
: U9 k& d# f: G3 m6 t6 k( Q
: F8 ]9 k" B! K6 p1 v( G- #undef EDMA3_DEBUG) b0 [9 s: c& @/ ?
- /*#define EDMA3_DEBUG*/6 x: H! o3 S; E2 F
1 E+ @6 |+ b7 N v }; p- #ifdef EDMA3_DEBUG# i6 U/ x' E5 _$ z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ D$ z, ]+ Q+ Z! x6 V7 c3 u) N - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& O, X. a# d/ l: w3 ?" L" f
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
k* U. I: {7 U' ~4 B! G5 {2 L - #else
; s* e, R4 U! o! _ - #define DMA_PRINTK( x... ). T; q! S% I% F( {1 A
- #define DMA_FN_IN$ k8 w* |: ?( U# z9 @& n
- #define DMA_FN_OUT2 e% L& C* {* h0 G3 D
- #endif
9 j7 ?( F4 Q" z* ^) I3 L' T
3 k' E* @, R1 {$ G* y# q l- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: Q% W! u: r& ? D. X - #define STATIC_SHIFT 3
i9 t, M- o& B. g9 m - #define TCINTEN_SHIFT 208 c9 ]8 b' r* U
- #define ITCINTEN_SHIFT 21
1 d9 R- Y. N0 y, p& a - #define TCCHEN_SHIFT 22 m. f6 d9 Z- f, r; P8 V8 c; l
- #define ITCCHEN_SHIFT 232 V* D, f& r% r9 G6 W6 [
* g( T4 V6 d D6 v* R2 x6 n# J- static volatile int irqraised1 = 0;
& F. X0 J: c) M - static volatile int irqraised2 = 0;9 i$ m1 Y( q0 O7 Z. P, F
- 8 A! |. C, \( o }" u+ D0 g
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- D/ F/ I/ L# I# Z, H' V - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 k3 _) ?% _$ @- c6 n6 B - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) O$ E) u/ ~2 ` - : S! x# j1 a) `4 D
- dma_addr_t dmaphyssrc1 = 0;- d; _7 V2 I/ C! w$ J
- dma_addr_t dmaphyssrc2 = 0;, D8 S; p/ Q' Z. @. T) e: T
- dma_addr_t dmaphysdest1 = 0;
/ [& `+ o0 e( W - dma_addr_t dmaphysdest2 = 0;& r8 J+ \1 g' c0 d/ e
' O, M# k8 H+ J, S1 Z- char *dmabufsrc1 = NULL;! H+ e+ S8 B3 }3 K; s
- char *dmabufsrc2 = NULL;
* A; {6 M- g" W8 I6 Y! P: n _ - char *dmabufdest1 = NULL;
. D# h0 D' ]0 _7 O - char *dmabufdest2 = NULL;
' {2 B$ u" _) ?( H! w7 _% T - & S+ @$ W" m7 i4 C' I5 G
- static int acnt = 512;5 P0 \/ Z: g" x8 |" m5 w
- static int bcnt = 8;
( [0 w7 o! q9 K" ?* o( J* N' m# G - static int ccnt = 8;
) }0 Q2 L; D$ X t: O - 3 e+ W+ P+ I; O/ b. X9 @; M
- module_param(acnt, int, S_IRUGO);
& B/ _1 O* v. M$ z7 T- d - module_param(bcnt, int, S_IRUGO);- o6 s! A" D/ C+ H( Y( F+ ]
- module_param(ccnt, int, S_IRUGO);
复制代码
4 P% _ y2 [2 A, C V& n/ q
$ y9 M2 ?2 ?! z. R! B0 C3 y 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用5 w9 U8 h, q) A+ K* l
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。1 a% ^8 `7 @4 t9 ?. E: n
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。1 _$ _) y0 e1 L: J2 f. L9 t' x
- O) r/ e, r4 j- G" s$ b# y) Q2 r! O9 @; U r6 l% V) S
|
|