|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
( [/ D) i1 k) p# q- [code]EDMA sample test application: l5 O, n; Y0 `' M
- /*2 W. Q" {0 i. w3 f* Z: u( i
- * edma_test.c: b& P9 ]) {! H/ C
- *
( ?% {" |. d6 a3 i - * brief EDMA3 Test Application
6 o+ l9 Q2 _% E, y' q4 @# k - *
: t$ Q+ H% f& e" m( I - * This file contains EDMA3 Test code.
+ m6 h" n1 Q# j/ ` - * U( \ s: l6 E' d0 _
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
1 A* g6 X6 K6 ?& S0 B# f$ H( j - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
/ u! K. J: M( }. H4 ] - * TO CHANGE.
8 Q# ]/ @" @$ G6 n9 W& R( D - *! ~" Q" z! u5 |! d' K# ~7 b# R( F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
# a( W' F+ z" R. e, x - *- {& u/ B N8 O8 l
- * This program is free software; you can redistribute it and/or( m# U! g/ m, Q
- * modify it under the terms of the GNU General Public License as
+ z- I* \2 Y3 l9 c) U - * published by the Free Software Foundation version 2.
- }! e& ]% g; C - *
5 b# ~; `% I4 U4 Z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 G( n/ Y/ m/ u" o. } - * kind, whether express or implied; without even the implied warranty
+ x [ S! j6 g; ^& j3 i4 ^, L - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 V% K+ V5 U8 \4 m0 C - * GNU General Public License for more details.
1 n' k" B2 W- }0 U/ e4 ~2 g1 Q; N - */
# m+ A! G4 R1 i6 A v, ^( b - % k0 C5 L. l3 B
- #include <linux/module.h> l* J& U( y1 H! `$ ~3 z2 J, c
- #include <linux/init.h>
" k4 N7 b9 N# a# r6 y. K. I! x - #include <linux/errno.h>
q z* M" x7 c# I6 d; D - #include <linux/types.h>4 z" q7 N0 X4 \! ~8 |6 E" b' R
- #include <linux/interrupt.h>
9 F9 Q' u6 R) w9 A) S' Y$ k - #include <asm/io.h>
, \- _( j0 N/ Z% T - #include <linux/moduleparam.h>
3 P- I0 x) ^# H* ?- S+ N* f - #include <linux/sysctl.h>
# d ?0 ]) W: d5 X0 F" a1 Y - #include <linux/mm.h>: i% i/ Y1 B3 K
- #include <linux/dma-mapping.h>
8 d; {' s7 a F: W, |, [+ J$ ]8 K - . e' p: H' u* d2 R- o
- #include <mach/memory.h>
6 J( Q& b. E6 d5 R2 t0 g6 ] - #include <mach/hardware.h>
! {0 D( S7 ~( O1 x* o! _ - #include <mach/irqs.h>2 p1 ]( J: T3 |/ P; ]
- #include <asm/hardware/edma.h>
- K8 x" a! f! }) a$ _7 n
" X: a9 T( @+ h/ L& n) _' t) Z* p- #undef EDMA3_DEBUG) r; p' ^5 u6 \
- /*#define EDMA3_DEBUG*/2 C o f3 u, ]1 a; G5 B2 B
( L+ u c* [7 v: ]# B- #ifdef EDMA3_DEBUG! P9 p7 n8 p9 E( b; P' n
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)+ W4 k7 V8 `/ \* Y( ]8 n7 |* v+ E
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)! K# w, V ? u9 z
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
" \# V- K/ D% c( W/ z3 a - #else
/ @- v# ]) z6 c6 r$ ` - #define DMA_PRINTK( x... )
. p& l/ M) ~6 |% N$ Z: ]; N8 q - #define DMA_FN_IN ^, ?' A; V* L, z/ x* b* V9 j
- #define DMA_FN_OUT
7 C" o4 L$ s7 t3 b5 P - #endif
: _* A6 x7 x0 u/ z. }. H - 3 Z0 Z v1 b- _
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
$ i3 f6 ? l/ y6 e* R - #define STATIC_SHIFT 3: \/ n6 s: x0 A# `2 O1 r
- #define TCINTEN_SHIFT 20
% t' s5 m/ M" ~: @, y - #define ITCINTEN_SHIFT 21+ [' `9 F+ X3 q6 i1 U" G
- #define TCCHEN_SHIFT 22
) a$ c' |2 B( l6 C2 L. \ - #define ITCCHEN_SHIFT 23
2 [: h b; r! k5 [" X6 z+ S - ^# U; j+ {: T/ D6 j
- static volatile int irqraised1 = 0;% J, X; o/ p. [$ ?0 _" M8 b
- static volatile int irqraised2 = 0;$ S' {6 k% Z- Q b8 G) R
) U8 h+ i3 M$ V; Z* q8 A- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 b. h+ v6 Q0 }( W
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& P& _4 e# ]$ e9 J. q0 b - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% I8 U) V# d( D3 V, Z
+ o- J0 i3 V3 p+ y# A- dma_addr_t dmaphyssrc1 = 0;
) k0 Y* |6 Y- L: `* w% ~; U Q- _ - dma_addr_t dmaphyssrc2 = 0;
$ D- i1 i9 P7 U, g! o1 p - dma_addr_t dmaphysdest1 = 0;# R0 v# O" J! O4 A2 y8 W
- dma_addr_t dmaphysdest2 = 0;
4 R7 t) |9 G) `! h u: R - / u! s" g2 G& A, j& e( @0 `+ n
- char *dmabufsrc1 = NULL;) o, M9 k8 t6 p, a$ o
- char *dmabufsrc2 = NULL;+ @; h$ C L/ e3 i
- char *dmabufdest1 = NULL;% j3 V/ f& J2 b( U P6 I
- char *dmabufdest2 = NULL;
N- h. G$ C# u5 I4 S% w - & G" Q1 o, J7 g9 i2 T
- static int acnt = 512;9 p( O7 T: \" a* p5 |' T, n4 ?
- static int bcnt = 8;& ^6 m9 W! V* }: m t* w: F
- static int ccnt = 8;2 X% r4 N# A+ X- y
- ! l( g# w6 D+ Q- @ Y& h
- module_param(acnt, int, S_IRUGO);& x! {% b& }5 k8 o' a7 f
- module_param(bcnt, int, S_IRUGO);
. @$ V! s1 |! W2 z4 C% k - module_param(ccnt, int, S_IRUGO);
复制代码 - c: @( |6 j' E, ?
7 T1 Y7 j+ H2 d1 S( U* F- x
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
* ^# ^; {$ F8 jarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- ?& c2 a: q! }# b w' j! _% f' o 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 i- @ s4 l E( h
! M2 F) R( \% j1 n4 j2 q7 a9 F
/ }, p4 B3 j2 {: R |
|