|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) i* R1 l4 Y# }: S4 d
- [code]EDMA sample test application! V6 p! e* g2 M( i( v
- /*
% c' G# d: E1 w3 ` - * edma_test.c
, }# n+ |! ?' K' B, E) f - *3 ]6 e& U( G, s ?3 r$ _6 r; J
- * brief EDMA3 Test Application; S6 D+ ^ |0 f+ G/ K; `/ k
- *( |% X& S7 I+ ~( s1 t2 j( L
- * This file contains EDMA3 Test code.
7 f0 D( h9 C+ a1 c4 u% @ - *$ G# p3 a9 q2 t4 H! F( J' o
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
9 R5 `7 l# n6 g d: S& H - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT/ l! g3 p+ V5 _0 ~6 Y
- * TO CHANGE.
* s. t; J9 Q4 i9 z2 V" S0 U - *# N7 o" Z/ N- y9 v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/# v j/ \ d4 v. E3 B
- *$ s. S& C9 _5 U0 [# x, U
- * This program is free software; you can redistribute it and/or5 m' h. ~( G2 ?1 s# C$ W o+ K
- * modify it under the terms of the GNU General Public License as) [2 u; V5 u; ^2 O
- * published by the Free Software Foundation version 2.$ b* s( F/ r$ M0 F
- *
7 l/ e# g1 Q; @ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# Q4 u5 C j: \% r - * kind, whether express or implied; without even the implied warranty
8 o& P) n: j" b' a6 j - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
S; u; C7 w' m4 g" u - * GNU General Public License for more details.6 v0 E% B" p! q
- */
( _$ q J( }1 t ]) b) |# B: ~
4 H' m% B" s" F/ }' `% p- #include <linux/module.h>
5 {. V' U7 X4 s0 e - #include <linux/init.h>; k0 y6 {' n% B5 k! k. _3 ~
- #include <linux/errno.h>: M, @5 g& G3 v; C l
- #include <linux/types.h>. J) P7 p8 H! T4 ?$ k) I1 \& G
- #include <linux/interrupt.h>8 |1 F: e9 R8 q4 A" r z$ j7 D
- #include <asm/io.h>% I) H8 B3 A+ z9 _2 t" j ]
- #include <linux/moduleparam.h>
& ?% ^) d2 Z8 I( i/ Q - #include <linux/sysctl.h>
9 B+ i1 e% {; z# T3 o - #include <linux/mm.h>
# F7 [' @; d6 Z; A! s$ R: m - #include <linux/dma-mapping.h>( s2 y' ]# c) [1 |. t! P' v R
, _5 @4 D9 y- M, @) O* ]( ^: o3 @- #include <mach/memory.h>
- K4 E$ _: r& p2 Y: u7 W - #include <mach/hardware.h>4 h7 }) \1 U1 I4 Z/ Q
- #include <mach/irqs.h>
4 o1 y: A6 T) Y/ g+ v3 b. V- d - #include <asm/hardware/edma.h>
8 K M2 e# }: G4 u. c; M - 6 n4 P0 K" G1 v& }0 H+ e
- #undef EDMA3_DEBUG
, k) V/ M, h. f - /*#define EDMA3_DEBUG*/
' I# O% y1 g2 Y' P0 B - ) f) Z/ o6 \$ D' R7 j" c
- #ifdef EDMA3_DEBUG
9 `4 u9 }# z" `; V4 {3 q6 b - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)% T) w" Y- B# S9 z
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)3 j9 q' \; v/ S
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 L6 j& k) q w; t) ~* @) j - #else' X5 d6 h6 T' Q& y8 ]8 @9 r+ d
- #define DMA_PRINTK( x... )' V2 E) F6 a1 Z6 p' y9 h1 a
- #define DMA_FN_IN9 ]* X$ b$ d8 ~8 W+ ~
- #define DMA_FN_OUT
# \+ ?* u, e2 i n% t - #endif
, Q; I( {! ?* U- l - 4 l% v" {/ t3 ?! p# i
- #define MAX_DMA_TRANSFER_IN_BYTES (32768): f& q" X% P+ S# ^& @( ?% ^7 [; V
- #define STATIC_SHIFT 38 @/ V" ^0 E# c) h3 [9 `/ W- \
- #define TCINTEN_SHIFT 20/ [- {- _, k& G1 j& o/ f& \
- #define ITCINTEN_SHIFT 21) R- {, W3 X! b+ a$ n
- #define TCCHEN_SHIFT 22
0 X; j/ z9 }- ~% f$ \ - #define ITCCHEN_SHIFT 23
1 |2 ]2 A9 [" z - 0 \8 A; ]" \( u B+ D* e) V
- static volatile int irqraised1 = 0;% t, \! {) e* B' Q5 h& g
- static volatile int irqraised2 = 0;, q6 ~" t# a! Z7 {# t' t
- , l& L2 I. B$ l" H1 A1 q
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 O; p$ z v& f4 @% g( [ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 }3 v7 \ c4 \. D4 t! Y1 z# k
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* o2 ~- u; [: s/ b7 Y0 A
. u5 M# `+ N. u4 J! d- dma_addr_t dmaphyssrc1 = 0;, u( P, ?% w* h& }, w
- dma_addr_t dmaphyssrc2 = 0;
6 h# v: t6 i3 k' }" n" w' S/ u - dma_addr_t dmaphysdest1 = 0;
9 j7 z* Z3 D" v6 g$ Y! \ - dma_addr_t dmaphysdest2 = 0;
# v' G: M+ D4 d4 a - # S4 F# L8 a; X) V. K
- char *dmabufsrc1 = NULL;, ~9 v+ }. h% j( D, r7 D; d' k7 V
- char *dmabufsrc2 = NULL;+ C4 i5 P' Q5 d& i* y7 I
- char *dmabufdest1 = NULL;
9 A, F- \ w0 |, h8 ^5 w4 f - char *dmabufdest2 = NULL;; P6 P, G; C/ u: j1 H& x; ^
- 5 O) K. x% j* K0 n: e- {$ `
- static int acnt = 512;' G# Z0 X. V) I# F) ~
- static int bcnt = 8;# ]) T, t- s* |" a9 W& f% z6 I
- static int ccnt = 8;
3 y0 D9 u( V- |. F' {, ] - ( S m1 S( J t$ w- ]9 k
- module_param(acnt, int, S_IRUGO);9 P$ A; ], ^) G) g
- module_param(bcnt, int, S_IRUGO);
$ s. s9 n" X x+ k - module_param(ccnt, int, S_IRUGO);
复制代码
& [6 n$ q! x2 e4 r' z, F& M7 M- [& J- n1 v9 t6 B
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
5 h, j, u! R$ f, s3 k4 F2 Marm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& U \+ N4 Z8 [: A* s" E
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。5 L/ k% @! |, i: O
7 J* q+ P0 ^, t8 j3 y
/ v7 l6 \8 ~2 J+ @2 J2 f, [ |
|