|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: \% ]. |7 h0 P3 T3 c- H- [code]EDMA sample test application$ j% k- k8 o0 R) ?& [' N
- /*
$ `' D" C7 ]3 i" F0 d - * edma_test.c
/ Q& u6 H; q% ]# Q5 R5 s2 M! v8 y7 | - *
. y, z! w1 q b0 G - * brief EDMA3 Test Application
5 b9 \0 V0 u r- E: V$ m3 N - *, c y: Z! w% `7 u4 V
- * This file contains EDMA3 Test code.
9 f8 i& G3 W* O% g, q - *( \- Z. A/ f& v J
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 U, z8 s U3 h% S8 k) S0 Q) `
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
; W3 g7 y- H* v1 x* N - * TO CHANGE.
. j1 P8 F8 L& A6 A+ E - * L# }1 `) n) j7 I# k. i
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 h1 U- S# F* t% e) k, n8 B2 x0 y+ [ - *: \1 H# i4 n; g9 g( G! I
- * This program is free software; you can redistribute it and/or
; v2 ]: N. t1 o! v6 m( e0 ` - * modify it under the terms of the GNU General Public License as3 P4 K+ \, ]- `
- * published by the Free Software Foundation version 2.# E6 H# `, b) f/ C
- *$ ?% I( ]4 R8 n# C0 j8 @
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any$ i; v7 W8 d" g$ c( {. U
- * kind, whether express or implied; without even the implied warranty1 V) h/ s }+ D% |+ G3 d1 r
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1 F9 H6 ^. p$ L! h& g1 ?! p - * GNU General Public License for more details.
. j' Y: w+ S4 j5 \# B: F) o - */
i& N* q- S, f5 C& X! G1 A4 m) n - . |/ r$ V! \& |( R4 |
- #include <linux/module.h>* U( h. f7 \3 }- M% o
- #include <linux/init.h>- f/ M! N" o/ z1 \
- #include <linux/errno.h>2 z4 y4 |0 E$ T* T; X- m# v! y
- #include <linux/types.h>
( g2 s! W# k8 ]' | - #include <linux/interrupt.h>* p9 W5 l4 D6 I i6 @ O
- #include <asm/io.h>5 u) L/ ]/ k3 P Z+ C
- #include <linux/moduleparam.h>+ ~# [/ }% X/ p/ P( c% G* B
- #include <linux/sysctl.h>+ y: D- ^, s0 U
- #include <linux/mm.h>6 i1 C) q6 W0 u* [$ A7 K* _
- #include <linux/dma-mapping.h>
; [' w% m5 h6 P, m4 N
5 v# E' K, ^+ m- #include <mach/memory.h>, v2 X; ^% i5 a9 a X* ~- B
- #include <mach/hardware.h>
: t7 e4 D" h# w) v A - #include <mach/irqs.h>
|) b% K0 X" ~7 H$ C - #include <asm/hardware/edma.h>
W& k% J! m) @- e* u
" S, u1 Z& q/ H0 {* g- #undef EDMA3_DEBUG: A, T( k( G8 x2 f2 U3 [) |
- /*#define EDMA3_DEBUG*/
6 f2 [9 g5 ?/ w, h( ]$ J4 j - # g7 c T5 t& Q+ H- _
- #ifdef EDMA3_DEBUG
) T) Y' }* A$ Q- e- C - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)7 F2 U9 d Y2 `+ z- _
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)1 P6 Z% `7 b3 I7 _
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
% f6 K ?3 l5 j! [' s$ f - #else
* i2 I6 C. u9 @6 ^+ V - #define DMA_PRINTK( x... )
* [. K, j* j+ g( J: ? - #define DMA_FN_IN
0 z! c3 V& R! Q9 t' M6 k( e - #define DMA_FN_OUT1 J4 r, `: d. M# {7 e$ d. I
- #endif
* \$ }& [1 m% L2 `" C7 y
5 y4 C$ L& b4 O8 x; J- #define MAX_DMA_TRANSFER_IN_BYTES (32768)/ p. J# i4 {$ V2 x7 Y& |; ]
- #define STATIC_SHIFT 3
+ @8 r: `5 x6 g' c3 \" y5 g - #define TCINTEN_SHIFT 20( C* I. R* t" w
- #define ITCINTEN_SHIFT 21. R% k( O9 ~. z! G' W8 k& m3 g* \
- #define TCCHEN_SHIFT 22
5 H* o$ j/ d6 ~. p3 U' p7 f - #define ITCCHEN_SHIFT 232 c0 {8 A: |2 Y: m5 K( e
4 @* j _ U$ ]- static volatile int irqraised1 = 0;
3 |2 m' P4 Q# F) t$ v# b6 Z# Q - static volatile int irqraised2 = 0;* n3 R, i8 Y7 g
- : N, l. u1 j/ s" f' h
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& s9 Z1 U" E; Y& t4 m( n/ N
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);+ k$ F% z1 B) z. c8 l% V+ h$ H9 x2 A
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# F( C% _1 A/ E& l. \) w - 1 v; t; W# a: W7 Y/ j/ z. A
- dma_addr_t dmaphyssrc1 = 0;
$ ?& e; l* P, R' k1 q2 G& ^# F - dma_addr_t dmaphyssrc2 = 0;* o9 I ]3 m1 Q9 J
- dma_addr_t dmaphysdest1 = 0; j& C! g1 {+ U; x% k1 G3 z
- dma_addr_t dmaphysdest2 = 0; J! m) T3 V8 N* E( b( I5 Y4 p
- . F5 t/ t% A, g: J2 N5 {
- char *dmabufsrc1 = NULL;
: {$ T! T, p7 d% {9 {5 }( T - char *dmabufsrc2 = NULL;
7 L& l1 u5 v9 Z8 t - char *dmabufdest1 = NULL;
4 Q% r& L: j! c8 m( K& A - char *dmabufdest2 = NULL;) u1 N2 z q* r! L( C* k: ~, }0 o
: S/ W/ w% a$ E( j- static int acnt = 512;; ~( q- M+ D/ X% G3 K
- static int bcnt = 8;
( W- O6 x$ I: J* C7 Z; O% G- _ - static int ccnt = 8;
5 H" M. @* s9 f$ u) E" L - 5 ^& w5 q: d2 w
- module_param(acnt, int, S_IRUGO);
* q' \7 s8 F0 v+ b* z' ]! l - module_param(bcnt, int, S_IRUGO);$ p# N7 N6 H. p/ E" C, x
- module_param(ccnt, int, S_IRUGO);
复制代码
; |; n' ~% T3 d/ |" t4 g0 r! S* d: N7 @
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用' B2 I5 A3 o+ \9 Y d8 a2 l! H
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。0 x* W D# g0 E: @# w
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。) e/ t$ q6 L+ R
7 v1 X( B$ p+ w
5 V8 @! U* r. {' L( U |
|