|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
2 Q! L/ k5 @8 ^! W+ |7 s: k- [code]EDMA sample test application0 o% B# }; n5 _; J
- /*! M, K. A7 l1 |/ U$ r, n1 G
- * edma_test.c8 }1 A; r) K7 |; v: c
- *0 f9 Z% y8 U9 S# ^
- * brief EDMA3 Test Application
6 `# X# Y6 |% n: l2 P2 v1 p - *) J* U6 O% ?: H9 [* x% O
- * This file contains EDMA3 Test code., H1 W, H; k' R5 u5 s0 y
- *
' |' ^; A) X0 n! U, O; i - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE8 c# `/ e% a$ g9 { j! L! M( n
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: x3 \2 E1 s, _7 ] - * TO CHANGE.! `8 P# M4 W- m8 _/ }" P' M9 z
- *
8 X! l5 ~$ [; I8 @9 ? - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/( R' v- `6 q' K, N k8 {" p3 E
- *
8 C1 M( r' v* c, T/ v - * This program is free software; you can redistribute it and/or
+ o2 ?+ Y, x( [1 [0 f - * modify it under the terms of the GNU General Public License as
6 n: j/ M5 Y/ o. z, [% |! v/ s - * published by the Free Software Foundation version 2.) d6 a* U: o# f% z+ u
- ** X, X7 K1 ], F( F* S( K( v5 k
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any; R" r: V, H1 F' X2 S
- * kind, whether express or implied; without even the implied warranty
1 `: ?$ c& r/ K4 G4 R, x - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
, U8 y. p+ @( H1 d7 T - * GNU General Public License for more details.0 J: W8 R' s& t/ d$ j5 {8 d
- */& S0 [7 B1 ^( T2 s& r
% b F8 o" a' \2 K2 G+ H* i9 b, G- #include <linux/module.h>: i- V7 x0 y9 d) ~# [' A5 ~3 w
- #include <linux/init.h>
5 W. [9 }, N: @. _6 Y - #include <linux/errno.h>2 a9 T& o0 g5 [" q# m7 t
- #include <linux/types.h>
2 }" E) {3 u$ V) l) s# d V9 M - #include <linux/interrupt.h>
9 G' H# Y6 u2 b1 h5 M4 q - #include <asm/io.h>$ g4 F. O1 \' X+ ?6 B7 e" x
- #include <linux/moduleparam.h>
9 }! K) b; F) S E7 E3 S - #include <linux/sysctl.h>" t. E0 S2 p q0 v6 ^
- #include <linux/mm.h>
: w ~ o+ e" r: `8 v - #include <linux/dma-mapping.h>
' K3 B0 N$ E6 [% \) l: G7 F7 G
, \/ @/ L; h ]& I) G- #include <mach/memory.h>
- M& _9 J; x1 L `) k$ Z6 X; h& L$ m1 H - #include <mach/hardware.h>9 H% E# L7 \* V! S7 l/ v; |
- #include <mach/irqs.h>
$ q4 e3 Y2 y& C# K7 C( V( N - #include <asm/hardware/edma.h>% V% N, C' v4 K" [9 e
; L5 E3 K4 z; D- d- #undef EDMA3_DEBUG
5 K" S! g* E% z6 U2 ]4 m/ A. o - /*#define EDMA3_DEBUG*/4 B- x/ ~% e' }+ ]: T% J
D' c j z2 l, `8 {# c- #ifdef EDMA3_DEBUG6 {6 a$ C) T# q3 z7 i: ^* k
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)/ ]# {& B( @2 w. q- \0 R, ]
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)6 o5 y# V. @" ^7 h0 ]! M3 O
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
$ s& {) N6 V1 y) O b' H - #else
$ a0 H2 n2 L4 B8 [* f - #define DMA_PRINTK( x... )+ T! C+ s: A: ]" }: y$ x B8 c' B
- #define DMA_FN_IN
/ @; J& ?4 o/ z) C - #define DMA_FN_OUT" C, P# v) s; x2 Q. v7 F
- #endif
6 d7 v$ Y. a1 T* [( A; N
' O3 K$ g0 j" H# ~. X( k7 x: a- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* P7 o. o: n! @& k
- #define STATIC_SHIFT 3
! g( C' c! P0 x( B - #define TCINTEN_SHIFT 20
9 |& H9 D% n% T8 F5 f3 G5 [ - #define ITCINTEN_SHIFT 21
$ x) k D" r( }& T: ? - #define TCCHEN_SHIFT 22
; u" d" e7 @& i/ Z7 M' i - #define ITCCHEN_SHIFT 237 @$ y# b. k) }; H
4 s- [. R+ C+ x8 [. q- static volatile int irqraised1 = 0;
8 H0 x- \+ J) ^8 z+ y# H - static volatile int irqraised2 = 0;$ c' M/ |2 Y6 `, I7 k& l
- 2 D' R! D9 ?$ T1 N. S$ |
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 ~* ]! I. z1 S" H, Q - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); q" A$ \1 D) [" B. L
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) o9 Z ]5 v) v. {8 K- S, U
8 b! F) @5 X6 q% a- R- dma_addr_t dmaphyssrc1 = 0;
/ q2 O# D4 F- Q, x - dma_addr_t dmaphyssrc2 = 0;
6 Y) r9 V, z1 N8 u - dma_addr_t dmaphysdest1 = 0;
. Q+ G- Q' a' I5 A* d! X3 S# k - dma_addr_t dmaphysdest2 = 0;
4 d. v' L; ]0 e6 m8 a3 P
6 u; K" f, W6 C$ k1 v- char *dmabufsrc1 = NULL;9 K; k% s4 r9 H1 P' b8 I
- char *dmabufsrc2 = NULL;
7 i; X; H! d+ V0 \ - char *dmabufdest1 = NULL;" F/ J. {3 S, |* x: W
- char *dmabufdest2 = NULL;4 @: a1 Z$ K; j: r/ V3 P
6 T; }+ _7 U: |+ w8 `- static int acnt = 512;& B% F$ a4 `: Q+ d' [
- static int bcnt = 8;2 O1 y4 j% r& I- N
- static int ccnt = 8;
2 F) N$ [$ q/ w. o2 B4 u
h0 {6 U. ^$ d" S. ~- module_param(acnt, int, S_IRUGO);. S, y5 T7 i* H6 v
- module_param(bcnt, int, S_IRUGO);# i6 |3 E4 C4 ]- X. K& _
- module_param(ccnt, int, S_IRUGO);
复制代码
2 H; p. i! W" k: m8 o9 A$ ^. w. ^( O" P: _! U9 W8 o3 G( O+ S- O
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用. \4 K" L8 @0 V; d
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# `$ a% C: W5 l/ Q
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。# F8 K; X* g; v0 q I9 p
6 _0 T, N' a. @
9 B7 T3 x9 }% b8 g |
|