|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 * D5 B8 g% F) \0 z9 v
- [code]EDMA sample test application
3 m; S, v) k! v( ^/ o - /*
' H: u, R) j& k; z- r& p - * edma_test.c
0 o% c( ^6 S. p6 g - *
" @6 e4 V1 a2 `( d7 @7 [4 `8 } - * brief EDMA3 Test Application
% m: F. T" q3 j! d - *# z8 k$ E# J- I% i& l
- * This file contains EDMA3 Test code.' z8 |$ j5 x5 f/ ^9 [5 p6 P
- *
3 ^& n( ? c N! t& Y - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% ?% H; }9 `' ^4 G" k ?- y& f
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT1 v0 m' J, ?" T. ~& e
- * TO CHANGE.( \& W& e; {( K1 I
- *
: g' W) U! {/ ]. l) b$ a j - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com// j+ K; G: O: y0 Q
- ** I2 r) H- L$ R
- * This program is free software; you can redistribute it and/or( E* U0 S. x% e. ~9 V5 w- h
- * modify it under the terms of the GNU General Public License as$ A' N5 C6 y, ?8 T5 z) s% C
- * published by the Free Software Foundation version 2.
* U S2 {) ?' A' n - *3 E2 R# M/ n* G2 b! E
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 o1 R. [6 {/ Q, v2 f+ B
- * kind, whether express or implied; without even the implied warranty
_( h# h$ C* Y. {! }8 k1 j6 n- E - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 M: ]8 h" l$ v" p# @7 p, R - * GNU General Public License for more details.
: B! s0 s2 F8 @" O. F& T" u, t3 f4 P - */, c% T1 d! C9 h. I' G- N! O
- , n: c( X2 s- T5 `9 L) J+ m
- #include <linux/module.h>
. j7 c5 A; o4 ~- A - #include <linux/init.h>3 g t+ |+ [- F: }, i4 z: B; a
- #include <linux/errno.h>
6 @' n! h0 Y' R' Z2 ? - #include <linux/types.h>6 @; E$ W% c; R9 Y$ H5 T
- #include <linux/interrupt.h>
; D1 ^" q0 D; e; n9 v$ C5 s - #include <asm/io.h>
' C; ?, m3 ~: a: m - #include <linux/moduleparam.h>
- H1 @* z1 z$ V - #include <linux/sysctl.h>
$ g, C5 x/ z$ w - #include <linux/mm.h>3 s, g, n/ N! T" w+ O7 T1 g' ?6 U
- #include <linux/dma-mapping.h>
4 {2 E) C. V7 d6 R - ; |- [' y7 n! r/ ~% B+ U/ B1 W; h% y( b
- #include <mach/memory.h>% I+ ^$ o- \+ E' z
- #include <mach/hardware.h>2 D' w: _9 X0 O9 L) X
- #include <mach/irqs.h>
: p8 @) Z9 T6 ^( S2 J - #include <asm/hardware/edma.h>
) `: Q, s4 Q h+ u+ U' D: J$ y
* \' q, R4 F) Q+ \' G% K3 e5 V- #undef EDMA3_DEBUG; H9 k# ]7 q0 M: M- a8 ?1 \
- /*#define EDMA3_DEBUG*/2 t9 _: V* D" d- e r
- v# Y( h5 _% a M- #ifdef EDMA3_DEBUG
- P5 b6 T% r2 L2 u" b8 p. I/ o - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)4 ^8 G- j4 y& e# Z* r
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# q) x/ U m$ P5 q" e8 I* n
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)+ ^+ u' Z2 o+ }+ A/ B5 u
- #else
- ?+ M) A- \* P0 f+ Y B - #define DMA_PRINTK( x... )
: E. C5 l; E# H$ u; n - #define DMA_FN_IN6 T' H4 Q$ }0 ` z7 J
- #define DMA_FN_OUT
K+ h/ k" v' H - #endif1 i" o% V2 c) ?9 F' Q
- k" q0 m( z! A3 j6 e
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- E, P; ?! C% A) X( l/ ^
- #define STATIC_SHIFT 3
0 z0 g) L, T. N. `. y - #define TCINTEN_SHIFT 20$ {' S0 u4 c) V# Y1 R2 b& x
- #define ITCINTEN_SHIFT 21
) D' m# J9 L. r5 B8 R- ]( S' } - #define TCCHEN_SHIFT 22
) m# U7 r# Y# a& c+ d6 q8 a - #define ITCCHEN_SHIFT 23* v! }: L# ]7 c' Z# W# o9 w: n
- / Y. C& s9 p7 K$ o1 `
- static volatile int irqraised1 = 0;% d8 F/ E9 }, B4 z1 q! k0 g
- static volatile int irqraised2 = 0;/ F4 t$ L; n& g" m3 F! r8 A
" c; p- q ?; I' L7 M2 p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& n8 P0 ?" Z+ A+ x - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 @! i7 M- x! Z0 e$ o" P
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' p3 H% O0 o2 K1 I1 F
; x9 V0 p2 _; F, `/ R* N3 \- dma_addr_t dmaphyssrc1 = 0;
1 S# O$ f! r" G Y( I& A - dma_addr_t dmaphyssrc2 = 0;; ]& P: H4 t- z5 h( g
- dma_addr_t dmaphysdest1 = 0;
8 D( R3 r' E ` - dma_addr_t dmaphysdest2 = 0;
- L/ g0 f0 ]3 i
Q5 ^9 u( e/ w) R! f6 J- char *dmabufsrc1 = NULL;' G; X* m. D) o& j$ o0 ^
- char *dmabufsrc2 = NULL;
6 F; I8 ^) I; ` - char *dmabufdest1 = NULL;: b6 k4 Y' H, |0 s
- char *dmabufdest2 = NULL;3 k. J9 [ X% H
2 V5 r k0 H( Q& }0 a* T: {- static int acnt = 512;3 @( w5 ~1 m7 J, ^5 u- q
- static int bcnt = 8;
3 z- r! d" V3 I; z. w - static int ccnt = 8;
, K3 `- B% Z% o2 o6 X1 A+ ~
7 K: ]- T8 U, R# `$ t$ }% {2 U2 k) }- module_param(acnt, int, S_IRUGO);
1 U3 ~4 ]6 ]1 w: S9 S" a' K2 O' D - module_param(bcnt, int, S_IRUGO);- s q% u! E1 v+ i3 z) k" O M
- module_param(ccnt, int, S_IRUGO);
复制代码
. [# K' } q0 N8 [$ ` o1 V* n4 |. J+ T2 m3 H
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 @( |/ Z. j- z3 x- I' {- G% S9 h, yarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。2 g$ i7 {2 `- G* `
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。5 n1 b5 ?2 B* O4 K% Y0 J
$ A! Q# T/ |7 Y0 e: p d5 A; U4 w1 |$ [4 Q' z# W
|
|