|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
0 e6 ^: _. h/ d: K7 A+ ]2 v- [code]EDMA sample test application
) v4 P; }$ @) b( y - /*
+ q X1 c3 t n% p7 l6 c - * edma_test.c5 f: Y& W) m: p. z1 G# j2 x' E9 i
- *
d! J2 C$ W/ x3 K" \& f8 W& x - * brief EDMA3 Test Application
8 \" ?4 `. I' p. f2 {* g9 q - *- |; D$ [; H! w
- * This file contains EDMA3 Test code.8 B; z' q4 H% d
- *
& H% I2 d7 n" i! a R* N% s e/ { - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
: `* }: G/ b; v7 o- g3 a O2 X - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
3 U Y9 ?5 {/ V/ c* G - * TO CHANGE.
9 p$ J5 }/ L2 P! W - * o/ L S$ u" H! v9 a( [7 P
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/1 a- w, C! n K: u b' S+ K
- *
" t# `# ^5 A! q( h- P, G - * This program is free software; you can redistribute it and/or! A2 P- p4 F! z8 r
- * modify it under the terms of the GNU General Public License as" e7 |' |% j) j7 e9 O1 _
- * published by the Free Software Foundation version 2.% w. `0 t9 e# j* S, ^
- *+ r) p: Z' V, f. x
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 z1 J* _0 F+ E* [* \ - * kind, whether express or implied; without even the implied warranty2 K1 t2 U( C2 R& ~* D# d# a: _
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 l4 ?& \5 i; e9 k% i8 F, v
- * GNU General Public License for more details.
, P0 L& }% R. d5 a$ t% U - */
0 h* U4 J% g/ }) D: a, m
+ D# [0 d$ x2 n; C$ `! G4 Z. v: H( i- #include <linux/module.h>
4 T) Y% s2 _* C - #include <linux/init.h>2 y% w, a6 E+ e; S
- #include <linux/errno.h># U8 {/ r# v$ V4 e/ a4 X5 P
- #include <linux/types.h>
6 N: {; q' W/ R, w. p - #include <linux/interrupt.h>
. B& ~; \1 S2 k" _/ C - #include <asm/io.h>
6 E# b; c8 M8 d - #include <linux/moduleparam.h>
0 C1 V5 U' C, I s9 U! O* ` - #include <linux/sysctl.h>$ N5 h* f8 o% D3 W7 T' M/ B
- #include <linux/mm.h>
$ q8 [! }. P$ M$ i0 |7 ^' [# s# x6 D - #include <linux/dma-mapping.h>& Q1 k6 F. H/ f$ n- x
- ' o! ]" F1 M, B9 r: s6 t
- #include <mach/memory.h>- r% Q& C. i8 p( G( Z/ u" L
- #include <mach/hardware.h>
7 [; x$ j, q% g: X) G& Q - #include <mach/irqs.h>9 H. z, w6 d/ O9 [8 V) \. b: N
- #include <asm/hardware/edma.h>! S& w! Q( f) f
- 0 v) n" x1 Z( W, j2 W8 I
- #undef EDMA3_DEBUG
# D8 K2 B7 r8 b, O) X8 d - /*#define EDMA3_DEBUG*/( O7 {; U, M/ n% @% C; V- [
- % l* G+ y' b' G% a9 r
- #ifdef EDMA3_DEBUG
2 |" G- X% R6 p0 }6 k& v - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
' c, C1 X1 V2 x - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)" r$ S- M. m" C9 x
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)3 D: @7 l/ g/ u3 x
- #else6 L5 A5 R' g( _+ i2 U _
- #define DMA_PRINTK( x... )
( U- q7 g# _& X+ W" v I: l& u# T - #define DMA_FN_IN
2 Q$ c8 F, o% m7 E( ] - #define DMA_FN_OUT3 ^8 y' W# b+ Y. ]; g' C
- #endif
% H" y8 M) }! m! G6 ]( w
8 B5 y) u a# h+ m; P- #define MAX_DMA_TRANSFER_IN_BYTES (32768)9 X' a( J5 q, R$ v8 R+ W
- #define STATIC_SHIFT 3. M$ {9 D( I& Y4 |% u
- #define TCINTEN_SHIFT 20
& R$ Y3 Q2 j9 D2 D% q( h - #define ITCINTEN_SHIFT 21
/ W0 B4 o2 S i0 L; U# }* g9 T - #define TCCHEN_SHIFT 22
3 X3 O1 Z$ }8 J8 j - #define ITCCHEN_SHIFT 23
- J* a$ ~4 N% L) l. z
+ ^* B& I, q2 w3 e- static volatile int irqraised1 = 0;
" T# o9 Q: X+ V) z- j( h# p7 C# t3 x - static volatile int irqraised2 = 0;+ E& s* }% ~# h& ?8 r7 V# ?9 }, P8 e
- & }+ V8 ^. a) T. r" X& x
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 a& x6 N$ \" i2 B" c+ `1 e4 R - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 _ `( S3 J$ z0 U5 |/ T
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) ~- J& |. `% [/ j3 N F7 B - 7 `3 e+ W* d Z4 Q) |2 j0 v
- dma_addr_t dmaphyssrc1 = 0;! A& |7 C" N2 K" H0 ~5 Z. d
- dma_addr_t dmaphyssrc2 = 0;( k- ?: k4 d2 N/ A; ~
- dma_addr_t dmaphysdest1 = 0;
- C: U: K* q0 Z% R - dma_addr_t dmaphysdest2 = 0;
4 S0 \# n0 X; g: A. G - " ]3 m D% \- E6 e' ]
- char *dmabufsrc1 = NULL;0 n; ], ], M7 ]% Q2 G- ?; \1 S- g& e
- char *dmabufsrc2 = NULL;
/ x; ?! |" b- H - char *dmabufdest1 = NULL;
+ U- Y3 Q2 B, ]: e/ ^* D: N1 K1 ?0 ` - char *dmabufdest2 = NULL;3 I% A4 G! e% E4 G8 w
0 t* f" ?6 t& X: q' t) m& i# c- static int acnt = 512;2 A6 |* W9 [9 H9 G2 h1 G
- static int bcnt = 8;
8 g: M, ?' y% E - static int ccnt = 8;
X. D! [+ [# \ - / b* `% Q( h( s
- module_param(acnt, int, S_IRUGO);
9 h0 h# ?$ |- ~. K - module_param(bcnt, int, S_IRUGO);: f- b7 n ]; @0 l+ D/ q
- module_param(ccnt, int, S_IRUGO);
复制代码
/ A. r* p7 q8 y/ k! ]4 G7 @
! p; w. J* ^3 U, R3 ?9 A 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用 p3 s1 _8 h2 M9 q9 w7 u
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
+ K; X5 Y* I* g1 z 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; L3 P$ c1 m8 C1 x1 ~' I c
* G8 T' x: ^# i8 A3 B1 S7 N( y# O6 z/ z2 s
|
|