|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
1 O2 b% X+ ~- Y- [code]EDMA sample test application6 v- l# c0 Y2 L# B; N& c7 A3 `! _
- /*
/ U& R1 W4 W5 K6 l; X- M& y - * edma_test.c5 K$ J/ b' k2 v3 W' _
- ** z& W' p( Z; O7 ?8 s
- * brief EDMA3 Test Application
6 K' O) ^- Y, K' T% U - *- W6 Y$ t2 J2 h4 ^
- * This file contains EDMA3 Test code.
% y# }' ?1 P6 i+ l3 O - ** S3 Z3 f9 S. N" }) K/ ^: Y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
; H, }/ h" S% D: L. _/ w$ X - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT1 [4 d3 o. a# H( z. \
- * TO CHANGE.$ @0 B: o: O2 H1 m2 d; t
- *) }5 q0 T5 d. r( A K
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' e2 X. @& b) }' R
- *) g$ n) S# z2 ]: U
- * This program is free software; you can redistribute it and/or2 g+ q7 p0 u1 L) K, L s, w
- * modify it under the terms of the GNU General Public License as" S: _, b C( v( ~" `! T/ m9 M
- * published by the Free Software Foundation version 2.% K" i5 l1 C$ c. W: x
- *
% a1 Y+ u* c: E" W6 t9 V - * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 `% @) B3 e( I. ^& D2 f ^
- * kind, whether express or implied; without even the implied warranty6 L" i; F# P4 v" X6 I% L
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 g" L2 u; m. J' ^' X8 c - * GNU General Public License for more details.
8 L1 \& z+ J# v0 P( w! p7 [ - */5 q/ P* y0 a* S$ X9 V7 e
- ; a& E3 D; C) j: ~2 Z
- #include <linux/module.h>2 U% f0 c" L0 C9 s! v" b
- #include <linux/init.h>$ ?7 S9 R4 r2 r' c# w+ D* W$ W
- #include <linux/errno.h>
" `6 N4 Q# D( K ]/ b$ j - #include <linux/types.h>
* k8 {- C$ ~! x' R$ M - #include <linux/interrupt.h>8 O5 d9 G+ U/ b6 H& {0 W$ O
- #include <asm/io.h>
1 s3 w8 ~# P# N+ q - #include <linux/moduleparam.h>$ T z, y- R7 s7 Z' b: v3 n, J& J0 w
- #include <linux/sysctl.h>3 N" O: |: A- b& ~
- #include <linux/mm.h>
; A- J7 g8 G/ K/ Z* n3 _ - #include <linux/dma-mapping.h>4 o( P5 \( E. x z+ f8 Q: E
) V2 v% s/ e1 n) ~- #include <mach/memory.h>
' \/ \; W% ~& m5 ~) D: |# H6 |' d - #include <mach/hardware.h>
$ `. B1 W4 J6 e( ~" h! _ - #include <mach/irqs.h>$ U2 c3 A# d. g
- #include <asm/hardware/edma.h>5 |, J2 y* X3 E
- 7 H5 l4 P2 i0 Q& C7 p- ]: z- [
- #undef EDMA3_DEBUG' Q7 Q7 C; D& E& P$ C4 M$ a
- /*#define EDMA3_DEBUG*// F2 y0 K* j" Q+ J4 \, K/ i
- 7 U# O5 k+ ?5 F! n2 O
- #ifdef EDMA3_DEBUG) R& Z+ |9 G" S3 b
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)) C, D7 m% r. ~- D$ P
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)- Y, Q& X4 _& l+ K2 M) ~
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
" [. ?3 y+ I( ` Z: x0 d8 j - #else8 Z9 k- `$ m3 F# v4 y. G2 O7 ]
- #define DMA_PRINTK( x... )& k D4 _+ x0 F; x, f* U' t) k
- #define DMA_FN_IN
7 I% ?' u% j8 G O1 E ]3 x - #define DMA_FN_OUT
8 O' q1 f$ }6 {0 [. V. \# K3 O - #endif
/ s+ v% w% S2 v9 k* X) S) i - 5 v9 ^+ @' P1 U4 ^ c
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- D4 @" A! `% @/ N1 c
- #define STATIC_SHIFT 3
; o& @2 I! i& x' X4 n - #define TCINTEN_SHIFT 20
! I$ ]2 I& ?( J - #define ITCINTEN_SHIFT 215 W5 b+ S/ a9 `6 K) s& i u
- #define TCCHEN_SHIFT 22% @2 C& g$ \& q
- #define ITCCHEN_SHIFT 23
4 J2 f6 r. D/ _- Q+ s: l
+ a: l& Y# v5 C* J" F3 C7 @5 ]- static volatile int irqraised1 = 0;. |0 Z5 e. b- C: b2 e- u' p" j- V3 m
- static volatile int irqraised2 = 0;* W* _. J* ~5 o; V7 d- m
$ l! f$ E7 R/ f7 ?9 {- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 k4 q2 a2 ~2 y: b
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# `. r0 `4 W. T' k3 w - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ c, i0 w+ N8 ]' L+ R - 3 M9 p" ]1 w" `# y. t8 B% b
- dma_addr_t dmaphyssrc1 = 0;
3 v# [( c* F4 _3 @& ] - dma_addr_t dmaphyssrc2 = 0;! z$ A, ? V6 f# L, k1 Y# \4 x
- dma_addr_t dmaphysdest1 = 0;& K& e8 m4 m$ m- G; e3 C
- dma_addr_t dmaphysdest2 = 0;4 P6 `- W3 x/ S( o: [
2 A% \3 \; [& l- char *dmabufsrc1 = NULL;
2 F$ ~1 }- ?. E; p! W6 R - char *dmabufsrc2 = NULL;. ]& ^5 M; h7 T; n& H
- char *dmabufdest1 = NULL;
2 |5 Z. q- B7 O5 `( V. c' P0 v1 F- K: I - char *dmabufdest2 = NULL;
2 l$ ^1 j' k& z2 B" b
+ A! g+ h a- T- static int acnt = 512;2 m) f% n. {* K, {6 [
- static int bcnt = 8;
2 k& }$ G D4 j. ~5 _, C5 z - static int ccnt = 8;
$ e4 b6 k5 i7 Y5 ]; T; U
7 h+ k$ U5 w5 w( E0 ]1 F U- module_param(acnt, int, S_IRUGO);
& A% U+ N2 B& z- X |6 |" ~ - module_param(bcnt, int, S_IRUGO);) b# P! [3 B4 H
- module_param(ccnt, int, S_IRUGO);
复制代码 ) W" z% V6 |5 w7 B
& @4 a, D6 u7 n
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 \5 Y4 ^; N; J0 @3 O4 W& t }# xarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 C' [7 w- Z8 U 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。% E% H" V- c5 [: b. P" q
; N$ Q2 \8 a+ I; v
- S" Z7 e2 q; `2 b- P
|
|