|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 . w O* d6 r, ?6 X: Z$ r N& `
- [code]EDMA sample test application
( Y8 {. z5 |+ X" A( x - /*
0 \+ q% W& x) T8 d8 _ - * edma_test.c: Q7 a! \& }+ V6 i K( A
- *
4 L# j+ E3 m+ o; O' T, `9 i - * brief EDMA3 Test Application
) `/ o$ [* C) N( q3 l1 W* z - *
4 {. j- i1 q5 [1 P9 L - * This file contains EDMA3 Test code.
% {7 `5 d) _" w" v. O# H - *
7 ~& F8 X# a3 I. S* `& \ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
6 M' S |- q4 d x, S# Q- T - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' `1 y+ n4 U- O* q - * TO CHANGE.: C8 m. u K) U7 W' ] F* n
- *- m" {& E" H2 c7 y) R/ _
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* Y4 n/ \: ^. p- s! { o
- *7 f) @$ f# s4 P7 O7 x: {4 {5 `8 e
- * This program is free software; you can redistribute it and/or0 y$ s, v9 `" T# B+ c
- * modify it under the terms of the GNU General Public License as
/ a: }/ m: Z0 B% `3 _ - * published by the Free Software Foundation version 2.+ v1 v# W7 c6 }
- *" V& A( K7 |# H
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any: H: w" P0 X9 B, l. T- h2 W" I' L
- * kind, whether express or implied; without even the implied warranty
2 H( j+ i4 A$ X' { - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
: b. y/ F5 U! p9 ]$ i1 f - * GNU General Public License for more details.
) C, s/ Q: T/ o& \, V1 T& E u - */' k+ q4 S6 B/ s0 `7 o2 ~
- + H3 t/ |, T+ G* K0 H+ o% _9 M/ c
- #include <linux/module.h>, }; s: o9 X) p' t' r* b, K( R) @
- #include <linux/init.h>
# c1 |) [1 t( N' G3 W& v8 g& ?3 d3 V1 x - #include <linux/errno.h>
/ [" q$ L- o1 C- C0 Y - #include <linux/types.h>& p" V; F5 k' ~/ l7 X
- #include <linux/interrupt.h>
, T' j3 j# Q& y) T- J* e) | - #include <asm/io.h>2 o1 y. z- ^7 n! i$ l1 Q
- #include <linux/moduleparam.h>: U; D% X5 E6 e6 v+ t
- #include <linux/sysctl.h>
- K& G" C9 @$ P- f5 O - #include <linux/mm.h>
/ E/ B0 k1 w1 S/ ?4 U1 q/ s - #include <linux/dma-mapping.h>/ t$ S' R* z' F# F
- ( b4 p s" c! P2 q8 j/ p- i7 i# ^
- #include <mach/memory.h>
# j: p' S' m* @# Q% q! { - #include <mach/hardware.h>
, I0 K8 a* I5 y - #include <mach/irqs.h>
9 q$ \1 h) J) V& G0 B( m$ l/ K; F- m3 T - #include <asm/hardware/edma.h>
7 t! e4 f' z" t4 }7 h - 8 y* h* |. Y! k6 x) }+ m- o& x
- #undef EDMA3_DEBUG; f4 c1 b, h+ v+ P3 S
- /*#define EDMA3_DEBUG*/
1 W8 s$ v2 W$ u/ U
1 ~ m6 B$ K5 i9 q. M) n) Z- #ifdef EDMA3_DEBUG
$ h) Y' ]* I1 I0 p+ U2 w% y - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ k. e2 n5 K( m( o, j" d7 f - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 r& ]) P4 [: F1 ?+ w7 ^ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 d u' W3 s5 J j4 E X; j% _6 B - #else% T/ D& K4 o* G' t# s
- #define DMA_PRINTK( x... )+ K& T2 u: Z/ X. ]& h; l% }% ~
- #define DMA_FN_IN% b5 R) |) Q! C$ D1 G* b9 t
- #define DMA_FN_OUT
2 t5 u t, a4 S! k0 M - #endif& Q* @7 Z3 Y. z! Q2 A6 N
- 3 n9 ?) f1 s2 b5 k* B- r7 n
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 k; R2 m1 E7 J) T: ?; p! l8 o" _
- #define STATIC_SHIFT 35 b) r1 J1 P3 q' h6 n- z2 ~
- #define TCINTEN_SHIFT 202 g- V8 ?7 Q' @
- #define ITCINTEN_SHIFT 21
8 z0 i( U) t1 y - #define TCCHEN_SHIFT 22
8 t5 @9 U. \% N- i - #define ITCCHEN_SHIFT 23
( t) ^' x: C, z: W
- C" ?$ Y5 f5 A W p- static volatile int irqraised1 = 0;
# @9 D; X7 L+ M B9 {! C {- ~ - static volatile int irqraised2 = 0;' V5 j4 |$ S; |- y3 X2 x5 \
5 c" _9 [' ~( I. U- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& w8 e) ?, |: d- u. ^- j - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 t. I5 m2 V! C5 k+ ]2 X( T - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! C0 n& J5 }& l- y$ c: v8 l, |
- + _7 _* c4 ?# r; x( ?
- dma_addr_t dmaphyssrc1 = 0;
7 K" e- L e% f$ A - dma_addr_t dmaphyssrc2 = 0;: T# D w- p, `
- dma_addr_t dmaphysdest1 = 0;
4 U0 I8 e. L: J: ~- v- @4 P - dma_addr_t dmaphysdest2 = 0;
- C% [2 w; w* G) q- L' ~; \/ @/ P
! }1 D- [* \ X3 v0 v" z; k- char *dmabufsrc1 = NULL;
( D9 _4 O, q$ P6 u3 r) f - char *dmabufsrc2 = NULL;
1 m( C; j" i8 Q% ]" {0 d# @ - char *dmabufdest1 = NULL;
, v, ^ A) j" {& r/ n - char *dmabufdest2 = NULL;7 O3 u& F! C* G- t- t$ ~& ~
7 e# }! S( t ?- r" R- static int acnt = 512;) M" N; g2 j$ Q c8 b
- static int bcnt = 8;0 w$ c* ?8 x5 J- Y/ A
- static int ccnt = 8;- R& @7 u6 f9 s, V8 a# Z+ i: R
; X6 y r9 g' Q4 m4 I6 M0 V2 p* f- o- module_param(acnt, int, S_IRUGO);4 X! ~2 j) F- l2 L' Q
- module_param(bcnt, int, S_IRUGO);
& l9 T2 J% |, F - module_param(ccnt, int, S_IRUGO);
复制代码
1 W$ f( m! l7 l3 L; _4 ^0 e2 e# X2 r$ v
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 M8 @7 t+ E8 D. `- Larm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
6 w) \1 k6 e+ Q! d2 M! C4 P 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。, R( p- M' t7 z! I/ u! I
[. G, C% K% S1 e: j& P4 J1 r7 q3 r
|
|