|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
. ?; h1 T3 `3 {0 e L- [code]EDMA sample test application
* \! E' A2 B1 E - /*
. x# p6 S/ L* \9 K8 V - * edma_test.c
+ v* U1 m% J( Y; t2 V- P) l3 k - *
) \1 W5 b+ O8 k5 M; R - * brief EDMA3 Test Application" {' r1 W1 ]& F9 O( Q2 W( z0 T. m
- *; O- @: W) Y8 R# {7 T5 z
- * This file contains EDMA3 Test code.: \: ^6 c0 C3 s
- *
; s0 z! m' z) n, p& |1 ?% ^4 Z% x - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE; l8 ^5 U% y3 G g6 N/ t6 m
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
A7 q! y! o- S) f$ L6 L - * TO CHANGE.
, {) R; t9 [; k6 t- \ - *) D1 D* a' j$ k( `
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/4 o8 A' B5 ?5 W! b
- *8 @6 H3 o. V8 A( F% z
- * This program is free software; you can redistribute it and/or. m6 J0 R! K A7 M
- * modify it under the terms of the GNU General Public License as
6 O; Q7 @4 Y7 j/ o& [ - * published by the Free Software Foundation version 2.
+ x4 B! b v5 \7 T/ {) c$ ? - *
! u0 z6 b' K: h7 U4 u+ t - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
( l) i( u! m B: @4 F) k$ C - * kind, whether express or implied; without even the implied warranty1 ^$ P& @1 K7 G9 \$ Y; g; w
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
0 n& C" J( i3 g& r! c# q' k - * GNU General Public License for more details.
8 X( i z5 G5 q0 a - */! E: l9 u$ }2 {# l+ A
\, H' r$ B+ `% Y- #include <linux/module.h>8 x: z3 Z! p# ~/ c( v: W
- #include <linux/init.h>
7 E4 [' j. c8 X, d+ q# v - #include <linux/errno.h>* c- L* F }+ b9 V
- #include <linux/types.h>2 k3 B( J+ `) ~0 D) k7 ?- S P$ X( [
- #include <linux/interrupt.h>
8 i/ |3 d. `" S - #include <asm/io.h>
8 j5 e% j5 V$ F; ` - #include <linux/moduleparam.h>0 o; a" k9 q. {. t c' h% c
- #include <linux/sysctl.h>
$ j7 K% K2 a9 `: w! J# F( Z - #include <linux/mm.h>. o6 h4 y E7 U7 F9 R) c/ d
- #include <linux/dma-mapping.h>
* ~6 W) o) z6 V8 H0 B9 e - 6 b) Q8 B, ^" a7 A* T/ y
- #include <mach/memory.h>+ Y0 X8 R' a; ^* ^3 w! e
- #include <mach/hardware.h>: q5 B7 R; h5 V
- #include <mach/irqs.h>
; U# x" X+ k: P! H7 r5 W* c - #include <asm/hardware/edma.h>0 { [; S# F0 S% H9 d
! L) x; d) i/ u" J: N- #undef EDMA3_DEBUG
( x1 i& |2 v$ q/ Z# p4 v9 d - /*#define EDMA3_DEBUG*/
+ e6 X% l, r( p z+ O, r6 ~2 k
k: S: i- b3 w/ t+ }, ?- #ifdef EDMA3_DEBUG- ^# c, h* H9 E8 q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 D! r3 v6 I' z2 B# a4 v - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)( s! J; V9 h: @
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) W$ g6 H; V& ?$ O
- #else3 s8 V S! s4 V2 `0 Y
- #define DMA_PRINTK( x... ): b e6 [2 l4 Z& Z- _
- #define DMA_FN_IN5 e% F- Y. G- U$ k: Y& i M; |# D
- #define DMA_FN_OUT5 k: L3 p9 T: M' z" z+ a; g
- #endif( z o4 L1 z+ C* E+ Y3 \
- " D; j' ?) C+ J) b2 D
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- _5 q5 a) b6 V' h
- #define STATIC_SHIFT 3
9 N3 k7 w) F/ Z" E - #define TCINTEN_SHIFT 20. J8 H3 y! ? H) ^5 ~
- #define ITCINTEN_SHIFT 21
+ {1 Y! @) @; f) T7 X$ { - #define TCCHEN_SHIFT 22
$ }: m* D5 i5 E8 X* O K3 Y/ q( {* d - #define ITCCHEN_SHIFT 237 E0 V- v# y5 o4 t$ p) o
4 ^- S C5 ^% q$ T0 n- static volatile int irqraised1 = 0;7 A6 I! K* R6 S# v0 s4 z
- static volatile int irqraised2 = 0;
1 {. A/ [8 p+ d7 a% _7 ^# X
* ?: q, \6 b" p* x& m' _, \- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% ?. D9 k# S1 y& ]
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% m; r9 ?# r& G5 c, g7 [: W
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( D7 u' g% |+ s1 p8 r" \' F
5 ~0 B6 C; h6 z: b# e) \% Y- dma_addr_t dmaphyssrc1 = 0;
6 p, t9 K% ~. t) n - dma_addr_t dmaphyssrc2 = 0;
) S, Z" t, g8 w# W - dma_addr_t dmaphysdest1 = 0;
. b# y" X3 k8 Q! t# A - dma_addr_t dmaphysdest2 = 0;4 _, o8 y/ J4 w+ @' a
5 i, q8 I: _' p' b( ~1 T k( w. R) V# v z- char *dmabufsrc1 = NULL;
7 V; `+ Q6 e5 a7 e1 t - char *dmabufsrc2 = NULL;3 q0 Q! o- X- x9 }9 Z$ l
- char *dmabufdest1 = NULL;
# n* e9 i1 _' }) U: n - char *dmabufdest2 = NULL;& Q0 b& P" }, j4 N* `: q
+ v" \/ Q6 a: K+ O- static int acnt = 512;$ _* a+ e$ J, T, I$ f% T
- static int bcnt = 8;/ s# u! g, y5 x; A
- static int ccnt = 8;
% i! w2 h$ b) X - 0 D+ A# k2 X2 I8 G
- module_param(acnt, int, S_IRUGO);3 j# i& D) u, J0 d4 j5 A
- module_param(bcnt, int, S_IRUGO);
9 C: n: i# [! S, ]) s& d( n - module_param(ccnt, int, S_IRUGO);
复制代码
$ \/ o, Z0 p* `8 b# U* \! k
& u8 W( l6 r A; O0 c9 N8 ? 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
' P. K6 |9 b' ^1 ~& B: @1 zarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。' u) _6 {5 Q J4 G: }
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。5 H- b3 D; f* W$ |$ m& o* N' M
, Y3 h+ |1 N/ L$ J3 l. J9 j
) x9 }4 E* b9 Y- b1 f( Q |
|