|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% n. A) e. A0 j9 T, `/ y3 p- [code]EDMA sample test application
8 Y( c+ Y: y |2 w0 ? - /*& n' _$ i; r) z8 f: q0 O! V8 q
- * edma_test.c2 O7 b2 I3 S2 W( b" P
- *5 ?: z4 R6 G% p5 r( m
- * brief EDMA3 Test Application. f2 p4 z# b2 m* R5 D- w# a5 x2 T
- *4 {1 V c2 a; ~0 W
- * This file contains EDMA3 Test code.
: u/ N8 P( l& u - *
5 y Z0 \3 T; C4 f/ w* ]/ F6 F - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE* q$ N. g, H( u6 {* ?* S
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT' R: D4 T9 Y& Q4 i0 w3 v/ w
- * TO CHANGE.
) A6 m' {2 K( p/ C5 l4 F. e - *$ Y2 _6 q, A m) s4 f$ e+ ]" O6 l
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
, Y. s9 M1 g% }& _- e3 ~# m, p @/ R6 a% C - *
8 T% x. g/ K, P& N( L - * This program is free software; you can redistribute it and/or
0 ^# ]% J7 v# b; q& b% `5 Q7 v5 D! e - * modify it under the terms of the GNU General Public License as
8 F7 H* ]! }# k - * published by the Free Software Foundation version 2.
* F; @5 }9 Q4 Z* Z: M4 A, A - *
6 x1 F$ p( s) t+ W1 g - * This program is distributed "as is" WITHOUT ANY WARRANTY of any0 ?2 u6 ~3 a5 H
- * kind, whether express or implied; without even the implied warranty
+ h1 R) [" ]+ N - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" p$ c4 @' a' O# w9 H - * GNU General Public License for more details.! z& C8 C+ C; o4 V4 I
- */
( B2 M# M+ h; g t - 9 \9 l% b) t, T' y- A% `: H3 |
- #include <linux/module.h>
* E: W% X) r4 T p - #include <linux/init.h>
' L7 {9 ]+ k6 K3 ? - #include <linux/errno.h>
" v, [ k4 f( S& H2 @" k; w - #include <linux/types.h>
6 `1 L8 W: A/ G6 S( e7 @& a' m - #include <linux/interrupt.h>* q" M( J x6 S! G$ T7 P E
- #include <asm/io.h>* x7 x) s0 l; x9 e2 a
- #include <linux/moduleparam.h>2 N- ^! o% i# {* Y2 @$ p
- #include <linux/sysctl.h>' ~8 ^: \2 k# n* a/ ^
- #include <linux/mm.h>
8 k% b' x, G* i ~ - #include <linux/dma-mapping.h>, M' J6 A$ `5 d( q% j k0 L* ^
: ~4 s' o) h: |0 x- #include <mach/memory.h>
0 C" j# l$ A5 S5 A* Y0 O - #include <mach/hardware.h>) A/ S) a4 d: x S2 c
- #include <mach/irqs.h>0 }9 E! ^ b, o, t+ l+ [+ e n
- #include <asm/hardware/edma.h>, R: ]0 {& k# c
- 5 _% F3 g1 s7 F; U* Y4 @4 R, x
- #undef EDMA3_DEBUG
4 p# `1 D2 t. i! a - /*#define EDMA3_DEBUG*/
" R2 s; h) m# f* {3 M( A; E
8 o4 x- @5 G9 L' A/ N- #ifdef EDMA3_DEBUG2 J. n2 n, {* I5 r
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
$ K# v# L' ^& o* N - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
) F; S% A3 S7 Z+ l" z1 } - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)0 a2 B: w& ]. H
- #else$ n4 k4 N4 M/ W* n6 c
- #define DMA_PRINTK( x... )
0 Q. u4 `! X3 |# k3 ] - #define DMA_FN_IN% m/ p r" {7 a
- #define DMA_FN_OUT
1 w, k+ Z" v# G8 f0 H) q+ C+ v4 J( O - #endif2 n! b, H( K4 ?1 n9 [; [
& A' ]- s) W/ z8 ]4 T. W- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ t( o% A ^" _8 U# W# K/ g
- #define STATIC_SHIFT 3 a! d& `" s% ?1 @% J& {
- #define TCINTEN_SHIFT 20
8 O1 b0 G" Z7 z) O - #define ITCINTEN_SHIFT 21
, Q* q9 l2 H) D3 S - #define TCCHEN_SHIFT 226 j) g, x( r7 y+ }. l ^
- #define ITCCHEN_SHIFT 23
: L/ P5 I- T `" e6 {1 i7 [ - 6 u& I* N% V! y5 P
- static volatile int irqraised1 = 0;6 `! }/ R3 S4 }* }
- static volatile int irqraised2 = 0;3 u4 p6 j& h: F/ P1 Y0 k& Y% ]9 h
- . ^9 R" \; U' B2 _' y
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 Q/ Z" Y8 k& [9 ^- ~- ]0 {* y - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, W) S" k1 R' c G: L# m& \
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 V$ B3 F! }. H9 t
& q3 ~+ q5 d2 \6 S8 J- dma_addr_t dmaphyssrc1 = 0;
% x0 n# \, ~5 @; m( E - dma_addr_t dmaphyssrc2 = 0;
8 w0 @& x+ \! u0 e0 D, ^ - dma_addr_t dmaphysdest1 = 0;& j3 L" f/ S! Q$ ~; ?+ T
- dma_addr_t dmaphysdest2 = 0;. {2 a8 l5 t% Q3 `
- ( H! @4 f6 e" J5 D: l8 F7 m
- char *dmabufsrc1 = NULL;. ~1 i; O2 @+ m) d$ j
- char *dmabufsrc2 = NULL;
" k$ |$ O" m3 A1 X1 k; e - char *dmabufdest1 = NULL;2 |. h" e, f/ T2 u4 y7 E3 ~3 `
- char *dmabufdest2 = NULL;
8 Y, n- S. ~# t& k3 c& v# J' R
" q% e+ A% J5 L) N! L; F- static int acnt = 512;
7 c4 k1 a3 x! I8 J) u1 x% n1 X5 x - static int bcnt = 8;
Y( l& _4 y V - static int ccnt = 8;
1 u5 X. R7 b; e4 R S$ m" ~# i
2 Z' W* x/ F: k3 n" Z- module_param(acnt, int, S_IRUGO);
4 U7 [1 n" N' m5 _ - module_param(bcnt, int, S_IRUGO);8 X$ n, L. E. u; _4 G
- module_param(ccnt, int, S_IRUGO);
复制代码 / u `2 N2 h& X" i. F! U
( M2 H* m& [) Q D$ k( x, K6 J 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: }# K: y/ X+ }2 r- w* C" H" B
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
2 }# O b6 m8 g2 F% i7 t- m 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。4 B3 t. \, _3 J9 [3 X9 ?
7 S y% Q& U* Y' e4 G% e) z
9 y/ F1 s& C( u N& L" v
|
|