|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ; P5 R6 f) H5 S9 G: R8 Y
- [code]EDMA sample test application
1 G5 W4 q) o- J6 \ - /*
. N4 m2 S' \5 |2 [2 _" K1 P - * edma_test.c5 ?- s) c( J/ p) }1 Z; d2 v) g# _
- *6 h# c6 j4 P& E4 u, z- l" A
- * brief EDMA3 Test Application8 T6 Z5 Y% u- J3 v. N& \
- *
1 n" h) e2 b2 {) j- Z0 K" [" k - * This file contains EDMA3 Test code. K# L0 L! T3 C' v
- *( ~1 b9 t6 T2 p& i2 v7 I
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 Y, H$ N6 h% Y' s; Q' @# D
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% z$ N3 l5 @2 s! B: p; x! d - * TO CHANGE.2 V" ]3 M- s8 t8 g0 Z
- *
0 b* @1 Y4 _- }3 g$ |5 d - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
) S! x9 y* b- A, J9 l+ I - *
/ Q; E s: n5 j# X/ L - * This program is free software; you can redistribute it and/or
, u; ]1 U1 ~9 B: [" ]- E. F - * modify it under the terms of the GNU General Public License as
$ o4 [$ C8 M- x0 T N - * published by the Free Software Foundation version 2.* W( d% {) s h
- *1 B* K6 a% { N# t
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' o# H5 u7 o$ ? - * kind, whether express or implied; without even the implied warranty( B5 m l+ k% z; L7 R/ ?
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\+ i! Y! h5 n3 t# t) Q - * GNU General Public License for more details./ `7 x' S/ a [
- */
. x0 R) l% ^6 D6 S: q, O* f - 3 v# n, ^" T" k2 d
- #include <linux/module.h>; g" c* t4 B* ^# ^ o4 G
- #include <linux/init.h>$ [3 S' G% p. C) T& S$ m3 x
- #include <linux/errno.h>( A8 B! k4 q! {$ N+ G2 G
- #include <linux/types.h>, x+ y8 R9 U+ D$ R7 |1 P* H* V- a
- #include <linux/interrupt.h>4 [& B* {6 t7 {
- #include <asm/io.h>& o- Q5 h2 I, n8 k! c& e S
- #include <linux/moduleparam.h>( F7 j6 j2 X7 O% [+ B8 ]8 a: Y( {
- #include <linux/sysctl.h>) m+ o N) F% I. k* E! ^0 W
- #include <linux/mm.h>
6 N' i' R1 ]9 `: B; C - #include <linux/dma-mapping.h>
. A: z9 l9 r' K, l+ \- v( _" a
- R5 L; W: }" D6 Y" t+ `- i% Q! u- #include <mach/memory.h>
% S$ h7 h+ C9 _. v8 F- ~: V, f: M6 H: t" _ - #include <mach/hardware.h>
0 S) w, g1 e, ] - #include <mach/irqs.h>- k# ?4 C$ P3 X) J
- #include <asm/hardware/edma.h>/ U! {: d) o4 y$ _: r5 M5 ^
( a* W `( i% e; r& i3 P/ E- #undef EDMA3_DEBUG
# S7 p" c( R0 e$ ?: |; V - /*#define EDMA3_DEBUG*/
, Z) v; S6 \* N% I+ n# T8 W
1 u2 v! x3 p1 \% m' R" K: j2 \( o- #ifdef EDMA3_DEBUG6 d5 e3 w. ]! s
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
$ t- d2 L# S, w - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
! k2 C9 c; S4 R1 p9 o- _ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# O; e, z! N. ~( ^% ? - #else
: d& J9 ~3 c4 M7 r" J) o+ h - #define DMA_PRINTK( x... )
2 W0 S G% I5 ^, Q/ | j! M4 r2 a - #define DMA_FN_IN9 u0 f' B( Y: R
- #define DMA_FN_OUT
" I, o& u& O8 g% c8 i - #endif6 s, A* _& Z. w: b2 P
- $ A$ @8 A$ s% R( D9 m5 E2 l
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) E/ w3 l6 Z% s8 [ - #define STATIC_SHIFT 3* J8 Y8 k' k3 f( {' k6 D
- #define TCINTEN_SHIFT 20
; _% y3 k0 B* b) l2 `0 [' Z" [ - #define ITCINTEN_SHIFT 21
0 D4 m0 c* Q. l4 ~/ L4 D. ? - #define TCCHEN_SHIFT 22
5 y# _1 |: c2 g4 P. e - #define ITCCHEN_SHIFT 23& W. j T9 i+ a; I
- 3 f+ W2 r6 z# Z3 W9 t* y
- static volatile int irqraised1 = 0;$ U7 X7 Z, O, A1 y% z/ C
- static volatile int irqraised2 = 0;% r8 e9 t, s8 w
- 5 {6 c W, \0 m0 e
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; v A5 C/ W f5 a$ q$ N
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( v% |. \8 o5 ^4 O, A* B) C
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 z$ I5 L% D2 H; f - ) v4 U2 B h- n+ v# p. B
- dma_addr_t dmaphyssrc1 = 0;6 }# x" M) G! J- m0 _ q6 \ P
- dma_addr_t dmaphyssrc2 = 0;
$ T% v0 ]' v1 p - dma_addr_t dmaphysdest1 = 0;8 U* G- k! Y( i* R% {9 \: \* B
- dma_addr_t dmaphysdest2 = 0;
( l8 t* b# R# |, u' x, J9 k
. h& E; \0 I9 \* v& w5 P3 N- char *dmabufsrc1 = NULL;0 d8 N1 {! B$ j+ X/ p' c: c( k( v# c
- char *dmabufsrc2 = NULL;
: }2 C/ i7 e+ B& \ - char *dmabufdest1 = NULL;1 F. f3 l: t2 V
- char *dmabufdest2 = NULL;* F: R2 a& i5 k+ Z
- 6 G7 p- |, @ z- L' }6 t2 }
- static int acnt = 512;
" w/ {5 Z2 W6 w - static int bcnt = 8;; O% [9 ?5 o+ \" ~& x5 L, T
- static int ccnt = 8;
2 _3 _5 U D6 P; q* r - ( t/ F I1 ] f
- module_param(acnt, int, S_IRUGO);( a9 {9 Z% M8 R& b6 {9 T3 L( L. Y
- module_param(bcnt, int, S_IRUGO);6 N4 e. R: |+ h. I; |+ ]2 h& ]
- module_param(ccnt, int, S_IRUGO);
复制代码 1 c) A. U2 q, _1 E. v8 a
7 y3 I# K( x" ]% u% r
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; ^, G# x6 e) e% |$ ?- O1 d4 {0 z" Karm-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 _4 F1 {* F. i8 F0 W9 C# i 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。$ I) a/ I3 _4 t9 A) r2 v3 r
0 l5 }' j* x e* Q/ Y# W4 x' f5 \
|
|