|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% [7 r& }/ b" q# S$ d& T- M% f- [code]EDMA sample test application
8 _5 ?. ]* f' r/ {$ A - /*8 T! l# ^5 w% k0 W4 A
- * edma_test.c( m1 O+ j$ Q2 Q% r6 F y/ ?3 i
- *
5 |) i! Q% O B* Q8 ?" _6 z8 J - * brief EDMA3 Test Application" l& S& l8 D% a
- *
/ ?4 p3 Q; G4 G V/ Y; o - * This file contains EDMA3 Test code.
& k, S4 L3 r% e: K9 c - *2 r* q/ J. m2 L" X
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
" h# J# D3 w! A4 q: u! H9 I - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
; Z( ~; c/ J" A. J5 Z7 t* m6 X4 X# O - * TO CHANGE.2 k+ f& ~5 F! N' q5 @; R
- *' i x# `% C4 g3 }
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 A4 P! g* y3 i9 }* m+ Y - *
- ?4 o* |8 H$ o - * This program is free software; you can redistribute it and/or6 G' u7 X9 Q/ { V$ e
- * modify it under the terms of the GNU General Public License as
0 ] D/ \2 S% R. _ - * published by the Free Software Foundation version 2.
4 l9 S5 G6 u8 m' t& J - *
4 U2 ?, v! s3 ~! T6 E: \& N+ e& z8 N - * This program is distributed "as is" WITHOUT ANY WARRANTY of any" r6 `' {! C K8 o
- * kind, whether express or implied; without even the implied warranty
* n$ m ]/ [; y* e- _1 Y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- D" P4 v, u8 m6 F" _
- * GNU General Public License for more details.% a& V& E# N& \7 h* u
- */
$ b2 h( ~- L. `- r# { - $ K; T4 ?3 l3 I
- #include <linux/module.h>! ]1 \, v/ V4 v* [: i6 j
- #include <linux/init.h>9 N, F# @. I! P0 C S
- #include <linux/errno.h>; l3 E7 B9 w$ z7 a, I
- #include <linux/types.h>
% x( s, {: e$ c$ f6 S - #include <linux/interrupt.h>
- Z) g' K8 D2 s2 M - #include <asm/io.h>
$ I7 n% ~& |6 p* U* W& A; t8 W - #include <linux/moduleparam.h>
' Y8 y& n5 ]9 m% O - #include <linux/sysctl.h>7 u" {9 }9 R u% `9 \
- #include <linux/mm.h>
+ L: x( h$ h% a' ]2 D& D$ U# j - #include <linux/dma-mapping.h>1 f8 K Y2 j! \ @/ n: z
- 5 W! {# ~0 C$ B% a
- #include <mach/memory.h>
* R$ g( o3 c! S1 e* O - #include <mach/hardware.h>
* y1 Q* a) G. J" M. r6 K( M - #include <mach/irqs.h>
+ D0 s- b8 T: |& g: o - #include <asm/hardware/edma.h>$ F0 k" A- r$ G6 r( T8 t3 O
( @3 D i4 A5 V7 w- #undef EDMA3_DEBUG
& Q* ^ E+ V% o8 R4 h9 Z5 C* k( T - /*#define EDMA3_DEBUG*/0 X$ p& B# i0 d( m7 W
- i1 z4 l# B: z* U) f
- #ifdef EDMA3_DEBUG4 T1 l* e# @- W/ N0 H! Y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)4 z3 \, F: F" ?# y1 Q4 J. z
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). ^/ b$ D6 u+ M& y1 q0 a0 Q
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* j# j. f3 P- F- ?" g& h - #else9 @3 F0 h" O" A* L0 [6 O
- #define DMA_PRINTK( x... )
% K' e! y& j0 ?0 u) x" }. z - #define DMA_FN_IN6 J% d0 H( s( j1 l* e- a% A& V3 g. @
- #define DMA_FN_OUT
, s o' v! H, q# G - #endif& v. ]* ` s, y" g0 N& R
- " r9 D2 J5 ?! \
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)) h, w. F' ^. \" _
- #define STATIC_SHIFT 31 D5 t7 J0 ^. ?" `) L5 D8 x
- #define TCINTEN_SHIFT 201 m( q# v' P0 x0 {, w" S
- #define ITCINTEN_SHIFT 21
) X- i" x0 V+ U b - #define TCCHEN_SHIFT 225 X) _: O; n+ {1 _. y4 O
- #define ITCCHEN_SHIFT 237 A( E5 K9 ~5 r' i6 G8 ~/ t5 |9 |
- + M; E$ z0 Q, i0 q0 m' u/ j, N
- static volatile int irqraised1 = 0;3 r) ] w. b3 C1 D- ]7 j
- static volatile int irqraised2 = 0;
* J& _5 _" c, X) R2 H6 v l
( b, w; w9 d* r# f9 c6 e) v- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- q- }% E% K: _) C; ~+ ?/ l1 J( V, M - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 o/ `/ \, R+ H9 C: n
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);+ O/ z) o, O1 i7 s
2 A8 P8 U( a+ o" X( R- dma_addr_t dmaphyssrc1 = 0;9 b6 `( Q0 ? z9 F
- dma_addr_t dmaphyssrc2 = 0;
% Y; ~$ O' X A% J2 u5 y: L - dma_addr_t dmaphysdest1 = 0;. [9 W- H" l: G6 Q' F
- dma_addr_t dmaphysdest2 = 0;
. M/ \1 B, n v8 v3 J1 C. o - 1 ~( N& Y8 N8 G, [; u
- char *dmabufsrc1 = NULL;6 I. f5 P% m) Z
- char *dmabufsrc2 = NULL;
$ n; w( H+ v+ _- I - char *dmabufdest1 = NULL;- @. n0 }+ r' X+ p$ l4 p$ L' a
- char *dmabufdest2 = NULL; N3 y9 U. T( L
1 @. M I6 X' G- static int acnt = 512;
- C: t+ | @. N0 o! U' W - static int bcnt = 8;1 d" j3 y" m+ v$ I0 D: B8 a& H; J
- static int ccnt = 8;
3 r9 j: d% _0 J; z - % x* p p4 [8 }0 H& t9 u
- module_param(acnt, int, S_IRUGO);
: p3 L& t" R2 o" H A7 N - module_param(bcnt, int, S_IRUGO);3 V9 q% U* i1 }( u' X: a; t
- module_param(ccnt, int, S_IRUGO);
复制代码
8 Q0 m Y8 }5 z% S; D7 ?& d4 y+ g8 I; q# B3 ^
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: N0 e. a7 g8 U6 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( l6 h$ A5 T4 d7 I 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 F0 U* ?( h) b! W
$ I* q' h' G3 J* Y
' u0 }' Z: {, i) W3 P" d |
|