|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
$ t* Q6 g0 t# {6 S3 D! ?- [code]EDMA sample test application
* p5 J# `8 m. X3 G - /*5 N- V, [) b6 [5 P2 i. {
- * edma_test.c$ ]. Y; }' A" _3 Z: g- q, f8 `; s
- *8 M- M& E" `- M: I2 I
- * brief EDMA3 Test Application% o: K" `; s a5 n/ ?+ V
- *
6 K. Q& v! V9 @( i - * This file contains EDMA3 Test code.- U+ ~* s0 J! d2 X$ z I
- *, ]. B0 J% j+ r
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
4 V( K5 l, |7 A1 R; m) }/ u; t - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
@" d4 |& A( ?* k - * TO CHANGE.
9 X; w$ J$ {: A$ `1 [ ` - *5 R2 l z0 P# m1 F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
5 g9 g- Y! p- c& V: D5 ~. o# c! X; H - *
$ g7 c. \/ Z' q+ A+ [) Z/ l, L - * This program is free software; you can redistribute it and/or
- s, Y) A6 n8 i: L! }% U: { - * modify it under the terms of the GNU General Public License as$ {8 a: K8 ?. h" h& X# c' h( }
- * published by the Free Software Foundation version 2.( h$ Z- P4 X+ V& X+ q8 w/ M
- *7 X, } q5 a* r; c0 v8 @+ W7 s
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
S7 T6 I0 [; B. e" m/ b - * kind, whether express or implied; without even the implied warranty4 Q0 A1 O# `! b( l* |' K" }
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 t8 K$ i8 ^, W6 {; r4 W: v; b# j - * GNU General Public License for more details.8 H6 [$ W% W7 z) c0 c
- */
5 {. @/ l% x: s6 s0 _
7 f8 A) u8 B8 p2 f/ \. U2 D- #include <linux/module.h>
+ H/ y! H- G/ n O4 f7 U - #include <linux/init.h>
9 n/ ?/ H5 _* H - #include <linux/errno.h>
5 y8 C9 |3 _3 S# P, f" p0 X' T4 a - #include <linux/types.h>% w( _4 i0 N. n$ K" A) n8 P
- #include <linux/interrupt.h>
$ X, r* }; T1 A- N3 V8 Q! i9 W7 ` - #include <asm/io.h> [3 r5 v( @8 W/ k% P
- #include <linux/moduleparam.h>
: q- v7 Z$ T% ]- t - #include <linux/sysctl.h>
( x% z, A9 X3 p) F7 B! h) k5 I7 \) F - #include <linux/mm.h>
* R5 x6 D% Q# z4 A. s+ ] - #include <linux/dma-mapping.h>2 |1 s4 \( ?0 b) s
- * k* }2 w7 Z: Q& Q
- #include <mach/memory.h> Q( R1 G K" \" W' C1 V
- #include <mach/hardware.h># T. T& k0 Z6 G- e6 H) x
- #include <mach/irqs.h>3 n- a5 g7 ^) q5 @- \
- #include <asm/hardware/edma.h>: @ B7 Z( `; |; t. c
0 @! P9 d( V j$ z O8 @6 @. C- #undef EDMA3_DEBUG( N+ t5 m2 a3 L9 b# Z
- /*#define EDMA3_DEBUG*/
C, ^# |2 s; o# B; M) N - # K! j: f- [/ t. v; E' \
- #ifdef EDMA3_DEBUG
! e# L# V9 f- D- d - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) O2 \2 C8 ~' l7 D# K) I - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
" H; n d4 ]; D; \5 | - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 X6 m) S% u. C; ] - #else
6 g, b! R2 E8 b8 G/ o- i% T - #define DMA_PRINTK( x... )# n1 t( K. L# y% W0 F
- #define DMA_FN_IN
/ @. }- l9 e& Y$ s, ` - #define DMA_FN_OUT
2 }7 o( @, j+ _8 [6 v$ E% d, w - #endif
% j, N2 V" }/ s2 g
- l' T! F5 Q; `1 W, n" ]- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 Y3 X9 l- a1 T- |- Y0 r4 i - #define STATIC_SHIFT 3
# D$ I _/ x( B' l. m. Y$ C7 V - #define TCINTEN_SHIFT 200 t+ o. S2 i% z7 T& v4 n
- #define ITCINTEN_SHIFT 21" R6 h* ` b7 A8 T+ f# T
- #define TCCHEN_SHIFT 22' \5 w5 ~( H- D ^) F5 l" v7 d
- #define ITCCHEN_SHIFT 23
; W6 [3 W% }% v# {- S
: z( S3 p6 f) F U$ g& y& z- static volatile int irqraised1 = 0;3 a' X; M: n5 s
- static volatile int irqraised2 = 0;. m2 v( d, o) K$ `: `. V- K1 \2 ^
" \1 C) C9 V9 o5 Z& W9 q3 g- S- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, ^ V/ C9 c1 ]$ ^ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 a8 n/ H5 j/ L - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* ]1 p: w& q* v! ]6 @ J
- * n6 ?% u! f' s; r- {
- dma_addr_t dmaphyssrc1 = 0;" u1 _" t* I$ \: f7 `+ A: d1 ?* ^
- dma_addr_t dmaphyssrc2 = 0;7 s9 @2 y: B: ~# J) a( e! L7 O- a
- dma_addr_t dmaphysdest1 = 0;3 a9 E1 C6 R4 I) p* J- H2 X, `8 Q
- dma_addr_t dmaphysdest2 = 0;
& G! y" l A4 v7 [
% P' u& o" N. Z0 X' K3 N- char *dmabufsrc1 = NULL;! a) ?$ w0 k. R
- char *dmabufsrc2 = NULL;6 N: p& q7 [2 H; }7 ^4 `
- char *dmabufdest1 = NULL;
. r6 @3 ~: h8 t7 ~ - char *dmabufdest2 = NULL;
m o& c/ s9 z$ E* I& n" \5 ^
5 q {# a3 Q8 c3 @% v6 d5 v7 s- static int acnt = 512;
% B( `8 T( W: p0 v* r - static int bcnt = 8;. g# k. L8 U, E7 _' T7 f7 w
- static int ccnt = 8;
8 J9 {% l0 C2 [8 H- c4 D - 2 b: \$ a+ G0 K. D" F& |7 \0 p
- module_param(acnt, int, S_IRUGO);
, Y% J. Q" }& X3 E* } - module_param(bcnt, int, S_IRUGO);6 h. t/ H' ]. u/ Y
- module_param(ccnt, int, S_IRUGO);
复制代码 # Z, N- c# b$ F4 H1 _$ I# l
* h2 O$ l9 }- }; m) e 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 w' {- h1 E' Xarm-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 R& | O1 ]$ X. F
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
% e* b4 m% l5 e& i
4 N/ N1 Q% D& M! D4 X
. r0 m' m8 l4 L2 m. w. { |
|