|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ; V& ]$ |9 @- X* b
- [code]EDMA sample test application( s( Q1 a. G& ]! O. W
- /*0 H+ h: g: i1 M6 C0 ?) N5 R& R
- * edma_test.c& ~4 b7 N, @) l# @8 z
- *. _7 l# c: ]4 m$ q+ [' U: d
- * brief EDMA3 Test Application8 I7 A! b7 l3 t6 D7 J
- */ C4 Q0 z5 m4 }/ u
- * This file contains EDMA3 Test code.
# C2 Z# [" O2 w* \ - *, r" @! [+ ^- ^2 \, j
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 @4 m8 i! u9 x+ z
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! `% z* g3 R9 p$ i! b5 z
- * TO CHANGE.
# A" C* k* d1 H' O) G - ** j8 x& X* O3 k g. J, g
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/! D4 ^0 P9 V0 u" M% L3 c1 E1 ~
- *
8 G! I1 }+ h) a. c' a8 C q) i - * This program is free software; you can redistribute it and/or& U5 v4 Z/ H2 \* p( U' }& h+ z: r
- * modify it under the terms of the GNU General Public License as6 {, k5 Z* d& g9 ]8 b8 z; s
- * published by the Free Software Foundation version 2.
( L# B, o2 ~$ x - *
6 X9 q+ {" \; x! H9 ?1 e) B& F - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, L/ v- w2 |' T' b5 X - * kind, whether express or implied; without even the implied warranty; N. i8 f o' U
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 N' ?3 [/ `, F( ]! X8 t$ [
- * GNU General Public License for more details.# \! {! ]5 I$ |5 J
- */
, j( U6 B- l, u+ Z) n. [ - O/ v$ P2 ~6 U5 e) c# y
- #include <linux/module.h>
. ?! s9 B S) w0 e - #include <linux/init.h>
# l, R8 n3 |; Z3 z$ q8 H - #include <linux/errno.h>
1 z) [0 w* A+ y4 w- k& ?2 B - #include <linux/types.h>
8 C$ R! {, P! \; z% B - #include <linux/interrupt.h>- O, u- E6 m0 h
- #include <asm/io.h>0 k3 o; D. Y$ e1 I
- #include <linux/moduleparam.h>
) O6 g* A. @; w2 T% p8 T5 x L - #include <linux/sysctl.h>
2 d$ b& q. C0 O$ u4 E - #include <linux/mm.h>
# P$ z6 r8 X% _ - #include <linux/dma-mapping.h>' P4 b# {( o! [3 {
( i9 n9 a7 K5 |; K" \- #include <mach/memory.h>1 k3 l& @; x) E
- #include <mach/hardware.h>9 z! u' f" E$ ?0 f* }8 O' `+ O
- #include <mach/irqs.h>
# \* q" Z% G+ c! P8 R1 [6 q - #include <asm/hardware/edma.h>' T. ?* g# v8 G4 C& H
2 W% H0 y3 r5 J+ \- #undef EDMA3_DEBUG
7 X5 n* T$ w* s; K0 }) O - /*#define EDMA3_DEBUG*/4 e8 R6 T# w. r8 u
- 5 M! J+ @5 D8 D1 ~+ |7 k( {
- #ifdef EDMA3_DEBUG
1 l/ q+ p. u0 |8 s4 _6 @ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
# t: [) u* _& J F4 X - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 m1 M; L( m8 W7 ~8 J, m) S
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( r2 y5 C) h9 }1 v. e6 B
- #else" x5 R% g! q3 B
- #define DMA_PRINTK( x... )
: Z: G( @: R5 L5 u; v% z( L" t - #define DMA_FN_IN
8 K* A+ R0 u5 E0 v - #define DMA_FN_OUT
1 I8 R1 B N) u/ _( l; V5 R - #endif
# K3 m: n; i' U. j+ g
Q8 _. [- @8 S6 n X) _6 I- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
3 g+ h$ m2 `3 o$ l - #define STATIC_SHIFT 3% E6 X8 w3 R* N
- #define TCINTEN_SHIFT 20& i3 n" `: R0 p% s H( Y1 ?
- #define ITCINTEN_SHIFT 211 X4 T+ t, ^) j3 ?8 {8 c7 g
- #define TCCHEN_SHIFT 22) l$ e* v+ _" k: o; I
- #define ITCCHEN_SHIFT 23' K6 C- E# U( V2 D- W W
- " }" K7 ]0 X( {5 }6 {, d
- static volatile int irqraised1 = 0;# f+ l/ w9 O5 z) [9 t3 x9 G7 Q
- static volatile int irqraised2 = 0;
' K0 }. Y1 Y# X) d# g - 9 @, T0 t' J0 z: u1 a* d7 a
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# V) z( r4 W+ d- z - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 @: d' [; ]; |5 C* r - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; ~& p1 k& t: f( S+ Q. x
, k$ S+ k5 W& g) u& k5 M) Z- dma_addr_t dmaphyssrc1 = 0;. P( W, U3 N1 b4 ?: v
- dma_addr_t dmaphyssrc2 = 0;3 C a( y/ e [' d8 D- m/ O
- dma_addr_t dmaphysdest1 = 0;
$ i5 \; W( \$ P/ ~ - dma_addr_t dmaphysdest2 = 0;
" h' Y* C4 h" u5 a$ ~
7 A8 x+ [, u/ S# e$ [- l" v- char *dmabufsrc1 = NULL;
- ~# c" J, D+ ?0 `. p8 G - char *dmabufsrc2 = NULL;6 m! O$ R2 b7 L: X; N
- char *dmabufdest1 = NULL;& E* W5 a s/ Q- Y
- char *dmabufdest2 = NULL;2 z4 s, \6 E' [+ N" C# {
$ I0 \9 G" F% x7 x- static int acnt = 512;
) \0 S3 o" i$ ^9 {# U7 n. @ - static int bcnt = 8;
( c' W# F' i4 K& c% [ A0 G - static int ccnt = 8;
( e* |& |. W% d: [/ t6 }) N0 X - # L8 B+ U$ ~- s6 O+ L# Z
- module_param(acnt, int, S_IRUGO);
7 L6 x7 F; T2 Y9 l - module_param(bcnt, int, S_IRUGO);
% p: S- z1 j9 p. G m - module_param(ccnt, int, S_IRUGO);
复制代码 7 j; N/ }% J: H+ U6 O
9 R4 ^' G- Q% J( n- o2 _ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
2 [7 I" v5 W0 O3 [7 F; ^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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( E1 U1 n2 L6 `9 c+ t# z! D* k, ` 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
1 c1 U) N H* S& b# \( `* f, `+ T/ U0 B! S6 ]# h" Z6 V
! F* J6 d. [2 [- L9 p, e% t5 `
|
|