|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 * N. C- Z$ a8 }, d' H: l
- [code]EDMA sample test application- x G# ^) y8 M) d. l7 U) H1 r8 `
- /*" {; b @. l, S
- * edma_test.c7 z* E8 h! u9 O7 l% j7 A J
- *7 ]/ ?, D# N0 }* v. s2 v
- * brief EDMA3 Test Application1 w* n1 M5 b5 b, z4 X+ |
- *
9 \! r: m3 `0 n2 l& D! ^& }* I - * This file contains EDMA3 Test code.
9 W$ C- C$ Y, \& {( O0 v5 ]' ] - *
% s1 F. z I2 z5 C - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
; K9 u) p; V, Q# y% o3 L - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT ]8 L2 Q- k3 h8 P ]& u
- * TO CHANGE.
# {6 _9 n5 h% i - *
0 W* y& d' t6 l: \2 m2 X - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" K' r: E3 H# w& _4 L9 B8 J* s* K - *
# p0 M# z% z' R: @' O7 n9 e - * This program is free software; you can redistribute it and/or3 N' p. [/ `2 m) \1 a/ t
- * modify it under the terms of the GNU General Public License as
" ]0 M. _6 O0 A) Z- P* B - * published by the Free Software Foundation version 2.
8 P f/ i5 D+ L4 y5 e' B n' g - *1 e7 { U( H, z& x1 ?2 V
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
0 j3 U- W( W+ n4 I: I4 D; z - * kind, whether express or implied; without even the implied warranty
3 {, i% m r+ l) J# R' Q/ [5 b; w" B6 ? - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# T- L s, a3 ?* q/ b/ ~/ l - * GNU General Public License for more details.
9 W9 _) D- |6 o, P$ J' i - */
7 x% U7 E, O5 v% C, [ - ( ?2 B9 s% Q$ E' W8 `( x: p
- #include <linux/module.h>; ]& R2 C5 X2 a4 X$ m7 Y' l2 |! l8 j0 {
- #include <linux/init.h>) f+ w( D' A, m2 c& k9 O7 o
- #include <linux/errno.h>8 L% N+ \3 N' u: c" X
- #include <linux/types.h>$ ?1 j+ N+ @8 F' z& u/ m, f. Q" W
- #include <linux/interrupt.h>7 T1 Y, w7 s+ }) Z( G! h/ X7 |; Y
- #include <asm/io.h>
^' f" D5 T; u - #include <linux/moduleparam.h># b3 [. K9 P/ a
- #include <linux/sysctl.h>. b2 S3 T c5 |) P; |- A6 u
- #include <linux/mm.h>" B; i/ ^5 e9 |8 P* q
- #include <linux/dma-mapping.h>
3 V! x! E5 B% M7 b' H0 P! W
, V" C/ l& q% c, W' X- #include <mach/memory.h>
6 {* k' W7 ?: Z* z3 R- m - #include <mach/hardware.h>
! _( \7 z3 `; h" c( ]3 v& Q/ z' \8 c3 @ - #include <mach/irqs.h>2 o/ s7 d" S1 V
- #include <asm/hardware/edma.h>
3 a9 ~! z$ O) c9 n* T5 M) p
' t/ M- y- d5 N) E- #undef EDMA3_DEBUG' v. F" B. x' j& z; R
- /*#define EDMA3_DEBUG*/
) T% s( j2 `. F$ i
9 R. Q8 I& L: o u3 p% _( ]- #ifdef EDMA3_DEBUG
1 Z6 X( \+ L. W# }" r - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 I" |- H( R( H - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& k, B* `- j5 V8 i: o
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
Q; \& K1 V' F - #else1 S% i$ ~( `; |# f# t$ a
- #define DMA_PRINTK( x... )
l5 C8 [& ~; J' _3 V$ {6 I! H; P - #define DMA_FN_IN9 D8 d6 R1 W4 M+ P8 g1 B* l @
- #define DMA_FN_OUT0 L! v. _. b- S
- #endif
" r, i' v% R) k3 U! i, I& Q - - W& s, t7 j: T
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)6 R1 D. p1 j- W C7 E
- #define STATIC_SHIFT 3
9 i G0 v/ g- ~1 s' [- h) r. Z - #define TCINTEN_SHIFT 20
5 \0 i) s, V- m5 V. K - #define ITCINTEN_SHIFT 21
: b+ I% Q6 t' }( D7 x; J5 m - #define TCCHEN_SHIFT 22
$ k; c4 @ l1 r. d" I - #define ITCCHEN_SHIFT 23
, J+ i& m [ @9 c F
( r X0 N) Q; P4 A. A# [# ]8 y1 N z- static volatile int irqraised1 = 0;
* t7 C u; W; e8 K2 S$ ~. A - static volatile int irqraised2 = 0;
9 i0 W" x/ D( K( A
9 s8 x2 \4 u7 x b; J7 R- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 s' p) v" `: v$ h6 d
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. F8 f" A z( `1 A2 I+ T( G - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 _" O( c9 {2 L
- # Q% X7 c9 c2 T( d0 x
- dma_addr_t dmaphyssrc1 = 0;1 M+ o4 B! t4 _
- dma_addr_t dmaphyssrc2 = 0;
' y0 c" [6 V7 c) S* y- ~ - dma_addr_t dmaphysdest1 = 0;
" y2 p" e+ s( B" `* W8 t - dma_addr_t dmaphysdest2 = 0;
4 R. m# ^; P/ R0 e* b% F
, M. M4 G: U; p- W# U! U- v- char *dmabufsrc1 = NULL;
! e( i& Y' J: A$ Y7 M( c# T - char *dmabufsrc2 = NULL;0 p5 J8 M/ K' t0 U. N
- char *dmabufdest1 = NULL;" a% V7 L1 o6 f& Y! x0 i
- char *dmabufdest2 = NULL;
; b9 n2 e" Y; Q/ h - ( d0 j6 W1 v3 F) g. u# m* ~7 B
- static int acnt = 512;) S- M Y4 w# f2 w
- static int bcnt = 8;
' G: P' ?7 o; f( r - static int ccnt = 8; g* o. R. {8 u- B! F& l r
c) \! g t9 v# p9 w- module_param(acnt, int, S_IRUGO);
! `. [* E" d1 \+ ` - module_param(bcnt, int, S_IRUGO);
/ d! f2 ?- k7 q t) @ - module_param(ccnt, int, S_IRUGO);
复制代码 , V9 l a) R3 k* e$ b' \: N7 \0 s
5 J4 _; ]9 m- X' r 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用' o6 G3 v6 ^) j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。- G5 F h5 K. Y$ c5 Z
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* u4 L; t* v. T' J+ ^9 L
# q+ A! g. v( W% T5 h) @/ f/ C0 e# Q% l/ R' w/ T/ g
|
|