|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ?& |0 ~# i9 d0 \1 C& ^. w% D
- [code]EDMA sample test application
4 W9 U" y( O; F9 ^ - /*
. Z! d0 _! N0 a' K+ e# e* s - * edma_test.c; E3 f( a u( Y( v. [
- *
: w& S( a8 d6 \) Q/ W0 D& L - * brief EDMA3 Test Application, p) T9 M) u9 g- a
- *
" r1 J7 R& u% g1 ]2 I9 y - * This file contains EDMA3 Test code.
/ q; p7 ~% \0 @ - *# G- H, z! \1 g0 r( P" t: |
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% q( ^5 i# e4 a Y0 h' p
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# w' h4 { q# I' {+ ?4 l* s
- * TO CHANGE.6 H3 [, S2 l# q. q3 o
- *7 c: R# }2 c) u* @ Q% I0 s- m( ^9 T" L9 U
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 N& g6 M& q U( K7 F: I. M7 L - *
2 r2 H8 D7 o4 q: e$ d: R4 w: I - * This program is free software; you can redistribute it and/or0 T5 l1 b8 F& x. K
- * modify it under the terms of the GNU General Public License as
! y$ p, g7 a! N- H' K+ _ - * published by the Free Software Foundation version 2.
# r5 | `" @" m- A - *6 e) _+ Q& s, T0 P( T) |
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 z) O5 F* C& |1 @/ ] - * kind, whether express or implied; without even the implied warranty
2 o) B7 B+ y* J$ { - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* J( B Y% K; u+ a9 u0 q: C
- * GNU General Public License for more details.$ u* B4 f* w# f3 Q% b2 W# u
- */
, F( }& j, e& ]3 w/ X; w9 ]9 ~
% x0 W- \9 {% Q+ r8 ?% s3 s1 g- #include <linux/module.h>
9 A/ ~ m. N5 _7 k7 Y6 z- b - #include <linux/init.h>2 z( s" n) h$ h4 x" C2 E: V
- #include <linux/errno.h>8 g$ v% A$ k) k8 H% n# x7 G
- #include <linux/types.h>5 _8 L- T# B) |
- #include <linux/interrupt.h>
0 j2 L% B0 T# s/ k6 q - #include <asm/io.h>
$ O+ A1 d+ E9 i: w. D - #include <linux/moduleparam.h>) l; e6 u8 k3 g5 q% y/ I3 u
- #include <linux/sysctl.h>
2 u; s# k6 ~3 ]1 j/ I - #include <linux/mm.h>3 i- P7 T0 j! m
- #include <linux/dma-mapping.h>: C$ [: e# _. s; k
- ; }, B% k& q$ F+ s
- #include <mach/memory.h>2 V+ c, v6 J1 o4 V1 \
- #include <mach/hardware.h>
; p3 [+ d3 R. {( y: ]# z4 U - #include <mach/irqs.h>0 E A! M; i/ r# t
- #include <asm/hardware/edma.h>
& j4 K" c. e& \% w! a0 l1 [6 v - / }" ] r4 |9 s( X4 j
- #undef EDMA3_DEBUG0 q5 ~% A* F% z. j
- /*#define EDMA3_DEBUG*/
: s% a$ |* F0 l
) S6 J- H0 J$ d2 K- #ifdef EDMA3_DEBUG
7 z; q/ t2 X. Q, V - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* ]. w! C1 y8 t- e6 r - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)4 [2 A+ A9 |4 g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) y9 ?9 O7 _( V3 | ?
- #else! I, B0 U0 ?, [, a; a) [, I
- #define DMA_PRINTK( x... )
- V9 s% Z9 ?5 K1 v6 u6 A; u - #define DMA_FN_IN4 D$ ?1 L' s. F) x8 ?: V. W, N2 M
- #define DMA_FN_OUT* k4 \, j$ Y% y7 }
- #endif
1 h7 b: N5 K6 ] - ( m3 |2 u" q3 g2 n h7 V
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)2 \: f- ~3 k8 Q8 j
- #define STATIC_SHIFT 3
: \# _0 Z2 L3 k. y) {" R - #define TCINTEN_SHIFT 20
( c% C) z' s% [8 Z6 @$ v) [ - #define ITCINTEN_SHIFT 21
; k# R; }' F* \4 @+ p7 }- u% E - #define TCCHEN_SHIFT 22& N2 U; W: ]; z p8 `
- #define ITCCHEN_SHIFT 23
* o' g, l; y( s, ?$ M- O - & j5 o7 v; d% g
- static volatile int irqraised1 = 0;
% m: B0 h: l) O6 U f - static volatile int irqraised2 = 0;
1 [' O8 s+ O- c - " ^! l+ Z" G D1 c
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- _1 e5 Z2 W8 b k
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- m; a1 E$ G3 s' E9 @
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% ?% _: d/ |. ^6 s" Q( B
* T$ n# I, @. s* c( C( H! F- dma_addr_t dmaphyssrc1 = 0;0 t- ?( T- g5 W/ [9 m
- dma_addr_t dmaphyssrc2 = 0;
* Y+ [0 g6 x! R5 a* O - dma_addr_t dmaphysdest1 = 0;+ J8 E$ o" J; A: h* g. O0 v- [
- dma_addr_t dmaphysdest2 = 0;
3 ?; T4 T+ ^' U W; U
6 x1 k+ H) E, S* E$ Z$ C- char *dmabufsrc1 = NULL;+ R! V) p& ?! N- l" ?
- char *dmabufsrc2 = NULL;$ p! @- w3 c$ Z
- char *dmabufdest1 = NULL;
' L9 {9 N/ s7 o7 |3 W - char *dmabufdest2 = NULL;) y0 O0 ^6 i0 P- t- p+ `
' X# W' s6 y9 S8 z- static int acnt = 512;
( v* v v! ?8 s C - static int bcnt = 8;3 I9 _5 f, H k" W
- static int ccnt = 8;
% @: h2 @! W* s$ x - 9 K6 ~2 g! d5 c* @: I9 t
- module_param(acnt, int, S_IRUGO);* B) W$ D4 O2 {$ g' Q& V0 n9 H1 z
- module_param(bcnt, int, S_IRUGO);
* L# p& ?; B& v! p+ ? - module_param(ccnt, int, S_IRUGO);
复制代码
6 k* m- Q B) i; p3 W3 c M( w L: @) f
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用4 h" w0 D8 b, G, {$ o2 y( `# O
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
0 T; q- b5 ~9 E/ { 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
+ }3 l8 X1 P# [9 s( o* C7 B, U& v$ n/ V- ]1 N' M4 {- Q
" V: q3 W: A; l# @ |
|