|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- P, _1 [. ^9 a- [code]EDMA sample test application ]" X6 ^ @; w' _) J7 ]3 M
- /*
7 s: d' G5 Z. w! m - * edma_test.c7 V, x/ S' g& H
- *' B$ Q/ {- F* u4 \0 d
- * brief EDMA3 Test Application
% m' N) n1 F, z8 O) Q% T - *1 l* M1 X+ j. z: a
- * This file contains EDMA3 Test code.: R' ?+ \1 J. x) p
- *- G& z1 |+ r& ]) y& f/ e; ?
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE8 _6 z+ h7 N% u3 |
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: j7 j) ?/ x+ H - * TO CHANGE.% g! O: \' P# c I7 R
- *; N% v! b. V7 B/ ]' j& I( v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! {: L) `$ ]9 x2 O6 W3 b6 m! } H' {
- *# |! u; y1 i6 {. }$ k, Z
- * This program is free software; you can redistribute it and/or
( ~. L% A6 D/ r9 z6 E. d' }3 _% I - * modify it under the terms of the GNU General Public License as# H8 V- T$ Q6 ^, O0 U
- * published by the Free Software Foundation version 2.. t8 {. \7 ~: | U
- *1 L I: w4 O* r1 M2 ~8 \% p
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 B" @3 g& F" O7 q/ s
- * kind, whether express or implied; without even the implied warranty
& _% O1 \9 ?' A {- T# d - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ x- \- s2 R2 ?2 b/ Y5 J ?$ ?2 m
- * GNU General Public License for more details.
6 B! E/ ~ z1 i2 ?7 _6 q T - */: R- N3 G8 C) o4 h
: S% i- ~/ I; ]8 H6 j- #include <linux/module.h>
) m8 a% \3 ~; m3 u! ? - #include <linux/init.h>
5 A G" g" l6 R3 d% v, F - #include <linux/errno.h>
2 J0 h. b4 e A6 s A8 _$ C - #include <linux/types.h>
5 D, K) J9 D$ L) j) P/ a) v - #include <linux/interrupt.h>: E& B2 U) T8 s! h( \/ d
- #include <asm/io.h>0 ~( l6 e2 h& q7 \1 {! [0 b I% {
- #include <linux/moduleparam.h>6 b( D+ w, }' U
- #include <linux/sysctl.h>
( X' D% @% J3 g- N - #include <linux/mm.h>$ i( y, F/ _4 G! f8 V
- #include <linux/dma-mapping.h>
5 }, R. e4 z$ J0 o. H1 _
4 W1 H1 a2 P+ L' I: A+ b- #include <mach/memory.h>
8 ?, W2 x& M7 \ - #include <mach/hardware.h>
& W6 e9 M' h+ O, U# L8 B5 C - #include <mach/irqs.h>. O6 v8 k. r6 ~6 N9 i% L6 N/ Q" A7 O# F
- #include <asm/hardware/edma.h>
4 @; K. k5 [6 G
7 [6 l7 s$ F- d8 D, w9 |- #undef EDMA3_DEBUG7 S; K2 M& T2 V, z( R
- /*#define EDMA3_DEBUG*/8 [, J2 Q1 M; I4 X& c9 s
- % j; e/ d4 ^" @7 M# C: V3 r
- #ifdef EDMA3_DEBUG7 ~! ]* |$ b' a: d4 F
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! N- `; ?5 S9 v! J$ y# t+ V
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
* |# g, ~' Y, f7 {" Z& m* p5 U ` - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 T3 Y" i; J) A. x2 L - #else
' D2 i" j; x2 P$ R# Q& J' y - #define DMA_PRINTK( x... )
- L3 H6 e! ~# z4 w$ T; I - #define DMA_FN_IN' X' U# A& ^6 B& d& [2 b2 z
- #define DMA_FN_OUT
/ X+ l$ v0 H* K& M- r/ y4 y. v0 Z! b9 q - #endif! }: x5 P/ l( |# M* M: n \
8 U* T5 T! a0 @8 Y- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* a; A0 E4 p+ d' K! h+ m, D
- #define STATIC_SHIFT 3
3 h5 G; e3 w6 g# i - #define TCINTEN_SHIFT 20
. g3 `3 }* R9 n# z B - #define ITCINTEN_SHIFT 21
) R/ s S" O2 }0 D; R# ^% ^ - #define TCCHEN_SHIFT 22
' q: p( [9 R) b, `( A9 w( ^ - #define ITCCHEN_SHIFT 23
" D; d+ v* q/ ?. i4 J p+ q9 b$ P
9 `1 }7 t, ?- _9 U0 k: `- static volatile int irqraised1 = 0;
9 e/ z1 L* p1 q - static volatile int irqraised2 = 0;
- U& t/ n& C! `5 a% Z - - _4 X ~, T. s* q4 V, C+ N
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 q% p" }2 C; F+ F
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 u& y7 B9 K; e4 [7 z' x - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 P/ T+ O: o+ b9 [8 `* @. k8 X- H! @
- ( z; p4 V# f0 U2 W- j
- dma_addr_t dmaphyssrc1 = 0;
5 ^2 ]9 f% [" Q1 I C. s - dma_addr_t dmaphyssrc2 = 0;
% u9 B7 M# U2 c2 c/ J: @ - dma_addr_t dmaphysdest1 = 0;4 ]( \" B' C1 H' X+ B
- dma_addr_t dmaphysdest2 = 0;! q0 Z F! B4 M
, u8 a9 W- Q: c7 L+ U- char *dmabufsrc1 = NULL;
^* \( |. V" j' q; e6 y - char *dmabufsrc2 = NULL;1 D$ J4 p: o# }. b6 K/ M% q) Y
- char *dmabufdest1 = NULL;! m: Q2 \7 Q7 C# }
- char *dmabufdest2 = NULL;7 Z0 Y% n* }! ]- @) f, H
, C3 L; K5 _2 t& W8 U# h, p+ ]2 g- static int acnt = 512;
+ Q. ]2 j7 Z& P5 x - static int bcnt = 8;( T/ H3 J" X" U+ j
- static int ccnt = 8;8 V+ u5 S7 x- a) f$ o3 n
- 3 j: F" \3 Z6 c, R& g' w! o
- module_param(acnt, int, S_IRUGO);
* {% M9 F4 q! o2 x- V2 P) w - module_param(bcnt, int, S_IRUGO);
4 f# D6 S( P; D3 J, u7 c - module_param(ccnt, int, S_IRUGO);
复制代码 2 i5 o ~* ^5 P& l
' U% R8 ]& ~1 E 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
. s) [8 j2 C# [& ]5 varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 q1 F! Z( n" J; C
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
- T4 |# e, P/ @& \( |( G) Q
2 ^) ]8 C: a8 B C" v# X- v) ~/ _1 c, O
|
|