|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 c! B9 k( m4 \9 Z- [code]EDMA sample test application' R, B% J# v7 X! v
- /*
7 Q, J1 I5 {* } - * edma_test.c, C* @ N! E& J. W
- *3 k1 w0 m3 {3 p* U
- * brief EDMA3 Test Application
( m7 j; y7 V ]( z2 d$ C; m - *' r: ~: U) S0 m* F- a! k1 P
- * This file contains EDMA3 Test code.
) v1 M" r v! q @: u& i8 _7 K - *( w9 z. [7 O3 d$ Z
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
- V2 Q+ y o' n' i7 a - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT& I8 z# g0 n. y/ `9 T
- * TO CHANGE.
4 L$ f. B x" M; Y0 F) K7 } - *
4 J2 C A0 I* E - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/+ @! b8 I2 P7 L
- *# ]8 [4 \( ^ H/ u7 K4 {
- * This program is free software; you can redistribute it and/or& c, u' l+ o Y! L
- * modify it under the terms of the GNU General Public License as
) l' B# `. {+ j - * published by the Free Software Foundation version 2.7 w5 E8 B4 }5 h9 W
- *
" X! n( z, r4 w - * This program is distributed "as is" WITHOUT ANY WARRANTY of any8 s" R! y. W% \3 e
- * kind, whether express or implied; without even the implied warranty- N8 ?/ }3 @. p! W7 `' ^4 l; }9 y
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the: k! h8 U& n5 w) `
- * GNU General Public License for more details.0 n2 h2 O9 H5 W1 J) p- @( p. i7 z/ D
- */
* X$ L/ z# \$ U* ~+ n
1 V# G) F# v9 I- #include <linux/module.h>
1 g3 W" L3 P0 _0 h z: ~! C0 i5 ? - #include <linux/init.h>
' c" C9 S1 Z1 {" ] - #include <linux/errno.h>9 b. ]0 a) I+ L- r$ {, v& ~
- #include <linux/types.h>, G9 _- M8 s; E- Q; a6 u4 m: W O3 x
- #include <linux/interrupt.h>1 v$ q1 |; n4 Y' c/ T3 F
- #include <asm/io.h>
0 }( P6 G8 f; s6 N - #include <linux/moduleparam.h>' G# H8 l8 N6 x9 m) h$ `
- #include <linux/sysctl.h>7 v, p0 H- E" k" T
- #include <linux/mm.h>
9 j- F% |5 x: Y: I2 y - #include <linux/dma-mapping.h>0 h5 q% y9 u9 T
& a I" k& V* ]# `# ]; `3 Q- #include <mach/memory.h>
, \7 Y! n1 t/ V; Q( X- e0 O - #include <mach/hardware.h>8 w$ @# P4 ^/ u4 H% }% u5 ^3 g" O
- #include <mach/irqs.h>
1 N6 t+ S8 f4 m. i1 }/ J c- ?& w2 b - #include <asm/hardware/edma.h>
+ p$ Z: `6 u7 W% a$ D% U( Z
0 }/ D4 N! M. C% m- #undef EDMA3_DEBUG# Y) N/ y5 f4 M ~
- /*#define EDMA3_DEBUG*/2 B/ o' O1 S$ ^4 l" A2 ?, D
- # B1 t/ [7 d! S9 q' [( q/ `
- #ifdef EDMA3_DEBUG
) P7 M q& X' l) q. a: ]; x; b5 C - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)% `8 S4 l {* I* K% m
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& _2 f. s4 k, g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), Z" A$ K) F! y* S7 z; Z
- #else/ n6 F9 {+ ^0 v/ m- _( l4 S
- #define DMA_PRINTK( x... )1 b3 G$ l+ l9 F! _
- #define DMA_FN_IN+ a6 ?. `" j& g6 P3 J, b
- #define DMA_FN_OUT N& c1 L8 f' Y u
- #endif3 k' T! r4 x* a' ?
3 l6 K1 d% z% Q/ O4 N$ J( I& L x# W- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
& o& }! X6 ^& A$ ]$ v }( ` - #define STATIC_SHIFT 3# ?: Q. D% y7 U; I5 D
- #define TCINTEN_SHIFT 20
2 Y, F% d% U& v, v$ t* f - #define ITCINTEN_SHIFT 212 ]) `# p! N( Q, e$ i" Z
- #define TCCHEN_SHIFT 22( L5 A2 x& m) a+ E3 }8 Q% x
- #define ITCCHEN_SHIFT 23
" t0 m A7 S8 c' ~1 R- y i
6 L3 z" [: g" R# c( e' N0 T- static volatile int irqraised1 = 0;; z# \) y. S& |9 [1 N6 O2 n4 _8 x9 g u
- static volatile int irqraised2 = 0;+ x( R% K2 r2 j7 b6 M8 H! I# H
% U; i) H& T& t# B2 B1 h- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 H. U! e9 _! _2 E' ^, l
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 y" S/ J( S: p, c# m2 ` i - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) o) I3 C8 g) r5 F$ A( ?$ ~
# \5 \$ M: m B9 `- dma_addr_t dmaphyssrc1 = 0; T8 Z* Y, U4 g5 M$ g
- dma_addr_t dmaphyssrc2 = 0;
) Y: X: F6 o% E! o - dma_addr_t dmaphysdest1 = 0;
- X7 e8 P* P( ?! C( S2 a - dma_addr_t dmaphysdest2 = 0;
; e- x6 |$ @$ I7 N" x" [1 U# {
8 }* f) s0 X/ E' y3 V- char *dmabufsrc1 = NULL;
+ I8 m* s" n4 j. z( I$ `/ Q0 T - char *dmabufsrc2 = NULL;
' l" n2 Q: c- U4 h - char *dmabufdest1 = NULL;6 {, ^6 L/ ~5 A2 R/ B+ }
- char *dmabufdest2 = NULL;
- j8 Y, I) S% T" l; D/ f ^ - 4 J% H. `) V* Z6 C! d" m7 o- b
- static int acnt = 512;
0 K s$ o" {) a2 T" W, H - static int bcnt = 8;
% x7 p I4 ^' M# N - static int ccnt = 8;
6 \/ e2 I6 ] @! m - 7 t& a: y+ S) o
- module_param(acnt, int, S_IRUGO);0 S; z% h# t, ]0 i9 O
- module_param(bcnt, int, S_IRUGO);
. @9 Q0 t) E- T# z( u! I# F! p. H - module_param(ccnt, int, S_IRUGO);
复制代码 , q+ m0 e4 w6 A/ n% Y
' D$ s8 t" ^( _1 b0 _
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% T" l# J) z/ v; S% O! E1 e: Oarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。' I7 I7 L' H" {4 [: h0 |
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
9 \2 b6 T, {2 I& r7 Z* i& l: \6 r% S; U& P- e
( ~. D. V) J+ ?6 L4 `. Q/ k
|
|