|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ( p4 X5 K' M* J6 `# e) s) U& y8 g
- [code]EDMA sample test application' e/ D; ^4 B, ^$ K9 P3 h
- /*
+ m- p1 \. h) \% _; D$ B/ P - * edma_test.c* v7 H) t3 H- z- E* j
- *
6 H7 v7 g6 Q" C) i2 b - * brief EDMA3 Test Application, |: b. O U! N( J9 Z
- ** _3 k' m6 ?1 _8 U
- * This file contains EDMA3 Test code.
; U' J) o6 }+ S6 d - *8 T' e0 M5 S2 {
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
8 N- j! H0 w9 t7 m - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! }3 ^: }/ A3 d. d" r/ m
- * TO CHANGE.8 a9 V7 k( x+ Z5 d7 U; u( O
- *7 i5 _6 v$ N& ]1 V" j: P) F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 k. i* y6 H* x0 R
- *; Q; m: {$ J7 H4 E+ Y' b
- * This program is free software; you can redistribute it and/or; ]- F6 I5 F. N8 ]6 ~, O
- * modify it under the terms of the GNU General Public License as* u" K- F$ Y! S3 J
- * published by the Free Software Foundation version 2.
- ?3 Q0 N3 B' m9 c% ` - *
2 G5 m2 @, v% W" p - * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ a3 {6 J: I9 b
- * kind, whether express or implied; without even the implied warranty
' l. G3 }. t* @3 X; u - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
& P6 t8 n: c( M - * GNU General Public License for more details.
( l3 {, N- f1 O2 X: F6 u - */1 r! o O7 j' W
) V5 v, G& h' x- #include <linux/module.h>
$ H ]9 R6 }5 m/ D - #include <linux/init.h>" }% B9 x1 a ?% o8 d: `) {- }
- #include <linux/errno.h>+ i: M5 p) M) K
- #include <linux/types.h>7 |- o$ ~6 l/ ^/ j
- #include <linux/interrupt.h>
. @5 r3 Y$ H4 M. J. b2 j8 t - #include <asm/io.h>: C& C2 s- r3 J+ m; Z' \
- #include <linux/moduleparam.h>
3 }" _% }& V; j/ W* s6 i - #include <linux/sysctl.h>
9 o8 W( B! N6 P - #include <linux/mm.h>( w, H( e8 C( R0 E8 D6 z( X, H
- #include <linux/dma-mapping.h>
' x+ m: F7 o8 ?8 s8 @ - $ ]2 i4 K* I5 F1 C4 [% K
- #include <mach/memory.h>
4 p0 D6 O1 I O# Y4 V8 h - #include <mach/hardware.h>
5 |$ ]" h5 |" I6 w; ]( r - #include <mach/irqs.h>
6 o0 i) Y3 l2 z/ x/ y - #include <asm/hardware/edma.h>
0 f, t/ M( D0 V1 t! G1 B - ; C1 P0 w+ Z2 @6 D8 _
- #undef EDMA3_DEBUG2 b, `( b4 u" y- c" t O) E
- /*#define EDMA3_DEBUG*/
$ R/ k* e9 c$ p0 `! _
7 C3 E" q: a3 D& o- #ifdef EDMA3_DEBUG
8 B7 B) k# y9 d3 o - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)9 B( u: Y' P/ H/ ?
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& Q# y" R" y( [+ I0 ]
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)1 k- U2 v k! V8 y( T& v/ {/ L6 x# N! c
- #else
' M! ]+ K* N6 K8 S& V - #define DMA_PRINTK( x... )
( L1 ~2 B, Y7 ?* H( f$ x - #define DMA_FN_IN9 ^' u5 G2 I/ r/ o: v, {8 h
- #define DMA_FN_OUT
, q0 }; ]4 ^* | - #endif
* C8 B% h; ~. V9 V6 k9 e* |' m/ z
. J3 P$ h O: {! t% m! n% ]4 \- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
( q3 w3 V% I5 k8 Q" O \ - #define STATIC_SHIFT 3
% s( G% [# S; {! m7 t5 ^ - #define TCINTEN_SHIFT 20) D+ y/ U+ G" m! A$ Q: N1 H2 I: Q8 F
- #define ITCINTEN_SHIFT 21" c9 O. H. Y8 ]5 j* u
- #define TCCHEN_SHIFT 22
, y6 n7 I) }4 r& w* l( I) [ - #define ITCCHEN_SHIFT 23
4 R+ o; [2 j4 Z - + v2 I- l9 q+ O" ?( K. G
- static volatile int irqraised1 = 0;& [0 _) W1 r# z) s: I3 Z% B
- static volatile int irqraised2 = 0;
5 W2 y1 [- n9 m, B' T7 c3 u5 N - ]4 T0 z) ^7 C* L9 |' z# w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' J x/ t/ x1 T: z- e& ^; E- S& K3 d - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 U1 }4 w7 I- b: f5 T N% T9 K- J
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 g z" ~ n) t: t' U1 g
) P* L9 c, j# h+ B# i; c- dma_addr_t dmaphyssrc1 = 0;) M: w) ^( h2 _, ^, R& Z x, \
- dma_addr_t dmaphyssrc2 = 0;
r3 U" H. y- ]8 w# c. ^6 u$ X - dma_addr_t dmaphysdest1 = 0;4 ~ W1 h" F9 ^0 E" ^/ q
- dma_addr_t dmaphysdest2 = 0;2 P( Q4 s& }% V1 f8 Q6 [ [
- ; F1 P) | N! }% B
- char *dmabufsrc1 = NULL;: N6 I' F- i7 {. C$ R1 G& h _$ v0 ?2 H
- char *dmabufsrc2 = NULL;1 n7 c, {- s. c% O
- char *dmabufdest1 = NULL;
; g1 b. n. N3 w: U( b - char *dmabufdest2 = NULL;! l5 a0 V" w4 [* a- P2 \8 G) ^
4 Z4 t" J! P8 I7 ]* f3 o7 p- static int acnt = 512;
. q! r1 b/ M( g5 O) J - static int bcnt = 8;( M/ x9 C! s" d. A2 L e1 S T% {
- static int ccnt = 8;3 t( n7 ]3 D6 Q. L1 ]( y5 R4 H4 P
- " ], p0 |- N( V$ Q
- module_param(acnt, int, S_IRUGO);
" D0 c6 T0 b' H- a - module_param(bcnt, int, S_IRUGO);
* u# N2 [# Z$ W5 } - module_param(ccnt, int, S_IRUGO);
复制代码
! O" E3 X* m7 k% g% K' p
' `7 T8 p& Q* s, i J& U4 b 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用$ |# ?/ E/ [. z/ c
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
% k$ S. ^6 u+ B; L 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" b+ ~5 y* K2 w2 _
& s0 d- k/ u" B `, L/ X. L
0 v5 }- k: {" Q, ]0 [" i- K' R% [ |
|