|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 & T5 {3 E# q+ N, O( F
- [code]EDMA sample test application2 ]9 S1 }3 |+ t
- /*
! J5 g% y$ K; t - * edma_test.c
/ g, x+ |- F" i y4 D8 X - *
6 T) Q/ \8 K0 R2 Q3 H7 U - * brief EDMA3 Test Application
( X8 c: @; }# @7 N - *
+ n) a+ t2 U8 b7 k - * This file contains EDMA3 Test code.
1 B8 o! x0 `+ i4 c! S - *( X" K( G& ~ h, _1 D
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE. l& c! z2 t: h" a2 K( p
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT& q9 v0 w& S, K: n$ L( H
- * TO CHANGE.
1 q/ n: V6 H4 G, O5 o - *
7 N1 r% i6 H; Z - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 Y: |: @ q1 O& H1 C+ j - *
; d* f: c* p* I3 t - * This program is free software; you can redistribute it and/or. d* k0 ^3 x# Q& s. X! Z N
- * modify it under the terms of the GNU General Public License as# n- X' |) V* ~ b& O& D
- * published by the Free Software Foundation version 2.) K# i1 ~: Q. I( g* d: X
- */ z, T- q7 |# ^
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any9 i. K/ j; q& `' X4 X0 t. L
- * kind, whether express or implied; without even the implied warranty4 R" j" o$ N; A7 p7 b# K# B
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' \" R" A8 c4 c/ r1 U9 L) z$ ^% A. }1 g - * GNU General Public License for more details.( y0 r8 U4 r: B, h7 e* q
- */
; z5 Y6 M7 B* P3 C9 N7 W! X, _) O - % M* ^9 U `$ `3 R6 M
- #include <linux/module.h>
" S# Y1 S9 f8 ^5 t5 j$ N6 I. \ - #include <linux/init.h># ]; J0 K) e' R- c* ] x
- #include <linux/errno.h>, ?9 h( s: f/ } `9 i
- #include <linux/types.h>
7 g1 f5 M# u. w# B - #include <linux/interrupt.h>
8 V0 q* t# r( C - #include <asm/io.h>. ^# A6 Y+ b! H
- #include <linux/moduleparam.h>
! O# ]/ N- F# }& f5 n5 M - #include <linux/sysctl.h>5 E1 B+ a2 U# u& y2 W
- #include <linux/mm.h>
' I: n0 _, r, B: i7 s - #include <linux/dma-mapping.h>. I" g2 u7 R' b; Z6 C
- ) W4 j8 M/ c# V, u2 V( u% Q
- #include <mach/memory.h>
8 O- S1 b4 ~: U - #include <mach/hardware.h>% X: [! _7 N/ J [0 L8 \
- #include <mach/irqs.h>$ e; M, C0 _3 h
- #include <asm/hardware/edma.h>
6 f( C2 S0 a9 r
! Z4 Z! l1 {' t8 p9 r; r- #undef EDMA3_DEBUG
7 a P" w6 W0 }# f& n; {) p" A - /*#define EDMA3_DEBUG*/- P7 ]: {* [$ I4 z
% Y, {8 J$ ~5 o# T5 J1 g$ N- #ifdef EDMA3_DEBUG+ w* u8 t+ p$ K0 z# V) v
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)# ?/ g8 b# k' W1 F h
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). p0 f- I7 L7 P$ ]8 W1 v# q. z! K* R
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
" ^: d+ g8 Y. V9 T0 c" d - #else
2 I; I6 U6 H3 b" h$ G" v - #define DMA_PRINTK( x... )
( Z& U8 V0 J) W% K. K; f: N - #define DMA_FN_IN5 H% Y7 l. Z: t' W) ^& S8 W& m
- #define DMA_FN_OUT
! } k; |- Y: _! ]+ Q2 G - #endif
4 `1 h( b! m" S* S2 J% ?
) N; T2 L5 o: s j- \- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 Q# l+ E' @3 ~; N
- #define STATIC_SHIFT 3
0 g2 A4 T2 {+ J( l, m- d3 O4 X - #define TCINTEN_SHIFT 200 D) d9 D) c2 @9 [3 a4 X# D+ ]
- #define ITCINTEN_SHIFT 21" Y/ J& T1 I- p- C
- #define TCCHEN_SHIFT 22
8 q+ w# |# L3 A* l6 _ ?2 l: B - #define ITCCHEN_SHIFT 23
' J$ T. [' |. Y5 G! m
2 @* R' K% g' t9 u- static volatile int irqraised1 = 0;6 K3 k: S2 [/ c& q3 h* g! c! b
- static volatile int irqraised2 = 0;9 Q7 x0 i" |2 D/ u& f6 I
7 X$ a2 x! M% |- O) d& Y1 a- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, P3 d; [/ ?: s8 N; }; J" ^$ a - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. K2 m! V5 V3 Q# K; ~% _ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- R3 z C2 q9 z! }& k6 E, p
9 b( d4 V4 ~8 X v- dma_addr_t dmaphyssrc1 = 0;
7 ^* N: F9 ?) m) r5 r8 @ - dma_addr_t dmaphyssrc2 = 0;
' D% p9 ^* f V+ z3 i - dma_addr_t dmaphysdest1 = 0;
1 t- d6 n% w; o% o - dma_addr_t dmaphysdest2 = 0;1 v3 z5 |1 Z0 b# [, d ?3 L
- $ V# v( D9 q/ v# `7 g& D7 w
- char *dmabufsrc1 = NULL;- `1 e% W; a, `& U$ n
- char *dmabufsrc2 = NULL;
2 s: R5 S) U6 |" T - char *dmabufdest1 = NULL;
" G! s8 ^# V3 ^ - char *dmabufdest2 = NULL;8 R3 k% Q% l+ U1 d5 U
. C G2 A0 U7 h! H% z, Z- static int acnt = 512;
1 _! R [2 }8 a' C0 }0 D - static int bcnt = 8;: y7 b) b' H7 S4 G5 X2 z
- static int ccnt = 8; Z3 N$ u) M6 a2 j4 H' r8 f
- , C1 n2 o1 O: i( i: w7 ]
- module_param(acnt, int, S_IRUGO);+ c% I, d" ?# @0 M6 W
- module_param(bcnt, int, S_IRUGO);8 X' ~' }: p! q/ I' z. g
- module_param(ccnt, int, S_IRUGO);
复制代码 * n7 B! O! j1 R. x+ j
L2 \1 j2 P* T% C 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 n" h3 E% O [' j& r* V( j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# W0 ~, a' A0 ]- n1 R, m1 V
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
' h0 \0 J: t/ C) G' H) M7 p* u! @0 C. E2 {6 G% f2 J
2 |( f. {: L6 ? Y, F! U; v. w
|
|