|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: A* M$ r' x( N3 x/ q4 [8 U- [code]EDMA sample test application
$ V% a2 f2 X* i( I5 P! N - /*
}& S+ S/ c$ V* ~; b0 o @ - * edma_test.c
) Z" o; t/ j. V" ]8 x$ X - *5 O2 y! O/ b D! k4 F
- * brief EDMA3 Test Application
9 J! B: A4 U8 Z6 g - *; r- P' O- j+ ]$ \3 L# N/ p$ A
- * This file contains EDMA3 Test code.* Q6 t/ B1 K- R
- *
7 Y6 ~1 ?, O( w ]0 i* s - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* n* A$ D) P1 |& S - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' r; ?# n: F8 U) n0 m6 f5 c# v7 @ - * TO CHANGE.- m/ q1 m/ C5 g6 G1 ]+ N% b
- *' i, _- `$ ]3 p% C" J; U
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/# v! |' ?8 b( l/ j) C4 Z/ \, O* m
- *
4 r: L0 `' _3 E/ C) Q2 H - * This program is free software; you can redistribute it and/or
# }& ]; r) L2 J/ z - * modify it under the terms of the GNU General Public License as
; S# V2 d, P7 M - * published by the Free Software Foundation version 2." q$ s% ?# z* G6 e3 S3 n2 \0 F
- *
% e0 h' C' b# N6 R. u4 K V - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- p7 X# H: f v: z4 I - * kind, whether express or implied; without even the implied warranty" \* Z) q, b5 C, D% I" Z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the8 \2 v. M# k" W+ U
- * GNU General Public License for more details.
8 X2 z9 Q) A. h, x& J+ m' w, i1 l1 Z - */( s e9 X$ K3 i7 {; W- k9 J$ W, G
- z6 K& L5 z4 I+ X6 m
- #include <linux/module.h>9 V) ~, P: @3 B! g7 g
- #include <linux/init.h>$ u% ~" a; @1 p! G( Z. o
- #include <linux/errno.h>( P3 D5 z8 d' L
- #include <linux/types.h>9 n. A' ?& H+ i
- #include <linux/interrupt.h>
, \! e) r9 g8 ~" u1 j - #include <asm/io.h>
& H) d T6 ~5 E/ X7 E* [ o - #include <linux/moduleparam.h>
* P' V8 m0 a2 ?+ P - #include <linux/sysctl.h>
& [' h5 O" T7 C. m - #include <linux/mm.h>, R9 @" q8 i* _ \! J, E
- #include <linux/dma-mapping.h>/ i! `4 Q' s& I. P
! X; r, t! Z0 ]6 n p- #include <mach/memory.h>
1 H3 t' i1 Q7 _; E* Y - #include <mach/hardware.h>
0 h# w- m( _% P2 W - #include <mach/irqs.h>% f6 G) I( @4 r. T! ]3 r e
- #include <asm/hardware/edma.h>7 D0 l" c# L6 @" q4 f& n3 |
- " T0 {& C0 G# {
- #undef EDMA3_DEBUG0 B$ U2 Z; d5 i0 z
- /*#define EDMA3_DEBUG*/. f5 f9 j, [# ~* b
! {1 C0 s. R+ H+ s# o' X3 `* x! L- #ifdef EDMA3_DEBUG% c$ |. g R0 H, b0 Y# {
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
6 n( W; K, n, z5 g% w% O+ x- } - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 F) c- W; B- \- I7 b - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)6 |5 s6 Q" u: Z) u3 X/ w/ j' ~
- #else
# \* K1 \3 y+ z P R/ N( ~, _ - #define DMA_PRINTK( x... )* {! Y9 t+ T' c* x7 P6 V, t H4 N
- #define DMA_FN_IN
$ f8 q2 B7 M0 G - #define DMA_FN_OUT
9 C9 m6 I- d+ ]* |8 s* p, f - #endif1 v$ J% {, s1 ~4 [0 s
9 L1 I& j' S& ]6 D; f; q* v- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
* o6 m) g. ~; r& f7 N6 b - #define STATIC_SHIFT 3
0 t: V7 @" h8 N - #define TCINTEN_SHIFT 200 s9 x! j7 H7 ^( Z/ U) k3 V
- #define ITCINTEN_SHIFT 21- {8 G1 n4 x. Q {/ j7 j
- #define TCCHEN_SHIFT 22: Q9 p" `/ v1 ~$ K, ~- H3 o+ {% P. `
- #define ITCCHEN_SHIFT 23* r4 R* e1 p) ]. x# ]: r
+ l5 v/ g9 Y7 Y" W8 O- static volatile int irqraised1 = 0; i3 ^! _3 [- S2 S) F; ^/ Z/ ?) o
- static volatile int irqraised2 = 0;
( \$ j* F2 I. Y* m! _ Y S - % l. R( I3 X5 O0 _
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 U# f9 a- X- d4 P6 w5 L
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& ~0 S' L# K: q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! T8 ^. j# D$ _
& K; o5 r: P0 T1 k, j- dma_addr_t dmaphyssrc1 = 0;
6 t# e' k# c& b0 p, Z3 v" x! M - dma_addr_t dmaphyssrc2 = 0;6 V* A0 Y+ a0 b4 y A
- dma_addr_t dmaphysdest1 = 0; F- q1 {9 M/ [0 q) K7 N$ w
- dma_addr_t dmaphysdest2 = 0;
( ^ C/ o& B* @ - 2 t$ f6 F5 Y# P
- char *dmabufsrc1 = NULL;7 N0 P7 E! f- W9 G/ R. K' p
- char *dmabufsrc2 = NULL;
1 a" c7 q6 a: }# S9 z" l8 i - char *dmabufdest1 = NULL;# R: ~; }+ \0 C
- char *dmabufdest2 = NULL; e# T8 D+ ~& x3 K
- $ \8 M& U; ~, B( ]! u$ v+ j
- static int acnt = 512;
- r2 m0 p% \( R3 y) P4 _! S. A - static int bcnt = 8;( O1 d4 U2 Z, Q0 a& C1 ?* m6 ]
- static int ccnt = 8;1 r! X8 q1 a4 U8 I) }* p
- * @! i7 `0 j" p! ^+ h* }8 ^ V
- module_param(acnt, int, S_IRUGO);9 k7 Y1 K6 Q# C" a3 h% E+ X3 y# k
- module_param(bcnt, int, S_IRUGO);- |! z' X' q- Z7 c+ j" I1 w8 G- M
- module_param(ccnt, int, S_IRUGO);
复制代码 3 j" v+ ~0 `! x5 v Z) o) G# {( T* a) s
, C! n, t8 w# q/ d; _/ u 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用 A# D, ]1 w I. P% 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
" y* M/ {9 m9 c% @9 f$ _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
. C5 J+ I* K0 e. m( Z( ~0 m' V4 j, V3 N* P K( u
$ k Y" j- \# k |% @' {* f |
|