|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ [+ f# ~& D$ l5 N2 i ~- [code]EDMA sample test application- k" X1 e- x2 |' G* I; ?
- /*' l: F% A. O, p+ _ {1 m* K
- * edma_test.c" D& i" x: D `$ d
- *; q" u% ?6 f3 I7 ?8 E. R
- * brief EDMA3 Test Application
u/ h. c1 M% W q! }) K9 e - *
2 s( i S- e8 K# f0 e9 N - * This file contains EDMA3 Test code.! k! I% p2 u9 v4 F, x7 |, l
- *6 U/ [: }/ y& W, a9 j T1 }1 {2 M$ a
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, A7 ~; X& i+ Q N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% X# K6 U8 b) q - * TO CHANGE.* O2 C- P* k1 N+ k+ Y7 h
- *' i, {, F' R' f: q3 c" Y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
' _2 o1 A- w0 u1 E5 O - *
& r5 N) G! Z" {# G4 E - * This program is free software; you can redistribute it and/or" U2 O0 |' M% O8 q y7 h
- * modify it under the terms of the GNU General Public License as
. U) x, \0 C& u S2 v1 ] - * published by the Free Software Foundation version 2.
8 f2 O8 i% X1 r" C7 x0 g1 z4 g1 _4 A - *
& A, ]. [9 @ D4 [% a& N - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. |0 ?' s& ?3 t: L - * kind, whether express or implied; without even the implied warranty
3 o' x, ?1 L& N: D% e6 ?: L) W - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! Q& m: ?) O4 Y% _2 d8 t1 [ - * GNU General Public License for more details.% T4 T$ y7 v8 N& G3 L$ ?$ c8 ~) i4 A
- */
3 @ u, C; t/ d - & }2 K- v6 s! Y A6 j
- #include <linux/module.h>
8 _2 d' c, B, V' s( n2 B - #include <linux/init.h> {5 k* v1 n3 V( o5 |
- #include <linux/errno.h>
4 ^+ o# m, f s+ f0 A1 Q1 f - #include <linux/types.h>
2 A1 f# J- z; @/ y; g, } - #include <linux/interrupt.h>, ?$ J! L6 |+ M1 F
- #include <asm/io.h>) S( X) U% \. g1 G( r! u
- #include <linux/moduleparam.h>
; J/ r1 G( o4 S* `7 Y8 b1 a7 D - #include <linux/sysctl.h>! S, ]4 ?& s. S8 ]
- #include <linux/mm.h>
) j `% K* s2 Z+ D; @8 _' } - #include <linux/dma-mapping.h>
, Z) H9 G9 b# [ - + z- R* ^1 N" z3 Q
- #include <mach/memory.h>' @5 J3 E; m. ]9 M" ^$ B- L
- #include <mach/hardware.h>
9 A* O" R3 X% E1 p- a - #include <mach/irqs.h>
# ]; Y. T& m; ] - #include <asm/hardware/edma.h>* I6 Z1 Z- e' S8 a, v) v V0 x, }5 j
4 ]% @% [4 a8 J/ ~ i0 x( d" e# @- #undef EDMA3_DEBUG
0 g# ~; U( i2 }& O - /*#define EDMA3_DEBUG*/4 S2 [+ ?% \$ \* ~
+ b: u! ~+ L" p" T P( C+ b- #ifdef EDMA3_DEBUG/ u5 Y% N D9 C; r" _
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)6 C! ], _' Y/ m- d
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
. ]3 O. P: U3 I8 o% `; I4 c0 _ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)' S9 y- ?+ J# u
- #else8 q2 h9 P- G R
- #define DMA_PRINTK( x... )# M3 |# ~# R6 ]2 e K( }4 p* l f% ^
- #define DMA_FN_IN/ ^+ U$ h8 [6 F
- #define DMA_FN_OUT
5 g3 C* \$ Q3 F0 e4 t3 _+ I - #endif
, @( z0 ?7 L# V, y/ P0 \. ~
. X: @# J! q6 d7 Q& a; J7 Y$ [! [- #define MAX_DMA_TRANSFER_IN_BYTES (32768): I: x5 _. ]8 \7 C; e# H- Q
- #define STATIC_SHIFT 3
; A/ s) C* d1 V R - #define TCINTEN_SHIFT 20( Q A1 U6 n7 K, o. ~! ^7 ?
- #define ITCINTEN_SHIFT 21& L$ t! P# i6 R, L9 R
- #define TCCHEN_SHIFT 22
5 R0 z# M. V- Q1 P& R8 `( B" I - #define ITCCHEN_SHIFT 23
- ^ z( A- y+ `. T6 r0 H/ s
; Q3 n! k; J' q8 O) v/ s- static volatile int irqraised1 = 0;
& H5 `6 O4 y1 V6 J1 v9 A - static volatile int irqraised2 = 0;( E8 y2 Z; k, A; T
, H& y9 {9 V7 Z f2 v: C7 }- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* G- ~& ~' W7 t - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; v' O4 ?, k* V$ c) ?* n
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 F2 N, d( X8 k; P/ R4 z$ N9 G; C. ?
% w8 F6 w5 I& b1 u) ]/ x- dma_addr_t dmaphyssrc1 = 0;
- m% K+ O' L# S" J# Z - dma_addr_t dmaphyssrc2 = 0;
/ C+ x4 O6 g$ Q - dma_addr_t dmaphysdest1 = 0;
T M1 ?' Q) G7 N; H - dma_addr_t dmaphysdest2 = 0; U3 M2 i8 ]9 g8 [6 p
- " D4 u8 h- {) H* j1 z( H& u3 Q
- char *dmabufsrc1 = NULL;; O" T* l* i/ g; u% @" h
- char *dmabufsrc2 = NULL;1 p, U3 ~8 i* f) u; h
- char *dmabufdest1 = NULL;* g' F+ @8 o% U8 n. b$ t# c
- char *dmabufdest2 = NULL;
" o* A1 I M4 U- a. ]/ U
. C+ G/ B5 |; D6 z, C- static int acnt = 512;
- o3 |' y7 V: K+ f3 O - static int bcnt = 8; }: }& i: Y- ]1 m* C+ L7 a
- static int ccnt = 8;
2 L3 @8 h4 O, n, _2 N$ D3 a7 e
$ P% Z8 m9 S& E6 C: D8 S; W/ }- module_param(acnt, int, S_IRUGO);
/ r# v& s; e+ T - module_param(bcnt, int, S_IRUGO);
9 Z5 s5 ]7 k$ U+ }# f; W - module_param(ccnt, int, S_IRUGO);
复制代码 6 ]& W( U7 D+ g- l
. W [8 p8 v9 Y0 C6 C$ R 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
5 f$ u4 i" U4 }8 Garm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。0 V+ o5 L) N8 F4 I
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
/ s W. x G. b2 v! {8 p, h* _ H k3 g
1 |0 g {- H' U6 u3 x6 j+ f' B
|
|