|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
! W* c, n/ s( G0 X' P4 Q1 Z- [code]EDMA sample test application
% m t2 b1 w1 a2 |* v - /*6 T6 Y) r% h- M5 ~ ~; P$ x
- * edma_test.c
7 M1 O. F3 D; `' u' o - *. ]& ?& \* G- c' s2 |
- * brief EDMA3 Test Application$ J# }6 [) G' v/ f9 _# L8 ~, Y
- *1 Z9 v9 i! X3 j. a* q8 I' B5 d; D
- * This file contains EDMA3 Test code.! v) T* e% V& v7 Y4 E1 d
- *
2 }0 Z- S/ X; m1 r1 h j# @ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# y1 N1 D8 [( y# i l - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* A9 V& c g7 c+ f( F8 r7 B - * TO CHANGE.) X) l$ J$ b* K0 t/ B4 p @
- *
3 h, L/ v7 q2 j0 T - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* J7 L# u3 {2 O; p$ ?
- *( _; B7 y6 N9 ~3 q |& C
- * This program is free software; you can redistribute it and/or
0 l+ w5 a* }. A6 X% R: \ - * modify it under the terms of the GNU General Public License as
+ Z6 J" M* q4 C) e$ T - * published by the Free Software Foundation version 2.& \( y3 h# C6 ?0 R: l7 g
- *6 B) Y9 p/ D! H6 I) R7 l
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. m, ?( a* q! a5 S - * kind, whether express or implied; without even the implied warranty
5 c0 @8 w% S; `: D% s9 y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the3 [4 A; U* a7 O$ z9 u
- * GNU General Public License for more details.
8 G& s. y- }2 c: c; T. {) F - */
X7 d5 W; l2 |' r" S' `) q4 z- J - / @; y( x: L" O& @* {
- #include <linux/module.h>
8 x I8 x* E& ?9 n - #include <linux/init.h>
1 M6 y2 m: a& `/ j; R - #include <linux/errno.h>9 r" N! {( g8 t. s. y4 ~9 m+ \
- #include <linux/types.h>( R0 D1 z: C5 \, e8 Q, w; w9 k
- #include <linux/interrupt.h>
& Y, y, y% A+ P$ ]5 \: P- @ - #include <asm/io.h>
~4 ]; s8 |& u( n - #include <linux/moduleparam.h>
: f1 C) V; D! |, j. ~* m - #include <linux/sysctl.h>7 O5 D' P" R$ z; s) L, P
- #include <linux/mm.h>
4 z; M$ `3 g O1 m% G - #include <linux/dma-mapping.h>
X% C: R: t1 t1 P - / w+ O. T# {; G' M
- #include <mach/memory.h>3 q3 ?, Q8 K4 d4 T. t/ B
- #include <mach/hardware.h>
- X( Y/ Y9 i+ F& A - #include <mach/irqs.h>
3 A! z( z! P6 x* z - #include <asm/hardware/edma.h>
7 v0 N: D: s/ B2 y, x. u: v
0 z4 m- A* F% L# h+ R! v- #undef EDMA3_DEBUG
2 b( m4 z3 d( I' T1 m' f - /*#define EDMA3_DEBUG*/
$ l2 J0 H) K; Y* @% s
, l5 p1 ?. ^- H) G" L0 @/ U$ T2 _- #ifdef EDMA3_DEBUG9 b. H" \& |0 }/ ^' f
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ ]2 M3 ^1 i3 L# D9 O - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
5 F0 Z) Q' |+ E, z; R - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)8 I5 z& q/ ?/ N6 m
- #else
q5 H6 e6 {& d) R3 m" r6 E - #define DMA_PRINTK( x... )
7 `3 k- w8 l) R - #define DMA_FN_IN4 R9 x' B# j/ D% Q
- #define DMA_FN_OUT+ p# Z5 n+ G' r* r" J+ y
- #endif' i. E1 M3 R1 R
& u2 s$ I. Z0 X- u# C* ^- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, I# b7 f5 m6 _/ [# I O9 U5 l - #define STATIC_SHIFT 3. ~/ e. w: }* K C5 O% H
- #define TCINTEN_SHIFT 200 Q- r- @7 G6 R0 J9 r! B# e
- #define ITCINTEN_SHIFT 218 h( U2 l: |( f& ^" ]2 U
- #define TCCHEN_SHIFT 22- J* w0 `- E; a: K) ]
- #define ITCCHEN_SHIFT 23( A# [2 l3 k& |9 R2 ~) ]
\7 W/ L7 U& t/ L' t8 B+ E- static volatile int irqraised1 = 0;( k3 P& e! o- _. f7 h. k
- static volatile int irqraised2 = 0;
9 h+ C* ^+ w" C" ?3 h - , _, }- C) R, N }) z7 t9 @6 o) H
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- W0 y: Y: b3 P+ i5 @; _& E - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. u% M7 H; P4 n! F* a$ R2 w - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 }$ ^/ B& _6 s7 O% e
+ \* }4 i o. X- v+ R. I& G- R- dma_addr_t dmaphyssrc1 = 0;, z. `2 y, R: u3 O
- dma_addr_t dmaphyssrc2 = 0;$ W @1 D7 k( F
- dma_addr_t dmaphysdest1 = 0;
- ^, G) X: Q4 s' ]8 m [( x - dma_addr_t dmaphysdest2 = 0;: A/ N+ G9 D' \' K. |1 A
- & B a e# X" t* ~- N( Q
- char *dmabufsrc1 = NULL;* U; I+ W- r0 Z
- char *dmabufsrc2 = NULL;
2 G& ? y" [0 b - char *dmabufdest1 = NULL;# y% n( n8 K" o- b/ |" U) M
- char *dmabufdest2 = NULL;
( s2 i% ^- ?% z+ _2 \4 s
4 j* P/ E( \& E0 K6 q- static int acnt = 512;- W2 t) U# l) v8 _! u3 q
- static int bcnt = 8;
: {/ m4 ^: C( K' Y9 W7 P/ b. \# g - static int ccnt = 8;8 V7 a( k+ V7 S& E/ k7 C
4 O6 r4 g: D# Q7 g8 r1 M) v/ K- module_param(acnt, int, S_IRUGO);
! a; O0 Y) r& t1 ]/ ]. \ - module_param(bcnt, int, S_IRUGO);
2 A' g0 O v, I - module_param(ccnt, int, S_IRUGO);
复制代码 / I4 N* ?5 Z! [) K( N
6 P# A( A9 P1 ]3 k/ F7 Y/ b# D 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 `; p @/ k: X
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& Q- k% F0 r) |* L, E" A9 v @$ f
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( L! L* u' P: e7 A0 j) s1 ^ R$ u" v- U* Z
9 I5 K- ]4 |# k" X! H9 D6 d
|
|