|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 / ?9 K- f+ c. G" W# g/ h: T
- [code]EDMA sample test application
( v9 A2 Q; N0 K O - /*
2 ?: y5 E: B! m7 ^( z - * edma_test.c
% w8 f8 M. K4 Q& W' S - *
5 o9 ~( j/ C5 ~- N, } - * brief EDMA3 Test Application0 L- m0 Z7 k+ l3 f. z* |7 S! n1 ?
- *+ X. ]6 |& {3 W- u1 ^6 U
- * This file contains EDMA3 Test code.
" P$ @' j! Q/ _5 ?' s) }" B - *
6 y! y; \' X/ ]/ C% Q& g* x6 d5 X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE) W F! h8 G0 d' k
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT" r) n4 V- W) ~5 N
- * TO CHANGE.
# I) L+ J* w# l, w- W3 l& } - *. T* o# h) ~2 w% G6 k& m
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! Z# v! `- j$ Y- W
- *
$ Z4 i" X+ E# s2 o. K7 }" \ - * This program is free software; you can redistribute it and/or& K" N D9 e" @
- * modify it under the terms of the GNU General Public License as; ^6 W! A. i! b/ L( ^6 F% Q' ], ^1 t+ q
- * published by the Free Software Foundation version 2.
1 g- `- @7 S3 |* K* | - *5 x% b& L/ u+ R' H
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
0 u9 Y9 g4 q" ~7 J- Y9 M9 ^# e' l2 } - * kind, whether express or implied; without even the implied warranty0 g* A) i M$ k5 [( Z( a- X
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the: A4 i* J2 B+ C! W' |7 r
- * GNU General Public License for more details.
4 L& Y1 A* C2 J - */: x3 d0 ]2 ~7 R: w H# H* ^
2 C3 V7 r" R4 C" B) x/ V) r- #include <linux/module.h>! W: D E4 }% p4 R( X2 s
- #include <linux/init.h>& B: r4 N0 N. }* j" @' S P
- #include <linux/errno.h>
: D$ q- M6 N; n- V4 j( Y/ z5 p - #include <linux/types.h>
6 D. r E, \9 Q4 H - #include <linux/interrupt.h>6 y8 b6 k/ l: E2 k
- #include <asm/io.h>
6 _9 v# }0 Q. }! V. Y - #include <linux/moduleparam.h>& u. n# A+ L" p6 T, ~( p5 N% @9 u
- #include <linux/sysctl.h>! z0 Z# i6 J5 p6 R
- #include <linux/mm.h>! h$ U, c. U8 Z* C! ` X
- #include <linux/dma-mapping.h>% s9 B# w% E3 \% B1 S/ F' k
- 5 b: ^ h: d2 ^% z; X0 k2 @
- #include <mach/memory.h>
) I1 v, ?7 f& z8 A - #include <mach/hardware.h>
7 Y) l; ^5 \6 L/ u. A+ y: r" B9 | - #include <mach/irqs.h>
+ W) O; @& e( J# t0 y/ v% o u - #include <asm/hardware/edma.h>
" E& Z7 r0 @0 U& @7 \9 Y - 5 C1 l, r% M" m
- #undef EDMA3_DEBUG
5 U- G) i; q/ h) X& f - /*#define EDMA3_DEBUG*/
) Q8 Z+ y" _, P - 2 l* L6 g _: X- t
- #ifdef EDMA3_DEBUG! m/ [6 s$ ]# a; @
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ a ^# `$ d+ k1 A% N9 H - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)0 X/ ?+ ~4 P7 V3 L+ D2 K2 R7 G
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)4 Z) @* _! }5 k, d0 B
- #else6 b/ N5 I, F2 H
- #define DMA_PRINTK( x... )
+ {% o1 Z) ^9 H0 k) O2 A - #define DMA_FN_IN
5 C- F( d1 u0 B9 L0 O% A7 H+ A - #define DMA_FN_OUT
* C$ c. i2 V3 i: _: d, y, H& x0 W( K2 n - #endif9 T6 Y3 o3 L% {+ \9 ` \. t
+ M) c5 m9 T) N" s: z+ @& Y! [- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, C, A) F+ A( e# L5 J( C# B$ p - #define STATIC_SHIFT 30 I, \1 u0 n, h
- #define TCINTEN_SHIFT 20* K6 u/ ^; V* U: N4 g/ z6 q
- #define ITCINTEN_SHIFT 21
* v- `( B/ u" r# h, \ - #define TCCHEN_SHIFT 228 u* l/ ]1 S7 Y/ B3 W$ J. R
- #define ITCCHEN_SHIFT 23
0 @; r5 M/ m& W( ~' S - $ ~: W; K7 d1 O' ^' |
- static volatile int irqraised1 = 0;
% O' d' I8 B" \/ g - static volatile int irqraised2 = 0;
3 A7 y; D7 t; g4 E* U2 `) ~. x - * M1 b* M v. v
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) ^. D' G1 M( u2 F6 R7 O3 L - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& r9 u% q3 T1 v# Z - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- V) L, d6 V- l% y* Q* S$ m, O
& V( y- |/ m% e$ e/ u- dma_addr_t dmaphyssrc1 = 0;
$ m& ?* G3 ?; F1 F$ c; v - dma_addr_t dmaphyssrc2 = 0;
9 t' ?8 R" I5 }+ x3 g; y$ _8 { - dma_addr_t dmaphysdest1 = 0;. p$ O$ r# ~5 e* |
- dma_addr_t dmaphysdest2 = 0; z- w+ K3 u W& N5 G* S' ~1 }& [
4 s( d' w |9 Q, [9 ^- char *dmabufsrc1 = NULL;; B }% _9 B6 T+ G
- char *dmabufsrc2 = NULL;
: Y1 l' W: V) v4 j7 P# p+ I3 R - char *dmabufdest1 = NULL;
% x8 i: f; n; B. K" \ - char *dmabufdest2 = NULL;
6 O! f, d$ f4 R! i
p7 u; k! n. E {- static int acnt = 512;+ A+ X) z, C0 ~5 J5 Y
- static int bcnt = 8;9 C1 x' I, l/ }. y4 m
- static int ccnt = 8;5 A4 F8 M- s# B) n
- # `5 \( S9 U" @$ h0 n \
- module_param(acnt, int, S_IRUGO);
/ \% x p7 z6 }% {3 p, J3 k - module_param(bcnt, int, S_IRUGO);
2 P Z0 E+ w2 c' M" l( d/ c7 B' h - module_param(ccnt, int, S_IRUGO);
复制代码
' ~% n" q( b3 u+ a
/ C) o. p7 I8 X1 P4 i 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用) C4 }' I4 Q; ~
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# A. T! P# V& H
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 e' N" h* N2 N+ g' G
! L9 K! G0 N# i" D; Z6 q
: s( O/ m2 X( M0 y; @ |
|