|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 " P( N4 H: B- w Z
- [code]EDMA sample test application
/ b: v. }6 S' |1 c* V5 N - /*
' f% l% S6 E2 { - * edma_test.c/ A& A- o" u& C/ P
- *4 w# Z7 r2 E1 b1 j5 j1 n8 j
- * brief EDMA3 Test Application
# b/ n' S$ F4 B8 L) U j8 @: [ - *# ^2 i1 u- w" l( l" e
- * This file contains EDMA3 Test code.4 l1 u; V: O! d* V% x, B9 d
- *
. D+ x" E0 O, p+ c0 d0 P - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# N2 D' h0 K& ?& ?" x( Q, L, P4 Z0 `
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT5 K! X0 ^3 F6 v+ j1 _& r2 _$ m
- * TO CHANGE.1 |6 h$ t3 }/ z% i
- *" e1 p9 O/ o% P' R0 F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
0 f$ G) {* w+ H S3 x6 ^. S3 i - *
1 M3 Z( \! c* ]& o" l7 q - * This program is free software; you can redistribute it and/or7 l( y9 M) X# ^
- * modify it under the terms of the GNU General Public License as+ N7 i6 m6 E. @
- * published by the Free Software Foundation version 2.1 l; f& A9 m3 B x# [
- *& G# g) }% `* u! _" ~6 X# {6 S
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# D( `7 O! Y: x/ u - * kind, whether express or implied; without even the implied warranty1 l( j& B% p( E+ M, o
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 ], B( M# P' J. x: J* d4 L+ R - * GNU General Public License for more details.% Y+ q- L0 ~4 s
- */- {! R4 ~, c) A b& ^
. z* C! k6 s0 ^6 ]& X- #include <linux/module.h># z2 L+ S; q9 k5 x$ Z7 W
- #include <linux/init.h>
6 @6 e3 ?0 \8 W - #include <linux/errno.h>0 I1 `5 `* C) c3 Z
- #include <linux/types.h>' w( u" r+ g8 x" q
- #include <linux/interrupt.h>
4 v9 I9 d, f; c, c9 _ - #include <asm/io.h># H. q2 G$ [# f( o% A7 X# L) I
- #include <linux/moduleparam.h>
, D( |9 s5 t d" z T - #include <linux/sysctl.h>+ ^! i+ l/ E _
- #include <linux/mm.h>) j4 J; F p( o) c! a
- #include <linux/dma-mapping.h>! u {! ^* I1 D1 |: l1 ?
7 H4 P0 D. c; @4 Z, w1 Y- #include <mach/memory.h>
6 k! B& b; O- l8 H5 R - #include <mach/hardware.h>! y7 ]: F+ p% }" j2 G
- #include <mach/irqs.h>+ z7 ? t) N# [9 t% P6 K
- #include <asm/hardware/edma.h>
5 c4 r( E% V6 H) K P! x* K. {
. K+ r0 f; a. u2 T- #undef EDMA3_DEBUG; D+ p. |! t5 |1 Q. t
- /*#define EDMA3_DEBUG*/; E) H6 Z- J( ^* l# ]
- $ L( n# o. I! I; f8 A
- #ifdef EDMA3_DEBUG7 A0 h0 j1 l. A1 Y( `8 l( K
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 V7 m `; b( Y& Z0 ]8 [
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
2 u9 H3 } ~3 L2 o" p# D/ d0 P5 g - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)1 G% V6 y% P4 n* `; I" _/ i* C
- #else
. x- G' p( D9 b7 L5 q/ ? - #define DMA_PRINTK( x... )
0 N" D; P& |8 f1 P) I - #define DMA_FN_IN g2 F2 J! {3 d/ d8 n
- #define DMA_FN_OUT
) d* X+ s m; y, H4 H% E - #endif
T m6 H/ O. s) \! W - ) i$ j) k$ E; m4 [4 }
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
; C* O; j6 `2 ] - #define STATIC_SHIFT 3
0 u* F- } \/ r( |, d - #define TCINTEN_SHIFT 20
* W0 y) W+ F& \ - #define ITCINTEN_SHIFT 21
0 o0 T( W {' K3 _# I6 e% i - #define TCCHEN_SHIFT 22# b& ]! s1 o( c9 M) h
- #define ITCCHEN_SHIFT 23
" J# H$ H: y% Q3 \% }7 w - 2 K j- K9 ]0 l7 }3 T
- static volatile int irqraised1 = 0;
" H1 b3 {* T2 \8 M" d4 E - static volatile int irqraised2 = 0;
$ U9 W7 r) Q- s. b - 9 S7 ^5 I' S. l& O3 a$ O
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
\) E. {. U$ _% w9 K" P% U - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: ?* J, ^2 A( ?: W" F8 Z! R - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 M1 O( N+ m7 m& t: \+ \8 e5 Z. j
- " V' t' c& J* K5 K# a# o% m) X
- dma_addr_t dmaphyssrc1 = 0;) B" j0 U; S- k
- dma_addr_t dmaphyssrc2 = 0;" [7 F* p: F0 w6 v
- dma_addr_t dmaphysdest1 = 0;
3 }, c% |4 ?5 f- \; N% B - dma_addr_t dmaphysdest2 = 0;
% Y1 V4 ]+ q% ?& O/ e
& E% t5 K6 `& {- char *dmabufsrc1 = NULL;
, h$ s: ^, ] \2 I - char *dmabufsrc2 = NULL;: x7 j8 C+ X1 d
- char *dmabufdest1 = NULL;
7 [& s( ^! L0 ]5 {" G - char *dmabufdest2 = NULL;
+ \7 h; s: u3 F8 n
Z6 N7 E U7 x9 x f' i- static int acnt = 512;' Y6 H, K( K1 }& Q4 X) M; J
- static int bcnt = 8;! p4 T5 D' _3 E# L: r4 X8 ^! z6 Z
- static int ccnt = 8;3 R: ~& X6 t+ w0 p* {
- 4 s0 D$ \ Z6 I+ A( W9 t
- module_param(acnt, int, S_IRUGO);
$ n Q5 M6 T) `" A2 J; Q/ D - module_param(bcnt, int, S_IRUGO);
0 v5 ~* l6 F+ ~ - module_param(ccnt, int, S_IRUGO);
复制代码
7 S; G, r$ C, z; I! }
) Z2 u7 n& B+ c" O7 ~* y0 \: \ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 g: N8 u ` w1 U' P; m, }+ g! Xarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; V$ C7 G+ o$ p4 B 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。& a6 l9 q0 @% Q# |
; F( _! r6 J! ~' N4 }: I# ?+ e& M! a. T6 v4 s" z
|
|