|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: T5 A' F/ L. k6 V! J- @9 \9 G5 `- [code]EDMA sample test application
: J1 ]3 {9 f, ~3 J( U6 C l - /*8 z, r7 s4 \- t6 M& o6 ~* @
- * edma_test.c
5 m7 w& C# [) K& ^. a5 W9 r! C - *; O$ h! I$ K6 p/ [
- * brief EDMA3 Test Application
, ^ s" ^. D# N) w( `! t( H - *% y4 N; s7 f# X# h; G
- * This file contains EDMA3 Test code.
( k, X' S9 n; @) {. m0 @ - *
y" M$ I6 w0 ~5 I; A* ? - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE4 d% N- c6 s7 u5 G# S
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT q% s* u9 N& N/ ^
- * TO CHANGE.
4 s6 v& L: m! r- M - *+ `* H) I* _8 s% Z! R) \ g
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/9 t) A* O) z: P- Z' ^! a: u, P
- * w- o3 B! u/ v
- * This program is free software; you can redistribute it and/or
$ v; w. E5 e$ _# `$ X' j0 |4 p - * modify it under the terms of the GNU General Public License as( x, T: u" A: Q# ]0 T
- * published by the Free Software Foundation version 2.9 M5 Y1 J9 G7 ^8 E
- *
2 F/ { X7 K- C& Y; r - * This program is distributed "as is" WITHOUT ANY WARRANTY of any; i( S t. a9 d' c$ k0 P/ M# m
- * kind, whether express or implied; without even the implied warranty% e: A) h! p, d) A- @2 _4 p
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
: S3 E) c* R! r - * GNU General Public License for more details.- q: c$ }' p0 v' q7 k
- */
! D w! W. G# z7 f1 v
3 N( a8 B/ [. z9 v1 U, K0 u1 f, \- #include <linux/module.h>' {- r2 l% d. t( B+ D+ _
- #include <linux/init.h>
( L( \/ J* M9 |! O0 w1 f - #include <linux/errno.h>: e: c$ @, p8 z' a
- #include <linux/types.h>, s- u6 h- q$ H d# M: }3 U
- #include <linux/interrupt.h>
( B0 V- j; S! B' ^. R - #include <asm/io.h>
0 D/ n6 z) }( U- A: X R - #include <linux/moduleparam.h>
6 Y, z( z! R- S6 P- v - #include <linux/sysctl.h>
& y: u5 X4 g+ E% U3 Z& V - #include <linux/mm.h>
# ?9 G2 u% v* R2 l7 I# V - #include <linux/dma-mapping.h>0 W* ? Q. z; L% O8 s
7 @' a+ \3 Y! |! L/ [- #include <mach/memory.h># o" g( E& Y8 ]3 s# J: B
- #include <mach/hardware.h>0 C7 ~2 \6 j6 J! K: j
- #include <mach/irqs.h>6 v- j: L6 ?+ j: s% A* q# T; t9 E
- #include <asm/hardware/edma.h>
) u% h u8 b! V* O( ~8 N9 C
2 x. F& r, {4 x- #undef EDMA3_DEBUG) b2 D+ E& j' E* F
- /*#define EDMA3_DEBUG*/
, d1 m l$ h5 X3 [- J4 K0 t2 {8 T. r
0 G# Q* E' O2 V) z1 n- #ifdef EDMA3_DEBUG: [2 T8 f% A% o7 @) x$ y9 w! n& ]) \
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS). ^$ }& x" m$ d( b8 a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
9 M) e4 e* V4 P - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
5 y# X( z% k S; D+ j1 \ - #else
4 l" \$ |9 p) n* w - #define DMA_PRINTK( x... )- ?( S& E: q: P% y. W# q
- #define DMA_FN_IN
) H! v1 w& b( j( N/ ?4 w - #define DMA_FN_OUT5 ]+ N6 ]/ V ~; ~" ^
- #endif3 V2 x5 P8 o2 ?; u
% J3 N0 U7 H( R$ j9 u: Y- D S4 U- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
, ?+ a# O. O5 t - #define STATIC_SHIFT 3, ?. X m, F' h" j0 a
- #define TCINTEN_SHIFT 20; x0 s0 ^% w. ~- |. d& b3 Q n
- #define ITCINTEN_SHIFT 21
1 P/ P0 W4 M! A - #define TCCHEN_SHIFT 22
& f. d0 p. g7 f$ Y8 e - #define ITCCHEN_SHIFT 23
" [+ v! M3 S# a8 q; Y9 ^
: L8 x& e! ]8 t+ s- static volatile int irqraised1 = 0;
- v* c1 b& }; }1 k - static volatile int irqraised2 = 0;+ b d) d9 h$ `! z2 V0 O
- 2 d* v; K+ M$ C: m
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& F% `0 ?6 D# |9 `+ m/ Z - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. u; h* E' d4 A8 |1 O* N - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 ?! O$ d7 _# y - 5 M" {: s; z6 X$ o/ W
- dma_addr_t dmaphyssrc1 = 0;7 G& T" }/ J$ @6 i9 F5 Y
- dma_addr_t dmaphyssrc2 = 0;
+ ?4 x9 V5 p2 Z: [8 y - dma_addr_t dmaphysdest1 = 0;2 n1 W* p& I! Z# v/ C
- dma_addr_t dmaphysdest2 = 0;; y ^5 D' `% g6 z" o
: w: h0 @3 {: I/ c$ f3 Z- char *dmabufsrc1 = NULL;
1 E+ O# y1 |) d - char *dmabufsrc2 = NULL;- ?! I9 l j, H4 T1 G d
- char *dmabufdest1 = NULL;- t. M% Q/ y k- T; y" m0 P
- char *dmabufdest2 = NULL;7 m. ?1 f( C/ X% q
6 G, v) h" n' L" E3 u- static int acnt = 512;
: s- r# `6 F+ Q! r3 a - static int bcnt = 8;
4 P8 ~( N3 w/ M# F3 S8 v. h0 w0 r - static int ccnt = 8;, f; m5 K( ]& ~* @' i/ T
. |; L8 Z$ K S% f0 G0 \; K- module_param(acnt, int, S_IRUGO);( [- v2 w; m3 G$ \
- module_param(bcnt, int, S_IRUGO);
0 O/ U0 K/ \: s$ B - module_param(ccnt, int, S_IRUGO);
复制代码 7 K. \$ R* k3 M
$ s4 \3 Y1 y5 _! K 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用/ G$ P# T8 K, 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
% ^4 v. R/ z! l) I 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ `+ {! b! O$ [/ I2 _ I: D* o
- @5 Z1 g4 D5 c+ A& Y
$ K; f+ r V1 q( z F2 t |
|