|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ P8 ~* u0 d3 j! }! `; I' f- [code]EDMA sample test application
! ^( i6 V5 A* F9 M+ @6 W - /*' w3 m3 q" H( |
- * edma_test.c, S& \; G8 E2 N
- *
( l7 M( N) e2 g8 A - * brief EDMA3 Test Application
1 J7 ~& b- R( b v - *. S( f; T5 c4 ]3 w5 b" ~
- * This file contains EDMA3 Test code.6 o: R7 W" {0 A d
- *
V2 H. V+ M8 K1 y( S - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 Z: F, a: ]! k4 \5 s
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
_. k+ A7 [5 O - * TO CHANGE.. F! D4 B. h1 }! C" h% o: o
- *
" I! S! x4 I& E. X8 x5 U7 N' Y: _0 t - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/4 }: V3 F. v7 x! I
- *
8 _. N+ j: Y7 ?8 {3 r K - * This program is free software; you can redistribute it and/or2 v. x- Q, c% I4 P0 Z! [' q N
- * modify it under the terms of the GNU General Public License as
# N2 W1 H, e7 ~( \: F4 Y - * published by the Free Software Foundation version 2.) W5 |: i+ E& d$ d
- * d7 ^( v9 K7 R! I3 \" o$ O
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
: W+ i+ z" p& n( o0 r/ J7 p - * kind, whether express or implied; without even the implied warranty1 u3 m* K2 f7 Z( d( s1 o. J
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ ]! Z/ u* }) g) G+ }
- * GNU General Public License for more details.- }$ g% j; }6 C3 w7 f4 q- z" r
- */' N& C1 }' @2 k1 @( E; K l
& s* D( D1 @, z6 |! J1 I- #include <linux/module.h>% m5 }9 A7 E5 |: ~% k/ i
- #include <linux/init.h>
: `' X" O, W' p6 x - #include <linux/errno.h>: r2 X L2 |' F
- #include <linux/types.h>
4 V6 d4 m3 w9 A5 p& T1 w, P$ G - #include <linux/interrupt.h>' R2 w: H* O) r" b- s+ F
- #include <asm/io.h> x4 O0 b' V/ C
- #include <linux/moduleparam.h>
+ L: H+ a! G) K' h% u! s2 S - #include <linux/sysctl.h>
1 O$ U. s( X- l( u( u2 X* Y$ M - #include <linux/mm.h>. @5 {0 T2 @& K6 S2 f- _7 q
- #include <linux/dma-mapping.h>
7 F% ]0 D, v- I# l; |5 P0 ?+ y - 0 k8 \ L* |/ q% ~3 N X* k. c
- #include <mach/memory.h>% y: ^8 V* {+ E7 l& t# w
- #include <mach/hardware.h>
: _8 d$ V) Z ^ P; L3 K - #include <mach/irqs.h>5 s- _7 C9 x) L9 _
- #include <asm/hardware/edma.h>
( {( X( W* l4 @& y ^: ^3 I% K" u- ` - 8 m* I6 c& U- m
- #undef EDMA3_DEBUG/ ^! c: v* F% |) i3 H8 P/ U! |
- /*#define EDMA3_DEBUG*/: X, Z9 g. p' r
9 Z. Q' F9 `5 V9 Q! t5 n( w- #ifdef EDMA3_DEBUG% \+ u( z! D( ~
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
8 y' A5 y8 s, }: h$ A0 C6 B - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
- f8 z+ Y& i7 e2 P - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) `" p4 l$ N5 g2 {
- #else
; L& X6 f# a7 s6 D" e0 T - #define DMA_PRINTK( x... )
* l% D& ?% N' Z - #define DMA_FN_IN' u3 ~5 R( c$ k: J6 H* Y
- #define DMA_FN_OUT$ ]& ?5 n0 j; y
- #endif
% F, S) K; S5 } - ( \5 a, b& Z9 w1 V @
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 v* |$ Y; H; S P7 I - #define STATIC_SHIFT 3
$ D# ~" g4 P+ C - #define TCINTEN_SHIFT 20
9 G8 w; K7 e7 I. g; D0 P - #define ITCINTEN_SHIFT 216 n) k0 K) Z8 [* v" S
- #define TCCHEN_SHIFT 22
% D; ~+ R) X4 J5 u s - #define ITCCHEN_SHIFT 23$ y2 }6 s) V8 a. \3 L1 `5 W
- {" N1 `/ `1 N: @( x
- static volatile int irqraised1 = 0;
8 u* `$ X2 O1 W1 K0 w2 c, o% u - static volatile int irqraised2 = 0;! @! z p$ z4 c7 j
) R# m9 ^1 N) n* k, t- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* q4 L# C: [& s1 [3 ]
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- n( j) f! H7 k3 J# \+ k2 P: g - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: K; k" R' b1 r# J, N6 I0 u/ t5 k
* y5 w9 {$ D1 Q0 P, H/ k) j% d- dma_addr_t dmaphyssrc1 = 0;3 r( l. @* Q0 \0 b! ^
- dma_addr_t dmaphyssrc2 = 0;0 C5 _ m B$ p/ h
- dma_addr_t dmaphysdest1 = 0;& [8 u, S1 b! c- N; J# [! ]! m
- dma_addr_t dmaphysdest2 = 0;' F7 n- j2 L$ P# b, Q5 j& s0 Z9 @" k
# E4 ?8 J. C# V0 }- char *dmabufsrc1 = NULL;' f+ J' g- E% ?6 a" w
- char *dmabufsrc2 = NULL;* y, A! ^1 O1 L' ~
- char *dmabufdest1 = NULL;! Q5 ~& p) K& i) g- w" q$ j- `0 t" }( H
- char *dmabufdest2 = NULL;, O- E2 h. o. T; j& R* u! m
- : y0 r8 X9 [/ v7 y: v
- static int acnt = 512;! S0 y9 ^9 G0 U" f. ^
- static int bcnt = 8;; l9 d& e8 O, ^5 u, ]
- static int ccnt = 8;4 V) y H4 R8 K
! t' |' f" ~9 u K# Y6 H D- module_param(acnt, int, S_IRUGO);
% E6 Y" `, I2 g$ l - module_param(bcnt, int, S_IRUGO);# l6 J0 W' r. K6 `* V4 x
- module_param(ccnt, int, S_IRUGO);
复制代码 2 \; K5 \/ C! C, e7 V, h- K
& X( R0 |; G; U2 p. V 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 C& i% z% ~! F( x, \
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. I; _ o& S( ^) Z/ x( W 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。' \/ H. z* i: T* ~0 @" I
" g8 V3 `. x6 R0 X B! b
% L, n) V3 {5 m" _, ?/ q7 I/ I
|
|