|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 # w7 w3 K" N' J$ X6 a) |% d! M: \
- [code]EDMA sample test application
, `+ {, [6 Z( p B - /*
9 H% K5 c* d( @9 Q - * edma_test.c+ f# I! n* P7 H7 q- E
- *
9 p' t$ K; q! C+ D3 x" L4 d - * brief EDMA3 Test Application
! p* c$ O) o+ x! n% ] - *
; ]. \+ M& \$ S7 S9 K3 X$ V4 I1 D - * This file contains EDMA3 Test code.4 f$ y9 |" E6 \6 T9 r7 x! t
- *6 F0 u; `+ [; U+ W# Y7 r
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
' k ~: M! }) c9 y! G+ t - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT2 ~' ^5 @% n9 ~' t; e
- * TO CHANGE.
5 ~/ W. w9 z- q$ c - *0 Q( ~! v0 V6 x( ~& s* p2 y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* Y/ s7 l i& K5 h
- *
; O! Y ^, w/ w b: V0 K0 X - * This program is free software; you can redistribute it and/or
0 y; [1 V& P F2 Y2 p9 \ - * modify it under the terms of the GNU General Public License as
" N0 A( o# V1 P. Z2 M& y! `' F X - * published by the Free Software Foundation version 2.; ]6 J$ Z# p# p
- *
# _0 x2 l0 Z/ x# v7 B9 i - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
5 }4 @. x! Q3 G; Z - * kind, whether express or implied; without even the implied warranty, q& ^/ l5 a0 L
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the, _. {9 B$ s+ q- G- X6 T$ v: H3 z
- * GNU General Public License for more details.
( x2 f" {: U1 P. T! X( |6 O - */
" |5 m+ h7 l5 F9 ]! k- d - ' p2 f" o, D2 d! Z* h
- #include <linux/module.h>
4 j& V# J9 P) o# O - #include <linux/init.h>6 s5 s. q- m* ^
- #include <linux/errno.h>
! [1 @) Z2 P8 B' E- d3 q6 ] - #include <linux/types.h># t9 z) V5 o8 W
- #include <linux/interrupt.h>+ v( q, r3 j' u R- G
- #include <asm/io.h>) S- C: O8 P5 M6 n4 v
- #include <linux/moduleparam.h>. S* u( P6 _0 {& c! _: Y* \8 Y( t
- #include <linux/sysctl.h>. r. f3 }* L$ t1 P
- #include <linux/mm.h>8 E, t* \# K+ V* w8 E$ f9 i
- #include <linux/dma-mapping.h>
& i- @( I% Q9 K |' K5 h, ` - 8 y2 L& X5 c O: V
- #include <mach/memory.h>
/ @4 u' g; U: B# Q2 c/ v [ - #include <mach/hardware.h>
" v+ ^* F/ M" ]8 x: a - #include <mach/irqs.h>
8 i1 R- |. u& m1 g' Z8 H - #include <asm/hardware/edma.h>& d7 p4 R+ J/ J8 H. _. M' G
- ; \. J% `8 U1 \8 D. F. k8 a/ ]
- #undef EDMA3_DEBUG
6 N/ p: u, m1 Q6 g( J) A; @ - /*#define EDMA3_DEBUG*/
; V# C. }2 K& O S5 a - ; M: o4 `4 H$ g( f0 k! a- u) S
- #ifdef EDMA3_DEBUG
5 `8 n$ Q" b: R' F. ^* M - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* Q+ ?6 m# Q/ _$ m' l9 s - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)/ c) d% h# w u" n- r
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__); L' z4 a# J1 g) d$ H
- #else
% M$ J! E$ }! |. k - #define DMA_PRINTK( x... )
' ] R. A% [4 j! y, h - #define DMA_FN_IN
: {* Q6 |5 r n, d* ]9 O - #define DMA_FN_OUT% ^8 e/ Y: G% M d2 z
- #endif
w1 W, e* y# T* n% l$ b
1 R; v& ~" s! v8 x b- #define MAX_DMA_TRANSFER_IN_BYTES (32768)) E- I3 s6 u6 @: N7 H Z0 o' V
- #define STATIC_SHIFT 35 [9 q1 e8 ?. r$ l. \
- #define TCINTEN_SHIFT 20
) A2 }: X6 W9 f$ z: ] - #define ITCINTEN_SHIFT 21
5 d2 o0 q$ n" o" L' j- ~% g - #define TCCHEN_SHIFT 224 c4 L8 O5 U' C" Y. F6 C, C
- #define ITCCHEN_SHIFT 231 U9 }9 ?% ~5 u9 Y* U2 ~
- ! v9 P% E K8 M' }
- static volatile int irqraised1 = 0;
* W/ ^7 A2 H( w6 g0 x% R - static volatile int irqraised2 = 0;
+ i2 C) Q$ C. _1 r- t' L$ v3 Z# s - ; B& J" r {4 |; A. V) M6 }8 T
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" k* o$ M5 o* D, Y% [
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. H8 A) u2 Z" X5 E# E5 T0 u
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 o" L2 z3 J8 p- r( j
- - Q; ^7 |1 ~6 A' j" S$ D: g; v
- dma_addr_t dmaphyssrc1 = 0;4 ?7 M8 q7 n; l2 ?
- dma_addr_t dmaphyssrc2 = 0;# N" U/ N% ~$ Z9 a! [
- dma_addr_t dmaphysdest1 = 0;
3 s% d* \7 ~ u( J: c" R4 R# E `# W - dma_addr_t dmaphysdest2 = 0;
: y4 n5 h6 w. B4 w9 o& u
6 n: Z, H7 c& }! l# B5 U- char *dmabufsrc1 = NULL;$ U4 `. h1 `0 A* {' @3 A
- char *dmabufsrc2 = NULL;8 [6 f2 _/ j( h* f) u
- char *dmabufdest1 = NULL;+ l& \# Z0 L# j: J5 q2 O
- char *dmabufdest2 = NULL;
+ l) ]' j9 b6 j3 ^' f; h: D% j
8 m; G/ x( J& M6 s- static int acnt = 512;
+ d; K- w6 j' s6 x - static int bcnt = 8;7 P0 z# T9 y% M4 I6 W2 j
- static int ccnt = 8;
7 @4 P6 y: ]. U - * E9 k2 F4 L j
- module_param(acnt, int, S_IRUGO);" S1 T+ ]# [3 r" U; L$ f& O! Q! X' [
- module_param(bcnt, int, S_IRUGO);
- S2 ~$ o( x4 ]. C( L$ r - module_param(ccnt, int, S_IRUGO);
复制代码
7 s& _5 _$ Z9 ^1 i( {% L
! A8 }3 M3 [: u% a% w) o7 ] 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; M5 {5 N+ ~. W' I+ C) f$ Harm-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 u, B* ^& n9 x5 n4 j8 I 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。& C6 H# P/ h4 c
6 F5 H; o! V: l) D& F6 [& d+ I7 E$ x9 F' m8 Q
|
|