|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 + k. q1 E7 K" t& Z
- [code]EDMA sample test application
" M c* E; ?5 H. M, m - /*- M% [! B" K0 t! o$ A
- * edma_test.c
5 i3 E/ }; |) n P3 U - */ X! m/ x- ]6 G3 ]1 @
- * brief EDMA3 Test Application
& z5 \8 K( ^7 q6 t: S6 P - *$ ]9 Q" e9 Z+ |9 |' Q
- * This file contains EDMA3 Test code.
9 }, j) E1 x2 o3 m- s+ }0 M - *" M5 e X; M, e* c5 L! U
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
" E9 I" _" u/ N2 D3 p - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. U* K9 ]2 Q3 m
- * TO CHANGE.
8 h( P; {# Z/ f4 W) k - *+ h5 w6 ]# s) R( o8 ^ O
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
; f" ^6 G5 s/ L/ ` - *4 T) \0 L3 Q1 N
- * This program is free software; you can redistribute it and/or. t% v6 H6 B* I
- * modify it under the terms of the GNU General Public License as
/ }5 h: R: B# H& ^( o$ d! ` - * published by the Free Software Foundation version 2.# }1 }7 O6 {+ K0 ~5 u& s, F
- *
: |8 d9 V8 M H% l5 d1 u+ f - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
$ {: H! b% c# o, c0 s2 C) j$ ` - * kind, whether express or implied; without even the implied warranty
2 a2 U( [" @. K4 s% K8 \ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' z* j" h* s0 n, h2 o Z
- * GNU General Public License for more details.
; z- z- F: Q+ O3 F1 c$ N - */# K$ y D( w# S; e; R9 Y9 o, `! a
- " [/ r& A& a6 R
- #include <linux/module.h> T) {4 u% L9 I( q
- #include <linux/init.h>8 G$ W& X- l* }
- #include <linux/errno.h>5 M9 E) \0 N3 Q3 X: W7 G. }
- #include <linux/types.h>0 T4 _. }2 H! [" @+ Z
- #include <linux/interrupt.h>1 L* F. o$ l! _! ?( \! ?0 U* Y
- #include <asm/io.h>
3 W# ^3 y2 e, e% w2 Q3 e2 b - #include <linux/moduleparam.h>5 n6 U, T4 ^" d p
- #include <linux/sysctl.h>- G; o, M* f: C" n, ^. j; k
- #include <linux/mm.h>4 k J$ s* @, m/ ^( n
- #include <linux/dma-mapping.h>/ |4 g2 T5 ^/ W# p& U- Z) a
- 5 C& h& s. W: t6 z7 Q
- #include <mach/memory.h>
6 @8 J i; M- X5 h" Y% f" l - #include <mach/hardware.h>' U) t- a1 f. c& X
- #include <mach/irqs.h>7 F3 T5 V9 v& Z
- #include <asm/hardware/edma.h>
1 y. _1 p8 W3 r; m, ?4 E7 {+ _
3 X# Y' f; F3 g; q+ a+ o& ~- #undef EDMA3_DEBUG
' T5 T" ~$ m0 E4 j" e1 d - /*#define EDMA3_DEBUG*/& Q p/ o" s3 L8 d. x
+ o" _! g% i4 }* G! J- Z- #ifdef EDMA3_DEBUG% [: ]4 D7 _- Y% B' \& y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)- m) Y: a; [* n, z5 o, a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
" i3 {# _. v5 g/ C* w2 k - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# c( W1 M& Z: r& x. V9 |) z - #else
5 d2 E6 k; B1 L. J* t$ v/ e/ n - #define DMA_PRINTK( x... )
& ^: {# R+ z! T7 c) I$ _0 N - #define DMA_FN_IN
4 M/ D4 k! D& p+ B - #define DMA_FN_OUT3 a, X2 y# \2 B
- #endif
7 O5 ]; A0 e7 L4 S j
+ L: }$ J* t# j- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
; y/ z. g) ^) i) X; J - #define STATIC_SHIFT 31 y( U2 {! a( h* d) z1 ^, |3 A
- #define TCINTEN_SHIFT 20
) H8 B( C* P6 C2 v! ~: {6 |! o - #define ITCINTEN_SHIFT 21
: s8 Z$ ]9 C- S. J2 H5 ?1 W - #define TCCHEN_SHIFT 226 K8 F- O$ p0 Q% C1 R2 D
- #define ITCCHEN_SHIFT 23
8 u! N* X, N$ f2 _$ D1 L. M8 K, V - ) {6 {: b6 u0 ^" }
- static volatile int irqraised1 = 0;; B% q4 K5 d1 Q" B
- static volatile int irqraised2 = 0;
! N' f' p1 e8 g; a4 o - % t, D/ d/ H3 I& ~5 _( T
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ L0 D- B: Z7 e2 U5 r j0 y0 f9 Q - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 y& \7 v5 x8 p
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 P; `- S3 j1 _9 @) g. y* R2 v - / h3 C$ ?( r" F! d
- dma_addr_t dmaphyssrc1 = 0;
- A, M: H8 a8 C& t) a6 ^$ T - dma_addr_t dmaphyssrc2 = 0;' C0 W# m: I4 H% j, i0 v
- dma_addr_t dmaphysdest1 = 0;
7 d' l+ o7 e A5 _ - dma_addr_t dmaphysdest2 = 0;
9 n/ R. C0 M) i( t( ^
; W* P4 r( M0 d; P2 n- char *dmabufsrc1 = NULL;
$ S, O0 L, F/ p5 r - char *dmabufsrc2 = NULL;8 A4 e1 e7 F/ t/ S) G( o. l
- char *dmabufdest1 = NULL;- v& G: _. v/ ]+ e9 {! m
- char *dmabufdest2 = NULL;
; {+ S, A4 a( [- E# X4 U( X4 {8 z
- h, f: U+ R. d; T3 H- static int acnt = 512;
. I) s5 ]. ?. l7 f - static int bcnt = 8;
& w9 Q% W& E+ V5 P - static int ccnt = 8;0 Z* u+ S% U, N D
- ; b9 Z8 m! ^' U% B& D2 T3 z
- module_param(acnt, int, S_IRUGO);* B W3 y4 q( z, s. u9 T4 ~; m
- module_param(bcnt, int, S_IRUGO);4 m( }$ e8 J. K' f+ A) G! K
- module_param(ccnt, int, S_IRUGO);
复制代码 ) z+ Y6 ?1 J; _/ ~9 N: @ g5 d
& T6 B% E# W, I! ~+ \
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用4 U* J4 [ k. } z2 ]
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 f1 T3 C) r9 X! m7 v- s7 {4 Z) u 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 c8 R& e# L* h% }
. w# S2 c) h% [- h
. s, \) g" H; h% W" v _. m |
|