|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
0 _: e! h2 R- L3 P+ S, S- [code]EDMA sample test application
9 g0 k4 L3 D8 z - /*+ F5 d1 l Y% j! J
- * edma_test.c
) u& P! p3 e) d8 T - *
0 A j# [% ]0 h# U, i6 n2 C - * brief EDMA3 Test Application
: g, a/ v) F% I# C - *3 `$ `1 I2 u" T2 r& s* ?
- * This file contains EDMA3 Test code.! J4 m$ r2 R- ~$ M
- *
7 K( m. h, e6 D& g$ C- E0 p' j0 O6 h - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# L, ]& z7 O, n" Q, h+ E - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 F z8 A$ V. m# ]
- * TO CHANGE./ `- b# p" Z( t8 l7 i& B
- *, i O, ~# G& W& I3 L/ J
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/9 m% K6 [! c3 e1 i" r/ L: X3 ~, B) C
- *
) v" O9 V, Y( [8 G& W5 o5 |0 E - * This program is free software; you can redistribute it and/or) P5 o: J- ^; X/ `: }
- * modify it under the terms of the GNU General Public License as
$ v% V N8 G0 x$ \, _. W - * published by the Free Software Foundation version 2.+ v3 i& Y+ A7 v5 X; W
- ** h7 T/ B5 i @+ p4 I
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any" [7 @) K8 c/ L) R$ e
- * kind, whether express or implied; without even the implied warranty% N9 F7 ~ ~3 B- ~3 A' P' {$ A
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ I. n$ c4 t. w. l- v( R i2 \3 C
- * GNU General Public License for more details.
9 o7 N6 h( C2 T+ h - */, }5 T& J c2 y% p. p9 v F7 P3 P
, n) u' F+ i% A( s* a5 E& a6 F- #include <linux/module.h>
0 g6 d9 c2 B' q. `; Y9 g - #include <linux/init.h># S z* U! Q# R) G4 r
- #include <linux/errno.h>. h6 ~/ v9 W) |; A6 B
- #include <linux/types.h> w6 o; O3 W2 m; ?5 _% i! L' G
- #include <linux/interrupt.h>
, M9 j0 w. ?8 K6 Y. g - #include <asm/io.h>
" M- x$ ?2 q2 ]) N' Q - #include <linux/moduleparam.h>
# r' S+ G3 d R4 i& F8 m - #include <linux/sysctl.h>; N! J3 u: [/ A% v
- #include <linux/mm.h># B* z |1 A4 D3 }) @
- #include <linux/dma-mapping.h># A" m* w* X# T
- & y6 e, e/ i1 f7 u; W0 l
- #include <mach/memory.h>& e! c* ]( S4 B3 `9 o
- #include <mach/hardware.h>9 ?. C X3 b3 O* k
- #include <mach/irqs.h>4 ~) \1 b# m! ?0 s3 L: K5 }0 B
- #include <asm/hardware/edma.h>
- {8 `. e0 H d8 W - ; w& ?7 T {# X* A9 v% j
- #undef EDMA3_DEBUG; z' }0 G1 X& y8 H4 _5 G i
- /*#define EDMA3_DEBUG*/
& C {. N$ f3 \3 W$ Q2 S - 9 z* h9 b; Z9 K/ V
- #ifdef EDMA3_DEBUG
; J0 u% U% j, H# V - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% a; k! R, i4 v! i - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)4 s1 E. M6 l% B! R/ h
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! e. F; B3 d0 b9 c* W! Q - #else
V5 B# a. u5 d$ V7 s- y - #define DMA_PRINTK( x... ); d4 k$ j3 F) N0 I! S1 |; @
- #define DMA_FN_IN0 T$ z. ]; u+ b3 C: x# `' C* p
- #define DMA_FN_OUT
, s- |8 t# w" E/ F3 Z - #endif& S8 w) y& |, [+ Y& E3 _
- ! j* x1 ^& K; d( }/ ^# p
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)9 w2 f# @, K2 [
- #define STATIC_SHIFT 3 l$ B! T: C( ], h+ ~( J
- #define TCINTEN_SHIFT 20
0 k* M( m% {. Q% G7 A* M - #define ITCINTEN_SHIFT 21- Q- D# f2 O2 m. |- E( o. d# s# D
- #define TCCHEN_SHIFT 22% }1 \9 h2 \7 X P' V' m
- #define ITCCHEN_SHIFT 23& G. d, D! h0 ?' K5 Q
" C4 J3 s% U/ P" c6 H8 ?- static volatile int irqraised1 = 0;) G4 J5 Q8 t+ C1 O+ J" _, G; F
- static volatile int irqraised2 = 0;
5 m9 z7 |9 J! B' Y$ L% m# i - 6 W7 x; n% K+ L$ l2 ?% |+ e, w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 R" v2 X7 ?8 O. c! f, ]% i* }2 ? - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ p% d- P* a0 T# i- [ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; W& P8 u2 f6 \( K; e
& X& v4 K2 b" ]+ N5 }% Z- \- dma_addr_t dmaphyssrc1 = 0;6 c9 Q2 x0 T9 M. y# f7 q
- dma_addr_t dmaphyssrc2 = 0;* P; ?, G4 u0 u: }
- dma_addr_t dmaphysdest1 = 0;3 ]! z- E0 H R3 D, `
- dma_addr_t dmaphysdest2 = 0;
$ v8 j8 \: [. D/ V
O6 w) ]8 J1 S9 W- char *dmabufsrc1 = NULL;9 J. z: z4 V& `8 Y5 ` \
- char *dmabufsrc2 = NULL;
$ N0 D! C6 V O7 Z - char *dmabufdest1 = NULL;
/ f3 N. d w; }- V# x - char *dmabufdest2 = NULL;
* Q, Y$ L3 K6 f! R' @
' L7 t. G. c5 q* |4 j/ B1 Q- static int acnt = 512;
+ [. u Y! F7 d. c* b - static int bcnt = 8;
# T8 {$ J& t' t- C: N( y/ L5 B - static int ccnt = 8;/ X% Z2 z7 G. s% k' D' V
- " C F _8 f8 h0 ^! `* m6 q
- module_param(acnt, int, S_IRUGO);# H5 d- K2 K( E0 ?" ^( ] l/ f& A
- module_param(bcnt, int, S_IRUGO);: l R+ t$ O( l5 F+ g
- module_param(ccnt, int, S_IRUGO);
复制代码
$ D. W$ `7 P0 B+ W0 M$ P
% e: z2 C8 @( e9 K' [9 l 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用* A; a. p5 [2 b4 j' i! k
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 E3 g7 ]2 t9 O% w3 T" z3 ^
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
+ F. k' Z7 \) _& P/ {# o* @: Z+ s+ x4 L( [' k) ]( Y1 i1 B
- A y! O8 b0 a, s
|
|