|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ^& C Y8 s& X7 W7 x
- [code]EDMA sample test application
; P* ~# b2 B4 B9 m1 n& L% @7 o - /*) O" H K% M8 N) C: b" d/ z, W
- * edma_test.c7 n' |0 Q9 C3 x8 B5 _
- *
8 R7 W5 F& a: T9 P' Z - * brief EDMA3 Test Application
) _2 y; ^4 C+ o- p% b; [ - *! d' Z2 F' P! p
- * This file contains EDMA3 Test code.
3 }. S2 z8 K3 J; X4 ^7 ~( p0 {2 G- N - *
! R* u0 { s+ Z( k - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# e& C$ X! L7 q1 H; G4 \
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' T% p$ `: C( V" Y( z6 L - * TO CHANGE." {8 n& H( ^$ @( `
- *
9 g6 Y# W V/ C7 y* [# N - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 L9 A- Q& L( R1 m. H. c - *" [9 g. t3 y! U0 G% T
- * This program is free software; you can redistribute it and/or
% I7 O" \% }0 W - * modify it under the terms of the GNU General Public License as2 G. b5 i o" H, |
- * published by the Free Software Foundation version 2.4 Z# ~7 w4 Z8 o/ H- E+ y
- *
; S& M; y) k3 v) ~ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any, u, y# f/ {6 m" _) s: X' S8 j
- * kind, whether express or implied; without even the implied warranty/ o2 L: o- o5 E. w( A+ D0 n8 A
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
. C O3 s! [* ]% i6 z9 e - * GNU General Public License for more details.7 p# U# {9 W! q9 V6 }1 r, y
- */. z! d& Q& ~) f7 B/ a* p% v; W. x
. f$ X# B3 h4 {8 ` q- #include <linux/module.h>: q: J# Q; V' c: @. [4 [
- #include <linux/init.h># V% p+ B. T. ^' W# e- j; B
- #include <linux/errno.h>- h6 U9 i% C7 u* ~% R! [& F# R
- #include <linux/types.h># r9 A' c/ Q8 l
- #include <linux/interrupt.h>
( M7 F `; b0 _+ b( V - #include <asm/io.h># i. E$ v8 I2 b0 Y0 c
- #include <linux/moduleparam.h>
. h9 |% O- H* u - #include <linux/sysctl.h>
) U4 k- D3 c% P9 T) `+ H - #include <linux/mm.h>& w/ z D, L l6 I p
- #include <linux/dma-mapping.h>
) P2 ^" a% T; o) }9 o. v
& A% X l" T3 u7 B4 }3 x- #include <mach/memory.h>
: M" q6 e1 k5 y/ S - #include <mach/hardware.h>( h" Y: q, n. N K. j U( f# T
- #include <mach/irqs.h>& N& }6 i8 {) @6 F
- #include <asm/hardware/edma.h>
' n+ K" ~; M# x7 [- \
4 B/ d: D, |8 L9 _, p- #undef EDMA3_DEBUG
: b8 V+ X, d2 V Z* I& P! V - /*#define EDMA3_DEBUG*/$ d. Q" P- J4 t' D7 i" s
5 U* U4 Z4 |( E$ I; u. [- #ifdef EDMA3_DEBUG( W$ J9 e( K0 Z. H: p1 i* g: q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
4 p0 p$ p6 N) c9 c7 J1 M - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)' P! R. M1 f+ W1 D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). A& b( e. K1 S9 r* S, x
- #else
8 J" m0 b. K* f* O f$ N- a x - #define DMA_PRINTK( x... )
1 A! w- I- j3 ]; h- {2 o - #define DMA_FN_IN( b5 m1 s& V+ H; s" [- _6 B* i/ Y$ b
- #define DMA_FN_OUT' |, G) \9 j; ~# S
- #endif
- w; i4 r% U& O y. ^& O* B7 @
! U" S" A5 C! }3 b! ^3 H* V. u- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
$ I8 v# t( L2 S7 N( S; v - #define STATIC_SHIFT 3
( _& n2 [% O* D* a- \' M- O - #define TCINTEN_SHIFT 20
0 Q# g: D3 b3 s+ Y1 \ - #define ITCINTEN_SHIFT 212 K% _3 h) s- V# a4 w: V
- #define TCCHEN_SHIFT 22+ t. f/ X7 }' h* P* f0 v7 j
- #define ITCCHEN_SHIFT 235 U9 S5 h/ g6 s" P' m7 |1 C
- . l1 f& Y w: Y' t& q
- static volatile int irqraised1 = 0;
+ z5 |$ i+ g$ k - static volatile int irqraised2 = 0;
0 j8 k" _& h& [, m- M/ I
& {. R+ s) @3 ?" R( P3 [' y- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% h1 U/ G% [2 [+ f/ \
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- P! ?/ o: g% I4 Q; a$ Q
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 F8 C6 l. [* `+ B; k - 6 S0 B- _6 `7 Q+ D8 [+ a; d' G
- dma_addr_t dmaphyssrc1 = 0;
4 b) H1 D/ g) o( N) N+ h( ~* ^ - dma_addr_t dmaphyssrc2 = 0;
( \4 U- ~8 u' @' o7 k - dma_addr_t dmaphysdest1 = 0;
! h" ]8 G- d. ]$ L$ C) X" K - dma_addr_t dmaphysdest2 = 0;
/ x4 u! ?# c U$ [ - 3 F; Q1 L6 @) P* s# G: Q; y& \
- char *dmabufsrc1 = NULL;5 b4 b9 {2 n/ R: i9 W: g2 n8 q
- char *dmabufsrc2 = NULL;! [0 Z' G$ u6 g0 P$ X& A% L5 p
- char *dmabufdest1 = NULL; f9 i8 c. w+ ?5 K
- char *dmabufdest2 = NULL;
) _3 l; B1 n, f7 {0 G; t1 d - . {; k$ j# a, K7 @9 Q8 W
- static int acnt = 512;$ Q* h' `0 }, }0 q/ a$ t+ v
- static int bcnt = 8;1 W& r0 u* @. s. T: V r
- static int ccnt = 8;$ w( k4 u+ @. j/ X; r
- 8 o% W. ?9 M" i
- module_param(acnt, int, S_IRUGO);
+ K' r" L9 N$ K: l - module_param(bcnt, int, S_IRUGO);" f5 r. k. ?$ j5 _) Y1 v
- module_param(ccnt, int, S_IRUGO);
复制代码 1 X S9 ?0 E& A* }5 p) I8 k
0 _9 K% ]" ]/ u/ a# w 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 K- z% y! k3 V- J- q' 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。' f+ d; h& ?* D: c
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 O' n4 P$ k2 W3 G- x+ h
# H, S. a; F% N) K: L# u( M! z
7 Z- ]" X4 n2 R ~# Z2 z# A9 P |
|