|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: a; `) x$ b2 o9 |2 [0 E6 k- [code]EDMA sample test application: w: j3 A2 M; N4 O% R' {
- /** b0 S% T4 K3 R4 r o
- * edma_test.c5 p5 B6 x- u' |( L. |
- *1 f1 H% U) z. x% R8 s
- * brief EDMA3 Test Application
2 C( t# s( l. {! Q# a% b - * A+ ]4 u! H& }& e
- * This file contains EDMA3 Test code.
1 o4 x- [6 V% A8 z( Y2 ^3 M0 C9 X9 a - *" C/ R2 Q# \- c. j. {+ s- z
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE0 N/ C3 ~. f+ x. z7 Q
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 B1 h: I: d( D - * TO CHANGE.! B! g0 J( M6 E" G) s( T
- *
' P. I N1 q/ A2 D - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 O9 l& k/ O1 b" X7 { - *2 U1 Q" H5 `7 m1 T s# O/ D
- * This program is free software; you can redistribute it and/or& U6 B3 _9 l5 {6 j) C1 T; G
- * modify it under the terms of the GNU General Public License as
; C1 k7 u/ K# ^+ E$ k9 Q - * published by the Free Software Foundation version 2.
+ r9 r( n; a: L% v - *
/ x. I. ^7 {/ o& y - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
; ^4 N7 v# s1 E9 V9 d - * kind, whether express or implied; without even the implied warranty
7 r% Z6 d8 J9 t9 s - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the6 a; ?# ?8 K, e1 [8 t+ k
- * GNU General Public License for more details.- W3 Y0 l( e5 i
- */ ]2 S9 |: E0 q6 B* b0 Y# p
- 5 k, ?4 V* g) T) Y/ P' _
- #include <linux/module.h>/ H$ i9 Y; f) U' N. W# Y6 J
- #include <linux/init.h>: R/ c# Y1 ] t' [; g
- #include <linux/errno.h>
# D1 Q' b3 m9 r6 W& W; n& `6 [. Z - #include <linux/types.h>0 [3 r8 `0 d# t* p% M
- #include <linux/interrupt.h>* ^: a9 z1 q% a$ \
- #include <asm/io.h>& ^" ]# q% a; ?" f; I. e: r
- #include <linux/moduleparam.h>
! _% r! u9 }& r3 V/ M1 {' |3 }$ f1 D0 ] - #include <linux/sysctl.h>7 }- o) e8 p1 B3 a
- #include <linux/mm.h>
$ i6 x' m+ B! K5 @6 `- p: a. W - #include <linux/dma-mapping.h>
" P& l" Z+ m2 D3 U$ q - * X7 k. {) @0 A+ f, Z0 {/ D
- #include <mach/memory.h>; b( x) _6 ?! _1 ~9 V7 `
- #include <mach/hardware.h>
' g' l) p9 a* g( f - #include <mach/irqs.h>
1 O, N0 W, d( p" N# |; N2 J3 ] s# e: x m - #include <asm/hardware/edma.h>: f* }4 v; `( r# D7 j: r. M
- ' b: k" ^4 T5 b9 o$ x# s
- #undef EDMA3_DEBUG2 }" u" {( s9 h/ ^8 M$ ?8 `
- /*#define EDMA3_DEBUG*/- S; a- g9 w H% T+ H* P
0 X% U# S7 _) I% W% I- #ifdef EDMA3_DEBUG0 D+ V* E# Y5 c* Z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)& F8 X2 ^9 c* F U$ j5 J" G
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ f+ c0 u. [: i9 J - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
% C$ u6 s, _9 |2 m6 n: \' g - #else
3 ]& l" J" Q' E7 g s) p - #define DMA_PRINTK( x... ): V' v/ W" K9 W H' P" d
- #define DMA_FN_IN, E9 t2 o {3 U$ e e
- #define DMA_FN_OUT' {7 {: o) L! S, S- z
- #endif
; z6 |( ~, j: a* Q - ! B3 Q7 C( ]- o
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
7 {" C h* G8 J5 w - #define STATIC_SHIFT 3
3 } f/ h; K1 H& C9 z - #define TCINTEN_SHIFT 20
. J7 [& s8 ~) e( }3 G/ x - #define ITCINTEN_SHIFT 21- T7 J/ r2 k- j; \# w" @8 k# [' m
- #define TCCHEN_SHIFT 223 b7 ~+ ^$ p' J7 G
- #define ITCCHEN_SHIFT 23
* D8 b9 U! B1 h8 L - 7 M, Q& k6 G$ p0 F' t) b
- static volatile int irqraised1 = 0;
: o- H: D9 h* m { - static volatile int irqraised2 = 0;
3 ]( G1 u; d9 u9 z! {$ x - + u' @7 r' U8 m/ R5 G: l# \' n
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 l/ [; ~8 o; g# t5 I7 s3 K
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, Z! n6 W/ @$ Y - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 i9 x" C j7 D! h+ s! P
+ p0 R3 Z% k& H0 \- dma_addr_t dmaphyssrc1 = 0;" H6 p0 l& }" b# i3 z* u$ G
- dma_addr_t dmaphyssrc2 = 0;% \0 H1 M2 a, R. D
- dma_addr_t dmaphysdest1 = 0;
3 B* t6 X3 S9 a& J0 {7 u - dma_addr_t dmaphysdest2 = 0;/ b5 O1 l: j; r' O
- + ^- _! G+ _3 u
- char *dmabufsrc1 = NULL;- l' V) ?8 x; V( O. U: o
- char *dmabufsrc2 = NULL;
3 l( \6 p4 n- l U - char *dmabufdest1 = NULL;2 Q; G, T/ T1 R
- char *dmabufdest2 = NULL;4 H) d9 P, x7 G" V1 l
- : ] ^; y5 V! q; p4 g: B1 x
- static int acnt = 512;
" X( K' I& k2 Y8 w W) P/ t1 | - static int bcnt = 8;0 b) l- [( |/ ?/ ~
- static int ccnt = 8;& b6 J0 l0 S1 d+ s' h- E! w5 p
& V( s' q7 N$ p w- module_param(acnt, int, S_IRUGO);" d/ ~* J2 a$ \6 c E
- module_param(bcnt, int, S_IRUGO);" A6 C- c' B# Z( k
- module_param(ccnt, int, S_IRUGO);
复制代码
2 l( u5 R0 `7 Z3 o/ _8 X! R: V
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用! B7 W0 {) i3 l5 }# i2 V
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# G# I0 W9 `2 A' k& L a
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。3 M' d9 c& N7 Z& z4 \" |: f# Y5 j
* D$ x$ A( N$ T/ C; j
' B$ E+ T: h; R. B% }) y8 V |
|