|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 9 N; N% K; |. g+ Y3 V! t' b7 S7 F3 M
- [code]EDMA sample test application
W7 h' ~5 f# O; a2 E% l9 A; V: }4 D - /*
$ U+ `* Z$ b. h4 b' j4 H* F - * edma_test.c- Q! P! ~! p! a9 }
- *8 T i# A0 f8 Z2 T
- * brief EDMA3 Test Application, {/ S }3 Z8 i- S( o- Y
- *, R6 w6 T) @. T- s) H' x' x# y1 y1 m* |
- * This file contains EDMA3 Test code.
# {2 m/ _; L& W% a; L - *
?" F# S# R g( P7 a0 B6 n+ ` - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 o0 Q9 I6 H# E! U( i
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
$ K1 W2 X) @( Q8 m - * TO CHANGE., s& I* m X: y. z4 `' R4 B8 N. C+ ~
- *
" L' p; Z1 }$ s: i; C - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/7 g9 a& q# u1 Z9 [* i* a
- *
- v# Y# S$ v% B8 k; P - * This program is free software; you can redistribute it and/or
5 Z' }9 i0 y" t) Q9 L4 g0 {, { - * modify it under the terms of the GNU General Public License as
9 U* ^( @6 [7 s - * published by the Free Software Foundation version 2./ d+ o* L6 Z' r$ q( A
- *# U% r7 j6 x! M1 X
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 K9 ]' w+ r/ S4 U6 a8 S$ z
- * kind, whether express or implied; without even the implied warranty0 e: ?. v, z: ]: ~$ o- c; L
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 \1 n c: \; L h% q) S8 N0 y
- * GNU General Public License for more details.! i$ z: {+ O0 d
- */$ a; ?$ q* {1 N3 O% b$ q" Q& P
- 9 O n3 c; I1 r+ [6 N. G
- #include <linux/module.h>
+ B$ ]6 t& J% T) S! z, `+ J - #include <linux/init.h>
9 P% x( @, v+ B D1 ^& { - #include <linux/errno.h>
" V! w: \% R9 L' ~4 z6 ]3 k# o) v% A# T - #include <linux/types.h>
* [ u, c& c4 X! ^ - #include <linux/interrupt.h># |- C( \1 d ~6 c' }# V# V
- #include <asm/io.h>0 M+ s$ {4 }4 {/ }- P8 B6 ]
- #include <linux/moduleparam.h>7 X- e" W, ~% d/ M( o/ c( T% V
- #include <linux/sysctl.h>* s0 z/ j6 X* W" L/ h
- #include <linux/mm.h>9 \1 ~4 T& H8 L" o, W/ {5 z
- #include <linux/dma-mapping.h>
* C1 r: X8 ^/ s# I, f9 n; \ - $ e, j" l }4 h3 I/ v; Q7 T* m* w
- #include <mach/memory.h>( z! y8 p. q. k) R3 r. W
- #include <mach/hardware.h>8 B. u9 O( V5 s0 H2 G7 I, v
- #include <mach/irqs.h>. D( L+ b5 b5 G9 n
- #include <asm/hardware/edma.h>. ]2 {# u( P+ d1 K/ ]/ Q
- 3 p, f9 j$ W5 j# U8 r, [8 ^/ L. I
- #undef EDMA3_DEBUG
) B. k' @6 _: n% y E - /*#define EDMA3_DEBUG*/( y+ m/ D9 h- x* @ u
' G- K% ?3 C: T( v! u0 M- #ifdef EDMA3_DEBUG
1 m% f' E, m. o2 K1 V - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)" T! i( \: T4 v0 K" E9 _9 f
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# W0 B+ S* I7 ^% A( \ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 i- @, d- V0 [! b7 y+ g5 X - #else
: a5 f4 H. Q& t* h - #define DMA_PRINTK( x... )
1 [+ V) N* |/ r3 x/ m - #define DMA_FN_IN
- q1 q# N" J% r. m - #define DMA_FN_OUT
' x/ ~7 r+ I% t2 k - #endif8 H5 o( N5 Y; B; Z h( F* _
9 x( ^' x: E8 A4 s8 L1 p' Q. Y7 y& @0 ~- #define MAX_DMA_TRANSFER_IN_BYTES (32768): h3 l3 C1 X' M$ X" k1 ?
- #define STATIC_SHIFT 3
& G1 F/ J" [6 R$ y) A& o. Z6 v - #define TCINTEN_SHIFT 20* U0 j4 [, n- n. O8 ~' k2 U
- #define ITCINTEN_SHIFT 212 \5 z" \$ }5 d* J) u6 E
- #define TCCHEN_SHIFT 222 n% i7 s9 C9 |2 A
- #define ITCCHEN_SHIFT 23
- M3 S3 ?8 O" O4 J: e& i
% E2 _- k7 G* b- static volatile int irqraised1 = 0;
! @( r |: ^/ O - static volatile int irqraised2 = 0;
/ M- t3 f/ p# ~) U; V2 ~
2 q4 t* O9 ~) t' F) b9 T- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* V( Z: Y8 g8 n6 C: O2 q - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- [( C K% k; F# P9 f1 E Y
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" Q9 U2 b# S; T" K - : M' m. }4 [& p+ l1 X
- dma_addr_t dmaphyssrc1 = 0;1 a* {# ?9 B3 b6 |. O
- dma_addr_t dmaphyssrc2 = 0;
0 p$ U' ^1 r( s6 T8 X - dma_addr_t dmaphysdest1 = 0;
3 L4 k8 L+ Z4 ^" L2 b ] - dma_addr_t dmaphysdest2 = 0;
# h7 ], q( L* `" g4 ~* U
# w' g4 e; e( }: w$ `: O2 T5 h- char *dmabufsrc1 = NULL;
@) n8 Q# M, C5 J* x - char *dmabufsrc2 = NULL;3 G5 \: ?, K2 s2 l4 @: y: A. z
- char *dmabufdest1 = NULL;8 `8 V7 p1 _( E ?9 f& v
- char *dmabufdest2 = NULL;: l$ V. V: h4 p4 v5 ]4 q
- 4 K6 g9 `6 r+ e/ z
- static int acnt = 512;$ }$ D+ I6 T3 |5 [, r
- static int bcnt = 8;; k2 u" |5 Z; V% i% p+ Q( N
- static int ccnt = 8;1 h( x2 W% p6 a! f1 U8 f
" E5 M6 D$ ]+ {# k: _7 j+ T, U0 A) [- ]- module_param(acnt, int, S_IRUGO);' Z' G6 q: D$ v- P& S5 F4 T
- module_param(bcnt, int, S_IRUGO);0 g' b6 x. u) \! p" H/ `5 t2 P
- module_param(ccnt, int, S_IRUGO);
复制代码 ' Q6 y7 } z- B% |0 ]
S- c1 O- g; }% I 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
( E0 M% [3 i1 `, d# y0 p8 Yarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
V' K2 i d9 b7 u: ]4 o) r 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
& _9 d9 E6 Q8 M4 N6 E }7 v& b! a/ e8 n# `3 f
* I- b1 ? p7 d) P4 h, w0 m
|
|