|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 h; H$ C! X9 j7 N, x- [code]EDMA sample test application
' g9 r H* p4 G( U - /*8 J5 x! }- m1 H3 s4 |: p
- * edma_test.c" T m& {: E; S2 H, w) v
- *
7 j1 D2 Y. F) ^4 l8 q6 o! h - * brief EDMA3 Test Application
( Q* d9 E8 D1 l5 \/ \! O - *
% p: L# V6 B3 Q - * This file contains EDMA3 Test code.0 f# v! K7 o4 x! q! r
- *: n# m s8 j/ l/ Y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
" ~0 ?" T/ B0 i3 q8 S4 C - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% R7 F5 M& q. H
- * TO CHANGE.
" {: i3 @( Y6 b! l0 E2 @ - *
1 b' v. y' b' a% ]: Z8 |* A$ l - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 M* w* r' {# A }- G - *
, T4 o6 W. J5 J: ^ - * This program is free software; you can redistribute it and/or
" z: n; q6 Z1 _' I; u8 ~ - * modify it under the terms of the GNU General Public License as
, B# z J$ T$ t# p0 L - * published by the Free Software Foundation version 2.+ m8 \' M0 `; |# f& C1 w" u, ]+ e
- *
$ X E. y; d3 I7 a, }! @ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# d& Q6 k @# V" b - * kind, whether express or implied; without even the implied warranty
+ n) p& i5 U" V: F2 F7 n( s - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" Q9 ]$ R8 x ~1 b6 P- f1 @ - * GNU General Public License for more details.
5 {) q) A i4 g& ~* ?* o1 i* P - */2 v0 Q4 x" z5 I) M3 D
* P2 {# u/ g2 L* x- H0 R- #include <linux/module.h>
: x2 S3 o G8 |# i6 }. l0 ? - #include <linux/init.h>4 S8 R5 U# W. R5 L- [
- #include <linux/errno.h>8 C6 ^4 \" K. ~& H
- #include <linux/types.h>
! M% J6 Y6 g6 E4 l8 h" y, ?: J: E6 q - #include <linux/interrupt.h>
/ `* G, X& ^; W- Y* n, @4 j; E - #include <asm/io.h>9 @: L& v* d3 `$ i( K, H9 X: Q
- #include <linux/moduleparam.h>
8 M" _# H& P! M9 U$ \ - #include <linux/sysctl.h>
6 u2 j9 X3 s4 [( Y i# J& n; ] - #include <linux/mm.h>
. d$ ]2 T' ~4 Y$ t - #include <linux/dma-mapping.h>( Z8 ~2 y# D5 _$ q3 {" o* x& a
7 q% Q, L: n& S' ?$ ^- #include <mach/memory.h>% ~9 x. I0 O4 j( r& Y
- #include <mach/hardware.h>
" q$ f$ R8 Z+ d9 @" N! X. q - #include <mach/irqs.h>
5 I+ x& ~$ w2 I& G- m, n4 n0 D - #include <asm/hardware/edma.h>
4 v. o% C& e4 E. S# O3 \% J( L2 v4 o - * h5 X9 |: y2 F ~8 w$ c7 v% p& F
- #undef EDMA3_DEBUG
+ I- K8 G# Y2 v( s - /*#define EDMA3_DEBUG*/
7 F. x8 M% Q: ?6 U8 s1 b- P& \0 R
: F9 X* c( d; r/ X# \- #ifdef EDMA3_DEBUG9 |- d1 w* k7 A3 b* p% N
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 |% q+ ^$ M' w7 {
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
- l* \4 Y5 j4 |$ b - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
7 I9 @' O4 }- n- | v& J - #else2 O5 G3 A0 E2 R: e- P# Q
- #define DMA_PRINTK( x... )
6 B4 B: f, h6 I0 d8 e - #define DMA_FN_IN9 S0 L# k! Y( Q+ L/ J
- #define DMA_FN_OUT
! F+ d: z8 R! {5 S: T5 e9 V9 w - #endif
" n$ V. w6 E% U) S$ m0 t* w7 O - & f( i% C) E; b7 h) a/ C
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)$ Z; I' i& c/ z7 t1 m
- #define STATIC_SHIFT 3
+ ]+ N4 L" ?) g8 {; ? - #define TCINTEN_SHIFT 20; r) W* Q; Q" H& F' W# W5 Z
- #define ITCINTEN_SHIFT 21
% f$ _) Y4 Q5 k8 `/ @ - #define TCCHEN_SHIFT 22. u- B" |. Y1 y
- #define ITCCHEN_SHIFT 23
% f$ Z! o& S) i - 6 |% @% e5 \; K
- static volatile int irqraised1 = 0;; [+ c* i- ~ `7 _& B/ ~
- static volatile int irqraised2 = 0;
* o F/ G1 @6 P9 N K - $ ?* q9 B, C. `$ c
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 c6 b, I7 P2 W @" N* |
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 y+ J$ ?7 w! T1 R
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 ]+ Q' C- {, c0 |9 O - " @0 ]# E% D* A) }
- dma_addr_t dmaphyssrc1 = 0;
; X$ ?7 B3 ~, I) m. |0 {8 T - dma_addr_t dmaphyssrc2 = 0;
0 T( O5 q K7 e1 T& H4 j - dma_addr_t dmaphysdest1 = 0;! |6 U7 b' v6 S8 X( b, t2 G: m
- dma_addr_t dmaphysdest2 = 0;# X1 \; M+ Q2 r, h9 L# ~
- ! m# M# n. M2 R: l8 a1 r, s0 U
- char *dmabufsrc1 = NULL;. Q* _( w& t# F# u: W
- char *dmabufsrc2 = NULL;
$ {3 }9 h, Z4 {1 g2 U1 _ - char *dmabufdest1 = NULL;3 ?8 `) D' j+ _8 e$ }1 Y
- char *dmabufdest2 = NULL;/ L8 D; z* c ]1 [" S5 `3 @
- 9 ]) I- L! U- U' C# D5 w
- static int acnt = 512;* `% b; z v% `: [; O% Q% j
- static int bcnt = 8;7 C. E9 h7 P4 v& H0 J$ K% J
- static int ccnt = 8;
7 a% E3 C6 W4 \* z - 1 i' z2 l( d V
- module_param(acnt, int, S_IRUGO);
5 }6 f7 A! B4 {) c! d - module_param(bcnt, int, S_IRUGO);
1 p/ A: r: n( z( _6 @4 j8 H - module_param(ccnt, int, S_IRUGO);
复制代码
* }: `1 r6 H5 h/ q* S* j9 \: q7 @# n# i0 V% c3 Z7 M
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用/ _+ T& n+ t, Q& h: k. k7 K( }
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。; n# O- c3 E1 B1 e! x( y4 b1 x0 @
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
8 {- ^4 l, o/ }4 @8 V' ~$ G8 X7 L4 n; r6 b) ~# W3 \# K
; l; I) [+ }. C) j3 I7 g. N [ |
|