|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 " G7 H8 b0 A' b* U
- [code]EDMA sample test application
6 ?9 `& @& X0 H - /*7 [9 B+ U3 N% `8 v, H! f
- * edma_test.c* f9 w- I4 t$ y
- *
! r% k: O7 W& {; ] - * brief EDMA3 Test Application: A2 h! } d e- R8 @+ Z
- *" i, E# j, I6 D- Q- V
- * This file contains EDMA3 Test code.1 j* T5 ?, R5 x/ t0 Z# w
- *
# t: [; K! `1 j% H - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% j0 O5 K$ Q- Y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# D: ^3 M2 d* H' y1 Z. U _# h' {. t( b
- * TO CHANGE.$ s. l' G$ d* L! C0 Q
- *2 ~! Z) U ?4 Y- k
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ M5 @* b& m0 J+ u - *
) p5 F; s" Y( @& b, u& P - * This program is free software; you can redistribute it and/or
+ f: ~/ x, a) l- L5 o; Q+ a4 c - * modify it under the terms of the GNU General Public License as
7 v/ _9 s2 n) }# z; S3 X6 ]6 L8 ~ - * published by the Free Software Foundation version 2.! V9 b+ _% o. q1 l: i' q/ c0 g: v
- *# D& S; [& I d; t8 n
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. t) ~4 \0 I7 p" y+ | - * kind, whether express or implied; without even the implied warranty$ c' D& N* l9 {; [$ H
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1 `/ a8 V5 }+ M8 [, A6 C% M8 _4 f - * GNU General Public License for more details.
& @# ]- L; ^( ~: X3 @; i0 }/ u" C/ Y - */
: f) \1 [" K) Y8 U5 @ - 8 k# d6 ^# H$ Z' b& m
- #include <linux/module.h>0 D; o. t- @& V/ d( [5 P
- #include <linux/init.h>
4 a8 K7 x) y1 A# c - #include <linux/errno.h>7 t6 j2 J6 j. ` E1 Q2 y
- #include <linux/types.h>
/ \2 T$ y. I" B8 F/ L - #include <linux/interrupt.h>
5 V8 k/ k2 Y3 m) F2 x- y8 E, u# R - #include <asm/io.h>0 C: h& |) P2 ^6 J c
- #include <linux/moduleparam.h>7 P: D) v0 |. n/ q, m) a- f4 R' i) P
- #include <linux/sysctl.h>
/ z' \9 q& I1 N2 u0 g) {5 y$ |. W - #include <linux/mm.h>, L, w6 F# T4 [! E
- #include <linux/dma-mapping.h>
# u2 k/ C4 O" ? Z) s( }3 O+ n0 X
. \4 [$ M2 i- c- V7 ^" z: A# Q- #include <mach/memory.h>
5 J F8 e6 O- W0 p4 E' y) K - #include <mach/hardware.h>. O8 I7 x: k a8 h$ P$ S, C8 P! _; b
- #include <mach/irqs.h>0 T& O" _/ j2 D: {- e
- #include <asm/hardware/edma.h>& S! l, o1 T6 A' C" O2 d
- ( J) H0 p; h; o1 j5 ?( @# G6 _
- #undef EDMA3_DEBUG" N- a4 W7 R2 y* S W* o/ A
- /*#define EDMA3_DEBUG*/
. g) i& k f6 N8 ?( l# g - ) y+ u8 J s' Q' q; b
- #ifdef EDMA3_DEBUG& A7 m$ y( L3 k! ?9 F% X
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS). k% C0 j+ |$ e' n
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)7 g2 v: \: G! O! H
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
5 @9 K" H b8 ] - #else7 ?* |- B9 I2 T# i! a
- #define DMA_PRINTK( x... )
# o' O3 J, R, d& V, q$ [ - #define DMA_FN_IN
7 }/ V2 _" f8 Z" ]2 H8 ^ - #define DMA_FN_OUT
) G6 g" l' t \ ?! s; V - #endif" x3 G, j. i2 O& I2 Y% A( U
- 5 h& o* L" d( u- s) E
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 z" r! |( K& P5 ~, V4 M8 Y - #define STATIC_SHIFT 3
# n# ]0 Y3 v5 g' F9 L- R; n, d+ ? X - #define TCINTEN_SHIFT 203 l3 I; b0 |8 C
- #define ITCINTEN_SHIFT 21/ @+ q$ f6 @% I8 _. I( N8 x
- #define TCCHEN_SHIFT 22* L$ `# c9 A- A- {, y/ e# g2 M, I
- #define ITCCHEN_SHIFT 23
: l, i- r' ~: A- L9 J' ?/ s0 C c/ y - 8 B2 L. ]& l: r! }3 i
- static volatile int irqraised1 = 0;
2 c" }1 e$ A. [" H/ T; k+ ?( m3 i& W - static volatile int irqraised2 = 0;
* K$ ^9 }# Y8 v% o3 @$ y& H3 `
1 }, u3 t) W0 ^$ q; |; Y8 l2 X: t- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' @6 C% b Y; S! o2 t
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 Y' H6 K2 z) q b: i- A" z7 x3 D0 V
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ l }% l# i$ ~
: K! m5 \; G+ K- dma_addr_t dmaphyssrc1 = 0;
! r2 o H. J o0 A - dma_addr_t dmaphyssrc2 = 0;; W3 i0 ]6 l' @+ j" F' R
- dma_addr_t dmaphysdest1 = 0;
$ {9 A6 F# p f; v$ s. W0 E - dma_addr_t dmaphysdest2 = 0;
) J. H9 v4 t- y: b6 K
! d# u) i0 k2 G* G, u1 ~; b- char *dmabufsrc1 = NULL;
7 v6 W* M- H; w+ C7 a - char *dmabufsrc2 = NULL;
' r# j/ [, J% L4 ^ v) T8 n* l0 G( b - char *dmabufdest1 = NULL;
! K; ?3 z' x3 X# G% z, L3 P - char *dmabufdest2 = NULL;
* y1 J1 Z' X' l7 z6 T
) h& R3 i) ~4 N7 \; @. u- static int acnt = 512;
5 z3 c% k9 V3 H0 S5 q9 n$ N - static int bcnt = 8;
6 u: _5 X* `3 k' }* G* y5 b5 |1 @! p - static int ccnt = 8;8 {' a* C+ w, [+ w: b
- # i+ q# D* U: b9 [
- module_param(acnt, int, S_IRUGO);
( D8 d0 s9 f, B: n( z+ o+ I - module_param(bcnt, int, S_IRUGO);+ `- H2 c: u+ A
- module_param(ccnt, int, S_IRUGO);
复制代码 1 O* N% n& G2 a( Q
0 Q8 ]0 e+ d+ {3 V
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用+ U3 e0 y5 y; P2 Z5 u
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
2 \6 N/ r' j& V& u 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, C0 m& b% q2 y, s! r$ l3 E* V; c8 f8 R5 H0 ]
! E; [1 [5 b: j) j |
|