|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 % q( A1 ]( S: q5 l9 R# B
- [code]EDMA sample test application6 S, \! g/ \1 R q) d% N; ?
- /*
; b2 i+ V) ?1 S3 T0 ^6 N - * edma_test.c
) s* }( V# X4 C! T& i - *9 p: P. W! S$ \* f, v
- * brief EDMA3 Test Application' @* H$ ?# P5 N
- *
+ f# [$ V& o* [) _# l- ` - * This file contains EDMA3 Test code.
# v' ^8 R/ V [$ u! i4 w4 U7 V O - *9 I) _( V9 n& n9 E
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE! ^6 N' j, w; U
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# T. r" U7 T8 u" m
- * TO CHANGE." {0 B# g9 y% ?( _8 T; G
- *
# c: A9 _7 R* i6 \ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
. A( F$ W2 |! R! S - *
( U6 T9 v" a Z8 T( @ - * This program is free software; you can redistribute it and/or- v) W& s5 p) x, J( W
- * modify it under the terms of the GNU General Public License as3 X+ y2 f# }- a3 J7 y2 h7 u# }, m
- * published by the Free Software Foundation version 2.
) D8 c$ o9 C% r9 q - *
! J2 H& U* i) E$ J - * This program is distributed "as is" WITHOUT ANY WARRANTY of any( ]/ J% y8 q. b/ ?' C5 w
- * kind, whether express or implied; without even the implied warranty% z( Y2 M0 @& r- S K1 p
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) V8 z& ?3 f' v; B - * GNU General Public License for more details.0 o- Q) F! [1 {# f2 v
- */
0 `7 @7 A; v- E: C* @
0 O7 M; v; Z0 g+ P: |1 M, i$ e- #include <linux/module.h>* }4 r$ n# Q) }& m9 F, k
- #include <linux/init.h>3 P6 G$ ]& D( C! R
- #include <linux/errno.h>' X# D r/ x5 z. O7 Z/ x |
- #include <linux/types.h>
' F* b( E% w( L% Y* E - #include <linux/interrupt.h>* E; e+ y9 \' D, r, Y6 `3 ?3 i
- #include <asm/io.h>( S! l, ]6 {: e" v
- #include <linux/moduleparam.h>6 Q2 \1 y- H$ }7 B: }/ S0 D
- #include <linux/sysctl.h>* E! ?+ _1 @5 \0 k
- #include <linux/mm.h>
& |3 O' z" G: w$ Y* x5 D - #include <linux/dma-mapping.h>% D/ @0 {% t5 l# A0 h
* W- t3 |) C5 j( e4 a+ L( ~6 X/ e- #include <mach/memory.h>
2 g1 N) D' w" u+ s, ~* ~ - #include <mach/hardware.h>" X5 d. a+ A3 {- O* S
- #include <mach/irqs.h>
/ L" m x7 b% I5 E. ` - #include <asm/hardware/edma.h>$ M* G* O9 h& m- ~
- 0 Z: e( w! x$ B; N( l2 \% ~% v
- #undef EDMA3_DEBUG
2 W. A$ X/ ]" @ - /*#define EDMA3_DEBUG*/7 T) C* Z- j0 {* l3 t
- ; i$ ]* ]' [! N
- #ifdef EDMA3_DEBUG0 ?7 C( ?- ~% l1 u2 f; P
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
3 N1 z# D6 @2 c+ ` - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 B- j) N0 y$ o$ ?5 D2 f - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
2 N! q# i8 j! @8 c P( v - #else
% \3 n1 c: D, q - #define DMA_PRINTK( x... )0 u- K% s' m, m4 Y! ?
- #define DMA_FN_IN; M1 g4 A6 s$ s0 V) k; W1 k
- #define DMA_FN_OUT+ K7 _; g" B$ r6 i# y" P2 O
- #endif
. U3 I) b6 z9 z0 I: I6 Z - ! E9 c3 j! U' N/ M2 F" n! p/ u
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)7 z; [7 s* k& [9 f- E0 |5 ^, V
- #define STATIC_SHIFT 3
. e: ], J( f9 W0 }) O t+ y) s - #define TCINTEN_SHIFT 20- h; u4 G3 b$ v1 `) X ]
- #define ITCINTEN_SHIFT 21
1 U8 g; g1 x/ Z - #define TCCHEN_SHIFT 22 l, H5 j0 V* U/ e1 C8 \2 g7 p& n
- #define ITCCHEN_SHIFT 23
5 k) T5 S$ ]2 @; Y Q5 J
) K' R8 _4 @5 P! r- static volatile int irqraised1 = 0;% Y% g ^. q9 O$ f" y, Z, \
- static volatile int irqraised2 = 0;
9 n: n5 T/ x4 ^- [! r8 d7 T7 R
. C+ b7 D+ E. h9 M4 W: c4 y U- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 _' F# M/ m6 \ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' J: [: s. c& q0 O" h! B, F' m - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% K- B& V0 h+ R Z
, I4 Y* ~) U5 C+ ^) J- dma_addr_t dmaphyssrc1 = 0;1 Y; |& V/ y9 f# m1 k9 ?- [ W
- dma_addr_t dmaphyssrc2 = 0;% z! `; S6 n& `8 L
- dma_addr_t dmaphysdest1 = 0;
) p* A% u- Q- w( r - dma_addr_t dmaphysdest2 = 0;$ P5 L& M+ @1 R4 h' q6 e
$ G: a* |. X6 {# x- char *dmabufsrc1 = NULL;8 B2 {7 {# _& ~$ p" f, t% k
- char *dmabufsrc2 = NULL;
1 M& ~' D+ r; A3 P - char *dmabufdest1 = NULL;
' A$ b6 f) O9 R+ Y: ` - char *dmabufdest2 = NULL;
# [ W* P$ I' S2 E$ \0 n4 ~ - ' u) M6 T0 Q6 e0 D$ l
- static int acnt = 512;
+ Z8 L; F' w' d& ^8 h+ i - static int bcnt = 8;
+ \" h0 a% T6 K' r& g; E7 P! R F8 G: Y - static int ccnt = 8;0 H, e2 _2 J* U4 o6 f
+ c+ E, C* M0 L- module_param(acnt, int, S_IRUGO);/ Y( R1 E: d2 h9 ]6 _
- module_param(bcnt, int, S_IRUGO);
6 C+ H2 f" [& G - module_param(ccnt, int, S_IRUGO);
复制代码
" S7 y/ j% E& L; G0 M( B6 ~% [; z( A) `7 H" _. T
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用8 J# r- V! S, k4 I1 `; O% n" T
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
3 z* G y8 |7 o+ V) Q 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" b5 U& ^' d" A" g: C9 [" p6 L( a
9 c! R# x8 s. ?. v; u* ]7 T" e
6 y D* V# S) i- \! T |
|