|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
( Z! }% q1 N2 r- [code]EDMA sample test application
5 ]/ G- m9 c& j: M' ? - /*
1 j& ~/ L4 F/ \ - * edma_test.c
* f! ?, j8 E- w - * C+ f, M3 j& l/ ^0 a
- * brief EDMA3 Test Application2 ~; J' H7 H* u" B) P" O7 Z
- *
4 A3 g$ R+ @5 K$ R- P1 b( k - * This file contains EDMA3 Test code.8 q! Q* X P* K( ?2 W1 x
- *
; ^* H) b6 A+ o3 P7 S; g - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE0 V: c, w4 n6 t6 ^3 q
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT D; a5 p! e. a/ f5 @. k
- * TO CHANGE.3 J, N, D/ x4 ^2 R7 E5 w, B
- *
6 b9 q3 W( X1 e' N - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 _0 @! o$ d+ Q# G, k0 C# N - *
# H; S8 r, `. C1 A8 y# P0 b3 g4 ] - * This program is free software; you can redistribute it and/or
- p$ x( X! F5 ^# d2 a8 ~# d, F - * modify it under the terms of the GNU General Public License as9 r) {0 a: s7 w5 q
- * published by the Free Software Foundation version 2.
% ^! v! w% x9 n - ** O: q7 A m8 m
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' k! @+ ], a+ M* _4 D - * kind, whether express or implied; without even the implied warranty
+ @5 _3 z( N7 m( S5 {$ Z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4 Z. }8 I5 M: ^) n' e# Y) S+ W7 Y; [ - * GNU General Public License for more details.' u5 C8 `* U' c# @! {, C+ s
- */
# [1 }9 E# e4 k- d - ) W% X1 @/ \9 X% V' [
- #include <linux/module.h>/ O3 {- ^+ Q- |9 [& l- Z0 U/ t
- #include <linux/init.h>- |! h, {7 j/ k$ @# D" N& I# F
- #include <linux/errno.h>
* g) w! K$ n7 N - #include <linux/types.h>
! B4 k/ S- c: L! ~ - #include <linux/interrupt.h>
`" o8 S ^: M) l/ e) ` - #include <asm/io.h>
! k: j9 C/ p0 l0 G. A - #include <linux/moduleparam.h>9 d( @4 ?6 }6 @* X7 A
- #include <linux/sysctl.h>
' z" J5 H: F; }; \7 j - #include <linux/mm.h>: H* E. W: E, G$ T' r4 E
- #include <linux/dma-mapping.h>
) N- @5 S0 h6 k! Z
8 K- g$ s5 a }, Y. d- #include <mach/memory.h>
2 J6 A7 t0 w/ O - #include <mach/hardware.h>
$ Q( n" z( b* Y7 J, Z - #include <mach/irqs.h>$ v3 Z6 z0 T, m
- #include <asm/hardware/edma.h>7 n, j* C! X+ e* K' |. h
- ) m4 J& |' o- ^7 q
- #undef EDMA3_DEBUG' _# z3 ]2 |+ d9 T) ~) N7 l- n
- /*#define EDMA3_DEBUG*/3 \. k+ D5 ^( \$ n( r- `: q2 E
& {! `% E3 K( E. ~, e4 J* B- #ifdef EDMA3_DEBUG _) q1 y% E7 y! e' y% J5 f
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)7 O/ a/ R6 X, k4 T e" a! o
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# m- a! Q/ p. o) u5 p" |3 p2 W. j
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* _ g: Q( x8 J' L/ A; ^# ^
- #else" ]$ U0 \5 Z* S3 v6 |
- #define DMA_PRINTK( x... )
. L- \1 v$ K9 q. V% d - #define DMA_FN_IN% B: g9 S8 m8 y8 D6 K2 X
- #define DMA_FN_OUT1 Q6 r3 l1 B% w9 T
- #endif, t0 F1 c; |+ U# k+ A! N+ N# K: I5 T
8 Q# d- h8 a( {" ?) C6 p! }* j- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, M8 G$ ]1 ~( Q8 V8 k/ j - #define STATIC_SHIFT 3
p) b9 V, k6 U, c& a8 V0 Q - #define TCINTEN_SHIFT 20
( k& J' ^2 R2 r- ^ - #define ITCINTEN_SHIFT 21
9 V9 p I, Z0 S4 { - #define TCCHEN_SHIFT 227 E! E4 a7 s& ~. x- `( L& o
- #define ITCCHEN_SHIFT 23/ X: f# r3 Y1 p# a5 J9 v
- + {: g; m! V$ b9 W. G3 h$ D2 ]# y
- static volatile int irqraised1 = 0;
( \6 r# C# V d - static volatile int irqraised2 = 0;
$ M* z! Y+ g8 x3 O& j7 p
. v2 V# O7 q; q( y& k+ L- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" l5 t: `6 x: x - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ [8 R! H( w! L5 ^- @. }
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 s/ k: a% D: c
3 ?$ |* s& [' V: G2 ^- dma_addr_t dmaphyssrc1 = 0;7 k+ t+ l+ z; @( `+ U5 ~& t$ ] e5 e
- dma_addr_t dmaphyssrc2 = 0;3 Q X0 }5 T5 o8 J! J/ ?0 u
- dma_addr_t dmaphysdest1 = 0;
+ r+ M& f& A# j. ? - dma_addr_t dmaphysdest2 = 0;+ ~" ^! W+ ^& }/ C9 c9 d
" z) V2 R4 C9 i. Z- char *dmabufsrc1 = NULL;/ d1 H @7 z8 \' [
- char *dmabufsrc2 = NULL;; s, Y# A9 d2 d. [' ~$ N8 N8 q
- char *dmabufdest1 = NULL;, `* }, g9 O0 F/ B* d. |& A
- char *dmabufdest2 = NULL;5 U& e1 ~# V/ E+ X7 R
- ' V# J) q5 Q( P0 e. t- L) y* v
- static int acnt = 512;, m# @6 {3 z/ _8 g" O
- static int bcnt = 8;
i. H9 k s2 D$ y7 T9 c& {6 v - static int ccnt = 8;: F( k* o- a3 b7 N
- ' P" J( c5 ]" _- ]
- module_param(acnt, int, S_IRUGO);
M/ X; C8 c/ r. D7 @$ ?5 S8 m - module_param(bcnt, int, S_IRUGO);
: c) ]4 q5 O5 U! g! O - module_param(ccnt, int, S_IRUGO);
复制代码
2 `) I3 ?& G' e0 r R1 d/ m5 [6 w. ^- @
6 u) H" K' _1 o$ B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 h$ v0 m; E+ k2 K8 V4 W8 d
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ g( @4 J" R6 j5 e7 ~8 H
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! u y7 M" j& b
$ c- Q5 { S" ]0 m/ P
: X6 _7 z+ H! E9 i. |# `) a( k" ?
|
|