|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 O% Q8 g0 Z2 s! I3 W- [code]EDMA sample test application2 l6 R2 i h6 Z( J: @
- /*
& M( W& A; M" [- b# v) l - * edma_test.c
5 h+ {3 L3 k; z - *
" Y* H$ ]. h7 [ - * brief EDMA3 Test Application
5 D$ n- X& m2 h; O( s - *
8 @8 i6 A; P2 J" c Z. G0 | - * This file contains EDMA3 Test code.
+ q: f& |# d& [2 A2 l6 q( ` - *
7 d( Y! S! U$ v - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 K1 }1 r* o; k8 d - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
8 | y1 Y( c% c2 U4 B* s - * TO CHANGE.
[' k1 J! \! { - *3 q( e. Z# B0 q8 G
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/7 |6 r- C6 d! L2 C
- * W0 S1 G6 y. P; g) K Y
- * This program is free software; you can redistribute it and/or5 \' Z4 U# }1 ?
- * modify it under the terms of the GNU General Public License as
2 Y1 d) W" c& m - * published by the Free Software Foundation version 2.
+ ?9 h+ r8 S1 G/ S- Q u2 W - *+ `# z4 w$ q5 ?) H6 l- E
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
2 j- [, b H% l9 a7 e5 S - * kind, whether express or implied; without even the implied warranty
6 a$ r' Y7 [( r( b8 a5 o - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; E3 @/ ~ H3 @( H - * GNU General Public License for more details.
z- m( j$ h( v - */2 K9 y% ], P, C3 B/ q$ e
- E# M+ t& n4 `5 u3 h' U& ]6 o/ E
- #include <linux/module.h>
& e. f4 r/ s, j, O - #include <linux/init.h>
F7 [6 x: a! h - #include <linux/errno.h>! A$ R4 ]- |% ^% A- ]% E+ n
- #include <linux/types.h>
7 S9 u3 b; J5 f+ h - #include <linux/interrupt.h>* T% r; A2 F8 ~! x: [ k
- #include <asm/io.h>" A. h: V9 c: M1 A) Q( d* U5 M
- #include <linux/moduleparam.h>. w* \- s9 x, p, C! J
- #include <linux/sysctl.h>; U- u5 f+ \2 j9 \7 P& X- l' V7 f
- #include <linux/mm.h>' m, N9 O( Q' x' g' E; x! S
- #include <linux/dma-mapping.h>3 k- G1 d3 M8 ?) R8 a# q
- 5 U0 I+ e, E. u0 ~& f# T
- #include <mach/memory.h>
5 e7 ]) }- P4 `' B8 R' _0 h+ t - #include <mach/hardware.h>) h' \& Z% J' l" r( Q
- #include <mach/irqs.h>/ c% V3 S2 @ X/ k
- #include <asm/hardware/edma.h> {- a+ K, k7 p8 E, |! o, x8 V' A5 @
- 0 b2 a1 Q8 H1 u) d
- #undef EDMA3_DEBUG
4 D6 W3 i& R% b3 g/ P5 v - /*#define EDMA3_DEBUG*/
+ ], F1 k8 ?( x" s( [ - 2 }1 I% k4 Y/ L' h n' \ Q
- #ifdef EDMA3_DEBUG3 L6 ^& D; g% d8 P+ X5 r( _
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)+ ?, `9 x F9 a9 Y
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__); O1 J0 M' e8 {
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
' W Y0 }& `4 E& u1 B - #else
- j$ ^$ m& t B4 s1 { - #define DMA_PRINTK( x... )- @4 Q! y' d" X* d: {/ o8 e7 I
- #define DMA_FN_IN% N5 `5 O3 n8 o. X3 v& H
- #define DMA_FN_OUT
3 J/ Z; O4 i6 p" P, o) v( o' r$ l - #endif
j% R+ k- z# G
, F) P! k! Y( H- x4 k8 r( k- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
. o& J/ [# S1 A) f" c( T - #define STATIC_SHIFT 3
, W; s9 Q V: [6 Q8 S - #define TCINTEN_SHIFT 20% |: E( X- d" o# Z6 ?$ l, [
- #define ITCINTEN_SHIFT 21; C" L5 e5 @/ j0 d5 U* I5 H" A# d7 f# p
- #define TCCHEN_SHIFT 225 P/ E4 S# q2 Z S( ]! m
- #define ITCCHEN_SHIFT 23) E$ k! A3 l2 J0 N
) ?9 D x" t$ @- static volatile int irqraised1 = 0;( `% v1 X& H! }9 _5 \
- static volatile int irqraised2 = 0;7 [' o1 S, c9 t6 x0 L
I0 { E; \5 A3 C- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ ?( S8 F, n! ?7 Q
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- ^. {( X* ?7 A! t$ l
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 M, O J* N( L' F
* r/ k3 b; ^. R/ G! V- g M' L' u- dma_addr_t dmaphyssrc1 = 0;/ w+ [( c+ i* D
- dma_addr_t dmaphyssrc2 = 0;7 Q5 k/ C+ R$ r2 `
- dma_addr_t dmaphysdest1 = 0;
7 \( o& d" _5 A - dma_addr_t dmaphysdest2 = 0;
( V6 t+ o! `& `% p/ x7 n
" N& r+ F, Q; y) m! J: j- char *dmabufsrc1 = NULL;
# T9 ^4 c) J% p/ \4 D7 P - char *dmabufsrc2 = NULL;
6 J8 Y$ b ?* V0 G2 m; P% } - char *dmabufdest1 = NULL;7 ?- x D+ E3 ^% \
- char *dmabufdest2 = NULL;5 _/ _1 m" t0 O1 |1 S$ \% g* H
* f9 n0 N0 }$ E& U8 f! Z7 @- static int acnt = 512;
' U8 E# b4 O; ]. P - static int bcnt = 8;
. j1 y5 p) e0 Y - static int ccnt = 8;% y* m! H. |2 n5 p& W; m
- + |( _) }$ ?- h% T: M% ]3 E
- module_param(acnt, int, S_IRUGO);
4 ~5 k; S! }5 D$ ^: G1 D/ d - module_param(bcnt, int, S_IRUGO);
& Q! F$ [3 ?1 b8 @ - module_param(ccnt, int, S_IRUGO);
复制代码
+ U) ~% s: d$ @) A( i0 a3 h/ P$ P8 }) Z5 p* I
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 @0 J2 F: Q/ |% i# Y
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& V* \, y+ Y
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。9 b6 `$ m* W" O$ L. ~
" @. ~3 [% s+ q+ P6 E& I5 m2 ]8 }8 `/ ~0 C8 T: }
|
|