|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 . Q5 v' ^3 }2 E: e7 V# v
- [code]EDMA sample test application2 i1 v7 E* U7 B: {8 U
- /*6 f X+ s+ P$ E% S. u
- * edma_test.c
% n0 n/ N! |7 o9 T+ y: }. X8 q - *: Q) H h7 h# u& K9 \' a
- * brief EDMA3 Test Application) H2 f! F+ c! ^, h
- *" s7 K0 z6 \- _% j! m& d
- * This file contains EDMA3 Test code.! t$ T# G" j( p4 T% p
- *
; U9 D; i! p7 K. f6 \1 Y8 { - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
- Z) f7 Y/ ~ b8 Q8 u! P8 n1 N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 Q8 b) Y7 A/ a. z- X6 P - * TO CHANGE.: D$ W; K$ [/ k! _
- *, p& e& Z9 b$ Z- ~
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/$ }# u3 Y- n r" \+ X# m' `
- *
! e/ W2 _0 j& e" k* ]$ Z7 A" c' e - * This program is free software; you can redistribute it and/or
0 J" T3 Y X0 Z0 V" ^9 Q - * modify it under the terms of the GNU General Public License as& Q: A7 V' r7 j7 A7 ?; t
- * published by the Free Software Foundation version 2.
; q T+ l H9 a7 u3 h6 T# \ - *# k" q/ _7 ^" o- z1 F# t1 [* C
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
$ C/ d. A* c$ Z, y9 n E0 M& K - * kind, whether express or implied; without even the implied warranty% ?: \' h. ]* r* u0 J9 r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the0 |3 ?5 l. Z4 ?& j
- * GNU General Public License for more details.$ c3 t' |; K* O. f
- */6 ?) y Y M6 A1 _
- - f* Z& B) j; z4 d0 `0 [" s' e
- #include <linux/module.h>2 g1 K0 s% [+ L; T
- #include <linux/init.h>
" Y V' J& s' l - #include <linux/errno.h>$ ]8 D% v9 d0 m Q; Z
- #include <linux/types.h>$ T7 {; N1 p6 |$ B7 Z' r
- #include <linux/interrupt.h>) M/ y' w0 \5 \& V. m& o) I2 T1 ?9 H( B
- #include <asm/io.h>
7 h6 L$ ?; B8 l! k+ ~# W - #include <linux/moduleparam.h>7 |3 e7 T1 L/ _) A8 k
- #include <linux/sysctl.h>' a8 w' n5 T3 b5 ~
- #include <linux/mm.h>
) d+ M( A" a. L4 j0 U8 [ - #include <linux/dma-mapping.h>
, y; |$ b& G2 W" \
% M4 G. [6 @+ g- @& C) V- #include <mach/memory.h>
. J* r. w% {) G+ K; j @; B$ m/ | - #include <mach/hardware.h>
/ w+ f/ s) h" S3 R/ m - #include <mach/irqs.h>
% k. {4 H( N" H7 O7 v+ L! H - #include <asm/hardware/edma.h>6 v$ h3 L/ z4 `3 e# i6 F2 b
- , \8 H% H/ I8 c/ S
- #undef EDMA3_DEBUG
6 v$ G0 s) m" p! x9 H - /*#define EDMA3_DEBUG*/7 z8 p4 A8 y" A9 u
- : K0 N P* m! U/ }1 i: [5 S& P$ t
- #ifdef EDMA3_DEBUG7 p/ w% o2 k9 N
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! }% B" G- v5 N) O% ]1 |5 Q7 V9 r
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
' Z% K- I. q# I" K - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
$ _+ u5 h5 Z# X - #else- o7 ]6 I% o: ` Y* @! w
- #define DMA_PRINTK( x... )
2 X$ e+ s+ {" H8 `( m# P+ T8 | - #define DMA_FN_IN6 k+ v* T, `) p: b4 [0 [8 w8 g
- #define DMA_FN_OUT$ c, y3 c P& q
- #endif, d- x0 i8 v4 u" U- S
- + `* T0 Z* _4 Q# K
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)7 V: u. A5 J3 C0 x; ^
- #define STATIC_SHIFT 39 L8 h7 {0 ]8 Y2 w( p+ v2 k# I
- #define TCINTEN_SHIFT 20
0 |3 s2 o# m+ X( i+ [ - #define ITCINTEN_SHIFT 21
, M) G, A y# ` - #define TCCHEN_SHIFT 223 W8 A6 V- B3 ]. r
- #define ITCCHEN_SHIFT 23; Y7 r/ q, L7 l, g& o
- 0 u) j/ S+ B- Q, e# Y; L, @
- static volatile int irqraised1 = 0;0 w5 B- C8 I% B, _% k7 Z
- static volatile int irqraised2 = 0;1 {! v" P; e5 M# W6 r+ q G
- # g% \! a4 Z* _5 u
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 N4 C8 }, s0 k5 j, G& M4 n4 s - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 i) {3 @5 X" `. D0 g% j. U
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. F r; ]1 U4 i( f" g: I2 g/ d
- 2 P j: M7 t5 s; c" L/ b6 M+ f
- dma_addr_t dmaphyssrc1 = 0;
1 t9 Q% @; Z* o$ w* h: k - dma_addr_t dmaphyssrc2 = 0;8 o9 [2 h7 Y" D) h% ^/ _# `
- dma_addr_t dmaphysdest1 = 0;6 c; L/ [3 A) P+ ?' q$ L
- dma_addr_t dmaphysdest2 = 0; y0 u+ z# M: L& L9 [! v e
- ' C# M5 u7 M r3 A5 u# `
- char *dmabufsrc1 = NULL;( P) j: x7 A8 f, s8 z9 P2 j. n( W
- char *dmabufsrc2 = NULL;
, n& R+ b$ c- P2 J) v - char *dmabufdest1 = NULL;2 R! d V* J3 `, Y
- char *dmabufdest2 = NULL;
& n$ I: ^* @: \$ Q) n+ X
) R4 F) V M) s( ~) H1 e% |2 _- static int acnt = 512;+ a' Q6 h, L9 K) ]
- static int bcnt = 8;( X. Z9 @, d+ [( `6 q/ j& S2 g
- static int ccnt = 8;
) ^$ m# R% K7 ^2 j$ Z7 ^1 M7 Q1 e4 `
7 y& b. Q$ d) @' T- module_param(acnt, int, S_IRUGO);0 `) D% E0 W6 ^
- module_param(bcnt, int, S_IRUGO);- d* Z+ b& Q) D; n" B
- module_param(ccnt, int, S_IRUGO);
复制代码
" _$ S0 P, {3 n) M v9 R
0 ?. l/ k% i4 v% k, s0 U 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
6 E& \8 \1 X' ^- h0 Q1 Q( \# k2 harm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
7 j# e; M) b. f' ?7 Z8 J 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。, u; s+ M/ Y9 I& x5 i* {$ e+ N; ?) j( L
0 s% m' Z+ |/ E+ y+ ~; L
, ^3 o0 g$ z+ T( b8 b9 ~( x9 J
|
|