|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 5 A& q2 Y& ?7 n7 A
- [code]EDMA sample test application
5 e: e# Z& n$ }* s0 L - /*
" Y! O1 @% q1 ]9 Q - * edma_test.c8 E0 P5 m8 @) ^% v' O) v
- *
$ w' a, } O9 T( [' G' R, \ - * brief EDMA3 Test Application7 ]4 A" G+ |: ^) C( _
- *
' @+ m9 j" n0 k - * This file contains EDMA3 Test code.3 j7 R& f1 G( p* f0 b
- *
) k( H: d ~6 g4 d+ a2 U - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE* \1 p; X$ u }# Z5 e* u
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 ~1 }, E- [8 W$ u
- * TO CHANGE.
+ ~. G8 L% ~6 j; k* F# Z7 Z - *2 l- U! R, _6 |
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* x0 I( L- Q- B2 E - *
Y, j# u) U* l# y - * This program is free software; you can redistribute it and/or
3 p z) |( c9 }2 r% s, i - * modify it under the terms of the GNU General Public License as
5 }- w1 f' A, N0 s - * published by the Free Software Foundation version 2.
. L! e0 Y! W# @/ e* G3 u$ H- O! s - *& p/ A* W0 {' q, M' \
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ q+ z6 R4 r6 K. h4 w5 x
- * kind, whether express or implied; without even the implied warranty
$ i8 m# n. Q" K+ s+ h* R/ ^3 z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) B$ p6 c' y( F" l - * GNU General Public License for more details.
5 g: Q) Y3 Z* S! H1 b - */
+ {+ k; f- p- Q
|6 y: @$ t' N) z- #include <linux/module.h>5 d7 q; z4 D: l6 ~1 p9 w
- #include <linux/init.h>, Z. ~( a' ~- h* g# A% ]
- #include <linux/errno.h>9 z* A1 [& K! z5 O
- #include <linux/types.h>( e6 F- N7 I) S* I$ i5 f
- #include <linux/interrupt.h>
% X1 x/ J% B* R5 R2 j - #include <asm/io.h>5 M e, _. l6 i% G. d# r8 t/ d, K
- #include <linux/moduleparam.h>' @7 j: w3 V) H" ~$ y4 w% Z
- #include <linux/sysctl.h>8 `8 B/ G! p7 f- M7 }! D
- #include <linux/mm.h>
5 O2 Y- C) X3 J" C$ R - #include <linux/dma-mapping.h>6 U* Z8 v T3 o: o2 c* k
- * H3 m ~- U* F
- #include <mach/memory.h>- ]" q& d' m1 h* z7 }2 M, s
- #include <mach/hardware.h>' y4 F0 H) h3 \& g! P. |! ^
- #include <mach/irqs.h>. I; }5 X3 K V. X
- #include <asm/hardware/edma.h>+ T7 [2 W' L; f" [6 k& A
) _* t3 m' B0 J) r; ]- #undef EDMA3_DEBUG1 k' j* P! B r9 Y, b
- /*#define EDMA3_DEBUG*/( H2 I1 a+ w |% a$ P) E \
- 8 u& \1 v/ t; X- `( [( E: B
- #ifdef EDMA3_DEBUG
4 k/ B) o& R7 b: F; r' m. ] - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)( n. ]) J% v* m3 s% P& x: Y, _
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
1 S7 B. U9 H0 Z. H2 v c$ {/ J - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" L0 v) L! A: x, S9 w6 F- Z
- #else
# ]- q) X U7 j' G& e5 z$ v) \ - #define DMA_PRINTK( x... )8 K' g I, Q( ]8 f( w1 E) F' T
- #define DMA_FN_IN6 N8 ~' R3 ~: L6 O8 @% Q. f% t
- #define DMA_FN_OUT
/ B& J3 w! M: ]4 p2 M' [, L- U - #endif
3 I: N5 l0 ?7 b: G: s* E) F) `) e - : ^1 w7 g4 p) f* X; ^: m# L/ [1 i
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
+ N, h* O( f2 m - #define STATIC_SHIFT 3" q- J& \! {7 t/ P% \4 o; ^ m) d
- #define TCINTEN_SHIFT 20
( e* B, k3 P, \: Z - #define ITCINTEN_SHIFT 21
1 T d+ p- e) T2 ` - #define TCCHEN_SHIFT 228 \( W0 z! E8 R# g) {, d
- #define ITCCHEN_SHIFT 23
3 b0 C) t% v7 S8 p* I0 [ - # R% Y8 d l5 r8 y! k4 U
- static volatile int irqraised1 = 0;4 c) Z F, v: H p$ _5 k
- static volatile int irqraised2 = 0;$ ?; F; j, L# v" q/ M6 p0 {! {
- ' j# \( j0 Z7 H* @# S+ Y6 P& f
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& z, t% T# n$ Z* M b' ?' ^9 N. e - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 G& b3 [, K3 B1 |1 y6 d/ |& l
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% D) d* d! C$ Q, f# y1 x
$ j9 T4 Q( {& |: V- dma_addr_t dmaphyssrc1 = 0;
- W* |& G) R+ w5 ] - dma_addr_t dmaphyssrc2 = 0;
4 B1 \& p* d1 B/ s5 q% l6 C - dma_addr_t dmaphysdest1 = 0;
1 R9 k3 h, h( Z$ a - dma_addr_t dmaphysdest2 = 0;
$ E) C' c5 x8 _2 @5 }% \
; G" w+ \( g* N" B1 E- char *dmabufsrc1 = NULL;
* e- E9 R5 I v- L8 F$ V0 q - char *dmabufsrc2 = NULL;
3 @% R# e# \$ g; Q4 ^+ t# l _ - char *dmabufdest1 = NULL;
5 @, x3 o0 P) ^2 u2 q, i/ r0 [6 F( K - char *dmabufdest2 = NULL;
- W C l$ t; \/ y8 q$ e3 ?! R) z
& y5 \* o; N; Z2 t2 Z- static int acnt = 512;1 x) O4 i( e0 r g; h
- static int bcnt = 8;% a7 h) F, {$ p1 h8 f
- static int ccnt = 8;+ }% y7 L, p R
- ! G% X+ ^9 e" |8 ~0 `% G- Q' Z4 L1 I
- module_param(acnt, int, S_IRUGO);
. l( @; B6 U! h+ ]# a# p - module_param(bcnt, int, S_IRUGO);
" s. ?7 H/ n* P- J5 I/ W+ k - module_param(ccnt, int, S_IRUGO);
复制代码 / { {* [8 ?" O; ^/ S+ K
4 g r9 c" |0 x' q3 N 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
: ]% J2 p- }7 X3 oarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( K# o, p6 |% u( z7 h 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, }5 D3 ? b& `! m: Z; L
) {2 ~/ J- _8 V9 w1 q" k
3 t5 s& c" E; W* [9 p- _# { |
|