|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : o3 e/ I, E+ D* w( I
- [code]EDMA sample test application
8 Q1 _9 Z- U/ V- l( t7 h) g - /*
' x8 z5 i. [& D1 M# v: {/ I - * edma_test.c& W) w9 E H/ H8 d
- *0 [4 N5 \$ H ^+ @
- * brief EDMA3 Test Application7 ?( { _8 D" ]7 w# w
- *" O& v! Y6 Y6 J4 @
- * This file contains EDMA3 Test code.
/ j- s ?& c2 j& _3 @ - *9 l" N& n0 r2 d* u$ p4 p9 H! Y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( ~' Y3 l4 S8 q# v' r - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT* ?4 I7 K+ E2 V. @: v
- * TO CHANGE.0 n( w9 T7 w& y% @
- *
) V) Y# X, n" X5 m5 k1 L - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/0 v1 `9 W! X% Z) k( i
- *! F5 M5 c5 A8 N
- * This program is free software; you can redistribute it and/or
9 t$ e5 Z. i' d3 D4 F - * modify it under the terms of the GNU General Public License as3 p0 E. g) [+ b& i4 w' x% [
- * published by the Free Software Foundation version 2.
7 K/ _$ S# m$ S! t - *5 G/ U0 Q1 ^! y
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ U" b0 ~- q) M4 B: M4 Q
- * kind, whether express or implied; without even the implied warranty
% [" Q3 C1 d5 s2 |+ T - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# Y' i. r3 f7 a0 H2 m3 q3 t
- * GNU General Public License for more details.- @/ h4 t1 [% B
- */
% F* T2 T* `) O+ M/ Q) h8 j1 @" e - 9 |* A: i5 j1 q! _- u7 F+ i! z
- #include <linux/module.h>
. E: z1 C. @! m) { - #include <linux/init.h>
0 `/ x7 x' M8 K; j6 [% t - #include <linux/errno.h>
) z" k& S3 v/ F. b, X( m - #include <linux/types.h>3 W) \9 `( A; c+ N( K) v- a; g
- #include <linux/interrupt.h>
8 R) E' z; B8 W2 ~ - #include <asm/io.h>
: o3 N- N* ~2 K2 Y7 J, l - #include <linux/moduleparam.h>
& `8 i" }1 h, P - #include <linux/sysctl.h>8 c% F$ o% p3 C3 g1 o; ^
- #include <linux/mm.h>
* Z6 T/ _% j% J - #include <linux/dma-mapping.h>
) D( C4 d' b, F! A
/ u: w6 k& y8 ^ p1 f7 e) \- #include <mach/memory.h>
6 M( v, V+ g9 K2 {/ o5 c$ b$ v) e - #include <mach/hardware.h>
* U# i- `6 H/ O. t, y% [2 L/ r - #include <mach/irqs.h>1 o8 K. X+ Z. ~' A7 ^3 F5 a/ D3 k
- #include <asm/hardware/edma.h>7 ~, p Z/ p3 ]; h
) I. I! u* v5 m- #undef EDMA3_DEBUG, w: k9 n8 @" R
- /*#define EDMA3_DEBUG*/
$ b- H1 U0 D! Y( E$ N! u - $ @5 o" e% z6 s/ t
- #ifdef EDMA3_DEBUG
1 Z& v( k; N# n8 x6 `& f- i - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
, A& q T: B+ r0 w" J. B - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)5 `9 b1 T2 Q" S
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)2 q1 {9 K; I8 s2 a
- #else
0 A* ^8 h9 m4 a7 @ - #define DMA_PRINTK( x... )5 f! w6 V& H" v5 B' I
- #define DMA_FN_IN
7 T) Y# K& L5 n! |1 Q. p - #define DMA_FN_OUT
: v8 ?! X4 w% w" C" c - #endif& r; P/ D1 _2 Q2 @: m8 h
; H9 X7 b ^3 B6 u* O% G8 [- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" _8 L3 s5 z6 g6 t - #define STATIC_SHIFT 3* ?) W/ Q) j# L. f0 z
- #define TCINTEN_SHIFT 201 @* T. C1 g( a5 o( @8 T7 N, c/ `1 F
- #define ITCINTEN_SHIFT 21
( h' M2 U4 h( w# N" j - #define TCCHEN_SHIFT 22
# j: Q0 i, v7 o& I7 ]& m" Q - #define ITCCHEN_SHIFT 234 G) W& k! v9 H) R5 z+ q
& c/ m/ h E0 W+ C1 U, \- static volatile int irqraised1 = 0;
! ]; W' ^; }% B& Y9 } - static volatile int irqraised2 = 0;. X$ B) g7 |+ f {' I9 P3 F
- $ Q& Q& ^$ w* i2 v( }% k/ Q. s
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 M& e7 F# T! @8 y6 `* [" ?: c - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- S: E$ r3 \1 m; H6 D+ [3 O
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 x, q7 A; }! v. \+ u* H - " {% Y2 W$ l( E8 ^% [& G7 {
- dma_addr_t dmaphyssrc1 = 0;$ d6 T& |% j( A( ?
- dma_addr_t dmaphyssrc2 = 0;& s7 s3 D4 |0 }7 {8 A7 q' }/ D: g
- dma_addr_t dmaphysdest1 = 0;
- y) H* T( W# D8 \. e - dma_addr_t dmaphysdest2 = 0;& z- z2 T# H7 N/ w' u+ W
1 n9 [. t6 o; {! ~- char *dmabufsrc1 = NULL;- L9 l- w$ l0 c" @: |% q) m$ R
- char *dmabufsrc2 = NULL;
0 ]- C# G& ?% m - char *dmabufdest1 = NULL;
/ @. B4 V0 N% \ - char *dmabufdest2 = NULL;2 L2 t. X8 N( _& |$ N
3 B7 t$ Q) C6 V/ s- static int acnt = 512;, E0 C# ]7 y: \/ z7 t
- static int bcnt = 8;% J+ V" Z8 X- V K, F' n
- static int ccnt = 8;
9 f3 s! M0 C4 a7 {. Z& R
; ~5 v" n, N/ [0 e1 b- module_param(acnt, int, S_IRUGO);
* g; e9 ]- {, r. i - module_param(bcnt, int, S_IRUGO);
) F$ o; ?+ y) A6 v" h - module_param(ccnt, int, S_IRUGO);
复制代码 2 l3 b1 t( z" a& e
v* V# g, i% Z, B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用& ]& _ c% P* Z: L
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 _3 _, |" N5 q2 `. p3 I4 b7 p: ` 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。) i. C1 K H1 b( O1 _& r1 l# f* f! i
5 [* Y: V- ^( u3 W$ u# ?, o1 r" C+ C- ?1 O; a9 P
|
|