|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : C* _; Q: E# V# Z$ G. l
- [code]EDMA sample test application
, | e" Q6 l) y* _' h4 G. Z; X - /*/ W2 k" S! N% q; P# [$ D
- * edma_test.c7 X6 X; B2 _7 Z" I
- *! C7 H+ b) D. u# I
- * brief EDMA3 Test Application
2 U5 Z/ t& l( h& N& k. s0 W - *0 e5 Y! f3 S7 {7 d5 @) l
- * This file contains EDMA3 Test code.9 e' {9 ~6 N1 T" h: Y* [
- *
- B7 d8 a# o1 X; B) H - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# |+ [. z) W( h9 i. x/ G7 T6 h
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# r. i; r9 |) n% A6 C5 {; S - * TO CHANGE.
& e& e5 u6 Q( a* E9 \ - *
1 N" g" {- `5 @ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) e( I( h1 t+ G4 ?9 ?3 K3 U: {
- *
' t8 P4 c- n/ } h# i - * This program is free software; you can redistribute it and/or
- C2 F' D' i4 l- t' S( N* z; N- | - * modify it under the terms of the GNU General Public License as. T6 M. l# X; k0 t
- * published by the Free Software Foundation version 2.
: K: \1 z2 z. v9 p' a6 X - *& U; Y8 @: c6 z9 j6 d/ f& J" y8 l0 Q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' J" J. E! O3 ^( V - * kind, whether express or implied; without even the implied warranty
+ U+ b, ~; C) v4 |- ]3 U - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' X4 H; @8 \5 [/ l' B/ R
- * GNU General Public License for more details.- Y- y. J1 @+ }' l; j2 b
- */
6 m# W% k) V$ ?' t+ R; J- f: Y6 [# b
% J& n4 S/ z5 l2 C7 r3 }0 g/ t- #include <linux/module.h>
1 G: R: u/ a7 W$ t2 j% k$ A+ ^1 D - #include <linux/init.h>" R2 D9 h* m9 G' E- n' D4 t y$ W0 Y
- #include <linux/errno.h>8 d$ S9 P; S, `& v
- #include <linux/types.h>
/ X( p. @( l! G4 v - #include <linux/interrupt.h>
$ E- ?. C3 ?' |4 z+ v2 Q; l - #include <asm/io.h>
7 E. W: y+ [! ?- w+ ~4 _: I - #include <linux/moduleparam.h>
5 a* F u. L# k# n; C8 }2 C - #include <linux/sysctl.h>
0 V$ L8 \$ E, ?2 w - #include <linux/mm.h>
4 h! d0 v( ~* X# B) B/ ~8 G - #include <linux/dma-mapping.h>
& i: e+ {2 C! R' \( J
, u( I. p3 D0 W$ j: U) i- #include <mach/memory.h>
( A6 d) G4 R, \0 a* @ - #include <mach/hardware.h>
4 `) V/ d3 G1 b7 B - #include <mach/irqs.h>
+ Q" a5 x8 I) w2 D" D1 \; @8 Z - #include <asm/hardware/edma.h>
" ^1 @4 w% i, J) g0 n
. T# B% T+ }1 Y: k# Y- #undef EDMA3_DEBUG. Q4 H6 s: M$ h# u9 d) o
- /*#define EDMA3_DEBUG*/% W# P8 \1 B* I" {* }2 J
- 3 b; \0 {6 n2 S8 C
- #ifdef EDMA3_DEBUG6 T1 M5 B- k# m2 Z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)- w: y+ M+ Y& f1 Q/ W
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)+ n- ^% W" \2 Y i; @; ^
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)2 n, u. I) C" F( m
- #else
) i$ _( ~* z' X - #define DMA_PRINTK( x... )
( G* i; u6 r3 }1 I - #define DMA_FN_IN
- b( }) U0 m* Q. _4 }+ p3 ~3 j - #define DMA_FN_OUT5 x1 M# I- C( H* c) K
- #endif
0 N/ |5 J3 v {) ^
) ^. g% g3 A" v3 K- d- y# J- #define MAX_DMA_TRANSFER_IN_BYTES (32768)/ S6 i5 R' k( ?# d/ G) a
- #define STATIC_SHIFT 3, q9 |7 f1 a( |# v: Q% B
- #define TCINTEN_SHIFT 205 a9 _" H$ x/ K( ~& D
- #define ITCINTEN_SHIFT 21# J' J) q/ m0 h
- #define TCCHEN_SHIFT 22# d( B% L3 Q/ [* L2 S* c6 H6 V
- #define ITCCHEN_SHIFT 23
8 B* n% Y0 @ o2 n" o. O; F8 ~8 j; i - 5 e' B/ e0 d! G
- static volatile int irqraised1 = 0;
. H2 w6 u" l* I6 V - static volatile int irqraised2 = 0;) y/ w6 l& y0 b6 K5 ?
, j6 W; d! J+ d- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); M* V% ]6 b: I
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 t7 a: O @' c( @
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 ]8 ^) g. p* R3 \ E9 ~% T4 M
- 7 J& J( _1 ]# d3 Y0 _/ j, W
- dma_addr_t dmaphyssrc1 = 0;% s/ y$ j0 [8 B- K
- dma_addr_t dmaphyssrc2 = 0;
0 ^- ]3 z- G- P: r6 z& s - dma_addr_t dmaphysdest1 = 0;
, l' {$ E# |& c& o - dma_addr_t dmaphysdest2 = 0;
2 u) @. {1 u9 @9 l& B, h7 t1 i - - s8 m, c; j* ]% ^, T! r
- char *dmabufsrc1 = NULL;
* |7 [( s# M6 @* o0 o# q - char *dmabufsrc2 = NULL;
0 q: j6 G4 e* g; h - char *dmabufdest1 = NULL;
; I! Q' F% f0 j: N9 t) p+ A - char *dmabufdest2 = NULL;2 V) _, I6 S/ p1 P2 E
- ) ]8 s% V* a4 Y9 y
- static int acnt = 512;
" @9 @5 j5 x3 Z6 l D - static int bcnt = 8;
; F+ Z" T4 k# i* F+ Q - static int ccnt = 8; I- m8 F' e5 V6 {
- & E* A: j7 z3 E' q% t
- module_param(acnt, int, S_IRUGO);
9 E. ?& u: H- R4 s) ] - module_param(bcnt, int, S_IRUGO); y$ _- r8 M' m! I
- module_param(ccnt, int, S_IRUGO);
复制代码 ( T! q, X! i! p6 A- K0 B! @
: B8 O. F+ n$ r
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用. X$ E& s; ]# c5 `
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
# W5 n3 v+ N8 N0 h7 } 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
4 O# G" T. |, I0 E% y6 K) ^9 x+ Q3 b: g) m6 q
- Z2 r9 S' V( L, U
|
|