|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 M: `8 n) h. j `/ U8 {0 l
- [code]EDMA sample test application
% I1 j- N& J* U: G - /*
4 h2 i' M" [ {2 s) Q* Q - * edma_test.c5 t; B; `. {9 u3 g% A
- *2 @" g5 D+ S1 b. T
- * brief EDMA3 Test Application
) V6 y; `- W" F0 b1 {" v' J- { - *
3 }" H" R9 \& c* }0 G) x+ C3 g - * This file contains EDMA3 Test code.6 j( V B1 j* K. C
- *& {8 l; a" W5 e+ Z- M7 `; C
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
- _6 \0 Y! E+ M0 S - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# ~5 L% t7 L% I% N) p
- * TO CHANGE.
$ c/ D2 r" f, p+ P5 { - *
+ @7 s( X9 Q- q8 x$ N" j6 H- O - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/2 u+ `7 `- S6 _$ I/ Z3 b
- *
" g ~# y. n7 C, F1 \5 ^ - * This program is free software; you can redistribute it and/or6 g3 v: F' y7 ?) V
- * modify it under the terms of the GNU General Public License as
1 ?+ [$ m8 f( L0 J) S - * published by the Free Software Foundation version 2.' R+ U c% i. q+ p; j& C
- *$ a& y3 V3 h) Q! O
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any. i6 J9 U: S* W( `! ^
- * kind, whether express or implied; without even the implied warranty
$ Z. O! F" i. _0 j - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; x% S0 c9 h0 _! K, \
- * GNU General Public License for more details.
) w% P1 x5 s% c - */% s$ ~/ E. g4 C# G
+ o+ J! ? L2 l" Z- a- #include <linux/module.h>2 r9 T0 k$ {: v* T
- #include <linux/init.h>
! d6 k$ S, @. F$ d - #include <linux/errno.h>
+ ~/ W; G) z" u: O& Z - #include <linux/types.h> ~4 i7 q4 z5 z6 O9 T* Y) O4 e! m
- #include <linux/interrupt.h>( Q( S6 P/ T2 _: z/ E5 t& g
- #include <asm/io.h>/ N( f/ V' T5 t) Z- z
- #include <linux/moduleparam.h>
8 u4 \( ^5 K! X. Q$ y) a - #include <linux/sysctl.h>. _! |" |+ ^/ ^; e
- #include <linux/mm.h>5 u& y! P$ B7 F! v- \
- #include <linux/dma-mapping.h>
8 r0 z$ p: W1 E6 }
3 r) w% Y; F' J- #include <mach/memory.h>
$ `/ C4 ]$ C% O. V0 T! K4 t - #include <mach/hardware.h>8 C! j( r7 N9 J. s, {
- #include <mach/irqs.h>
0 d1 b8 p! ?2 s" o% N - #include <asm/hardware/edma.h>. n2 M) I W$ X/ F/ K% L: `" U
- / O, c9 B9 n" P* a+ l+ }: x
- #undef EDMA3_DEBUG
0 o4 f4 M+ B* S9 a$ f- w - /*#define EDMA3_DEBUG*/1 j" K' g3 f' l! e
- , E6 o2 W2 k1 T
- #ifdef EDMA3_DEBUG( b, ]7 ^: S& ]3 o% ~
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 [) K- U9 O: V" Q7 y0 o - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)( S7 ]3 M, o4 K! @; A( P I3 J
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
9 f$ \$ \( `! \' d$ s1 Y - #else
" h) m: l0 c: o6 { - #define DMA_PRINTK( x... )
- ?" q7 r# L3 B9 d/ |- B - #define DMA_FN_IN
* c" X9 r( C) a! Z. J- S1 [/ A - #define DMA_FN_OUT
' B8 _% g, Q) I! t3 Q! X - #endif
* d' x- L! K3 m' X - - N8 m @+ B( L7 \
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)" ]" r* F- c0 S2 [4 o
- #define STATIC_SHIFT 30 n2 Y1 }% m2 E0 f" u/ ^
- #define TCINTEN_SHIFT 20
1 \0 b3 L: ]0 E) ` - #define ITCINTEN_SHIFT 21
M$ s& f) F$ a; [" w! L - #define TCCHEN_SHIFT 22
' I$ m0 i: Q7 T! w! ~5 I - #define ITCCHEN_SHIFT 23! U: z4 A f/ j. q9 g0 k
8 t" v! ?, r. c( G: {- b- static volatile int irqraised1 = 0;6 z) l% b3 U q* h. Q# A: M
- static volatile int irqraised2 = 0;
# a% r1 U9 `- q
8 W: p- r' D5 Q' H6 J8 [- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, [, Q; E5 |9 n
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# ~2 Y5 b% `, ^; f; B: T" m - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. _; F1 n" s2 _# m P: f) M, F9 T - ^& n ^* h. d2 } n
- dma_addr_t dmaphyssrc1 = 0;
8 |! p z0 S* H5 p! C7 r - dma_addr_t dmaphyssrc2 = 0;
4 o8 D3 [0 t: { - dma_addr_t dmaphysdest1 = 0;# Y) W6 }' h D0 p9 ]
- dma_addr_t dmaphysdest2 = 0;
9 K% x6 }& o# o+ N* k
/ |" J8 y3 L3 Y# a7 a. V. v4 q- char *dmabufsrc1 = NULL;2 H( P, V, z2 h7 A
- char *dmabufsrc2 = NULL;1 W$ o6 I, |: O' l, a- w& F7 R1 c
- char *dmabufdest1 = NULL;
, M5 c J/ Z8 z% ` - char *dmabufdest2 = NULL;# t1 N6 d5 B5 N5 l
- ) ?3 `; G2 n* W/ {
- static int acnt = 512;7 I+ ~" j H5 e+ b
- static int bcnt = 8;
. e- C7 n! u5 }/ a - static int ccnt = 8;
1 k1 a: b; _5 m. m
. f$ h3 M+ [) s+ k8 q- module_param(acnt, int, S_IRUGO);
4 H7 O' u7 L' [$ q2 P$ G; \ - module_param(bcnt, int, S_IRUGO);/ O0 I1 {: j. T) }4 {8 {
- module_param(ccnt, int, S_IRUGO);
复制代码
+ ]* m# F! |2 M G8 F6 Q% D* [
. f) k$ q4 H# V U3 ~ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用7 u% M+ p& F6 `, R5 _1 ]* N, P
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
: L9 c0 O7 m# Y+ S$ `; \/ `# e 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 i5 a- w* Z. X4 n. j
# {, t) V; I* e2 M- h, p9 D5 l9 I) e( w$ R6 L; ?3 Z$ W4 F/ l- u
|
|