|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
/ j3 N& U! J8 W& ~4 y3 U0 U0 \5 A- [code]EDMA sample test application' w5 z1 `1 ?" _% i
- /*
) O; j' X) ]8 r, i1 _8 b, a* }% g - * edma_test.c! T. ~' d5 w7 g5 G! B y
- *+ f# ~, Q- u) o A# S% ?' X
- * brief EDMA3 Test Application
* _. V u% N" S: F; V1 w9 G9 @ - *
+ B( E' R6 ?* }9 C) C3 \1 F - * This file contains EDMA3 Test code.
: q* y8 O6 L1 F. s- g! K. e: Z - *( e3 r- i; X2 O( _, z
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE0 L9 Y! p9 }8 M, s
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% {; c4 S' q! E8 d; S T
- * TO CHANGE.
/ U. ~) |1 ]: L j ] - *
. O# F. d, P) s6 R5 ^1 i - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/+ I7 w7 a- [% G0 B5 {/ U
- *, R! H% e- P p3 K7 n% J
- * This program is free software; you can redistribute it and/or
^3 S8 c$ {, B7 ]9 Z# e - * modify it under the terms of the GNU General Public License as
9 w& i. ]% i! ~: h/ @ - * published by the Free Software Foundation version 2.. ^5 H' I- i0 R- k1 ]9 D3 d/ P& d
- *0 b; m; E# w: C8 {
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
/ Z' j( G: y/ O3 A& w, u: _# i# I - * kind, whether express or implied; without even the implied warranty
3 L# w1 X: ?0 @* P' j/ N+ Q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# K, \9 k& {4 m8 \ - * GNU General Public License for more details.7 H. Q0 ]3 @+ g2 l1 M
- */
. b* ~ T4 S- i- K/ P! m
* Z0 Q: |0 F- S8 T* a- #include <linux/module.h>
7 t" S2 L f& A# G" i* `* a: l; ] - #include <linux/init.h>0 E& ^; i F1 q, @6 X
- #include <linux/errno.h>
/ c+ r3 ` G9 v' n - #include <linux/types.h>$ z# O1 R0 T" K& F3 A/ |
- #include <linux/interrupt.h>
3 r2 i+ w! d3 g' [2 U5 ] - #include <asm/io.h>7 F% z% r3 T; \ X) a' O
- #include <linux/moduleparam.h>
* R9 t8 t9 m& O& y9 ?8 G9 W# `5 m4 O+ v, ] - #include <linux/sysctl.h>
% `& r, H( U: N2 f8 `; t - #include <linux/mm.h>
( _2 [8 z, @' I/ I4 y1 g/ R - #include <linux/dma-mapping.h>2 Q. ?) G# F# `
- . F. L1 H5 o) q& I8 t$ k* c
- #include <mach/memory.h>
' K9 V# m+ x$ M - #include <mach/hardware.h>
% w, o/ C4 p4 d% z e' }# M - #include <mach/irqs.h>& f7 r8 G Y7 o) [( s/ l
- #include <asm/hardware/edma.h>
0 i6 n1 Z A' q8 F8 W* U7 O0 ~' |
" I" n8 |' T) M+ M! G4 u! J+ A- #undef EDMA3_DEBUG# H# z+ v. g3 q' b, `: B/ k& Y" W
- /*#define EDMA3_DEBUG*/
1 {, h2 |+ D( U6 B9 B1 G - 7 [4 b$ I: ~. n7 Z( ?9 d
- #ifdef EDMA3_DEBUG
6 r: y* ^: ]5 b1 Y, { R - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 u4 A9 n. ~; k5 h4 C
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
M7 ^. g! _6 s, q( ^. W - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
& n5 s1 e1 z3 v) i: o - #else
/ c/ [3 L% U5 v* t7 ]" K y - #define DMA_PRINTK( x... )
* n# n8 k- W% s; D Z - #define DMA_FN_IN4 v! t' d9 n# b6 b# I" ]5 m
- #define DMA_FN_OUT
( X$ U G: T3 e5 k" h, e9 f, ^) M. { - #endif# V7 }7 g7 d) K5 _8 z- T/ V5 L, ^( P) Q
- & p! _# ~4 F0 l' v. X
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)0 d; x* F' L8 ?5 {
- #define STATIC_SHIFT 3
2 A9 r5 Q% b y. b+ O! }" p - #define TCINTEN_SHIFT 20, G( n" X* a7 R8 Y- [7 z+ b' _
- #define ITCINTEN_SHIFT 21% Y" ]2 @ F+ l! l
- #define TCCHEN_SHIFT 223 H, u# ^. e; L
- #define ITCCHEN_SHIFT 23( R$ t& R7 C6 A# b" X+ V; W, D0 _
- 9 L6 l: s2 Z6 X' E# u% A. R
- static volatile int irqraised1 = 0;& {& F5 q0 g1 P2 d$ t! v# C- \& x
- static volatile int irqraised2 = 0;' v" A, f2 Q+ H4 |( j* x+ p
- ; z* H# S7 E) P, e: d9 {: V
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# y0 Z3 ]2 x7 G/ L - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
D+ l: l1 w1 v2 |( L - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); t" k# q K l) t
- 8 E0 `: X( v8 m7 M
- dma_addr_t dmaphyssrc1 = 0;
) y& V$ b9 x( N; g' a1 t - dma_addr_t dmaphyssrc2 = 0;
/ T }. O% y/ R! H - dma_addr_t dmaphysdest1 = 0;7 V) ]; B$ B# \; Z& F* n% Q
- dma_addr_t dmaphysdest2 = 0;* w9 C- t1 {0 l2 @
" n7 s1 V, I1 { s ^, |: N- char *dmabufsrc1 = NULL;5 u X- @+ O3 I. ], F" ?9 U8 u
- char *dmabufsrc2 = NULL;
9 @3 A8 Z" u; \' u - char *dmabufdest1 = NULL;8 @7 d6 N) t2 o& ]. @% o
- char *dmabufdest2 = NULL;9 W( D) |9 H4 k, c
- 4 d" ~& N9 ]) ?6 O
- static int acnt = 512;" A, a; K o( X# |. E- `
- static int bcnt = 8;9 x( E, Y1 m6 U' d- n$ B
- static int ccnt = 8;
& H1 U m# }, i" w
1 l6 R1 \; F/ Q- module_param(acnt, int, S_IRUGO);$ x! `: a7 ?; g; Q0 h+ J( b
- module_param(bcnt, int, S_IRUGO); I T3 s- a: z* K0 i1 k( L1 F6 M, \
- module_param(ccnt, int, S_IRUGO);
复制代码 $ {- B7 X( f) H1 A
4 E* O! D4 t& Q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用 d- ]. c8 w& A# c! N
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
# L6 p7 \' E3 E& u" r3 u 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 y Q. B# {0 L; I8 |
8 A2 N0 s A" ~ \/ D- E5 |1 N/ @- l/ d
|
|