|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
U" x E# g2 i- [code]EDMA sample test application
6 X" T8 g( s$ j* x) r! f1 P1 o$ \ - /*
* O4 R* p. P; L' z9 h' v% ^ - * edma_test.c4 F$ Z' e. b, _* K, d$ T. r) \
- * v) t2 z* w: I8 p* q# q
- * brief EDMA3 Test Application
/ J+ k& ]0 D6 X9 c - *+ A; D2 S; ?- o2 U9 Z. E V2 e
- * This file contains EDMA3 Test code.
4 s# m+ Q$ L5 _) h2 Q+ }+ M2 O - *
- }/ R+ m6 u0 L - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE+ h( I3 r. ~1 r& Q8 s) k
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT, r2 X; v/ X6 v6 h% w7 U; y
- * TO CHANGE.3 X9 w% l c4 Q$ D& d
- *
! x8 E7 I% q+ X* P% t3 t/ m/ O - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ W/ C8 R2 G1 P, l' D - *! [2 h# j' Y. l4 [
- * This program is free software; you can redistribute it and/or: c* S/ x( q! h
- * modify it under the terms of the GNU General Public License as
+ p5 j; _" T, B6 \ - * published by the Free Software Foundation version 2.
- Z- u, @8 m5 |: q8 C+ s7 Z - *8 \4 H- s# _* e; A4 D
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any7 w" G6 h* _2 w7 D% M
- * kind, whether express or implied; without even the implied warranty7 t) P$ Z$ ?/ v
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; w. Z4 E. Z% N6 E/ Q) z. X; c
- * GNU General Public License for more details.
& N& \( h& f3 R& ~$ C9 ]. F# C) ] - */
7 d3 T: `+ D: E9 t2 `" {3 s% G
+ K: x% K! \: V9 A5 f# c- #include <linux/module.h>0 D' |& h8 e* `* i& ^+ M: ^" o W
- #include <linux/init.h>
6 b4 Z# o: Q4 S S - #include <linux/errno.h>
5 m) S2 c, d6 ?; p8 P - #include <linux/types.h>6 l- A7 C! n& _( ]; }
- #include <linux/interrupt.h>! m7 d+ R6 K& j# _
- #include <asm/io.h>+ J: T; i7 o ~: B2 J; z5 A
- #include <linux/moduleparam.h>
2 D& o" P* S4 g9 ~; F6 c - #include <linux/sysctl.h>, a& r' J8 B7 L' F
- #include <linux/mm.h>2 ~( y0 c' i. L8 H# P8 A5 ~3 E' t
- #include <linux/dma-mapping.h>8 Z R0 [" d) H- E9 c- _
- 1 [) I4 g. t Q9 v1 f7 i; U
- #include <mach/memory.h>! L% n: C2 z. P4 Y& {5 S
- #include <mach/hardware.h>
) C/ U' ^4 S$ u( @& c6 F1 | M - #include <mach/irqs.h>
5 g$ b, x* x& I - #include <asm/hardware/edma.h># s' U0 t0 r! D) B( R0 d7 {& m
- 1 t% h* b' G( B( i
- #undef EDMA3_DEBUG& {5 e, u9 ~- _9 r" n0 c$ [
- /*#define EDMA3_DEBUG*/* A3 L* V" N! m1 |- c- u: M+ X( u
- . c U8 u- W) S- c
- #ifdef EDMA3_DEBUG
! X; ~) r4 \! S - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
& |! p) b& E4 Z& @2 r0 m' ^/ Q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)* \' h! R. L: u. M' S# N: r
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)# t0 \# G {3 Y7 o
- #else: U) ]! ]8 [. r6 O$ b5 w
- #define DMA_PRINTK( x... )* N/ W5 r! `- a$ P# m/ @0 k
- #define DMA_FN_IN$ ?1 l5 B6 ~( q3 _6 E& j. K
- #define DMA_FN_OUT
3 ]1 s9 O) J9 d2 w ^3 ~ - #endif
" x7 S% k0 C4 I$ y- O2 ]4 o - 9 |6 T8 \% w3 \
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) F9 L9 F w2 J i* f* F - #define STATIC_SHIFT 3
4 w" Y. J9 O. s( t - #define TCINTEN_SHIFT 20* }& q0 T7 `" F' Q. f4 e- R* r
- #define ITCINTEN_SHIFT 21+ |$ R8 j* \4 |1 B
- #define TCCHEN_SHIFT 228 O0 c: {/ B+ }9 `- d
- #define ITCCHEN_SHIFT 23/ W" ]3 ^% K6 J# m
- - w* w2 t& B+ s4 o; o' K$ a5 Q0 p, o
- static volatile int irqraised1 = 0;
& `% ~: A6 e7 ?$ d- k5 x - static volatile int irqraised2 = 0;
5 p4 f5 `, R2 e - 7 o; N; u1 ^$ Y- _ R
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) z6 f O9 O+ {3 p
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); Z0 s: \5 \2 B8 }1 a4 @
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 Y m- ?2 Q; p [- F: U1 N& c - , o9 X& q1 x- X2 e$ U# t
- dma_addr_t dmaphyssrc1 = 0;
0 d* q7 H8 O: `/ q) P: l+ j - dma_addr_t dmaphyssrc2 = 0;' q3 t5 X& C( f' o; u
- dma_addr_t dmaphysdest1 = 0;3 P. w# h' m$ q: Q* J
- dma_addr_t dmaphysdest2 = 0;4 W1 s I+ } y9 s; m
' U% A) ~2 g. F% C. g3 L* q* N( |- char *dmabufsrc1 = NULL;
; j0 c9 |1 g9 h } - char *dmabufsrc2 = NULL;
0 f, @; [# y! ]; q - char *dmabufdest1 = NULL; Q: P) n* v+ q- _0 e5 R( e7 [
- char *dmabufdest2 = NULL;* l1 N! E. H9 z8 N' O' I
& ?0 I6 E' V, P4 i7 U6 E- static int acnt = 512;
# I8 D& V9 A: ?% O O$ F' ~3 d - static int bcnt = 8;
. Z3 M3 ~; u- O+ Z+ n - static int ccnt = 8;- v) y/ X! i/ _; c O {3 B! o
3 b3 T3 _' \6 d2 r9 ^( h% ~, D D- module_param(acnt, int, S_IRUGO);
" Y3 |$ k1 P# b$ m - module_param(bcnt, int, S_IRUGO);
8 S/ u9 {" u( o6 U - module_param(ccnt, int, S_IRUGO);
复制代码
" P" b9 ~, Z I& c |3 Z7 L! K2 L* J/ _0 e5 n7 d; G( X
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; i% R& [5 ^8 Garm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
# [+ |% u3 A; h# d+ _" o* ^ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
; I! f" Q) g" V; k8 c; E1 V" l
* ^* f8 E4 R% J3 O1 C6 i$ R" x6 a4 d* A5 q$ l; K0 X5 ~) d
|
|