|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ' |; {; e6 b% p. M) z
- [code]EDMA sample test application) y: l( z5 U9 P+ q K- q9 J
- /*' L- L3 {" b( T% ?& u7 [
- * edma_test.c
2 C4 F# y# g" P2 T$ C - *' M3 v3 S4 Y% p# `) i% \3 a5 v% b
- * brief EDMA3 Test Application+ z! _. T) i e: C" w1 Y+ f
- *( e) Z2 N* y+ ~2 L% ^
- * This file contains EDMA3 Test code." n. C' l# V& l2 {) E4 L
- *; N, U/ t2 I! P& D. o7 Z% c
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 u, a' A z3 d5 ?; F, J5 i
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT+ D+ W+ h. Q1 E
- * TO CHANGE.
8 m5 C0 ?5 ]5 S; z0 L( U7 ^ - *
9 i$ O9 U5 L- [3 q3 M - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/$ \! H6 S% X5 Z q
- *
& g( |4 l0 w. K2 M! ]- G - * This program is free software; you can redistribute it and/or
/ a: b7 @; t" l! u' M3 _4 I - * modify it under the terms of the GNU General Public License as
, ^0 g/ U- `, Z! [! m8 g' ? - * published by the Free Software Foundation version 2.
9 K1 P3 @& ] z4 l2 k- Z, m - *
6 s3 _' @' B' W( A$ M4 v4 I% T - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' @, ?4 q3 k9 w$ H) y, R0 t - * kind, whether express or implied; without even the implied warranty
% y7 C: H& @" P" U' u - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the, q% d; e+ Y3 J% u# W
- * GNU General Public License for more details.
; }/ X/ b6 V9 `% a - */
+ Y- y$ g3 _. K( @+ G - % U0 s% E- A; C8 n4 `+ d
- #include <linux/module.h>+ |% M$ j9 {% H. {/ D! H! m0 H
- #include <linux/init.h>
1 h5 q6 V0 W/ i. C7 m6 u& y0 t - #include <linux/errno.h>* \$ F$ U8 q% T0 E/ u
- #include <linux/types.h>
$ Z5 s4 j9 A1 T$ F - #include <linux/interrupt.h>
# r8 ]/ ?! [" F G - #include <asm/io.h>' k: O) o2 C+ G8 W
- #include <linux/moduleparam.h>
( H- X& O' j+ [9 y; t - #include <linux/sysctl.h>( {" t5 m1 ~0 r ?
- #include <linux/mm.h>! M# A4 O) _# Q# P" S
- #include <linux/dma-mapping.h>6 |8 H$ C% C3 w* s) _/ J8 F( I
' m, F: e/ c5 v" a1 S4 @$ t& M9 a- #include <mach/memory.h>
4 g# E$ r% y) m3 p; ?) R - #include <mach/hardware.h>+ E2 o6 \ {6 o5 S& I( C( L
- #include <mach/irqs.h>
3 c& w2 `* e' i- n; A6 `- @6 H - #include <asm/hardware/edma.h>6 y& u6 V# v G, |. j
4 S( l- O+ `( A1 [- #undef EDMA3_DEBUG$ Z c/ g9 E( `% f( K$ g" K
- /*#define EDMA3_DEBUG*/
: U/ M- k" W+ B0 T# U9 Y - 6 M0 u( v$ I9 s y
- #ifdef EDMA3_DEBUG
/ B3 z3 O1 I3 N" G0 y' u - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)& W* l% x, q% D: B8 m
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__); O h* T: x) Q0 L; L0 ^7 P
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) G+ J8 W4 h6 B: a7 V
- #else
0 }" y, y9 r, t/ e( Z - #define DMA_PRINTK( x... ); S; O) y3 Q; c
- #define DMA_FN_IN% o" M5 P" e4 v) c, N+ I
- #define DMA_FN_OUT
6 b5 e* @- i8 g; n- } - #endif
5 P. J1 x8 q3 H! v
7 ]; Y* c! ^3 G( h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 ^3 n1 {. u1 \# s6 X - #define STATIC_SHIFT 3
: E1 ]/ I: S; z* e - #define TCINTEN_SHIFT 201 e$ i+ m4 e; Z# p+ V
- #define ITCINTEN_SHIFT 21
1 f$ q/ ~, e. v. T$ O* I4 W3 ^9 u - #define TCCHEN_SHIFT 22$ O# L: q, r+ w; u& {2 A9 s: ~
- #define ITCCHEN_SHIFT 23/ J1 g, V( E/ K' ]& X) o/ _
) `# r0 o& G. H3 y2 i9 F, \- static volatile int irqraised1 = 0;) M* C( f$ b# b c
- static volatile int irqraised2 = 0;
& [9 J/ @( s5 y7 j
+ z) I: N2 t9 z. r7 _8 a1 m, G- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ Y# c$ B5 H8 L7 I5 X9 T X6 b - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: U& z$ \: k2 b9 S) W2 a1 z/ f( A9 X - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 o0 w+ G+ N& z1 J
, {$ x2 x$ e3 S7 y4 k1 \- dma_addr_t dmaphyssrc1 = 0;
7 I, o2 O9 X. u4 X/ K1 p - dma_addr_t dmaphyssrc2 = 0;
- ^5 }* n; V( ]' V4 ^6 C - dma_addr_t dmaphysdest1 = 0;/ ^/ k" o) z0 H
- dma_addr_t dmaphysdest2 = 0;
1 Y5 Y d2 z9 l, i) f - % ?8 g" r1 ^2 z0 s- l: D& V& `
- char *dmabufsrc1 = NULL;! T3 |3 g# @# K3 [
- char *dmabufsrc2 = NULL;) M$ u, t( z6 ]1 I( B; Z* Q3 S
- char *dmabufdest1 = NULL;
2 y- y% P4 ^# U; [6 q0 w - char *dmabufdest2 = NULL;4 x5 J/ v( ?/ W1 K2 w! F
- S$ D! s& w- V1 G/ w$ R- b- static int acnt = 512;
1 I; ]7 G% _: g$ C. W9 q - static int bcnt = 8;8 f7 w) y& H$ ?& S+ x
- static int ccnt = 8;
- o1 A- J' g" i1 z, R
% B! r A! Y) v. P- module_param(acnt, int, S_IRUGO);
4 l1 ?8 C M( ~ - module_param(bcnt, int, S_IRUGO);
- c0 i* |! {3 ?. T( G3 E: d' r$ i - module_param(ccnt, int, S_IRUGO);
复制代码 4 L- l: h) ? z, b8 i- P& F
4 p9 \( w" J; i% G+ {$ E: Z
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
* `* W9 t' Z; z, N0 ^: f7 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
: i' r r0 j* x! x 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。; y% l+ h/ j. q
) g* q1 t3 A2 c0 a3 g" F
) D: g3 p0 W9 i% B& Y1 k! P
|
|