|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- t; \! e5 z+ S8 ?- [code]EDMA sample test application" Z O+ v/ u' U. R
- /** \& D# u. j. I6 S" s
- * edma_test.c
, r$ V: v/ E/ A - *
& a1 J9 |. x. Q- C R2 d - * brief EDMA3 Test Application
% w/ t$ E1 k# R6 A( l - *
6 _6 V V% g% [. R, x/ f5 P. \$ e - * This file contains EDMA3 Test code.) n7 z# x8 E& t) B% D
- *
' ?0 v- ?' f0 F" F - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE1 \, J$ [* }+ ]. [2 D/ V! Q
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
4 L+ g2 F5 M. `% u - * TO CHANGE./ e+ W' _. T. X d! N
- *
2 D+ V+ [5 O3 U% l! W; h* Z' y2 } - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
; j T4 W0 J$ u4 W - *
6 [! ]/ q8 C( k; W - * This program is free software; you can redistribute it and/or2 m3 F0 X( {8 a# Z0 Y% c
- * modify it under the terms of the GNU General Public License as0 W5 J/ }' M5 d% t% A
- * published by the Free Software Foundation version 2.9 U' s6 E' C/ c) X: B
- *
/ `2 L# K( o5 H) @( r - * This program is distributed "as is" WITHOUT ANY WARRANTY of any$ K& q& G! u- w+ \+ I5 p
- * kind, whether express or implied; without even the implied warranty
* b( C" X% ]- T0 F - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the: G: j& r: ?: t i& c
- * GNU General Public License for more details.7 ^( x: m# l* {
- */
8 r' j" C9 B7 w& o: y& P
: u! N7 S/ A$ g! ]$ f$ p- #include <linux/module.h>
1 q- t2 Z# E7 S, ~( C- t0 |* S) y - #include <linux/init.h>
& y$ H: U7 [# @2 M) X% I9 L - #include <linux/errno.h>
/ v V# p) n% t6 U( J- e - #include <linux/types.h>
$ ^/ x1 v5 b) M1 I- v1 `" a8 l - #include <linux/interrupt.h>0 d; t' y- w+ h# w4 P# K3 X' l1 P
- #include <asm/io.h>
/ `$ O! T5 E0 L$ ? ~& }8 J; t - #include <linux/moduleparam.h>: X) P& D, M6 t
- #include <linux/sysctl.h>& s$ X# N" J; @9 Q
- #include <linux/mm.h>& I. @# ~- C& [% o, j) u
- #include <linux/dma-mapping.h>
3 m6 z6 R, B. a; ? F3 x1 d - , M+ r5 o: t& v( v( t# R. G3 y
- #include <mach/memory.h>" ?" P0 C% v; i9 K- ?
- #include <mach/hardware.h>
) F8 z. n& _+ M# A8 W/ J - #include <mach/irqs.h>8 z; F0 }$ }2 F' Z5 u L
- #include <asm/hardware/edma.h>6 s8 i2 t" u" h: F! D% Q+ \
- " O: c& N+ O. i
- #undef EDMA3_DEBUG
( \- r2 ?% f& A8 p5 T - /*#define EDMA3_DEBUG*/
/ {- | j" r; N7 H" ^# } - 9 h% `% |, _* h
- #ifdef EDMA3_DEBUG
% o7 O( [! g1 u* b$ B - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) p/ d1 F% I" A8 d# f - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)0 Y8 I' A4 {6 H" k: c0 a8 E
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
+ L# S: P4 Z" v7 c8 r. x - #else
% h0 S2 z% K* F2 O3 ?" g7 ~$ @ - #define DMA_PRINTK( x... )* \; Y* u1 L, ^3 x# I" J$ {
- #define DMA_FN_IN
8 g+ o7 a+ V, H2 W - #define DMA_FN_OUT
" w! \# Z& F% Q1 x+ v7 ` - #endif, i8 o. N9 v* W
8 z. F& w, @6 b: A0 @- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" ]3 n1 D- \, Z9 m! O. t4 x - #define STATIC_SHIFT 3+ S) p; e3 k; u3 y
- #define TCINTEN_SHIFT 20
- L( ~% m5 k, Z! l - #define ITCINTEN_SHIFT 21
. r, ]7 F9 C) c8 P6 Y: ~ - #define TCCHEN_SHIFT 22
+ r6 Q8 \$ w3 }# V4 t# R5 W - #define ITCCHEN_SHIFT 23
1 [& m5 J; v+ U- N+ n H$ Z
$ O" y% d6 {* ]: W z/ _1 j- static volatile int irqraised1 = 0;
0 M: ?" g- w# [& A$ p1 J - static volatile int irqraised2 = 0;! [* r: ?) w0 l6 U, M. s
: {. D* d' ?/ i/ B5 n- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 k! ~$ d. q5 y" n7 l7 i
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 U% F/ N m) G- H2 B4 h
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 e6 o5 _8 G* P
4 B9 c0 ?9 }" p. T, |- dma_addr_t dmaphyssrc1 = 0;
* ?" W6 o) Y1 ?7 k* S - dma_addr_t dmaphyssrc2 = 0;
: D. m4 Z' ~, G0 K! W% z - dma_addr_t dmaphysdest1 = 0;. ~" E' ^6 u! a
- dma_addr_t dmaphysdest2 = 0;
( I K$ b' g' f f1 V( @; \ - ' [( C4 o. r2 u, ~/ b! d6 R
- char *dmabufsrc1 = NULL;
; d0 U( j5 V0 I" a - char *dmabufsrc2 = NULL;
6 u# j4 w# d. ^% P* n2 }1 { - char *dmabufdest1 = NULL;; J" s$ a7 S- H# b- E
- char *dmabufdest2 = NULL;
) [9 J- g4 r. l( |( ^; n - ) X+ `9 Q) {% c/ `5 M/ k
- static int acnt = 512;' M- D8 B; Z# G1 ?
- static int bcnt = 8;
# v) t5 o7 C7 A0 O5 W9 C5 a$ P - static int ccnt = 8;. s8 x9 @% N4 r1 Z% V
& D% @# d" \! v% e8 i, G2 `- module_param(acnt, int, S_IRUGO);) }$ _8 `* \8 E
- module_param(bcnt, int, S_IRUGO);1 T- `. X0 V% N
- module_param(ccnt, int, S_IRUGO);
复制代码
+ N8 n2 D; ~0 F% }* D* r' B0 p$ R! ^. O- \- P0 u/ l% t7 ]% D
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用2 b# b+ v0 Z' ^# {. ^6 G$ i
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; p& C; ]6 e4 j 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。& D& L2 e% v, h& f/ q; S
- Z+ ]. D& d3 c' l! g7 W7 N
' v, o9 M! n: W' u8 r) a3 P! S8 J |
|