|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 g( Z# T1 H, J0 W' U
- [code]EDMA sample test application, m1 u1 K1 y2 u7 s5 q6 [( F
- /*" z" L& M8 y# P# D1 v+ E. G
- * edma_test.c- D( s0 ?# E, l
- *6 ^1 ^2 w3 n7 i$ d, t) ^) c$ R9 i
- * brief EDMA3 Test Application
$ }6 g. C0 _4 H' n - *9 H7 H) H6 h2 x* d6 S/ E
- * This file contains EDMA3 Test code.
' C O, x. d! L( b! {0 x - *" l$ T) Q$ e3 ~
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( W1 [# |- _# i% Z! f& q: E
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT* b8 r1 x5 I+ G& `& v0 l+ S2 R
- * TO CHANGE.
" \; l7 N. V2 t% N" w - *
5 f1 z% k0 J% f - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
: V. A7 F$ D3 Q( G0 E2 }6 J - *
( h( f4 L4 C, h9 } - * This program is free software; you can redistribute it and/or
) |6 a! L* T* J, f - * modify it under the terms of the GNU General Public License as
% K1 O+ t1 B+ t5 P t, {# K4 G - * published by the Free Software Foundation version 2.
0 p; ]& u# B+ D1 y+ t/ E, m - *& a6 J9 G% f$ K( l7 } Y
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 ?+ U7 c6 n$ u" p& ?0 ~$ _
- * kind, whether express or implied; without even the implied warranty
* M ?9 n5 m6 r - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 |( y9 n. J/ k - * GNU General Public License for more details.0 R/ ? s7 o9 _1 ?. _# F' X
- */8 r. {/ O r3 p, [" o$ n w; n7 }
/ t1 @8 {# I, B7 v7 i8 F% ^- #include <linux/module.h>8 X/ \/ S1 x h, P7 j- ?
- #include <linux/init.h>
: i8 C. M0 S& ] - #include <linux/errno.h>6 z G: {+ D, r9 b7 U
- #include <linux/types.h>
' @1 {2 t9 v3 @: Q: ` - #include <linux/interrupt.h> D- E4 s) x) Q4 f
- #include <asm/io.h>' P* x: h+ M n. e' i( g9 Q% L4 a3 s
- #include <linux/moduleparam.h>
$ K" i' D& A y' v q4 T2 n. _9 l/ i# [ - #include <linux/sysctl.h>
+ D0 G3 |( a; _1 c. ? - #include <linux/mm.h>
# @4 u5 W9 ]; W; F: b - #include <linux/dma-mapping.h>
6 B1 h4 Z* C7 m, n - ; \ o9 X, _( n/ m
- #include <mach/memory.h>
: [8 g6 w6 C. j6 l - #include <mach/hardware.h>
/ L+ M& ~+ q% s$ ^4 q8 { - #include <mach/irqs.h>3 ?9 s/ n, V' X
- #include <asm/hardware/edma.h> {" i- W9 [9 W
- , V/ O" G* U$ v K F/ H! L
- #undef EDMA3_DEBUG
5 W6 U0 a9 A9 J0 A6 k. X1 \, c ? - /*#define EDMA3_DEBUG*/
! O2 X$ C3 G! ?7 Z2 V/ h
! k Q) X) [) Q; i- A9 C9 ]- #ifdef EDMA3_DEBUG* O7 ~3 C# r+ Z. Z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
$ ~3 S2 q) O$ F6 P - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)7 L0 f5 C9 b7 ]) }! K; f! F
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
: V ]$ V3 X# u0 a - #else9 G2 I( B) x7 w4 C' E) E. f7 J
- #define DMA_PRINTK( x... )
& n7 }/ l3 r( ?# n0 Q - #define DMA_FN_IN) O% \6 ?+ f2 i7 K9 O
- #define DMA_FN_OUT
% Q4 R+ {( z8 |) q1 g, p1 B - #endif
, T) ~3 u1 t+ u" m* [+ m# _5 B1 [ - ! R( ]9 }3 d. S& ?; S
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
* }" z( `$ \6 W/ ?, K1 z. t - #define STATIC_SHIFT 39 k% t2 R5 J: R; o: \
- #define TCINTEN_SHIFT 20
- N/ b4 s3 x" _- V. X$ l+ r. X - #define ITCINTEN_SHIFT 21
$ C8 z2 R. o1 L4 [ - #define TCCHEN_SHIFT 221 T# R3 |, O* B$ `4 M5 a
- #define ITCCHEN_SHIFT 23
* W7 c& w* u8 z1 w" g - ( W3 {% x9 G3 O
- static volatile int irqraised1 = 0;9 I, ^2 r% { Y2 S; c! @9 d& ~
- static volatile int irqraised2 = 0;6 W6 C m% L$ |, ?2 _0 y
! d) ~! n5 g! r, r h- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 J& s& f% N3 K3 U
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! f+ }. c' T! U - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( |" M8 g" n" h0 ^# z0 l( O
! G6 \; [/ {/ J# @1 x* x: b- dma_addr_t dmaphyssrc1 = 0;
' Q- ~, O$ p$ A- u# [ - dma_addr_t dmaphyssrc2 = 0;
8 W( R- p8 F: V! s - dma_addr_t dmaphysdest1 = 0;5 v. P1 {* j9 f$ H0 T. u2 B9 s* d
- dma_addr_t dmaphysdest2 = 0;6 ]# O& X0 c i1 g
- ; N4 V3 b6 z) q" D' z" |8 n
- char *dmabufsrc1 = NULL;
! ]7 k; ]% f" x: C1 r" N - char *dmabufsrc2 = NULL;0 f/ @1 v7 X6 D1 I2 k% ~
- char *dmabufdest1 = NULL;
9 }0 B& q! c3 ?, ?! N4 N9 z - char *dmabufdest2 = NULL;
, [6 d& r. d7 m' m2 p - ' B3 s4 s5 I( ]4 K
- static int acnt = 512;
0 j. R. K! r1 F2 k - static int bcnt = 8; r- Y, Z- Y4 u5 F3 O
- static int ccnt = 8;/ a C5 v& C! r, ~2 [9 f- s# v
" F- A5 I2 N4 K- module_param(acnt, int, S_IRUGO);
$ V, h/ P: C: O5 v8 x& g1 H - module_param(bcnt, int, S_IRUGO);
. V7 i4 {- u/ ?' U% M' u8 p9 c - module_param(ccnt, int, S_IRUGO);
复制代码 $ D7 X8 \6 D8 k4 g
9 \- e* o+ u/ G* a
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用/ E! U0 L0 j2 |; J. N* o' Q
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ T% S' J. J3 m) h. F
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
2 a2 o8 S6 M6 j* @$ [. r @4 R$ N9 T) t. f# L; h$ \. j
1 _6 P0 E* i3 \( P* N! K- [ |
|