|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 5 i8 q7 D9 a9 u) s+ N
- [code]EDMA sample test application' Q6 z6 ^( T/ k5 P& F. D! u
- /*
0 H2 w6 T' I) F) [* v; h C$ t* p - * edma_test.c
" W/ }2 H( Z7 h# z( u! D - *2 j0 ]2 [, q' a$ c! ]
- * brief EDMA3 Test Application- U# j5 M' x- b5 f j2 p$ _
- *% |( |6 _6 n5 j7 j
- * This file contains EDMA3 Test code.6 _6 U* C7 V8 j, `! r
- * c% {) ^% A% |2 ]9 x4 m
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, {' R! K7 J2 s& Y* n - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT; t! N% i0 l8 Y+ Q# w7 ]0 Z( Y4 ^# {
- * TO CHANGE.
, U3 Y. k1 V* ^; `1 G! r - *
2 I8 ] j" ]* f* x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
' d5 z( r3 s6 j' U" B$ i) I: Y4 r - *
4 c8 _) u8 H: u" g4 Z - * This program is free software; you can redistribute it and/or+ x; Y, x C6 \# o. F. @
- * modify it under the terms of the GNU General Public License as
6 h K1 G ?1 z- J+ _ - * published by the Free Software Foundation version 2.) U( h: r/ T0 \8 \9 i
- * c( O, e3 W% _3 L& D e2 L
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" x( `; {2 i! x% d5 p1 E - * kind, whether express or implied; without even the implied warranty2 Q& |! k* L3 K
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 X6 R$ \' `- ^7 c& _; n7 B) M& w - * GNU General Public License for more details.# x9 V1 H6 J9 H, z, _
- */7 ?8 x5 l( Y' d8 D' z/ m
9 b3 y" @- j l. O# z- u* v- #include <linux/module.h>
+ f# n! X2 Z& x1 {3 q, C - #include <linux/init.h>* E3 m- R* w% T# T$ g; Y" s7 g
- #include <linux/errno.h>
& |; d: C% G/ T. w - #include <linux/types.h>% Q. S2 T% n1 Z' [. z
- #include <linux/interrupt.h>0 z4 d+ {: e k. C
- #include <asm/io.h>" c8 ?8 J: N* I6 F; W9 J
- #include <linux/moduleparam.h>
4 |" K, ` a8 i* Y- s" h# m- K - #include <linux/sysctl.h>/ b7 u) \+ B i( h$ n( O0 @% ~' b
- #include <linux/mm.h>
$ L4 A1 Q. i! x5 x( Z - #include <linux/dma-mapping.h>6 c0 N' Y* \, k( B( j
3 k& Y: N I1 s# K' X w' l$ X- #include <mach/memory.h>
d: W! f ~- q4 i0 |- ?9 W - #include <mach/hardware.h>
: Z: Z9 D# Q7 z - #include <mach/irqs.h>5 O, ]9 T/ V% e4 M
- #include <asm/hardware/edma.h>9 u! D4 p# e* d9 c) s2 d9 M" v
- a4 B* u5 Y/ t* R6 N- #undef EDMA3_DEBUG
# F' y/ W% [0 j/ ? - /*#define EDMA3_DEBUG*/
/ v/ \) C4 i1 T$ y5 O3 ] - , n6 Y ?6 P p8 V/ h7 ~
- #ifdef EDMA3_DEBUG9 D& ~* s0 S( ~0 f! b
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! p& o! `1 o6 U" j) w7 ^
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 X4 s! W& U' i# m3 f9 J! u y" b
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
1 M& a! O1 Q4 S- {/ A- Z - #else
6 @3 t' p# i7 ^, x5 x# I' S' D - #define DMA_PRINTK( x... )4 |! P* g: I6 D N0 H; U' u
- #define DMA_FN_IN% U2 h6 `) u* |. z& A0 N
- #define DMA_FN_OUT
9 `3 O9 L2 s! B5 d' g - #endif
8 T) N" X1 u5 P- m4 k, Z - % r. x2 _1 @6 U% Y( @$ V
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
4 }$ C; u+ h3 a8 Q' G; W/ D/ o - #define STATIC_SHIFT 3
4 z {# s+ N2 I% d8 K/ g' u3 P. {9 i5 D - #define TCINTEN_SHIFT 20; ^4 F& j' m3 c
- #define ITCINTEN_SHIFT 21
; W* ^+ L3 b) n# D' v0 s - #define TCCHEN_SHIFT 22
% J4 ?2 E: K' l( |& M - #define ITCCHEN_SHIFT 23
`* u5 S3 X7 X! |; }
" l3 G5 ]$ t4 F0 F" \- static volatile int irqraised1 = 0;
! W# ^" E) M+ B# I - static volatile int irqraised2 = 0;) W6 M1 V3 B: z# P
; f( Q) w) v9 n8 O! x- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- M' b }8 b% z: d
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& w9 s" v9 S' m5 A4 v
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 K2 s9 {0 D; Z! b9 `9 R - % U: h0 }# W, P( S! v* n9 ^
- dma_addr_t dmaphyssrc1 = 0;
# j o; D, r7 v0 Q- n& a% q8 ~ - dma_addr_t dmaphyssrc2 = 0;& @. g) K" A6 M: T% _
- dma_addr_t dmaphysdest1 = 0;
6 p+ L0 H2 U* J# g; R. B - dma_addr_t dmaphysdest2 = 0;
; j8 Z' P% m$ w+ D
/ { j5 o0 [; Z% p' C/ W7 I- char *dmabufsrc1 = NULL;
& x( ~8 u5 V. e& W* G3 z1 E- g - char *dmabufsrc2 = NULL; B2 U6 o; e# n! ^ D* B- Q: ~
- char *dmabufdest1 = NULL;' m; _9 M$ o* W1 D! S
- char *dmabufdest2 = NULL;
C$ ~6 ~. r9 M; f$ u8 }6 b - - x% t! b$ F4 Y; e, `/ z0 X1 M+ @
- static int acnt = 512;
0 ~" m0 f4 O( R" N3 C - static int bcnt = 8;& |( l" K4 o; t1 Z# V" Y
- static int ccnt = 8;5 s" }5 r: f6 J4 T9 Y6 l* D8 [
- 0 T! e( E/ k* Q% q2 c K
- module_param(acnt, int, S_IRUGO);
5 ^- N# I, U; K2 ]% C% ] - module_param(bcnt, int, S_IRUGO);
; r1 v( a, E% g9 t) o7 [ - module_param(ccnt, int, S_IRUGO);
复制代码 # b, {6 x6 Y: k: R1 k
; a+ H k* s/ c8 o 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# D& @$ o" n% m3 c) C5 K0 Zarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。( W; T4 p7 d' X' R! S
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( t0 w# Z7 M0 j! d* Q# A1 ^
' l: U3 ]6 C$ M9 J; B- X- \; [2 z
|
|