|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! g8 ]* S+ R: q/ R1 |3 o: d
- [code]EDMA sample test application
8 N: Q" a0 I$ ^ ] - /*
6 q* W3 u% r; D# T b" h, C - * edma_test.c# G0 V [* d& E6 W+ @) i. C
- *9 K! o, Q" R3 I* @" K8 A
- * brief EDMA3 Test Application
8 F8 b1 X/ G2 R5 A: k+ Q; E - *
4 c8 _& D6 }' V- ]" b( x% K - * This file contains EDMA3 Test code.3 V# x* N* i6 F/ }
- *
! k+ t# G5 Z3 } - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 t7 _( O- Y1 T8 o - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) I" u6 s6 J- K: K1 k) A! r - * TO CHANGE.5 q; ]; @3 @4 J5 t9 }& Z" B
- *3 @6 ^. Y$ H0 E( A9 e' {! J4 m% Z# L- c
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 H1 d. v8 g9 k1 t9 ]$ v' B - *
) g$ g0 a' w0 ]8 {4 m' F - * This program is free software; you can redistribute it and/or& K& z2 Q5 y9 H8 @6 F- r5 ?2 z
- * modify it under the terms of the GNU General Public License as: P8 X. N+ L1 Z3 e: I7 j1 h8 N% U# Y
- * published by the Free Software Foundation version 2.
D) M. y0 G( K) S8 o% W# m - *: n; [( v* N$ E) m! z- A
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
a" a% Y7 ?' D' o4 ]; U - * kind, whether express or implied; without even the implied warranty, R! g4 N9 F" B+ m' j e
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
: \" z; j" d# f T& R - * GNU General Public License for more details.. x4 u. ~4 h3 G) [% }2 I
- */; |' |0 t' Y, C p0 @8 o0 b
V: g; S; [' q% g- #include <linux/module.h>
( E9 _3 D! `+ A( y5 n D- u1 J - #include <linux/init.h>/ u4 i8 U5 P- Z1 G w* `! o& Z
- #include <linux/errno.h>
# d; {! m- `1 U7 v- ?3 r( u4 F* V - #include <linux/types.h>
- L- B( {8 T/ J: ? - #include <linux/interrupt.h>* s. [8 m* t5 z' e, R/ U0 v+ A
- #include <asm/io.h>
/ e" T+ r9 p2 V- w# W+ |7 C* P - #include <linux/moduleparam.h>
1 f: z8 d9 L8 Q: G+ a2 G/ c7 T - #include <linux/sysctl.h>
# k1 S, F" ^4 k2 d - #include <linux/mm.h>: h) V& e: Z8 l$ W I$ I% [! R
- #include <linux/dma-mapping.h>- G. O V: y" i' [- D: ^
& U3 D& p0 c M, c- #include <mach/memory.h>* o' s) R3 U: m# x; g
- #include <mach/hardware.h>
6 Y- O2 _3 X/ R$ ^ - #include <mach/irqs.h>
. J' T3 ^+ Q* q. q5 V/ |9 E - #include <asm/hardware/edma.h>2 x5 x/ l! N( Y9 e* z+ H8 L
- 7 ~! z! Q8 X+ e h( O3 S; e
- #undef EDMA3_DEBUG: \8 ^+ d6 M1 v) M; Y4 G, R
- /*#define EDMA3_DEBUG*/
) y# ]$ A! U6 {2 `# r
0 p. B8 q3 D) i) w8 F" m- #ifdef EDMA3_DEBUG4 }- T/ N, k" ]1 L
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
3 v2 w6 |) w& x4 F - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 n0 i% O: E3 ~ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
, }: a2 p" E% P6 w - #else5 u6 ^& U- M+ @' f) L. w
- #define DMA_PRINTK( x... )
9 `4 f' V1 O) |, ~ - #define DMA_FN_IN2 P- B$ c( P7 P" H% y
- #define DMA_FN_OUT
3 O: H$ ?. r7 Q! ?2 L, v, e - #endif, z( f/ j4 K o0 g
- - ?3 _$ t. l0 o6 j2 w
- #define MAX_DMA_TRANSFER_IN_BYTES (32768) B4 z% T' R% b8 n2 a
- #define STATIC_SHIFT 31 g3 L: L6 a% V* A& g- ]
- #define TCINTEN_SHIFT 20
5 ^- Q7 M( H5 _6 w! t1 z. G* i8 T - #define ITCINTEN_SHIFT 213 V" T Y% J. B
- #define TCCHEN_SHIFT 22, @7 M' G: {" q$ M! A. V) g
- #define ITCCHEN_SHIFT 23
) Q- R5 n, G+ ~( \9 s
3 i- Y8 L9 T; f6 A/ N# A, S, Z; p1 I- static volatile int irqraised1 = 0;
7 V N& B3 P- g! Z - static volatile int irqraised2 = 0;$ ~# O& X0 U0 X5 R1 c
) k6 d$ R0 N" C$ F) H9 a# T- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' w, m; y7 N- T& l
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% [4 c3 p0 m& i5 v' f9 a - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ I* Z' C( D9 R0 Z( j3 A4 d - # U- s; i0 O3 W# k+ ?7 I0 p, {
- dma_addr_t dmaphyssrc1 = 0;% g" _. z" q% t h$ T" [
- dma_addr_t dmaphyssrc2 = 0;* \5 n6 B) D0 j5 w- i: c7 ]
- dma_addr_t dmaphysdest1 = 0;
) Q& i' N% h& L6 |: ` - dma_addr_t dmaphysdest2 = 0;& m/ o& f( _7 B* I; u/ u
- + N* ]6 `5 \2 S( v% ^% z& y7 l
- char *dmabufsrc1 = NULL;3 H6 q; ]. J8 [# B7 O
- char *dmabufsrc2 = NULL;- X% G" l$ V2 V: s
- char *dmabufdest1 = NULL;
) m9 H/ z* s) _/ |4 B" v - char *dmabufdest2 = NULL;
2 n1 _; f+ {$ q5 H3 k2 H+ v0 t - & z" Q8 y* _4 R$ {/ F9 d
- static int acnt = 512;/ j) R$ R7 R- L: |' |# b
- static int bcnt = 8;; M; z6 u8 Q* @5 y. L }: K5 n
- static int ccnt = 8;) q# a8 h. K: n' W
- . ~& }. _1 F5 S6 q
- module_param(acnt, int, S_IRUGO);
4 n0 a+ f4 X* f1 x$ G - module_param(bcnt, int, S_IRUGO);
% I* Y& E- N4 o: I# |& P' Q, K& v' ? - module_param(ccnt, int, S_IRUGO);
复制代码
9 a$ p9 t t7 {
- J- q3 a0 r$ W" h) b 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
, ~ {8 X5 a( O8 m: L! u) d8 Q9 Larm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( X, l# X# r! q4 w- V+ [ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。# b) X: A6 ?! K9 i2 _
3 `& Q) C0 v( J+ M7 D" q y" }5 V, i9 [
& Y$ ~: I( N1 i8 Y |
|