|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ a: Y9 r5 ?# b! A s
- [code]EDMA sample test application
& N* C) d2 n8 I) z$ N2 v - /*
9 F+ ~, q$ U% M7 {1 w- K7 p - * edma_test.c
- v; l4 w! P1 V( W& J - *9 L6 h) Y# i5 j* d1 {) m
- * brief EDMA3 Test Application1 Z1 e$ S9 }. M. }/ I* t" d& W7 m
- * d; `! }8 g4 m6 P
- * This file contains EDMA3 Test code." ]* x* `( z& v, i* n0 R
- *
8 ]" e) W6 m8 _, x, n& t8 y2 { - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( L% V) P. Q& }
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT4 q, E2 l$ z/ A( o# h
- * TO CHANGE.' r" {8 E" u% V& j' S
- *3 \; \* _% S9 A$ v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
8 L' k; X2 P) R - *5 e/ V( d B: g6 N0 G/ h5 z* {
- * This program is free software; you can redistribute it and/or
8 L4 p& f, G$ ^7 C, z. R - * modify it under the terms of the GNU General Public License as
4 f% t7 p# {% @) ?7 P" L. J; ] - * published by the Free Software Foundation version 2.& K: l- _6 y! f2 X2 ~$ C
- *4 `! z; M+ I3 W. q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 d( X( u3 F( {/ L4 y2 l1 d. S - * kind, whether express or implied; without even the implied warranty5 A; ]2 Y3 D3 k* ]6 X) y' N' Y; n
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ [6 J# g; x! _& N - * GNU General Public License for more details.1 `5 o. l" {" t: x4 T9 f
- */8 w7 b @" e$ Y, A& I1 ]1 ]8 E, f
# b. S9 L+ o7 v/ [4 u0 I- #include <linux/module.h>' Y' n6 q V* X0 P8 ]1 Z0 L
- #include <linux/init.h> m1 I$ e' V, [
- #include <linux/errno.h>: o( Z' {/ t0 t: A; p: A
- #include <linux/types.h>
2 Q, x7 X1 e% o4 w0 @ - #include <linux/interrupt.h>
- K# X" e0 ^+ e2 K - #include <asm/io.h>" D0 W$ T6 C% H1 j% G0 V8 P
- #include <linux/moduleparam.h>2 i' q5 p# C' `
- #include <linux/sysctl.h> C% x4 d; _7 z& c$ l+ N/ G
- #include <linux/mm.h>
$ H6 l9 E4 E0 u/ q' d+ Q8 `5 A - #include <linux/dma-mapping.h>
' |1 [0 d% H+ c* P/ B8 |4 ]% P - . a1 H5 W2 l& F4 I; U
- #include <mach/memory.h>, Y7 V4 i0 m2 @' _! r3 A1 \
- #include <mach/hardware.h>
) A$ ]: R1 e" u; a/ g; N1 [# k$ I' a - #include <mach/irqs.h>8 B2 n' O! E: n ~5 ?
- #include <asm/hardware/edma.h>
+ d+ G. F$ B# G3 o) J q4 u9 {# V - 4 t+ ]$ h5 o. v, V/ {
- #undef EDMA3_DEBUG
! |8 [3 Q9 e, o* K2 v$ }) _ t9 U( u - /*#define EDMA3_DEBUG*/- g, R) c6 h$ } V& E+ m Y; u3 ~0 D
- 9 a* G" x F& H8 a: v2 w
- #ifdef EDMA3_DEBUG% e0 f h; S/ e
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' p T: n/ y2 `" q/ z( {; ^& k
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ d( k: s2 w; x: N0 Z: Z - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) E: \+ ]: w) G% @) f
- #else
1 ~1 a' ^5 L3 E& k; v2 u: p - #define DMA_PRINTK( x... )( e9 ]7 ~2 t( b1 _/ ~$ c* M
- #define DMA_FN_IN' U/ ]6 w# n' Y+ C& e# [' V
- #define DMA_FN_OUT, q% y" c8 u' d- c
- #endif) C$ ^" c& X1 F
+ Y6 ^" P$ d# I; c9 {3 \- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 M' r, z |% z. j - #define STATIC_SHIFT 3" a3 `: s# N8 R( _( G9 m1 m
- #define TCINTEN_SHIFT 20
- J, |9 v8 ?( t% C3 }. @ - #define ITCINTEN_SHIFT 211 l% z4 n$ S, w: Z7 G
- #define TCCHEN_SHIFT 22
2 m# M/ ?7 s( u1 i! p3 O - #define ITCCHEN_SHIFT 23
# N- C# u* T5 Z$ `( c' K - . R2 [4 A' R4 D& l. e
- static volatile int irqraised1 = 0;
3 G" u' o6 ~0 N8 L6 ` - static volatile int irqraised2 = 0; i3 F' r7 Q4 U% S0 Z9 e% P) m8 M
- 5 {1 P% r. O& c( @
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 g# i7 e2 `; z1 [# J, h
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; x, C; I, k4 h, l( E - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);+ _; v3 X4 C& F5 u
- 5 J8 i& s2 B- @/ L, T
- dma_addr_t dmaphyssrc1 = 0;
# e! M5 @% _) T1 |, e - dma_addr_t dmaphyssrc2 = 0;
2 s3 p. q5 h8 |. m - dma_addr_t dmaphysdest1 = 0;
+ O# S" @* n4 [$ w/ A) s - dma_addr_t dmaphysdest2 = 0;
9 }* P8 d: ~+ }" m, U: Y" Y
5 A A9 l/ m# m# u+ H5 O+ ~- char *dmabufsrc1 = NULL;
9 a+ F, `0 J ^9 L o - char *dmabufsrc2 = NULL;+ O# |4 w0 y8 j' l, v8 f% m( [
- char *dmabufdest1 = NULL;4 U; s. \5 m3 O* \& L
- char *dmabufdest2 = NULL;8 N0 M* v5 r* W
' j7 j5 d4 Q K9 c7 \- static int acnt = 512;/ ?' u4 w1 s# |5 |. o
- static int bcnt = 8; t( S# b4 V& s
- static int ccnt = 8;
% [( E0 Y- g$ r, S9 k6 [
3 i0 f7 E1 X* ^" x; V+ u4 f) J' F- module_param(acnt, int, S_IRUGO); z7 j8 |3 E4 B
- module_param(bcnt, int, S_IRUGO);
1 T" r2 a' S# p- l- c- c - module_param(ccnt, int, S_IRUGO);
复制代码
; J# m& `) U7 L' f+ t' |5 i- j
& R t; C5 Y- @2 x+ z 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
8 H2 u) ] Y, T( Q" b+ C6 `" Iarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( h% k) T( P! j# f- I; d' @9 P 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
7 X ^4 @* o1 }) ?5 W& \; p
9 `/ q p* {5 G$ \& N, p$ s- _- N& U8 M
|
|