|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: w" I5 q! O. g: |+ N- [code]EDMA sample test application1 T2 F# I, _4 [6 ^) C8 L& v
- /*1 U V. A* \: C* |" i5 U7 G4 S9 f
- * edma_test.c
7 \6 q$ [& Z9 H# P5 y9 W1 h: E2 x - *
& _/ W4 \" z2 ~) r6 R! X - * brief EDMA3 Test Application
8 k9 g- F! {$ k3 l - *
4 ]4 u; H* s# m: U3 N& f' [) Q - * This file contains EDMA3 Test code.& R7 |8 {: E x0 H$ z" z1 R/ s" {
- *
8 A" D; F& }, G" G% z5 k7 x. s5 w - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE/ _2 u) K% M" W
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& v2 i& Y, U, }& B2 P - * TO CHANGE." K% Y% _3 X2 `! j w
- */ m+ b0 ]0 H. i, X. j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
& }, ]) a" }. s: p9 H: M* v" s - *1 f/ ~$ n0 X! x3 [
- * This program is free software; you can redistribute it and/or. W0 Y1 K. @$ E' a/ s
- * modify it under the terms of the GNU General Public License as a9 W0 ^4 r- a7 A7 D6 g
- * published by the Free Software Foundation version 2.
# u/ A% F6 U, @3 i - *
; t# F+ ~7 M2 Y i, r: d8 l% Z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any; @! N3 F5 z+ G; e! [: }
- * kind, whether express or implied; without even the implied warranty
$ c( a# F& w5 a- I% G8 i+ g0 V - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 [. B' v1 @. L/ S% N J - * GNU General Public License for more details.' {- h/ p& v' T9 v0 {6 B. A i
- */
9 M# Y, ]3 E7 K8 ^ I1 [
' r" G, G: w! _' j& C- #include <linux/module.h>
# O1 @" Z/ A7 E, U8 K/ F: [# ?4 C - #include <linux/init.h>
2 I& x1 m$ g% Y) \; y. X v - #include <linux/errno.h>
6 ~$ w! q' [5 [' F - #include <linux/types.h>
9 F" K* n5 H1 d - #include <linux/interrupt.h>
' a2 w+ G; {& E6 U* i - #include <asm/io.h>
7 `4 y! J4 y+ V+ f4 r" r1 Z! h# F5 }" f - #include <linux/moduleparam.h>9 C5 a6 v5 p+ J# }% i6 p* N( N' C9 W9 @
- #include <linux/sysctl.h>
1 p: v: q- Q; |: w' j - #include <linux/mm.h>' ?+ ]% e9 I, r, I0 q$ O
- #include <linux/dma-mapping.h>. K6 O5 `" \/ w" x
0 C" N: t8 z' [" ]- #include <mach/memory.h>" P H) A: g$ ]$ ]+ C+ ~+ k
- #include <mach/hardware.h>( R( y1 q0 M& X( g! v3 N3 k- p
- #include <mach/irqs.h>' f& _, G" T5 x4 o
- #include <asm/hardware/edma.h>
& o8 k: h% n2 |8 T5 Q$ ]6 i8 Q' @0 l
% j9 {; m4 Y5 h6 k: ~6 g/ u- #undef EDMA3_DEBUG: A5 U( i- Y* y2 d; C% z- F
- /*#define EDMA3_DEBUG*/
* @/ R) g% i2 G# Y9 V1 ` - % H. P0 `2 n6 r5 W! c) z( p
- #ifdef EDMA3_DEBUG
& `/ P) F. X/ z' R+ `3 S* G3 } - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)9 |% V" f9 y. M
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)- Y2 N7 l% z; v( _; M, b6 R
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! T; B+ p- @+ X: S$ E- R - #else% E, X. y/ u- W
- #define DMA_PRINTK( x... )
3 w2 t5 E! D' \) j- C9 K I0 _ - #define DMA_FN_IN
& D% ^3 m4 o6 e - #define DMA_FN_OUT* `6 q9 x- n2 j2 c1 z" p
- #endif; u# o8 S; L5 d; }/ O8 C
% X/ C4 V& u( F7 t- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 I& i5 {8 E, A
- #define STATIC_SHIFT 39 T& k2 F0 x8 W& p1 z# y) |( I
- #define TCINTEN_SHIFT 20
# V* }5 W1 b8 e - #define ITCINTEN_SHIFT 21! K0 O6 I0 U; r/ t
- #define TCCHEN_SHIFT 227 S" Q6 ~6 ?' s0 U2 q
- #define ITCCHEN_SHIFT 23
+ Z$ D7 m( }3 [" B - 6 M% r$ k8 N% n w
- static volatile int irqraised1 = 0;
% ]* C# H. R6 F2 h - static volatile int irqraised2 = 0;
1 }: y: T& s7 h
: H) X0 U+ ?: ~% e, _- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, H( c1 x$ h" b+ m- j
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 _( C. B; W& C: @8 `
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" ~1 f- h" S% f' `: ?8 Q1 {
- $ t6 C2 }7 Y/ Q5 a" ~/ a* l6 R/ F
- dma_addr_t dmaphyssrc1 = 0;
' Y1 p& X0 @, L E+ C' b - dma_addr_t dmaphyssrc2 = 0;: Z" q, B* s% o, Z- A/ [2 s- Z
- dma_addr_t dmaphysdest1 = 0;
. ^. ~! G/ H3 a% a - dma_addr_t dmaphysdest2 = 0;& v9 \" ^- h, j& w% t! p6 D
7 f" P, E* _: T$ l- char *dmabufsrc1 = NULL;
5 [4 _# B: g7 C- Y6 _6 N - char *dmabufsrc2 = NULL;
+ m: Y& S8 U5 j/ O - char *dmabufdest1 = NULL;
6 N& t: P# S1 s- ~5 s4 K - char *dmabufdest2 = NULL;
, U3 N! u1 V+ c
% q8 i$ f) e; Q" }" j- static int acnt = 512;
5 T" G0 `7 H9 [' u( n9 Q! g - static int bcnt = 8;
9 q Z* A8 @- T* ? - static int ccnt = 8;2 N* }5 o2 Q P- \; P& _
- $ M0 m2 |! P' H9 C$ m5 y5 U
- module_param(acnt, int, S_IRUGO);
3 ~, ?' q* f6 B9 k$ a4 @ - module_param(bcnt, int, S_IRUGO);7 E; _* z6 e& t9 _$ m+ l# p& u) c
- module_param(ccnt, int, S_IRUGO);
复制代码 6 v% @2 }: I+ V' m
0 X. U+ n* n( O) e) y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 x; j& m8 P7 |( o$ P0 T9 j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
* l# ~/ J, o# i 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。/ J5 t+ v0 H1 c6 ]$ Z; X
2 u. p& L5 ` U Z5 L e
( ~7 |0 K: ]& @ |
|