|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 3 W3 Y# D% F: w% v) Z u' ?
- [code]EDMA sample test application
" t4 J) y+ v3 ^ - /*2 r% \; M$ X9 D& k
- * edma_test.c
7 l/ i- R& m8 Z& w) n: `: N - *
( v" Q+ {4 `/ x2 w) v - * brief EDMA3 Test Application
! I7 |# [+ G$ j; m# s* G4 C - *: a6 N% J) e( B* e) u" Y9 X
- * This file contains EDMA3 Test code.
! J3 M2 H5 d* y& o7 @! i- i - *5 R% u4 |6 g; y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE- u9 p& |; [3 g$ [$ k
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
1 h v! c! L- Y% v) V |* \0 V# U - * TO CHANGE./ d- R+ D# T8 l. f
- *& T4 i1 [# z: ]6 j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
( L% e0 Z' B3 v) I3 n% D - *( r. y# j* E) \4 g
- * This program is free software; you can redistribute it and/or
* P: K+ x. m7 K- P - * modify it under the terms of the GNU General Public License as
, O G+ Q$ W1 ?$ h/ a - * published by the Free Software Foundation version 2.5 ^. p+ n1 Q* ]% x
- * ~) D4 n/ I! B! S# K, H" N+ S
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' M: y) j+ f8 w6 w3 B$ L8 I - * kind, whether express or implied; without even the implied warranty5 B" r. T- R' F9 a7 ?
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ T2 H0 O4 j; k5 w1 o4 s* ` - * GNU General Public License for more details.
. J9 ^; Y% _% a* Q3 J# D - */* p p% M- a4 H# q
% k" |* K1 @" k- #include <linux/module.h>& x% O& a/ S' q; g& P/ V8 B8 A [
- #include <linux/init.h>3 r* \* N7 n; J& \# B: v" I
- #include <linux/errno.h>
1 R* b$ G# @% A* X - #include <linux/types.h>- {) {* v* p* P7 B5 q( q& t
- #include <linux/interrupt.h>
4 O2 O) J% _+ a- D- a - #include <asm/io.h>
9 W7 v) _8 V2 S) Z6 u. d. X - #include <linux/moduleparam.h>
8 q3 K9 W! Q4 Z# k/ c8 K - #include <linux/sysctl.h>8 |" |0 Z1 x Y4 R: w
- #include <linux/mm.h>* I- j% x8 b* x0 \/ `
- #include <linux/dma-mapping.h>+ E4 A/ W! O; S3 F" {' S5 b
; @' ~7 i% ~. E9 n9 O; v- #include <mach/memory.h>2 h: ^8 V& N1 h. ?% n, g
- #include <mach/hardware.h>
@5 t8 s3 C, w6 @1 R( I+ v! U# o$ t - #include <mach/irqs.h>( H" k4 b) G6 @9 d4 f3 j
- #include <asm/hardware/edma.h>$ M: p. T4 A+ |
- " u1 p; t1 Y2 L$ G% o8 @
- #undef EDMA3_DEBUG
" V4 ~" P% j% l: e; l3 q - /*#define EDMA3_DEBUG*/
) }/ C; E! b" Q/ T& I B - 7 D) s( w& b& }3 v8 r
- #ifdef EDMA3_DEBUG
9 t3 S# t2 k& h7 n, w5 s7 U - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
. |! c0 t$ G1 K/ P - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)1 n+ r6 ]3 Z' A# ~! `+ r
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) }2 l) _/ N: K
- #else
. _& A: {( x4 e1 `0 _8 k) O - #define DMA_PRINTK( x... )
* h& X, l3 c; c$ P! E5 f - #define DMA_FN_IN
0 _& e% Q( {% P) I - #define DMA_FN_OUT, h! i! y9 }) z$ {
- #endif
9 d& x' u, U) D0 o5 u
6 B% {% |% O, F4 y) [9 k- #define MAX_DMA_TRANSFER_IN_BYTES (32768): L8 r- D" @; E. H/ b* I
- #define STATIC_SHIFT 37 i. I/ R, w0 s# S. M( T0 `
- #define TCINTEN_SHIFT 20
m: w; S \7 @9 K6 i" M+ P' V - #define ITCINTEN_SHIFT 21+ z5 W, F* u" \9 J0 v x
- #define TCCHEN_SHIFT 22
% u7 B- b. U* j% ? - #define ITCCHEN_SHIFT 237 h" p. v! a3 o2 q) G" |7 |- C- d
- : d, j" c) O; X9 D( M0 B
- static volatile int irqraised1 = 0;1 a$ O( P- }8 O
- static volatile int irqraised2 = 0;+ L5 M2 X% p% d) J% H4 t
4 z2 c% B6 R) ?. T9 v- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* {" c7 K p; [+ D1 \+ D8 n - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; h$ ~. f! L0 `
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 g* V, E6 ~( b; G3 ~ - 5 Y- x- @1 h5 C5 t ]! Z" W
- dma_addr_t dmaphyssrc1 = 0;9 Q+ |( q5 ^/ S8 X( a
- dma_addr_t dmaphyssrc2 = 0;- T; {+ G1 Q& s) u' Z9 S* K# ?
- dma_addr_t dmaphysdest1 = 0;
. T0 }; e0 o) c2 g; {. H - dma_addr_t dmaphysdest2 = 0;0 f. Q! ]. u4 A7 o
' [+ X' z9 d' c: ?8 X8 h4 y, ^- char *dmabufsrc1 = NULL;) B8 n( b# T* ?
- char *dmabufsrc2 = NULL;
/ j9 T" M t! Y8 U0 h! h4 A4 m9 T - char *dmabufdest1 = NULL;
7 k, [: _ J- g - char *dmabufdest2 = NULL;+ Q5 Y# k. X. z2 \; W# D2 K
- , A" \- v2 |- s5 N* u( m D
- static int acnt = 512;, F7 l; t" B4 K$ B; Z0 {9 k3 U
- static int bcnt = 8;; d+ G& Q, K1 N* \7 I
- static int ccnt = 8;
# R' A2 O' O$ u+ X9 ~) ]7 {' B+ M+ N
4 x1 g& U0 Y m3 h3 M, t, P7 }- module_param(acnt, int, S_IRUGO);& d* k& I% y: e% W9 ?
- module_param(bcnt, int, S_IRUGO);
' J. u, U: d, o$ f - module_param(ccnt, int, S_IRUGO);
复制代码
+ j7 W& s$ c8 y$ L+ o6 P9 x/ O8 N& F7 A/ A" R. T% l. _+ N" T1 b4 n
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 a3 _3 }& _) o
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
+ j1 x1 w4 e' _0 L" e4 W 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! P3 b) L) Y5 u$ b9 s
% `; |8 I& A4 e
( E# Z# L& {% s% E8 ~1 _+ t |
|