|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) }+ h$ J; ~! B) [, [: \/ u7 r
- [code]EDMA sample test application7 J6 w% A% Y7 ^( A1 t3 ^
- /*
* H& R) _7 V1 ~2 e1 {1 S* M/ H( P - * edma_test.c1 d3 \ D2 W0 I; Q/ w
- *6 [; k: n& {: H
- * brief EDMA3 Test Application8 t( |$ } d @4 l4 a. }) ~2 r
- *2 n8 f" d! ` [4 ]: ?" ]9 e( J0 [% }9 n
- * This file contains EDMA3 Test code.0 L$ u: O) y d/ U0 r' F; J: a z
- *
( z7 }( s- |4 I h - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# T+ d s) h. W, @; Q5 {6 W% B9 j
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: z1 J# V, s: | - * TO CHANGE.
4 l( w; j1 v! d+ h: R- m3 S% h' L. p - *( R: z: e) V) r. M
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! y8 n: u, V+ T
- *6 E# o0 u; z7 ^4 v6 @9 V
- * This program is free software; you can redistribute it and/or$ n. s: y* P) a: s; ~: R
- * modify it under the terms of the GNU General Public License as& _2 N* o( L% y: B% u- {$ i
- * published by the Free Software Foundation version 2.
W* T- H! J% d0 Y: S4 X' e) H; P - *
7 b* T# @2 O8 X% n" ~4 g - * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ I3 o9 j( p' c+ L
- * kind, whether express or implied; without even the implied warranty* O& j, O5 J: Y# i; ?# O0 k% M6 `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the6 p& f& C7 j& g) U. O
- * GNU General Public License for more details.5 o6 b6 S, }* r& Q8 h9 E& o
- */3 Q) j" _5 E7 w2 D
- ~, B2 U$ @; ~! d* L+ p. y
- #include <linux/module.h>. {- W( P+ o* o3 w/ ?
- #include <linux/init.h>
4 F, X3 Z8 D) ?- Y; p$ m7 ~0 B - #include <linux/errno.h>
1 M0 P+ C* Z5 c# C2 B* F - #include <linux/types.h>
8 Q- Y% D, N4 u& v - #include <linux/interrupt.h>4 i$ q: q: C5 q5 N. x) P1 Z+ ]
- #include <asm/io.h>
# q5 w6 {2 _& M - #include <linux/moduleparam.h>
R. b8 z2 Q$ `# g2 A - #include <linux/sysctl.h>3 D% P: m9 W0 k4 O. L9 Z/ |
- #include <linux/mm.h>' e* X0 V9 q- i0 o
- #include <linux/dma-mapping.h>( `1 }6 q" L3 g9 `: H
- + W' I. u t7 y$ t
- #include <mach/memory.h>
! j* Q f9 K% C% m, P. Z1 e - #include <mach/hardware.h>2 t5 @8 O0 Z1 y, q' t, Q0 e
- #include <mach/irqs.h>
- {3 T- N8 v K+ C* B - #include <asm/hardware/edma.h> G9 V a" Q$ n3 n
- - M' r2 S! n3 M0 T
- #undef EDMA3_DEBUG
" R5 @+ F. ?% G( i - /*#define EDMA3_DEBUG*/
( @2 c+ Q$ k4 k) z
: g Z, ]8 }" v& b! ~% E6 q- #ifdef EDMA3_DEBUG) b+ O# X5 G' I, H+ g: _ R- M. a
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)& }" p0 E* p# C, ?9 f E5 ?: F
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, o8 W# X# ?! ]2 R4 P - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 w( ~. I) g/ C/ j - #else
) I: G% S4 r, k( D. ?* C - #define DMA_PRINTK( x... )' x% m7 t' ]# o( w; @
- #define DMA_FN_IN
0 s, W6 h4 g4 z4 E0 E - #define DMA_FN_OUT
9 L- b8 W2 p( `2 \ - #endif( W- m7 Z. a( a5 ?
% J. a. c* F, V! Y4 e( Q5 @3 u b- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
l7 J8 e$ e+ N - #define STATIC_SHIFT 3. U F; ~6 f% n j0 F
- #define TCINTEN_SHIFT 20
4 m+ g: P7 a8 j, b3 t - #define ITCINTEN_SHIFT 21
8 C6 f$ I e/ D - #define TCCHEN_SHIFT 22
; U k% \& k5 _; @+ P# `5 d - #define ITCCHEN_SHIFT 23
8 q& Y! T( v5 {- k$ d. m+ @
! I p# R1 q) w- H6 A- static volatile int irqraised1 = 0;
! L' W2 Y3 E* ^( O5 [7 Y - static volatile int irqraised2 = 0;5 H2 L7 R; D6 H& T# d! I
- c, Y9 B/ v" j' \ M) W0 K; B
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 f) C; `6 j- g6 p& s1 m+ c. J5 ?5 H
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# X- ]/ V3 u' e8 r' k- i: N) \/ R
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* g' F* b# l* n- m! k0 q - ( U4 I2 |' H; w7 v0 p
- dma_addr_t dmaphyssrc1 = 0;
8 u6 i: \: r; ^ - dma_addr_t dmaphyssrc2 = 0;& C: H4 j. ~# s" F6 q& ?$ S
- dma_addr_t dmaphysdest1 = 0;
0 g- e3 B) S+ k5 v - dma_addr_t dmaphysdest2 = 0;+ B) X7 T# g4 b* [- G+ x
- # o+ J" Z$ U) _5 V) _; C
- char *dmabufsrc1 = NULL;0 y+ R; U3 k% H( n
- char *dmabufsrc2 = NULL;
, Y" X3 ^0 I/ R$ n6 Y - char *dmabufdest1 = NULL;/ {( w( O- q! _( {8 b8 b+ r
- char *dmabufdest2 = NULL;( ?2 V7 f2 ~5 y- ]. o I
5 p, a; S7 I: h0 X! ?% G- static int acnt = 512;6 B6 ]( R# ~( i: G* q% J
- static int bcnt = 8;8 C0 B8 A8 _9 P" o
- static int ccnt = 8;
. d3 w n t# v4 n. @
! Z5 A6 b' ^6 r X! n- module_param(acnt, int, S_IRUGO);
/ F! S$ G+ f1 l/ x0 H - module_param(bcnt, int, S_IRUGO);: H' \: \# D8 C& t: H
- module_param(ccnt, int, S_IRUGO);
复制代码 8 R& |' E8 u( g+ v( c/ `( m7 w6 g
: S2 U2 Q2 y I( f8 Q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 [4 L! m$ Q8 ~( ~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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ J/ Y% \5 ^* w& Z( A
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ `/ u) b% D k: `
& O- E( b6 V# u& j* n0 c8 s6 v& F* b( w
|
|