|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
3 V( ~6 F4 ]/ O$ b6 i- [code]EDMA sample test application
8 u% j& o D0 h& F- P5 r$ P) [7 O - /*
2 u/ m3 G, z6 e1 d - * edma_test.c
2 B/ S o5 M# ~. U - *) ?" I5 @ V0 Q a% c7 F0 q$ x+ [
- * brief EDMA3 Test Application0 i: Y" ^1 W7 n7 X/ D
- */ r2 _; [& s6 T, E' N! m" c1 t
- * This file contains EDMA3 Test code.
' Q* _+ ]9 F$ ]# e& X - *
% W% V4 B- Z2 }$ K( t - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE& B4 b8 H4 v' E, y6 H1 E* ^# q. x
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
4 k) J4 |. L: {* {' F - * TO CHANGE.5 R8 Z5 k9 |* n+ l
- *$ K2 f, T& k5 d. u* q
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ l4 r6 ~! C+ X: C3 P; \ P! U - *) d5 E4 I7 n% h$ H! Z
- * This program is free software; you can redistribute it and/or
+ Y! f3 K4 X6 B: h8 ` - * modify it under the terms of the GNU General Public License as
4 ]( @ I6 c: z$ F - * published by the Free Software Foundation version 2.
/ d Y7 H% r8 g - *, S2 s! Y r" }
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any _ w) b, s$ J% |7 u$ b+ g M, m
- * kind, whether express or implied; without even the implied warranty
' U# T/ ?! _/ ^ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. k$ B' t: T: I# p Z; U
- * GNU General Public License for more details.
) L; x7 e) E4 P2 _+ ^ - */
' J) ?% l# r! W% c% W/ R* I& W" {
. Z) o; ]" X0 o0 @4 ]' Z5 V- #include <linux/module.h>
C8 b- J6 w9 E' f* m% J; O& D; b3 o - #include <linux/init.h>( D( V" _ ]. x- R) w
- #include <linux/errno.h>8 y6 P* ]2 Y& c W w5 \6 ^
- #include <linux/types.h>' L; M! J3 \" ~$ z X1 J/ P
- #include <linux/interrupt.h>
, {8 T/ A u: @5 k/ `8 ~, B - #include <asm/io.h>
; |& V* U. Q* Z+ }3 X - #include <linux/moduleparam.h>
$ f% _8 o! W8 ^+ I) F; M, f - #include <linux/sysctl.h>7 _* F) n# T4 N6 x
- #include <linux/mm.h>
& n8 Y$ ?/ g, u& m: q$ b - #include <linux/dma-mapping.h>* z& m% X. k6 F; u% A7 j( O
- $ C0 J- `& v( B" K
- #include <mach/memory.h>
8 p$ F& Q' x& k% _ - #include <mach/hardware.h>
* Z6 v e% R# e8 @4 K - #include <mach/irqs.h>
& t9 w# ?, e5 [' K5 u - #include <asm/hardware/edma.h>
, Q/ h! S7 L* v$ `1 w Q2 D& d2 J- Z
( V3 P; G" I* j" p- #undef EDMA3_DEBUG
1 C& ^ I1 k# j, `! i - /*#define EDMA3_DEBUG*/8 N, n& F% `: L9 O
- * b7 d/ m9 r5 z: v& u$ M' Z
- #ifdef EDMA3_DEBUG @! _8 k2 u2 a0 c9 E5 f
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) h2 Z/ P4 I7 ^7 A - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& w" m v5 y8 D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
- S; @+ j u k, b v; h( a) T - #else$ H/ B+ N; u9 Z% @( F- b5 l* F; |6 ^
- #define DMA_PRINTK( x... )
( ?, J1 Q* Y: R) D' t) a+ X - #define DMA_FN_IN" {0 x0 j ~$ ?+ Y- o
- #define DMA_FN_OUT
" A: Q$ Q2 P) o& c3 {* }) t: t4 X - #endif
, ?& v Y' u4 W( [& ]8 U* a2 ]
+ b# ]1 _, e. ]/ ?- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- b- [( C, ^% T8 G9 k' D
- #define STATIC_SHIFT 3
+ M" ?+ n i m! R - #define TCINTEN_SHIFT 20
# @* S9 F9 m* R+ X - #define ITCINTEN_SHIFT 21
7 Z4 ^2 i1 C j# x - #define TCCHEN_SHIFT 225 k. Q: s% n0 ?/ D7 l
- #define ITCCHEN_SHIFT 23/ G/ A4 f* J- T5 L0 t
- ~8 v. h5 v8 k! L( a- D7 ]6 ]# I2 H- g
- static volatile int irqraised1 = 0;
1 R: Z. D1 f" U( a1 H9 I - static volatile int irqraised2 = 0;& O# J& F7 Y V3 Z' ?. ]. a
- , z, d/ n7 q3 x) t( x" }$ J$ B
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 t5 M' n6 S8 O' g# N+ h, r - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) X: `# p. U' ^1 g6 L# L
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; I" e% N/ @" l% c) Y
- 7 V. O+ D/ y! ?3 I
- dma_addr_t dmaphyssrc1 = 0; g6 s8 O+ O8 J( V- l" ^9 d' r/ j" b
- dma_addr_t dmaphyssrc2 = 0;
6 m {/ n+ ?9 L, F* [9 b8 ^ - dma_addr_t dmaphysdest1 = 0;
2 H9 B) ~. O$ r8 A - dma_addr_t dmaphysdest2 = 0;
2 J: r. i0 s+ ]7 \( } - ) c# ]( A1 Y% }% g- m, F/ I& Z: q
- char *dmabufsrc1 = NULL;
& i4 i8 r5 `2 R, w - char *dmabufsrc2 = NULL;
5 [+ d8 Y; x4 n- O$ L+ k8 } - char *dmabufdest1 = NULL;7 A' Y' i5 I/ m8 ]# z4 o
- char *dmabufdest2 = NULL;: t+ e* B1 F8 S
* k) P3 ?& b: i1 F3 g- static int acnt = 512;
) g9 `! ^# }, |! L! X3 A6 H; l: u - static int bcnt = 8;0 l! r8 Z9 ^# ^/ l/ Z
- static int ccnt = 8;
) ]/ ]4 A, r% U2 O- h- ^5 p9 x. q1 [* a - 5 l; J( l" Z) Y' o5 u8 @2 H6 P
- module_param(acnt, int, S_IRUGO);& K7 g9 z( U. b3 n$ C
- module_param(bcnt, int, S_IRUGO);
8 w9 n5 e) d' c5 K+ \$ {& J - module_param(ccnt, int, S_IRUGO);
复制代码 ; w' ~3 m. [& x; t' ^
, {# t/ B, `; C/ G0 D
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% C: `5 ~1 E" q! Z! 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
/ O' b7 v+ e$ Y* D 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; X$ J: [ ~$ }) q5 k& @; i9 w
: p! t* x5 ^8 y" u& ~
5 g' T. @1 H. H; z" L1 G4 F |
|