|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! ^, l7 U: D X4 p I: \
- [code]EDMA sample test application
: N6 `! B& `/ g- q+ G - /*7 D( k$ q2 D7 t/ h5 X$ z
- * edma_test.c
- d v9 f4 m; {. o$ v5 Y - *
+ ]: v! c3 v+ G* Y - * brief EDMA3 Test Application/ `6 Q$ ]& L! y: x8 v9 V7 j* f
- *- V( ^3 B4 r m% h
- * This file contains EDMA3 Test code.7 u; m6 }4 H* j# l
- *8 ?0 [7 E {3 `# k1 m" A7 B0 S. h6 x
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
+ h( S5 G" e6 ^# a0 M% \ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& @: e, X2 D) e3 @" B - * TO CHANGE.
# a$ J1 X2 O8 i - *
0 B9 j' X* `& d( w: W - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
% |8 r% n- d$ \' B! D& f+ Z - *
- S2 ]: V/ r5 N( \6 n" { - * This program is free software; you can redistribute it and/or1 m' B! P9 s; H( U$ j
- * modify it under the terms of the GNU General Public License as5 [. V: N* u; J$ f) E7 H k: b/ o; r
- * published by the Free Software Foundation version 2.1 t0 Z4 d8 G1 M4 x* s9 w2 \
- *0 O/ l6 G, I. s+ O" f3 x8 q$ B
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any- v/ ] _1 m. o
- * kind, whether express or implied; without even the implied warranty- \+ h- p) m+ p& H) ^
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- w8 s& A9 M% U g# k$ e - * GNU General Public License for more details.
4 `) f8 z0 K& |" M, H/ P - */
* J: @1 k* O& d6 X( G. i - ' J1 @( @# E( A9 E
- #include <linux/module.h>
. T' b3 i: c7 v - #include <linux/init.h>+ l. A4 O) S& G z9 j& C, I
- #include <linux/errno.h>
. k! F7 V8 r3 g! O4 S- d$ o - #include <linux/types.h>
5 A+ R; r+ ~, {8 d - #include <linux/interrupt.h>- Z8 F4 ~* i- d
- #include <asm/io.h>/ J) A3 t' z! Q5 c7 N) o. a
- #include <linux/moduleparam.h>
9 [( K3 [1 B4 \- x7 q - #include <linux/sysctl.h>* U6 _& B/ W; K/ s! x8 k
- #include <linux/mm.h>
0 F; y3 j5 j( Z1 M5 b2 C7 N - #include <linux/dma-mapping.h>. } U- z- p4 _" I! H
5 `+ u0 w; W+ ^0 G0 \- #include <mach/memory.h>" I# d! D0 b' q& @
- #include <mach/hardware.h>1 d$ o+ T8 u; S6 s i0 D
- #include <mach/irqs.h>" e1 r7 b {' Z' y3 t
- #include <asm/hardware/edma.h>
( r. W) I% c0 y2 l- c& C
. B+ {# \5 i+ H+ p* [ B$ C- #undef EDMA3_DEBUG
) |; {7 Y9 B# [' ~9 q - /*#define EDMA3_DEBUG*/
0 S- e% p$ M6 d- }4 K* j8 W
1 t: E+ [3 e- Z) a4 g' \5 o- #ifdef EDMA3_DEBUG
; F0 j- e. F* @( Y* O0 u - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! Z9 ?/ R1 f( q7 X+ p C; X
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
3 u6 K$ p' t+ z7 @1 a) n - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) c/ p/ m/ T6 [ p8 o5 D! y
- #else" [4 J4 L% A% j( j1 f2 `
- #define DMA_PRINTK( x... )
4 [' J: I5 e0 v, N0 F* c, n - #define DMA_FN_IN
/ N# K* I$ T0 S- i( X - #define DMA_FN_OUT' p. n2 x2 S# s3 [6 U3 }
- #endif1 W' r$ F1 K$ b
I$ U" ]7 K/ u+ S+ w2 ?- ~- I- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: H h+ ]& C" S4 P, [5 m& r" P' M* Z - #define STATIC_SHIFT 3* `9 h$ f3 C7 Y% l
- #define TCINTEN_SHIFT 20
& U+ S; F6 @% c. U ? - #define ITCINTEN_SHIFT 21
8 C+ q3 T) ?. T- f% @ - #define TCCHEN_SHIFT 22
* o$ J+ n9 M+ ~; w. e7 m$ K% U - #define ITCCHEN_SHIFT 23
9 X, D+ n4 i9 k! r- A7 A- Z - 7 b$ q2 d* s# ]. `' W1 j7 ?
- static volatile int irqraised1 = 0;
5 V6 b W$ p9 ^$ e! m. g8 U - static volatile int irqraised2 = 0;' N, C9 F2 N# w0 D- r7 z- z9 L
& u1 D+ D: P' R2 F% t% N- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" ]$ z; Z* I" W' O$ w: H - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 J" s5 n. i. O6 q* L
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. r2 x) C4 x9 t/ I2 T( ~
& X0 C. N2 [9 c2 k. c* D5 b- dma_addr_t dmaphyssrc1 = 0;4 |% u9 x, d$ B% J! ~0 u9 ?
- dma_addr_t dmaphyssrc2 = 0;
4 [7 W3 e; Z3 F! ` _& l9 b - dma_addr_t dmaphysdest1 = 0;
/ x7 r* \- s* k0 u) l* |7 ?0 A6 | - dma_addr_t dmaphysdest2 = 0;
$ @# G+ J7 d0 P, @; h# h3 T0 Z, [' b2 U - % r( X5 l' @0 ^
- char *dmabufsrc1 = NULL;" e; s$ F- T% g* D# f
- char *dmabufsrc2 = NULL;
, ~! ~* F+ v" r3 `( G2 I$ J3 x; i - char *dmabufdest1 = NULL;6 j7 v9 s/ A% e- [0 X
- char *dmabufdest2 = NULL;
2 V2 N1 p$ i8 E) w0 C - ( O7 T' i" _9 a, B
- static int acnt = 512;3 D0 ~3 u% x6 j* k' P
- static int bcnt = 8;+ R" I% U0 t% [' N
- static int ccnt = 8;) u( g+ h9 B% t$ B
- ; a) d2 h) g' C/ r+ }) p
- module_param(acnt, int, S_IRUGO);- a7 q9 ^3 `1 j0 n
- module_param(bcnt, int, S_IRUGO);
6 |, O% q" z s - module_param(ccnt, int, S_IRUGO);
复制代码
: O) b+ H2 \" e2 F# H* L5 |1 b2 \9 e. M4 i! [8 }
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! {4 S0 i" H" w/ \9 \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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
' k0 k$ X) ?9 H3 G 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。2 r+ v$ M# \% ^3 |: v6 Z
# r9 J' @. L' {% Z2 v# U# {4 a" J6 V+ t
|
|