|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 * Q* W; i; m6 u' K0 `
- [code]EDMA sample test application9 T4 X$ m! \5 B& f( x
- /*2 p. v; _. R3 D+ g" i ~
- * edma_test.c
* ]* L2 C I5 Y7 U0 I0 \# m0 j: J% Z( t - *) S% E; Q$ I, R- F; D
- * brief EDMA3 Test Application U6 x$ D* w0 P( R4 s
- *
- C+ v7 ?1 A9 J B) J5 ~0 u - * This file contains EDMA3 Test code.% Z8 _5 ~9 W2 J# y6 k3 O
- *: p j! x4 o6 A% N% [3 I; ~
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* p( k( p, X7 @- \8 ? - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
5 `4 S2 F0 s+ t - * TO CHANGE.
! J' G" \! ~( H+ o - *
* ~( O; I+ E2 R; Q' |# x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! o! U2 {7 {1 d' l
- *
9 U, f3 p/ J1 v' H - * This program is free software; you can redistribute it and/or) a, |9 l1 x; O% {) _# C n }
- * modify it under the terms of the GNU General Public License as
; j8 x7 k: I" r, j - * published by the Free Software Foundation version 2.: F( r' F/ ~7 n
- *4 r& y- T6 u a' ]
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# y. h: b0 O1 O! Q3 d( m - * kind, whether express or implied; without even the implied warranty
. K. Y, q- n4 G ?% k7 s1 I - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ s: d& t. U8 L9 o
- * GNU General Public License for more details.$ e* V/ r9 m# @9 `
- */- p, F) c& e H3 ^
- 1 n/ d" V+ m7 n: }8 ^+ y
- #include <linux/module.h>
$ P3 \# x6 G/ D/ | - #include <linux/init.h>4 T- u6 o) @) s7 e# K/ J2 v; C
- #include <linux/errno.h>
1 H1 S5 b7 f3 m2 E5 h - #include <linux/types.h>" H- f& D: Y) s( r* _1 T2 E0 n# }5 R, w
- #include <linux/interrupt.h>
- `( n, }" M; l1 Y4 r. E - #include <asm/io.h>, r- U. X1 S( I6 Z+ K% K5 N1 k
- #include <linux/moduleparam.h>( W8 s$ G3 F2 j+ o z& C
- #include <linux/sysctl.h>
- {7 i i. A1 q) L - #include <linux/mm.h>8 p& |: m2 _; H- L! D
- #include <linux/dma-mapping.h>
+ _, i8 Q- q6 }- y - 8 d; C' Z- U" p8 ~/ ~5 I) [
- #include <mach/memory.h>. N1 H7 O5 h Z& R/ I6 q
- #include <mach/hardware.h>8 B" O# H" H0 W; a0 ?
- #include <mach/irqs.h>" m1 u+ S" @2 t$ ?4 F6 R
- #include <asm/hardware/edma.h>
! G: ^: C5 `7 M+ ` q - ! R2 v% e% |/ S1 t# j Q
- #undef EDMA3_DEBUG# ~" q g3 O7 N$ l( j* D5 N
- /*#define EDMA3_DEBUG*/
- g0 C' p, U& \5 ^6 K- x - 3 S& [5 j8 }$ L7 g% X3 f2 c7 [) e
- #ifdef EDMA3_DEBUG3 n- G' \" @0 @
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS); H; e3 C2 T. h& v
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# J! G7 v2 U& a7 K* W9 O; ^, \
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% |' b9 d0 |! b/ f) { `4 ?- M6 t7 M
- #else
, `8 \3 ]( w$ h- Y, u# y - #define DMA_PRINTK( x... )
- e- o+ F u5 Q! k0 ~: Y - #define DMA_FN_IN
" s8 \) ]1 w8 _2 u5 P& O3 E- ?# F8 [ - #define DMA_FN_OUT
: t4 M# F! F; P/ n- z/ o - #endif/ G( l% |& b& }" w
0 |; v8 u: B* }- #define MAX_DMA_TRANSFER_IN_BYTES (32768)9 c5 {. G' m. z" O
- #define STATIC_SHIFT 3) z+ U% S. \6 R- L0 w* m$ ], @1 D: ^
- #define TCINTEN_SHIFT 20
9 P7 `6 }8 H, h: s5 ^* x3 j6 I - #define ITCINTEN_SHIFT 21
$ ~* o5 V& } L, N' d, A* w - #define TCCHEN_SHIFT 22
1 l2 G: a: \% e( N1 j - #define ITCCHEN_SHIFT 23; r, G6 r: C6 v2 \# M
! _/ ^; c! a) l$ \- static volatile int irqraised1 = 0; q- R- a; m- M k- f& N
- static volatile int irqraised2 = 0;) t; U6 `" A1 @7 G
- ; [ ~, M8 o, C* x) I
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); _6 S @+ K# ^0 ^, \
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& j" I6 M$ m6 x1 p2 M* k" w T$ k s - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# ^% ~2 E7 ^% o; i - % Y" ?) }; m. x; b% D% ^. I* }6 L
- dma_addr_t dmaphyssrc1 = 0;
1 } o$ ^$ x: s( K - dma_addr_t dmaphyssrc2 = 0;
" w$ s) e( x! }8 H, n - dma_addr_t dmaphysdest1 = 0;' p0 e& W N3 t5 E4 \* ]- A$ M2 @
- dma_addr_t dmaphysdest2 = 0;
: s+ N- z+ T' M2 i" q - 7 U: J( N) p8 q7 c+ m
- char *dmabufsrc1 = NULL;
7 J C: y" e: j9 [# W9 ?8 [6 C - char *dmabufsrc2 = NULL;
* H8 W& |( u) A - char *dmabufdest1 = NULL;
( k* v7 ]! y. m+ |8 ?3 L - char *dmabufdest2 = NULL;# U5 C6 x$ @% X
- ; m/ @$ u8 } m7 u* h9 [
- static int acnt = 512;% {% r) g5 z$ m6 B
- static int bcnt = 8;
9 P2 A6 ~6 d6 j - static int ccnt = 8;( ]0 q( _ R C& }# K: _# o
% o2 Y4 m( g/ _* P% D- module_param(acnt, int, S_IRUGO);
+ ~8 x, u% ^. |& K) `9 Z. Q - module_param(bcnt, int, S_IRUGO);
+ k! i7 J9 w$ [; d% C - module_param(ccnt, int, S_IRUGO);
复制代码 6 @$ X" ?* b4 @6 x" i
& W& O/ ?0 `! z7 G2 V" `/ ~ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用7 F z2 Q. ]# b7 \' \
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。5 J& [( d9 o- v9 `# n/ b
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
# I4 ^+ @6 O3 Z0 [ \ k5 J
4 M5 b, F' E! z# c+ s
# n1 z! _. o* A9 `# l |
|