|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ c/ ^! Q/ F: D; Y3 k4 _
- [code]EDMA sample test application
, \/ D/ y& u6 j4 b5 H5 B- s - /*
( Q5 s' E J- f/ o, r* |! e6 w - * edma_test.c
$ s) y9 i5 h" F) } - *
5 j, G9 ^ ?) M9 O9 M - * brief EDMA3 Test Application
+ @, }, T- W' N& Y1 ?4 W2 Z1 R1 K9 U - *
! T9 }# B+ v5 _- {( v. {# A% g - * This file contains EDMA3 Test code.# v; u* Y2 C! S) M/ p0 n6 }( {
- *
/ ?3 c% g0 Z+ ?1 q - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE X4 C& f! s5 U4 r
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
! l X# Z9 M, M" _% s% @$ { - * TO CHANGE.- l }9 {' _) l/ e: Y4 D
- *
; Y+ e0 l6 k1 r - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/; X% R' K. @4 ?2 J8 g8 _. Q
- *: p: B! r) v, P1 x
- * This program is free software; you can redistribute it and/or2 d4 o6 r% E _! S) u* Q
- * modify it under the terms of the GNU General Public License as4 S) o! x$ T$ ]6 p ?
- * published by the Free Software Foundation version 2.
9 x U1 H) M& k# N$ i6 k - *5 Z f! D. l. M' W1 {" q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' U; f/ ~- G {( Y - * kind, whether express or implied; without even the implied warranty
: W+ }) U' ^2 P: e - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ b( `. o. ^8 i3 S$ X
- * GNU General Public License for more details.! f: p/ ]0 q' G
- */8 S+ m) c0 ^; R& {( [0 E$ o
2 z: m' l! {' d* u. W- #include <linux/module.h>) c9 B1 |( u* y- h) Z
- #include <linux/init.h>
8 [5 R( Q: j1 }9 v - #include <linux/errno.h>7 h8 x' |0 a; A+ Y% k
- #include <linux/types.h>
; y1 L' Z/ s3 H( S* ? - #include <linux/interrupt.h>
( w9 y) ?8 X3 j9 Y! M ]7 q - #include <asm/io.h>
- k" O5 q* ?* j& v - #include <linux/moduleparam.h>
2 f" r. T$ Z8 b& l8 ~8 M - #include <linux/sysctl.h>
. E: V% Q( S6 j - #include <linux/mm.h>' I. E2 S6 O$ g8 |
- #include <linux/dma-mapping.h>
- E2 M4 n2 D. Q( ?& g) i* c - ( c! ^8 {+ q: l
- #include <mach/memory.h>/ b7 q0 C* l3 E+ @: Q4 N
- #include <mach/hardware.h>
$ s) ]. Z$ z0 V% @* Q - #include <mach/irqs.h>3 L' N* G3 d6 B6 M# {, a2 s
- #include <asm/hardware/edma.h>
- [7 h' W9 l' b- M; A H2 d& d - & H& D+ E% M7 Q
- #undef EDMA3_DEBUG- a2 E F3 S; ]% F
- /*#define EDMA3_DEBUG*/, B1 m% }7 Y" u2 k
9 X0 s7 Y! J$ [2 u0 @8 _- #ifdef EDMA3_DEBUG
: o" e6 Q* c' ]- F; J1 q( j1 `8 E6 G - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 H+ s. p' U' j$ i# |
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). Y% k% S3 T* s6 w: [
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
3 Q" q4 v# w7 u: B. | - #else
# C/ d; ]2 R& ]+ V; F7 s: \8 ] - #define DMA_PRINTK( x... )' R! c* {. _6 m! C2 D8 m S4 m" Z! i
- #define DMA_FN_IN
/ @7 ?" Y* S& K. G3 { - #define DMA_FN_OUT
- Y g& m: o5 r9 X( ? - #endif
% O/ k4 m/ B2 c7 p
% J0 Q5 _9 R! e8 R7 K. R: @3 }- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 h5 u4 P$ e8 T5 a# M4 @ - #define STATIC_SHIFT 3
! b, s3 S( c) g3 V# c+ D3 S" X - #define TCINTEN_SHIFT 204 x$ t. P( c, @5 q
- #define ITCINTEN_SHIFT 217 I! z( E- z1 d# O( T {
- #define TCCHEN_SHIFT 22
! a5 u1 n7 k6 ~/ ]+ G - #define ITCCHEN_SHIFT 23
3 q4 r3 g0 @4 T+ c- J
9 o$ ^+ k3 g* _3 f! Q- static volatile int irqraised1 = 0;; M. c" D4 g* l/ |) V2 W
- static volatile int irqraised2 = 0;) o& p0 M$ z5 ?; l% O
1 M+ d8 l, F: r' Y2 f+ y" p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 Z* h* h; J4 d% d6 R, S
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& `: h; y0 V: T/ y) j& p; i1 v8 J& Q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: b" F$ o1 v8 N5 D1 e/ b/ i, W! h
/ w* Q/ o6 M. B. l- dma_addr_t dmaphyssrc1 = 0;
! P1 [) G0 `1 O# b4 o; ? - dma_addr_t dmaphyssrc2 = 0;
/ o' l8 j( G0 m( m5 }8 G# m+ d - dma_addr_t dmaphysdest1 = 0;. U" B: H q' O+ J9 Q3 B
- dma_addr_t dmaphysdest2 = 0;
+ x9 Z$ ?& J9 `
/ C6 ]0 z: c. Q; S- char *dmabufsrc1 = NULL;
3 K2 Y$ s; u2 D - char *dmabufsrc2 = NULL;
- P+ y0 `8 E0 p* V; v - char *dmabufdest1 = NULL;; d, L d' P( ?) Q# X7 ?) L
- char *dmabufdest2 = NULL;9 Q6 u6 d8 X s7 A
- # e1 _5 S) k% {8 z
- static int acnt = 512;
+ q* {! ~, q) Y6 l - static int bcnt = 8;. H& f) Z8 e) y- ^& S
- static int ccnt = 8;# Y# `& u# W! \+ K) q% O) h
5 [$ O1 k4 s9 e0 O- module_param(acnt, int, S_IRUGO);: a: V5 M/ D$ K& @+ Q6 d
- module_param(bcnt, int, S_IRUGO);, M# P% e8 i$ x; m; @9 l; I! d
- module_param(ccnt, int, S_IRUGO);
复制代码 # }3 K' y; B, z9 ~
# ^3 K: P) y3 J, K7 j3 L, J
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! i7 [: j G- E8 z1 O& Varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
7 A8 { B% ^6 c/ s0 R 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 W3 ?7 a. i( ?# D* r
( {$ b# H0 V- R0 Y- I
8 P3 W( g' e ^: y, u/ h |
|