|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ; |2 |0 c. R3 s0 g$ g" L3 T: n+ n
- [code]EDMA sample test application
: A: q+ U7 ~" Q ~ m3 f - /*& I3 C& P2 r2 @% [! E, z' [
- * edma_test.c
2 V! z) \8 p# K% E5 ^ - *8 d) i. V$ Y# s) N: n# h9 |$ B
- * brief EDMA3 Test Application
& N5 g& A: g0 g+ b" f3 H* ~ - *
" ^2 a; s- V& D: D. k; v+ P/ _; r - * This file contains EDMA3 Test code.
0 [2 J' _6 Y- J - *: z6 @. v) W9 U- }: y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE$ X: T1 e) q% y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT( l" u9 O+ l- d
- * TO CHANGE.
% i6 C. j1 \% |! w1 U! Z. u - *
4 ?% C# I8 B2 @0 x# W' b8 o - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/- S; Q u3 l f j
- *
' l4 d$ m5 A# q! T- @; ~ - * This program is free software; you can redistribute it and/or
/ v% R& H7 b i2 b3 U2 E1 E - * modify it under the terms of the GNU General Public License as2 c Q1 e: a) p) e4 h; l6 h
- * published by the Free Software Foundation version 2.
# T) a* ?$ i8 K/ Y' l& o0 d: j - *$ E7 b: W+ |- \
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
8 I* J1 l) ]& @ - * kind, whether express or implied; without even the implied warranty- l# h: c J9 m4 M, E9 S; ^. i
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) r5 `9 k+ W1 f' ~ i% k/ C - * GNU General Public License for more details.
# M: A4 H! @$ U# O/ O O v - */
+ ]) v2 A: a6 J8 l
7 A" b5 K1 H2 M. d+ \; r( e6 u- #include <linux/module.h>$ b. i m. Z1 B( [: a
- #include <linux/init.h>. n7 i0 C. Y& ?! L0 E# p
- #include <linux/errno.h>
* x: r' l0 p# ?. W - #include <linux/types.h>1 f. J) T2 Y3 J: C9 r
- #include <linux/interrupt.h>
- b! |% y' t7 L! S- g - #include <asm/io.h>
8 {+ N& X1 G4 P1 u - #include <linux/moduleparam.h>( I. ]& L) o0 F; u! b+ t9 R8 A& }/ l
- #include <linux/sysctl.h>/ x9 [4 y! E& X5 C0 ]% R
- #include <linux/mm.h>- D W, j `& ^ J
- #include <linux/dma-mapping.h>; g7 P; Z/ \2 n' R
- # B K( I# \! }+ a/ p0 e9 _' C
- #include <mach/memory.h>
# S4 b o3 s/ {$ P - #include <mach/hardware.h>* P ~2 i- z/ j# Y
- #include <mach/irqs.h>
) ?# @: C/ f' ]* X) O - #include <asm/hardware/edma.h>
7 P6 K5 d8 N7 l6 m' y: V& d4 P - ( N* Y% _) I4 b. u
- #undef EDMA3_DEBUG' N3 G; M7 ^8 b1 @8 N2 z/ D' q
- /*#define EDMA3_DEBUG*/5 v) Q9 B! l: \- _9 S( _
- ' K \. V8 f7 ~! l v7 F( |
- #ifdef EDMA3_DEBUG. e' i/ c c: ] v
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
5 O( _8 }' U1 A5 d- g" [) @ D9 U# u$ z - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)% I* y0 \$ A) {% a$ r1 @# b
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). n2 Z* H8 U R' x
- #else
; A: A" i$ y+ k' A$ C( R - #define DMA_PRINTK( x... )! k! {# ?3 `( ^+ U. @
- #define DMA_FN_IN! p4 [1 L1 C# [' w& u/ U9 p4 z' f
- #define DMA_FN_OUT
6 X5 R5 k, g% b2 I( A: G - #endif
8 g- v2 Q' C0 j" w3 Y% V. e, b) V
' T% O1 a/ |, e, z$ v7 e( e c- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
% T( x! ~7 h- T" I - #define STATIC_SHIFT 3" S3 n% k+ N5 @0 i9 N
- #define TCINTEN_SHIFT 20( K6 G+ i7 v' o N$ z4 b
- #define ITCINTEN_SHIFT 21
" A3 X( w- p' }" m. n - #define TCCHEN_SHIFT 226 u$ C i% q( h; ?% {% s
- #define ITCCHEN_SHIFT 23; m; H5 m+ A3 z$ D' e" q# p1 N
- ! o, K# x1 c3 d- N
- static volatile int irqraised1 = 0;/ u! ]& ~& p. B
- static volatile int irqraised2 = 0;
7 H1 x, w$ y% V- F T2 K+ u0 | - ! R+ l$ P$ Y* ]+ a- x% L
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# R. H( H( S, a8 f% L - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* ~; b M- e2 Q/ l- c k' d- {2 e - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: e$ G" C, E: d; @! T) j1 E1 i8 w3 l" |# N
- $ [" T) Y" a( g5 O5 Y3 f" u8 q
- dma_addr_t dmaphyssrc1 = 0;
0 Z; N# m$ i3 D0 D% q. j; m3 d - dma_addr_t dmaphyssrc2 = 0;: [$ \" D) f# g- D! A L
- dma_addr_t dmaphysdest1 = 0;
9 |3 n, z; ] g - dma_addr_t dmaphysdest2 = 0;4 [4 r+ ?5 Z+ `+ }( y
- / s _, \. M2 C6 C8 c2 {. G& A3 t3 z
- char *dmabufsrc1 = NULL;
& Z, T; q% X: V8 w - char *dmabufsrc2 = NULL;4 K0 P- P$ n b. z+ E: v
- char *dmabufdest1 = NULL;0 y1 J5 N9 g8 [9 \+ {8 B ?
- char *dmabufdest2 = NULL;- ^1 {$ u, s9 t( V3 K% j
- ! F4 m( B7 B2 P! s( B/ f. @
- static int acnt = 512;
9 p- n3 P6 K0 j1 J* i+ _' R% W - static int bcnt = 8;
; x& a. E \2 }3 q0 I' V. j1 W p - static int ccnt = 8;
2 Q0 F& D* W1 J) m5 \6 B
3 x# C; H0 L* @. |" C/ J- module_param(acnt, int, S_IRUGO);
3 c, l3 c$ B) c0 h i9 U# T - module_param(bcnt, int, S_IRUGO);
0 z- g8 A) N5 M' l - module_param(ccnt, int, S_IRUGO);
复制代码
# k1 s6 b9 ?4 J9 l7 A+ Q& u, E; S8 o0 d& T
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
: t9 j1 Z, k+ z( `6 farm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。" B" f% s& a# C) x7 l8 M& B
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 ^0 ^/ ^+ o( W+ B: `- h
5 ?; }0 R1 u6 G5 `' e. c& H9 m
' I- S' L4 `2 S, s T |
|