|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 T% ~- f$ U2 W/ h- u A/ E2 x0 A% T
- [code]EDMA sample test application$ E) y3 b- C# m! [( ` g
- /*
" o6 M6 m7 F7 C1 s2 z, s - * edma_test.c
8 c( G( C1 E5 b - *
( G! ? j2 u. I: `( v - * brief EDMA3 Test Application
6 w( ~( K2 [& @$ J) T9 V: x. V- q - *
2 z. @5 d4 u5 G2 q$ E/ C7 D! A8 a - * This file contains EDMA3 Test code.
2 x- Z. m: h6 v0 [8 w - *
. w4 `( Q" q) {# } - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE; o5 s+ J* c8 P
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT Y1 G2 k3 v, Z% ^' C; Z
- * TO CHANGE.+ I' k m& B( n' V1 z) i/ h
- *- E4 Y/ ^6 Z* d% K* s
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/" R/ V0 h2 ^. F/ }
- *
; r' v0 c1 N- f& f - * This program is free software; you can redistribute it and/or4 `4 ~- P$ S0 k+ m
- * modify it under the terms of the GNU General Public License as
* l5 E" o+ N t& N7 ` - * published by the Free Software Foundation version 2.* @% B! {, z# c; h9 k( H6 a
- *9 J; v' K0 | T
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, s( O# l& b& C! z& m2 o - * kind, whether express or implied; without even the implied warranty+ w: J8 t5 Z* ?9 {/ C7 E. L; {
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 A2 X! J. d3 Y7 w
- * GNU General Public License for more details.# e1 R% x: q- k+ i
- */; H- t4 r) }8 Q2 | b! v4 O
8 m: H. K& k$ S# e8 u" A5 r: y- #include <linux/module.h>+ ~) V- i5 `5 j+ M! O* a
- #include <linux/init.h>' G, o. H2 v6 A- J1 G
- #include <linux/errno.h>
3 |- v/ _% s) d ]5 Q2 ^6 y - #include <linux/types.h>+ f. g, F, ^6 ?
- #include <linux/interrupt.h>
$ ~% D% ^9 J& B4 U; m5 e) G - #include <asm/io.h>
/ ]- H( I; h9 O3 B- A# \: H - #include <linux/moduleparam.h>6 j1 u t" m0 x- J
- #include <linux/sysctl.h>
$ r: G1 B, x2 c0 X+ [2 m% l - #include <linux/mm.h>6 y/ P3 D, N# W/ @$ H; N' |, ?
- #include <linux/dma-mapping.h>( K! h9 T* B6 } L
- * U4 U" s' g( s: @
- #include <mach/memory.h>
* \5 f+ H1 W1 F+ D7 S - #include <mach/hardware.h>! b8 {: S- U, U. T3 s. j1 C' f
- #include <mach/irqs.h>; F) K$ K ^( T6 X o- m) E
- #include <asm/hardware/edma.h>/ ~/ w7 x# ]' f8 p/ T' ^5 ?' e- i; x
- # G: h; f. c+ }9 b5 w4 D$ E
- #undef EDMA3_DEBUG+ T% b) ]5 F b4 e) e+ K
- /*#define EDMA3_DEBUG*/
( ^ B& d; q9 M8 u- m1 r - ; k7 N. m1 ~" W* R( b& f
- #ifdef EDMA3_DEBUG+ l( e) J6 n4 e. s& Y' q' v9 X
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 X6 H5 l) q8 l% @! a. @, B* }2 u
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)" u' u0 X% d3 i. E7 ?! R* u
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 \- Y3 S9 v& y3 ^/ F - #else0 M# Q0 s- L, a0 L0 a+ l
- #define DMA_PRINTK( x... ). F5 y* Y7 E' P% n
- #define DMA_FN_IN
7 g: l6 o! P8 G! K - #define DMA_FN_OUT7 N$ ^- E ?& h
- #endif
% q3 b( D( {# {' e B- N2 M - ' V( Y. @) i- p- X' _" h8 a
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)8 ]0 v6 d, l8 D1 U
- #define STATIC_SHIFT 33 Y/ z* C6 J. D
- #define TCINTEN_SHIFT 20: L% `7 i9 E; X
- #define ITCINTEN_SHIFT 21
# {& F$ g# }; ^* L c; }; [ - #define TCCHEN_SHIFT 22
" J& ~; e4 C4 a c+ L! M1 w7 ^1 I - #define ITCCHEN_SHIFT 23
+ S) C- Z% ?; D! e+ f5 p - + N4 E+ b6 H* F/ ^$ o. Z% a% _
- static volatile int irqraised1 = 0;
7 O# v7 t" q% p& d - static volatile int irqraised2 = 0;
8 f; D& ^2 r3 H+ L0 u - ! [) z" ^2 z( O: Z
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ V4 i- `) V. G( O2 T( R - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 Y' c3 ~0 L( [0 D - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 M5 _9 G& E" [+ m* Z- t - ; O5 u1 o* o& {/ I
- dma_addr_t dmaphyssrc1 = 0;
7 B9 E7 C- k1 U* `* n. K0 Q - dma_addr_t dmaphyssrc2 = 0;
! B% j8 ~" U- e% a - dma_addr_t dmaphysdest1 = 0;
+ h; _1 i! d# T2 V# [ - dma_addr_t dmaphysdest2 = 0;
5 l3 R. Z2 t- J" H1 U7 E2 ~' J - ; ]( {" P) r" t
- char *dmabufsrc1 = NULL;" q) I: t2 N* G9 k0 b% ?0 R
- char *dmabufsrc2 = NULL;
" }. }) R8 p8 s - char *dmabufdest1 = NULL;4 y1 O2 j4 a$ s
- char *dmabufdest2 = NULL;/ N4 B. w$ `( g: N; ~
- * b( U$ k( Z& m5 D& j
- static int acnt = 512;
) v0 M$ }4 N. y - static int bcnt = 8;: S0 C# m6 ?+ e6 v
- static int ccnt = 8;
. k" U' O. F; u8 _ d; }1 }
' B7 B, t( Z/ O# E: j2 g1 w- module_param(acnt, int, S_IRUGO);
* R* H0 Q. S+ ^: o. t! V2 _* c - module_param(bcnt, int, S_IRUGO);1 D- D# m) I, F0 ?- J' X6 w
- module_param(ccnt, int, S_IRUGO);
复制代码 8 K) U/ p {# `+ o6 l
" p% S) J2 U3 s6 z3 l) P* q
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
2 \; v/ O- ~, H8 S: Tarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. Y3 \* z2 h5 k; q+ |" R j
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! j0 n6 n) X4 q* o- y% v# I
0 w( F$ R0 E6 x4 g+ D
6 @/ z5 J2 m* u0 T |
|