|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 . J0 n( U2 | V0 t& E
- [code]EDMA sample test application
K' v& O' e( A1 m$ X; l$ t( } - /*
K L! k( ^9 v - * edma_test.c; I) A# J9 y7 n6 Z& |# h; H/ `
- *
. B) e# g9 g/ O# J& l" c4 [ - * brief EDMA3 Test Application
0 m* f3 S: M- I' U$ M# I7 m - *) _) S2 W, ?$ ~ b2 Y: d e- e( b
- * This file contains EDMA3 Test code.
f# R6 P- d: G* M, Z. W! u - *
' d( [5 F5 G$ u7 C' A- m# e& H" o - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE3 ~1 l4 e# a3 @! Q% z, Q
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
! s0 @; P( O7 F ]/ M# |1 h" G - * TO CHANGE.3 r V. [* y9 Q# e. F8 b
- *, Z6 A& G( u: p1 N- [- U9 Y9 \
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/. u- d& Z, A2 n# Z L$ d+ C
- *
/ |9 y6 K4 Q- n* y - * This program is free software; you can redistribute it and/or5 Z. E, ^, U, ?1 V1 i
- * modify it under the terms of the GNU General Public License as
. S- z+ p( w" ~! F% H* @2 g - * published by the Free Software Foundation version 2.
# P0 q- T! n' C i# ~5 B - *3 r$ }( w+ I1 ]8 K7 j) M' k
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any; R4 R% w- Q! J) ~! Q$ l# `
- * kind, whether express or implied; without even the implied warranty
' N2 w& }( o; |/ K @, o# [9 A$ q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
. t. R4 ?/ r. \8 r; A- t5 ? - * GNU General Public License for more details.; X. C6 g2 t! f2 F; _
- */
- `/ b; F* w! ` ]1 B - 3 i2 f4 h1 L) Q+ `- C. \+ U
- #include <linux/module.h>
0 f/ q; e! F/ T* C7 ]1 @ - #include <linux/init.h>8 {) Z5 L+ W( B" Q
- #include <linux/errno.h>2 b/ f2 v6 a, \; a Z6 H
- #include <linux/types.h>4 g% K5 ]) B9 Y P9 ]
- #include <linux/interrupt.h>& J4 _6 N6 ^! \4 [- k3 I" K" x8 W
- #include <asm/io.h>/ {' V# M W. u
- #include <linux/moduleparam.h>- M7 c! D: e/ @! U" ^" S
- #include <linux/sysctl.h>
) s3 L/ A* ^2 Z* ~$ A& K8 X* v - #include <linux/mm.h>; A9 p# Y5 d% X/ }5 t" {+ K
- #include <linux/dma-mapping.h>
' A* [1 H/ j: N0 e% ?
' h5 \' p: p5 P8 F- #include <mach/memory.h># S/ o5 t. Q5 ^( N, X
- #include <mach/hardware.h>
; \1 r; z" _: l" n" a' C. R - #include <mach/irqs.h>
% j4 j' n: T( o0 Q% S1 W r - #include <asm/hardware/edma.h>
+ C3 ~1 v: o8 d - 2 l, Z1 \/ w) B' S( B- ?' V+ i
- #undef EDMA3_DEBUG# |' n/ C, n1 u/ T" m& u
- /*#define EDMA3_DEBUG*/5 y# R. `1 k! W" l) Y) L8 c) b
- ( {8 i2 K/ C, |0 S( O
- #ifdef EDMA3_DEBUG
' s* m0 @! V1 Z! G+ J - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)" w4 w- o5 c2 R& ~
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
- m2 g+ Z; w6 |) W - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__); C/ K' Y S0 E1 ^
- #else
7 y) i2 O1 }0 P* r8 G/ T& [ - #define DMA_PRINTK( x... )
2 s. ?6 f2 K& _5 }( {4 d - #define DMA_FN_IN5 P' g0 p7 n' i! A
- #define DMA_FN_OUT* n. k: T. Y3 Z9 i5 f
- #endif0 R- u% k( [& N% T8 l5 K
- - ~1 W7 P& k+ E, Z
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" S; i8 e. g- z0 V4 X# I, @ - #define STATIC_SHIFT 3
3 M- K. @! ?0 a; | - #define TCINTEN_SHIFT 20: F, x4 }$ _. Y- ?3 s
- #define ITCINTEN_SHIFT 21& `$ w; z% t, b1 p* B" s
- #define TCCHEN_SHIFT 22
0 C* A9 G) c) H. X% C/ A - #define ITCCHEN_SHIFT 23$ U4 N" k" y1 Y
# |% `/ d% K4 ~$ W2 R- static volatile int irqraised1 = 0;
. b# [" r- R0 b& O# n$ u - static volatile int irqraised2 = 0;
4 Y5 D* P- z8 x0 m6 q$ p - 2 i3 b2 `1 f6 U1 G! T( l8 Y
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: X5 U- l' j! y1 F, ^7 i* b' W
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 v( l Y9 O$ s - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ G# k$ r5 y p- t x9 P) u
6 l0 r8 R r! ?# Z+ W- dma_addr_t dmaphyssrc1 = 0;/ r, F' j' q9 ]2 z
- dma_addr_t dmaphyssrc2 = 0;, J, X ^1 i* y+ p- }1 r7 B
- dma_addr_t dmaphysdest1 = 0;
: s8 M4 `# m5 V; e; _ - dma_addr_t dmaphysdest2 = 0;
1 @. J1 b3 ~8 `
1 j. V% K& Z$ v! [# f6 m- char *dmabufsrc1 = NULL;( g% e. ~' Z2 h3 Y. A
- char *dmabufsrc2 = NULL;
?& n3 o$ _, _! U: y7 m: T - char *dmabufdest1 = NULL;( Z+ H" o1 o- m, ]" W! }
- char *dmabufdest2 = NULL;
# P+ [1 F/ C; k
* n% u/ R8 {( b5 o; F) ?- c- static int acnt = 512;& O5 ~ `7 g* H. a @
- static int bcnt = 8;
6 T9 q9 T3 b! ~0 {5 q - static int ccnt = 8;
6 w3 \+ m5 X8 }' D8 |9 e! D1 S - 9 \# N' e3 L& z/ {
- module_param(acnt, int, S_IRUGO);- @) v& [/ F1 I! D8 K7 ?
- module_param(bcnt, int, S_IRUGO);
1 P1 l" ?: U3 |0 S) {4 B: U - module_param(ccnt, int, S_IRUGO);
复制代码
( ^; a s# u7 r/ @0 y" z( S& n; y: n3 H
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- ?# s1 F8 t! q( t- b7 l: z; a9 i a
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
, A) d+ b% G4 N$ W* r5 y 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
3 N& |1 e; B. g/ q, F! \, k% P
1 t/ {1 K: H6 x" f7 J( h) N/ m- K
8 H$ u9 M- z& b, _ |
|