|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- j) y' k1 T( m3 N# A; y- [code]EDMA sample test application
) l7 g/ b* W! ^- e0 M - /*+ j( k' n, u8 s9 q' Y
- * edma_test.c
?- U0 u4 I- F. _ - *0 Q8 V( t9 {/ P$ G9 D3 ?
- * brief EDMA3 Test Application
@5 [& V$ j5 S0 w$ e S X - *
- c' v+ I& N- C$ V. f. p - * This file contains EDMA3 Test code.
; L1 d' _4 J* p6 p5 u( s - *
1 Q( q; F F( [- e% l6 R( ?$ O H - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
& ^& e0 e, m5 u$ {0 z - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
5 i4 B& @5 g7 C/ r. K - * TO CHANGE.
) v8 H6 P5 y4 O, v - *( q& H. S' \- r/ ]
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) a* y( }# B" H: k3 m; g* ]
- *3 E! L" ]2 D8 M7 N8 H( u
- * This program is free software; you can redistribute it and/or
+ R# `: [' l; a' i, [8 q - * modify it under the terms of the GNU General Public License as
4 N1 t6 E, M% l4 P - * published by the Free Software Foundation version 2.* O( h4 q2 w W8 F
- *
2 J4 v% l% v; Z ~ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- t. r0 W, ]. |( m4 u) K/ C% } - * kind, whether express or implied; without even the implied warranty# h/ T& L/ O, g( B
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. y: w$ u/ J4 C- c: w
- * GNU General Public License for more details.
! s& T4 A& s" [2 ?" j$ R - */9 A1 b4 m/ |& n3 }2 ~1 ~1 w
- ( ?) [) r' x( B0 g
- #include <linux/module.h>% z' P F9 T; g2 Z
- #include <linux/init.h>( b; J9 e3 Y0 T0 w3 H( r5 C
- #include <linux/errno.h>. Z% v$ Y- s% j( ?
- #include <linux/types.h>" i/ K) f# c" G
- #include <linux/interrupt.h>7 a( h1 l- ]1 o5 T. b: @
- #include <asm/io.h>1 @' P' a- H; F# N r( O
- #include <linux/moduleparam.h>. }5 K. j% n& b1 C! X/ z8 g
- #include <linux/sysctl.h>
! G% i5 n3 j& L+ l9 F% W' K - #include <linux/mm.h>
f( w* c1 P' P9 V& a, \2 }( h - #include <linux/dma-mapping.h>7 H$ n4 ]. ~' E6 K1 _9 R
- * p& E" R4 H& t4 X
- #include <mach/memory.h>
+ I8 w) }" A. y6 n( t - #include <mach/hardware.h>) ~1 t( P0 }5 m+ B$ U% C
- #include <mach/irqs.h>
f/ t2 | h2 H3 W - #include <asm/hardware/edma.h>
% |/ b: a5 c1 r/ W3 _' Q0 r v
7 `" p, f' l+ b5 h- #undef EDMA3_DEBUG
2 S* J e0 R0 o* t9 { - /*#define EDMA3_DEBUG*/
% P: j0 L6 x$ i0 @
8 U- _, C4 R6 r1 O8 B, o& W$ O7 R5 D- #ifdef EDMA3_DEBUG- m" X; Y$ i" ~7 A b+ [8 {
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
3 y8 j% y3 ?* ?! I( w3 M - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)1 ]7 t p% n& T5 u1 s9 h. g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% O2 J8 f: Q' N2 d, x. h- j0 V
- #else
7 w T0 p" y: s( j/ o! O' i - #define DMA_PRINTK( x... )
5 A# S8 l; q$ l2 D - #define DMA_FN_IN, ^, {* [& f+ `+ a
- #define DMA_FN_OUT
5 K6 c( r) c( w) t; M - #endif
; _( ]5 L& E# Z; t+ N - ) i/ ~( C) m$ U2 Y5 Q. [
- #define MAX_DMA_TRANSFER_IN_BYTES (32768): }7 e2 Q2 {4 w' Y
- #define STATIC_SHIFT 3$ ?0 Q7 I5 N5 z5 V+ ^! O: J( D
- #define TCINTEN_SHIFT 201 h4 k% |4 X0 a: f, {
- #define ITCINTEN_SHIFT 21
# I0 r) ^2 u" m' a) n - #define TCCHEN_SHIFT 22
( v# v3 @3 J' K) U' k - #define ITCCHEN_SHIFT 23$ h- V3 D) J$ ^7 n6 A
) j, h7 M0 {& v9 d' ?9 d t- static volatile int irqraised1 = 0;' X! o; X, f" W+ L
- static volatile int irqraised2 = 0;
, h' Z8 A! K# s; E( m - , S" R- S0 p% U
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; m1 M, @3 ~2 z. E% k% J - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 Q. }) ~1 v9 }5 ` - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( k6 b/ F( [ ~. V
7 U. g- Q* E/ k, k& c& O9 B- dma_addr_t dmaphyssrc1 = 0;
! B! F9 s3 @5 y$ l9 u - dma_addr_t dmaphyssrc2 = 0;2 A; N. w0 L; W9 C. j; t
- dma_addr_t dmaphysdest1 = 0;$ g8 r. v/ b. }7 ]- _
- dma_addr_t dmaphysdest2 = 0; W6 w4 Q. h# A2 B$ ]( L# Q
" d7 `/ z( W9 _, Y% F- char *dmabufsrc1 = NULL;
' {7 D5 E+ O) \0 a/ {( v - char *dmabufsrc2 = NULL;" _% m! o2 J$ G6 g4 g
- char *dmabufdest1 = NULL;
6 G9 | b0 D+ { - char *dmabufdest2 = NULL;
8 y) F& p0 r; Z2 i( Q/ l- S/ V& m: e
8 Z! @5 u- N: q+ `- static int acnt = 512;3 p3 P6 J: `0 Z3 k/ `6 }# M' I
- static int bcnt = 8;
' }, y3 }+ |( M - static int ccnt = 8;. Y6 {2 ~" l4 Y2 w5 O: J
- B9 ?7 R5 v ]! A
- module_param(acnt, int, S_IRUGO);2 F4 a$ T6 s% D. A3 ^5 D! ]
- module_param(bcnt, int, S_IRUGO);
0 W" X8 m/ U( Z: ~+ x - module_param(ccnt, int, S_IRUGO);
复制代码
* o% A* v0 e, G _3 B; W6 Y& a; A% @, J
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
6 T+ M# k7 l0 g0 w. |$ m% y, Qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ ^1 Y9 H- L1 U. p
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。1 w/ e% i, z( {
2 A$ r; [& b/ M2 M4 F1 [' a( U, q
" Z! a8 e9 B( h3 { d( O' P4 x9 U |
|