|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 _& ?# d5 b6 v' ]0 m. z1 C2 [
- [code]EDMA sample test application* h7 u: X% V/ d& f) Z8 M
- /*
) Q, E9 F0 X% X5 M# K - * edma_test.c# _) z. K4 I: ]% a; E/ h# u
- *
2 H$ x7 H6 ]. Q5 @" A4 J+ p9 q - * brief EDMA3 Test Application2 c5 W* r1 K1 t% q" k2 k
- *
. |2 g/ z& g- w- j5 [, V3 q# | - * This file contains EDMA3 Test code.: A, k' D. q2 P$ s
- *" Z& S }" q( @1 }
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 p, m B* V) o! t$ w$ w - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& ^, D1 \# B$ A - * TO CHANGE.
9 A3 }% |$ I* ?" I$ I3 D0 Q - *# q$ A/ j- `) C5 |2 ~* O
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
' H- i+ ^. s9 O! l6 O - *
4 \% Z, c: d8 X: P% R% t. x ~ - * This program is free software; you can redistribute it and/or' q# L& b" f* z8 L6 n2 a
- * modify it under the terms of the GNU General Public License as
8 m$ \$ i4 i' w$ C' | - * published by the Free Software Foundation version 2. m+ z( D" n# p' ^
- *
8 b7 G; ^5 o; W% e; G9 d/ q - * This program is distributed "as is" WITHOUT ANY WARRANTY of any" S6 Y. I1 R/ m% }5 T% a
- * kind, whether express or implied; without even the implied warranty3 H- h# s- c& i2 o* o
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; [" C* p' c! o
- * GNU General Public License for more details.4 I! K& G8 |7 Z. ~: L) r
- */
; @ Z) {# c4 w. \. A; _6 a - 1 l$ U9 h& i. C( d6 W) B" `
- #include <linux/module.h>3 p: T1 H3 ` P
- #include <linux/init.h>0 _( f" t" p& ` ?0 P$ f
- #include <linux/errno.h>
' {+ x- F: ~5 X7 s& B# W9 D - #include <linux/types.h>
# p3 B6 [1 {# t9 @* w - #include <linux/interrupt.h>- o1 a6 z4 _: t6 Y4 u
- #include <asm/io.h>2 D- [4 M# u) |$ ~7 E% m6 p. g: X
- #include <linux/moduleparam.h>5 e3 ^4 E. J2 o* u% U4 f7 }
- #include <linux/sysctl.h>
& D& C5 x8 H+ k7 v0 O - #include <linux/mm.h>/ b1 `6 O. i5 x* p
- #include <linux/dma-mapping.h>% B$ V; D, s9 t/ @! ~. R3 }
/ P9 d1 u* n" b2 w- #include <mach/memory.h>
: c' Y% R5 C( a; _1 w- O: a+ ~ - #include <mach/hardware.h>1 o% F8 M+ p$ y; G; D
- #include <mach/irqs.h>
~* b+ y% v, y5 h, c1 l - #include <asm/hardware/edma.h>
( s9 u* G0 V) ~) r - + }( [3 a i- z* S, T
- #undef EDMA3_DEBUG9 W' ]- Y& k$ B
- /*#define EDMA3_DEBUG*/
, L9 ?; m8 G7 C; ^; `# @2 b j
& r4 R( q$ m. ?$ i- t- #ifdef EDMA3_DEBUG+ ~" G7 @; y" V! m
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)# O& g5 C, w; q& a. \# z/ w- b$ U
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 @3 |& V' x$ ]1 [ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" [3 w6 u" z9 F/ }+ d
- #else+ A% [& ]% t4 a( z7 x
- #define DMA_PRINTK( x... )
# k0 ]9 D! k: b# c: V" u - #define DMA_FN_IN
, `3 j+ @. Z2 v; K# r' I" p - #define DMA_FN_OUT: W/ I- z* J5 m+ P/ z3 W( w" j) }3 T0 g
- #endif* m) z! Z# B2 _1 k9 u0 V1 O9 g
" D3 f! U3 U/ N7 f/ X% z5 E- #define MAX_DMA_TRANSFER_IN_BYTES (32768)0 L; }; t7 t* ~1 _# d
- #define STATIC_SHIFT 3
2 D4 B9 d: m- i0 ^; i" {$ H: I% P" X - #define TCINTEN_SHIFT 20
t z* `6 B/ b, z# Q, ~ - #define ITCINTEN_SHIFT 21
1 ?5 c0 d% z8 q1 J* T9 E - #define TCCHEN_SHIFT 222 |& F% }9 O4 `8 U, K. A; K" ?
- #define ITCCHEN_SHIFT 23# f, l. v! _5 l$ W; L
9 O @6 j6 P9 [8 ^* e4 L v$ t- static volatile int irqraised1 = 0;
. d& n+ ]7 i% `! {( h - static volatile int irqraised2 = 0;
, R: n6 {3 i B; I3 S, g- T, I$ j% r - ; K: u6 R& H# h
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. r& ?' ]$ d) a2 l; Y9 B
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 c1 ^& G5 D" Z9 m; k4 W/ [ u
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) U( q& o' W: V1 T3 E6 [( W - 6 V1 Q' J% w- t, W
- dma_addr_t dmaphyssrc1 = 0;" [- R- ~( g# T3 ]% D
- dma_addr_t dmaphyssrc2 = 0;2 @0 ]+ H1 U8 R2 C$ p
- dma_addr_t dmaphysdest1 = 0;
5 i8 U6 @1 W7 s1 {6 z" | - dma_addr_t dmaphysdest2 = 0;; }2 G$ w3 M3 a7 A) ~4 u
/ }8 a) V1 H3 v# W4 Y% t/ ~/ H- char *dmabufsrc1 = NULL;
9 c( N( W5 H" H7 k - char *dmabufsrc2 = NULL;. y6 }& R1 e5 J7 z" o {; B
- char *dmabufdest1 = NULL;4 p. q$ x' G8 m6 q
- char *dmabufdest2 = NULL;- E& a) _6 U$ N' f' r3 ]4 n0 V
7 \3 X7 p; `5 _0 M3 o4 i- static int acnt = 512;
- g9 T3 q7 r$ K9 x% Y - static int bcnt = 8;1 Z& O$ ^" b9 Q t% U
- static int ccnt = 8;
6 b2 `' U- f& r E( j; B, H5 J
5 R" b1 z8 ~' t0 Q1 {* ]6 j- module_param(acnt, int, S_IRUGO);, h. |; x- P- Y1 Q9 ^7 v
- module_param(bcnt, int, S_IRUGO);: W' C9 E H9 F2 b. _
- module_param(ccnt, int, S_IRUGO);
复制代码
1 ~& z3 k) [, u M6 J, [+ x
; T+ N5 O( j8 v. B8 n: ? 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% [+ ~6 T1 m+ Z( F8 c, ?2 ?! M3 @
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. o8 g, F/ x# [, ~ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ N: M0 ]- i" G; _) P+ q7 N8 t
( F8 O3 q5 b& P2 \6 @' U- x9 ~
% h/ M& _% J# |9 {" n
|
|