|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
$ ?2 t/ }8 o: h5 D- [code]EDMA sample test application
6 k4 J/ {) A" f0 a# l- V - /*
, G1 l/ a8 K7 n3 N, ?0 \# Y - * edma_test.c( n4 o' f' ^) o2 x
- *# e/ f9 U( J" |$ i ~$ A
- * brief EDMA3 Test Application- U: f& G6 O( T1 P
- *
9 u/ k; {& f9 f* k - * This file contains EDMA3 Test code.
9 o4 v. Z4 Z0 g3 T2 W, l - *6 b) f: L7 W; U' s; }# S
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE& e2 A; Y7 O; I- Y( p
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
/ ~1 ] B! [1 |; E1 o - * TO CHANGE.% w/ o1 _. A6 ]8 z4 H, ]
- * E! D0 ]0 l. U, i4 g
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/% ]* n" S* h! M, Q" e! v
- *
" B. F* u5 q4 B, E% Z - * This program is free software; you can redistribute it and/or* J1 t- Y- ^/ Z) Z
- * modify it under the terms of the GNU General Public License as
; Z2 b# T: u1 {2 `+ {: H - * published by the Free Software Foundation version 2.
) G/ n8 S# X4 s! N6 U - *
: n- M) e* v: z' P - * This program is distributed "as is" WITHOUT ANY WARRANTY of any3 c8 l1 }9 D; M; W2 h0 `) b
- * kind, whether express or implied; without even the implied warranty
: a$ g* E u6 u - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ k" [8 g; k8 h5 t; i
- * GNU General Public License for more details.
, F7 q9 E( k) @5 `' X - */+ {$ d' W# T( m7 T6 F
9 T0 y, S: T0 V) _( n6 c- #include <linux/module.h>; ?$ T( g k2 C8 g
- #include <linux/init.h>
: |# H% N L- o' o6 |+ r2 Z - #include <linux/errno.h>: q& w' Y9 U, W6 ]4 I
- #include <linux/types.h>( ~4 R- r3 X. Q. t8 k. \3 ^$ i
- #include <linux/interrupt.h>
8 m% {3 P9 ^; d, U - #include <asm/io.h>
0 h8 \8 ^: ?0 h( T/ u - #include <linux/moduleparam.h>
7 P7 _8 N* }4 N4 t* @ - #include <linux/sysctl.h>* L3 l, D5 f# n1 k
- #include <linux/mm.h>
+ U3 t, ?% G# m, \0 X) Y - #include <linux/dma-mapping.h>! h- B! u/ s$ Y' z4 @
- $ G2 d7 Y; v* h; z+ D! E( h
- #include <mach/memory.h># s! |$ h7 ^0 U- ^, {; N5 P
- #include <mach/hardware.h>
2 r [* m+ a6 p3 J0 F - #include <mach/irqs.h>
4 Z* }& A& R% T - #include <asm/hardware/edma.h>
$ V/ _9 s% G8 z/ E
4 e8 H4 @8 }- N- #undef EDMA3_DEBUG2 L# i* x \: ?
- /*#define EDMA3_DEBUG*/) P" p9 s% w6 x2 U) l1 z
- 6 V0 `: Y0 i) @# L
- #ifdef EDMA3_DEBUG
) v' l% }% P* y9 Z7 G" z - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
5 `! t8 n) n1 j. u - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). |9 ?8 i: d7 f' J
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% r& ~: @( }* n ~, G/ v
- #else
5 n9 n/ q! @; r6 G y - #define DMA_PRINTK( x... )0 I# L$ Q7 i% a( U/ s
- #define DMA_FN_IN
% [9 G. j( l2 q5 S3 o - #define DMA_FN_OUT
( h1 x0 _+ c2 B# G" } - #endif
( d! h: _5 _! W {0 z
- R8 ]* G* w" f% j- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) Q& b. v% F* E9 A8 Y - #define STATIC_SHIFT 3" m* `3 {( U3 o- H
- #define TCINTEN_SHIFT 20
# A- _5 l4 v* k1 D - #define ITCINTEN_SHIFT 212 A! o0 N: [& Q" M. w
- #define TCCHEN_SHIFT 22
( K2 A4 w6 F3 j {$ _ - #define ITCCHEN_SHIFT 23- n- N2 x' D1 k/ S q8 a; {& y0 X7 X
+ q; n) S. k I3 w: B6 o( v& F- static volatile int irqraised1 = 0;
/ [5 q, X0 d" Y! \9 G a u; Z - static volatile int irqraised2 = 0;9 d. C/ G/ w# ]4 m" H2 }3 D
- % h7 C) |4 [% O# L$ C2 |% m4 s
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 a1 Q2 Y! a3 b3 {' g
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# W2 D% b# @0 T! z# V- @ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# Z; J8 z5 H4 s4 v( G4 F - ! v0 S, p: q3 P6 ?& c7 k- { k
- dma_addr_t dmaphyssrc1 = 0;6 |% j( Z3 m7 B0 ~
- dma_addr_t dmaphyssrc2 = 0;; S: w( z6 g6 p% s8 k. |
- dma_addr_t dmaphysdest1 = 0;3 o- i4 G _# i
- dma_addr_t dmaphysdest2 = 0;( k" _0 j4 j5 E( I1 C
- ! F, h5 v: s( C0 S% O
- char *dmabufsrc1 = NULL;
# a' ~( a1 x: u0 @& I - char *dmabufsrc2 = NULL;
2 R# P2 g9 o! H+ S9 R W9 t4 Y - char *dmabufdest1 = NULL;( ~ P. }& z- o" p* s5 x
- char *dmabufdest2 = NULL; a( ~8 g+ K$ ~2 L7 y7 |
7 O+ ?# o2 \- }. H- static int acnt = 512;
/ o6 s1 p- N. ]# F - static int bcnt = 8;" r3 Z- K8 N$ d$ |2 i/ s
- static int ccnt = 8;, W/ h# S6 k$ d5 p9 g
8 d1 @/ o6 f: Q: B. @6 L- u) C- module_param(acnt, int, S_IRUGO);
F3 g4 ~- k7 |+ s) O3 u# p: Z - module_param(bcnt, int, S_IRUGO);/ T$ }: C0 M7 P Z: E, d( {
- module_param(ccnt, int, S_IRUGO);
复制代码 . y7 k. u2 C, `, O
! k' w* E" N5 L- Q( r
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用8 w! Z' x5 q0 r- m4 r" D0 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
* W) O$ o! V6 ` q( z6 S 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" C" U; T% N0 C( H5 `4 \& S% V/ [9 o6 j
- A: @& q5 g+ a7 m7 f+ T% Y, a# e |
|