|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ' E, m0 U3 B3 ^
- [code]EDMA sample test application! Q) g' P5 n" V
- /*
' u+ ?' D8 m. S& } - * edma_test.c- k+ l+ L! P) u6 h& Q8 [
- *
8 f0 |# x; A# \ - * brief EDMA3 Test Application9 w( b: o7 d. T
- *
6 M' y6 F* @% p) I( u/ U - * This file contains EDMA3 Test code.
$ B6 v" U M/ F6 P4 [ - *
( a, i. U9 }6 z, K, h# S - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE/ }0 d6 A& f; E3 U& T* I
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' s1 c, {' a& \+ P - * TO CHANGE.4 Q* h$ Q8 t! o( H- q& @. u; e
- *, }! _! C+ f* Y9 Q
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4 \$ b1 P/ m5 h, c! ]7 t - *: J" y7 j: D) A% \2 n R* B/ A
- * This program is free software; you can redistribute it and/or9 f5 ?6 v" A; l7 P d9 D
- * modify it under the terms of the GNU General Public License as9 J' y' N: G0 O6 t% o3 U; `7 C
- * published by the Free Software Foundation version 2.; G/ ~7 _$ X( j. I' h) V2 o
- *
$ [& c0 d% _+ C3 v: Q8 a3 U+ ~: | - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 p6 D# @, S& ]- M9 u - * kind, whether express or implied; without even the implied warranty
0 V! v/ Y5 i5 Z/ P - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 o. A6 @8 i" h0 X+ N
- * GNU General Public License for more details.7 V5 H0 Q: I7 S% |1 O
- */
7 _/ x& d0 ]$ b+ i; o V( {& J
/ p+ P/ f+ o% y" y1 [& i$ B: q- #include <linux/module.h>
0 b+ m4 e5 F: B1 m- T8 A- n - #include <linux/init.h>
% u4 D. S$ G6 z; J b' p; h - #include <linux/errno.h>; w5 S8 o# b# c! H5 P4 t' i
- #include <linux/types.h>' _/ n0 j7 a7 E- Z' o( ^8 A
- #include <linux/interrupt.h>
# `' b# g! H, V5 R [+ x" R! q/ s5 @ - #include <asm/io.h>9 W" N+ t0 Y. Z1 i# ?
- #include <linux/moduleparam.h># ~& i0 V( _* u$ I9 E
- #include <linux/sysctl.h>
9 k8 s/ E7 ~9 C, v/ j2 w. n - #include <linux/mm.h>
, f B' \/ \7 H$ m - #include <linux/dma-mapping.h>1 M9 B' N. ~) B$ }! g* }( R
* W3 X9 }# B: z" z" s( N3 v- #include <mach/memory.h> v* h$ F& l% J. N, D( r- @5 a U5 d
- #include <mach/hardware.h>! ~9 U E" `- U/ {1 c5 n
- #include <mach/irqs.h># @) Z* R: |: I. s# C! Z
- #include <asm/hardware/edma.h>- L( Q4 q# D2 a
- - b; f4 A; `$ y
- #undef EDMA3_DEBUG
: }. S" K' ~4 ^3 G* c - /*#define EDMA3_DEBUG*/' W4 ?7 j$ q% G
5 M' \( t' M; ^# k2 a5 u- #ifdef EDMA3_DEBUG% }% }& N& ~- H9 R* `* f* D
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
8 `0 G" [# K+ K* e7 n - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)' I, Q" g/ U: i; R" M
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* U* K- r, i# _- S! ` - #else
0 u# X) ]9 N7 R1 w - #define DMA_PRINTK( x... )0 a+ T8 _7 O* B d
- #define DMA_FN_IN
! V- @5 ?& }' ^; {+ D5 V - #define DMA_FN_OUT
, [4 F8 [! V4 L9 H( m; F - #endif7 V" v- j# z3 v! Z
9 B; n" E+ f& u2 m$ o3 @" y- #define MAX_DMA_TRANSFER_IN_BYTES (32768)% m. r8 P' O+ F4 _ H
- #define STATIC_SHIFT 3
- ?) c1 F6 f: w - #define TCINTEN_SHIFT 20% A* u) m6 Q% H* R
- #define ITCINTEN_SHIFT 21* c% k" J: l" h9 c. m, }7 g% r2 ]
- #define TCCHEN_SHIFT 222 h3 ^9 k/ A& _& R8 m; p6 G; ~% p! J8 _
- #define ITCCHEN_SHIFT 231 i2 d" P) M% K! Y+ @
- 9 p/ P, ]- B, ^. x% C( T& \0 S6 h3 Q
- static volatile int irqraised1 = 0;/ u: |2 d. A% o$ x# E2 r3 t
- static volatile int irqraised2 = 0;% ?) a! P- F0 S/ A# V
* l5 s& v( K. d6 F2 y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; u, v4 v! X F5 E3 p% ~& C
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; v! C+ k) ^/ N" t0 a
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 B2 o6 }0 ^/ ?) {, _$ s. B$ R - 7 `/ w$ b& K; p' }" I% e/ F
- dma_addr_t dmaphyssrc1 = 0;& ^! K, v" t' D1 Y2 `
- dma_addr_t dmaphyssrc2 = 0;3 Q; E! Q. V8 Y4 G- }1 S9 m
- dma_addr_t dmaphysdest1 = 0;
3 N% K' E* D9 \1 [ - dma_addr_t dmaphysdest2 = 0;. O9 C; C# A- v2 l+ ~7 b( m
& i- |' m9 v# C( b$ ]! ]- char *dmabufsrc1 = NULL;
! Y l# e* N! _. E) \4 e& ]7 ? - char *dmabufsrc2 = NULL;
8 `& F l4 R, x0 z; x - char *dmabufdest1 = NULL;2 N3 m4 _- \3 U& J# U: R- f
- char *dmabufdest2 = NULL;
- v( p+ x% F% w* F7 i# c% w. C - ! a2 e) V$ f8 B, S4 S2 c: S
- static int acnt = 512;; W; h! V1 r" v) r
- static int bcnt = 8;4 y; i: h) n' v4 w$ c- L& e
- static int ccnt = 8;
+ ^: z3 D& d* ]& V% o
5 N8 n7 U" J& B7 r- module_param(acnt, int, S_IRUGO);
$ n3 @5 ?# K! R/ J1 S - module_param(bcnt, int, S_IRUGO);( n8 [5 u: [+ X) h" G
- module_param(ccnt, int, S_IRUGO);
复制代码 , C5 L+ ?: n s3 z" f; }
7 P0 v" o. ?. k- [% ?3 \' m
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
2 {- K. y8 z" g0 earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。; W8 M5 f: b2 |2 z( t
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。# M; [5 n4 _5 v# I
0 P+ @3 t% l2 R' o' a# J1 [) [# y, F& o5 @2 B4 h* g
|
|