|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
/ B# i2 i6 k M1 i2 K. O- [code]EDMA sample test application
* d% t2 A3 i" b7 u% t - /*
7 {: N" R* k; W7 Y' r% f# ` - * edma_test.c
) n/ Q& l$ Z; @2 ?2 P- B - *5 j4 a3 w8 ^ R6 B w1 X
- * brief EDMA3 Test Application: X- u. ^! q5 [2 r
- *
" i9 ^8 [+ t2 C, T3 c - * This file contains EDMA3 Test code.
- n+ j) M# D; b9 k$ C# ` - *
: j( Y# M8 T0 f9 E* W% q0 H. }% u - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
% v" F% f8 J( X' U1 h3 y* e - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* C2 H9 x. ] Q9 \' \' W - * TO CHANGE.
( d8 X1 a. r; E8 Z9 p v' b6 n! ] - *" ?: s( N! Y+ ^* B0 C
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
! i# q- y. R6 _$ C2 E0 G - *
9 S5 S4 [" {" o$ k- ` - * This program is free software; you can redistribute it and/or0 [1 p! G8 |, E/ n
- * modify it under the terms of the GNU General Public License as
# c8 T; j( f4 o - * published by the Free Software Foundation version 2.
1 F' R) b) O0 } {# n2 j" f: M! I - *
7 \( J: Q# L& `2 ]& h7 e - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' l6 E3 f2 i9 V+ d - * kind, whether express or implied; without even the implied warranty1 m8 N2 U+ ~/ u6 q/ Y
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ d/ x' I1 [3 W, V/ S( J
- * GNU General Public License for more details.( `. l4 E7 s' J( }# z
- */( |2 \: b' C( j
8 Y' C- Z! G% o4 r- #include <linux/module.h>
, G {% a, p( N6 B0 T0 a - #include <linux/init.h>. K( h# |+ o: u! i) ~: p5 X
- #include <linux/errno.h>
: @6 V# b9 U8 t - #include <linux/types.h>
7 x. M! V1 T$ A - #include <linux/interrupt.h>/ P- T; b' z( n9 Z
- #include <asm/io.h>- g/ D1 W: ]" D
- #include <linux/moduleparam.h>% b2 M: W: L1 l6 z
- #include <linux/sysctl.h>
" z2 P8 D( ?+ a4 \5 z - #include <linux/mm.h>
8 o' y6 h& v" y0 ] - #include <linux/dma-mapping.h> f" x$ @" F/ v5 b; m5 z) T
- " D- a. z# o! }2 }" q4 _7 B
- #include <mach/memory.h>, b% e& T, M" O' [* u' `7 }8 q8 o; K
- #include <mach/hardware.h>
/ [8 O6 ]2 l3 \. T - #include <mach/irqs.h>
( @9 B/ B1 L; q; y0 @6 G7 { - #include <asm/hardware/edma.h>( a3 v f1 W/ |. s
- & t2 e) y9 V% }+ i5 j+ F; t+ q+ B
- #undef EDMA3_DEBUG* F' T6 ?6 u C5 R5 l$ k% K) |: W' {
- /*#define EDMA3_DEBUG*// X: Q1 O# B( k
# R: L+ T, w; s* X _5 I- #ifdef EDMA3_DEBUG
& h, _+ V8 l6 U& Y! x - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)# `3 Z: m) ?! K H
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; o+ r7 W* D* ]* X7 U/ |) H% e' T - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)2 K8 @* Y) f3 H) M5 |
- #else2 p# n$ w7 b1 z& F% k
- #define DMA_PRINTK( x... )
$ o% |' `! V; T, C1 Q' p3 ~ - #define DMA_FN_IN" R5 O8 U# S0 z T
- #define DMA_FN_OUT
* D( e6 m. j: X: ~, t, J+ t$ P C* j- o - #endif
- \* a- @) K# m. k: m- F. T: K5 J - & B: e& J* ^2 |8 Y6 M3 A
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)% _- E9 l* m0 v$ L- I/ G
- #define STATIC_SHIFT 3' A3 t, X; ^; S9 K K- i+ O
- #define TCINTEN_SHIFT 20) l5 k& r* ^4 t; U0 z6 M& U
- #define ITCINTEN_SHIFT 21
\ L: M3 j I) Y/ o# r3 ~# b8 p - #define TCCHEN_SHIFT 22
, V+ b$ E. h$ b* _7 a5 U - #define ITCCHEN_SHIFT 23
: A! M+ D7 @ v
& S2 b9 H; P' R+ ~+ X5 q; V1 `/ j- static volatile int irqraised1 = 0;
2 y: i4 l4 f, L# V2 U - static volatile int irqraised2 = 0;2 Z9 s( j8 I. R2 [ ^) z+ L
- + m# z) l1 I1 J8 d3 |/ k0 L
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% |6 u( Y0 R5 ] O. \ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) V; j% d0 g0 C3 T/ Q4 x - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 M/ | \0 P, q. p# v% d
8 C4 [1 A- p3 i: [' W3 }8 K- dma_addr_t dmaphyssrc1 = 0;
# @+ O6 M1 X# |4 {( z) j - dma_addr_t dmaphyssrc2 = 0;
, U3 d) ~0 O+ i' R/ }0 K% n/ J) m4 j - dma_addr_t dmaphysdest1 = 0;9 L; E; l4 T, f9 |
- dma_addr_t dmaphysdest2 = 0;
4 O" g- O0 M: B+ m+ n9 Q
/ H( h% j: C( z( Q! b8 P8 {- char *dmabufsrc1 = NULL;$ K l8 R6 f, d* |' C4 q p
- char *dmabufsrc2 = NULL;
: k& _ \* p: I" F& |: c5 h- B' N - char *dmabufdest1 = NULL;
! ^# Z5 ^: L1 s9 W# k% B - char *dmabufdest2 = NULL;! ~8 [+ {/ g! u
4 \* c& @! |! r% O9 E! j4 `- static int acnt = 512;* B& w, c5 ?0 @3 N2 b- g8 M
- static int bcnt = 8;" u( O0 O% t1 K/ s x& }& r
- static int ccnt = 8;
7 g3 U+ ^9 N; J! b, H1 p - $ K2 X K* a: ~ X% Z; ~. ^: z2 y
- module_param(acnt, int, S_IRUGO);
1 l. C# x% X' v4 V! Y7 f/ L# X! \ - module_param(bcnt, int, S_IRUGO);
) Q2 k% U0 T# f3 s - module_param(ccnt, int, S_IRUGO);
复制代码
9 o# ~ U/ @4 s E1 V% L5 [! R6 l) b$ g- q' J2 B% l( P0 T6 H* q& d
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
& p m5 ]1 ?/ _* W) w6 Farm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。; `3 R7 \9 [" L8 U
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
{6 M, i5 i# ]! i4 N T8 _% V- U& R' T9 K2 }% z
, n `7 a- s( }0 P: H( R |
|