|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
7 z1 A5 D- d6 g, H- [code]EDMA sample test application
* }8 P9 y# ~" X, G - /*+ n; m( t5 Q8 X3 V5 _
- * edma_test.c
1 d- L' `! e1 j/ B M" l4 L/ D7 c, x8 S - *' D, B2 ^7 z! v! P: e8 [1 O0 v8 w
- * brief EDMA3 Test Application
( M3 m ~/ p$ w/ z0 ?3 v6 Q - *
& _* j- c9 \* C) l$ g" P. f) y - * This file contains EDMA3 Test code.
^ F/ f9 }$ ]3 b; H4 e - *, _" u: o4 d2 o/ f3 |% r
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE! `0 g3 ?( e- E$ R. u
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) M. A! N8 q% S2 j5 x+ z/ z7 V - * TO CHANGE.& q, V* O: ]5 L3 M* ]
- *& O4 J. t4 U/ _4 H( a
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
) V$ Q! w+ ^# E - *
9 T- S1 h) k! Q% X E! @ - * This program is free software; you can redistribute it and/or2 ?8 x0 U# V0 d0 g" z# C$ |
- * modify it under the terms of the GNU General Public License as
$ P9 O4 W8 s0 O( m+ I/ P$ U - * published by the Free Software Foundation version 2.: g" X- N+ H% h% ?# Y2 O
- */ g+ g: S2 q* i9 k6 q8 L4 x% i& Y# D
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any4 K+ [) S9 c$ k8 w8 A4 S4 X8 X, d
- * kind, whether express or implied; without even the implied warranty- _" |0 i+ L+ w( B* f) }5 _
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' _# A! y- F/ Z8 \ - * GNU General Public License for more details.
. {& ~* \& e& M ]' ^ - */. Q5 F N7 U! ~5 M
- ( P3 k8 H4 K$ _/ Y$ J! j' w
- #include <linux/module.h>* E9 o0 p, g) e( Y" z
- #include <linux/init.h>
5 ~! }* X7 r) l J9 v/ t: @1 z - #include <linux/errno.h>
% o: {$ d; x, Z. s$ [ - #include <linux/types.h>+ U2 N, X$ L3 d
- #include <linux/interrupt.h>! n( D% U# }0 H( \) h& V
- #include <asm/io.h>1 [- E' S( Z- y( `2 H
- #include <linux/moduleparam.h>
) v1 X! C0 Y. A+ a: O4 R - #include <linux/sysctl.h>3 N3 m8 o+ T/ ~# D6 B+ W
- #include <linux/mm.h>
" k+ r& `) N1 {/ M - #include <linux/dma-mapping.h>/ B$ q9 f/ m! W7 \0 a3 G/ t- \2 y
- 0 _4 i. w9 Z) h" ^8 s) A8 A4 t, F
- #include <mach/memory.h>
" ^. J" m1 B; b! |0 C. S1 T - #include <mach/hardware.h>5 {' [4 S/ L9 z) r! y* e9 p& h
- #include <mach/irqs.h>
" r$ h |% y' r' m5 e - #include <asm/hardware/edma.h>5 M$ v5 K0 i/ Y
- 4 u3 ^+ T; L8 }; S* t/ ] B" b1 c
- #undef EDMA3_DEBUG7 i9 k- _7 \* b+ [6 l3 M9 m
- /*#define EDMA3_DEBUG*/
" f3 g' {3 S3 @7 t) n3 w3 u
7 B- k: @' ?2 c2 i5 S6 C2 K$ |2 Y& P% k- #ifdef EDMA3_DEBUG# V% W5 ~3 ~: l" C5 r
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 J, c* [' i' e3 y
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# d2 b/ z6 Y0 @" J: g. O - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% H) ]( U2 v" H0 H4 M( C
- #else1 E: G+ I% [$ r/ c
- #define DMA_PRINTK( x... )
1 b8 i8 W6 x: ^7 r- P) ^: { - #define DMA_FN_IN& @% q7 q# T0 q: [6 N0 |
- #define DMA_FN_OUT3 Y" c% u/ h( g8 v* [ U8 P4 o9 V
- #endif
0 e0 `& d% X/ J4 r2 z
( ~" Q2 X' ?0 `' R" T3 `6 q- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 |; \; ^2 y6 Y
- #define STATIC_SHIFT 3
, _) A& ?2 ]: Q7 b - #define TCINTEN_SHIFT 20- ], z* k. c6 |3 l
- #define ITCINTEN_SHIFT 21# D, y& C; X- D) L" h
- #define TCCHEN_SHIFT 22
1 ]" Y n; E. A$ _$ Z- y# r - #define ITCCHEN_SHIFT 231 C! H4 g" M! v2 X& P
- T: {: G8 H2 _& z Z: Q) x8 x
- static volatile int irqraised1 = 0;. j6 W- T$ x: u) u+ @" [! `3 ^, \
- static volatile int irqraised2 = 0;0 h, A e# r) F4 q, l8 k7 Z
) k' U s& b6 [) e- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ ^* L& `+ k6 e! F3 R! b
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" d- ]4 D+ n# l; a# `8 M- ^: Z - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& D# Q6 R2 s1 o: b8 e! j( A
( K, { K C* N( i- dma_addr_t dmaphyssrc1 = 0;
4 W- [$ s1 q K - dma_addr_t dmaphyssrc2 = 0;8 Q4 a w' j& G5 p+ F! Q$ f
- dma_addr_t dmaphysdest1 = 0;& l( \3 k/ w Q6 K* a0 E- U
- dma_addr_t dmaphysdest2 = 0;
! x, ]1 ~2 Z6 @5 p' @) Y: `( ~) M - , m7 B" T- B& A+ Z( F- @
- char *dmabufsrc1 = NULL;3 u! i0 |* O5 U5 K
- char *dmabufsrc2 = NULL;. j; h8 U# z( S) t
- char *dmabufdest1 = NULL;) Y9 o4 @1 b" x* p
- char *dmabufdest2 = NULL;( x8 ^+ Q) \- r0 q+ E7 F
7 r/ z' t" p+ O; A2 q' l- static int acnt = 512;5 W7 f; I! y1 l- ^: l- R& D
- static int bcnt = 8;( k7 I+ m9 \ [3 j# d6 ]
- static int ccnt = 8;$ c& `4 R& O2 _3 Q* V/ f9 R% |
- 4 e, i( N0 Q! b* s' [% e
- module_param(acnt, int, S_IRUGO);. t8 D$ F1 a" W, i1 o/ v+ I. M# ?& F
- module_param(bcnt, int, S_IRUGO);
1 Y; l9 v+ w& _; t8 X3 K3 y - module_param(ccnt, int, S_IRUGO);
复制代码 + @) t) e% _9 @2 o9 B! m
+ h6 ]0 l8 J8 R( u+ [+ D. h: G 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用5 x1 x& y; b7 w* H* F) K" ]
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。3 X. T% U$ a( M
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
4 Z* y, e; e% T$ ]$ K
* D5 z) [* ~" N7 i5 k( a0 H3 i2 V8 {+ z* m* V
|
|