|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
8 ]9 L7 {8 S7 Q4 m& n- [code]EDMA sample test application3 E6 j, U* x/ @, o
- /*: l1 P* o1 Z& h8 K
- * edma_test.c
1 Y) c* w9 `& M$ _: M( P C& z - *- U3 V6 l1 I8 L/ e, Q s
- * brief EDMA3 Test Application
2 ^5 J; c9 j1 J4 a - *# N! C: n6 {( Y5 S
- * This file contains EDMA3 Test code.8 d7 `" k4 x9 s0 y
- *# u* Y% X2 J% }# P# V
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
+ O& s2 t5 v9 W2 E/ T$ f" P% e5 Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: _' j& Z# X C+ a& N" o) R - * TO CHANGE.
( Q: ?# O; Q$ {: e3 }9 ~0 v- O# u - *' O1 h9 k: c& _( d
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
@' A( O' P' }7 R ] - *
- h. ]( j# s) \1 ?! U - * This program is free software; you can redistribute it and/or7 \# n: Z/ [5 ]4 `
- * modify it under the terms of the GNU General Public License as
# d/ }: ?* ^' V. f# E$ M4 i - * published by the Free Software Foundation version 2.' V$ L' z6 }+ C' H4 e# w
- *" A' G8 y+ m2 i! Y+ J% B8 P
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any& v) j5 I2 D" c5 e3 R
- * kind, whether express or implied; without even the implied warranty! z1 u2 `+ m# A; J; L1 e9 ?& Q
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the4 |7 T* E. `$ t. m
- * GNU General Public License for more details.3 ]" m3 B7 p/ Q7 _* B7 q1 \
- */6 b: C6 r* B8 |) g
. B9 P3 H& `& a2 x) v- e7 z+ h& t8 }1 Z- #include <linux/module.h>
' z* F* d1 R3 Q/ I - #include <linux/init.h>
, L6 G. i! c8 E0 N8 L0 } - #include <linux/errno.h>
% z, J+ b' c; H$ {+ U - #include <linux/types.h>5 |7 V+ f, K3 _
- #include <linux/interrupt.h>
0 z$ T& B2 G: n0 g& p/ t$ I - #include <asm/io.h>7 @! r5 d0 N0 h2 E" f+ f
- #include <linux/moduleparam.h>7 a- q7 n. O, H- G. ]7 J9 ^
- #include <linux/sysctl.h>
4 X2 @' F4 A! \; }' I( y6 |* F - #include <linux/mm.h>1 R2 O7 ~& Q) c8 h# x, M
- #include <linux/dma-mapping.h>- \$ U9 V; g1 u3 G) M' j
- " B1 O2 m5 a7 Y- Y5 `2 a# f/ L7 t5 h
- #include <mach/memory.h>
" g& d* M1 M7 E1 Z7 y4 ~, s - #include <mach/hardware.h>
0 p" K r5 h) L0 D/ X - #include <mach/irqs.h>9 C. Y7 {) J7 v y6 R
- #include <asm/hardware/edma.h>
- G- T! I Z4 f# _9 S4 d) K
9 F- [! L% Y' v- j+ L- #undef EDMA3_DEBUG- z9 t+ U1 }5 H: X8 G# j8 [4 Q0 N
- /*#define EDMA3_DEBUG*/+ t/ M% ~# L8 o2 j6 d& a: f' l" W { j
4 F9 _) C0 J2 n; S- #ifdef EDMA3_DEBUG
" h7 }& S+ Z2 L - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
" p; f* B$ v( Q1 l& C - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 y3 U7 r* C2 g5 V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), u) B, d+ `) Z0 M: _( O3 l& e
- #else
7 b4 B: }4 o7 H X, p( h - #define DMA_PRINTK( x... )
. H3 w0 Q% j4 j W. r7 B - #define DMA_FN_IN) e9 T: e& B) n, e; Q- z* C
- #define DMA_FN_OUT6 S1 g5 J' _% J* C
- #endif
/ u" u7 I/ F0 X: j$ a2 S8 @, p
# b4 ]) I! ]$ M0 ]- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
4 G' ^7 u) y! t& d8 d - #define STATIC_SHIFT 3
' Z. V, t3 D9 K- J) J9 [$ T8 c - #define TCINTEN_SHIFT 20* F( r, e0 `4 Y/ I3 f, B
- #define ITCINTEN_SHIFT 21
( T. A {6 m& i$ H h - #define TCCHEN_SHIFT 22
1 T$ _: X! D+ d - #define ITCCHEN_SHIFT 23
& T# l( h5 _/ N* t) q - 2 Q; j, X- l- }- y3 S% \' P
- static volatile int irqraised1 = 0;! t( f+ b) }. _/ O
- static volatile int irqraised2 = 0;
1 w6 R- j9 t& y$ Z3 Q8 W, h
4 B( s, Q* d. s4 w1 i/ A/ y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" ~( \$ k) |8 t+ g& v3 t6 x
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# y" y' q5 G( I; z/ ?$ r3 n
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 @ I C" u0 l( H R - $ U. z2 m" |5 i4 Z( {. M
- dma_addr_t dmaphyssrc1 = 0;
: p3 q6 }1 ^8 W( y7 W5 A% M. S - dma_addr_t dmaphyssrc2 = 0;
# }3 i& m6 ?# Z& @ - dma_addr_t dmaphysdest1 = 0;
) x- E3 P3 }# M4 r% I- ?+ S - dma_addr_t dmaphysdest2 = 0;
5 Z, ?8 W1 x' N - 0 z( E4 P Y8 a# R
- char *dmabufsrc1 = NULL;2 I* s+ u+ l% k W. I9 u& f
- char *dmabufsrc2 = NULL;
7 V: J; B0 L8 G4 X0 `, _ - char *dmabufdest1 = NULL;3 D( j; c1 d* G3 Q& F9 j, i, G
- char *dmabufdest2 = NULL;
: U+ A+ x0 K( s1 P
/ A1 L! J1 c% ?/ l- static int acnt = 512;4 A: ]0 q+ S0 B, \
- static int bcnt = 8;/ f" H2 Z% t5 X8 ?0 q
- static int ccnt = 8;
* o8 P$ J( M& w7 H4 R# d" E - * R$ @7 k& k; m- z ~! Q" a
- module_param(acnt, int, S_IRUGO);" O& Z! l5 X" Q
- module_param(bcnt, int, S_IRUGO);6 ]6 x) T+ E/ U6 F: c! q
- module_param(ccnt, int, S_IRUGO);
复制代码 $ d5 ^, z* x3 T) Y f/ n
- c |% i, X$ y; S: U- T/ ^
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
+ {% J9 J6 s3 S; C& w& \' h, 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& C1 A6 _% ? V6 h6 w5 z
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* h' L3 M0 X) t+ A; f# d+ `3 O
) F7 m/ M( Y. S4 t
( Y9 k/ e( Y) s/ D |
|