|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 / P1 W* x ?! k7 [; n$ U; [
- [code]EDMA sample test application" Y/ G5 L4 Q7 \6 x1 f& b% I0 u% t4 b# @
- /*
0 W. V6 b# o2 R; r" k" b* h/ M - * edma_test.c
3 J/ } Y' `6 _: |! F7 x8 b% z - *) B8 N" h; s) G8 i
- * brief EDMA3 Test Application( D0 _' p7 D2 W3 ?4 m6 D/ J9 e
- *5 o6 I0 `! J9 r' Y' v$ d) R
- * This file contains EDMA3 Test code.0 D$ a# j! t5 e3 z; ~8 e7 o! n% \$ u
- * F. c: K+ w! i4 w' D) M! n
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
9 R- o6 Q& t0 y - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
- p! o0 N J. Q4 o1 \/ u8 l - * TO CHANGE.7 v" t2 J' R& K3 b$ R
- *
- ?. `" s1 ^& ]' ] - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" @( `# z7 f# T; ^1 c - *3 K& D) c6 F" ]+ ~1 a
- * This program is free software; you can redistribute it and/or
E: a- a5 U* d/ G - * modify it under the terms of the GNU General Public License as' Z$ U; g( a0 J
- * published by the Free Software Foundation version 2.
& H3 `) U# T0 A# [7 X' P1 L$ _4 ? - *6 t$ A6 z( y- I9 d9 |& t o8 N: {
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" R0 g: q: Z' }( C - * kind, whether express or implied; without even the implied warranty
4 U/ o2 H' W- c4 Y& D6 @ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 n# P4 Y, x( J+ B" {, a
- * GNU General Public License for more details.9 P* i" a3 F: Z/ V7 t4 t
- */
D6 M: T- b! j6 T% t - 5 Y" y7 Y) t4 v# W0 F x
- #include <linux/module.h>2 i+ {' l3 k- e
- #include <linux/init.h>+ m8 [- V* j! K ^% e9 Q
- #include <linux/errno.h>; [7 g" {; C3 }. O/ L7 m2 \
- #include <linux/types.h>
2 C5 R) J, `; C4 j - #include <linux/interrupt.h>+ A- O8 H5 w' W. I
- #include <asm/io.h>
& A. ^- z0 O$ ^4 | e% ^( V3 r3 P - #include <linux/moduleparam.h>2 Z1 y5 @! _, w) s' d' ]
- #include <linux/sysctl.h>8 g F$ p5 d m9 U% W' v, L
- #include <linux/mm.h>
( N# a* N# H& `; ?4 v: n - #include <linux/dma-mapping.h>% [1 F. r$ w2 p' @9 j
- 9 Y# l" I: Y$ d
- #include <mach/memory.h>$ m" B- |+ R6 ^. G
- #include <mach/hardware.h>
( `) Q1 u3 f3 S( `- A - #include <mach/irqs.h>7 a; B9 F/ O& F/ F4 }
- #include <asm/hardware/edma.h>0 b) s$ M2 l: X: G( d- l7 F1 \& J0 o
- ) B5 l! R' m, x4 r7 V) P
- #undef EDMA3_DEBUG
( y' f& t" e# H' _ B - /*#define EDMA3_DEBUG*/
* F2 a/ d, C5 V: W8 @. x
- O2 t+ n: b3 G8 \8 C" ^- #ifdef EDMA3_DEBUG3 t' \$ ^& j# v) R2 I( w2 W
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)0 }2 w/ C6 p6 J" o& ]
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# {- F Q/ Z7 e$ I, E: ^ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)5 A8 L1 F1 x4 b" \5 s* g. g$ W
- #else+ M4 k/ y" x1 M
- #define DMA_PRINTK( x... )% h. ]9 A H2 _1 ~( Y
- #define DMA_FN_IN; [8 c/ \- w% W9 m: ^0 J2 f8 K2 u
- #define DMA_FN_OUT
/ @! h, T$ n# d W - #endif
4 |) x. ~; _/ L0 c! J - 9 T* S0 j5 `" a( d$ j
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
K* n3 S, h) f3 c - #define STATIC_SHIFT 3' ?- m( f ]' @- H' ]9 K, A
- #define TCINTEN_SHIFT 20
3 F: x, Z H. L# ~0 m$ f0 F - #define ITCINTEN_SHIFT 21# D6 m# Z f! ~
- #define TCCHEN_SHIFT 22
2 e, a9 r/ ]! W4 k - #define ITCCHEN_SHIFT 233 `2 H" u/ V; |- H- o8 A; D1 r
- # O6 z* d- P0 l |5 Y
- static volatile int irqraised1 = 0;
3 J- I3 }9 A8 {3 Z2 R- p - static volatile int irqraised2 = 0;
" Q! S& H1 Q% p1 ]3 H3 c - ) S0 ]& G1 c: @
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) y, ~& e) G* f3 e/ r0 n
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 t8 y2 I7 \) b6 H7 J# A& {" F# g
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! h, A2 v/ X# t/ u - 7 @- m& A! b7 ~+ X" a& V
- dma_addr_t dmaphyssrc1 = 0;# t. e* v0 D; E) o) Y
- dma_addr_t dmaphyssrc2 = 0;
( b- [2 g( l& B# R. g4 k - dma_addr_t dmaphysdest1 = 0;
3 B' S: m% k: F4 T/ p& @0 s - dma_addr_t dmaphysdest2 = 0;! U$ G! J: s; Y
' p' V1 K. ]% z- char *dmabufsrc1 = NULL;9 z7 B4 k# }0 }( Y6 l
- char *dmabufsrc2 = NULL;
0 r( S5 b3 Z5 s( @1 R7 S - char *dmabufdest1 = NULL;
2 X) a% x0 r5 n# P) p6 i, x7 B - char *dmabufdest2 = NULL;' f/ K; {5 ~6 l' B8 ~2 o
- * |; M. R9 z4 P8 Q [6 v$ g5 b( b$ w
- static int acnt = 512;. \! E o1 e$ F- o" |! S
- static int bcnt = 8;2 d3 O; X; j4 e) D. F( K
- static int ccnt = 8; J% p* {6 a) s' g. i! M
- 4 @; @# Y. M5 X0 c$ { `
- module_param(acnt, int, S_IRUGO);
, o- Z" R4 M7 {$ M - module_param(bcnt, int, S_IRUGO);6 ^+ r8 t O! v3 U7 h" a
- module_param(ccnt, int, S_IRUGO);
复制代码
' t6 D6 m" C) j! y% F" p( z, s1 X$ `. E; h/ O
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% M2 G! K: E6 T2 l
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。: r+ O) u: T. N' p0 H2 [
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ J+ ]; ?4 l# F3 ~
' {/ G5 j6 }$ |1 e+ a
S8 ^. b# s$ a
|
|