|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 [* H/ L8 W! \$ O- [code]EDMA sample test application# \0 H; A3 }% R
- /*- x6 q7 X, ?1 R, W2 w
- * edma_test.c( Y2 M% Q9 W* g. _! m
- * U: b3 H7 Y( m3 l
- * brief EDMA3 Test Application
1 r9 ^1 ]" D- ?, b1 k2 L `6 i - *+ s4 E+ |2 d9 `" ~2 I
- * This file contains EDMA3 Test code.
. F" L" I# W Q; ~! T" m h! b& C8 { - *4 ?! i% X' Y/ d/ n
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# n# ~' H3 R5 A8 j9 A7 \' L - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% f: l+ Y$ D! y+ K( h) t
- * TO CHANGE.* r6 S/ B# } X7 t* K
- *
6 s1 X5 `! F2 ` - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! k- q- T& M; k+ }1 |0 ^' O
- *
$ o: I! q. @; n* B$ N9 R - * This program is free software; you can redistribute it and/or
% W5 A( g8 M8 ?# {7 ^3 H, } - * modify it under the terms of the GNU General Public License as) @ X. E; Z* Y0 B; a; J
- * published by the Free Software Foundation version 2.
+ o5 w# K1 m5 J7 j - *$ ?" J# A3 `% j0 s3 D- U" P
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" V- ?/ S D9 |/ M7 |% Q- }( U2 S; h# n - * kind, whether express or implied; without even the implied warranty
/ I' ~( H* B* ]. ?7 c - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; R ]/ ?; y: B" l) B! m: N
- * GNU General Public License for more details.
9 E! |4 e8 t, b1 Q& M1 e" r - */' O. F- p; g5 c8 C/ e6 w0 ]
- , ~# b) u. v: A, Y
- #include <linux/module.h>
7 j' a3 _. M) X3 C8 }( ~7 t6 ] - #include <linux/init.h>
D3 j6 Y4 W: D4 f i - #include <linux/errno.h>0 Z) e4 T* f4 F0 E" ~/ a5 ^
- #include <linux/types.h>9 s) q- \) I- P/ A: D
- #include <linux/interrupt.h>/ U* X7 R- x# f$ L7 m/ F S9 \
- #include <asm/io.h>- t# _1 e# k2 B* s+ c" C* Y3 o6 o
- #include <linux/moduleparam.h>, h- G6 o1 }1 _! k+ Q* B3 Y
- #include <linux/sysctl.h>
. B% E3 s: z3 U& y: ?: T - #include <linux/mm.h>( \8 [) C' y+ H2 u3 h1 [' v
- #include <linux/dma-mapping.h>7 e3 u8 z4 v6 J2 M' [9 L
& f ^; n$ G& w! O% X- [) Y I6 l' x- #include <mach/memory.h>! q" k, N% H3 L, u
- #include <mach/hardware.h>
( S3 J$ N0 h! s& G) \ - #include <mach/irqs.h>1 `; ]* w4 R4 Y8 z# L
- #include <asm/hardware/edma.h>! X, \( c2 J0 d& r. B4 D
- 0 k+ i; P6 s9 Z( ?: h
- #undef EDMA3_DEBUG
, Q! v4 ^9 a1 {' ]- X) a9 u - /*#define EDMA3_DEBUG*/9 E" a" F' V3 D4 x/ M( E5 h9 m; H5 r
5 a7 T6 \1 m; s" t, a4 z( B/ ~& W- #ifdef EDMA3_DEBUG8 y" L! v& O1 Q1 \+ L O8 D- R
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% z' ^# y! j$ @# a5 ]( e - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& ~# w' {* K1 t6 k0 o, `- R
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)3 h9 u; M z" k# _1 c' X
- #else$ b6 M" a3 n% P
- #define DMA_PRINTK( x... )% G" _9 B+ X* ~% z# o2 @* b% ~
- #define DMA_FN_IN. {$ C# r: Q) i
- #define DMA_FN_OUT3 I2 S- ~* _) i# V J
- #endif, j6 C! H) c$ V7 f& r6 T
- ( H5 A) V7 A. j% O4 E
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: T* ]+ ]5 M F, e: T - #define STATIC_SHIFT 3
- ~7 |7 n% e8 X - #define TCINTEN_SHIFT 20
7 x/ z4 `0 c7 f$ T - #define ITCINTEN_SHIFT 21
* N6 n* N6 c! { - #define TCCHEN_SHIFT 225 t. T* r/ ] N, x# w6 v
- #define ITCCHEN_SHIFT 23$ y$ d& s& }2 w" Z
4 \ H$ x9 q. c" G- static volatile int irqraised1 = 0;
: b2 X+ q8 s. @1 f. T8 Y) | - static volatile int irqraised2 = 0;
7 B+ P" N" p( U4 w - 7 i! E" X. z* J5 V( z+ M5 y
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: S2 B( X9 W+ n% T* m T# e# Y( _
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) c6 [* c. P9 Y' [! l; r% I
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ {% x8 T+ c1 l9 [1 B8 A" }
0 K( f# q1 s( V$ _" D9 ~# n- dma_addr_t dmaphyssrc1 = 0;
! u$ U* R5 V! o" l/ S, ^ - dma_addr_t dmaphyssrc2 = 0;8 y) g& x7 k J. W+ X; z
- dma_addr_t dmaphysdest1 = 0;
; W. w! z8 e. c2 B/ e' F9 _9 ? - dma_addr_t dmaphysdest2 = 0;
7 n, j! n1 B* H: O; f' L
& |0 Z- q# R3 w3 o- char *dmabufsrc1 = NULL;
4 f+ v5 U2 Y; C+ ~ - char *dmabufsrc2 = NULL;5 i$ P. f: i5 m: W3 B$ v* X$ z
- char *dmabufdest1 = NULL;
# R2 p" \1 v2 g1 f' ~ - char *dmabufdest2 = NULL;
2 ]' H" a. F5 s# d
; b: Q, i& w3 s" R' m. K- static int acnt = 512;6 v/ Z: }, v! `, o; ^
- static int bcnt = 8;
( a1 R' b( V+ E8 U - static int ccnt = 8;
8 y: c$ e" h+ X! p4 Z - ; \% h1 d, \/ t% z/ Y \- H" K4 s& A
- module_param(acnt, int, S_IRUGO);
% p$ m: P# h5 ]. } - module_param(bcnt, int, S_IRUGO);) j. \0 E, q( ^( b3 G# V
- module_param(ccnt, int, S_IRUGO);
复制代码
! Q0 H- U5 D1 M- c! H7 A( J) p7 y; ~# D2 S
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
4 i- P* A3 n, u. `' a/ Karm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 V1 X9 M# y9 m! ^' ~
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; X/ d( U3 G0 F" T3 p7 Q
9 Q7 L8 Y! l- D% c7 Z4 i8 j
, a! z% g5 C5 b, m% v# ? P |
|