|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 9 A1 b; f4 V8 L
- [code]EDMA sample test application% Q2 k+ W: e! i. u& w. M0 i
- /*4 `( x" A. n ^: h+ C# @3 M
- * edma_test.c6 U* X1 j% q; u9 {
- *0 [/ L/ X- }# R- _( k& x+ g
- * brief EDMA3 Test Application
f% ]6 ]5 r" s4 t7 o - *8 x7 Q+ C, P0 G5 h. f* c2 W
- * This file contains EDMA3 Test code.
: l# a, q2 }9 ~3 Y - *
3 o- l2 S" A! M$ C" U. V, W5 G - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
; {6 X: G5 Z3 ~+ U# p* [ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
/ m8 V& A) t, `# o - * TO CHANGE.. T1 [: n' a6 C/ _" g$ {
- *
: j3 w5 j0 U2 J( a. x* e - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/( U1 n; q2 W# ]; A# u% o4 E
- *5 p9 a- V3 O; ?+ v5 [
- * This program is free software; you can redistribute it and/or
4 _8 u' E/ U1 a9 \* w% M! g - * modify it under the terms of the GNU General Public License as6 H) x1 R1 M9 A" _; [
- * published by the Free Software Foundation version 2.3 J0 p( G' Q/ t& ~
- *
) b! I* n! @9 T* E! B - * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 @; m; e6 t$ a3 `! c: \
- * kind, whether express or implied; without even the implied warranty
% N I9 m& @6 @4 B! Z. [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! Y2 F- A2 P8 p* s
- * GNU General Public License for more details.) }( _2 Q8 a$ \4 F( n) c
- */4 n% j. q1 E* v! z6 ^; g5 u% I' `4 J4 N
; X5 }8 P6 a* ?* p& R# y- #include <linux/module.h>; F* ]: ]# e1 |
- #include <linux/init.h>
) b2 H; V: d* ` ]& z - #include <linux/errno.h>
6 I. L! u& {1 q |% V - #include <linux/types.h>
1 d K7 d/ ?- [( Q+ i1 x - #include <linux/interrupt.h>
) n2 N8 z3 L& u0 ?6 u5 e6 g# M9 z0 J - #include <asm/io.h>
* v c: E7 a1 e - #include <linux/moduleparam.h>1 m. a E4 k/ Y+ j; I5 v
- #include <linux/sysctl.h>
: g) j9 a7 {( G, j - #include <linux/mm.h>
0 v1 z2 U3 d0 {! ^ - #include <linux/dma-mapping.h>
5 T5 u5 Q# W/ {
) M& ^* s5 _* u- #include <mach/memory.h>
" H, _9 w6 X( u5 q5 _ f8 Z/ S - #include <mach/hardware.h>
' `3 i: B7 Q: U8 g. u6 G/ n - #include <mach/irqs.h>: N4 X" D3 K- B, y X+ E, b3 H
- #include <asm/hardware/edma.h>! }8 P6 D' M4 }$ v- f
( V0 p( u, o4 j3 H' w" i- #undef EDMA3_DEBUG
/ j4 L+ V$ A6 a: g6 k - /*#define EDMA3_DEBUG*/" O+ F1 _6 y" D& h" o+ f
- 1 Q2 S0 a; q; F4 d# H$ q e6 ^
- #ifdef EDMA3_DEBUG
6 g3 q V9 F/ ~- O4 B - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
6 k, J, [5 i; z6 O9 o - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# {; W( d/ V a3 V1 Y7 x: `2 J - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)' x6 x' Z: U$ w+ W5 l4 I
- #else
9 V0 ?: r y7 V9 D) s' V - #define DMA_PRINTK( x... )% Z% t) D, L& `# Q& ?8 S
- #define DMA_FN_IN
+ p+ H, A4 a. N0 i5 I9 Q - #define DMA_FN_OUT+ C' X' M" ?0 q. B2 i
- #endif5 r- c1 b- z) A% j
9 |' @; F3 K& p, r g4 i- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
- N0 n. c9 W. ~, W - #define STATIC_SHIFT 3% P7 [- a# l- X9 b! Y
- #define TCINTEN_SHIFT 20
/ [( r4 R& X; F4 Z9 O# _ - #define ITCINTEN_SHIFT 21
6 Q6 e1 o- F' L% s+ B$ f - #define TCCHEN_SHIFT 22
) i7 R3 Y& |8 |, H6 s! I. E2 I - #define ITCCHEN_SHIFT 235 c$ c. y g, X8 M) X9 K! p% z
2 x& n! N- o: g( q- static volatile int irqraised1 = 0;
' l/ X' `% w+ Y - static volatile int irqraised2 = 0;
) h! n$ ^! C9 g9 r
$ t: \% Q" g+ i- |5 Y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 @4 _3 l4 |: k5 O. l/ [2 f, u
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! k& w7 K: B" O3 M' K6 L - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); {1 {. e# O3 k0 X" U! U
- " p; ~6 v9 w9 I) @, ]3 f! e
- dma_addr_t dmaphyssrc1 = 0;
3 _/ M% s5 x4 O+ m2 I/ d( o - dma_addr_t dmaphyssrc2 = 0;" U H- F' `2 A% s3 N& r- \' B& y0 e8 S
- dma_addr_t dmaphysdest1 = 0;2 w/ S7 T" D J* R* I7 g: b
- dma_addr_t dmaphysdest2 = 0;/ ^" V# P& p5 d" o. Y1 p% a% i4 ^
- 5 \* i3 {! g9 w+ n% z
- char *dmabufsrc1 = NULL;
, e1 u7 v7 z5 t1 K7 | - char *dmabufsrc2 = NULL;* u( r# }7 n4 D
- char *dmabufdest1 = NULL;& s5 @6 H5 m: o2 Y1 n# y# Q
- char *dmabufdest2 = NULL;
5 E! I3 k5 a0 i0 i# c, X/ e - ; q: H* `& i# Y% W
- static int acnt = 512;( w( n8 m" M% W6 ?& V4 o1 l# s
- static int bcnt = 8;
1 f$ z0 |' F. E - static int ccnt = 8;
4 |3 D4 N2 S4 w - % t a5 Q0 W7 |8 A
- module_param(acnt, int, S_IRUGO);- r0 r2 |# ^# P# N; W
- module_param(bcnt, int, S_IRUGO);! [( @5 H7 P+ i: l2 u3 |
- module_param(ccnt, int, S_IRUGO);
复制代码 . |8 e! R4 w! c2 `
6 j6 x- Y: F% u; p* h
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
/ }. B3 j, @% M* s+ qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。4 I; M8 G7 G: m& l6 a1 B
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; l: ?% t! x* p t3 s! E% j
4 j4 E% d! A3 @1 F# U/ v: X
( a5 W9 D* e" Y7 I |
|