|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 H7 } F9 Z) {" j1 e- [code]EDMA sample test application
/ Z( S' s' ]; X, c& N2 N) y: y - /*: V, v6 w* {9 x5 I
- * edma_test.c
# w) S2 z5 {3 R6 d P4 l. L2 X; w - *
8 z1 V1 |; X2 o. [5 O5 A - * brief EDMA3 Test Application2 K$ {- S; d( |4 p/ @
- *
( i9 m' e* ] |4 E5 }) B& t/ m - * This file contains EDMA3 Test code.: j: E/ M% F7 L' y' k. I) z
- *
* P) V% ~: m9 d8 ~: `! b - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE5 t x8 `7 {& @& q7 d4 h- ?
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT) U' u! N1 q( N$ b; z1 q+ J
- * TO CHANGE.
' Z4 d/ P* v5 ^9 V5 P b - *% R7 h0 d$ ~6 K# \% W6 t
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" k9 ^' r6 Z# T/ @ - *
* I9 ^5 l& w$ z u1 t) |( G& }# N - * This program is free software; you can redistribute it and/or, Z& X6 X& d( ?9 I. [
- * modify it under the terms of the GNU General Public License as5 L6 g0 s6 I7 @
- * published by the Free Software Foundation version 2.1 J1 |6 F: O/ @9 {
- *% ^6 l/ S0 x3 K6 H/ \8 D
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any% d) W" }- O1 C
- * kind, whether express or implied; without even the implied warranty2 [) E. [0 |0 C( M
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ {/ @1 ^$ w7 O3 P7 I - * GNU General Public License for more details.
, |, R' ^3 }8 [8 ` - */
" X4 y% Q9 L& S* R8 O, T
7 ]2 y; o0 Z3 P' m+ J* _: G0 B) z- #include <linux/module.h>
9 f ?- y! ~/ Y* C2 Q Q9 P7 L - #include <linux/init.h>
* L. ?1 ^% {8 d( S - #include <linux/errno.h>4 K* V3 O* \4 i# k( |
- #include <linux/types.h>
$ T% c: w" G9 I: { - #include <linux/interrupt.h>% l. g3 v: m5 p7 C* {2 F6 B3 d+ S
- #include <asm/io.h>
; L! H0 M* i9 H0 \7 K) U: P) J2 j - #include <linux/moduleparam.h>
- B( }# U1 \, A3 x9 f' X4 l - #include <linux/sysctl.h>
$ q& D/ o; }5 Q/ ] - #include <linux/mm.h>/ l7 L3 a1 ^% `. Z$ P
- #include <linux/dma-mapping.h>" `) A0 j- u. s! ?6 `/ \$ t
- % g8 l {) E. q& ~
- #include <mach/memory.h>
|0 f( q9 }2 G$ G, { - #include <mach/hardware.h>8 r* K. j, S7 g' Q% K) A) }
- #include <mach/irqs.h>
0 B- ~/ r! n7 _$ F3 a0 F5 e - #include <asm/hardware/edma.h>
1 |+ A& R& K( j3 z/ ]; v - * k" N# u6 c2 y# N2 o+ C
- #undef EDMA3_DEBUG, h& f/ {' G( L
- /*#define EDMA3_DEBUG*/+ p) {: \5 Q2 c3 s5 p5 }9 k
- + f' C: ?* Z8 t6 J4 \2 |
- #ifdef EDMA3_DEBUG
2 N% f+ O: f4 H {, O) d - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
; m& f: P+ X5 b! p. W) e - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 q8 u8 V5 D0 d }4 f
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. f2 o) l: X. P& \: c/ o - #else- l, C9 Q- F5 v2 B1 ^
- #define DMA_PRINTK( x... )% [# `! q, i w) \9 t5 ~. y
- #define DMA_FN_IN
$ v5 J3 d, i" Q$ t3 {* ^' E - #define DMA_FN_OUT! O* y7 v/ g2 K2 y. Q
- #endif, {+ U J) P9 Z$ a4 k( ^
0 Z5 F' F9 E4 E* T4 f3 R, U/ @- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' F8 H+ _2 k+ z) H- K+ ~& m
- #define STATIC_SHIFT 33 U6 u* o! \' m8 j0 H5 `. I) @! j- w
- #define TCINTEN_SHIFT 20( R. o. U( M8 }) S1 B0 t
- #define ITCINTEN_SHIFT 213 A' t* c; H( {" g
- #define TCCHEN_SHIFT 22
$ V, B. {+ R# `0 ]: C* V1 _ - #define ITCCHEN_SHIFT 23
$ X) s# @5 Q1 g' A- k# M! o
9 r4 }- L( Q# K' w$ L- static volatile int irqraised1 = 0;: B; @ p7 b8 K+ k& d/ k& q9 y: ^
- static volatile int irqraised2 = 0;
, \7 ^. J4 \7 d/ _
2 R" E! U0 X% _* `4 C: }- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, E% \1 n! Q! M5 x( V" X# S
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. v4 |1 @7 |: {7 J+ C4 H9 r
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% m* I* O; Y( {. n
/ M# F( b( @% [; n6 j( _0 C- dma_addr_t dmaphyssrc1 = 0;
+ n9 `, p, k& h1 o c- u# \ - dma_addr_t dmaphyssrc2 = 0;
- U9 z; v9 L/ O/ D/ G' i" J - dma_addr_t dmaphysdest1 = 0;
: V; o- ], P# g$ [7 J# J. [ i# ? - dma_addr_t dmaphysdest2 = 0;6 q8 Z1 G8 a! N$ f- [
- % M& n6 `4 t+ J; Y9 J: M
- char *dmabufsrc1 = NULL;8 ?, _" }' E8 Y, ]5 O# o5 Q1 }6 k# }
- char *dmabufsrc2 = NULL;! l* `/ \8 }2 P- Y/ p
- char *dmabufdest1 = NULL;5 v) W" J- l* t; M! E+ U
- char *dmabufdest2 = NULL;
% L* E! }9 Z$ b) _+ @
3 @2 f- Z- E' P- static int acnt = 512;( M0 t" `0 Z! S+ p9 C. h$ s
- static int bcnt = 8;
* ~! P* M$ o t+ r0 P - static int ccnt = 8;
: c9 r d7 X) R6 h( T+ m - * }5 @% {9 ~* O
- module_param(acnt, int, S_IRUGO);
$ ] @6 T# m- x. n6 ` - module_param(bcnt, int, S_IRUGO);
3 a5 f$ Z% O ]! C- T - module_param(ccnt, int, S_IRUGO);
复制代码
4 e7 f% O* l$ p
1 W% u% v9 W. q% Z! K 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用) j/ z5 u0 F2 g
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。* O* Y8 J1 b4 R
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
$ \% t+ g8 |" ], u) o" Q- F8 |4 r+ H$ E% `. z' K5 J: Y
7 v: U5 p% q( t7 o# f5 ]9 ~ |
|