|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 \* f( b! c1 s5 t) S
- [code]EDMA sample test application, R( U i/ [5 d8 }; ]4 |$ I
- /*
1 v" @2 ~% i% d0 l& C9 q! a. Q - * edma_test.c
) o3 l9 f4 i9 I9 o* V5 C - *- b+ m0 E$ W+ a; {- P
- * brief EDMA3 Test Application
8 L2 x" k! M* Q- x9 p - *
4 m: g$ Z7 w! z( q; Y - * This file contains EDMA3 Test code.
( ^# i. T7 P: {; F W$ ]! o - *
. J& ]$ K, Y' _$ h! \ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 o- k; `! _" j K - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# L a+ _6 R' Y T8 ` - * TO CHANGE.0 R4 K" _* J7 V
- *
% N2 I' u4 f- [# ]/ v- K& U/ Z - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
: \8 T1 T8 D3 c& I - *
" Q7 j( O9 n4 m - * This program is free software; you can redistribute it and/or: O! L2 v/ ?# f& ]
- * modify it under the terms of the GNU General Public License as5 F1 |/ ?( c2 r! ^1 S8 d8 p
- * published by the Free Software Foundation version 2./ E. N/ k* q; e. j% G$ x4 d; |
- *
+ y$ O* k$ v9 ]" s - * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 _' ^: [9 T+ r( ~% ~2 ?/ ]
- * kind, whether express or implied; without even the implied warranty* {% h% o% k' P9 Z% f
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 U8 g4 A. E2 a7 k: T) D0 D
- * GNU General Public License for more details.% F K0 y/ y( T! e1 S
- */0 X0 s7 ~" d( [3 F6 c; a$ L0 |0 M" [
. F& h! z8 ?: _+ `! t- #include <linux/module.h> Y' v# i$ ]7 I( b
- #include <linux/init.h> @+ \3 k \# v A9 D' {; m4 Z
- #include <linux/errno.h>1 V+ ^! a, @5 X7 i
- #include <linux/types.h>
( X2 h# T6 Q7 p' d) ^' [4 _- o) B - #include <linux/interrupt.h>
) d2 k( s2 C8 ^9 z1 `! f# n6 G" P - #include <asm/io.h>
9 p' \$ A l+ y - #include <linux/moduleparam.h>$ u9 T4 ?6 l! C, U/ t3 P0 ~
- #include <linux/sysctl.h># D. T# T; A! X4 n
- #include <linux/mm.h> k& v% d9 K* H# b4 E( S
- #include <linux/dma-mapping.h>3 t1 h7 \7 F2 P% c* X4 \' n
- ( A' w! O, v9 j% o+ o
- #include <mach/memory.h>/ f$ ^1 o+ s3 j
- #include <mach/hardware.h>
% F/ [, c+ K3 N W8 ^ @ - #include <mach/irqs.h>
/ }2 W* K& i9 P5 t' x9 L - #include <asm/hardware/edma.h>2 v% r1 g- Y+ h6 D z3 M# P: b
- & K1 C- e! e: d- @9 P$ m1 e: z
- #undef EDMA3_DEBUG, a! {( q$ z/ `
- /*#define EDMA3_DEBUG*/
7 {8 j/ W5 J4 z( u8 w9 r B. z
8 a! ]2 i0 _* ~9 B8 ^& o- #ifdef EDMA3_DEBUG, d/ H* f- N1 X. k2 I0 o
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
j1 A1 M% L5 ~: B/ R - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
* ?9 `4 ^ D2 k8 m8 `0 J2 E$ |$ f - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* T0 ^! ?8 J4 e - #else6 I! x4 h% E' ^) l" x* G, ~4 c! l8 B3 {
- #define DMA_PRINTK( x... )) |' Q( t3 {6 s! u2 K
- #define DMA_FN_IN" e. G5 `' \; P8 v9 F+ y! a) w9 U
- #define DMA_FN_OUT
3 c! F' }: d- A- V - #endif
`8 O1 F+ X {- o5 P' ]; b) N
- N2 K& O2 E& K y# l. g. {5 V- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
. \" K- Y) ]' Y" n - #define STATIC_SHIFT 3+ a! w: r, h) M' ?( `
- #define TCINTEN_SHIFT 209 Q3 n% L2 S1 l3 f: J3 z, X- N
- #define ITCINTEN_SHIFT 21 ^( h7 z0 r& E% H7 T6 U8 T
- #define TCCHEN_SHIFT 22
9 j3 }1 u# |/ ^8 R0 B3 D7 @ - #define ITCCHEN_SHIFT 23
2 W' d8 A) T$ [, v: \ - , C% F# _8 P' ^. Y. L
- static volatile int irqraised1 = 0;5 a o! ^8 O! D* ?# n
- static volatile int irqraised2 = 0;1 J: ^$ \+ O5 Y/ ~" v
) [' v: T2 |/ f q; h- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 X; x! p& }2 _ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# I$ G8 z. }* A& M* X2 q- ? - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) U3 H! e m4 q; C* C% U
- ) ~0 W( i, j4 W! j
- dma_addr_t dmaphyssrc1 = 0;9 N% L4 s& ?6 e# W L
- dma_addr_t dmaphyssrc2 = 0;
2 A! J2 D! F1 i- l4 W+ s6 F; S& m, \ - dma_addr_t dmaphysdest1 = 0;
+ \4 x* H7 z' W" h! t: W - dma_addr_t dmaphysdest2 = 0;+ J$ Y8 I u H1 L
6 |, A# C- a, U# Q- char *dmabufsrc1 = NULL;& _* Q+ n+ @$ m+ b. j2 ^( ~
- char *dmabufsrc2 = NULL;
3 g$ `; [7 {- ~0 H( p - char *dmabufdest1 = NULL;9 E# w; S5 c! Q' @3 d! G
- char *dmabufdest2 = NULL;
6 E5 p. l9 e3 q8 N( q' U3 z - 5 R7 f! H1 \% G; m6 C& l% m* D6 q6 t
- static int acnt = 512;
% d2 E. U7 J! r - static int bcnt = 8;$ f3 S R+ g9 Y+ i2 H" o7 v
- static int ccnt = 8;% w1 f$ ?- v6 n5 r/ r
. `+ g: X. J9 M! ~. a% O- module_param(acnt, int, S_IRUGO);
) n5 A4 j- E. |: L - module_param(bcnt, int, S_IRUGO);4 N! l- ]8 B8 L/ Z/ B- Y& s" D
- module_param(ccnt, int, S_IRUGO);
复制代码 9 {& p: B- l. ?& l! V
6 o) u4 K* k& N; e/ Z6 J 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 `6 I3 U6 g& ?8 P
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
, x6 o' h J1 \8 `: Z6 c1 n/ d } 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。5 \7 X$ V: B* U) d3 {1 n
3 K; G1 _3 f. d8 P6 Q1 l* K7 B% r# k! a* ~1 }' a( n2 j j
|
|