|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 d4 l0 V' P6 n* [; `/ H: O( T- [code]EDMA sample test application
! o, Y8 T; p5 Q K' } - /*
, U8 k% }- L" b$ j3 ] h - * edma_test.c/ C# _7 H; ^& h5 J, V1 S1 t
- *
6 M4 v+ w! _8 O( X! ^3 \ - * brief EDMA3 Test Application6 n- b9 x/ H9 H: U& z
- *
1 o, Q- C- C# C& R - * This file contains EDMA3 Test code.
! L2 x) Y( B+ j: j, d; Y - *
- T9 i6 n$ e+ q: o7 G - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
% O/ Y0 R' H' r6 P0 J U# ^ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT; i2 g* g9 C5 y
- * TO CHANGE.2 n/ ~! A, d: a: n; X' A& ^
- *
6 K% k! Z' a l0 {( ^# j5 ]& _ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* @, W. a- u9 g
- *
6 ]% q5 T) _5 _ - * This program is free software; you can redistribute it and/or
5 F; @* {: C+ |' O1 L( n - * modify it under the terms of the GNU General Public License as+ r, G0 Y7 w* W6 Q
- * published by the Free Software Foundation version 2.
$ f* s- x. p4 H5 A1 B - *; T+ \8 X9 N3 z8 Q& a3 q$ Y
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any" x& I, S$ A! U
- * kind, whether express or implied; without even the implied warranty
$ {2 D2 {+ ~/ n! S/ y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 k H5 h& e+ R7 t - * GNU General Public License for more details.
8 d1 Z/ j: M( y$ U; } - */. X0 s$ q+ M5 K7 Y( L# b
2 p; J; ?3 g, Z: c- #include <linux/module.h>
- q+ R& j. X7 i9 } - #include <linux/init.h>7 d! `3 |, L1 d. P0 a. g
- #include <linux/errno.h>; B* ]3 X- Z7 d! w8 x
- #include <linux/types.h>
) W; W" T8 Q- e& O4 t - #include <linux/interrupt.h>
4 H k" b* e; {8 b5 q - #include <asm/io.h>
3 z" C, J) N+ t* G# S7 Y7 J - #include <linux/moduleparam.h>
+ Z% o1 ~6 |+ ]' T1 Y - #include <linux/sysctl.h>9 h# Y3 ?$ x# b) F" P |! d
- #include <linux/mm.h>3 O' a/ B) u- [, j- s
- #include <linux/dma-mapping.h>
. ]( [# _$ h7 D$ D9 l; x - ) l0 b) s" ]& `+ V
- #include <mach/memory.h>
6 K& k1 l9 f! F. P) q; W$ r - #include <mach/hardware.h>. S+ \4 {2 c* l$ Y
- #include <mach/irqs.h>
! C5 Z3 h7 L- i4 v2 J' `0 s - #include <asm/hardware/edma.h>
. u, @% T0 N: d) ~5 v1 W
& X+ ]( e4 o- ?6 X( s/ c- X- #undef EDMA3_DEBUG
7 ?1 n6 t" W+ G" \ d - /*#define EDMA3_DEBUG*/1 M3 M2 J$ X) R3 L; r
- ( r4 Z r1 K5 Y; q4 {5 s3 P
- #ifdef EDMA3_DEBUG! q& T; |; V3 E# F( k
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)4 F4 q& W: U2 S0 [, u
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
- e% I: j- p: K0 L) r1 Q - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! V( P# L3 D. W f% Y - #else
3 s' K' n' d% ]% O T - #define DMA_PRINTK( x... )
9 s0 }/ e2 M0 r* E. m; j - #define DMA_FN_IN
0 \9 V4 s4 c, E0 e: K" j - #define DMA_FN_OUT
& |) m' T0 u( O4 ~9 m - #endif
5 v7 w k: r' k6 u. u3 e - ! ], i* K8 i* [4 O8 O7 u0 l9 H& N% J
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' f! [& {, G. P; v5 X0 ]' t
- #define STATIC_SHIFT 36 i+ L% ?. w% D' \
- #define TCINTEN_SHIFT 20: R7 i# U4 n% n4 S4 @* f! h; r# X
- #define ITCINTEN_SHIFT 21
' G% y2 y1 V7 A m! } - #define TCCHEN_SHIFT 22
6 J* S& K" B k0 H1 i - #define ITCCHEN_SHIFT 238 m" r8 W, w) k, ^/ L
- 5 p& Q; ]* B; D
- static volatile int irqraised1 = 0;5 ?! k6 U! ?+ T1 E6 L6 ~
- static volatile int irqraised2 = 0;! C9 H. c) }2 b# y1 N5 M
- ) Y- u5 x) ?; n5 p6 w0 V
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" M' L% F6 k$ Q/ n - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 S4 a l) y: G
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' |, A) G& P5 B t8 m
! D! B; z6 P0 y1 ?% G, d/ z6 V- dma_addr_t dmaphyssrc1 = 0;
4 S5 I* D$ x: b) C7 K - dma_addr_t dmaphyssrc2 = 0;
9 [' T% ~* }3 r8 l - dma_addr_t dmaphysdest1 = 0;! G2 d; G( ?9 ~5 P$ L) u- H% t1 L
- dma_addr_t dmaphysdest2 = 0;/ T2 b3 V C- S3 j9 u
- 1 Z2 q2 Z/ \ e; Z9 R
- char *dmabufsrc1 = NULL;2 C4 S P$ t* ?
- char *dmabufsrc2 = NULL;, x) ]1 A3 {* w9 u- s: q' \
- char *dmabufdest1 = NULL;
8 h! o- i) w# c/ q- W. t& U - char *dmabufdest2 = NULL;0 O' e, T3 B" u
( N7 p5 I; z2 O/ U6 n/ Y" d- static int acnt = 512;
$ Z' U3 o! i& i3 ? - static int bcnt = 8;
" w& e. k1 y0 g8 ]( g4 I - static int ccnt = 8;
9 g2 ?, f$ E, [* [1 e) D! d. c. f# {
j( @ ?+ W& \! J8 ]- {. ]4 Z- module_param(acnt, int, S_IRUGO);7 }. Y. ?6 q) s
- module_param(bcnt, int, S_IRUGO);
# X; o7 [; s5 P2 I: |& L - module_param(ccnt, int, S_IRUGO);
复制代码 2 z0 G! E4 J, z5 n I; D7 \
! y& G1 m/ b% J6 F2 }' [ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 Z: q$ ]4 d4 N5 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。9 p5 j# D* R$ B# Q, Y) Z) [1 U
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。& W! X0 {- ^( ?
0 Y$ q% J( ?1 o# I, j6 j7 I. S2 a' L9 {
|
|