|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- k* a8 {9 w/ X# |% e3 E* J- [code]EDMA sample test application
; @9 V* J( Z% T' v" [; Y - /*3 H1 w& u% i. x* i
- * edma_test.c( @" w6 X5 f0 U, O2 O
- *8 i7 R- t) `( [+ a6 \2 M8 H
- * brief EDMA3 Test Application
; N6 R0 K8 Z. P2 O - *- a3 | Q: y6 \' C3 k3 z
- * This file contains EDMA3 Test code.
5 y0 j+ {: v! T* Q0 | - *" p3 ]6 L4 M5 v$ b# e
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE3 n0 ^1 d: }1 @6 o
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT* e. M" |9 C$ F
- * TO CHANGE.# H$ n0 R0 H" ?9 `( O9 M0 Z
- *
. I; p% e1 k! t3 y# @( l, b9 Q - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/# R* Y5 G! ^ M4 Y- \- k
- *9 V' u' |0 d5 q
- * This program is free software; you can redistribute it and/or; d4 X6 y5 H7 N" [5 ?
- * modify it under the terms of the GNU General Public License as
7 M; f9 k+ L/ q+ H - * published by the Free Software Foundation version 2.# ^7 [. A' ]7 C0 y% b w
- *
2 A, T# ~: Y# F$ w - * This program is distributed "as is" WITHOUT ANY WARRANTY of any9 v- [- e8 @- b- n
- * kind, whether express or implied; without even the implied warranty
9 h5 O2 @0 p1 Z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 ]) l$ N4 z" i- z z6 I" l - * GNU General Public License for more details.$ E( C0 o2 W- [$ h" S# _5 l# g$ X
- */3 f- T6 g6 H. `& d+ }8 J8 B1 G
- 5 H9 P0 [) h2 u7 ~$ y k& S
- #include <linux/module.h>0 w9 P% p. R& F I( J
- #include <linux/init.h>
: ? s! T( |) Z( ~( M6 j& R - #include <linux/errno.h>1 n( e0 w; o- m7 {5 |/ l
- #include <linux/types.h>* Z# [; Y2 ]/ @$ K& Q. ?
- #include <linux/interrupt.h>7 v, e! ?" o! p
- #include <asm/io.h>$ `/ P1 H1 H5 l) p- @
- #include <linux/moduleparam.h>
# N4 n: U- B0 {0 _9 u" d - #include <linux/sysctl.h>
9 i+ E3 |4 t4 ` - #include <linux/mm.h>: y4 D3 R q" C. H n
- #include <linux/dma-mapping.h>& |' f9 ], e% ]( g& d Q! \
* h3 K9 a, ?% f/ u% f- #include <mach/memory.h>
i# X, E. B6 \% m$ z - #include <mach/hardware.h>
8 m- _' s, [. q0 U5 ^% u: D! r - #include <mach/irqs.h>
) s+ x, B# i( ^; }$ C1 a- B - #include <asm/hardware/edma.h>
( V- P* r7 C, a1 S7 L9 D; `
% A# G$ ?( M( b7 y' z- #undef EDMA3_DEBUG
5 }. v1 c1 ]+ Z. l, B4 O - /*#define EDMA3_DEBUG*/) h' d. Q! H: I. l
- 4 [# n( t. I- V
- #ifdef EDMA3_DEBUG
; v- r( y9 O, { - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)4 l$ s0 X U0 `2 I1 P
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)5 `7 I- ` i- {$ B9 q
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. U( l7 z$ i' ?' W7 I7 { - #else
" k& o% e5 C. x* n. t9 i& H - #define DMA_PRINTK( x... )
9 Y C% T& b. | H$ ] - #define DMA_FN_IN
/ e& K/ c9 z% d4 z# |1 ` - #define DMA_FN_OUT
, P4 t7 s b# U# P8 @ - #endif# t$ `4 \% s% F6 N+ K/ n+ o7 m
- , q: L3 p9 m F; u( @
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
S1 G$ n; B/ G- q4 e; { - #define STATIC_SHIFT 38 F0 O' \9 d- G+ C* w" o# D
- #define TCINTEN_SHIFT 20' I! d& ^" L8 o+ }$ e8 ]0 k% n
- #define ITCINTEN_SHIFT 21
" X }, J8 B6 M' }. G) Z6 Q: K - #define TCCHEN_SHIFT 22" \8 r6 \6 D# ^ Y! P L7 e& m
- #define ITCCHEN_SHIFT 232 s9 E, s7 t& p1 o' }" J, }, ~9 R
) m1 r2 }- o# L4 T+ D! e- static volatile int irqraised1 = 0;
1 G' M: D, I# p4 @ - static volatile int irqraised2 = 0;
( |/ |# P; T! ]9 \( I - % J3 h1 I8 d* `/ r' F% ?
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; N/ R/ [, S- Z# n& \# s; s: K) z0 u - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 P) s; J- Q% z* A - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* Z) V; q2 u2 f
- $ A3 U( l7 L" O' k, W
- dma_addr_t dmaphyssrc1 = 0;6 o5 {" h O8 a) v. t# z
- dma_addr_t dmaphyssrc2 = 0;
/ h# B' a$ i# U1 A - dma_addr_t dmaphysdest1 = 0;
/ q' S z6 T; v$ E5 D% v; f - dma_addr_t dmaphysdest2 = 0;
4 V% l) l/ o$ q9 N( \9 E0 V6 f4 d
4 M1 K/ W' a5 Q% w8 d6 O- char *dmabufsrc1 = NULL;
1 A) ?) m# ]3 A3 N - char *dmabufsrc2 = NULL;
, @6 a$ f4 E& h8 |! y# f0 o - char *dmabufdest1 = NULL;
1 c& Z& m9 c* r- T5 G4 ^1 P7 l - char *dmabufdest2 = NULL;6 D0 s7 f! D; W! Z
: A5 d5 C9 I, {9 ^- static int acnt = 512;. r" A: `7 ?: [9 i8 T" @4 s5 G
- static int bcnt = 8;
) Z# X2 [8 w$ Z% H r - static int ccnt = 8;
$ l5 N% p/ k, H& P. P% G2 F - & K% T& P8 p2 N& K$ ]6 ]& T4 E6 |
- module_param(acnt, int, S_IRUGO);
2 S7 \! R% |4 [! C9 o# d - module_param(bcnt, int, S_IRUGO);
" u) ~$ m- d' ~; L - module_param(ccnt, int, S_IRUGO);
复制代码
5 ^) S' d$ s N; y7 H* y9 g# k9 c2 H' Y
- {2 a3 f4 a- V 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% @- R m% t. f% g9 q) _5 qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。4 T0 n# I, }8 }9 z g* |
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( w1 m' q7 p: m* ~% }. f. Q
9 d& s5 U6 U' G( S! C! w$ P
1 Y( w% K6 u/ ?2 K1 q3 n8 ] |
|