|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 2 M9 o0 e- J2 f; a, l6 n! p/ t/ G
- [code]EDMA sample test application. F$ X: H: A" a0 E6 R0 C
- /*
4 c( w; j5 O1 v* c! ?5 M$ q - * edma_test.c
9 D! c7 x b- c4 ~% n - * O$ X* w. K e# p! j# Y
- * brief EDMA3 Test Application! Y0 T0 _4 y! o2 r! G( K1 M
- *
% P4 l0 V6 \2 g3 {0 f) q - * This file contains EDMA3 Test code.: R) H9 p7 h2 H( P( c$ s' @1 y
- *
^/ N- [: p# V- A' U# X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# x; {2 a( z* t( }$ _! s9 H
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT, H a% c% m1 M
- * TO CHANGE.
3 U% X! f4 q2 q5 n. s - *& |+ N: ^3 }+ J% {, V9 p
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" e5 ` D. @, x' q0 s - *, X% v$ ]% T# l
- * This program is free software; you can redistribute it and/or
: I% U! B! X- o( A - * modify it under the terms of the GNU General Public License as
3 R4 [( d s. k( g; A - * published by the Free Software Foundation version 2.+ t7 v+ m' h' F& Y/ i
- *
. V9 R; A% N$ R; b - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 ^" d, @1 ]* q% C0 I# ?. T7 Y( V p - * kind, whether express or implied; without even the implied warranty% _2 p" p L# R7 b C+ f
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
& \! T7 U. N: y0 m$ \$ C2 f - * GNU General Public License for more details.
- ~" t' T" u+ P4 t, U9 Y1 e X5 d - */! d! B6 _0 S P* A+ N
$ ~! j1 y3 t4 _" M- #include <linux/module.h>& l/ Q! ~& q; s; H
- #include <linux/init.h>" E" Y! Y5 M0 o5 C
- #include <linux/errno.h>
: y. ?% t& \/ j( a6 R6 Q- U/ ] - #include <linux/types.h>
* k1 \9 o }) p3 U& Y - #include <linux/interrupt.h>2 {& e5 `% @5 n" O) W6 y- g9 R- {5 E
- #include <asm/io.h>8 n6 E; F2 ?; m5 G7 x
- #include <linux/moduleparam.h>/ S" J w: b9 \$ Z6 d9 A5 r
- #include <linux/sysctl.h>
: q* { {4 ^: N/ d5 I; K - #include <linux/mm.h>$ g$ `/ _9 g5 i4 I
- #include <linux/dma-mapping.h>3 v! y1 q- {$ Q/ C" q \
4 t! k! `2 i/ Y9 Q' j- #include <mach/memory.h>' {5 Y4 n N8 J9 s$ |( a" { I( f
- #include <mach/hardware.h>
5 J4 p: v" z( h- {( b5 Y! q" t6 P - #include <mach/irqs.h>
6 ]2 ~/ s: a- ~4 W, i+ J - #include <asm/hardware/edma.h>/ z7 \- o0 ]/ T# X- G2 W$ m) u
- ; m7 k( y p3 a/ d6 o; w
- #undef EDMA3_DEBUG
: u! h( t6 A0 o# ? - /*#define EDMA3_DEBUG*// L' q1 M% h8 X* K- ]) B9 b& X( |% k
- 7 w) c6 {9 c1 C. F/ x9 H; h
- #ifdef EDMA3_DEBUG
* y/ G. |, c' o" _9 | - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
l' m* u" J) u7 K( R1 v/ V - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( r2 u: p7 H" D6 [- a$ W1 A - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# r5 m! X- E5 ]* T - #else7 c7 C J' t6 l/ {' M, C
- #define DMA_PRINTK( x... )/ H$ _! x/ H+ l/ V/ @3 j/ a
- #define DMA_FN_IN2 o5 d \8 A0 Q" Z3 Y
- #define DMA_FN_OUT
* A ?5 T8 t. O0 w0 r" a; t2 ]" n) e5 V - #endif
4 \+ Q. x# K2 O9 z/ T! C& o+ V, W" m - $ _1 H+ F7 y; B- O
- #define MAX_DMA_TRANSFER_IN_BYTES (32768) G! l- @$ a l0 z8 |
- #define STATIC_SHIFT 3 y3 E& J/ M$ O
- #define TCINTEN_SHIFT 20% [3 l3 i& k$ D: }5 a2 f: t" u
- #define ITCINTEN_SHIFT 21
) {! S( w$ M# }( y6 o( y2 i - #define TCCHEN_SHIFT 22
* z, f: X* ^7 l - #define ITCCHEN_SHIFT 23$ Y5 w9 B: r( F
' N q; R( w$ U9 T8 G7 d9 M% \- static volatile int irqraised1 = 0;
( ~% G& q. t2 ]& { - static volatile int irqraised2 = 0;
@+ T# j |0 k6 s
, x2 P$ w5 v, P6 v4 ?# _- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: a& q9 R6 ?/ f0 `5 F - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" v' }% j O4 x% O, I - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ m9 [7 u/ W3 O' w- f! P
) h+ I+ T- d4 G- dma_addr_t dmaphyssrc1 = 0;
- U9 ^" V' f# x" L, k+ n9 A6 _ - dma_addr_t dmaphyssrc2 = 0;9 L+ ^6 e& W, S2 ?2 [
- dma_addr_t dmaphysdest1 = 0;
; J8 l; ^1 B- x* \ - dma_addr_t dmaphysdest2 = 0;3 S: | Y1 |* p; k0 R7 [- i
+ J) q$ g( L- p* C5 m' f- char *dmabufsrc1 = NULL;0 a5 a! U' s, X9 ?! h/ o \
- char *dmabufsrc2 = NULL;
& h i+ m9 e; \- ~2 O, R% k( u! u - char *dmabufdest1 = NULL;7 b% z* T+ u8 E' s
- char *dmabufdest2 = NULL;/ x: O8 m6 T J3 }5 Q
! ^2 b1 F8 ]% i3 Q: F- static int acnt = 512;& ?7 l3 T: H! i7 j
- static int bcnt = 8;4 I- h0 S# c4 a
- static int ccnt = 8;' ~6 B$ x7 L( A, z5 o4 P: Q/ q7 ]
- & F3 E1 W5 @6 | y. m& o' v
- module_param(acnt, int, S_IRUGO);$ q7 m5 O7 _2 B( ?" `
- module_param(bcnt, int, S_IRUGO);! _ _2 b* r+ h. F j
- module_param(ccnt, int, S_IRUGO);
复制代码 % p5 r q* p8 [. `- m# N O& P
& v: H% L- s% F
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用9 r% w. Y; N( f& Y9 a5 w
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
4 ^4 k% G; @4 y$ L$ v- V+ w# r 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。% F: E; Q! y* n- K6 a, g+ A) z
0 f0 c% y/ K$ }, v* I
+ ]( _3 s; X5 r+ t3 Z) J |
|