|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 ]) `8 F3 o3 Q0 f8 V) j2 i6 _- [code]EDMA sample test application
|- `! [0 k, v e - /*
/ x2 g* P3 `* c7 x: i - * edma_test.c
! [% }/ E1 q2 r6 ` - *
" F) X3 z( e- l( M; Z$ c1 X7 Q - * brief EDMA3 Test Application; M- v5 {% D2 m. B2 S, O I' M
- *
s3 ?! U J$ u: ^- @ - * This file contains EDMA3 Test code.1 r% v/ S5 P/ j- o7 n& ]
- *# [! P9 n6 ?0 X
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% I6 p0 B# p1 g4 G( _
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& h1 Y5 l$ h; J8 \! Q+ a - * TO CHANGE.) k4 h& B# \: E0 P' Q
- *
$ y0 [+ B' f! C d - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 T0 _7 D. ]$ M - *
# I/ _; ^' N& q& i" z9 ^6 k - * This program is free software; you can redistribute it and/or
. L( K2 p7 Y& M; }0 N - * modify it under the terms of the GNU General Public License as
. A2 t. d- z2 @" ~0 X/ `; z& @ - * published by the Free Software Foundation version 2." m) I( O, F8 H" T
- *8 H; |9 y# r5 s* z- v$ Q: c% a) k
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 M$ z6 E! Y0 n6 r9 I
- * kind, whether express or implied; without even the implied warranty
0 S6 v O4 G' ?+ [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ Q- H$ c" |! f+ v - * GNU General Public License for more details.
, |, Q9 G% I. A' s( z7 M - */
" |0 ~3 A! _& V) n3 M$ ?8 N - 8 w/ w9 j# i) k( g' C5 X
- #include <linux/module.h>" {6 x5 R9 R# s9 n5 W5 j. m) z
- #include <linux/init.h>9 d l0 @6 g6 k; M, I8 V/ J
- #include <linux/errno.h>5 ^3 [6 |1 B& }
- #include <linux/types.h>
0 L! `0 j6 p; a: l& |4 l( v - #include <linux/interrupt.h>$ F2 Y; y) P/ t! a" t. _
- #include <asm/io.h>5 t4 y! G N) a) F* s
- #include <linux/moduleparam.h>
; j$ h+ r# P0 J6 s - #include <linux/sysctl.h>
! ?; h$ T3 d0 O7 W. [: L - #include <linux/mm.h>
# F/ W6 k- p; U" S - #include <linux/dma-mapping.h>) }; K( Y: J7 K* }
- " J K* e/ |0 G: `- B
- #include <mach/memory.h>& k" T# F+ ]& ] C6 z. s
- #include <mach/hardware.h> C: E1 Q; V6 ^6 F' o% t
- #include <mach/irqs.h>8 T9 \4 W$ v4 u. V0 E1 G( ~
- #include <asm/hardware/edma.h>* s J6 h, d5 M) Z) Y4 E [
- " P: j: l0 D% s u9 u
- #undef EDMA3_DEBUG
% w& v0 S* T, E$ ]) N9 L6 O - /*#define EDMA3_DEBUG*/
: D2 E( H8 y# }$ |- u5 d
$ d9 i2 c& v3 C: _. ?% p8 j- #ifdef EDMA3_DEBUG
5 S# Q* [& V9 u8 P! L - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 h$ C! z. A3 Q! }8 L - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& s7 x8 ?9 m4 g4 v) V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
\4 g% R8 M0 a9 A4 R2 z I0 q - #else! m1 F3 c$ n, {9 T( X' a
- #define DMA_PRINTK( x... )$ ?& e. w4 P1 F" q* |* ?7 p9 x- b1 t( X
- #define DMA_FN_IN
H8 }% w) M& S- z* U- d2 K - #define DMA_FN_OUT
7 u# D0 X8 I+ ?4 F J) i- ~& _+ @, h - #endif/ V$ P" o6 X+ j1 h8 r* E1 O s. y) {
- # D' |. J" o3 S& |# ^
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
2 [% k3 k8 T* G6 I. C - #define STATIC_SHIFT 3! d( b/ t5 ^7 n4 k' z$ Y% `) S( t% l
- #define TCINTEN_SHIFT 204 e2 H6 E5 d+ L$ P2 c& b
- #define ITCINTEN_SHIFT 21. ~% i. `6 b2 E( ?) k5 `+ `
- #define TCCHEN_SHIFT 22
4 r; N, k. P9 p0 o6 S1 y - #define ITCCHEN_SHIFT 23: ]! d' b& j1 G' u) v* ^# J) r; |% j
- " w5 t$ x- S$ i2 B! h! G1 S
- static volatile int irqraised1 = 0;
( A+ u% P5 F1 f7 H2 Y5 h m! m - static volatile int irqraised2 = 0;
! p4 R0 `2 ~0 z" l- t) y
, h' s* V; f8 T, a3 M4 E7 x- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( a% g: R# @2 {4 U7 k - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( o. R( v# {% X6 U& T
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& d3 u* q' h/ \ t9 r W
- 0 x! D' w/ C( `
- dma_addr_t dmaphyssrc1 = 0;. }( k6 V5 f. i* e3 b/ I
- dma_addr_t dmaphyssrc2 = 0;
0 X) O) P% N- |" l* c$ A. ? - dma_addr_t dmaphysdest1 = 0;. c3 p8 Q4 e0 V& Z! B$ k) d
- dma_addr_t dmaphysdest2 = 0;
) a. t$ v- d2 P3 q5 |7 e y; {
; v: h; P* e( b; J& N7 s: y* s- char *dmabufsrc1 = NULL;8 H$ P; a7 J( O/ \8 N9 v, d% ?
- char *dmabufsrc2 = NULL;
0 D1 W$ \$ g* y4 P$ I8 t - char *dmabufdest1 = NULL;
' k" Z7 N% ?* \+ n! T0 S0 N - char *dmabufdest2 = NULL;
: i7 b' ?" X, g' c - - \# X0 w% B/ h! k- s
- static int acnt = 512;8 F0 w0 g {' G: Y4 G. a$ W8 O& A+ W
- static int bcnt = 8;
9 o0 f. W! E2 u7 b( [ - static int ccnt = 8;5 Z C* ^5 v3 s/ ^& A2 m4 A# q
5 A7 ^! ]% m/ M& u" ?4 q8 n* s* S- module_param(acnt, int, S_IRUGO);6 N' }% t; x; X& u/ ^
- module_param(bcnt, int, S_IRUGO);8 C7 C8 }5 ]" r- k8 |7 I" g E
- module_param(ccnt, int, S_IRUGO);
复制代码
8 ]! V) `6 W( O! E# x: N- @4 H0 Y$ b) {6 H$ E% F- y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
2 W M* E& }7 c O7 Parm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
& \/ y) |& p, ^5 z 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! u+ t0 P- e8 ~4 J* T1 G' `/ u0 j$ I' I4 G* `7 l+ K0 \& Q: }. N' X( P
% }" A- l' D& R J
|
|