|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ( a5 n, `8 Y- w
- [code]EDMA sample test application* x( X9 F$ [* }; q" G, M9 E' R/ J" _
- /*1 I) ]! P: x0 P7 e* i9 r7 [3 C2 {4 X
- * edma_test.c
. k' y. \6 X$ f+ I$ n- J5 J - *; b- Q# J, R4 a) R2 n! Y; M
- * brief EDMA3 Test Application
8 W3 m) {; w. X$ {+ X; H - *4 I3 P! r+ @0 R' T$ R
- * This file contains EDMA3 Test code.
1 S; s; W5 T( B. a3 e - *
& C9 c" h }9 m9 z _ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE& W5 _! V4 p5 r9 O# F) |* y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* [4 ]. |% M' s5 D, J: X5 `6 Z - * TO CHANGE.+ m0 u: L) y$ j+ v& I$ ^
- *: l* ]: s: W. E" _$ M
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/: y0 P+ e, L% B$ M9 \- {5 N
- *- ^9 U" W# K$ U" C& d
- * This program is free software; you can redistribute it and/or
+ [ \* ?. ], W- }! y - * modify it under the terms of the GNU General Public License as3 }8 }% r8 M. b
- * published by the Free Software Foundation version 2.( P: K. @; A+ n/ a* A% Y
- *7 @* Z1 R& S3 |( G j- [
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any% s, `9 K- d( u+ T/ j2 k- x
- * kind, whether express or implied; without even the implied warranty
7 c: F, u+ B& ?" D - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
( A6 R/ c/ K1 u; A - * GNU General Public License for more details.3 N/ W& c9 s8 L9 @' ^& j
- */3 o. M5 D1 z+ ^9 g
% a# B; P6 q$ S- ]- #include <linux/module.h>
) J) @" v1 }+ z - #include <linux/init.h>! m7 M( N5 b) Y$ A
- #include <linux/errno.h>3 ?: w6 F) u ^6 z; J
- #include <linux/types.h>5 s. z& h3 h0 X/ {9 \( Z M& S
- #include <linux/interrupt.h>5 G. A" P+ x0 v G/ t7 v: c
- #include <asm/io.h>4 B1 }% m: s$ D" G* s, T
- #include <linux/moduleparam.h>1 Q# [/ s4 K; ]; w4 r/ U
- #include <linux/sysctl.h>7 Y- G9 |3 F3 ^) Z' U
- #include <linux/mm.h>
9 b, X/ M: U) T3 V! }' d - #include <linux/dma-mapping.h>" z1 g* }1 {2 Q/ T* A) l8 |
( ^4 e+ O0 f- F+ }+ @! [. y- #include <mach/memory.h>9 e; i" j0 @+ n; a& u5 t$ }5 k
- #include <mach/hardware.h>5 `" u9 p8 E! z v/ F
- #include <mach/irqs.h>) b+ r2 M% b+ e# A ]' O& A
- #include <asm/hardware/edma.h>% M% A7 A6 F! Q5 O7 I6 F
- 7 a/ g3 A8 {( g( \
- #undef EDMA3_DEBUG
g% E& `) v8 }3 T - /*#define EDMA3_DEBUG*/, [1 s1 z8 t% S% X! y
- % Z1 R" u- g/ ~- b+ M
- #ifdef EDMA3_DEBUG+ V! Y% q/ ~7 n4 _- |1 p
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
8 s1 ^* n7 I) h$ L0 Z, G - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)3 Q; I5 G" Z# [$ g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)& V( o4 e6 |: h' ~4 H; F+ F0 F
- #else
* e! O' V& c! `2 T5 N( r0 ^ - #define DMA_PRINTK( x... )2 T2 {2 ]% j! t+ i
- #define DMA_FN_IN) V5 \/ j: [7 ~3 @, D* w
- #define DMA_FN_OUT5 V! R% m* M1 f
- #endif
- P5 e f* ]% ]# e$ K5 e& ` - 4 P7 z' o- [! f) ~$ B
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 E: m8 W# N/ K - #define STATIC_SHIFT 36 `) {$ M6 t6 x; \% u0 c
- #define TCINTEN_SHIFT 20
! z; N3 w, R9 E% K5 k# k - #define ITCINTEN_SHIFT 21 m6 k& k3 o3 E7 X+ N( p2 J* e
- #define TCCHEN_SHIFT 22$ p2 y! O! P0 e8 n# x9 \6 V
- #define ITCCHEN_SHIFT 23
# Q6 i- ?' M4 s7 k- X( J - 4 r. u; y* f9 D: T2 R! r) Y5 ]' g( y2 A; J
- static volatile int irqraised1 = 0;
1 T( p0 w4 x7 R# E - static volatile int irqraised2 = 0;6 \% b& N3 t+ V, H" E
- 8 x) }% {% r! g* @
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 R" T9 b8 |. M) q- \
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! \! b' E9 R/ L P* g* E6 Q# y - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! F% N6 }' k0 d3 D7 Q( S! A
# h3 m. }. k. Q# c' `+ t- dma_addr_t dmaphyssrc1 = 0;7 H8 C9 f$ ~( K7 y V/ k0 d
- dma_addr_t dmaphyssrc2 = 0;7 c5 A/ G! G8 r* U5 u* S
- dma_addr_t dmaphysdest1 = 0;
; U; c; p& Q8 }# z - dma_addr_t dmaphysdest2 = 0;
! m$ o- ]& h$ f% B - ( m4 h9 N8 i& \* j u- z
- char *dmabufsrc1 = NULL;8 X+ | O# ^; [* n4 ^
- char *dmabufsrc2 = NULL;# P! \. D$ p5 m
- char *dmabufdest1 = NULL;; g* O6 s, g! H+ z! R
- char *dmabufdest2 = NULL;3 D7 w/ T, r7 `7 r
- ( S# l3 r: L& ?4 X0 F/ r
- static int acnt = 512;
& o& t) e* J2 @4 ~+ r - static int bcnt = 8;
4 Q, ]/ c3 P; b* N/ s$ [ - static int ccnt = 8;
+ [6 `7 n6 [3 l/ V; A- @
& j% J/ D" N) D' w& {' E/ m- module_param(acnt, int, S_IRUGO);
4 A! L5 C1 d( u8 ^. z$ ? - module_param(bcnt, int, S_IRUGO);
! I3 w/ B T; ]( U: S3 I - module_param(ccnt, int, S_IRUGO);
复制代码
9 v3 X2 `. J, e, R1 T3 I& V' O* m4 {9 o0 i2 }
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
) M( d R' n$ V. \4 A7 Garm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
/ g* R1 i) s/ F+ D 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* H8 N5 F, s5 n- q4 V& W+ A9 z
5 d9 k2 v- K& D
! p6 ?7 O# K) f; d" A" ~. ? |
|