|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
( o" u8 b: w% f+ P7 o( u! D+ O- [code]EDMA sample test application
7 G: f+ ^6 I( p- s( E, R4 _2 c8 i" I - /*
1 r/ g* d9 S# n" T2 t8 K" L - * edma_test.c( ]1 V7 U ?1 Y, z
- *
% U* W% u C# s @& o - * brief EDMA3 Test Application
. q! f7 G2 O# {# H) Q - *, w9 J6 x. u2 F+ Z/ E8 {8 Y" k
- * This file contains EDMA3 Test code.1 x- Y# ?0 z6 r) O3 L4 y
- *" H, B$ L5 \" Y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
3 O3 v" b! ^6 E- b9 Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. a. K) ], ?. a" H1 j# }
- * TO CHANGE.
, G9 A; S& U8 R+ I$ j - *
7 c# p8 ^/ L# M3 x9 Y - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! D+ k& S* a" L7 s
- *
3 F2 U. u/ M) g& c0 g( b" [8 F - * This program is free software; you can redistribute it and/or: F/ }) F7 M8 m
- * modify it under the terms of the GNU General Public License as/ ^! o, S; W$ O8 {" \& `( z
- * published by the Free Software Foundation version 2.2 T% _/ d. o1 e$ t
- *
" A* ^# @! z( V - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
% E6 M8 r- Y; J - * kind, whether express or implied; without even the implied warranty
% Y+ w2 ?' R9 n& s8 P3 _% o - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the( R/ `8 ]4 H( k3 F3 J
- * GNU General Public License for more details.
) N2 }. O4 n7 \* T& ?& o& v - */1 y( `$ D4 `1 \5 d6 o9 G
% M) M* W, m2 Q. X; T4 X6 Q- #include <linux/module.h>/ s3 r& x2 s) \9 B% S, `# b
- #include <linux/init.h>1 ^" I! m5 Z+ S+ Q% n
- #include <linux/errno.h>+ P% L+ y" U0 o& y. \
- #include <linux/types.h>
( |8 U$ B, g3 y3 y# A& [ - #include <linux/interrupt.h>" ~0 x. C. A* X4 }! v
- #include <asm/io.h>1 T5 H* V9 `* }/ U& u
- #include <linux/moduleparam.h>( \2 z8 r3 i6 }$ ^! q6 i$ Q
- #include <linux/sysctl.h>6 N9 q6 |- T- _$ r3 K; M
- #include <linux/mm.h>
9 ~" a3 R/ i! r7 S( K - #include <linux/dma-mapping.h>1 E) P( J1 d/ b0 u7 N5 S% \/ @
7 z0 {9 F$ c0 ]0 v) n- #include <mach/memory.h>
" z7 l2 J/ M3 w1 |% r - #include <mach/hardware.h>4 [$ P6 L( E4 O O% ]
- #include <mach/irqs.h>4 ?5 {1 W) m- r
- #include <asm/hardware/edma.h>6 Y" f- W- A; x# J4 ]. U
- * [+ f% b9 W. Z
- #undef EDMA3_DEBUG
/ y7 b* Y2 w5 C" u( m - /*#define EDMA3_DEBUG*/
8 X5 B' C5 l3 w- _- ^9 T4 | - , M* h( c. X3 V6 d- z: ]+ d
- #ifdef EDMA3_DEBUG
3 O7 R) {3 ?0 B) ~ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)3 g( j7 s( ?- ?* \
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# o3 y: J6 r5 q0 d7 [ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" k/ V. m7 P, L: u7 t+ T: S5 }
- #else
( C5 J3 y7 X' L1 K) R3 y - #define DMA_PRINTK( x... )
# j. ~9 S2 G' L& \2 X! c2 h! |) m& q - #define DMA_FN_IN
" D$ F' X5 A) R: I - #define DMA_FN_OUT9 z4 w# C" w3 P% x8 j
- #endif4 W8 ?* O. e3 |- G1 O; ]* H* P, [4 _4 O6 G
2 E' j) z1 w8 n- @- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
# J A" `& w( A( N V1 d - #define STATIC_SHIFT 3
- y. h8 d6 E" f! ^ G - #define TCINTEN_SHIFT 20 |5 Y6 C+ o# z3 U
- #define ITCINTEN_SHIFT 21& \4 q! ]( }4 Y6 t8 V7 ?
- #define TCCHEN_SHIFT 22. Q. b9 n G9 X' O
- #define ITCCHEN_SHIFT 23
- \" q+ X7 H+ t6 p - 1 G+ o4 J/ x7 T T
- static volatile int irqraised1 = 0;
9 `! A5 x9 `0 x9 n3 u. k - static volatile int irqraised2 = 0;* Y. b8 D/ Z( _( i+ R5 x
- * b. g) U& s/ E' A, n' v4 {' r
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; T1 D! r( ]' a) O$ x - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 n9 H- w1 s6 G* {8 ]
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. E8 H' ?. P1 P$ o) D" M
$ L& D7 P4 I3 O: \& b% E w# {- dma_addr_t dmaphyssrc1 = 0;
: k9 h9 s5 I- X6 x - dma_addr_t dmaphyssrc2 = 0;( s7 q* v3 G B5 ^7 ]( M
- dma_addr_t dmaphysdest1 = 0;
8 Z+ [% i+ a4 S( Z, w' v- m+ E% G - dma_addr_t dmaphysdest2 = 0;* ?& m ^, c6 R7 ~) r
8 h- z) o. W( u# z- char *dmabufsrc1 = NULL;4 ^/ `( `, o6 s+ g; [) y5 I
- char *dmabufsrc2 = NULL;
5 c8 Q v3 \$ j7 ^ - char *dmabufdest1 = NULL;
2 Q, ]+ Q, ^. E3 ~, t7 g - char *dmabufdest2 = NULL;) g" N% K* ~& y2 R+ x% ^8 P9 a2 u
$ e/ `$ O$ q/ a) g2 g- static int acnt = 512;% u! K" t9 o0 H; L. R
- static int bcnt = 8;, [8 u* a7 {- `6 G
- static int ccnt = 8;
2 a1 D2 r2 {) M# Q! b9 p - : u" I5 I) T6 k" T* `" \: @
- module_param(acnt, int, S_IRUGO);
+ P# T) z7 T8 B - module_param(bcnt, int, S_IRUGO);* Z: F5 m* L8 \' ~# z: R) W
- module_param(ccnt, int, S_IRUGO);
复制代码
6 E0 C3 i- @" E" d8 A: t) X; Z! D" r7 M, [: y6 J' a( K
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
. Y1 h& |( n3 X8 d3 W# b: {6 Barm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ T6 c. I A- S% E# T# w- s- y4 H
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ `2 _, ~: a0 Q8 k0 G3 J; C( E; r
# n9 \: D+ X* E) Y- k
q9 g) j6 k. H1 Y8 Z6 i5 I |
|