|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 5 y5 B. G4 S3 i# S6 U+ A
- [code]EDMA sample test application) G2 z, m0 Y/ u+ H% ?
- /*4 R" b N4 q9 a( i& \; y
- * edma_test.c
# z$ j/ q6 r' X - *) D0 ?) e9 i* A: O5 E
- * brief EDMA3 Test Application$ h0 W9 k8 {7 u- A& u* Q0 Y1 R
- *5 r! m- ?5 W0 ]
- * This file contains EDMA3 Test code.
2 P, g* N! Z+ j0 ~1 `2 X - *
r$ Y# m6 c9 u r' T. I, s - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
1 v& }/ d) F$ R. X# }1 T @ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
; \, q/ k* {5 n' p7 P" Y5 _ - * TO CHANGE.
/ r2 `3 ]! _& U* }! K3 A* g - *$ {' q8 a/ w3 u" d; N; h4 F
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) ^2 l# r* l, D2 L9 f$ t
- *) {6 T6 u! U8 T0 @
- * This program is free software; you can redistribute it and/or
. Z# O3 b: _7 t9 w- [/ G" { - * modify it under the terms of the GNU General Public License as
1 k- w" o6 v8 q6 q( Y! I - * published by the Free Software Foundation version 2.) Q, u" I" X2 H) {& J9 f
- *
. k% i7 ]5 h9 b! W" D - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# a) L8 D* O. p$ Q - * kind, whether express or implied; without even the implied warranty3 H3 f/ [) C8 D5 F. e- h
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; V7 w4 l [ T/ J/ ]6 y8 V
- * GNU General Public License for more details.# M& Z! y- y6 v4 t2 Z: f
- */
( Q, E9 s3 ~3 F8 Z - , H. p) k& ^; t! F, e3 j% N5 ?8 `
- #include <linux/module.h>
- p; l* Z3 T$ }4 y. ^ - #include <linux/init.h>
0 m! K$ F: Q I3 m o - #include <linux/errno.h>. k, k- U2 S5 X T0 J9 ^3 I
- #include <linux/types.h>4 ~5 H3 ^& `. A/ h7 I
- #include <linux/interrupt.h>! L" b3 h% L9 s, E
- #include <asm/io.h>) ] [- W3 F0 f" O
- #include <linux/moduleparam.h>8 Q9 K/ O m1 @3 R( w
- #include <linux/sysctl.h>. l) O( L; x) z K" i& S# G" f
- #include <linux/mm.h>5 B" _' C8 s* x7 I! S* t$ ~
- #include <linux/dma-mapping.h>
4 w! i1 {# u+ s z
: `$ e' M9 x6 |3 g" U- n- #include <mach/memory.h>
& `1 o6 X9 S4 U* F; J* h- C - #include <mach/hardware.h>& @0 E4 J: { b& n' k! @, O* F
- #include <mach/irqs.h>* H4 f+ P0 L8 u- M |6 k
- #include <asm/hardware/edma.h>
2 q& _# ~6 ^" s - ! m( M9 q. y5 D; l) T
- #undef EDMA3_DEBUG
1 d7 [/ m3 r# V1 O4 b0 I - /*#define EDMA3_DEBUG*/
/ R# x7 x7 l2 D0 {2 R9 ^ - % Y$ N3 K8 r, y/ C
- #ifdef EDMA3_DEBUG
& j* y5 t4 [" W4 g/ w - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)7 f* y+ _( j0 E6 a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)6 d0 C% Z1 z% F* }, Y
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), i( w" V/ {3 d3 E( j9 O% }
- #else
, @% X* i- B* c' H* w, i) W/ z - #define DMA_PRINTK( x... )
$ Q |/ m$ F& {6 m0 h - #define DMA_FN_IN
' @% S9 i* W% _: v) h3 H; A% f - #define DMA_FN_OUT
* V8 p- K9 O+ u4 ]8 I: g3 X - #endif
( G8 W& I3 R: ?$ U4 O9 A* O% Q# p
! z, U3 P+ k4 d: c7 _- k2 J- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
' c# V4 E# ^& _3 g - #define STATIC_SHIFT 3
7 M! U& f; @: |" E! m - #define TCINTEN_SHIFT 20
6 j4 M# a+ l$ C3 d - #define ITCINTEN_SHIFT 218 P* K9 g L4 B Z$ S* |6 }6 ?* L! e
- #define TCCHEN_SHIFT 220 r4 k5 q _+ H! b) m m' Q" a6 a
- #define ITCCHEN_SHIFT 232 ?+ R8 F4 d, K" M
- ; o+ { s2 S) o& W9 ?- F
- static volatile int irqraised1 = 0;
8 J# ?' V+ {* F: G: a/ E - static volatile int irqraised2 = 0;3 [4 _& z4 M. K% C+ Q. a0 ~
# V9 _9 p8 I% s c4 X4 N- u- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, b/ t" ?# p7 S# K# z4 y - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) ^4 g. q# q6 {7 c; z* R( \5 j- \
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' \. X: M: G M2 C/ S
- ) a& r2 ?" x7 W2 Z- p
- dma_addr_t dmaphyssrc1 = 0;6 P, _+ T4 P) F$ T L1 H k5 p
- dma_addr_t dmaphyssrc2 = 0;
3 K: ~) O) v9 Q0 j* d4 @$ Q1 K2 ^% o - dma_addr_t dmaphysdest1 = 0;
8 W T$ y+ }. W, u - dma_addr_t dmaphysdest2 = 0;" [6 i8 Z L8 t5 G! ?$ d
- % ?* s3 Y/ Y: Q2 e; k
- char *dmabufsrc1 = NULL;
/ \" e3 J8 ]$ c3 p - char *dmabufsrc2 = NULL;0 A# g) ]7 K3 U0 ?3 l8 |' |
- char *dmabufdest1 = NULL;
6 |2 N X% y1 S/ W' \9 t - char *dmabufdest2 = NULL;
3 X! Y* e. w6 a7 ^7 D& `% k. A
0 \! p- s% b9 H& {8 r2 w- static int acnt = 512;
, e$ u6 P) I" ^6 Q - static int bcnt = 8;6 ~% r& P! ]& l9 E# w
- static int ccnt = 8;
7 R1 [: {' n. u- p& [- j# @
/ X5 [% `" e3 ^, T& b% q, H% j- module_param(acnt, int, S_IRUGO);
* b' h) B2 b o2 Q3 s: { - module_param(bcnt, int, S_IRUGO);# ]1 F! A! I' O& S9 F% l7 y' u
- module_param(ccnt, int, S_IRUGO);
复制代码
) v& v' v& P' A) v+ x: ?! {' y: T" t) r6 F( M
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
) S" I1 H9 ~! d8 @* o9 N! k) xarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- h" e1 M/ W' U( t! a 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
\ _4 i3 Y0 J9 V$ ~6 m( s1 F. [! l5 k# z
- }3 I4 ?8 K) p9 \: V. x) g
|
|