|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : e8 ?& F5 h" ^. e
- [code]EDMA sample test application& E1 y5 w1 L8 x- s% t
- /*: F* v# s$ z, W6 T& L1 O$ u3 j& Q
- * edma_test.c
. o- ]. d/ x x3 [& Z# ~ - *
7 Y$ M) N; f _" c$ _$ ?- v( v - * brief EDMA3 Test Application( N$ T& b! N% e$ G, x
- *# o) y' i4 D+ k$ k& S- X( K
- * This file contains EDMA3 Test code.$ v5 Z4 x3 @. w! R+ y
- *
3 V! d8 P% g; S7 x" T. P' [) s( @; W - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE" X6 F: J, [( g# t3 h: o& K+ B
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT" I$ {. S% v, F1 w* P0 K! a
- * TO CHANGE.. q% f# K, |8 M. ]
- *" v% S% n' a4 A8 W- I
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
1 f( U$ a* z& ^ - *0 b3 M# O: j* v% @( J5 {/ [6 L
- * This program is free software; you can redistribute it and/or+ O% T" K+ B9 l6 v: m$ O
- * modify it under the terms of the GNU General Public License as
% ] L9 q1 R9 T D5 C6 b - * published by the Free Software Foundation version 2.
; A7 J# d* e# l/ [% d - *
7 Z5 X. I$ H3 p7 e, u* I - * This program is distributed "as is" WITHOUT ANY WARRANTY of any( F* i2 T" m+ t+ m0 `
- * kind, whether express or implied; without even the implied warranty5 X) G) {$ `0 B8 v# E; o9 X% _
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 y( q9 b6 B( l+ } - * GNU General Public License for more details./ F$ w5 c4 ~& t$ q
- */
0 _* n @$ a+ U - : M, e5 e) Q: b. \- J! t0 I
- #include <linux/module.h>
- ]) k; Z3 l6 H8 s: E - #include <linux/init.h>: X- S0 A, H1 V& _
- #include <linux/errno.h>" T* A$ D' r% Z
- #include <linux/types.h> A5 G% W7 Y( H* i
- #include <linux/interrupt.h>" q% y! z" x8 ]& y
- #include <asm/io.h>4 g$ _8 M4 p( j& u: I2 T8 D
- #include <linux/moduleparam.h> x2 ^9 [8 B( U7 ?# n9 W' `
- #include <linux/sysctl.h>) i5 k6 \2 f. w9 a# d
- #include <linux/mm.h>
9 D6 M8 A$ w, E, } - #include <linux/dma-mapping.h>
5 u9 ]/ `& w. `+ A2 i" Z - 5 A' V$ |2 b! {5 o
- #include <mach/memory.h>
# Q) n" _% ?% i% e% A - #include <mach/hardware.h>
7 O' ]0 T6 p; e2 Z9 O" J$ T - #include <mach/irqs.h>
; Q, }7 `& V+ S* ]6 T( N% {" I$ k - #include <asm/hardware/edma.h>* H. z% u9 X! w9 Z$ G* @- M: k
- 4 P) m' i( r+ B+ _- _! Z |9 T
- #undef EDMA3_DEBUG* G5 o1 ]2 W: t- R
- /*#define EDMA3_DEBUG*/
9 }6 a9 K# w( Y1 ?7 q) c; E
( X% i! ]8 N' l8 J: L- #ifdef EDMA3_DEBUG' b" p% @! ~# ~* b2 [' n5 D
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
\( B; S# Q. A - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
1 @% E9 v! h; j6 t. F4 \- G+ o" Z% e - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* @1 k1 M3 P0 \/ V$ z( K- T - #else
7 {4 O. `' {2 T0 E$ [ - #define DMA_PRINTK( x... ) a6 A* a" c- [6 |( L* |$ K
- #define DMA_FN_IN
# ^4 U( l: U a: j O - #define DMA_FN_OUT
; m5 l5 P2 m" U - #endif. J! c" ]" B- T% O( ~
- 9 x/ | Z- P- B9 @" V) @9 L) n
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 H) h. M: x+ R; h% d - #define STATIC_SHIFT 3# {$ i6 V" i9 Z( b; g- _, e
- #define TCINTEN_SHIFT 20: z+ v$ e& Q1 b
- #define ITCINTEN_SHIFT 21
7 \& f G) ]3 h6 q - #define TCCHEN_SHIFT 22( `3 q+ ]- R, O/ j
- #define ITCCHEN_SHIFT 234 k) @, V' ]% N8 a- ?5 \
7 M4 i H" ~2 ?- static volatile int irqraised1 = 0;% z: q L" l2 V9 F8 f
- static volatile int irqraised2 = 0;- n+ r0 l7 [0 g- k6 M
5 E. \6 {' p* j! D. h3 O- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- Y) O5 n3 m: h; i; s
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* }7 [5 X' C- s7 x% s" H- E - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 {# C) ?+ y/ g8 S& `- n2 h% t! R - ' V: P/ z, V7 i( C0 M8 M& q( J
- dma_addr_t dmaphyssrc1 = 0;
2 y r- s, }0 l& S/ \) W4 F - dma_addr_t dmaphyssrc2 = 0;6 Q$ n4 `% I$ @4 P9 l
- dma_addr_t dmaphysdest1 = 0;
+ P7 D9 o6 O4 N- v1 W) f0 i - dma_addr_t dmaphysdest2 = 0;' V. V, I9 } s
* h' n7 O! {, W1 l9 K& |- char *dmabufsrc1 = NULL;% l2 X0 v, X- V
- char *dmabufsrc2 = NULL;( e( Y! P/ p% {8 H
- char *dmabufdest1 = NULL;
3 T: q6 a/ ?* i; R$ T. p. \* v - char *dmabufdest2 = NULL;
# x; ~* ~( j" i - 0 Q/ l, _6 p$ \8 b5 @0 N
- static int acnt = 512;6 z- k. h5 H3 `- O, b; x
- static int bcnt = 8;
. B( z" v+ R6 s& K - static int ccnt = 8;& `' ^) g& K$ v# ?. @8 W1 H9 F
- 3 m" r. P, V. [ `% X9 p
- module_param(acnt, int, S_IRUGO);) e% u- n& Q4 r% {; M L
- module_param(bcnt, int, S_IRUGO);. G+ `! S" i4 K2 b+ `* T- |4 K: Y
- module_param(ccnt, int, S_IRUGO);
复制代码 # ]" w" t# R _5 B' u/ q4 m' F
9 J0 L6 O, J E4 p4 O 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
2 q% R$ ]- O/ ^# K8 E Carm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。' R' @- W4 ?7 p7 O' h2 Z" m
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。4 F" |" f! r- J9 K. P, e6 Y1 Y
* Y$ e0 b3 k3 L+ C- n8 z
: Z! A+ x( u/ C) z% A' {. {9 ^: ~3 m8 w |
|