|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
6 _8 }2 @. y0 |- t& j- N. x- [code]EDMA sample test application
& ?$ S7 I1 r+ J) y - /*
9 C& h, D+ i9 A' t9 F; { - * edma_test.c8 e1 |7 @! l3 d
- *3 ~9 x- G& d7 Y( w/ w
- * brief EDMA3 Test Application
8 f. J7 y9 M- v' _( p; _8 s& v* D - *
2 {; q/ r6 V+ r+ R7 ] S/ } - * This file contains EDMA3 Test code.
8 j' B" ^' \! E9 E& ^) c - *, l; Q5 Q* M& a# U) O
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 o8 P5 j( M& W% K
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) r2 ?/ u: f* l- n4 Z - * TO CHANGE.
; i. b4 R. b8 f9 R m. w - *" Y, a& h! J2 b4 d% _
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/" j$ q6 x0 y+ |. R. X, J/ m
- *, [6 f" n- _$ W! l* ^
- * This program is free software; you can redistribute it and/or
" f+ }+ v% \& L - * modify it under the terms of the GNU General Public License as
" m0 [7 v1 s. W - * published by the Free Software Foundation version 2.
4 q- M! C0 Z" k& B" W* i+ y - *
5 i* q) R, ]1 Q0 l2 q - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
7 _' z* `& U% Y- Y/ ` - * kind, whether express or implied; without even the implied warranty
) o. e2 R1 {+ \, T! ~( |1 a - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
$ |, Y/ c& A+ Z1 G; ^6 K4 } I - * GNU General Public License for more details.1 M+ o4 x* K0 `5 i9 @$ G+ A
- */) J' R% j# [" V5 u% N) m0 R
9 ]- X: L6 i( m1 `7 Q- #include <linux/module.h>9 K6 j/ a) w( N1 V% ~, Z. ^; k9 j) }
- #include <linux/init.h>
. d8 d' F. q! X- S" W4 v - #include <linux/errno.h>
5 A& m, b5 R* ^1 Q - #include <linux/types.h>) c( k% K7 \2 J( l) ~# F2 e3 U. ?
- #include <linux/interrupt.h>
9 z6 K Z" n* ~) {' W; s7 l( i - #include <asm/io.h>3 s5 S3 d* X* t+ @% Q1 h1 R
- #include <linux/moduleparam.h>
" g* j1 H0 O1 A, a0 s - #include <linux/sysctl.h>- S u# B$ P) ?
- #include <linux/mm.h>4 N# F* o) o0 d3 i" [
- #include <linux/dma-mapping.h>
; D8 I6 S2 R: u) v" D$ e6 v& K - : @, X/ ~5 Q! K- h# }* G
- #include <mach/memory.h>5 Z! l( ?/ e$ M8 }
- #include <mach/hardware.h>* C L" [& V# H
- #include <mach/irqs.h>9 |5 `" q/ T4 \
- #include <asm/hardware/edma.h>
9 Q/ C$ V0 e0 T1 H6 B4 ?2 i - / O+ c( |9 q: a" {
- #undef EDMA3_DEBUG# j- _6 x+ s- e5 j* F
- /*#define EDMA3_DEBUG*/
! J4 b9 ]3 ]3 q; ]' J - 2 ?2 O$ u/ I0 r
- #ifdef EDMA3_DEBUG
, ?; Q- D8 f' X" @" }% s3 I - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! U. c* Y Y9 F$ A5 A' N
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 \4 G8 `# U/ L
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
1 I6 K) T. P3 k& U( ?6 a - #else$ v! j& G, ?+ h% D- c/ x4 U7 l
- #define DMA_PRINTK( x... )
- }4 l- o# A0 l: A1 s - #define DMA_FN_IN
* J! l4 w; j9 C2 w |: _* A5 i - #define DMA_FN_OUT! h$ n3 X& s9 A( y5 i, H2 K; D
- #endif+ a% e: i9 f7 |; i( ]
- $ U8 K# W! ^# Q5 ]3 |
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)0 s! t: K+ W2 b) d( X7 U, b
- #define STATIC_SHIFT 3
- P6 n9 @8 x }$ T/ M3 ]7 i - #define TCINTEN_SHIFT 208 l3 h: I( R8 u3 ?8 ~. h
- #define ITCINTEN_SHIFT 21+ i& k" A( k: O
- #define TCCHEN_SHIFT 228 P) ^& }& d! v( b$ Z! n
- #define ITCCHEN_SHIFT 23
9 y. C% [6 T& f) Q+ \" [, s! G1 @ - 1 M x! c# {. H8 U/ ?
- static volatile int irqraised1 = 0;9 _8 t+ k$ b, D2 k! R; {
- static volatile int irqraised2 = 0;
0 P& q0 o3 ~ W4 h7 M" X; d1 Q% v$ }
& e/ ? X8 L" b* Z0 F) f% j" x- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# l+ t! f' H- ]
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& N# \* |0 k5 z1 i" b1 T0 t
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, O2 D2 Z4 X# h1 b - 3 v; g# \' u* h
- dma_addr_t dmaphyssrc1 = 0;
2 P8 S' ]8 r* [3 y: Y. Q - dma_addr_t dmaphyssrc2 = 0;5 F, H5 q G2 w- d
- dma_addr_t dmaphysdest1 = 0;; @% l$ V) Y4 H1 M& C
- dma_addr_t dmaphysdest2 = 0;; W* B1 ~6 r) W- s1 u5 A
- 1 ~- w( x2 ]' A& n, m' `# W* p4 {
- char *dmabufsrc1 = NULL;
2 R0 D9 f* f& x% H1 b - char *dmabufsrc2 = NULL;1 [ s4 n" q' I/ K& R( W
- char *dmabufdest1 = NULL;# e' f- G9 @* ]% S* [- F% G
- char *dmabufdest2 = NULL;3 {% g! n0 i1 u, P' l X
- ) R3 t- }; i% n% `
- static int acnt = 512;6 C* \6 l! z" Q( `* m
- static int bcnt = 8;; `* L3 a$ N1 T1 I g% p
- static int ccnt = 8;: ^/ A$ R6 h. G
- % t! C9 \6 B: K; T; U( e
- module_param(acnt, int, S_IRUGO);" |+ K9 w9 R( ~3 q* H( s) r
- module_param(bcnt, int, S_IRUGO);- m$ M* w; D( |# @# T
- module_param(ccnt, int, S_IRUGO);
复制代码 % u& ~8 B$ j5 W. g' c" o
/ C! m6 L% A4 r' z
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用+ _5 q6 D& m5 A. K9 q1 t3 Q& F
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。7 V4 z7 w) {% n6 |- ?
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。, K7 m) `, L6 l) W+ [
+ o" S0 S' Y+ g# \3 M% H2 k1 _: ` ^! b3 {/ H- D
|
|