|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ W+ ?6 V% V. s4 i% w$ `- [code]EDMA sample test application6 q \4 k3 U }- }$ u- ^
- /*
3 Y4 q! X$ Q! F1 } - * edma_test.c
7 t- b1 b0 h4 n: | - *; X' D9 A# c3 m' Y2 ]! k3 E
- * brief EDMA3 Test Application+ L8 C( y# v2 n& u9 ]& Q
- *2 z0 n% m/ Z( F0 ~' {
- * This file contains EDMA3 Test code.
* z0 L! M2 N: b7 {6 p' _6 L - *
6 D) w. e- I( [2 o+ J7 m7 i/ I - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE: e- }: a' t( ~, _! v
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
+ t7 ~! N5 ]0 d" T - * TO CHANGE.& @# B" \ z7 r, D( O# Z
- *; x/ n- a) K! g1 H
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
3 `8 g; L5 a; a" J0 i d - *
; [* y+ A5 @& p* ~' k* C! }2 y6 ] - * This program is free software; you can redistribute it and/or$ T1 N+ R" d+ `5 z1 l; m6 o8 C' M
- * modify it under the terms of the GNU General Public License as% t/ l0 M( `( V, q/ e: S" K
- * published by the Free Software Foundation version 2. k5 a/ R9 \8 W1 F
- *
7 L# P) T; f9 \6 _$ m6 N. F - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
* V8 [6 _% x6 C( ?2 _ - * kind, whether express or implied; without even the implied warranty3 u) _# V% A3 h& S4 J
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# n) ?0 D4 P! F- C4 [
- * GNU General Public License for more details.
U/ m; ~1 _% z3 c - */
# B, @$ M# f5 b! X' `& h
$ l+ W( s# `- f5 ?) n! a- #include <linux/module.h>$ D; u8 d0 p3 k g3 z& }
- #include <linux/init.h>
6 {* T2 d! P* N. P4 q" f8 h4 J. d - #include <linux/errno.h>- \3 h& E5 M' k3 R( c
- #include <linux/types.h>8 G6 q5 I5 Q7 a! p. x0 Q" w7 K
- #include <linux/interrupt.h>3 g7 k: c* I, q* h
- #include <asm/io.h>
( x) ?3 i2 G; y9 M5 G; \ - #include <linux/moduleparam.h>5 R8 V! `6 ~) K" K4 Y- y
- #include <linux/sysctl.h>
2 y" Z1 n' E S8 `' m - #include <linux/mm.h>) r8 |1 @$ E2 T) D; H/ @
- #include <linux/dma-mapping.h>/ {) O9 Y, j: L2 h. ^; n
Q4 U( N1 @5 @- #include <mach/memory.h>
& W6 C* ^' Y; |8 a* z, j3 w U - #include <mach/hardware.h>
0 x, T* z" w; b6 t' T - #include <mach/irqs.h>" ~2 W/ \3 Z4 L5 f; k
- #include <asm/hardware/edma.h>9 Z0 y9 H4 g2 n+ t! b _
- o3 ~& m. s( u. E
- #undef EDMA3_DEBUG
: e1 i3 a: {- m( l9 H* i. x5 U. p6 ? - /*#define EDMA3_DEBUG*/
; `; W# Z; G4 v6 ~ - # [" J* M6 t: z, ~) ^2 i$ W
- #ifdef EDMA3_DEBUG8 c% g$ C1 C& _2 n# A! U1 c) Q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 x o I6 s7 o, F& }0 e - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)$ K% m. a& G- u2 R3 v( k8 d. m
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( M) Z' u: W5 _
- #else; _4 w# c: Z' y- W2 q6 H
- #define DMA_PRINTK( x... )( s0 q$ G6 ?5 h2 q8 c5 j
- #define DMA_FN_IN4 d7 ^& t$ H& ~6 R8 o( D
- #define DMA_FN_OUT
/ r* t- I7 E. h3 q4 s4 e. E - #endif: `7 f) l7 W% N% k/ i A+ F
- , x* p& ]# b4 R2 j( |: H
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 |: J; V# g2 ?/ t( \
- #define STATIC_SHIFT 3, m* ]/ \( m. u
- #define TCINTEN_SHIFT 20- q4 v. q. k+ Y" X+ c. }* u" X( o
- #define ITCINTEN_SHIFT 21 a6 _9 A3 g. C# m7 z$ E `
- #define TCCHEN_SHIFT 22; p! o" O1 c$ [+ F
- #define ITCCHEN_SHIFT 23
# [0 S% S2 E2 Y% ? - $ C) f: v _9 B7 D& s
- static volatile int irqraised1 = 0;0 w4 C8 B% \, Y3 m2 |: {
- static volatile int irqraised2 = 0;# q6 J% U; O4 v3 R( B
- ) @6 S6 ~/ D; C
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* b* C. Z, m- g5 K8 z5 i - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ R2 A, h8 O+ K( i% `8 f- K( J$ u' p - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# u6 v1 p% L& O1 c5 n! t8 { ^
- 8 a3 Q$ k, e6 }: t/ p
- dma_addr_t dmaphyssrc1 = 0;0 c1 ]5 [' U5 z
- dma_addr_t dmaphyssrc2 = 0;4 U( m5 a0 Z1 k& {, w! t
- dma_addr_t dmaphysdest1 = 0;
' t' g c4 q. Y# ?. C, _" b+ t - dma_addr_t dmaphysdest2 = 0;
% z: G) V0 p6 d8 }7 I, I* S - w9 r8 K Q4 Z! ~+ x
- char *dmabufsrc1 = NULL;
1 m. h" A9 G b q7 n - char *dmabufsrc2 = NULL;
( b+ \4 l; W0 u E" v - char *dmabufdest1 = NULL;
: u" g5 t, e$ H/ ?! z5 @- ?$ Y$ H - char *dmabufdest2 = NULL;
( _- F2 y$ B2 k0 u# u( | - q2 h4 }3 i0 t
- static int acnt = 512;/ k; a [+ v2 f3 n# U, p
- static int bcnt = 8;
( L# `' j C, K" C x: j- ^8 N - static int ccnt = 8;
/ j, @- }2 |5 J' ~' R c - ( ^$ b- `2 `% _. E1 d
- module_param(acnt, int, S_IRUGO);
+ b3 T& i7 ?; s' \1 A7 I - module_param(bcnt, int, S_IRUGO);
9 s" N2 t. o; v$ \' B& o - module_param(ccnt, int, S_IRUGO);
复制代码 / r8 Q: }- T* k+ r1 E- B
6 q; Q0 [- L1 d' k# M" L2 u4 B
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 D0 Z, G( s1 C- U9 i: ?
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。- T8 M B" c1 C' K9 t3 B7 g
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。2 [( r0 x `7 B9 a* j
# o- |7 Q. {. A* |+ I: W
4 e3 `1 f# U) A) _! Y0 q- W% b
|
|