|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 3 D& ~0 [/ M3 T1 o5 s$ v% \( D
- [code]EDMA sample test application! p% y+ E, T8 ~8 b
- /*9 r( P6 [2 {( r) [! q1 K. J
- * edma_test.c
/ E% H) r3 n& i - *+ m; c; v8 j& v: V4 f
- * brief EDMA3 Test Application
$ i3 H2 i* A$ m7 w+ E/ o - *
/ A0 Z% N4 K& @3 ~ - * This file contains EDMA3 Test code.
2 A& Y' ^+ o8 |! q0 a - *. O7 O S$ h, [% e/ ^ X9 i6 j' t
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE3 |% O1 D: v5 B4 C/ @
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT4 p# j& T6 {, i* Q
- * TO CHANGE.+ t) W4 \6 ?/ _; ^
- *
/ N8 D2 R4 T" @1 J6 h - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
' d/ K8 ]( W1 m5 k - *
7 |3 M% u* E E# S( E4 ?" f - * This program is free software; you can redistribute it and/or
, v9 b4 [# p0 A6 @ - * modify it under the terms of the GNU General Public License as' m* d1 V) C0 K. _5 z# K4 e" M
- * published by the Free Software Foundation version 2.
0 F7 D3 h& {6 O - *
" E- Z1 ]' q$ W! z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 m9 `7 }6 `2 u' L; d
- * kind, whether express or implied; without even the implied warranty
# a; F2 {5 T) m8 F - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 w+ B7 X" \8 Q/ m3 l( F v) ]; s - * GNU General Public License for more details., U" x* c- Q% {1 B# w
- */9 {6 w J& Z. ]5 J4 m9 N
% C3 M9 N; I% A% z+ I( g9 `, c# {- #include <linux/module.h>. L0 ^/ G6 W; {1 x
- #include <linux/init.h>1 j3 Q; ^2 K8 `$ Y6 }3 }
- #include <linux/errno.h>
" J) g$ Q7 r2 |$ Z/ S: J - #include <linux/types.h>
( d) ^ V7 }& S Y0 U - #include <linux/interrupt.h>2 a% @+ H ~. S. G1 C- K2 }+ i
- #include <asm/io.h>6 s5 n7 A! P: h7 c( g( L' U4 m
- #include <linux/moduleparam.h>
( L- O4 h7 R% r' M( k - #include <linux/sysctl.h>
x# k% s$ b5 {& ^) @9 x - #include <linux/mm.h>+ @% [1 p" I3 W' ^
- #include <linux/dma-mapping.h>/ l- R2 @+ F, j, z! D
& k1 b8 _& \8 d9 d2 w2 E* u- #include <mach/memory.h>
/ e4 P9 l) G# [3 s( C. ? - #include <mach/hardware.h>4 O( \& N# H( U7 Y) ~& p; G
- #include <mach/irqs.h>
. x5 w" K b% }( [, t( [9 B. ? - #include <asm/hardware/edma.h> W* \6 c5 a" U
5 K4 ?3 b+ {) W/ ?- R- #undef EDMA3_DEBUG. J; K- D) s# P8 F3 [
- /*#define EDMA3_DEBUG*/
- }$ f0 e; j# x& h
5 L1 m3 Y- f6 r8 q- #ifdef EDMA3_DEBUG
1 @- W8 j6 F. F' y+ r) F. Q1 a - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 m1 z! X: n7 C4 g9 J% q
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
% ^- f! }7 T6 J/ y - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__): l; _! R2 k; K' u
- #else; n9 B9 G7 `* H+ O: u
- #define DMA_PRINTK( x... )& W0 F3 I# ^- t$ ^
- #define DMA_FN_IN
7 X6 B0 G- _* @. _% _) b) v4 e - #define DMA_FN_OUT! k# v0 }: V0 ?5 m3 }) q4 L
- #endif
n) L' q/ s) e1 B" n3 p. Q# |6 c. E5 s
i) \# [1 \) [( z9 G3 x5 e* j8 g- #define MAX_DMA_TRANSFER_IN_BYTES (32768)6 V) `( s0 t" }7 K: Y6 x5 E$ x! c
- #define STATIC_SHIFT 3( s- l! ]- o6 p' s4 v' X @
- #define TCINTEN_SHIFT 20
) @$ _0 C0 t9 i - #define ITCINTEN_SHIFT 21
! k0 [7 g e: `4 F - #define TCCHEN_SHIFT 22
6 ~1 v" O0 q2 k2 R, R' L - #define ITCCHEN_SHIFT 232 K, Y; B) L% `( `+ [! U
$ P3 x6 b$ I5 J0 Z8 h" ?- static volatile int irqraised1 = 0;
) s: i. K& D1 \$ d0 G8 q& k - static volatile int irqraised2 = 0;. P) ^6 d4 d6 W1 v, l1 x; F: B" C- m
- G8 k4 ^$ W, w9 u# s( O3 |
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 O- d h9 q1 g0 ~
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! n# o; \$ H5 v# i/ o5 X
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 r. U0 s. V h
- 2 b: v- t, S( v7 \. h4 X; B/ i/ g, {
- dma_addr_t dmaphyssrc1 = 0;3 a0 M1 d, P `/ E1 J+ ~6 {
- dma_addr_t dmaphyssrc2 = 0;- C; ~9 p* x0 k( i5 @1 r
- dma_addr_t dmaphysdest1 = 0;) R; K$ T# ?1 l7 O7 O! @
- dma_addr_t dmaphysdest2 = 0;$ A( Y1 r% i, n3 m6 o" D U# i7 ^
- ! a! T$ y C$ x' R$ m! h/ V* K
- char *dmabufsrc1 = NULL;& I$ ?9 J9 e w0 c- a7 L' A
- char *dmabufsrc2 = NULL;
8 e$ d( q7 O* X( e+ l# l - char *dmabufdest1 = NULL;8 E# j8 X& x, A& _$ r$ x( _
- char *dmabufdest2 = NULL;
/ |8 P1 \/ Z1 {0 v5 q4 g
1 N, o# T( m9 A3 C! H- static int acnt = 512;3 }& j0 d# y! H% B
- static int bcnt = 8;
5 p- t8 m9 p; } - static int ccnt = 8;
. m8 Q( s% |5 C. B- i3 E6 N2 T - / i+ q% M5 M! J
- module_param(acnt, int, S_IRUGO);
/ l$ T2 C- t" Z' t1 B7 \ - module_param(bcnt, int, S_IRUGO);
3 o; e9 W6 w1 v3 q* w; h( |# f - module_param(ccnt, int, S_IRUGO);
复制代码
% n& I+ }) }) D$ T3 G* s
; G& T9 K: ?) j& i2 k3 j$ C 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" w+ X# H% P3 V. Y/ warm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; |! g1 F$ s. o 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。' D, Y! c3 t1 f9 X
0 W5 }4 {' E9 i3 S8 W0 C, L+ i' A; f
|
|