|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
u3 E& I" Z* k. X# I0 P- [code]EDMA sample test application
2 j8 p; o# l. l3 t - /*
+ X+ j, \$ B; k- P9 @ - * edma_test.c
, |+ w9 ~6 B1 z& S s9 V - *& e) A+ K# Y- f/ Y
- * brief EDMA3 Test Application
( |$ M$ W4 l8 m+ s1 d# |$ F6 w9 ^ - *
# d/ @) d: X; X+ l5 x* v7 P - * This file contains EDMA3 Test code.5 c* a& R% c' g& s ]
- *
+ @3 N* v3 b9 B8 k - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# w' g! U( ^- o/ l; _
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' `- ` j |2 }! I; E- F( ]) ^ - * TO CHANGE.
8 F* R, M) ~" [2 v& h# o - *9 l5 \2 Y7 m g1 c
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
+ |9 W, t$ H) ^+ Q u b - *
: h8 h- N, {6 I. o - * This program is free software; you can redistribute it and/or# Y" [) ~- Z5 p+ ^ B* C
- * modify it under the terms of the GNU General Public License as
' `- I# ]1 [$ v5 y) ~6 H* p/ U - * published by the Free Software Foundation version 2.7 ?( U# t% S( t8 u# D7 e
- *# q" b, a1 G. T7 T) j
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 x: q* N5 u: F0 I6 I' J2 ` - * kind, whether express or implied; without even the implied warranty5 m& M/ P4 u1 j* ]( m! z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* j0 _6 { Y; T
- * GNU General Public License for more details.
, U2 E/ \& m. L p$ n - */
9 d: \) Y; b/ {* A, _" I' D! J - ! X* m0 M- D2 q3 W6 ^
- #include <linux/module.h>
8 F% m# T+ i) g" B9 \; e. g; d+ A - #include <linux/init.h>$ \" A C% u. J/ X
- #include <linux/errno.h>
0 D) d0 s% u ^8 g& O6 ~) w - #include <linux/types.h>: F; z2 R" a+ W) r" ^
- #include <linux/interrupt.h>) a5 C9 H% ?5 d: N3 W6 w4 ?% M
- #include <asm/io.h>
8 v, D d; ]- ?, @# O5 m - #include <linux/moduleparam.h>1 E1 a6 ~1 b# ^* V
- #include <linux/sysctl.h>$ \. _4 f' A9 {) j
- #include <linux/mm.h>0 W Q, O( f0 D1 U' v2 S5 F
- #include <linux/dma-mapping.h>
- P- J Y3 p9 L3 [5 m$ A0 \- T
# B* p& {4 s4 Y5 M& |6 z5 y- #include <mach/memory.h>3 m# `* g' m( p% O+ h
- #include <mach/hardware.h>
e; Z) A* S* |8 v1 j - #include <mach/irqs.h>
7 f5 F4 O8 W& o - #include <asm/hardware/edma.h>- I( Y( V4 a: V; r1 h8 m
0 L [: i0 Y+ X; ~/ |- #undef EDMA3_DEBUG
0 j4 M' }- @; Y8 W3 n1 E - /*#define EDMA3_DEBUG*/) K' o; @& R( Q+ J/ q& p2 \
( t7 ?5 U- u Y2 \0 D% S- #ifdef EDMA3_DEBUG4 i! {6 \$ ]* x6 A! c8 h
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 k o, Y' q* Q' @2 I$ t
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
5 s7 ?. R2 J& o' D; r - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__); E0 m# R! I: e5 a
- #else" `5 @7 c% r; L7 M) \* ?
- #define DMA_PRINTK( x... )8 p A0 \8 Q! M3 ?3 `8 h$ m
- #define DMA_FN_IN
# h' A: a5 @: h) Q* t+ ] - #define DMA_FN_OUT
* B5 P' H% O6 J: R - #endif
4 u$ R4 O0 a" c5 ?+ h( E - 0 P, E3 n" }, Q- U, K4 O0 [
- #define MAX_DMA_TRANSFER_IN_BYTES (32768). E' v/ F. `4 m e+ ]
- #define STATIC_SHIFT 3
9 ?) ?" |, q: o - #define TCINTEN_SHIFT 20
* n; `& f4 T. ^7 i4 C. O Q( m7 k5 _$ q - #define ITCINTEN_SHIFT 21/ c7 ?& N3 i2 i5 t* Y9 x
- #define TCCHEN_SHIFT 22
2 t8 _* h" x- f: `* k6 ^ R - #define ITCCHEN_SHIFT 237 I* e. A# p. J1 l8 w: h. v
, `/ S$ n* j6 {( L0 i- static volatile int irqraised1 = 0;
/ x* \2 |- j$ \' |" } - static volatile int irqraised2 = 0;
- T9 N) b! q& J: X' a
6 E" ]* o3 Z4 o8 ?" R- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( F9 D4 w5 i; m6 w, v - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 @/ W5 P1 V/ ]3 \
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 W2 Z( D9 W0 j Q/ \ - & x8 b6 a9 N+ A6 m
- dma_addr_t dmaphyssrc1 = 0;1 p# K+ t( B0 w+ S4 J; ?+ X. v
- dma_addr_t dmaphyssrc2 = 0;
# m- g3 Z2 D) ]9 O - dma_addr_t dmaphysdest1 = 0;0 d; y. q5 \( }9 N/ g
- dma_addr_t dmaphysdest2 = 0;
5 \2 {2 t2 i+ F' T - + x$ E9 u$ h7 u% ]( y, p8 L# A3 b
- char *dmabufsrc1 = NULL;# f- U$ m) Y! w J- j4 o0 p
- char *dmabufsrc2 = NULL;
% q; v2 x. `5 y4 e. q' }( R1 D - char *dmabufdest1 = NULL;# j; G7 v; k( x& N' s2 S# ]* C: L" l! L
- char *dmabufdest2 = NULL;' C; f2 Y; ?. o+ m+ k9 [
' `% l7 M5 A5 Y I7 f5 Y4 o- static int acnt = 512;
. n: ~- a; { Q1 m. O( n - static int bcnt = 8;5 X) u: t6 p9 l# W2 v- e' G* m. a# b- d
- static int ccnt = 8;/ Y! t% V$ j) a; c! c/ [/ B5 [
- a E( b+ B* ^/ f( A. t+ j- module_param(acnt, int, S_IRUGO);2 m2 ]2 x' i9 d! H- z) R
- module_param(bcnt, int, S_IRUGO);
- }8 q' m9 ]9 r# X - module_param(ccnt, int, S_IRUGO);
复制代码 a) F) C( O }$ W! _) u3 k
~+ O, q# }# z* |. B. Z 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 x) @9 |: `/ F5 i- Harm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。4 S& \0 c; S% b: a H% Z9 Z+ a
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* J8 ^6 ]* a6 ?1 b, m/ |
2 B( j, L E5 U1 Y9 S" l! }: o
# L/ ]+ A) m$ ~2 K) J |
|