|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 7 {. c; Q# ^0 M( ?* }1 m
- [code]EDMA sample test application
8 {9 M2 u$ W( p, q5 j. L' l7 s5 t - /*
1 c5 [" d" }2 m) T5 E! ` - * edma_test.c
7 C; e8 Z" x( Z$ h9 ? - *
) S: L( S4 B% {5 a2 _ - * brief EDMA3 Test Application
9 v1 E# T N8 p: X - *
8 l. k8 }* y6 z* b$ a - * This file contains EDMA3 Test code.
( K5 b8 k0 E9 v9 S R& ? - *0 y9 M% V; m1 L* h5 h6 }
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* j4 N/ h5 d/ k0 I" u - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! f% B: e( i/ V( `
- * TO CHANGE.4 E8 c( w# _: I* ~, l
- *' Q: ^4 A z" M7 t7 s- I) D
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/4 Z# {1 H. H! R9 [
- *. r* z( E6 r0 a
- * This program is free software; you can redistribute it and/or2 v1 ~0 M$ v0 J) d
- * modify it under the terms of the GNU General Public License as
' ~: q: Q! x9 _/ o$ E6 a - * published by the Free Software Foundation version 2.
$ u/ ^6 Q- N4 o" p1 i6 ?) m# g - *7 S" S2 a+ t, c( G
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 x( S7 `+ i9 R7 c7 j6 g! X - * kind, whether express or implied; without even the implied warranty+ t3 @# D+ q- O
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 Z7 ~0 s; e( T( S. m' U7 v) y
- * GNU General Public License for more details.
/ _9 R; J5 o* ]3 u0 Z - */
' B T* W- j8 Q: z" \ - ( S# g0 v! p6 z9 N* R! v
- #include <linux/module.h>
9 u( v, j3 M% P+ N! Q* F - #include <linux/init.h>2 ^1 S P& o* [( {. F
- #include <linux/errno.h>7 D+ Y" r/ |* `8 ?$ @
- #include <linux/types.h>" z& @* j; s; p r& q5 }
- #include <linux/interrupt.h>
5 x/ [5 m3 ]3 R" S4 ^* ~- ^' ~0 V; F ] - #include <asm/io.h>- d9 c) x1 {0 N5 f) d
- #include <linux/moduleparam.h>' w( z _+ v5 ^, @# ]3 X* B3 Q
- #include <linux/sysctl.h>2 N" d# c e5 M0 d/ D
- #include <linux/mm.h>4 h' q0 E3 \9 H' T
- #include <linux/dma-mapping.h>. O' ^0 S% W6 Q7 s- [8 Z
- % D1 w! Y( |' Q0 f; ]
- #include <mach/memory.h>8 {7 S* u. N" P; l7 W
- #include <mach/hardware.h>
6 P) N) u! A" [% b - #include <mach/irqs.h>8 y* F1 G+ X. q+ ~+ `
- #include <asm/hardware/edma.h> M: n& N& K- [9 O
8 u, n! ?- B$ c' A. o- #undef EDMA3_DEBUG
2 w# ?! O4 F) x; N @ - /*#define EDMA3_DEBUG*/9 N E& M* s; K( k
3 W9 g+ U" v; W! y- #ifdef EDMA3_DEBUG
& i$ _0 P: ^4 d - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
, b% X. K7 R, {$ l L - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
. Q2 n/ t: j$ T1 n" d5 G - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)4 c# d0 F1 d( C' ^
- #else8 n: ]7 y( @# ?: }: r3 w
- #define DMA_PRINTK( x... )
! i7 U; G2 V0 g, m - #define DMA_FN_IN
. Y& B. H3 e6 Y& j4 O" |% j: A8 R' x - #define DMA_FN_OUT2 K5 u3 D9 s4 O9 j
- #endif$ N* ?! z" B( { y
- 7 ~( D" m, s* u. T
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, b- \$ ?8 i. ~6 P; C - #define STATIC_SHIFT 3( P8 q' \, J/ S+ R; ~
- #define TCINTEN_SHIFT 20/ e5 k, {; }' `- L' I
- #define ITCINTEN_SHIFT 21
' n! ^. ]5 B' |2 f7 P0 ^* f( V# Y: F - #define TCCHEN_SHIFT 22
" T7 l5 h$ z2 R; B - #define ITCCHEN_SHIFT 23
3 ]' O& |4 y0 Q, a
: P7 a+ A' Z( G8 p4 B4 L# Y- static volatile int irqraised1 = 0;/ e/ r0 P% l+ y g7 y
- static volatile int irqraised2 = 0;
$ ]& |7 S8 J) M$ | - ; O" w; S2 j# i) a- @9 f
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 X5 \: o" N, G: G3 ^
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 j8 l; Q2 a' {
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, s% @# J7 e3 v* J. {
' t" c X& l. g1 G$ B$ |$ `- dma_addr_t dmaphyssrc1 = 0;! s# b6 D- T- H; d- L- D" l
- dma_addr_t dmaphyssrc2 = 0;
# r4 z6 a" P" l' @$ S - dma_addr_t dmaphysdest1 = 0;
) b1 Q/ p8 n7 {" h2 I - dma_addr_t dmaphysdest2 = 0;
, p& U6 o0 F4 H1 o/ \
% X5 f' O2 m0 \: o4 N- char *dmabufsrc1 = NULL;
! A4 L$ n3 i6 Y6 X* w, I4 R8 ]* n - char *dmabufsrc2 = NULL;8 _6 E7 a$ r1 Q+ [: S
- char *dmabufdest1 = NULL;. W7 R f0 V+ d( K5 l
- char *dmabufdest2 = NULL;
1 I' S: w( ?1 f2 h3 Y - ; H9 ~) {* K% D3 Z9 U# _" P5 X3 G1 ^& _
- static int acnt = 512;
7 N+ { W/ |! | - static int bcnt = 8;
5 V( _8 G0 R q6 C! z1 w1 \ - static int ccnt = 8;( d7 g2 `. ^8 F+ Y' z+ L l' j! h+ s
5 ~0 J* p% Q; a* V' q3 V( ^! [- module_param(acnt, int, S_IRUGO);. J# O" Q0 E1 r' L. [+ Q
- module_param(bcnt, int, S_IRUGO);
- l9 S4 B ]2 D r$ u$ e$ d - module_param(ccnt, int, S_IRUGO);
复制代码
" [; d+ W, C/ A r2 b2 u
$ V$ _8 s1 z; v: f0 A 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用# ]6 d0 D9 p- \0 ]
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 q' q ^" c# D- ~, ~$ S0 B8 o( O 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 x! D8 { L) o2 g& Q" A
: G1 c1 J8 H o! }' c, R9 m' l
$ U1 `9 w( Q# e( ]6 _( F
|
|