|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 g. A3 k0 ^8 t, Z1 H/ O- T" v% H
- [code]EDMA sample test application
) _0 N% u2 p6 ?2 F8 s# O - /*
3 b G" g2 X& [8 s! x - * edma_test.c
, C' j: n9 q) @1 R% o6 k C - *4 l0 v4 m9 k/ _8 j4 p4 K! c0 j5 I- b
- * brief EDMA3 Test Application
: f# i6 Y$ a7 C5 ]1 {4 c9 }: w) y7 { - *
0 \/ Q) H K: H1 J. j - * This file contains EDMA3 Test code.
; z9 K; @' E# [# y - *
; t- y7 m( A; V1 P0 s - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
& T d0 \* c% P- r, i# T# m - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
! p: r1 V/ i2 t; E6 S - * TO CHANGE.
6 f, U+ @- ]5 y. v6 ~ - *
& Y# t9 O4 @5 {) B0 O - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
( G. ^, J3 Y9 ~) H# ]6 _( V - *
0 b+ k% \( q! _. D2 A, |) c - * This program is free software; you can redistribute it and/or
( N& K. B! m8 c6 ?( u8 l/ [ - * modify it under the terms of the GNU General Public License as2 |) i& u# G. B- d U
- * published by the Free Software Foundation version 2.3 c8 \) z2 [$ m' Q) T) L8 T
- *
7 F. q6 h5 l. r& m4 G+ H- P - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
2 ?0 r9 Q6 y# B* ? - * kind, whether express or implied; without even the implied warranty( W w$ b# U6 j l5 `3 R$ w3 `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 f2 w, Q( a R( ?$ N y- F
- * GNU General Public License for more details.
# y( k/ e; K( N$ j - */
3 h) x3 a' i$ L8 |( E$ Q2 C8 ]) J
5 O4 ]5 h" d( j/ X L- #include <linux/module.h>$ @3 I N# ~3 V! c
- #include <linux/init.h>
U0 m1 h! ~8 b. W3 Z - #include <linux/errno.h>
' f- e/ p P9 O" }+ B6 `0 s - #include <linux/types.h>
$ ]& b( \" N7 @8 ?7 W2 o4 c - #include <linux/interrupt.h>
- S# m/ ]' C' U% b1 d2 ] - #include <asm/io.h>
j0 n9 m9 C! L - #include <linux/moduleparam.h>
1 \. W5 r/ o* A2 X - #include <linux/sysctl.h>
# Q1 G, A# n. Z - #include <linux/mm.h>0 C' J- y4 E* S* {( F
- #include <linux/dma-mapping.h># u- ]! ]% S5 ] u3 [
/ p. |1 Q0 i, }. A$ G/ L! I- #include <mach/memory.h>
" ]. h2 V @* t/ m/ }) m0 ? - #include <mach/hardware.h>/ H# e+ E( n4 e' Z) ~7 A3 `7 ]. [
- #include <mach/irqs.h>
, o2 J+ N. v- \# Z8 o* W - #include <asm/hardware/edma.h>
6 l0 x' k; c+ A: ?" d& T - $ T9 m+ q+ j# @
- #undef EDMA3_DEBUG
2 } e+ ?" j3 H% u - /*#define EDMA3_DEBUG*/
/ l+ l# h6 c) X - 8 N; g4 @3 W: }/ h: q
- #ifdef EDMA3_DEBUG% l, W' P" v+ n
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% d3 i% X/ G, _# L$ s - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# a9 d2 j4 @1 U. [9 b
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. U6 _/ C8 E" Q! l5 G- c) M - #else
' n. K& ?: l& q* @4 g5 a - #define DMA_PRINTK( x... )
8 b( S1 v. w2 a* O) S; ^+ [7 d* L* ]7 m - #define DMA_FN_IN+ u) d- L% j; X
- #define DMA_FN_OUT0 E2 X$ D7 X/ t8 i6 U& C
- #endif2 x1 }9 \; p$ @# D$ k, X
. _: x9 U+ u c2 Z) a) c- |% i- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 i& P+ [; ]( o5 c0 l
- #define STATIC_SHIFT 3 {0 s3 C$ i; q4 v: h$ g) p; v
- #define TCINTEN_SHIFT 20
( D% Q% M$ S- P- O0 E( r# ^1 U - #define ITCINTEN_SHIFT 21
6 ^2 J/ C* D( O, D/ j - #define TCCHEN_SHIFT 22. D: z/ d# E. [! j, T
- #define ITCCHEN_SHIFT 23
0 \. ]0 w' g: M' Q D' p+ c# X' t
2 w% n/ X& E9 j& X1 m8 e/ W; b- static volatile int irqraised1 = 0;
& [; P# v- p( R - static volatile int irqraised2 = 0;1 j) e4 i' P$ g$ O: U6 @# W
- * v! H9 W, I' C- b* q, |# \% B
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: n5 Y9 x$ `: l! e( O% ~ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 s4 Z; O/ u! q6 V. l; Y
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) z' C- R2 r+ j5 B! j5 P* Q
* f& o- W, B) i7 s) p/ s# u- dma_addr_t dmaphyssrc1 = 0;" H5 m# r' d( K; Z: h+ }
- dma_addr_t dmaphyssrc2 = 0;' L. e- \, Q6 L
- dma_addr_t dmaphysdest1 = 0;
2 z" w O' d# ?$ V, q; |& d - dma_addr_t dmaphysdest2 = 0;
$ @/ T* T+ A+ I( @1 _6 _/ [7 E
# b5 G1 m5 {* p- char *dmabufsrc1 = NULL;
0 I' O D: r7 j/ v0 E+ x - char *dmabufsrc2 = NULL;
n# q/ o9 N# V- j& ?% o3 v: L - char *dmabufdest1 = NULL;# X% j l5 N. n {) n; Z- M: v
- char *dmabufdest2 = NULL;& v( @8 p9 P6 D7 e
- 6 S1 l- n2 d+ C% r
- static int acnt = 512;' \# O$ I9 Y$ o* Q+ C8 \- v( c" `
- static int bcnt = 8;9 e d# i: v- M: h
- static int ccnt = 8;
% X. k. K9 B, o8 R) a- C
9 ?4 {1 ]+ T8 O* _. F( ]4 U- module_param(acnt, int, S_IRUGO);/ a& r& i6 C# m! Z, [: s E
- module_param(bcnt, int, S_IRUGO);4 E4 _( @) u8 ^ ] H
- module_param(ccnt, int, S_IRUGO);
复制代码
. ^8 W/ c9 `) s9 {6 q8 X( E6 {/ J4 O$ W1 |3 t0 i
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用0 Y; N4 _1 ~- S
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ \- s+ T! E+ T+ m( s 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
' W+ c+ g( d: B( H5 m: C# `7 R" }3 f; T9 r& d5 E" l. G
. ^/ e+ G/ C5 g( y |
|