|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- g, A8 d0 A1 g4 ^, e- [code]EDMA sample test application6 g! o, G4 H' G. V
- /*
5 }: h8 j' g/ ]6 S7 w! Y& a& m2 K - * edma_test.c, X; K* i: B5 @4 u/ L
- *6 K0 y9 |3 \6 `- H
- * brief EDMA3 Test Application
# g% z! i( H( `: \8 g- C- u2 @( O+ S - *! \) ?2 Z" t. Y% l( F/ J2 B
- * This file contains EDMA3 Test code.
6 ?. [7 ?* ?$ B3 j - *
& S6 y. O7 O* @+ D - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE `. e8 Z% ?* }9 X
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
7 x) G6 d+ O# f" W0 z - * TO CHANGE.
- {4 M: C1 u1 Y$ i5 w; z3 ^' X - *
% b3 z3 ~ o2 L2 D# N4 { - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/0 b; N6 K( M/ O( T1 `; H/ k
- *) a. r# V, S& Y( [& O9 m
- * This program is free software; you can redistribute it and/or
" \' g. b- F, o0 O - * modify it under the terms of the GNU General Public License as
+ x7 J. V4 h8 d4 l9 l( P0 V: r& p - * published by the Free Software Foundation version 2.
! W! v- g& A2 B9 v- m$ ^ - *2 P6 | `) O) t" l" b' m
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
7 s7 }& n1 \6 M$ y8 `# z! W2 L - * kind, whether express or implied; without even the implied warranty1 s" Z& b k+ P' c! d" y
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* j9 H$ X+ _$ J6 e% s& f1 ~
- * GNU General Public License for more details." d9 a+ K+ o% S1 }$ c4 ~
- */& ~. n6 A$ x% a4 [
- 4 d2 a, \+ T( D4 p I: u; q
- #include <linux/module.h>
5 F F* V1 e9 C: | - #include <linux/init.h>3 h& Q9 u% h7 D! w( u2 i* J$ B- {
- #include <linux/errno.h>
5 s( n" W6 S1 r$ r6 |/ I - #include <linux/types.h>
5 Z' {7 `: _6 q - #include <linux/interrupt.h> `+ r, n2 `0 t) j* b" C' T% c: k
- #include <asm/io.h>* r0 n) \$ y" N+ ~
- #include <linux/moduleparam.h># c: R$ M9 \) p
- #include <linux/sysctl.h>" O' u& H6 j' c( u- c- s
- #include <linux/mm.h>% I' S/ I8 |+ _. i* E, A# b& k
- #include <linux/dma-mapping.h>
. `" v" {% p0 u- [
' }3 a% C* ^# p; W& W3 C- #include <mach/memory.h>0 Q& I+ l( b* d9 J% {( a& s
- #include <mach/hardware.h>7 R& Z) N: |# [" b4 W3 J8 M
- #include <mach/irqs.h>
% \% X2 i6 `/ N# n" B/ d2 t - #include <asm/hardware/edma.h>. K0 `* X8 D. A
; y |+ W$ h, w* l. W- #undef EDMA3_DEBUG5 t: ?$ v/ w6 D: K @; B8 Z
- /*#define EDMA3_DEBUG*/5 V; E3 G# J5 { l8 p7 c
G6 k7 h% i z" Z$ O4 i) m- #ifdef EDMA3_DEBUG, e/ U, J1 A, q' D
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 f7 q8 U# T! L9 s6 }
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__), M0 Q, j1 e" W% N. h. B$ u! a
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)5 |- T" @2 |5 E: s: K; ^7 a! Q
- #else
* o, c- J. y, d - #define DMA_PRINTK( x... )- s' }0 e5 u) ~' [3 S8 u# R* ]0 H% K
- #define DMA_FN_IN
3 o9 A& e, k& r& z( \6 |0 W- O - #define DMA_FN_OUT' c4 \9 d2 Q/ J3 B# T
- #endif
% N4 p3 S, S1 n0 k6 e& a( U% v
3 `3 u/ W, G5 D0 Z- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
3 w/ \5 Q$ v, a) ]( ? | - #define STATIC_SHIFT 32 L8 b3 G3 V' H$ w$ d: m, |
- #define TCINTEN_SHIFT 20$ Y8 J7 N9 M8 f% l# f
- #define ITCINTEN_SHIFT 21
' a. I; w: n0 y+ A - #define TCCHEN_SHIFT 226 m7 ^' _" ~' x+ P% m6 g) G+ ` C
- #define ITCCHEN_SHIFT 23
2 h6 o; @# k4 a" K- m: L - 0 ]5 U5 Q4 V" d- D% A6 P9 b
- static volatile int irqraised1 = 0;
! d$ ?0 X7 [8 O- e& p) L - static volatile int irqraised2 = 0;
/ Y% a2 z1 N, O
1 D8 w6 [3 j/ p& f! g- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 D" e* r m1 ?' X
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' U) W) R" ^1 ^/ `2 A8 {- F: a - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. x3 e8 [- [- M
; [0 U' F, m1 U# Z- dma_addr_t dmaphyssrc1 = 0;$ Z5 W' I* S2 Y. T6 U9 r$ l- K' S! }# @
- dma_addr_t dmaphyssrc2 = 0;! r* s' j. N& R+ @
- dma_addr_t dmaphysdest1 = 0;+ q; d h" _. l9 @6 M
- dma_addr_t dmaphysdest2 = 0;
* `" m7 b, g$ M8 d; f - ( s: ~8 m5 l( q4 k
- char *dmabufsrc1 = NULL;
9 n% d' |% t) q - char *dmabufsrc2 = NULL;
! x8 _1 M& ]+ p# i+ w4 K) A - char *dmabufdest1 = NULL;
6 y9 u! h. e# j2 g - char *dmabufdest2 = NULL;" M! r" T) n$ p7 z
- ) x. Q% d9 K$ {
- static int acnt = 512;
6 q+ ~) H, p" s1 N( e. @ - static int bcnt = 8;
$ m0 f% m4 f* q) O+ s' c - static int ccnt = 8;# W. Q4 }3 { N9 x0 W x
- # G* W6 m& ]5 n! _! E( v! ?4 L( v3 ]
- module_param(acnt, int, S_IRUGO);
+ u4 Q; y% h$ k$ W. c; V - module_param(bcnt, int, S_IRUGO);
1 q" L; \& R. X8 I9 n: u - module_param(ccnt, int, S_IRUGO);
复制代码 ; D0 \7 l8 U+ X" h$ m
# D) t$ \- z5 l0 T
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用9 s0 c, c2 n$ x! B$ `- s# c
arm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。% O8 @$ r: }7 O3 ^5 \6 Z4 c! g6 h5 R
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 X5 q7 | e' ^) N5 m* k
5 _# \& |$ S. I* k9 D6 H O
) |- e( Y9 w8 H |
|