|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 E t/ \$ ^- A' B1 a7 k: V; b; Z- [code]EDMA sample test application2 j8 T! K2 _, M; \( d+ n
- /*1 d d# l7 S/ q9 T" l1 l# K
- * edma_test.c3 c9 C. o/ A& {4 W' L' p6 z
- *' w! ]& R" G% J2 z2 p" u
- * brief EDMA3 Test Application5 C' e- y/ B" n- V) P# n
- *
7 G( C, b: W: P3 K& W - * This file contains EDMA3 Test code.
% K6 k: O. p) T4 U4 s5 k( x; @ - *. N$ x; S. v# i6 v* ~% a+ O+ x
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
2 h4 I9 a" b; P: a5 m) g - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& V; H) L* _* a. S: J - * TO CHANGE.% ^1 J6 s: m) k1 p$ j) b( E% @* s, @4 Z
- *
( D* h- a3 p; Y, L, Q% x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 W3 `9 E' o/ P& x, u( @ - *7 F7 [, \ s$ V5 D
- * This program is free software; you can redistribute it and/or
! F4 M# ~3 h% b9 m, j$ J7 o - * modify it under the terms of the GNU General Public License as# q) ^" Z* y: I. |" i, \& l! ~, g
- * published by the Free Software Foundation version 2.
' E2 Y. I. i3 i/ U" \0 D& w - *
/ D1 s9 Q/ k& S6 J% a5 u. H8 E - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ q- o3 g, K. y1 n2 e s - * kind, whether express or implied; without even the implied warranty+ U8 h O0 L# w6 I
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ I9 I, Z1 o$ H+ R8 k- b: U. ~ - * GNU General Public License for more details.
( x F" x7 e; P P - */) w, g4 Q$ q! G. \' P) G: r' s
- * ^3 Y1 k/ o1 Z2 Z+ n4 I
- #include <linux/module.h>5 v& i4 u7 a1 N7 S: i* G
- #include <linux/init.h>
' E1 U8 H3 ?2 E - #include <linux/errno.h>
+ b4 G& s' {7 s8 y0 C* }5 [! _' S - #include <linux/types.h>5 u* b0 E! J! W8 C: R$ Y
- #include <linux/interrupt.h>
+ `) l. L% Y* {" o - #include <asm/io.h>
: Y( V5 F; n) V7 ~/ c4 ] - #include <linux/moduleparam.h>- [) X/ j i% l( ~. X2 [
- #include <linux/sysctl.h>' Q2 j, t% f( }) n% V4 V- `( F+ M0 w
- #include <linux/mm.h>" y% O$ {, I* Z# V$ C
- #include <linux/dma-mapping.h>
6 \1 `& ?) E+ [$ q: F) j% X' I) | - ! C1 t. U, J* B# z& G: ^ S
- #include <mach/memory.h>
: J* ^" v% A2 ?: f$ z - #include <mach/hardware.h>5 w" k2 E: M& _# @5 r
- #include <mach/irqs.h>
: s3 a. J8 Q" |3 Y, i: i - #include <asm/hardware/edma.h>$ ?8 w; V8 ?# _7 s6 _5 _
- $ F- ]7 f3 `" |
- #undef EDMA3_DEBUG
2 m/ x- t7 E; b L! L+ @6 n, w& l - /*#define EDMA3_DEBUG*/
' ?) S3 ?1 E4 U0 g! Z# R - 6 Q% |0 z g0 }; |6 |' P
- #ifdef EDMA3_DEBUG. Y+ u2 T, \: v
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 i9 x' f+ d Y: E2 u3 J8 d - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)! ]2 Z# G5 [, U1 V5 w
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)9 f" i n5 f% i; c
- #else
" g+ I# t+ p) K( M - #define DMA_PRINTK( x... )
/ V" M E% `% l - #define DMA_FN_IN
9 ^8 k7 @7 e+ A9 s4 M) e - #define DMA_FN_OUT
2 u* }4 c7 S, p ` - #endif
4 z3 }$ L6 j1 W - / ]& `7 z, V* d
- #define MAX_DMA_TRANSFER_IN_BYTES (32768) c! F3 }( |2 R' E
- #define STATIC_SHIFT 39 O/ C1 j& s) p3 e0 @! j& O
- #define TCINTEN_SHIFT 20
1 M8 i2 F+ J' d) ?1 h - #define ITCINTEN_SHIFT 21
$ U+ O& ?! s7 h2 W& J4 i - #define TCCHEN_SHIFT 22
) _1 g/ F* T3 o6 `# E8 V- o# D - #define ITCCHEN_SHIFT 23
7 c2 x. l5 S& K' S4 v$ D: K" i - & _8 h0 q( b: F' H
- static volatile int irqraised1 = 0;
6 v9 N7 x5 F4 _. C1 x - static volatile int irqraised2 = 0;
a7 _. X" V3 _. Q1 ^/ }
7 \2 Y' r3 K; `4 q- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' d9 [6 V9 c& u V$ @" s6 v' Y) J/ }
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 P5 C$ p' i' C, p5 d/ |8 ^, | - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% q T8 j- o# t$ U" ~ - 0 i' U8 f5 S# v6 n5 G1 X$ q
- dma_addr_t dmaphyssrc1 = 0;
$ S% P( O; K- | Y; ~) O - dma_addr_t dmaphyssrc2 = 0;, |" I+ g2 W7 D h$ L: {7 z: \# |
- dma_addr_t dmaphysdest1 = 0;
- H# k& p% |2 M - dma_addr_t dmaphysdest2 = 0;1 q6 m4 b( C9 b# n) ~- k
- / Y7 T: A# S( H" M
- char *dmabufsrc1 = NULL;. O! e: A, C5 e. P2 O! m7 E6 D
- char *dmabufsrc2 = NULL;
9 B, \' F4 z# c$ D - char *dmabufdest1 = NULL;6 @1 `: k# q- y5 `; @8 `7 L
- char *dmabufdest2 = NULL;
( ~2 X4 ~- ?* {1 B- L* @
1 f& v, e3 h5 l s9 m; o. F. l9 j0 |- static int acnt = 512;$ [3 e' S/ X" h0 u& ]
- static int bcnt = 8;( l c+ d- u, K! X. Q/ {+ M
- static int ccnt = 8;
& J$ \) I2 H) o1 G - 6 O# O9 R( |$ S- e
- module_param(acnt, int, S_IRUGO);
: W2 C/ `7 X. k. B' [5 d6 }# e - module_param(bcnt, int, S_IRUGO);9 n5 `7 [& |; H+ L0 R
- module_param(ccnt, int, S_IRUGO);
复制代码 . ?& u+ h+ R6 C
, Q3 C% l- p0 V7 H6 b; l4 R' ], ] 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% F7 A' [! F% y: }, s6 Marm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ u0 n. e: B. G& V, p% F 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。3 ~% H- `0 r! j3 d5 V) m* p" ?) E% a3 f
' P/ p' I9 |+ p4 H' u, I) N6 L4 F
- Y* |# G: `9 a; Z1 A/ N |
|