|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
3 X* w3 D; p# A* c0 m- [code]EDMA sample test application
0 ~3 ]" i0 ~2 b: K! E1 g, i H - /*
0 b0 U; z' _, X" W3 p9 [ - * edma_test.c+ Y" V- b* ^' z, A: y
- *% q( m' c* `$ h; n
- * brief EDMA3 Test Application/ i' t' D9 D5 C" t2 i; ^. t! @: ~
- *
. _5 |) j# U, M! O( I, e u - * This file contains EDMA3 Test code.. `: I. B) y1 a% W" X
- *
# b7 b) m/ z9 }; X# ~4 e - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% @2 M) C- @3 Y/ Y9 [' W2 J" F j
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
Z( p7 k5 ]/ V - * TO CHANGE.
4 E f; s7 D/ n" i - *3 W6 h+ F. t4 Y+ P
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/& T- q* q9 h5 N1 V! a+ s$ E
- *9 L; z5 n. ~! i
- * This program is free software; you can redistribute it and/or
; z1 Y5 ` A" H' d/ j8 C - * modify it under the terms of the GNU General Public License as2 M& Z. D" n8 D, G- J$ S, R- X
- * published by the Free Software Foundation version 2.
0 L2 `2 t7 T F0 }- Z - *
; K) u9 I+ \5 ]2 g3 U - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 w* O6 {8 O3 B! ]9 p( f - * kind, whether express or implied; without even the implied warranty4 r, n8 H- l! s* G( E
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' h: X1 d3 o$ _! Z$ \) | - * GNU General Public License for more details., V% [" K/ i4 K& a" u3 e
- */
* o% E5 C/ ?* G4 [% S( g) A - + j8 f6 q+ z* L0 Y' f0 O: Y
- #include <linux/module.h>0 |# P% U) Z. K: O, R0 ^
- #include <linux/init.h>& C: p& Q- |* v. |. T- R! b4 t6 v& A
- #include <linux/errno.h>7 g1 k7 G, ]+ l( I
- #include <linux/types.h>! d7 Z% u' ^, q, O/ u2 O3 k
- #include <linux/interrupt.h>
7 `* o' v3 [/ u0 E0 ?7 n$ h' ^ - #include <asm/io.h>
. T1 J' N: W, T) ] - #include <linux/moduleparam.h>
, D. N1 J7 Y' o+ R$ @4 T* p - #include <linux/sysctl.h>/ W( _) ]$ T& j& f0 u
- #include <linux/mm.h>8 N) S" K1 }/ X) M% M: Y2 C: I! v; ^' ~
- #include <linux/dma-mapping.h>
1 `$ i: Z8 T& G- [% ^5 n% A# o8 K
% {+ Z$ u# }) B$ q8 f. t- #include <mach/memory.h>
. B6 b' {$ F( \6 B3 c6 e - #include <mach/hardware.h>) D8 I9 X& e' F+ A! f
- #include <mach/irqs.h>+ X$ A: z$ J0 Y1 k: |" }
- #include <asm/hardware/edma.h>0 u9 [# \) r7 f* b6 z
- / @- _% P$ y5 v) X% m
- #undef EDMA3_DEBUG
/ \- A( C1 x2 G& c: n5 T1 t( b - /*#define EDMA3_DEBUG*/
5 }" @1 L# h3 a! m( ]
( W4 b9 P& g) R0 z- #ifdef EDMA3_DEBUG& `6 o w3 }1 B# \6 E
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)0 i& s7 z0 D# q" K8 Z, h2 e8 k, ~
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)! P3 C$ \& t: g! R, k/ G+ b
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 z+ [0 {' x8 K2 k- m: R+ | - #else
& N6 Y8 G, G* Z2 g' {3 u - #define DMA_PRINTK( x... )5 j# x1 E' Q' ?5 a$ }: @
- #define DMA_FN_IN
$ z) q$ V" O5 G# h4 }' Z! P - #define DMA_FN_OUT- m2 S/ a b. w) Q3 g
- #endif
?9 i" v$ A6 Q; F( a3 k$ H+ h
, r4 L' A2 }) N' a3 T. h( Y( z- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 S$ E/ S% ^! d0 \ - #define STATIC_SHIFT 3
8 E, A7 C$ m. O1 y - #define TCINTEN_SHIFT 20& P( n+ n& h, n. Z& L+ c2 e3 P5 q1 x
- #define ITCINTEN_SHIFT 21
: X. L* P% Q' `1 d6 v% E( A - #define TCCHEN_SHIFT 22( C4 w$ r* ?7 G& L
- #define ITCCHEN_SHIFT 23, K$ k- A* f+ g) Y, K; f1 Y
! A* n# M4 L/ U( ^) s, P- G# d- static volatile int irqraised1 = 0;
/ i6 J2 s3 r& B4 G$ n - static volatile int irqraised2 = 0;* [& v( J- q* ~+ j3 p, ]" e1 U
- ; O2 P1 F2 ~8 Q& t& U
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' A# N8 s- u; J( i. q5 O
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, j3 }0 {' E7 D0 |
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- v' g# T8 [: t/ @
2 t/ k" w7 d3 p( A- dma_addr_t dmaphyssrc1 = 0;
' ]: a2 @; M# c - dma_addr_t dmaphyssrc2 = 0;2 K) H& ^7 X9 o+ j$ f8 E! b8 w
- dma_addr_t dmaphysdest1 = 0;6 C, i- T1 b! J) Z) G* R9 n
- dma_addr_t dmaphysdest2 = 0;
5 H- _% \0 O- w I. h# F. S
4 g" N- h2 O5 J7 C: C0 O8 |- char *dmabufsrc1 = NULL;( }% T! z0 t; x; R: ]% Q& A
- char *dmabufsrc2 = NULL;
+ y" Z! ^" x3 b: u) E! V) d1 k - char *dmabufdest1 = NULL;
' ^0 k# v9 F) O - char *dmabufdest2 = NULL;, |( P3 I' l) R- ?
- " G2 K; S2 J( ?; p7 w
- static int acnt = 512;
* n# H: w) W/ X& Y1 q - static int bcnt = 8;' s2 D$ j; i- Y2 c) ^
- static int ccnt = 8;
, S- k6 n9 C& R X - / \9 K4 z% ?# D
- module_param(acnt, int, S_IRUGO);- S5 A: C+ C x! F- D9 x, x
- module_param(bcnt, int, S_IRUGO);
2 }4 h: A, t* j; M- w - module_param(ccnt, int, S_IRUGO);
复制代码
' |$ q/ s! j# f6 J) u K$ `
5 N1 o2 G) y6 @8 o6 O" C 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
& ~+ c5 ^0 w; c. T, n+ 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。9 Y* Q7 g$ x( v5 z( n' L5 W
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 D$ L5 w& F4 N& o/ q! X
0 e: m. R$ C9 t! I4 ~/ E+ Q3 g
% N: j- e/ @3 ?! s) j& ?; ] |
|