|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ k/ c: u, o" P8 v
- [code]EDMA sample test application o7 |+ H u# R5 ~. u7 G: `
- /*
) l! @; G* U# F0 T% r - * edma_test.c, h, N: \4 m7 {" V% m) q; j
- *
; \: x0 _/ G( a: }" c - * brief EDMA3 Test Application
; k( M1 k$ d: |) \ - *2 Q/ t* C7 C4 R& W/ c+ k3 k
- * This file contains EDMA3 Test code.
7 I2 ]# X; x9 l- f* X6 s - *
1 x0 y" r/ Y( P' j) E - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
2 I% y8 R! U/ e/ m9 z& c - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT$ g. k+ z! ^* @0 i
- * TO CHANGE.+ O, {0 q# v7 f+ ] _
- *" C/ U. }8 n; x1 W/ W& R; `
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 k+ ]" e3 J8 ~1 r, [: P5 S: @ - *) p+ f1 D; T+ N a' J4 y
- * This program is free software; you can redistribute it and/or
4 C: T `* S/ c* ~6 Z7 {' Z l" g% u - * modify it under the terms of the GNU General Public License as
2 A4 N4 I7 G$ k3 P - * published by the Free Software Foundation version 2.( |; i. b# B1 z. s
- *" R7 b% m T, O# F0 t2 h
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 D6 C* R' m o! @! v - * kind, whether express or implied; without even the implied warranty+ A4 l) T/ {& m
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ O' W6 p y' h
- * GNU General Public License for more details.6 a6 N. b+ z7 n4 f- j! l
- */
: I% q; Q) f/ \( G) I
4 s1 X- h3 p+ |1 a. D: u1 x9 N4 A/ m- #include <linux/module.h>: W0 O* ?* g0 J( r1 r
- #include <linux/init.h>
3 q4 b: i* `& t/ b7 n \ - #include <linux/errno.h>' S8 f! i& h8 x- ]) o. u
- #include <linux/types.h>
+ B0 ]0 j7 R: D3 s: e8 z - #include <linux/interrupt.h>
# o! H/ p9 b8 T# U - #include <asm/io.h>; S* A* J! _* {$ L) h0 J
- #include <linux/moduleparam.h>
( j: N; v5 e0 y, {# K8 c/ o# ]9 a - #include <linux/sysctl.h>1 r; x7 f$ f* }- L
- #include <linux/mm.h>
5 j) b4 Y h5 @3 h5 a - #include <linux/dma-mapping.h>
6 o* D. W5 G, q1 K" M - - z' r6 U% r) A" ?, A0 D' }' P
- #include <mach/memory.h>/ ?& U, I) h t$ I7 S8 y
- #include <mach/hardware.h>
' R9 t$ b* W9 E" M - #include <mach/irqs.h>
2 c% u! V" V* I! x - #include <asm/hardware/edma.h>, L' B- C/ n0 N2 F4 Y9 l
, I4 V% p$ ^/ ~- w- #undef EDMA3_DEBUG
, V1 H# m, y/ I4 \9 g2 K+ H - /*#define EDMA3_DEBUG*/6 w6 ^$ w8 o. ]# q2 E
- ) E3 v/ W1 k% t
- #ifdef EDMA3_DEBUG( I- v4 K; P2 x3 a* p% M
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
p; W. k9 w4 D - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__) p& F5 m- b, D+ g. Z
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
; @; G0 {3 K) V6 M+ H1 C! } - #else
/ L. S# `7 b% M, o; S - #define DMA_PRINTK( x... ): ]' Y" {( h+ M2 P/ [
- #define DMA_FN_IN
! ]3 K" W; J* }) \' ?6 K - #define DMA_FN_OUT+ u. v2 M+ F) H, g" |* J
- #endif' l9 k! U; r8 W" b) Z7 f. x6 h p' M, L
- ! Y) i V8 r8 g- y Y- z1 O2 L6 P
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 E* v7 K+ ?; _% B+ g2 c
- #define STATIC_SHIFT 3/ ?+ b1 [/ @6 D0 b4 a" B3 i7 r
- #define TCINTEN_SHIFT 207 ^/ S: F( Q) h. k# e- t
- #define ITCINTEN_SHIFT 21, c9 W5 }' i. G8 i' t! a3 L
- #define TCCHEN_SHIFT 22
/ a2 d$ K8 T) S - #define ITCCHEN_SHIFT 23* ^8 g9 L4 B% l1 E( P: F
- _) H% d! T% b0 g) a2 x- static volatile int irqraised1 = 0;
8 o' |; U% ?4 K& h8 A - static volatile int irqraised2 = 0;
: k3 }& U1 O' @+ p
& C+ q$ n6 |) z d x% z- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 E+ ]& x% P5 A+ K9 S- A- E: z
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% L) G' Q. K) B f/ r/ [
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( b6 ^6 u! Y4 ^* n+ S* R$ H9 ?" c2 \
- 2 U; s5 L3 R" o
- dma_addr_t dmaphyssrc1 = 0;% D) j* t, I; O B" p" p9 g5 S
- dma_addr_t dmaphyssrc2 = 0;7 m% j& I3 s/ X
- dma_addr_t dmaphysdest1 = 0;+ `. l2 Q# ~( A, X6 r0 T
- dma_addr_t dmaphysdest2 = 0;
+ f }4 d. p4 Y9 q5 h% M- f - `3 _3 e$ Z9 N5 }/ ~. b$ C) R. \
- char *dmabufsrc1 = NULL;7 R9 B* H; c# S
- char *dmabufsrc2 = NULL;& I9 a2 y# K& d+ u6 S! n
- char *dmabufdest1 = NULL;
- Y5 V. o& z& t/ k2 W' }' U - char *dmabufdest2 = NULL;
8 Q: [0 O/ ^+ B# n - 2 \# d# i( k! [; J
- static int acnt = 512;3 h: C# {: N4 D9 d2 f; L
- static int bcnt = 8;
- \8 a& Y' q- q+ T" O0 W- l - static int ccnt = 8;3 r: G. U$ I- P4 @; v+ r
- + d+ i0 K9 w: B5 ?0 F4 r, x
- module_param(acnt, int, S_IRUGO);5 l0 v) Y* m3 Y% D% \. t8 e
- module_param(bcnt, int, S_IRUGO);
7 ]" ~8 o- U" N9 C1 c - module_param(ccnt, int, S_IRUGO);
复制代码
$ Z( X ?. t0 {6 f' @. J8 |; L0 J4 r( ^0 x
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
) T: f/ C( ]0 E$ V; qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 G3 i; C; x) \+ ?$ u# g 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。- b F: j( d7 p: G: ^
s# X# k7 r# ^5 G$ c4 ~ D6 m% \
9 o' \/ D2 v4 ?- c% C' [2 L
|
|