|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
) v, L1 i" x4 C; M1 X) i4 R$ S- [code]EDMA sample test application
! o# s: O: W6 \! a% F - /*5 b6 O- S. W5 N1 A3 t- r
- * edma_test.c1 q3 _+ F1 ` \- [3 M- C
- *+ c% @+ F- U3 I+ D: a! q' b/ ~) \
- * brief EDMA3 Test Application! k" R4 h& Q- c3 ^
- *( }" ^, u9 g5 ?& N
- * This file contains EDMA3 Test code.' m; j' v- ~# v; i S
- *
% U, j! g) x/ Z% p. w- G - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, O+ k8 ~. o0 ~* j x7 k) o9 ]0 j v" N - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 p, A# r' Y* s7 h; a+ M
- * TO CHANGE." D$ a7 Z0 e: [0 U {4 D0 O
- *
& P9 @# `- r/ |' V" ^: M, Z: V# \ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/: Y f: Z; D# o# y+ h+ U0 r" u
- *$ C- [7 `- {) }( A
- * This program is free software; you can redistribute it and/or
' M8 [' P# ?/ f# w% f - * modify it under the terms of the GNU General Public License as. a% `% p5 R$ P% y
- * published by the Free Software Foundation version 2.5 \& t9 U* r; R6 C4 U
- *
* B$ V6 K4 L( v+ S0 N+ Y7 B - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' z8 ~2 K: B, e( v9 O - * kind, whether express or implied; without even the implied warranty
* F& r6 Q( Q# d, r; D0 C - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 Q9 w; v; m5 |' y- ]
- * GNU General Public License for more details.
. M' _3 H! v+ d* k7 a8 Z - */8 q! S7 I/ S9 ]; g S' ]
- * `6 r/ I! M; k, R: S1 a: [
- #include <linux/module.h>
5 F( W& p9 q/ k6 K, s6 k- p - #include <linux/init.h>
2 {1 m- I$ t/ \! V0 u8 T2 d$ U, O V - #include <linux/errno.h>
! _( Z- ~# N/ f/ C/ s, z, K, M - #include <linux/types.h>
2 [$ F" H* N" B* c3 D - #include <linux/interrupt.h>
' r: r8 _4 @9 J - #include <asm/io.h>* K0 y" _" E2 }9 M
- #include <linux/moduleparam.h>/ M! v0 c" P" R2 U) Z
- #include <linux/sysctl.h>
4 f- N" v/ K p" K - #include <linux/mm.h>3 X: v1 A) ]' P* ~% G5 Y& [
- #include <linux/dma-mapping.h>: T6 s" _( o6 } T' g* R- s
- 4 M# E+ @% Z- A. p, `. S
- #include <mach/memory.h>
* T8 [0 r$ U+ E" _8 I - #include <mach/hardware.h>
8 ?; E2 N, r: B. U - #include <mach/irqs.h>
9 S2 N1 }+ s2 D$ F! e - #include <asm/hardware/edma.h>! J: Y% x' M' m0 c. k
+ r$ `: `! W* j6 Z" q5 x- #undef EDMA3_DEBUG
3 s7 G& R1 M( s x( I6 h - /*#define EDMA3_DEBUG*/
) _, S$ W( ^1 W2 v3 c* n4 S( j - 2 G* ^- u/ y3 E A" Z
- #ifdef EDMA3_DEBUG
. x5 i0 z/ b1 c! H8 {* [ N - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ D6 A1 @/ M% A. \; B9 j5 X
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, ]. x* b9 z. I {) w. ]1 { - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__); `4 L' x/ c6 v" `' J- O
- #else* d" ?" e* u( \. |3 L1 ?$ Y
- #define DMA_PRINTK( x... )
) P$ S+ C6 Z; S* N5 I. M - #define DMA_FN_IN4 Y7 l0 q# e r
- #define DMA_FN_OUT
) \" H: R6 ?3 g m( z9 M. L - #endif
0 r, ]+ y; j* T$ z& x' l
" c8 S) b. T. Z- `% C; i. R! h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* I3 D% ?( A3 q0 G6 D4 i/ P% A
- #define STATIC_SHIFT 3/ F, N# w g6 J
- #define TCINTEN_SHIFT 20
: N0 i8 o" ]3 P H - #define ITCINTEN_SHIFT 21
2 k, Q, d; d9 n) s0 F1 ? - #define TCCHEN_SHIFT 222 U' p; O. a) j- [
- #define ITCCHEN_SHIFT 23* a. `, @; u7 @1 r5 {
% |: Q% Y/ z1 n. U. J# P; k7 {- static volatile int irqraised1 = 0;- ~' |2 p9 {& M1 ^
- static volatile int irqraised2 = 0;& s& A+ T" x: f$ W f4 G0 N
- 4 W) n, D0 @6 A
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ _ A- j, v& B$ G! R& U" W
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, E" N5 `! X1 M; L4 U
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 F9 F, W! V# \: e
- / T; A# K8 X! Q7 E$ z
- dma_addr_t dmaphyssrc1 = 0;
2 _6 R, ]1 u, e - dma_addr_t dmaphyssrc2 = 0;
a8 z5 w E$ M- u. y c* K/ g3 f0 _; Z - dma_addr_t dmaphysdest1 = 0;
- C6 P1 ^# r' k% P - dma_addr_t dmaphysdest2 = 0;
* s) o9 X: s: |" c - " m7 n( X" H H) ?3 m
- char *dmabufsrc1 = NULL;
' r1 s' I1 P2 |5 i& J' T, F* ~ - char *dmabufsrc2 = NULL;
; A5 j0 Q$ y# j+ [4 I# a! | - char *dmabufdest1 = NULL;
4 \& J3 t' B4 C% {! d6 Y - char *dmabufdest2 = NULL;
+ \5 D b; i/ k5 p
* _+ `2 C* } L8 M- static int acnt = 512;
, ]: A& z; o- @9 J - static int bcnt = 8;* x) w( Y. E- T/ F/ q
- static int ccnt = 8;
/ y( j2 F$ {" C7 J* |! ]: T. o9 b* A - : F4 V; P; C" n4 b
- module_param(acnt, int, S_IRUGO);& S: Q$ `( J9 t P; h6 {" @1 c! u
- module_param(bcnt, int, S_IRUGO);
1 Z% I8 |" ?9 L" d) z8 Y - module_param(ccnt, int, S_IRUGO);
复制代码
9 @+ }, `' P2 w: \6 g5 m+ d
( O7 \# o- {! A' p 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% s( b9 m$ X" v6 R! @6 { b8 ^
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. {+ ~6 |: c4 S+ j; b1 i
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, A9 [* ]6 m% P4 d$ c" K- |4 a
/ b( K# k8 c: q% I$ g+ ~
|
|