|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 " o( T6 l9 {6 z4 ^% r
- [code]EDMA sample test application
4 }3 a! ^! k: v# {* k# o - /*8 ^3 b0 @& F! g: k5 P& F: y
- * edma_test.c* E! k. l B& {' b
- *
& i% }1 y+ L- _+ ]! W0 o2 x$ s - * brief EDMA3 Test Application
- H' B6 y+ b7 @3 g0 g' \3 o - *; C S0 F0 c" @& s% W& Q! H
- * This file contains EDMA3 Test code.
( Q# b- C2 g7 j9 N - *
/ `# G8 v/ M8 Q - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( u; E3 R! O& k E- g; j* W; u
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# ]8 X6 L* [) y; X5 { - * TO CHANGE.
8 F, R5 Q6 x% E9 d b3 y - *
% t# m4 k& V) X& j1 U - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/2 d4 P. r0 e0 |1 O% \
- *
' c5 P' ]/ t& ~# n - * This program is free software; you can redistribute it and/or! Y* }9 \ }1 ?: _9 u+ r
- * modify it under the terms of the GNU General Public License as+ w( ]% K# S( n' u/ F
- * published by the Free Software Foundation version 2.9 ~' `* o+ B5 N/ x
- *
6 b) N, t) P3 J/ J - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- m3 F1 n$ b( g+ K0 i* v - * kind, whether express or implied; without even the implied warranty
4 ~; @* _( O& z8 t/ C - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' e0 y$ H- H5 `) t: v$ n
- * GNU General Public License for more details.
$ w0 x& y; K3 f7 G - */! z2 f3 m- }9 n: M
/ f1 S R) V2 r# N; u# m$ f; [- #include <linux/module.h>$ D2 M; Y# E0 s: r
- #include <linux/init.h>1 ]$ ] Y* b/ F4 M# {$ `7 }
- #include <linux/errno.h>) F$ ]& |2 @! {0 _( ]5 p
- #include <linux/types.h>
3 z7 I9 ~* X C! F" ?) M - #include <linux/interrupt.h>
/ S. f8 E9 f; B9 T - #include <asm/io.h>' s7 {+ Y4 i6 \( I, |
- #include <linux/moduleparam.h>
+ q4 j) D0 B( p+ u6 z. e9 \ - #include <linux/sysctl.h> Q1 j. n ~4 g8 u6 S9 U
- #include <linux/mm.h>; o6 e* I% N6 _4 R% ^9 R
- #include <linux/dma-mapping.h>' P. h. k d( Q
- * S+ y9 K: e- P
- #include <mach/memory.h>6 a: F) t- _% s# M( G% m
- #include <mach/hardware.h>% a# ^; M/ X, r6 t$ P2 N
- #include <mach/irqs.h>; `3 ] u) J1 E" o9 \8 Y( H/ e
- #include <asm/hardware/edma.h>8 n) n6 T) e0 [) t% y
- 9 l+ T7 Z( I4 ]- O2 F. \/ E* d/ U
- #undef EDMA3_DEBUG1 h9 v I f0 @" V
- /*#define EDMA3_DEBUG*/
( {0 r) n' a/ T2 s. R1 Z! H
* | C( ^, Z' c2 C- #ifdef EDMA3_DEBUG! A* |, y. |' i% C# t' S
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS). P7 P( F( {0 ~- U y3 `9 V0 m
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
9 q3 z5 q: Y; Y/ W) k6 H' E5 U - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)0 k2 z" G3 d! n. {- C
- #else d9 X; D! @ e m
- #define DMA_PRINTK( x... )
/ b7 M i) H5 @ Y - #define DMA_FN_IN
1 B# I9 u% [: ` - #define DMA_FN_OUT
8 A/ o" ~8 `5 S# H5 r8 e' e - #endif
' R, j- i% _' H7 p; h. U9 ^
' w0 b _8 k8 X$ a: y3 j" R- L! O- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ H* v! b' O9 \/ W4 a2 V- Q
- #define STATIC_SHIFT 3
# k7 u# j- t. F# c - #define TCINTEN_SHIFT 20
$ F# v/ h7 u" I: ^; p - #define ITCINTEN_SHIFT 21
8 M% C3 b6 O( b$ B - #define TCCHEN_SHIFT 22
: Q, A( M7 L0 h9 A4 i - #define ITCCHEN_SHIFT 23% _0 Z4 Y; e1 K. C
- ) n( R- i$ s& B" A& b1 l: D0 K
- static volatile int irqraised1 = 0;
: K/ j! v; R$ W9 F' R! v$ Z - static volatile int irqraised2 = 0;
" a7 i% f. ^1 V0 F; a4 }& h
- ]0 M+ }; g- j8 r1 w( }" v- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' e% l* N7 K, x' v' C$ s
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 \3 f; m3 L B8 z- g! L2 A - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. x6 i# e2 R& Q3 G5 O) S
- 2 P4 R7 {: W9 \" ]
- dma_addr_t dmaphyssrc1 = 0;/ \; D, J: c( F @% T; Z
- dma_addr_t dmaphyssrc2 = 0;
# X. r! t2 J8 q9 c1 x* z - dma_addr_t dmaphysdest1 = 0;
2 M: V( s( ]- S - dma_addr_t dmaphysdest2 = 0;, W4 p8 S: ]* G- x
- : Z+ l' l( ?5 Z7 D1 M5 {
- char *dmabufsrc1 = NULL;5 p9 E" N4 {7 Y: A* V8 w1 O4 t$ p
- char *dmabufsrc2 = NULL;$ G& y, s$ l. H' d4 {8 }
- char *dmabufdest1 = NULL;, E) y4 @9 Q- }1 G d0 q0 G2 i
- char *dmabufdest2 = NULL;
0 u1 b. Q" Q7 q& m6 v. S4 {. e$ v# K
" M" X7 y; l, [- static int acnt = 512;
! K" E; c. v% s" [ - static int bcnt = 8;2 f; i4 G3 Y4 e8 x$ R0 h k
- static int ccnt = 8;
* N- ~# r$ c( i0 \ - : k3 u' G/ _" m0 ^8 l& h
- module_param(acnt, int, S_IRUGO);2 S0 |, r; L7 Q, |
- module_param(bcnt, int, S_IRUGO);
+ f4 I% j' W4 w/ e4 c7 _ - module_param(ccnt, int, S_IRUGO);
复制代码 : B+ t; j0 f. \- s
* J2 ?) J7 }" j3 a$ R+ p3 y! H+ T- @( q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
$ K2 u+ _ h1 t t1 Parm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ [9 c3 B, v4 I Q2 L. G! D5 p) ? 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
2 _! {: r; x9 K* Y( e$ G. o/ R* K( _$ c4 r5 `6 }: _+ K7 e
& j* ?0 @! u' u+ o. f' A |
|