|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; Z# d& f5 A* `/ o( x- {) s- [code]EDMA sample test application# h* R: p6 w/ {
- /* c7 [# L. x) g: [# X" ^
- * edma_test.c) A, g7 j5 L) `+ w, M
- * |# I5 m- d4 G- G u
- * brief EDMA3 Test Application; X3 u# c' u4 n
- *# o0 v" |+ o; T1 ?- R5 x$ c
- * This file contains EDMA3 Test code.% R" m/ P e N0 \2 n6 ?
- *, W: W. @& d! p; A8 N: S8 \
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
6 b8 ^' S% E: D8 ?9 p - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
I4 T) e) }' ^% D D- t - * TO CHANGE.
# [, q: I/ `/ F& r - *0 s. T" y' `& {
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ t1 H0 n8 Q4 _4 E - *
; y6 E9 j4 m7 I( }0 I6 } - * This program is free software; you can redistribute it and/or7 u! t% O+ M( ]. D
- * modify it under the terms of the GNU General Public License as6 @/ \' f$ K4 ]& d- ]: e9 H3 x5 |: Z, q
- * published by the Free Software Foundation version 2.0 u' `- b/ a, m, x5 n& t, A. s6 O# h
- *! p/ h; n; K. |+ v6 D# A0 S# f" \; b
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any O* c9 W4 s- s
- * kind, whether express or implied; without even the implied warranty1 a/ S* z* u; S o' p8 N8 U
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0 S7 S* r. `( A! A$ R7 n - * GNU General Public License for more details./ v% O0 Z1 }8 L
- */& b- o: A; K9 n2 {
0 z3 u( u4 ]0 A) a/ L' O2 ~3 {- #include <linux/module.h>7 D C1 i6 A% d( g
- #include <linux/init.h>* N. A+ T( K/ }3 C$ x; D9 l! h6 x: _
- #include <linux/errno.h>4 F% Z. T) V a9 j6 G0 }# b3 t
- #include <linux/types.h>) X; g/ N2 e! Z1 K7 p) Z
- #include <linux/interrupt.h>
& L" F# p. _2 P# U0 w# w! { - #include <asm/io.h>& r+ {3 a& Z, u+ \- {% \5 P
- #include <linux/moduleparam.h>
- K" [8 p# s! I9 ^8 p8 J5 M - #include <linux/sysctl.h>
, c" c/ H' X/ o0 ?( _ - #include <linux/mm.h>4 T6 C% }8 {0 Q# U
- #include <linux/dma-mapping.h>4 a3 W6 m0 L$ Z2 g# b
! H5 D& z2 `1 N) a+ h" z- #include <mach/memory.h>
E, O( h0 t; W9 N u. i - #include <mach/hardware.h>
/ \& R, u$ s5 N8 `; K - #include <mach/irqs.h>8 ]' ~: v2 t2 L `! G
- #include <asm/hardware/edma.h>9 o; p/ ^) F- L
; |4 i" D1 F. J8 N6 f8 t; c- #undef EDMA3_DEBUG, V) Z# E9 _8 t: t
- /*#define EDMA3_DEBUG*/
+ [: t4 `4 L( X6 `, _# }
9 b: J* ]- Q8 l6 V% o6 r- #ifdef EDMA3_DEBUG* ~) n( ?6 I p* F) l' M
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 L5 H( m' a, [: i3 T - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)' Y1 p' [# ]. M8 l7 P
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( x! W5 K3 C- ]4 V
- #else
) T5 u) C; v! f1 g ? - #define DMA_PRINTK( x... )$ O+ O/ L$ m% `
- #define DMA_FN_IN
/ [$ c6 T, Y% _' F! i0 Y$ @ - #define DMA_FN_OUT" g! B3 [- ^% o% o# J
- #endif
. u$ D1 I3 R, f6 Q9 ]
( A/ m Z2 Z. ?+ f( Q2 F3 B- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
$ x" j' F9 s: o' W$ d0 c6 W0 L& Q - #define STATIC_SHIFT 3
1 W' @9 w4 o# z$ Q - #define TCINTEN_SHIFT 20
3 q& c d) E! c; Q* C1 q - #define ITCINTEN_SHIFT 216 E/ b: e; S0 J M; T
- #define TCCHEN_SHIFT 22( u+ |4 C# N% x# z+ ~( z* w
- #define ITCCHEN_SHIFT 23
* U# C& [6 V1 T' g
, h! X$ B X, X% u& Y4 h* F- static volatile int irqraised1 = 0;
/ Z. ` z- W+ V# S7 B4 X3 Y& S" k7 h - static volatile int irqraised2 = 0;; Y& t2 ]9 o, x" [
- ! Q2 {3 ], \% d7 ?3 P5 |7 a) D% o
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ i* D+ u" m5 ~" z( G - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 A2 u! s% J: o8 H- z" a) e J1 }; _
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
^9 v" k7 \3 x) W. X - 2 { K. ?$ ]0 p% `
- dma_addr_t dmaphyssrc1 = 0;
: P$ D V3 h/ W9 E; g - dma_addr_t dmaphyssrc2 = 0;
' C1 E. W* K; r! e/ G7 q5 t# l# b# [/ ~ - dma_addr_t dmaphysdest1 = 0;' Y) l, O& Z1 I5 ~* J
- dma_addr_t dmaphysdest2 = 0;: I' A9 | M) h
- , a9 p, V8 x% n3 N* B
- char *dmabufsrc1 = NULL;* L0 I; n9 u# I. X, ^
- char *dmabufsrc2 = NULL;
: U- M; z, s1 |. A3 { - char *dmabufdest1 = NULL;
v1 r H" e. x5 g" E( t1 [ - char *dmabufdest2 = NULL;5 r. V7 E0 G3 _' P
- & h$ ?. f" {8 K0 t- ^& l/ r
- static int acnt = 512;" I% {+ D! l0 z3 b6 t
- static int bcnt = 8;9 e8 n# ]) _. h6 O9 p" ]7 J
- static int ccnt = 8;
) F5 d' q/ \/ D - c6 P2 m$ I# T4 I( r
- module_param(acnt, int, S_IRUGO);
6 @; W. d0 Y) z+ i8 l' _ - module_param(bcnt, int, S_IRUGO);2 m; N4 y6 t+ R b. p, [
- module_param(ccnt, int, S_IRUGO);
复制代码 $ j# `2 w, q$ G) F& G. \
4 k$ }7 \4 U/ o* p6 C0 g 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! b3 z; \- ^! 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
3 ]: d6 F7 F9 T6 y 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( H9 O' C `4 V1 L% s* S8 O k
9 r8 w$ E4 y* K# N! d. _1 L* w3 Q7 ^: K. b; z
|
|