|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% [9 x% o' ]; Z; S- [code]EDMA sample test application
- u$ }2 x3 L' G* L& ~9 B9 R - /*
& C" b) R8 E! U3 J - * edma_test.c
8 M+ p' ] ]' g$ d; D0 M - *7 \& ?7 A: _' K# W
- * brief EDMA3 Test Application4 K4 z3 h, `2 z9 z- [) W
- *+ b( l$ ]0 W0 w( l# k" {8 `
- * This file contains EDMA3 Test code.: n4 F! `3 N1 ?. v2 M8 u
- *
* j6 v% I/ y$ o: V - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE: a, M3 u* k- e7 G" @% u: x# r) H
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
]7 G8 p+ d% k8 a2 B8 X+ B - * TO CHANGE.
; I4 n# m: ` H4 `. j - *
. Z; s. t$ J( s/ I D- q - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
# K( b- Y* K9 A4 p: F, D - *7 V1 u, y5 k1 \6 V4 ^. C9 N
- * This program is free software; you can redistribute it and/or
. Y% ~9 L3 B/ v6 V$ F! G. w; ?2 V - * modify it under the terms of the GNU General Public License as5 W( A7 x5 o+ A* ?9 L9 S. Z
- * published by the Free Software Foundation version 2.
, v; B, q& J8 y9 {6 }! L - */ \) R+ W" _9 T& N: J( o# T
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 k3 g0 U8 q c# V' q% t - * kind, whether express or implied; without even the implied warranty
. v( R: x. ?5 |; ~* u# w - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% ?& h* B3 D5 O1 e4 D6 h - * GNU General Public License for more details.% x) Y. j$ ~, \3 D( Z' ?% }: r
- */9 e2 s. y4 d ?" t
- f. t4 p7 ^) R+ Q- J+ V. j
- #include <linux/module.h>
$ h, y% z& x- m - #include <linux/init.h>. I$ e- Z+ ~# k I
- #include <linux/errno.h>3 H4 \9 j9 u) Q2 p9 p8 e
- #include <linux/types.h>
. U5 v3 y; B$ C2 k5 K - #include <linux/interrupt.h>6 o/ m! N5 m0 p& ~
- #include <asm/io.h>5 w8 C+ g( c F0 l) ~
- #include <linux/moduleparam.h>
$ G- d! R7 R4 }& r - #include <linux/sysctl.h>
) f7 X! v* {' S; J( k0 V, b& g - #include <linux/mm.h> E! Z0 u$ G: ~) o
- #include <linux/dma-mapping.h>! K b9 r& P2 x6 z- s
4 m5 C2 K. y* j; ]# u- #include <mach/memory.h>" W- m# L4 y& x) |( L
- #include <mach/hardware.h>
9 r5 F+ ?8 J- k( `" j: @ - #include <mach/irqs.h>$ `8 z7 x' r" o) v/ `
- #include <asm/hardware/edma.h>
9 e8 K4 Z" |, j
5 N& s0 u$ `4 s9 ]: G1 T4 U- #undef EDMA3_DEBUG$ b6 a9 F" J' B" k$ u7 v* q0 V
- /*#define EDMA3_DEBUG*/% Y% K7 V3 p+ L2 b6 L9 `
- # `2 Y( m; i5 Y. J( r
- #ifdef EDMA3_DEBUG# p2 J/ J8 M' S, E! b. o
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* r7 N) H! o* z; H! F( C O3 B3 o6 Z U - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
5 Y W0 R4 [% [+ Q8 g; h8 I9 ~ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
L* X! k$ o1 ~( V- D) Q# Q - #else) }$ ~8 P# F& C; @! t/ v
- #define DMA_PRINTK( x... )$ L5 v$ U5 J* j1 M% m, `8 E
- #define DMA_FN_IN
2 P; T1 i1 ]7 m0 } - #define DMA_FN_OUT
' {5 v( t) o {+ `" @ - #endif' C$ U- q) Q% ^# ^% x& U
& c: S9 x( J7 K" n2 O! ?- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" R# V- E" A) I% o) b+ M - #define STATIC_SHIFT 3 e. _0 b2 r& ~6 Y9 r" Q
- #define TCINTEN_SHIFT 209 w( K4 k1 g5 Z8 J
- #define ITCINTEN_SHIFT 21
$ I) v7 H1 y- l0 A/ |/ i - #define TCCHEN_SHIFT 228 {1 Q9 A, \0 S8 F
- #define ITCCHEN_SHIFT 23
e" _6 d! i6 J8 X7 F' i - # X- ~$ C; E! s- I X
- static volatile int irqraised1 = 0;1 l, {' N, ]$ o7 I3 V! C
- static volatile int irqraised2 = 0;: w4 H5 D$ y. z' `3 L
# A8 B4 ~: D7 |$ ? N1 j! W T D- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ [) O$ a( c: z6 U/ z4 s9 J/ b9 Y - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# \6 n& i- x1 E b! r; J - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ G+ V1 h5 M1 R
- 3 n2 R; a, z; S# r. t
- dma_addr_t dmaphyssrc1 = 0;
( X8 p. T7 E' }$ B8 p" b* ` - dma_addr_t dmaphyssrc2 = 0;- i u4 r/ u2 p1 a
- dma_addr_t dmaphysdest1 = 0;
' w3 ~ C8 t+ p' z - dma_addr_t dmaphysdest2 = 0;3 u* d8 h0 \* U) M
- * e [4 X& Q, d
- char *dmabufsrc1 = NULL;+ L1 w! j( p- G8 q) I
- char *dmabufsrc2 = NULL;
- v3 G: K# M( P! C' B4 o; U - char *dmabufdest1 = NULL;" p# y; E8 E' O/ `
- char *dmabufdest2 = NULL;' o/ m$ u9 ?% l" x. p8 K
3 S/ c0 \6 c! b; I% @! @' h$ f8 l- static int acnt = 512;9 J: l+ Q* o- o- M1 e
- static int bcnt = 8;
6 d# n, T: I2 n - static int ccnt = 8;
% p4 r; s3 R! u9 D" P ]( ^ - 9 \/ g8 g0 g/ _' ?
- module_param(acnt, int, S_IRUGO);
; N" c( d% j! i0 P9 s% L. ~9 j( u6 ~ - module_param(bcnt, int, S_IRUGO);
5 D3 z3 Z% @- I G! w5 x! m - module_param(ccnt, int, S_IRUGO);
复制代码
6 [% U+ }# n! V+ z
7 [' M" ?6 w5 g) W4 [6 F 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用/ @. P* j; N0 K4 M" N
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ [2 \+ y" A* `) J
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 [( [3 m+ o9 p7 k. R7 ?" Y9 s4 i/ W. R6 F1 k" i
( I7 h9 X2 Z$ N5 d: h- n
|
|