|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 - K4 k0 k# G0 ?0 H
- [code]EDMA sample test application* T0 M. t" z) r1 F/ y E
- /*" |4 Y, x* @' z5 Z8 `$ J
- * edma_test.c
' N4 m/ `$ {! f9 x% H - *
% D/ E: J: I: U$ n) z6 S5 ]% Q2 C - * brief EDMA3 Test Application
: q- h& t' l( B - *
4 c. g* O8 e/ a: d - * This file contains EDMA3 Test code.
4 u8 E/ s' Y3 h4 e - *, e& d- ]" ^/ {8 v4 ?
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE! e4 k5 M" @) H
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# `& A; [; w9 t! V - * TO CHANGE.2 m! u' x- F! O$ _
- *
; _6 I* |( E' q - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
( m; D, u( c: _/ W) b# s - */ B8 u6 H4 x0 y; p" }9 y# k5 M1 j
- * This program is free software; you can redistribute it and/or1 v5 ~. |3 X8 R0 `& L/ f; r3 O
- * modify it under the terms of the GNU General Public License as: A9 F7 a- G4 x4 t
- * published by the Free Software Foundation version 2.
) z6 N$ L6 |; |% { \# J) a0 S - *
5 N) `. x8 U+ O - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 U) P/ {3 u7 u% ~ - * kind, whether express or implied; without even the implied warranty1 i3 Z% O+ n" X5 j7 r7 D5 t; O
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 ]$ C3 e- U" p$ [4 A$ ~
- * GNU General Public License for more details.; N( O7 R1 a% B7 D0 r
- */) [0 z O% t+ n( s' i
- % q8 u. d# X& m: L" J+ a
- #include <linux/module.h>. w: f# x% S( J, o
- #include <linux/init.h>/ E; ~+ k5 @" D3 {0 d8 b) {6 ?
- #include <linux/errno.h>+ l" E2 n e3 @: {1 \
- #include <linux/types.h>
5 n/ Z/ d. Q) P6 k9 a - #include <linux/interrupt.h># u2 n5 K8 j# ~) f
- #include <asm/io.h>+ Y, R) D" D6 }% d
- #include <linux/moduleparam.h>; b2 O' @$ i' S- i4 Q( F
- #include <linux/sysctl.h>& O" y9 C: A# M
- #include <linux/mm.h>" ^5 E! G5 H- a8 H* O
- #include <linux/dma-mapping.h>8 {6 V u. x3 O9 r4 k( D3 o4 H" D. G
- ~& c: R4 \5 L% W) T& U2 f
- #include <mach/memory.h>+ M: s* K* p+ W, o
- #include <mach/hardware.h>
# v: m p& l6 b$ X - #include <mach/irqs.h>7 z9 R) t/ `% X/ Y# o
- #include <asm/hardware/edma.h>4 u7 m; h7 n/ G+ k: q
- 4 y2 n5 ?$ \8 z, e" |
- #undef EDMA3_DEBUG
+ T* N4 @9 s" }" h& y3 E2 |# i - /*#define EDMA3_DEBUG*/
2 [* j6 r( ^( D2 k' F5 s: @' [ - & C; M2 c5 ^3 J
- #ifdef EDMA3_DEBUG8 \4 w. }4 W: Z9 B# u" N$ T
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 s& `& d" ]' H3 t7 A - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( b0 z j$ P. T+ f8 r& a2 U - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)3 ? ?' q) }0 t7 x; u2 M0 j
- #else, ^: S! T7 k f( j% K
- #define DMA_PRINTK( x... )1 i' |- B: g8 r
- #define DMA_FN_IN, a# o2 u/ F' C3 i( L8 T _
- #define DMA_FN_OUT" T4 Q# ?! y' t' B' l" H- F
- #endif( w$ R/ Y3 m9 ^) p; ^7 j" t
8 g1 _$ U6 Q3 P( s# W) Q# Y- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 G h2 |* i# p - #define STATIC_SHIFT 3
" F8 v. _& U% K8 H4 F9 H/ t - #define TCINTEN_SHIFT 20- L1 u/ z. d& L, s: L
- #define ITCINTEN_SHIFT 21
9 R4 n( e- o: W; a- S - #define TCCHEN_SHIFT 22
6 i1 |$ C' v/ L, h! t1 A% U8 d - #define ITCCHEN_SHIFT 23
9 Q- L& F9 i0 F# b6 D3 i. r. n; a
+ }. j: a) K$ q. T, V7 Y8 @- static volatile int irqraised1 = 0;! B% D% ?) ]! I
- static volatile int irqraised2 = 0;: M$ @$ e- S8 p9 m5 l* v
$ v# Z) J) B3 Q# [- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 n3 \! M% M/ b
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( Q. v1 X4 X3 ~$ A9 {) t9 \
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& f, C$ o% y5 P( v
- / ~/ `5 X3 ~6 y' `
- dma_addr_t dmaphyssrc1 = 0;# T5 s& {# _/ s/ A) I5 x6 j9 ~/ e
- dma_addr_t dmaphyssrc2 = 0;
$ ?, j. M: B: V6 M% B5 v) r4 i - dma_addr_t dmaphysdest1 = 0;
6 ]' j0 e$ p8 h6 E; P. V' c - dma_addr_t dmaphysdest2 = 0;* z- O- k- ]. S' U, [+ ]! h0 M& P
3 u+ @" E; M) }' Q8 v5 [- char *dmabufsrc1 = NULL;
1 L" ]' k2 U, C6 e) c - char *dmabufsrc2 = NULL;! ^. Y5 N$ V# U4 z% e) Y' m
- char *dmabufdest1 = NULL;2 b6 j) U2 U6 E$ z& I( g
- char *dmabufdest2 = NULL;5 U m$ |+ m" Y% N
: y" ?" Z* m6 Q' i" u% Y& O& s& E- static int acnt = 512;
. j& F1 w: v7 ~ - static int bcnt = 8;
6 g4 Y; D9 ?2 F( k0 G - static int ccnt = 8;
$ s0 M% N0 K/ U2 `1 t- d
/ H% l! T V* ^ `) s- module_param(acnt, int, S_IRUGO);" c; t- k2 Y+ C/ e% \$ O: H# o
- module_param(bcnt, int, S_IRUGO);
+ i8 f& `# t% W2 I0 t4 O. ^# i - module_param(ccnt, int, S_IRUGO);
复制代码
; H' J) H) X Q; D. }, ~
- K" g7 q0 q* i1 I& s 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
* z' M2 I" q- `% z. Sarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ J- r& P6 M. y6 o4 @; K
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。4 g+ ^4 n: d/ _& V j# A" N/ ~0 Y
$ |6 z' V- d) w" P; S
Z2 w3 F; `0 d5 q
|
|