|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
7 v$ y% h k; _- [code]EDMA sample test application
. [2 T' S3 K0 [ - /*. v0 ?/ g4 Y3 j; x% `$ A+ h5 R
- * edma_test.c0 x' O9 h8 K" O& n% ?* m _, ?/ H
- *1 t) s0 V% j* w4 j5 O) T6 M" h
- * brief EDMA3 Test Application1 c f" W& W( l$ W) R+ S# X
- *8 e- G4 F: k+ q& O
- * This file contains EDMA3 Test code.
1 a i1 b! V1 _& F0 d - *
+ q* x0 W7 A2 d5 p& ~ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
$ s. x2 c& E6 K! x% P - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
, v0 ]6 J4 y4 B- \0 Q+ A0 W - * TO CHANGE.
( C, f- T% Q! u- [% Z - *
& S; _+ T: q& k1 x" U; c$ { - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
l- Z6 H4 G: W - *2 M M* k4 v$ o7 Z J, I0 w
- * This program is free software; you can redistribute it and/or2 L7 J& C# u' m/ p& b5 C
- * modify it under the terms of the GNU General Public License as! r6 d& \7 D* M7 \- |# C _
- * published by the Free Software Foundation version 2.
; j* B- q9 H$ T% F; K5 ?' k - *
: f; K2 m1 A( H- v - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
/ I* D% y. r( A, I* G0 b - * kind, whether express or implied; without even the implied warranty
$ {5 ~8 I- G7 C; v' d- ` - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
H! f* x/ L; v/ L; O0 l$ X% P - * GNU General Public License for more details. e; I5 d5 v2 p# D# ?
- */
# f' @/ z9 B$ P; }+ N - ! B' q" T$ v5 U$ ~
- #include <linux/module.h>* q( k* m# w2 J
- #include <linux/init.h>1 ]( M; U9 @% j
- #include <linux/errno.h>) _9 }. v o% t+ Y4 H
- #include <linux/types.h>5 I; r, r% Z( u7 D6 r- q9 M
- #include <linux/interrupt.h>' o( G: M8 I- Q4 E' e( E
- #include <asm/io.h>! w2 B" N' }4 Y( k
- #include <linux/moduleparam.h>/ x ]( g, e2 @: O* X7 Q' _
- #include <linux/sysctl.h>, n9 q( M# L! Q$ Q' u
- #include <linux/mm.h>
% `; L$ w9 a+ V* K, l L - #include <linux/dma-mapping.h>( x9 O: n2 y, s K( U0 U
- 5 F0 C( [, e! e1 [# e8 `
- #include <mach/memory.h>
4 A/ r: c& n1 d% F! o0 | - #include <mach/hardware.h>
" C# J1 V0 h; l - #include <mach/irqs.h>
+ f* p( U0 d6 K, L5 T7 k8 \- \ - #include <asm/hardware/edma.h>
u% k; v: M7 [* E/ D) E - 4 l* }* M4 l2 `8 M9 S5 M! c9 H
- #undef EDMA3_DEBUG
& ~' `. H) e: ~1 J- L$ \" @ - /*#define EDMA3_DEBUG*/6 I5 E/ l7 X+ v
" t9 Y! U/ F2 C. Y9 C7 ?- #ifdef EDMA3_DEBUG
1 G2 t3 D# s6 @/ q0 M& b - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
+ L' X7 |- q9 r+ W! A/ n" M$ U- p- s - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)" B4 F) S1 u$ @( [
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* x1 D" x" M# D% ~6 v) W! x - #else; w7 v0 u0 S( F& M
- #define DMA_PRINTK( x... )% r: h& o% x: \& X/ ]" [
- #define DMA_FN_IN
8 c6 ?/ g! L" B. U - #define DMA_FN_OUT
, \9 u4 K9 ]; u8 u - #endif
% _( H2 K- l+ h; ^% @) r5 v+ ]
5 b- V7 `6 I5 U- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
2 c4 R5 M3 s/ Y7 ~8 p - #define STATIC_SHIFT 3* Q' y' @4 @5 J6 k& a
- #define TCINTEN_SHIFT 200 v7 Q: E7 ^2 l! F- C! }0 M* B, h
- #define ITCINTEN_SHIFT 21
5 f, w3 Q* v4 U3 G4 H" M - #define TCCHEN_SHIFT 22
4 u3 r7 m l2 {5 Z2 s. c - #define ITCCHEN_SHIFT 23) s* ]+ ^9 Y# l! @$ E5 H/ c' C
- ; U& [! s- Z$ l6 l3 ~
- static volatile int irqraised1 = 0;" l9 Z& M2 _) Z7 o1 U
- static volatile int irqraised2 = 0;' ^2 O/ i" L# l# E
- + e1 m0 D* G8 W1 O5 ]. j# A
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 |1 Y, \! F6 R
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ j6 X3 X. g3 Q& K; O% O; Q+ ]
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 ?& z" ` n0 e9 n z# {
- 5 G8 W* G B% i0 X- ^' b
- dma_addr_t dmaphyssrc1 = 0;$ g. ~4 F- W3 Z/ f1 }' Z9 `# a
- dma_addr_t dmaphyssrc2 = 0;
( {# [4 ^: ?: N& e* n - dma_addr_t dmaphysdest1 = 0;
1 X; j+ Q" o0 E+ T ] b$ [1 r0 z" P - dma_addr_t dmaphysdest2 = 0;
( U# y) B* ~, Y) @+ w) s3 w2 [
% u) D1 K5 S7 D! d( r4 Q) w* o% C+ K( R- char *dmabufsrc1 = NULL;2 [; o1 i1 {, r" i& |9 m
- char *dmabufsrc2 = NULL;
. m7 H3 Z" G6 F: l8 k, W% R% ?0 o' a - char *dmabufdest1 = NULL;9 j. @$ S. O4 l' _9 q G7 f# Q2 c; t
- char *dmabufdest2 = NULL;
. F" R- [0 @, \1 R
( G& T- c, T8 v/ d+ Q& U- static int acnt = 512;0 k; v( D5 ~* e+ @
- static int bcnt = 8;
8 F0 G Q7 V+ f t9 n9 _. v - static int ccnt = 8;* G$ q! T, q' k0 W& ?3 a0 g
- / H4 I" j8 {% w2 t' F, d: s1 X" M
- module_param(acnt, int, S_IRUGO);
/ D" ?" o$ l: I - module_param(bcnt, int, S_IRUGO);
% C0 J! a1 W9 K - module_param(ccnt, int, S_IRUGO);
复制代码
. K0 k7 t+ b! h/ x
2 M& }2 @' {. N; ^ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! R* ]& [" z% k% o$ C' i( iarm-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 M J' c) Z' N5 w5 a* f9 v3 n 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。( q9 l4 u" t- D; j4 p" n: j5 q! c3 Z
* T! g- v, u! R5 b. q$ {4 G
7 _3 A. d: o! s0 ?& K |
|