|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 4 Z: B: i o! A8 W, j I: h
- [code]EDMA sample test application
]9 y& J1 o0 \0 {; t$ |; e3 {2 u - /*
" O3 ]# ]- i6 p' [" W - * edma_test.c
/ t8 o! ?8 M7 r - ** l- C+ Y1 M( A' W, N. p
- * brief EDMA3 Test Application, t' F3 o' I6 d( ]
- *+ B/ a9 \# F' Z$ R6 V; H: l
- * This file contains EDMA3 Test code.
( y1 [/ ]2 F2 F8 u6 {, Q - *
* I( {% k, F# e: }( d+ o# J - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
2 y+ w' _& d, A0 h2 `0 v! ` - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
" r1 A0 A" v+ h- l: |/ C - * TO CHANGE.
9 s, d7 l& n2 A" B - *& x( x- U4 t9 I, A3 T, Z
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/$ a: J2 s5 n; c0 C8 x6 ]
- *
2 F0 m ]; X- M* T7 D. M - * This program is free software; you can redistribute it and/or
) y0 I7 o% K+ r2 L - * modify it under the terms of the GNU General Public License as9 V9 ^1 O! t) Y6 M+ C
- * published by the Free Software Foundation version 2.
- w. _. K& g: {! R' M - *
! a5 u; g, T5 _$ R( f - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" t' t' P& R: J+ d! X* l - * kind, whether express or implied; without even the implied warranty
" w( D& W% Z+ z# f8 p$ _; Z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Z# v% j* r) Y; @5 T; Z' X* { - * GNU General Public License for more details.
* j4 O' A/ E2 A+ z& V) `2 I - */+ v) }7 v6 R5 i$ ~4 Y& k' Q
- % Y, L6 Y+ A, g
- #include <linux/module.h>
; t- j. H/ X" z3 _% Z - #include <linux/init.h>* U; o/ z. J1 L! F( z
- #include <linux/errno.h>
9 F( r' m5 Y9 O+ T - #include <linux/types.h>
' j; m, b! F( B1 G - #include <linux/interrupt.h>
! W" I3 c! x" L' l - #include <asm/io.h>8 F# v f2 a' a! \! K& [1 D( ]$ z! k9 c1 T
- #include <linux/moduleparam.h>
: x8 P& y: T4 E - #include <linux/sysctl.h>* ]6 J- W/ \% g% c6 C1 O) d t
- #include <linux/mm.h>
/ p( T1 h1 p! f$ D5 e6 m - #include <linux/dma-mapping.h>
5 {; A2 r- I3 b' [, O
' ?4 f! \4 q. z8 y; v7 G- #include <mach/memory.h>7 Q: z+ e' \: Q4 g; ?8 O; w
- #include <mach/hardware.h>1 C! |, D1 `3 J6 u3 J* ?" o& ?( [7 Q
- #include <mach/irqs.h>$ B/ `# q5 @5 e' A9 }% |" ?
- #include <asm/hardware/edma.h>
( i1 k' g+ e, m* @. F# [6 q - * Y4 d( s5 @8 I4 j) a4 E
- #undef EDMA3_DEBUG4 Z0 ~+ _0 A* v# z* V/ X* U
- /*#define EDMA3_DEBUG*/
7 W0 l% T! r$ z9 W - 5 u: `, g5 h; N) Y6 n* b) a( ?/ j
- #ifdef EDMA3_DEBUG4 C/ C% R4 a! S7 c6 d
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' `& X, ?/ @ f( }# @
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
' N- Y7 I7 d7 E1 P7 j - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)6 f. x0 T8 w, ~& @: i W
- #else" ~ B" b6 U- d: z
- #define DMA_PRINTK( x... )
) L; N: D7 f8 W, R% z8 s9 t6 b - #define DMA_FN_IN
8 C9 m; e5 C7 h* H - #define DMA_FN_OUT
, [7 G0 ^; Z, s$ k9 J- r2 @ - #endif
1 U* H7 L( J5 G4 i - 2 }# d- F4 `9 m. f+ t' ~
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
8 `* b% M/ h) J1 v - #define STATIC_SHIFT 34 @1 w+ p% C7 P5 Y- M/ `
- #define TCINTEN_SHIFT 20
- Y0 c/ x3 U0 w - #define ITCINTEN_SHIFT 21
v, s& G) P% @1 @. b, l - #define TCCHEN_SHIFT 22
. S/ T# |) G- m) P4 o3 E - #define ITCCHEN_SHIFT 23' Z3 V, ?" R: ~6 U% g6 M
- . x6 H. V1 z- t' p4 M) E9 y8 o2 X3 d1 ]
- static volatile int irqraised1 = 0;5 x1 c) l+ l5 n0 A
- static volatile int irqraised2 = 0;
8 I" c5 d0 P" W& q& G Q4 C - 7 @" T) W$ x% e* D- j! T) L
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); u- j1 M. ^6 T7 Y7 Z
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" g& n6 B6 C/ w& b - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 ~6 j. t: T3 {/ D" p6 e
- 9 A. }! J3 s0 a: t
- dma_addr_t dmaphyssrc1 = 0;+ l( o+ S2 u8 F' h
- dma_addr_t dmaphyssrc2 = 0;' G+ W7 ^- p8 o; T/ Y! e' n
- dma_addr_t dmaphysdest1 = 0; V9 r8 C1 t/ k
- dma_addr_t dmaphysdest2 = 0;/ G) K0 k p; f9 z) @0 K
; f6 R' Q4 I2 F/ z( |! Z- char *dmabufsrc1 = NULL;
# z" X7 [: j" | - char *dmabufsrc2 = NULL;
! W* J0 E$ b0 Q: F2 c/ R - char *dmabufdest1 = NULL;
0 S: t9 {* C& j - char *dmabufdest2 = NULL;
$ k* w; i$ w0 P3 p, M' L l - $ y: Y2 _4 L2 Z
- static int acnt = 512;
6 M! d) v( ]' T6 E" m& z, d. h - static int bcnt = 8;" y4 L# _1 F. R5 `* C
- static int ccnt = 8;$ {; W# I1 `/ c: ~2 d( o G7 I7 y
- * E5 J. d$ _6 [- t8 H6 h
- module_param(acnt, int, S_IRUGO);
! ^; u* s2 S/ |7 Y - module_param(bcnt, int, S_IRUGO);
6 D4 ~* O) t# a4 b% o - module_param(ccnt, int, S_IRUGO);
复制代码
9 s) `7 a T9 s7 V0 n1 H8 h6 s8 m7 L/ y( u" l5 J* G
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用' U& r& I! D7 q% N
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& s {3 s& x, k! E5 C8 p e% }9 h' F, `
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。: x1 Y8 U+ D& V+ x' r% P6 ^
0 R# K$ Y a8 r
& F/ E1 |9 D8 R# p
|
|