|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; C1 E) m7 t+ r3 H- [code]EDMA sample test application4 o$ J7 K; s: c6 K# z0 o3 L
- /*) Q8 Z) m2 }) b8 A4 o+ h
- * edma_test.c
8 v% e; y _1 I( u( F3 L- s - *
2 N* k$ t1 n, @; w/ l/ j( k( o0 b+ ]' ~0 W - * brief EDMA3 Test Application
' r& m* h8 G" J4 D9 Z* w6 h - *
! \7 Y. @, C; F: F5 P* n: \ - * This file contains EDMA3 Test code.
# A) K; R1 |& o; e9 r5 n; E - *
" _! T- V5 K4 p+ ?/ q# i! Z& C; c; I - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 Y8 e. m b5 R7 g1 s( F- z' H - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT' X4 V" Q1 c) j& ^
- * TO CHANGE.
& u1 U$ Q" A) s( l0 t: `7 s - *- T6 w- M/ l% Z! H
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
! b$ }3 P3 X& |3 N - *" ]" C1 I" m* G' _ \
- * This program is free software; you can redistribute it and/or
+ L: j3 _: {% M* _) |3 n+ H9 f - * modify it under the terms of the GNU General Public License as
4 C' W6 J' J' ~& @( P# M - * published by the Free Software Foundation version 2./ a, j( E2 k; m7 A- H
- *# v7 c0 u7 x" u. u' o
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any& D5 s3 f2 ?- L! D+ h
- * kind, whether express or implied; without even the implied warranty
2 J4 `, v3 T; m0 ~. Y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* [* n/ ^/ S, u% }
- * GNU General Public License for more details.
* p! l% L( y" ^! D+ } - */
+ \& b; W3 K" t) ^ - 0 H+ G: D5 J V" z5 K( I) v% @
- #include <linux/module.h>2 v5 }9 _- ^- i9 ]
- #include <linux/init.h>: J+ Y1 m7 z* D. Q# G
- #include <linux/errno.h>7 h7 r$ R' _4 x$ \1 w+ }' V
- #include <linux/types.h>
+ q# W+ R% r) r4 u! D8 f - #include <linux/interrupt.h>: f. J- C- Y% k9 B" g, \% a+ p/ g
- #include <asm/io.h>
1 G& s0 _2 o0 ~- r- E2 S9 s - #include <linux/moduleparam.h>4 Q/ |* j5 N* i& f+ ?9 a+ i8 r
- #include <linux/sysctl.h>1 b* A1 R) P4 v: a" X3 Y
- #include <linux/mm.h>8 o$ W* w, W, q/ e! P
- #include <linux/dma-mapping.h>
4 B3 \1 p6 v# n. x - ( c! u8 v4 x# C* ]; Z, }
- #include <mach/memory.h>% i. T9 C. h) B' ~# R2 o. Z
- #include <mach/hardware.h>
$ p. _! A" y* C - #include <mach/irqs.h>* w+ z6 r4 m# G5 m( x3 d" Q
- #include <asm/hardware/edma.h>
- Z, c1 n4 |, Q( W4 G, m; K
6 X: x P b, `3 h- e9 `- #undef EDMA3_DEBUG* q, m& o- U7 M V
- /*#define EDMA3_DEBUG*/5 W- H4 T8 a5 X( {+ X, `+ C7 J
. z4 n$ w& ?7 [' Y3 ~2 \3 l- #ifdef EDMA3_DEBUG
?( V# c2 _0 o' }' P8 d0 K - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
' z5 Z. F+ l! f; P" F - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 `/ r& o0 U4 }, l$ B/ ~$ \ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)6 l3 y! d' L* R
- #else
9 ?6 `3 F; x- X |$ L( t3 G6 [# J+ K - #define DMA_PRINTK( x... )0 s: ^5 M3 [* l$ o' n
- #define DMA_FN_IN
+ R/ ]0 c8 i, h, j; r$ a. L2 n8 z - #define DMA_FN_OUT
) A8 u1 E( U7 L2 l0 w) z u - #endif
+ D5 b2 u$ S3 ?2 ^7 i - ; Z* S( d- S9 w1 |. F) I- ~
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 Z, r3 f' c& n: m0 o, e
- #define STATIC_SHIFT 3
d( m# j/ _# H/ ^ - #define TCINTEN_SHIFT 20" J. Y! m* z9 r1 k* y
- #define ITCINTEN_SHIFT 21
' \& y! K ?: y - #define TCCHEN_SHIFT 22$ S3 W D5 w' f4 b* G
- #define ITCCHEN_SHIFT 23& r! G" Y0 \1 D
% k* n3 m9 f8 D! V- static volatile int irqraised1 = 0;3 a0 V: O& c% p
- static volatile int irqraised2 = 0;
8 j! n$ ^9 c: u/ K/ x! d8 q
( [' d; E6 M" M9 q: G; z8 a- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; w$ |; u2 ]2 a3 E, x
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 t3 O) L3 ^' Q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* O; p( i* j9 v. |4 _1 N: B
% `& A/ ? @. _; r- dma_addr_t dmaphyssrc1 = 0;
7 V2 t, R3 l/ ]/ F. s0 Q - dma_addr_t dmaphyssrc2 = 0;
9 m- W4 i3 J& ]0 Y1 M. ^ - dma_addr_t dmaphysdest1 = 0;
, {2 ~) P6 M8 }! V# P9 y+ z7 U/ g - dma_addr_t dmaphysdest2 = 0;! P8 S5 V; x) g) D+ L3 V$ N3 S
4 x) C8 o3 J# x- char *dmabufsrc1 = NULL;
- W! t% H( x% _3 o - char *dmabufsrc2 = NULL;- l8 b0 L/ F% q/ Y
- char *dmabufdest1 = NULL;
) A3 n) J) Q1 z' b - char *dmabufdest2 = NULL;
7 C: ?5 B2 w: G# Y# y, v1 v9 j
, f! u- o/ [+ z, r: V- static int acnt = 512;
% v! ], f' [9 w! k6 A/ ^: u - static int bcnt = 8;( W" o# e: Q$ I7 u/ F
- static int ccnt = 8;
@9 z+ ^7 R( S1 D
( `5 u9 e$ j' R& O; l: g4 {! \- module_param(acnt, int, S_IRUGO);
$ W' Z/ T, t6 L: R$ p3 O9 } - module_param(bcnt, int, S_IRUGO);
- ~: }( `, z' O+ g( @ - module_param(ccnt, int, S_IRUGO);
复制代码
3 x! Z( K9 {6 H$ j1 H4 j- }, H
8 g5 \! X3 e' _5 P7 L! G 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
/ A( K3 W; e3 earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。0 l$ k9 Z* X, e* F7 g" Y
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ u: c1 @( g" o1 _" `( O+ J
$ d2 {0 b8 Q8 a# o) ^, l% Q
' a3 Z0 t3 L, ] |
|