|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
. Z' \" _" L" X: o% ~* i) r5 z- [code]EDMA sample test application( E+ z* e% N' ~7 ?- }& X! v6 ?9 J" W
- /*
$ p2 q; z' g; G0 h# E- M# S! U - * edma_test.c
( Y) d( }. @; h$ v- i0 E. E - *6 u. U; I2 m2 N: v' L
- * brief EDMA3 Test Application
' F( t: `" W" M$ S: C- w - *
# k+ I) G s- o! f - * This file contains EDMA3 Test code.+ z8 V) j2 T$ u! p* q. N
- *! ~/ T3 r3 p9 k! d; {1 ?* E# r5 t
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
8 G# k$ q: P3 t/ J, Z - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 d2 x; u/ l" z9 ~* b! l - * TO CHANGE.: o. R9 m; [+ K/ c' [
- *
. e9 w/ ~* a- f& Q$ C4 F$ E7 S - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ {4 Q' F( X' Z- x% b - *
7 K$ A S. M1 |. P# u - * This program is free software; you can redistribute it and/or
/ I6 E$ D/ e% t6 u8 F, q - * modify it under the terms of the GNU General Public License as
$ a4 Q8 O$ N% ` - * published by the Free Software Foundation version 2.6 M: ?* T" e3 y* U4 W6 a6 S; l
- *
/ p" a) f# h6 U - * This program is distributed "as is" WITHOUT ANY WARRANTY of any+ @2 Z4 z) o5 u2 Q% h
- * kind, whether express or implied; without even the implied warranty" O9 W0 }; C( u
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. i6 Q% ~% U9 u7 k" O
- * GNU General Public License for more details.( R4 _7 M8 B3 t4 L
- */
6 W6 p$ t0 p9 x* l - 3 R/ j4 c0 j5 Q& i* k7 I4 l( ~* {; D# X
- #include <linux/module.h>! d; m! Q5 Z Z H' u/ j, x$ V+ O
- #include <linux/init.h>
B% G' j. r6 z$ _ W* A. J. D3 I - #include <linux/errno.h>
5 J$ d4 T( v4 n t4 i- w" f - #include <linux/types.h>' U- _# r; y* N' r
- #include <linux/interrupt.h>
) N( l/ {8 p% K$ _ - #include <asm/io.h>" {% E% o; b7 K7 ~
- #include <linux/moduleparam.h>
: X- G$ X6 q/ J2 D% W! s5 A3 C - #include <linux/sysctl.h>
) H8 c( [3 Q+ |& @$ U - #include <linux/mm.h>* g8 p7 _7 n* \# d' _/ d
- #include <linux/dma-mapping.h>1 }' ?* x% J2 I$ y" P G! X* i
8 O" _: x; g, J- E" ]$ x8 I- #include <mach/memory.h>/ i7 [0 ?" x; u4 a
- #include <mach/hardware.h>1 u+ u1 e, s/ y: m$ s2 G+ m) f% `/ a* @
- #include <mach/irqs.h>0 x9 a9 r9 h6 a3 g' _$ U
- #include <asm/hardware/edma.h>
5 x' [3 i& g0 J# z8 A' p - q$ N) U8 M5 Z6 h- g
- #undef EDMA3_DEBUG
3 q! a) R2 G0 o% q, k+ m - /*#define EDMA3_DEBUG*/5 t. L. a; `+ @1 H( ^" i
, e% `8 ?5 p/ {$ G4 x- N- #ifdef EDMA3_DEBUG: q, i, J3 k" a
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 \0 N$ ^( L# }8 o9 C. V# }& i
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
4 [9 R y& J9 A$ \! D+ | - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)+ m9 M. I# N, v& x
- #else
* @6 @0 n% t* | - #define DMA_PRINTK( x... )2 P5 O& C V! B4 j* s. r1 T; H
- #define DMA_FN_IN
- z, r2 P1 A9 g, s; X5 Y% s - #define DMA_FN_OUT
! L" p; _/ u0 B+ d - #endif
- I- Q2 m! c6 j: d - + S5 G( g# Z% p
- #define MAX_DMA_TRANSFER_IN_BYTES (32768): W& O) z8 G- w: {# ~' ^
- #define STATIC_SHIFT 3) |/ a! [) J4 N5 o& Y
- #define TCINTEN_SHIFT 20
* s& l, P) F9 k3 S - #define ITCINTEN_SHIFT 21
$ P! X. w7 }) K - #define TCCHEN_SHIFT 22
' v8 Q" u1 \3 N8 V) ?9 s6 X - #define ITCCHEN_SHIFT 23
& j3 o* Q e# y6 Q, b1 `6 g( x - 3 b, p$ L/ h! G0 v: e) w
- static volatile int irqraised1 = 0;% h/ N, u* @. ~
- static volatile int irqraised2 = 0;
: l/ q1 }$ I, O. }0 l1 H - 0 q- ]0 t7 o5 ?8 O3 w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
m- @2 E2 v( C' j# v9 P. m: o1 S - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; T% m3 X7 h; p" _
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& B+ u0 C. w( \2 \
/ N/ t- s" n* b3 [* z" S# Y' m- dma_addr_t dmaphyssrc1 = 0;; O2 E- D1 ]% Y' e: H- a- s
- dma_addr_t dmaphyssrc2 = 0;
# Q; S, V5 K8 }1 }7 M8 X/ u9 l - dma_addr_t dmaphysdest1 = 0;
8 `" g6 x- s6 H, z8 ^5 \ - dma_addr_t dmaphysdest2 = 0;- h$ k7 s: Z( _- f. W
( P* p4 f, |! Y% U- char *dmabufsrc1 = NULL;
+ q' q, M4 v# p - char *dmabufsrc2 = NULL;+ l, {$ L2 P5 a, z( R6 K8 B
- char *dmabufdest1 = NULL;0 q/ q2 E3 _! K3 D, z' A* K
- char *dmabufdest2 = NULL;$ L5 L& b4 e& L) \! P3 e
2 R- ~) w, W3 u) D! |, \) Q% V F2 Y- static int acnt = 512;- V) j& O' y, _( x- |# O4 I9 Q
- static int bcnt = 8;
! [" L; m+ {, Q0 ] - static int ccnt = 8;
9 j) b5 L5 c$ Q8 ?1 f0 M
" M7 O4 N& m+ \9 w% L! F Q- module_param(acnt, int, S_IRUGO);1 v! F8 W- f4 \' s
- module_param(bcnt, int, S_IRUGO);; r4 Q D2 L1 j# W
- module_param(ccnt, int, S_IRUGO);
复制代码 + X P; {+ y! C. }3 r
0 W' @5 H' F3 |5 d2 j! Z; s 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用7 W5 L: q) x( ^
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
" y' y" r! S. ]+ ~1 E 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。8 E1 o! o& }+ H; r* J8 @' j; k
) D$ s8 F7 e1 {
3 ?9 n8 {2 F/ q5 Q0 J$ j |
|