|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 M& t1 P, R" ]# c5 e; u) D- [code]EDMA sample test application$ z: N9 k: ?' p
- /*
0 l, D' ]/ V. O$ _% @. ?4 D - * edma_test.c
# e q' p F+ @4 m - *
, q9 ^6 j- Z1 u" F; z - * brief EDMA3 Test Application& w5 `& n. K& r
- *" j+ l2 T! O0 C- g8 Y: u: O- M
- * This file contains EDMA3 Test code.
/ q. e- n' D; W3 i; z. d - *& d, p& h$ \& H) L" _6 r
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
4 ]; F4 l* I5 P; @ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
7 ?3 p0 f; I/ t, K' j - * TO CHANGE.
/ d7 f( P( o, ?6 R- C0 j- w- | - *
, m0 l8 m3 E& `$ h7 x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
. C( v7 @4 t3 H8 [ - *" z3 o m6 c: v O* \- \2 T
- * This program is free software; you can redistribute it and/or& Q! j2 W h- X7 f4 i4 i' L2 z5 ~8 l
- * modify it under the terms of the GNU General Public License as
9 e( {" d2 N) F4 E A" v0 e+ j - * published by the Free Software Foundation version 2.1 I/ r9 l& J! P$ ` O4 s
- *- a1 t8 k* C* c2 k
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
0 u, p) M: B$ \' z - * kind, whether express or implied; without even the implied warranty) J( r S- v C3 u0 ]
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- N3 ^) O* O: F! a9 x - * GNU General Public License for more details.- k- e$ T( Q" R
- */
, ]& G! n5 N; i, q4 G: f, `
% ?, M7 @" E v- K7 I: r# J' {- #include <linux/module.h>& N1 P) @0 d) u( U$ G. ?
- #include <linux/init.h>+ Z" L& d4 u& Q7 X
- #include <linux/errno.h>
6 i' m/ _3 M8 _ - #include <linux/types.h>
# u- p* ~! ^- Q; u - #include <linux/interrupt.h>
; i, e' B5 `1 {3 ~. k9 Z( _ - #include <asm/io.h>3 f8 `) M1 e) B
- #include <linux/moduleparam.h>
. g# R9 B& M+ C' p - #include <linux/sysctl.h>
7 f% C# s8 f# h r - #include <linux/mm.h>
6 Y! T# T- W7 ]1 }6 q - #include <linux/dma-mapping.h>4 h9 g' C( ]7 o# y
- ) ] l/ a( K- b9 [5 d8 e- W Q# J
- #include <mach/memory.h>
1 j; Z$ B8 @$ m! y - #include <mach/hardware.h>
# V; X; y) G, A" @ - #include <mach/irqs.h>0 D7 \) H$ C+ W, e7 ~& }
- #include <asm/hardware/edma.h>5 L* P% e1 |& Q% ~% u
- ~3 Q* h2 t: x! ^
- #undef EDMA3_DEBUG; S: S$ G& H" R
- /*#define EDMA3_DEBUG*/
% n, Z: a4 q. |# Q1 W/ b9 Y
3 q% F& n2 o) i" V# d& v) R. n0 J- #ifdef EDMA3_DEBUG
, e0 Y, m, ?% {* F# t5 } Z - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
( B7 r/ ]8 r7 e% s/ K4 y: @ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# S. c9 ] [% Q4 I' ~2 ]& @9 r
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)! t& a/ b) I% {4 D* E* @
- #else; G2 y% i- u+ \3 }+ `7 O y% w
- #define DMA_PRINTK( x... )
8 R+ e1 C4 j0 \6 @' b# X' Z. a - #define DMA_FN_IN
1 ^% q& N: C6 \7 U/ ] - #define DMA_FN_OUT' n1 ^' \' _$ f, v
- #endif
1 B4 a: t1 A- l$ o% b& |2 o
* V7 V* B' B) ?# p0 i; h- Z- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ N5 t: p# ~8 E% O
- #define STATIC_SHIFT 3& s" a- O) g7 O+ W8 R
- #define TCINTEN_SHIFT 20
& a5 @7 G! ]3 f1 C - #define ITCINTEN_SHIFT 21
; R- w `4 @2 E, V/ Y, ^3 t1 ^ - #define TCCHEN_SHIFT 22
/ V$ H9 T, ? w - #define ITCCHEN_SHIFT 235 N3 ~( ?8 M7 S1 s
5 Q- H- F$ E! a+ j9 }3 ^9 u- static volatile int irqraised1 = 0;
: s, H$ z- s; D: h, j/ } - static volatile int irqraised2 = 0;( n( v! b8 D4 C m- m: c
e, H, J9 ]6 P! P- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ Z: y6 e4 q2 \ c# `& |7 Q - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% m" F4 a5 _6 [( z7 A- \ n - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% \/ W6 u* Q. Z% r) Q0 Y% H3 a
- [- x4 F0 U7 D: Y7 q+ Y
- dma_addr_t dmaphyssrc1 = 0; e8 ~- d; `' Z% R
- dma_addr_t dmaphyssrc2 = 0;% ~6 e' q3 P* R i) h' s1 s+ o
- dma_addr_t dmaphysdest1 = 0;, ?2 P% N0 R$ n m/ U3 b2 K
- dma_addr_t dmaphysdest2 = 0;7 i6 V2 ]6 X8 ?2 C
; G3 J/ f9 k! \) S) A4 m6 `- char *dmabufsrc1 = NULL;' J0 N: i9 k" V! T8 K
- char *dmabufsrc2 = NULL;
- p, `" q( C9 s4 L5 m - char *dmabufdest1 = NULL;! u. M7 \" @+ H+ ] ?
- char *dmabufdest2 = NULL;
9 v* c+ {1 F1 T
E- a' n5 ~. w6 |7 g9 u- static int acnt = 512;2 j( t* O" [3 [$ `% A
- static int bcnt = 8;
* S$ K( C; C9 s0 `% F, ?! } - static int ccnt = 8;
- `2 N) |2 I Q% p6 w ^ - 0 ]3 R. r0 W. B# W& O
- module_param(acnt, int, S_IRUGO);& V% I( ?" `& T Q3 G/ W1 ?4 Y2 ~
- module_param(bcnt, int, S_IRUGO);
% u: E" S: ]% k. i. Z - module_param(ccnt, int, S_IRUGO);
复制代码
# f% E2 P! `: R" y- x$ ?
: G' @6 v3 U! I" t/ d 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
5 T6 K) C$ @8 D/ C" x* Jarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
5 c; _( I; q- E' W( l' `! i 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! g% H' ?3 \2 O7 c w, i
# }0 ~& i2 U/ |. H+ T
9 h( @1 U# e2 z+ M" r; ~
|
|