|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
/ f* v" s C' M: Z- [code]EDMA sample test application/ J4 @/ q4 Y1 w5 T! }
- /*
, O5 U8 ?) a3 L( B G - * edma_test.c
( p% v+ i. V) [! E - *, Q U) g: z& w* v4 G+ |3 t
- * brief EDMA3 Test Application
* ]! U; W0 J, R. w# v: U/ R4 G - *+ f. |, ]: d' o
- * This file contains EDMA3 Test code.& f, x9 Z G( v2 }
- *
" v/ C" q# q7 d' i9 g9 F - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE, [% a" Z2 }9 \* I0 h$ y9 {; P
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. d- w% t0 _) B5 y4 x! R
- * TO CHANGE.3 O, j+ M( I [
- *0 N* [* `: t' m; G7 q, P+ f# }
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
, [3 ~$ P! q1 n" Z5 e5 N! R0 R - *
' Q a- |# ~$ b$ u - * This program is free software; you can redistribute it and/or
2 Y' l$ ?! T0 `1 K4 h- j - * modify it under the terms of the GNU General Public License as
& \0 P' |& J* Y: V - * published by the Free Software Foundation version 2.6 |0 K2 N( v; b- k. C; r- r2 T
- *+ i- [3 |3 z% Y* K, X
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
0 f. E0 v' @% ^" b! q& y1 P - * kind, whether express or implied; without even the implied warranty! m6 p+ w* X1 R; m ^1 B
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 y1 p. n0 B6 }- z9 c5 o5 k6 I - * GNU General Public License for more details.2 O8 j0 m4 v! v1 _8 x6 v
- */! Z5 ]$ F) Y: Y
- ( z) }+ o/ E$ O% g' A6 m
- #include <linux/module.h>
: V2 M' h5 w+ O, a - #include <linux/init.h>2 Y5 q. W; a* p1 Y0 q7 ^
- #include <linux/errno.h>
' }0 K* Z1 A B; G0 O" ~- G& q - #include <linux/types.h>
6 \) j# U- V" B - #include <linux/interrupt.h>
* d' o+ l/ X! A. k; h9 V* p - #include <asm/io.h>
) d0 B) X# v( T# C9 k7 T - #include <linux/moduleparam.h>4 D6 U0 A4 M+ _: p' k
- #include <linux/sysctl.h>+ C; B' e3 H. C1 i5 G( M- z
- #include <linux/mm.h>, o) a1 S6 _0 N! T% ^1 B4 d+ U
- #include <linux/dma-mapping.h>
' }- @6 U. D* i4 T. r) Q5 _ - E: J4 b9 z' E. a
- #include <mach/memory.h>
" o' K/ Y4 c# Y3 q4 G - #include <mach/hardware.h>
6 K9 T: K* u1 t; Y: F$ x% x4 G - #include <mach/irqs.h>
) J% a) y4 r3 V2 R+ S' l - #include <asm/hardware/edma.h>
$ J: g Z9 O' z |! Z% g6 p# P+ I - $ v- {+ g" t5 ]4 L1 |5 Y! z* s3 D
- #undef EDMA3_DEBUG$ U# G/ q1 W* k. ~, E
- /*#define EDMA3_DEBUG*/
5 J( Y5 Q6 ?8 a+ N - % r5 ?" Q1 ?3 E" M2 h
- #ifdef EDMA3_DEBUG x( `+ f( d |( z8 n' q6 y& t
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 N6 p' ^, ~1 ~" A" Q0 z" x
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
+ u/ G/ ]( O8 X: }9 d - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
" r/ a- j8 ^8 w0 p# E* D - #else
8 @. j, z, Z( @ X z - #define DMA_PRINTK( x... )
& K1 M- M5 x# p- z) C1 G - #define DMA_FN_IN
" X6 s* O3 b% {8 k) } - #define DMA_FN_OUT% a/ f+ h+ I/ B$ k
- #endif) T; ]6 A- C$ \
4 T: C% w- l7 |) g* v9 Y" ]8 O3 {- #define MAX_DMA_TRANSFER_IN_BYTES (32768): X, q( H7 T9 v! r, P/ L1 Z
- #define STATIC_SHIFT 3
6 o4 Q& M; Y3 r - #define TCINTEN_SHIFT 20) \% V; b3 x g+ z$ _
- #define ITCINTEN_SHIFT 21( m# j- H3 s3 U; F8 M
- #define TCCHEN_SHIFT 22 E: \" M* i5 ?$ w( e1 U
- #define ITCCHEN_SHIFT 237 {5 f( @, h1 ^: v* _# i4 f: q
- 4 x9 Z/ |- c2 |$ A$ J+ U7 ?
- static volatile int irqraised1 = 0;
+ a. Z, ^% b8 S9 k1 s - static volatile int irqraised2 = 0;
9 ]& Z( b N( B9 F
' @1 Z' F! o2 C; [8 `- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- v, H0 r+ \; s; T. M6 s
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 k$ i0 K; y3 v( w
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- |; l2 p, z" N1 @
" n* {, _& r! e& D; F: a9 q- dma_addr_t dmaphyssrc1 = 0;1 q/ m9 \0 V3 ^; k7 c' z8 u; W
- dma_addr_t dmaphyssrc2 = 0;
- |0 q: R- \8 A3 f6 o' s - dma_addr_t dmaphysdest1 = 0;
. {7 v+ `8 ~; m# F! H+ Q/ o, \ - dma_addr_t dmaphysdest2 = 0;; y2 u: T7 L0 J6 x+ r P: P5 J
- ) c; T$ _3 i* N; t& V Z
- char *dmabufsrc1 = NULL;7 g6 ?' c7 w( F1 D
- char *dmabufsrc2 = NULL;
4 s- @3 E# X+ ?' O2 Q - char *dmabufdest1 = NULL;
$ C% z0 B# L; A/ v1 W" H# f - char *dmabufdest2 = NULL;( R" X& B) R( F8 X! J" [
- & f7 z5 _4 T* F9 X9 k
- static int acnt = 512;
7 I) H4 E% a# T - static int bcnt = 8;. k+ f! h0 F5 I9 r+ `3 C+ J+ ?( N+ B9 [5 O
- static int ccnt = 8;% b2 `1 o$ Z1 o" p
- ! E4 G/ ?0 a7 S- M- _/ Q
- module_param(acnt, int, S_IRUGO);. y* P! \2 z% _' n& X: z4 B
- module_param(bcnt, int, S_IRUGO);
6 \$ g8 K# c9 b& W7 K" q - module_param(ccnt, int, S_IRUGO);
复制代码
9 B' o. z: {( I2 D' u1 }' e0 w( ]
" t# k7 _0 d9 { 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用4 n+ k1 d& l& z2 E3 X( j# Z! {
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
/ l1 U+ i/ a& F3 t" n' Q+ d 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。$ s5 I- w& O0 J% }, S; m2 b* Z; D# m
( j8 T$ b1 F2 u2 _8 Q
- b( K5 X; Y4 G" c1 h |
|