|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ( q+ D) w% S0 l, f
- [code]EDMA sample test application# {- ?3 I9 i6 v1 } ~- D
- /*
. a. ?6 r+ L) c5 ~! s! s6 G - * edma_test.c
" n4 G1 Y& J" R9 V - *: }7 j) L7 Y. @( S7 C C* m/ o1 o
- * brief EDMA3 Test Application
6 B! L% J& F, O. C, E+ M - *
5 O J! S" n% ^9 s+ w6 U, R/ L0 j - * This file contains EDMA3 Test code.( I9 D6 T( M+ E; a* j8 m
- *4 \( D2 H9 o, O* ?4 R
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 U: G; I; T6 ? - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% U+ p( e6 v( m; U& `
- * TO CHANGE.
" @) p4 L& w. G( N1 \. F2 V1 Q - *- I/ a- O4 d n& _) ?; C9 y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" ^& d& W' I" |8 V5 p# z) o/ i - *
6 y' S& U; a6 x% C8 } - * This program is free software; you can redistribute it and/or
2 C. t, G& w: [. u% a* J - * modify it under the terms of the GNU General Public License as
9 O; j- i* w: l2 B& ^" x! R - * published by the Free Software Foundation version 2.$ T5 A- K+ C- |% l
- *
) R; N3 Q, F7 j1 v& d! o" J ~ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any7 E$ u9 s; {3 r4 b+ ^6 d1 Y+ r& T! ^
- * kind, whether express or implied; without even the implied warranty u" G% D e8 r, p
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 v+ ^" l, u9 j+ w
- * GNU General Public License for more details.
6 m) d# K2 V: w1 v5 G/ a; i/ I - */
& z2 E( D' V; T
& c' i& ?/ U- n( ]2 _- #include <linux/module.h>
5 `; Y4 C1 q( Y: M - #include <linux/init.h>
# n% i# t J' k6 K2 X- O - #include <linux/errno.h>1 M9 U; Q) m2 v; d
- #include <linux/types.h>2 f- x3 n' u' }- z+ ]; `
- #include <linux/interrupt.h>
7 c7 [4 b v4 ~: C4 v - #include <asm/io.h>! I* u" k4 P: c5 }0 W4 a
- #include <linux/moduleparam.h>( l' ~! h3 \, b ~
- #include <linux/sysctl.h>: p: k, x8 q- u3 u" t- N/ K
- #include <linux/mm.h>
5 m- F* ]6 l7 a# n+ d# r V- g - #include <linux/dma-mapping.h>( r9 q* Y% {, o+ I$ v" A4 c3 D0 m
- ! D1 d6 c: B4 }7 ], b# Z1 U0 n
- #include <mach/memory.h>, D6 q: c4 E b
- #include <mach/hardware.h>5 [- u1 j% V' ?- x
- #include <mach/irqs.h>% o5 K O& r; J1 Y0 U
- #include <asm/hardware/edma.h>! L0 v, K6 o2 e6 S
/ ]/ e" u- y9 k) u- N- #undef EDMA3_DEBUG. [5 M2 \. @# F. {
- /*#define EDMA3_DEBUG*/; n0 ?" G2 a9 h' ~3 d4 Z1 T/ f5 \
8 Q! S6 I l$ E* t' I1 I- #ifdef EDMA3_DEBUG9 @% ?# Q8 h5 m: r9 g# d1 b
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS), i: Z5 n# G1 G7 B$ }0 E* b
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
& y) m% [/ C, ` - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
' z* _: Y+ l* E - #else
$ j, t: \7 j+ s _/ Z - #define DMA_PRINTK( x... )9 e8 M8 { l" {0 I* X c
- #define DMA_FN_IN7 c' u8 t( t3 u9 z& T
- #define DMA_FN_OUT5 b) X! T8 f/ h. E% Z, F' x3 y, Q+ A* q
- #endif
& t6 k& [0 E& }3 ^' x- L
) {# u( A9 }. A2 {% I# y1 e- O- #define MAX_DMA_TRANSFER_IN_BYTES (32768): e% P" u+ e& ^) Q9 i! s* c
- #define STATIC_SHIFT 3
- F7 s. O. l0 v2 F {1 ] - #define TCINTEN_SHIFT 20& U- B3 I& Y2 F T" b5 y
- #define ITCINTEN_SHIFT 219 D+ v6 l9 j/ @, A! u
- #define TCCHEN_SHIFT 228 s2 O- `6 V# p& x( E- Q, T \# N2 D
- #define ITCCHEN_SHIFT 23
2 c7 h2 e4 U, y$ d9 H( I: N1 _. v
# D3 e+ c3 j- ?. W# t& ?- static volatile int irqraised1 = 0;
* x1 ?) b( q5 h5 C) `! m$ i - static volatile int irqraised2 = 0;
- \9 V+ W y2 f
3 O; j! u8 ~& z# C+ p% b0 M. Y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 H7 D x8 r/ b: F7 Q- M c - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% m D3 H3 H# V: @3 Y7 J2 Z* W% A - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% l2 |0 Z' ]! { E# U' D
- d. {# W4 q; _: H$ ?- dma_addr_t dmaphyssrc1 = 0;4 Q& S/ b& T R. p
- dma_addr_t dmaphyssrc2 = 0;
; [) r3 Y8 h% b- P" t - dma_addr_t dmaphysdest1 = 0;
/ B+ G6 a4 S% X" ` - dma_addr_t dmaphysdest2 = 0;( C8 X1 i; a2 a" V) E& u$ I
- 0 s! p& R0 y3 A
- char *dmabufsrc1 = NULL;; @% |: u% I2 U! J a+ R/ a
- char *dmabufsrc2 = NULL;
# T' U8 Y1 w- \9 T4 o r& t - char *dmabufdest1 = NULL;
* G+ ]4 Y. q7 `& s4 P - char *dmabufdest2 = NULL;
- @5 n. o0 ?# a- C' F8 p
- J, r/ b) [- V5 o3 E! c- X- static int acnt = 512;5 r0 @) n3 w6 l$ h" ~4 ^7 J. ~
- static int bcnt = 8;
: t( t8 ^, Q/ X6 z7 U% h - static int ccnt = 8;4 N1 a& m4 B* I; D! s
. T v4 B |, c/ ~) X6 V- module_param(acnt, int, S_IRUGO);
) K' E0 x) w( x. i, t+ R2 x - module_param(bcnt, int, S_IRUGO);
! p& f! u; Y1 e$ r$ h. p6 | - module_param(ccnt, int, S_IRUGO);
复制代码 7 r" U0 ^ o2 C6 Y
9 V2 K$ x" u! f3 r 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 }. m3 W( p+ z G
arm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。; I. p- h& `5 w& w) h
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 |6 o2 M3 G( e; x8 U( I! L
8 e+ `7 r* J8 t7 b7 V$ f) g- t4 q# E0 x7 z5 u7 J* P9 H" R
|
|