|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
1 A0 W; @% e7 x# |( ]' f8 \- [code]EDMA sample test application
+ f6 ^, a' ?/ [5 \+ m" c0 f) \! ^ - /*
% \7 y) _3 \! m' e6 Z& A- d - * edma_test.c
0 t9 j' L0 v5 W4 W$ j Q- \# } - *
. c) u/ K! A1 d* ^ - * brief EDMA3 Test Application
9 I2 E$ v# O* q - *9 \% t+ i) t5 S$ @: j8 R
- * This file contains EDMA3 Test code.3 ~) D4 N( A6 x1 Q1 Q% D+ G
- *
: S) e+ d; V, I$ L - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
2 I% _9 c6 S. q* B3 g* Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
! e( d0 T$ X0 B1 {1 E, [ - * TO CHANGE.; n6 {3 s/ S9 r
- *
# N% e2 W/ V3 [* U% ^ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/1 G N0 v" b3 }4 H' R
- *
0 o9 a* s. K; }7 P. z: Y - * This program is free software; you can redistribute it and/or
6 ]8 f/ X' N( q5 V0 O - * modify it under the terms of the GNU General Public License as! g/ p1 d8 h: z, K7 |
- * published by the Free Software Foundation version 2.. X- T! K( C) @% J. S1 s
- *
0 t! e% U! l9 T! t& J+ j - * This program is distributed "as is" WITHOUT ANY WARRANTY of any4 U: Z( o! U- D' M# \
- * kind, whether express or implied; without even the implied warranty
; N3 O5 H2 \! B( r, T) w* m0 H5 [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! ]1 s0 ?- R o# N - * GNU General Public License for more details.9 n& R4 v6 E, ^
- */
$ Y' [. h! @& B# ]' c% {" O - % _. c+ P1 T( z7 |# K, C
- #include <linux/module.h>
) m3 a) v* Z' f - #include <linux/init.h>. A8 ~" d5 s, _ k4 K f
- #include <linux/errno.h>
, M' q* c4 T; F8 r; ] - #include <linux/types.h>. o5 ]) J5 b" \8 |/ _! \# e
- #include <linux/interrupt.h>
* V" b2 U3 y9 J) O+ P2 S# \! | - #include <asm/io.h>" v4 c! u" v' r9 g, m+ J
- #include <linux/moduleparam.h>& X, L5 C6 h" ?! Q8 J
- #include <linux/sysctl.h>
4 J3 W Q4 v. d- v7 a0 }. ]( E - #include <linux/mm.h>7 y3 N. k' s# r; {3 D
- #include <linux/dma-mapping.h>
- t y8 f3 a! o
7 A6 s% ]% o# f; m1 \; U4 I- r9 z- #include <mach/memory.h>& X- Q& b: X- P# C. L0 k( }( h
- #include <mach/hardware.h>
4 Q& r1 p, X- W - #include <mach/irqs.h>
! f/ x, b0 {( c - #include <asm/hardware/edma.h>
! G3 S7 h$ A" A. m - 2 ~# | F. G& _. L' X5 J/ V# [
- #undef EDMA3_DEBUG2 S0 v1 S$ O! k2 s
- /*#define EDMA3_DEBUG*/2 \3 Q: l; p3 d& _+ i6 v
- 4 ? h5 b* [$ i" R
- #ifdef EDMA3_DEBUG9 D! u5 C& Q2 U% g. l. P
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
- w M/ _& V, t$ k7 l - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
% p7 b! l( w% W: Q9 @- k, C) B( U q - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)1 O: W6 Q/ Q O
- #else
* p; C4 W" B. ?% c5 u! O0 i% ~* C - #define DMA_PRINTK( x... )- r' A, b* Z& o q
- #define DMA_FN_IN
* K* f6 W& l+ [* \ - #define DMA_FN_OUT6 ?' k7 ~5 v5 ] J) Y5 ~
- #endif
. q7 U* K+ [) q9 T+ C - * r" `; G* ]5 ~! f
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" s# ]1 z" d8 z% `1 A - #define STATIC_SHIFT 3* \9 C4 W: I2 ^! G( N
- #define TCINTEN_SHIFT 20
# @2 C( t, D2 P [5 \, I - #define ITCINTEN_SHIFT 21
7 O1 }7 E* _, e+ ^6 s - #define TCCHEN_SHIFT 228 e. v3 @# |& @6 m& H3 Y8 H
- #define ITCCHEN_SHIFT 234 A1 [ ^* S* p, |0 N ^8 E
% m2 W2 w& m- `) `& t4 s- static volatile int irqraised1 = 0;# J9 a: k. M7 @% R
- static volatile int irqraised2 = 0;
/ L5 ]' i# V, q. {! V7 z - 4 L1 ]% ^9 E% w4 C9 L
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# _/ B( e! g2 i. r( U
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 M6 ~ |! ?. K" R; L% y2 { - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" Q# \7 e" @8 y: @
- 6 K3 t. R# \9 F5 _, G
- dma_addr_t dmaphyssrc1 = 0;: R/ d, {" J; u7 g% h0 N
- dma_addr_t dmaphyssrc2 = 0;8 d: G& k9 x# Q" T2 ]; h
- dma_addr_t dmaphysdest1 = 0;
) }: } _% i6 {- D$ h - dma_addr_t dmaphysdest2 = 0;) H6 d, E0 z2 W8 w; d& x3 S- r
: X2 A7 W4 P* I% [! w- char *dmabufsrc1 = NULL;
& Q3 ]7 S; _8 A& i - char *dmabufsrc2 = NULL;
1 A3 [- g, K- N6 {, o% g) _ - char *dmabufdest1 = NULL;3 h4 Y7 @0 e. Y4 R% y6 i/ ^6 w
- char *dmabufdest2 = NULL;& O7 \2 d6 \/ r) t/ A6 m% }
- d4 i: x! `5 x8 \* S9 y |/ @9 N$ ^- static int acnt = 512;" M4 C9 `: I. q4 R) y0 g7 V N
- static int bcnt = 8;4 s8 V, z, W4 x5 ]
- static int ccnt = 8;
9 G2 H( s1 q, E& F. n) f( Z$ @
0 W. X2 [0 ] P% n0 `2 J- module_param(acnt, int, S_IRUGO);2 q( s4 h9 K# {8 V
- module_param(bcnt, int, S_IRUGO);/ E: M5 b- W% T3 ~) S
- module_param(ccnt, int, S_IRUGO);
复制代码 ; J, U0 n1 ~2 s0 O* |3 I1 B
, C& D8 f, Y- `; l* |/ z5 o
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% l9 V/ E1 C, harm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。% H8 N/ S# c% n. }5 k7 d! H5 M$ k
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
- @) e8 B( ]8 R( ^* u
' B+ h1 k. t5 t% i9 i1 ~- C# S) p. r3 x; ^/ j' C
|
|