|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
7 L( M0 p$ k( c5 ?- E% h/ c7 l- [code]EDMA sample test application3 L; l J, P( o# x: x
- /*1 Q: E9 P9 F' U+ ^0 ?
- * edma_test.c' w9 h# s$ ?: ]$ u& r+ j
- *: K" U* p: z" ?- t
- * brief EDMA3 Test Application5 [6 K) ^% x# X2 W
- *, I: q& P1 Y+ }$ N6 y
- * This file contains EDMA3 Test code.
/ E' _- e6 i8 Y' c: Y - *
. m; p* l' j( P6 f3 O - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
- [) k7 T; ^% i* L. h6 N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
3 ~# f* I1 Z y; P2 `8 v+ v5 | - * TO CHANGE.- M F; C% U( M3 B$ p7 |) j! ^
- *
" N% w$ R3 u) ]3 o) M4 s% @# i+ [ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* a2 i( P, [. \( D) E, C - *
8 g9 o& X0 Z5 ~' W! ]. }/ b - * This program is free software; you can redistribute it and/or
( m) `* N; z: D7 V, m3 j - * modify it under the terms of the GNU General Public License as
$ u" Q7 E0 {, G/ U - * published by the Free Software Foundation version 2.) k3 ^3 q# Y* O
- *8 L4 y4 y: U! s
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
; k( X/ c- C0 l x - * kind, whether express or implied; without even the implied warranty
9 ^* h# M4 ^: _7 J: X) n; [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" ~0 u. g: U$ ?9 o+ i+ Z - * GNU General Public License for more details.
% z: I3 `- M# h/ e* t - */% J, }& Z' [3 j
- 6 l# {* {0 V9 k; s
- #include <linux/module.h>
1 u" x- W5 q! Q2 k6 ~) `: ~ - #include <linux/init.h> l! t7 y1 t" A4 r2 L
- #include <linux/errno.h>
' {2 T9 }) g, H) @+ m - #include <linux/types.h>4 c/ W5 p9 n% A/ w3 ^7 t# ~
- #include <linux/interrupt.h>" ]& h/ m7 s. z; k. x7 N0 g( i
- #include <asm/io.h>6 Q8 b3 {0 S& d* ~/ B3 O
- #include <linux/moduleparam.h>
$ j0 N; ~/ o P - #include <linux/sysctl.h>
1 l% L! V5 `2 J0 r( v - #include <linux/mm.h>
0 ~) ?/ }/ I4 l8 L- E - #include <linux/dma-mapping.h>
1 I8 U5 `' Y% s& l+ J
" y3 L5 @ q- R- K' d& j/ u$ n) Q: P- #include <mach/memory.h>
^' _# H/ v2 U - #include <mach/hardware.h>. ~3 d6 L2 ?4 x* p9 g& P: ?, R
- #include <mach/irqs.h>
: ?, V1 ]" Q) Q0 m4 F1 h0 S' P - #include <asm/hardware/edma.h>
8 ]& @3 d- T& D+ J
- r4 O* ~: A) w6 E- #undef EDMA3_DEBUG
6 A7 Q& \; l: E( W' \ - /*#define EDMA3_DEBUG*/9 I) R$ _- E! @, L& @/ t: I4 S D
- % ]; d6 u# k$ D
- #ifdef EDMA3_DEBUG5 P6 D0 Q# E& w* T% G
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
9 r- t5 n: d( Q, z5 C; ~ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, z6 B: H n( f$ L. o5 h2 M( a - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)9 v' F8 h( i, `* N6 T4 I3 Y
- #else
6 m# Z6 O8 m# P# ^0 a v; Q' i - #define DMA_PRINTK( x... )
0 D5 u* ?8 R6 |" u8 c - #define DMA_FN_IN
: M$ B$ l/ M, E# H4 g" ] - #define DMA_FN_OUT
8 }3 i% {4 @& r [% ^) y8 ~" y - #endif
8 Z* O( [. M ]0 A - : K9 }* _/ |9 F. M3 e
- #define MAX_DMA_TRANSFER_IN_BYTES (32768), M7 N. `) C8 p- C( V& N$ F6 }2 r
- #define STATIC_SHIFT 3
$ N5 t/ c( e6 \" x5 @1 c - #define TCINTEN_SHIFT 20
# s$ z1 ~$ M& g! A1 C - #define ITCINTEN_SHIFT 218 f' G- p8 g( W4 O2 T3 t; N
- #define TCCHEN_SHIFT 22
) Y1 t; g: k& F9 `& G8 u; b( E7 v) M - #define ITCCHEN_SHIFT 23
5 y9 |# p: x$ m4 B4 O* _
7 k* {& M) p! X$ E; x2 c: j4 E p- static volatile int irqraised1 = 0;$ ?: W' k$ ]; g& m$ K! m8 q0 c
- static volatile int irqraised2 = 0;
8 u, m% a# r: t2 Y$ U
& h7 t5 }- x' J& \4 i: s. g/ E- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' O* {- O- b! J# M
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( r W1 N0 ~. k# \9 X t- k3 E
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) q. X8 j8 ?% Y9 O2 Q. v - 0 A3 S' V* z3 G, |) m3 N& a" |9 @
- dma_addr_t dmaphyssrc1 = 0;4 \, F! x* r' S( | r1 O# i
- dma_addr_t dmaphyssrc2 = 0;) ~; Y6 c1 A( j8 j( k3 q; a
- dma_addr_t dmaphysdest1 = 0;2 u5 \1 `% l& h8 S' Y7 j4 ^
- dma_addr_t dmaphysdest2 = 0;; D+ \) ?. P* X% w
- 1 k" s- @: @2 M2 i% ~
- char *dmabufsrc1 = NULL;. u* f3 i5 K# _) e
- char *dmabufsrc2 = NULL;6 b# q: n) Z( Z a) [
- char *dmabufdest1 = NULL;
3 U6 C0 K2 a% M2 C" k - char *dmabufdest2 = NULL;
# W$ B# ]( m' ?. E, u. t - 5 ^) h. U4 I D5 c* ]2 y5 X* I
- static int acnt = 512;/ d2 j/ n- G' w1 b
- static int bcnt = 8;
! H/ o1 y$ H, l: t" f - static int ccnt = 8;
# k+ O9 k4 U. J" F
8 F7 T# Y( G! k( }* L+ N( j- module_param(acnt, int, S_IRUGO);! r- ?( {2 E' L1 |$ R
- module_param(bcnt, int, S_IRUGO);" V& l, G b1 U `8 b$ x
- module_param(ccnt, int, S_IRUGO);
复制代码 2 t7 |: X; l: Q( D
6 t- j$ \0 L% w; P1 ]0 W% Y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: c) n& x8 n9 j6 q2 j/ Q6 W
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; e! _1 y, J' i6 B% ` 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
: |* E/ Z! Y6 B$ e0 w+ n5 S0 }
9 H7 Q1 v; g8 B$ |9 |$ x& j+ O$ c2 B4 B2 C
|
|