|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! I9 [9 s. d+ r7 n$ q7 H, p
- [code]EDMA sample test application
) q C) Z8 Q$ R/ l1 j" p - /*" H' I1 Y7 l3 y+ p \8 x0 J
- * edma_test.c) ?/ |7 `9 n1 @( [; V
- *
( N, ^9 @3 C i; [5 I - * brief EDMA3 Test Application' z# L5 R2 f# n0 n: _
- *
$ C4 g5 o) r9 h+ ^5 i9 r+ F, b$ c - * This file contains EDMA3 Test code.+ G, A& y Y" x6 v' ]
- *$ g S3 ^6 N% ?6 K7 v9 P
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE/ [4 p4 I: c: L
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 A2 x* t) R. l. D - * TO CHANGE.
6 C1 v7 k2 S2 S - *
( A; r7 i& ^) \- Z8 _* p8 \ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/, x1 @2 u& T' n" Z. [8 C# l8 D
- *
1 I( o# _. `- R' h! M - * This program is free software; you can redistribute it and/or. o: T* E' n! m a0 s$ l
- * modify it under the terms of the GNU General Public License as
" j/ @: F& k5 U - * published by the Free Software Foundation version 2.
3 z. z) T: ?% d& u: m8 d - *' Y7 K ^! M: X) u
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, f6 E! T$ D; v - * kind, whether express or implied; without even the implied warranty: g, M1 G' g* l2 I
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the: |- F# F( p8 `; _6 T
- * GNU General Public License for more details.
6 l: }4 E4 k: q - */
$ ^% `& y0 E7 N7 T1 _8 H9 C) R% O! H
6 @* F% x6 T4 A- #include <linux/module.h>
% s9 F. u G% k$ L1 ^ - #include <linux/init.h>
3 a( n: _+ X& K; {! x7 C/ A - #include <linux/errno.h>' {, ^0 F+ D2 ]4 `9 F
- #include <linux/types.h>7 y$ x# o/ p6 B$ W+ q" _
- #include <linux/interrupt.h>
8 S/ u( q" d& \, \4 Z - #include <asm/io.h>* l& [9 P4 P' m2 n$ Q1 J
- #include <linux/moduleparam.h>1 h3 S4 e% B: U+ q" Y
- #include <linux/sysctl.h>; [$ ^* ~3 U3 [# ^# R# s# ~
- #include <linux/mm.h>
' B; j2 L; g w$ ]& V+ w - #include <linux/dma-mapping.h>7 a$ K% R2 v6 s, X
- ) b! f1 j% _9 R5 q% Y6 R+ A8 A
- #include <mach/memory.h>0 X. {& O* [# p# B7 g+ F
- #include <mach/hardware.h>
' Z- v. p) `' z* Z - #include <mach/irqs.h>, x) @* J" M' `$ S* o+ J
- #include <asm/hardware/edma.h>
R# ?2 l, s4 U2 k+ T! R8 k4 H - 4 l) P/ q7 o! n C
- #undef EDMA3_DEBUG9 u" ~! e% s. z
- /*#define EDMA3_DEBUG*/
9 S! S& K+ {% o - 1 n! C. m( M1 E( Z' [( v& q
- #ifdef EDMA3_DEBUG. R0 ~6 c4 d; N$ z3 n
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
4 `; ]/ v2 M* S$ s - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 }# t& r' a9 M. ~2 P1 s F/ v - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( T: Y2 I& m; ~( C8 a2 y. j
- #else3 m! s* F2 n& h' H2 U
- #define DMA_PRINTK( x... ). e+ z1 n9 C7 t }1 z& F
- #define DMA_FN_IN" Q# c( Q6 z- H
- #define DMA_FN_OUT
}8 w* l0 T% R( f |! x1 N - #endif6 _$ M* X& q2 y8 d
- 1 W' p0 A9 R+ d+ w0 x5 }
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 b3 A9 c- l& }, k1 p. X) \7 E. B& w - #define STATIC_SHIFT 3
, K7 H0 ]+ Q7 F; Q* @, X, R( ? - #define TCINTEN_SHIFT 20% ?" ^ e2 K* C9 G/ d$ t" E0 w
- #define ITCINTEN_SHIFT 21
6 g7 B3 ]2 t. m2 K' | - #define TCCHEN_SHIFT 220 J, k: l' s9 B" Y E
- #define ITCCHEN_SHIFT 23
8 Y c2 K8 {5 z& Y8 a! R1 s% x
2 C; O; p+ x% E+ P$ @! g- static volatile int irqraised1 = 0;
9 g" _4 G# T8 o/ p - static volatile int irqraised2 = 0;
4 B( u3 A6 L- z6 b. [ d, _
7 S0 X4 J Z% f8 h0 h% L( o- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% e* W1 G" }: n" C - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# n# c# R9 K4 ^' G: y/ n) Z - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: q1 n$ D) W- E8 K% M1 k1 @
& w( l; V- I0 r8 g/ P$ B& a" V% M! g- dma_addr_t dmaphyssrc1 = 0;
. h* k3 ?9 u0 C% ~5 G - dma_addr_t dmaphyssrc2 = 0;
( @% o3 p# U1 J% M; w+ L - dma_addr_t dmaphysdest1 = 0;
5 P; }9 p; m$ H: f - dma_addr_t dmaphysdest2 = 0;! ~0 A" E. ^0 X2 o
- 1 ]# ]. J+ B9 {
- char *dmabufsrc1 = NULL;
1 U9 _- ?) `: F% M0 R; r - char *dmabufsrc2 = NULL;' n& P. X* }8 J2 m0 w! y) y
- char *dmabufdest1 = NULL;
! m0 |- i; K: o; r8 p$ \% ? - char *dmabufdest2 = NULL;! k" N; I( I* |: h7 U
- ) k- f2 j0 }' o* \; S
- static int acnt = 512;
}3 ~, ?0 Z; t - static int bcnt = 8;! |% \. @/ m* y7 \3 A
- static int ccnt = 8;
* S- ?# S( x* n8 p1 I% ?
4 @8 E9 x/ @, g/ D3 g" x# ?- module_param(acnt, int, S_IRUGO);" A" a. t) G/ A' |
- module_param(bcnt, int, S_IRUGO);
2 ], g$ ?: M# F! { J3 W: D6 V - module_param(ccnt, int, S_IRUGO);
复制代码 2 i G) g( ?4 y9 w
( ?, _% x7 b# a: @
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
, P+ x! g! Y' a8 ]/ Y9 \( Parm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 R7 Y5 B; f; ]" `! w- N- H 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
- t1 j; v3 {8 X4 W" t6 F3 }+ p t* ~; Q$ z7 b3 U+ ^4 m. j
6 ~* k# ]; b* o" r& p: {
|
|