|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ p( i5 U, O' w
- [code]EDMA sample test application& U( T9 h, Z+ b5 G2 ^! r% b
- /*
+ U3 Y3 X6 N; X6 k/ k - * edma_test.c/ \' J8 x$ z5 u6 h+ j; P
- ** P2 S) G7 |: s9 }4 M3 z7 ~8 P
- * brief EDMA3 Test Application+ F: K% C$ j$ Y) w
- *$ h0 y" _" T' y5 ^1 e
- * This file contains EDMA3 Test code.
! e/ e4 H! W6 y8 m T; O2 R+ U6 C - *# V* x9 b K) l3 Z. W! I& v, |
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE/ W5 G6 }9 s8 i( x( i
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
/ u) ` S5 Z" e$ E$ b1 k; N - * TO CHANGE.
) \7 H( ~3 G/ m$ f9 O0 v2 m: V - *
7 v9 z, T5 E3 F& V4 \ M - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 \5 ~5 G" G; _& C; M1 u - *
2 ~4 X" o4 u9 Z& @( }0 j - * This program is free software; you can redistribute it and/or
" Q- b; I8 G/ k, ~& c8 F; A - * modify it under the terms of the GNU General Public License as& A" G* E* @9 f: i) X9 ~% k7 M
- * published by the Free Software Foundation version 2.9 J9 o; T/ d! V T' m# r0 O
- *
5 i! W5 Y5 _ N- m - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
) f9 }+ c. _* [0 L# u- s; A - * kind, whether express or implied; without even the implied warranty
% n! p) D# W* ^4 h - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ `. s& @2 w/ p) C* C+ p - * GNU General Public License for more details.( o! H# ^ P# z; D7 c
- */
1 {! i7 L: p# Q" |* n9 P3 [5 X
+ Y; n9 X' K3 @2 C9 B3 f8 T+ r- #include <linux/module.h>; y; n/ r ?% T, O, F* Z
- #include <linux/init.h>0 d0 u. t. S% y) N
- #include <linux/errno.h>
, y8 Y, L2 J) Y# Q7 H2 w9 q - #include <linux/types.h>
, o+ o# @0 U+ z2 q, r% H6 ^7 B( E - #include <linux/interrupt.h>; A- k, J( U5 B$ G
- #include <asm/io.h>, u; Z7 n( ]1 m& Z# Z( |! N) d
- #include <linux/moduleparam.h>4 ~* w& v1 r2 I2 x- C9 O, `
- #include <linux/sysctl.h>
0 R1 S7 m* u0 G5 r8 m/ k - #include <linux/mm.h>
) z+ z; X4 b8 ?7 x3 x* J& H& h - #include <linux/dma-mapping.h>9 |) u( }; o, E/ |$ e) h7 i
* I: K8 l3 \8 }& Z8 }* l9 z- g V- #include <mach/memory.h>& @6 g. H+ U V6 Y/ p
- #include <mach/hardware.h>0 X. a k) s7 K6 p- d
- #include <mach/irqs.h>$ u, a0 r( j1 U o- S3 q* @( d4 I2 J- \
- #include <asm/hardware/edma.h>6 Q1 G! Q9 h; Z2 \6 n. X
' H* u9 v# }; ]9 A% ~- #undef EDMA3_DEBUG
3 K$ H. W' y$ B$ k7 |; E - /*#define EDMA3_DEBUG*/
1 L! T) J: W3 e* }. R7 t2 ~) @. V1 V
) B8 S6 |+ ?0 Z8 [/ Y# ?$ V; n- #ifdef EDMA3_DEBUG
( l+ N2 i" r3 Y! y6 s S3 c - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)+ a8 A: A, {$ j4 i6 l
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
* z2 o* ~! R! X0 d - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. ?. c) {3 y t* T - #else- y: e. W6 S' D/ C" Y A* v
- #define DMA_PRINTK( x... )
, g7 W. E* e( V - #define DMA_FN_IN0 S9 U( P7 E, G$ ^
- #define DMA_FN_OUT
1 J3 G& a8 G$ Z9 J0 m - #endif2 [ ], V1 Z+ s3 C6 F- F
- 8 @# Q$ Q1 a. A& K
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* p" O0 @4 d; ~4 g! V3 n
- #define STATIC_SHIFT 3
. N5 `' `; T# E6 f1 i0 c+ e8 X8 o - #define TCINTEN_SHIFT 20
4 i) b! F- w" ?3 G - #define ITCINTEN_SHIFT 21
! ^: G a ]5 m. m - #define TCCHEN_SHIFT 22
0 ?1 T7 b. w( G. ~ - #define ITCCHEN_SHIFT 23' _7 e! O3 \% V, V
9 ]% d2 i2 n4 U" ?' X# n- static volatile int irqraised1 = 0;
2 T# l/ ]7 w0 n% I5 l- r - static volatile int irqraised2 = 0;
% g! u z) I2 D" N( d& b% M - ; y k- O$ i% \8 B, l
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# y& _& E1 B) o - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, l0 z G7 w# w* i5 X, m - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 H5 B5 A; K- U5 ?/ d
) w! ^0 I* ~) |0 }4 j+ h s- dma_addr_t dmaphyssrc1 = 0;, M8 q' T7 A3 |; d6 b" o; F( k
- dma_addr_t dmaphyssrc2 = 0;1 C& E9 O' N- N
- dma_addr_t dmaphysdest1 = 0;
: T, Z, v# ]: ^4 o/ v4 f# f: n1 O+ C - dma_addr_t dmaphysdest2 = 0;7 H$ {- L( A" A
0 {9 a3 g2 |1 [9 `- char *dmabufsrc1 = NULL;
) U) S6 t" Q H: C7 e - char *dmabufsrc2 = NULL;
9 { K v8 e0 b/ b - char *dmabufdest1 = NULL;, k' u7 S, p6 [" r2 Z
- char *dmabufdest2 = NULL;( v$ O* N5 V* W$ j
- 7 C8 K% k+ p. _
- static int acnt = 512;& V. d8 B9 W3 K* |& t( ^' V
- static int bcnt = 8;6 S% e( R3 m; ]4 D# v
- static int ccnt = 8;
1 `7 q3 `! B* d/ P* l0 {7 a - & t/ O: _+ E2 N! j
- module_param(acnt, int, S_IRUGO);% q# f0 B6 p( X; h+ Q0 H& @4 m g
- module_param(bcnt, int, S_IRUGO);
1 {2 o7 n) m. ] - module_param(ccnt, int, S_IRUGO);
复制代码 ) |8 |3 C+ {4 e: _2 L0 Q9 b
( _9 R, `- _2 R/ v& _% t
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
' e$ v0 h% A% M% Z7 l) Carm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
6 s0 Z% D; Y4 z$ `7 B 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。: }* e5 u, |2 R' }: I! v
8 u) x; T$ [% v3 m
! }2 b8 n/ g# H2 H3 g, K$ A" [
|
|