|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 U) \1 I7 q: Q' w0 B6 z2 y3 h- [code]EDMA sample test application; r+ K6 h0 l$ ~' n C+ D4 K, H3 Q
- /*
9 S7 E3 V w4 `* m- t5 n. v/ r - * edma_test.c/ D$ i* H; o6 r& M, m2 N# k+ c
- *
! ?2 m3 N* p0 ^ - * brief EDMA3 Test Application
. b# z# a- u* H# v4 N2 ? ]* _ - */ V( f4 z) F4 Q' ~* K
- * This file contains EDMA3 Test code.
! T( t+ P" h) W5 Q( N% p - *
/ _# Q- D2 Q' P5 @7 ] - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
- v/ a/ b1 T$ p! N. g - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' {) o0 W, \3 t- ~: O v& H$ x - * TO CHANGE.
! c4 O! c: W V8 U I5 K2 E - *
$ t4 H- t2 v4 w5 C$ ?; W$ G" u1 D. { - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 n0 y' S8 v# C! v0 Y' u
- *# B7 l% [2 `' J E/ @
- * This program is free software; you can redistribute it and/or
/ B7 G, b# Z3 s/ g- r2 i - * modify it under the terms of the GNU General Public License as1 [6 e4 F6 M. E" u
- * published by the Free Software Foundation version 2.( A4 ]+ b4 \+ P; j+ ^, a
- *
" B( S. S' m$ X+ O9 A0 E) d$ D - * This program is distributed "as is" WITHOUT ANY WARRANTY of any C: d6 b: k$ C/ a
- * kind, whether express or implied; without even the implied warranty6 m9 g* I0 _$ d
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
. Z% u3 d2 Z4 [# }! @& n - * GNU General Public License for more details." }6 L7 }# a: i& L# g' e
- */
9 N( y5 v! A9 F1 r! J - 9 N+ `- n( \/ \! C0 [6 E# o
- #include <linux/module.h>3 w% C: x9 a! ^
- #include <linux/init.h>
$ u- |1 U7 G ` - #include <linux/errno.h>
. g4 b9 N9 H: C3 b& p4 `3 h - #include <linux/types.h>4 g% ^' t" h" @/ ]3 T& a* o
- #include <linux/interrupt.h>
" V% c1 z6 |; k& T, O4 d8 @) O3 g - #include <asm/io.h>9 W. i* Q4 W/ |" [
- #include <linux/moduleparam.h>
+ W' }" U! ? x6 w" m9 M; K - #include <linux/sysctl.h>2 [. |) T# `! r- w m. `& @: I8 L
- #include <linux/mm.h>2 h# w8 p/ B' M( I& q, g3 F
- #include <linux/dma-mapping.h>
5 _; V7 u2 y+ \+ p; g5 x# \/ a* l W
5 g! y; a$ ^7 Y' _# l' c0 V, ~; C3 R- #include <mach/memory.h>4 o5 p* |4 {% M6 K7 P
- #include <mach/hardware.h>, f. x4 u& [0 t$ }$ V& H
- #include <mach/irqs.h>
) v* Z8 L2 o0 \; g; f3 v0 g' E - #include <asm/hardware/edma.h>) Q/ E2 m. @- Q7 g8 l3 e' R( V# P# Q6 V7 D
- / Y: ]- p9 t |4 x9 q4 z
- #undef EDMA3_DEBUG
& j/ n/ u3 P6 p - /*#define EDMA3_DEBUG*/
" h6 A+ e o' j; \& M - 1 @# k5 j4 X8 E1 U7 r. H+ m* i
- #ifdef EDMA3_DEBUG1 V3 T- C/ _7 J8 ~+ l4 q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 N- E9 T* F3 o; g2 j5 ~ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
" s+ j9 X, \- z/ L, v - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
3 J6 c/ T N; M' V/ { - #else
# h6 J4 V8 {6 a8 d: c9 y: [- Z - #define DMA_PRINTK( x... ). T* B8 o! G' p+ i" z
- #define DMA_FN_IN
7 a0 [5 o6 ~) E6 b- w. ~' L2 H7 F- P - #define DMA_FN_OUT
" R! t# u9 P; ]( k6 o1 h - #endif5 R0 m/ H& Q# C" X' q9 J
- ) L7 K, p& Q+ c+ q
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 O, d: O. \! S9 w4 w! n2 E2 T
- #define STATIC_SHIFT 3
3 x2 I8 m. v0 e; W# j3 h - #define TCINTEN_SHIFT 20
t) F! n* a2 |# F/ D# [" Z8 a - #define ITCINTEN_SHIFT 21
/ I9 {$ A) A8 {! [" L' d# c. d - #define TCCHEN_SHIFT 22 W2 {' _8 w8 ? m# Q2 t
- #define ITCCHEN_SHIFT 237 T4 |9 F6 t* ?) a) A
, V) X" c' p/ U7 K6 r- static volatile int irqraised1 = 0;
, u' z$ \$ m3 D% G3 Q- f" z+ R - static volatile int irqraised2 = 0;1 B0 J) P& v% b$ A' U2 @ K
- ( x, X; w7 u0 y N2 R" J
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! L! ]( v1 _& L, Z
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ a5 S1 L8 _ N9 H1 [1 K - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. n8 z) m4 x; ?" r$ q2 x. v
2 O! f7 Z2 s9 D# K5 O- dma_addr_t dmaphyssrc1 = 0;% I$ w) C) t/ t2 d" ?8 J
- dma_addr_t dmaphyssrc2 = 0;
' `( N0 p- p: \7 N$ J+ p - dma_addr_t dmaphysdest1 = 0;1 v h( i4 q: R$ f
- dma_addr_t dmaphysdest2 = 0;9 g! D; f. V8 v: ?
' h9 m; \6 H5 ~5 G. ~$ f% H( n- char *dmabufsrc1 = NULL;
1 y) L! A4 j1 o5 @4 i+ } - char *dmabufsrc2 = NULL;
' U" I0 R5 M, f- p5 q, j/ k - char *dmabufdest1 = NULL;
: f4 Q' f5 f! l# e( R! Y2 t8 E - char *dmabufdest2 = NULL;0 r5 M0 U% J" A/ D0 B! [
- ) W0 L6 U. m9 \% _# W2 V5 v
- static int acnt = 512;- B$ W5 C9 C' C: X* F
- static int bcnt = 8;) S8 H& n" l7 K9 X
- static int ccnt = 8;
" z& E* \8 O. ~" w! B - 1 ]! T9 a/ m: B/ N' D9 ^
- module_param(acnt, int, S_IRUGO);. [; I4 q( F8 T
- module_param(bcnt, int, S_IRUGO);
! |' ]. ~4 z" f - module_param(ccnt, int, S_IRUGO);
复制代码
% u+ p6 N/ v! k3 @/ F3 @7 ?, {" b# ?. {- L L: r
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 x# i" w A0 I% p# i' b
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
2 P) n% D: }$ w$ e! q( C, X 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
0 ^2 g! h3 p& p4 N/ d1 `; [9 H, @' e
. ]' N! S. t, `
! B' s" N \8 } |
|