|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ O% _3 m0 \1 Q7 t
- [code]EDMA sample test application, z: r. |0 [7 y( Y7 V' S/ R
- /*
2 [+ @+ ~9 Q: C1 E d C - * edma_test.c+ [1 V9 L& ~% L+ o7 L# m7 [1 u
- *
* C3 G6 H6 P& K" h& K - * brief EDMA3 Test Application
- R8 p+ K( T/ n! `9 V - *, Q7 u( b4 d k! C0 W" t
- * This file contains EDMA3 Test code.
# m: _8 m( G! I2 @0 c% b! T3 {: ? - *
9 _; r6 i9 a0 R3 h7 K9 q* e0 C - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# f) ^* a. O8 |% Y3 I" R9 X+ P2 x - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 s! O9 ?3 Q7 U" a7 ~; a: J; J - * TO CHANGE.9 N E7 c. H! }# Y
- *! m/ v4 H9 m% m* T' i
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/& l$ G. n& z- [- D4 J
- *. a7 ^, H. Q: d& l5 V0 g r f
- * This program is free software; you can redistribute it and/or5 e: t. N1 m1 K- l2 H0 ~2 u
- * modify it under the terms of the GNU General Public License as
9 M. ]" ]% D: N9 z1 V+ k - * published by the Free Software Foundation version 2. b8 ]5 H4 o% r1 l
- *
0 ^ @3 z) {' f( n/ E' ^ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
3 b( K1 e- l: g# Z4 a& p6 D. B - * kind, whether express or implied; without even the implied warranty
" p' ~1 e3 G% \4 k0 ]4 V& |6 Z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ J0 m" H. b' P, k) E) Y2 L
- * GNU General Public License for more details.
3 y- ]6 J) e: m' z# { - */: y$ z' q: [" ^! T6 G
/ n: S" F% _1 s# w9 ]" `+ Z0 ]0 o- #include <linux/module.h>
4 I3 P: Z( L- ?$ z# I - #include <linux/init.h>
( A+ ]9 E6 P. B - #include <linux/errno.h>1 a) v* i6 n4 T/ Y j
- #include <linux/types.h>3 L2 R# Y. f; V A. I4 Q* P: r
- #include <linux/interrupt.h>$ T4 D9 O* o) s8 m! X. Q
- #include <asm/io.h>
4 x* l" ` Y' h3 {+ L - #include <linux/moduleparam.h># v& Q6 X# _: r5 g$ c
- #include <linux/sysctl.h>4 F. a' ~; a1 ]9 l2 u. m
- #include <linux/mm.h>% e a+ c& y! y$ R9 t9 p( n
- #include <linux/dma-mapping.h>
/ u6 y( E4 E2 _, z - 5 l- E, V2 h+ {+ m
- #include <mach/memory.h>
; q R/ f# A& |& m. c - #include <mach/hardware.h>6 g5 L; y* l) B8 O$ h8 g
- #include <mach/irqs.h>
% h8 @3 x# j/ S - #include <asm/hardware/edma.h>
- s8 ?, a7 H& S$ h2 I M" ~ - & w9 r. `/ x5 W# j
- #undef EDMA3_DEBUG
/ o) Q- E1 \0 q' }" i6 z - /*#define EDMA3_DEBUG*/
; a1 n/ q0 V5 W! V; f0 h - % I) P" X4 W/ [5 _9 ]. M# J
- #ifdef EDMA3_DEBUG
/ O$ [. r7 I. E0 y: S* C3 l - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 Q$ [4 s$ h) H+ I. e - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ S0 B# N0 n/ m/ T. Z; T: s/ L - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* [1 V: u- @! Y- m% q$ A9 _" G+ v
- #else
0 G9 }1 E4 O( T - #define DMA_PRINTK( x... )
2 k- w {- f# H8 N - #define DMA_FN_IN
; l' ^7 _2 ?1 v2 o - #define DMA_FN_OUT3 \; z7 d2 I9 S: [8 \7 c1 @% ~
- #endif+ \$ R9 X7 @: @4 z9 N* _8 j6 Q
) d% A9 ~- Z- j Y3 J, t: h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)8 L+ Y4 n/ Q+ |# r
- #define STATIC_SHIFT 3# y0 m( ]7 P% W3 x
- #define TCINTEN_SHIFT 20- G z: L3 V+ y3 C7 a$ P# K2 |% p+ a
- #define ITCINTEN_SHIFT 21
1 M, W- t5 p: ^5 g% t# } - #define TCCHEN_SHIFT 22
2 |, N9 \. t% P! O& |& ^* N% i# { - #define ITCCHEN_SHIFT 23( }: {# r# F6 n. t1 v. K
# A5 m+ m y/ f' g& A! }- static volatile int irqraised1 = 0;0 e5 a3 x4 U6 @
- static volatile int irqraised2 = 0;9 m. a- L1 w' F0 Q& d/ Z
- l) K' ~: W& b" y0 }0 h1 y& {# X- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& [; u; C% G/ I; _# \+ u
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' R& e& ~) }" `1 f7 a" t
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
F- J3 P2 `1 j! j- W# J - " M7 S8 X8 X# F
- dma_addr_t dmaphyssrc1 = 0;
6 k- y4 a$ ~+ l- @" R" Z - dma_addr_t dmaphyssrc2 = 0;
5 }0 }. r: }: V! ` - dma_addr_t dmaphysdest1 = 0;
' Y* a9 }8 l A; }9 w/ A( @8 X6 c - dma_addr_t dmaphysdest2 = 0;
1 y& B: W& f$ q
8 m \5 q! ~ ~: h/ K- char *dmabufsrc1 = NULL;' I1 I+ Q9 K' t% k* P2 e: ~
- char *dmabufsrc2 = NULL;: p# Q0 L& w6 H% l: @
- char *dmabufdest1 = NULL;. q- }6 h o! I4 |' @' J1 h
- char *dmabufdest2 = NULL;7 A2 W4 I4 v# U0 h' R( B# Q
- * F/ I% r* J! ^" e3 L% w1 u/ i
- static int acnt = 512; T8 J: [4 p0 j6 h) [4 ] R
- static int bcnt = 8;+ P& T, P9 z* P' D+ d& W
- static int ccnt = 8;4 u+ d3 V& a# v' N: I7 q% r
- % [/ a0 n+ m- j- Z" r% g- G
- module_param(acnt, int, S_IRUGO);
/ A4 N7 d; T- r, W g* W( e - module_param(bcnt, int, S_IRUGO);
: a o% J& J1 E - module_param(ccnt, int, S_IRUGO);
复制代码 % ~$ n7 v$ n- |' x- g
8 K3 Y! o+ J; o. @2 k 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: a9 _& B4 Y7 v3 v
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。0 E3 N& \+ f; Z: v4 T
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! |- o' ]# O! x1 @9 ^4 E4 k7 w8 l" u" Z! e, H1 q& u
7 n: \* s( d# c$ u |
|