|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 5 j+ i& m% e2 z
- [code]EDMA sample test application3 g4 I( `+ C: I( T
- /*
/ q8 F1 N& v- _/ a; u/ B - * edma_test.c
+ P3 H" I! h0 J+ o/ v3 z- d0 U' A7 E$ b - *. z7 v3 }3 G* k8 y( b
- * brief EDMA3 Test Application4 V0 ], L; r) e/ X$ u8 `6 C2 i# U
- *
2 [1 o5 r. w" r. s0 Z9 r - * This file contains EDMA3 Test code.
9 h& q. p0 |# J/ R% ]' A/ { - *
$ r0 x! z2 G; v$ r3 @ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
) W) G) ^) a8 `. o' Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
; b( }; w! ?+ [9 Q - * TO CHANGE.
# q& A- o- F8 n- v1 `4 W - *
) x/ l" \4 f' U% ]# Z0 m6 \' d4 x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/% T* n! a$ n! i# R
- *
* S( O, T/ K# |8 q/ t - * This program is free software; you can redistribute it and/or0 p H" E& Y9 `" }) K* x
- * modify it under the terms of the GNU General Public License as, j- j) c' G8 _) M' C* m
- * published by the Free Software Foundation version 2.
1 j; y$ e1 k! G. I - *, E' E2 _% o3 [" S8 f
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any) d$ v+ k! r1 c0 L2 L) J9 H
- * kind, whether express or implied; without even the implied warranty, O& y7 ~0 A Q
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! h: w: ?" k! i S1 Z0 y8 Z - * GNU General Public License for more details.
& F7 A ?8 w5 p# R* H6 m# Y - */
. W4 L8 i2 _( y2 r' H
2 Q6 R) g2 X2 A( l, |: \- #include <linux/module.h>
' Y; F1 S3 ^% D3 f6 m/ U - #include <linux/init.h>
/ l% P1 ]2 v- W6 \4 q$ y$ w - #include <linux/errno.h>! s- J$ L& }" }7 r$ Z$ o
- #include <linux/types.h>+ [' ]( r9 L9 M' A8 Q. N& \
- #include <linux/interrupt.h>
# \: N" d. Y, x) O' A. a - #include <asm/io.h>
7 z+ V. d& Q8 H5 u& W+ g - #include <linux/moduleparam.h>
3 D4 G+ ^1 r- B- } - #include <linux/sysctl.h>
% p( R, | A+ Z2 { - #include <linux/mm.h>/ ^7 P6 d% N5 B5 R7 |( S
- #include <linux/dma-mapping.h>/ F. k5 p7 l% W3 `9 U5 v6 E0 [
- 1 P% v( P/ D; t* H
- #include <mach/memory.h>
, z" k& D7 l' H$ {2 ^ V# S - #include <mach/hardware.h>
4 L9 Z2 ^0 l6 b( U# ]: @ - #include <mach/irqs.h>
7 M; @& \4 X& C - #include <asm/hardware/edma.h>
! A3 I/ ~0 L4 T- G' j
/ H% R) N4 V1 N- #undef EDMA3_DEBUG! Q! r7 C0 y( k- x0 _/ Y
- /*#define EDMA3_DEBUG*/
$ F3 \! E( w$ |, V1 N
, ]6 E; I5 p* k% e0 [- #ifdef EDMA3_DEBUG" ^* _0 ^. Y) ?- ^5 p B
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 V- @: B6 l- I3 L( }( P0 U0 w
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# |7 \/ E7 l2 r6 U& M - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). X$ i& M: k6 h. E, h# Y( `9 |2 \2 u3 m: ~
- #else8 y$ Y3 ~ @; [) O# W
- #define DMA_PRINTK( x... )
- T$ ?; F6 c& x1 f* p - #define DMA_FN_IN
6 L1 W+ V4 R4 W" ^" }4 a - #define DMA_FN_OUT
8 z: B& F, n' M - #endif' P6 y" D/ g" }% q! j s" e
- 6 j7 l: k1 x- |. P. [" o
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 D) Z" e2 m4 E& D - #define STATIC_SHIFT 3
( G( U1 N5 C4 X - #define TCINTEN_SHIFT 20
3 R4 B' c( k: P; R- s7 C - #define ITCINTEN_SHIFT 214 J( ^+ ~) b- j) ~. v
- #define TCCHEN_SHIFT 222 v; @9 @- o, g' \
- #define ITCCHEN_SHIFT 23
" R6 B0 j+ M3 m0 J6 ^4 d/ k - - K) q! Q. K9 X K5 j* c% k
- static volatile int irqraised1 = 0;) e( S. U3 Q( L. ? t- O
- static volatile int irqraised2 = 0;
1 d: \. k9 @! b* m7 N% W8 \* s - - \$ _4 a3 t9 O y% A \( c
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- _" E% E: o- C9 Z* ]) w6 S& k% o
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- S& N9 o) U+ [$ ]
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: @" i# o3 f, C - ! I! p+ K! r* F: x1 O2 _/ _1 Q7 m
- dma_addr_t dmaphyssrc1 = 0;7 I7 }3 L( q& a0 n! y7 g0 S" k4 o
- dma_addr_t dmaphyssrc2 = 0;
/ v) X4 z" G0 N$ e - dma_addr_t dmaphysdest1 = 0; ~7 k5 r6 h5 l+ i( @- Y, s
- dma_addr_t dmaphysdest2 = 0;
4 d- h! ~% M, d7 y$ @ - 3 B3 g, c7 Y5 Y, N+ M( N% \; k, V
- char *dmabufsrc1 = NULL;6 D9 F9 u2 I1 y' v; f( x
- char *dmabufsrc2 = NULL;
$ b9 S' z- I% @; o - char *dmabufdest1 = NULL;4 E; e0 [" |0 L1 C: t
- char *dmabufdest2 = NULL;
7 F, ]) r3 w6 { { j
7 |0 {; E2 k: q, t- S- static int acnt = 512;
" u7 Y8 G- m: E8 b6 u - static int bcnt = 8;
7 a0 p6 H6 b2 W' C2 F9 g - static int ccnt = 8;
2 G5 q/ Z; d* d4 n" T' u - - E2 `( R- Z0 U2 }: J
- module_param(acnt, int, S_IRUGO);
) V! g/ ~ I/ p7 p - module_param(bcnt, int, S_IRUGO);- M5 c, T. @0 y( i8 d) J
- module_param(ccnt, int, S_IRUGO);
复制代码
0 {6 E; O: v" S- i6 x$ e9 }5 m! i/ F
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% B) K2 h3 Q0 |. Narm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ W C! H7 K( y% v' }
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。) b* K2 ?# e9 N' [8 x/ q0 X
) t$ v: o' y6 T
% w+ {4 j( N2 d$ a5 n+ C |
|