|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 * ~( x+ Y4 W4 D- O9 {1 g# I3 Y
- [code]EDMA sample test application( ^3 E% e# @6 _3 ]; a9 B/ y S
- /*
1 f; Z3 E: w( D8 J; P7 g - * edma_test.c& y3 S; u) ~1 T' y: D, w7 k* [6 U
- *7 r) @5 D9 [8 y' i2 b e
- * brief EDMA3 Test Application
% k( a( C0 W/ Y8 k7 Q& A* Q - *
1 u# w4 Z# v- m' B* K' { - * This file contains EDMA3 Test code.( j' ?7 k( s9 O5 [
- *( _7 u7 N- C5 G3 k% v! R! I5 |
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
% t) i/ V9 h* t: V# P! N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
5 h& \% u% i. C5 A3 r - * TO CHANGE.
/ E1 ~$ J. b, s7 ?1 M# t7 X9 u* ~ - *9 s7 h0 ^ R4 N0 q! I
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ W9 _0 i5 Q: f - ** b# Q4 @8 J0 W5 `/ T& T1 o
- * This program is free software; you can redistribute it and/or
, Q- i* Z3 {+ v, s& | - * modify it under the terms of the GNU General Public License as5 W$ r3 T! E8 q6 m. B
- * published by the Free Software Foundation version 2.5 g+ q* C% `6 Z# W
- *1 ?# B6 H& _) v# F$ s z8 d
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, ]6 L' d% J/ P% Y5 g - * kind, whether express or implied; without even the implied warranty3 X2 @; Z/ ?2 B# M/ E+ N
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. T, w# Y& s, w6 Q) o
- * GNU General Public License for more details.# y$ r/ k4 i ]' Z: H
- */
6 y' G: A5 w! ~0 o s: w9 J - ; r' P+ f: A( h" ?: ]; N s
- #include <linux/module.h>+ H8 w6 ~& I4 E+ f) U
- #include <linux/init.h>$ e. G) L; R: a4 D: I: m# Q
- #include <linux/errno.h>) K! q! @) F7 z8 c' }- O, b
- #include <linux/types.h>
+ m/ {6 M" ^4 i% B; X3 I - #include <linux/interrupt.h>1 {: p' }9 R3 V5 s) w# ?! w; u
- #include <asm/io.h>3 V' k4 j/ s8 h, d9 S
- #include <linux/moduleparam.h>
& J5 w# ~& D( ?+ s% q! q - #include <linux/sysctl.h>
/ b. q' h: c+ u2 h* Y5 @ - #include <linux/mm.h># f; ?9 L. |, G3 ]6 M1 u' V
- #include <linux/dma-mapping.h>( Y: ~& {7 E" p, h
5 ^% t+ D ~5 u5 P- O- #include <mach/memory.h>2 E( b/ Y' M" k" q5 i) h# z) X
- #include <mach/hardware.h>
/ H3 e: X" x" u - #include <mach/irqs.h>8 d( j6 b$ l. J" \
- #include <asm/hardware/edma.h>
- l" D7 x# @5 a% Y I - % j n; T& W' z0 w- `/ ^# e, [
- #undef EDMA3_DEBUG
$ V" R7 z# Y) i8 r# o5 g - /*#define EDMA3_DEBUG*/
# \8 R7 J/ G" f3 f8 r% u2 x - + A2 q( o# g, Y
- #ifdef EDMA3_DEBUG+ Q+ N; L4 H3 U m* L7 F# f
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
0 t4 j; S4 Y ?/ h: }2 g - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& P5 F, k8 n) a; p. \
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" s1 }. G" f4 P3 L+ g' d
- #else! J0 [. f y' E3 h5 m+ E5 @' \
- #define DMA_PRINTK( x... )/ D# F7 Z& ]! I! S% |
- #define DMA_FN_IN
9 V3 E5 @+ z4 R4 J - #define DMA_FN_OUT
8 x1 q8 l/ H3 W; f- s( N - #endif$ H9 d. P; ^8 w o* D- L! s
- ! J: E- S0 y0 S" i& m7 Z' v- @
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)8 S# l& u" [, ]$ z' a
- #define STATIC_SHIFT 3% e2 ]" ~0 c d ?% l6 c9 m7 x
- #define TCINTEN_SHIFT 20+ Z' x! V, t3 E! w! o7 }, f( B
- #define ITCINTEN_SHIFT 21
5 _- J( {: v1 w# K* @; g - #define TCCHEN_SHIFT 22
+ W9 K' R- j2 ^9 E C3 v9 F - #define ITCCHEN_SHIFT 23
0 u4 B; y2 r! ]# y& w4 g' A% G
0 M0 w% o; h9 g+ ?( W, H8 E5 c- static volatile int irqraised1 = 0;- S3 c z6 ^. Q, ~7 n t, B
- static volatile int irqraised2 = 0;3 Z: G' S; S% Z7 ~
- ' {6 d1 ^, k( `* e
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' j8 G, O4 F9 k/ P8 c( i. q y8 q
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
L4 }8 E r, t, q2 A0 h - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 M% N! H' a" x7 K, ?( U
& e7 Q2 R5 p/ l' o- dma_addr_t dmaphyssrc1 = 0;
2 m$ {0 }5 E# v. \- z - dma_addr_t dmaphyssrc2 = 0;& C+ z7 |2 `4 p0 A8 V" ~. B
- dma_addr_t dmaphysdest1 = 0;
! Q+ Z5 R7 A; a1 S - dma_addr_t dmaphysdest2 = 0;
5 W6 J; a1 n+ M; {( C
2 @ k1 O3 U; Y* v. \- char *dmabufsrc1 = NULL;
) u0 N4 n; V7 l6 Y - char *dmabufsrc2 = NULL;
q7 V; s- P# d* o9 N$ p - char *dmabufdest1 = NULL;
1 r: s" e" `, S4 ?% X9 @ - char *dmabufdest2 = NULL;4 ]: v& S }6 Z0 m+ p, E2 `+ x& h
- % W7 v4 s& P$ F, y( E
- static int acnt = 512;7 u4 ^: K( Z {. F$ V, z/ A
- static int bcnt = 8;
3 ~& J$ F9 D! h8 `5 T( n. d - static int ccnt = 8;+ i5 I R0 V! s$ | ] D; n
$ p, e6 a6 m2 \- module_param(acnt, int, S_IRUGO);
) @( S$ q4 K/ u7 {0 }- E - module_param(bcnt, int, S_IRUGO);
: ?2 B' f; p7 A - module_param(ccnt, int, S_IRUGO);
复制代码 ! C6 n" x! q8 B+ P6 n
" t% a1 c1 w4 T+ R0 o 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用, S& M1 s5 Y3 _' G. k7 h( g
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
L! q' d/ B4 X8 @) N/ J( Y: T 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
c2 @& a w1 Y* o9 E; h* x8 L! d8 Y" A) A( l$ Y* I
2 j# c- ? I/ G8 s1 t |
|