|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 9 B$ M5 d, S" A4 b' m" R( V) x3 p3 K
- [code]EDMA sample test application
4 {' v2 ]( `6 I" B0 l T5 j% s1 z* ] - /*% b! h7 S/ W) H7 w; Q
- * edma_test.c
* r+ l# `) R7 r2 P - *
0 \( I. g, Z) Q - * brief EDMA3 Test Application/ K4 a! `" Y. U, o T
- *( D) X8 J6 m) s! |% n' a
- * This file contains EDMA3 Test code.
" A/ d4 I @1 D9 U# R - *4 J& b$ [& f# U
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( e3 {( k& S4 y; x" k/ b, b& Y - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT- ?! g! h. o( X* x1 b3 n7 h! q
- * TO CHANGE.
9 }: w: [! c* w1 O& d - *7 Y9 v. s( z7 C0 \8 B, }- Q8 o
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 Q& y0 ^& A7 x. K - *
- C" M$ A) I2 F - * This program is free software; you can redistribute it and/or
! ^$ q& h* p6 \: @ - * modify it under the terms of the GNU General Public License as, @. X* j# z' p! Y1 {) D3 d
- * published by the Free Software Foundation version 2.1 C+ e9 U% F5 H
- *
& Y- w8 W2 A$ V4 F: W - * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ V P/ v, J- ]$ X7 z6 A
- * kind, whether express or implied; without even the implied warranty
/ I) c* c! u1 V9 k - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5 i$ B; c7 S2 r! | - * GNU General Public License for more details.
, h5 W* b! u$ W" K1 ^ - */
8 W# `6 m F- w2 `3 M1 I( w! v! j! Q - 3 P& m2 I2 Y' P$ `& c+ \) i. |
- #include <linux/module.h>
3 ^0 D F. G8 X* Z; S - #include <linux/init.h>
3 z. q6 Q+ K* N. h2 v - #include <linux/errno.h>1 ^1 u5 W2 o. ~
- #include <linux/types.h>
K: }% X& K* G% s1 l+ L# D2 N4 G - #include <linux/interrupt.h>1 ]- U3 h2 A* ^! z' J% b8 c! k
- #include <asm/io.h>
4 c- A0 c$ `, ]- N. M5 N - #include <linux/moduleparam.h>0 n' X6 H, s7 L) g" P
- #include <linux/sysctl.h>* V; d7 V$ _9 U8 f
- #include <linux/mm.h>
) |# F/ w3 m. P: W7 m z - #include <linux/dma-mapping.h>
$ K5 R8 n! F$ f" o# p! @, x
2 H$ Y2 b2 H: p! ~$ f- `- #include <mach/memory.h>
' u/ w+ T5 c. M0 ? - #include <mach/hardware.h>
% e% ~( }5 {$ a - #include <mach/irqs.h>; I9 A% q# U8 S# c2 y9 p. P ]
- #include <asm/hardware/edma.h>
. B( M/ b" d' P - * ~# ~ {2 y0 Z5 {
- #undef EDMA3_DEBUG
8 Y5 q7 [/ _3 t6 D - /*#define EDMA3_DEBUG*/( u9 _/ n. T l
- ( Z, u9 j z+ r- ~* t
- #ifdef EDMA3_DEBUG
* B X/ T. ]0 ^6 X/ A - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) O% q' {' \8 P/ w8 } - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)7 L( c) U. y5 k' @8 W& ?( u) m8 T
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)4 K3 W7 ?* c( I% l, _8 S3 M
- #else
2 g! p+ Q: K- ^, E3 r/ C" O - #define DMA_PRINTK( x... )3 B0 i; }! D4 H2 H
- #define DMA_FN_IN- A2 X) T# ^+ A, ^ E
- #define DMA_FN_OUT
5 ~/ a! z& d! k. e: m% G. y7 ` - #endif. i5 s/ h3 @4 g" c
. R# L d, w y; ^: K( v+ O4 ]- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
# X$ S( R: N y# a' s; J - #define STATIC_SHIFT 3
0 b+ i6 I/ m- \( d1 v4 f - #define TCINTEN_SHIFT 20
8 y U% D1 _; ^& ~ - #define ITCINTEN_SHIFT 21( y2 }5 y& I: \5 W; A
- #define TCCHEN_SHIFT 22
4 }8 c, ^8 x. _' Q+ E! W - #define ITCCHEN_SHIFT 23
5 \1 h9 I5 @' [9 a; h; j - 2 U% z6 t* D, }+ ]8 O2 G
- static volatile int irqraised1 = 0;
6 a, W3 h& a! H! |% q - static volatile int irqraised2 = 0;% G: p* L( V& n$ u
8 v; O1 m/ u% o8 x- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; o% _8 u$ w o - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( |: l s, x+ J, I - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 m$ F6 r$ u X" M/ `
4 L/ V; G' z$ O e9 ]+ c( x. B. y- dma_addr_t dmaphyssrc1 = 0;6 a9 y0 M5 ^: y
- dma_addr_t dmaphyssrc2 = 0;5 @2 v7 s6 `& {3 Y- J0 d. ?
- dma_addr_t dmaphysdest1 = 0;
* ^. p+ }$ c: z; _$ M& G" p2 d - dma_addr_t dmaphysdest2 = 0;
5 o% {. a5 g) {$ S) a) ^ - 8 C4 [- Y) `6 N& u# M, l
- char *dmabufsrc1 = NULL;
" Z3 g+ ^: u' R' b. p8 M - char *dmabufsrc2 = NULL;) G) e/ J1 T6 \# w
- char *dmabufdest1 = NULL;
x1 t' Y9 a$ q) A. o9 O" r - char *dmabufdest2 = NULL;
. F! N# I0 M6 L: S4 n - % W, t# s' a S* d/ `
- static int acnt = 512;. l6 U/ ]9 C6 K; w
- static int bcnt = 8;
% r- H& m( e* o- o6 R - static int ccnt = 8;) q! U9 A0 H/ \# ~- x
- ; Z8 Y, u$ _" a* I" s. ?
- module_param(acnt, int, S_IRUGO);3 d3 S$ f& z2 s5 p, S% y, M/ q+ N
- module_param(bcnt, int, S_IRUGO);8 {& Q0 n- e1 c1 h( @5 U6 z+ H
- module_param(ccnt, int, S_IRUGO);
复制代码 3 Y: o- b! C4 ~' F" r
& a& S; G/ s5 W9 ^% ^/ W! F2 u4 e
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; e+ q' [# E5 a! C+ Q' iarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
5 ]4 I) p* c- \( s! }+ U 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! _5 r3 F" Q- p' N. C9 E" {3 ]# `
6 r' Y' b4 X/ T3 k8 \# X! m2 Z# R* X
8 z) h' p2 f8 ]0 l7 \% S- F |
|