|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! C ~8 j% z, s, w7 @
- [code]EDMA sample test application! B2 I; X2 n2 E, n0 w! H
- /*
# S" p( \+ r+ u7 \& j! ~' \9 w - * edma_test.c
& f% J- D/ I* q% u- g - *
# _5 Z7 o u T+ h9 k- m6 x( I4 O" R$ ^ - * brief EDMA3 Test Application
~' Z2 U/ T. Z. _ - *
: B: l7 R d { M6 C - * This file contains EDMA3 Test code.
# [+ u% \2 V1 M) E - *& g5 f6 j0 M U- g
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
4 q0 q z1 w6 d* Y - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% m& f& I- w& C; H% v - * TO CHANGE.7 T0 D( x1 h9 C* b1 b
- *2 D, D* q! z5 ?0 N& v3 T$ f
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 o- ^: _, O- _
- *2 ]) [& T4 D1 [7 i0 _
- * This program is free software; you can redistribute it and/or" R1 [7 `2 r; g+ V
- * modify it under the terms of the GNU General Public License as" V, |' \4 A1 @3 o' t
- * published by the Free Software Foundation version 2.7 c5 _; c( U, P- t* F- Z* ^
- *
5 y, J4 `# `/ \; A3 h - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 U" @: I1 l6 z& q; `$ D4 ~ - * kind, whether express or implied; without even the implied warranty: |: ]2 T$ J2 Y/ @: g0 {6 O! @& `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 u8 S2 f2 a2 b - * GNU General Public License for more details.- _+ E) x2 d# Q' _
- */
$ d; X# q0 ^% o* q) _2 S - " X! |- ]' v" m- H" x
- #include <linux/module.h>8 F/ Y8 Y& b3 O; F4 u# s8 `4 o6 t
- #include <linux/init.h>8 w: ^! R# s% K" y2 E4 q8 \
- #include <linux/errno.h> l+ Y0 V8 _: N" L
- #include <linux/types.h>1 x! ] B& \' |+ m$ O
- #include <linux/interrupt.h>
8 H. C6 b: `8 {! Y. s1 @7 W - #include <asm/io.h>
6 o" J P. i/ F& ` - #include <linux/moduleparam.h>4 `$ O& k+ l) a' [4 Q! }# T! [
- #include <linux/sysctl.h>
9 G3 P; B( }0 x3 K - #include <linux/mm.h>
3 \( t* q; T# H2 h - #include <linux/dma-mapping.h>
9 p% t; e% D9 l% @, E& K' l
! ^# \# K. A1 p; ^, h9 o8 I- #include <mach/memory.h>7 ^- g6 U+ ?( M2 m6 `
- #include <mach/hardware.h># o0 P4 t9 s& ^: s
- #include <mach/irqs.h>3 y: l7 K8 H$ X
- #include <asm/hardware/edma.h>: _/ T5 C( p% }, m
& F: V3 L& J1 a- #undef EDMA3_DEBUG
4 K& t. W: e1 ^ - /*#define EDMA3_DEBUG*/+ n6 r' u0 v7 {* a8 g; V1 u. l
- 4 b' S; a. k8 p
- #ifdef EDMA3_DEBUG& ?5 _7 E+ N- ?' G) R* h# a
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 B7 [; y. w" ]% A `& @
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
* T; g- t$ C; B. z+ m9 C \+ b6 y - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
9 o( L% V, A% G5 Z% w" U/ C - #else9 G# O# d% K# j' a
- #define DMA_PRINTK( x... )- s2 T6 a& f! H- r6 y$ B5 L6 k
- #define DMA_FN_IN
( a I. z8 p7 Z# X - #define DMA_FN_OUT
0 Y& w8 G+ i2 v( \# W$ }$ F; c - #endif+ S/ i5 J! n4 m# G* K
- 4 T/ h% {4 |: M) M1 E
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
* _" z( N L1 b: Y - #define STATIC_SHIFT 3
1 d0 |6 p8 H( O. H" D. ]: L - #define TCINTEN_SHIFT 20
6 A! F$ h$ q1 r5 ~; ?, t! L - #define ITCINTEN_SHIFT 21: S! I4 w4 c/ A8 [" ?2 i
- #define TCCHEN_SHIFT 222 S/ b0 U8 ^6 o& g6 t5 i; o
- #define ITCCHEN_SHIFT 23 S2 \1 ]- u V9 @/ C$ B1 C
$ a8 K$ V' @+ [9 O4 \8 U. N- static volatile int irqraised1 = 0;( V1 T4 e9 [ Y1 ^+ y0 v1 j) W+ V
- static volatile int irqraised2 = 0;' e4 a9 }& u* ?* a- a( h
' a9 o$ W* _6 k- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 I" R: Q' W" e0 ?
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 q: A3 V+ @& p1 m. j9 M+ q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( g1 z0 X0 t ~2 \; o
- ' I, r0 d6 _+ k. b* k0 [" r: c
- dma_addr_t dmaphyssrc1 = 0;
: E5 O* x2 y) }3 E$ e - dma_addr_t dmaphyssrc2 = 0;
* M$ D5 A, P- B% ^6 D5 _ - dma_addr_t dmaphysdest1 = 0;
/ X) q% \+ E- f3 Q+ ? - dma_addr_t dmaphysdest2 = 0;
6 N; L( b# E% }, E' ? - 4 R. n F4 h& p5 c8 E( G
- char *dmabufsrc1 = NULL;
4 Y) D5 r& [( E: E - char *dmabufsrc2 = NULL;. U; Z, b7 o! ?" y. X& O/ V. O; d0 f
- char *dmabufdest1 = NULL;
1 y, O) U1 Z1 q. l9 P+ c - char *dmabufdest2 = NULL;
1 V. ^3 `" R7 R - 8 x5 ?. w9 E6 y1 E" M; v. [
- static int acnt = 512;
+ y) _* \; d: u! @ - static int bcnt = 8;1 k2 v# ~ k7 U! F& C# j7 f
- static int ccnt = 8;
: Z: a9 f3 T% \2 _5 L
2 D Q& p2 J: | b- module_param(acnt, int, S_IRUGO);
( h7 N4 D4 ?% s1 A9 p5 S( {4 G - module_param(bcnt, int, S_IRUGO);
% b# V* h4 I4 {: ]& m8 N% l0 J$ Y8 B - module_param(ccnt, int, S_IRUGO);
复制代码
/ c- l5 t1 @2 _! T" ?
+ ]0 U5 {( @, l& v7 G7 `: T7 H 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用! I& S' C. J, \- p! J5 _( J: H
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
& |5 ]. Q" R0 @3 S 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。" S. s5 a, Q# y1 i, a7 u- s& |% m5 O* k
7 I2 F, w9 J* B- e5 |- P% _. o7 H; z' L" Z6 ^; v/ b3 l
|
|