|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 9 Y+ M$ i5 O0 E2 f0 T
- [code]EDMA sample test application
' A$ T0 k; R# f) y% I6 r7 s; ]% ?/ i - /*
# f: m A( {1 {$ y4 ^8 J) Q# k' _# I0 Q - * edma_test.c
! b# h* M3 z; ]+ x9 X/ v$ V - *
5 i' `3 O& K5 ] - * brief EDMA3 Test Application
. r7 y, P* M5 ]9 j' Z$ x$ N; @, T - ** S1 d) p! c$ C5 C* A) i
- * This file contains EDMA3 Test code.
0 ]: o' C) _( k- u% h - *
$ [4 E2 |" m9 Q* o1 W - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE, z4 P8 E4 p; y8 o7 d y' P
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT$ q! G' m( L) W: l. o' |4 u
- * TO CHANGE.. e9 Z) V1 s& t$ v& L
- *
5 _4 z. O7 m% R& k1 [ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ Y, P- {, |+ Z$ P - *
1 v, l) T6 ]6 e - * This program is free software; you can redistribute it and/or4 J2 H$ Y* q0 B3 u) v& v. f+ a
- * modify it under the terms of the GNU General Public License as
/ Z5 U( n8 c/ n" O/ O' f9 T - * published by the Free Software Foundation version 2.5 j+ o: |( y+ y& v& s! \
- *. ~1 k5 X5 b" A3 A% J/ }
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 g* b& y+ J/ n
- * kind, whether express or implied; without even the implied warranty u3 [8 X! w3 D1 q: |% g" V S
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 r/ N, z; A' e8 C: ~% ^* h - * GNU General Public License for more details.2 K/ h+ i* l9 ~9 h5 z
- */7 c4 A( p$ P% W- S7 o2 H
" C4 Q W9 s# I8 d- #include <linux/module.h>
7 l2 c: K; }. a2 x% g% K, i) } - #include <linux/init.h>2 n0 F1 w3 ]2 g/ h/ h* V
- #include <linux/errno.h>; W3 u, F$ B2 p* q2 ]
- #include <linux/types.h>
8 a8 ]4 S( F; V. y0 I: L/ H - #include <linux/interrupt.h> a3 c, D! P% b' u& B1 ]
- #include <asm/io.h>8 R! Q a- l# Z3 e- g' Q
- #include <linux/moduleparam.h>
t7 R. |4 l2 C& i$ U - #include <linux/sysctl.h>2 x& n+ m0 ]3 ^
- #include <linux/mm.h>" J6 r/ }2 y, W/ `" X. `
- #include <linux/dma-mapping.h>4 }9 z7 F9 s7 v4 N' x! M' ]! {
6 [, k0 k: B9 N+ [0 I+ u- #include <mach/memory.h>7 e# \! W! h% p1 A/ [
- #include <mach/hardware.h>
/ @6 x! j- X. n - #include <mach/irqs.h>: i$ F# E. S) P& \) Q
- #include <asm/hardware/edma.h>
- \" C4 P" s/ G" C - ) Y( u; o% R5 w; _9 e
- #undef EDMA3_DEBUG
3 c; b7 s8 b! x7 M, w+ R: O - /*#define EDMA3_DEBUG*/
, |9 r! L }" s- Z
) h7 |8 u4 e% u9 s- #ifdef EDMA3_DEBUG) ?8 J" |; l) e- T) C% K0 Z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' D# S6 y# F/ R2 v6 I# P+ B
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
8 G+ b7 Q! o0 o - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)$ b" G7 B& ^( M, J( d% K/ B5 u. D
- #else
2 U4 B6 ]5 t/ R - #define DMA_PRINTK( x... )7 `( r ]# Q8 r7 A! U
- #define DMA_FN_IN
) e: S0 C6 ~( m9 ] - #define DMA_FN_OUT
& V9 w* D( j. d( S - #endif
# Q# o4 l' E# g- [1 U5 o c
2 G1 M: b( j9 x! M/ O6 ], {- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
u ^( B+ M/ ^& N; J; ] - #define STATIC_SHIFT 3- L- S: L- P4 m4 G. q0 u9 F0 p
- #define TCINTEN_SHIFT 20- {, [' n: @( d( r. n
- #define ITCINTEN_SHIFT 21% R7 _' N. d: ~5 v& j0 e
- #define TCCHEN_SHIFT 220 F! ?9 a, S$ E; z M5 e. K1 p
- #define ITCCHEN_SHIFT 23
% d* X* X0 c! m* J5 Q
" l' t* e( w' c6 Q3 V X+ o- static volatile int irqraised1 = 0;0 z* j& J( t9 ^0 S) v9 F% q
- static volatile int irqraised2 = 0;
) W9 h/ l8 d7 y- e - ; ?$ u5 M$ @# i+ h% E$ i" i2 R
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, C" L& _4 L" A V2 C
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' w2 p6 U \' R" G# h; F3 p; j8 F
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 y0 K/ }$ }7 M& {' z7 ~( u
! F0 w5 M- u8 ~7 ^5 ~* z- dma_addr_t dmaphyssrc1 = 0;
9 P2 Q! f" o/ X+ [ - dma_addr_t dmaphyssrc2 = 0;& Q$ W" F4 T, ^' ?
- dma_addr_t dmaphysdest1 = 0;
6 A& e8 \5 s' r - dma_addr_t dmaphysdest2 = 0;
5 g, V5 {$ M( @9 v8 R
* {9 D1 O4 O+ v9 m; [& `$ A- char *dmabufsrc1 = NULL;
% D* H- v: R$ S Y9 S/ ]7 n# {. t, y - char *dmabufsrc2 = NULL;
8 w6 c0 n1 S4 x2 \. n* Z2 n; s - char *dmabufdest1 = NULL;$ \/ w r; z: s0 }4 N; K) D, b' o8 K& H
- char *dmabufdest2 = NULL;
3 P; K) s/ |( a9 v
' c2 {0 u- E, U3 r; ` p0 d) _4 x% y/ p- static int acnt = 512;
( R5 J; f! `3 V3 ?# O - static int bcnt = 8;' ~9 r! m/ V, l/ W7 Z9 T
- static int ccnt = 8;
3 M5 @9 P% l5 p2 B( P% t - + [4 D. b3 ]2 q- q' i7 ]
- module_param(acnt, int, S_IRUGO);: j$ i" R" y! K) w
- module_param(bcnt, int, S_IRUGO);7 ~$ ^+ X5 A. F/ m2 u8 m$ q
- module_param(ccnt, int, S_IRUGO);
复制代码
$ F* M+ S, u) E; e1 v
) a* n( h0 D7 n( j$ B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 `! E2 l W* T" X% t# _# _
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。7 ]% I* L1 e3 b0 p7 `; P
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
# Y" {8 N* ?# H! Z/ u B0 ^; a
9 L: E& G/ j# h! O/ N+ R9 t" A; t! D8 E( l; \
|
|