|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ; R; l& N/ ]* m" j6 x4 b, Q! y
- [code]EDMA sample test application4 C6 u x! ~& v/ P
- /*
: T* Y6 ]1 C& g# o" `8 W( l* h - * edma_test.c) s+ v9 C6 [! j3 g# K
- *: u" _ d9 ^; l' `% X% l% y
- * brief EDMA3 Test Application
) O& g/ Y0 J4 T# H: F5 F0 ?- k7 s - *; Z q1 W8 ~, D6 H( z2 @( R( M8 {
- * This file contains EDMA3 Test code. _* o) \- ~1 E9 j; B
- *
' d: |% s* T; _, P' j& {0 C - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
$ R- W3 V7 x3 J8 C- ? - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT- C1 g; f- ]+ N2 R4 b+ U% P
- * TO CHANGE.6 S0 l7 d1 l. ^! L9 S u" Y& E1 P& Y
- *
- Y& {3 F- V I/ ]0 `( H - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/# ]8 G/ {$ Z% K1 d* Z0 d
- *
) Y" C( e1 S! a- h( _ - * This program is free software; you can redistribute it and/or8 c8 M) E* j: v' L% p$ ]
- * modify it under the terms of the GNU General Public License as* r8 t" `& D. K `
- * published by the Free Software Foundation version 2.( U$ m! `9 v1 W8 n; p: Q8 Y
- *1 e v3 K2 F( R" ~% f+ m
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any! c# ]- f! r$ ~7 ?/ w
- * kind, whether express or implied; without even the implied warranty
7 b' b( [. j& f# g! u; |) K - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X0 v. T+ x6 ]7 v - * GNU General Public License for more details.% n" `2 f6 a9 Z& |
- */
# X" t0 [2 F! p$ x8 {% P4 |3 F
9 n: n6 E- v, e" C, F. U! H- #include <linux/module.h>
/ f# C4 X$ k1 A6 }: u - #include <linux/init.h>
8 ~- S$ b' K: Z# O - #include <linux/errno.h> e; A) ^3 ^* n6 x1 X( Z$ G W
- #include <linux/types.h>
; E# L' H/ `7 M/ t - #include <linux/interrupt.h>& f. k) I) E1 x" n" a# ?
- #include <asm/io.h>
; |" A0 V7 c# L) s6 \ - #include <linux/moduleparam.h>
+ ^8 l- p9 G- P- e# Z% U/ y: F4 w - #include <linux/sysctl.h>
/ T' k& s' u8 f) P) X( A! k - #include <linux/mm.h>
! h3 O0 } h& D5 C. r: q - #include <linux/dma-mapping.h>5 b/ I" A4 ?: Z9 [
- $ S0 g8 }' y4 @' N$ q9 d0 u
- #include <mach/memory.h>7 l% u. J. q, v$ y* V+ ^4 r% l
- #include <mach/hardware.h>* e! N6 I3 y6 d9 m; Z
- #include <mach/irqs.h>
% e- Z+ n: d3 _ - #include <asm/hardware/edma.h>; C; U" n4 Y: Z8 s) J# q
4 I! B+ A- X8 Z, K- #undef EDMA3_DEBUG
+ q& A6 w, X% O4 X8 D6 k - /*#define EDMA3_DEBUG*/8 l# J( a, U1 D- G% \
3 I' h& I; F' I: R, B- H" F" `0 [$ _- #ifdef EDMA3_DEBUG1 B# L& m6 {& t/ V/ \/ B/ A
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
# K5 C. e- B# Z4 R8 g - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)) t" ]+ B( S* [
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)/ B+ @4 p0 j0 @+ R5 W7 x( Q
- #else. R8 }) q2 `/ E. p) p( d8 N
- #define DMA_PRINTK( x... )
4 z7 I2 W' R. v; v; o - #define DMA_FN_IN
. u$ b( ?- X2 @7 u5 U$ C+ i - #define DMA_FN_OUT
3 Z7 A/ ^5 U9 t' h, E& v1 F9 w - #endif3 a# U3 Y) r7 q
- - R# F* R" v3 [/ E5 i7 e8 m0 t
- #define MAX_DMA_TRANSFER_IN_BYTES (32768). [ ], L+ z( F& `2 p/ W) a
- #define STATIC_SHIFT 3 [! G; k) [: H; L r* U
- #define TCINTEN_SHIFT 20
! X8 v [. o. v+ u! Y - #define ITCINTEN_SHIFT 21
+ z% \, |, S% q K9 }+ q - #define TCCHEN_SHIFT 221 M" m" O% z/ h8 }
- #define ITCCHEN_SHIFT 239 C$ q* N0 r% V/ N0 u8 g$ A9 t
( T8 D/ X- W M& Q8 y/ q) o- static volatile int irqraised1 = 0; T9 b( s4 ?9 X9 @: R
- static volatile int irqraised2 = 0;) [0 Q5 I- D0 [& `, A. h$ Q' U
+ y2 v5 h2 @; `2 ^. R8 v. _9 \- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 w# U2 T; { D; T1 v/ \9 k
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! F7 k1 \4 M1 B' J' t
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 Q& k4 |* Q( j+ Y8 p
+ O* T. F( J7 h4 J- dma_addr_t dmaphyssrc1 = 0;. d- h, l/ ]# |5 l* D3 i3 U, s
- dma_addr_t dmaphyssrc2 = 0;
( R2 o4 z2 w* m* X: \ p# q0 Z$ s* r - dma_addr_t dmaphysdest1 = 0;
5 _4 [* Y3 l# b; a; b3 g - dma_addr_t dmaphysdest2 = 0;
0 N4 K& I1 ?1 t9 }* ^ L7 }( o - " M0 }3 o7 c+ B4 ^
- char *dmabufsrc1 = NULL;. f2 h3 W. F, f- R7 z
- char *dmabufsrc2 = NULL;
0 H* q( A5 a1 D9 g - char *dmabufdest1 = NULL;+ y/ P2 ] T9 n7 @5 h" q- f) }
- char *dmabufdest2 = NULL;
5 r8 y/ Y# D/ N" @ - & b+ j; w/ J: p
- static int acnt = 512;' U; u- d" i/ V' Q G% W
- static int bcnt = 8;
) A4 K6 p' u3 p2 S3 M! m0 H# m - static int ccnt = 8;/ m6 M X; x$ a% L. n
- ; Z6 S- I4 L9 @9 k3 n
- module_param(acnt, int, S_IRUGO);
5 o6 k/ d+ Q0 A- [3 M - module_param(bcnt, int, S_IRUGO);
; J# `& l9 L+ a- L9 e - module_param(ccnt, int, S_IRUGO);
复制代码 + ?/ _* @5 k, q: k2 {# Z9 l
% j/ x' Z6 F( K* n3 k0 u
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 N7 V* ]+ b8 }! a5 w
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- m: j$ ], A( y# r( V% R u# c6 v 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
1 l- F5 N% V# V1 I) r% m$ o N$ f
; J, j. s" z! t5 F |
|