|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 l9 j7 v' ?' y" H
- [code]EDMA sample test application
3 ?2 h+ y% F( P4 w1 a - /*2 R k2 a0 F0 p( F5 c- T
- * edma_test.c
+ c% K: c: }' h7 T2 L - * r' c O6 Z- B. f0 T
- * brief EDMA3 Test Application
' \: K Y4 \8 M* } - *
3 }" t4 x8 N) u/ ^+ a( t, P& v - * This file contains EDMA3 Test code.0 N2 ^7 S5 J: U
- *7 b t0 g' @) Y, D7 b6 x/ t
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
8 g( P6 `9 ]. I5 s; G - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT( \ u9 L, Z4 U' }
- * TO CHANGE./ B8 ]& @! I; G, H9 H" p
- *1 I$ K- @5 P) O. _- J/ H4 ?/ j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) d3 ]' Y+ s! V/ P0 W$ r
- *
9 T/ [& ]* ]1 N9 d1 ^' e - * This program is free software; you can redistribute it and/or6 E, ~5 Y0 M* [( e
- * modify it under the terms of the GNU General Public License as
' D. r! y& Z' Z) k - * published by the Free Software Foundation version 2.
- [" t, _# A$ g5 x L - *" j& O) Z" [/ [8 V8 u1 S' p
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
5 ~% n4 N1 {3 }9 S- W1 L - * kind, whether express or implied; without even the implied warranty0 B' x# d& d5 a% ?* _/ U
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. b2 t; I2 ^% A5 l7 S& `4 }
- * GNU General Public License for more details.
' Z+ I* k8 B; t) Y - */
; b/ t9 P+ U2 d# r+ s( M
, N: Z" s& g8 l1 c" b% h6 x- #include <linux/module.h>
. e5 R: \: a# ?1 q! A1 I$ N- V - #include <linux/init.h>, E2 T0 S( S2 ]& }5 e: Q
- #include <linux/errno.h># V: m" e: X3 o& V) `8 W- h, x
- #include <linux/types.h>
3 @" i/ A1 Q% B! N - #include <linux/interrupt.h>/ K- B+ q: e9 u+ [8 P
- #include <asm/io.h>
" g/ _& @, d) F - #include <linux/moduleparam.h>
6 O' U- L, j% X( t- b4 m - #include <linux/sysctl.h>
) T& a( f6 L2 J: ^ - #include <linux/mm.h>
2 J+ v9 Y3 U& |" ?# {8 w" Z - #include <linux/dma-mapping.h>
3 F Q& i5 f5 M2 W% v! S- c - ! X4 ^) x G: k/ T* A
- #include <mach/memory.h>% h: g! B: u8 e4 v
- #include <mach/hardware.h>: P" }* C" g7 @+ \+ i
- #include <mach/irqs.h>
( t! g ]" Y5 s& v! o( [4 Y c9 r - #include <asm/hardware/edma.h>7 {8 O% I' c9 e; J3 P2 t
; n: L# u: R# O/ V! Z1 P- #undef EDMA3_DEBUG5 _2 D: S c0 j# q- S$ F" b
- /*#define EDMA3_DEBUG*/: A1 p5 S' n0 @( ^( [. u
- ( V% `. U- J$ _5 g0 o1 ]
- #ifdef EDMA3_DEBUG& ^; r( |+ k( ?% o
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
5 Y: F7 w7 m, U W - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
) R0 i* Z; r" I" J1 Z% j - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# E$ ~7 c& {1 M, k - #else3 p+ J$ q5 M+ A: t0 F! A% f
- #define DMA_PRINTK( x... )
3 b2 g! e% b5 z: e - #define DMA_FN_IN
, a2 C& G3 M+ O5 i - #define DMA_FN_OUT
! q& w' j' _" e - #endif9 P5 p0 M( G" K
+ U3 ]% B1 n# f) Z7 e. H" T8 ^) a* p- #define MAX_DMA_TRANSFER_IN_BYTES (32768)" v* `6 Y1 P+ G! Z
- #define STATIC_SHIFT 3: }7 ^% c8 N- F/ E
- #define TCINTEN_SHIFT 20
. r, c3 u5 Z; ] - #define ITCINTEN_SHIFT 21
) N0 v5 s9 X8 v! t - #define TCCHEN_SHIFT 221 s, J4 }7 O5 C6 ~/ n6 N$ `
- #define ITCCHEN_SHIFT 23
1 ^8 J/ e O1 M9 I8 E9 ] - , i- N, ~1 Y9 ~3 J5 @
- static volatile int irqraised1 = 0;3 i( e8 h q9 e) Q G5 {. V# d
- static volatile int irqraised2 = 0;+ B) n- ^9 n; N1 Q; O+ {5 B
- 3 @* E% O7 E' \* H" W+ k+ G
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 P' W# _5 V9 N! j
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& K& w3 F4 O) t/ [+ ]
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ R L+ S1 Q3 \# M3 M$ [% ^) a
/ L: Y0 V0 ^& s/ r: |- dma_addr_t dmaphyssrc1 = 0;& I3 y& m3 M" H
- dma_addr_t dmaphyssrc2 = 0;
* k% O" \4 y) B9 y O - dma_addr_t dmaphysdest1 = 0;6 m, Z) O4 F' X- R) E3 a
- dma_addr_t dmaphysdest2 = 0;
5 q8 u# J* h% V! C+ v
- X% Y! ^$ L) W; L. e& S- char *dmabufsrc1 = NULL;! l3 [+ P0 o0 h: Q
- char *dmabufsrc2 = NULL;9 N8 \0 M1 t8 I; K
- char *dmabufdest1 = NULL;! I# f1 _5 _& _1 X6 u2 X
- char *dmabufdest2 = NULL;
0 B- E3 M+ o- X
3 I, |4 [( i% H) D$ B+ ~1 H- static int acnt = 512;7 H7 s8 l1 ?- w$ m" l* `
- static int bcnt = 8;
1 z, \; [! U0 n+ ?0 G - static int ccnt = 8;0 y( p, [9 b7 {3 o1 A9 j
- 3 V8 v) B5 U0 K6 V& o& c# l4 \
- module_param(acnt, int, S_IRUGO);
; h1 p! C& ^5 q - module_param(bcnt, int, S_IRUGO);/ T7 ^ o1 j$ p- q
- module_param(ccnt, int, S_IRUGO);
复制代码 % Q' r( }4 `$ C7 u! r3 ]
|4 C* P+ E/ B" U8 ]: Y 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
: H% i6 Z7 p D4 F7 Earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。5 V, A) h; s. Q) h- }. O
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
4 ?1 Y' R: ], u* x" \! w) u2 F
- u1 k- f3 V; \% {
/ T5 [6 u- I1 ^ |
|