|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : G) B9 Q1 v' ?% Q# L; I
- [code]EDMA sample test application
& `& S% l; g% j2 C/ ?, n' M6 A$ k - /*
8 z( b+ V# S" u0 e4 a - * edma_test.c) Y( I1 L9 M, M, H$ L* e; A0 K% t
- *
4 R, F% x9 x7 X8 ]5 b7 Z3 V4 g$ H - * brief EDMA3 Test Application
3 y0 d7 q8 A0 _' N& |/ }; u - *
& R7 Z' l' t( J1 k7 p% ` - * This file contains EDMA3 Test code.& C% A) L$ ]& @7 I. j- D' R
- *
9 l' ~5 h D) I4 @ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, b. o' t3 C" i1 p1 e r - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT+ X7 R: t0 r; z% S" W
- * TO CHANGE.$ ]" X+ z2 v0 h |) c9 O6 d9 w
- *, }# J4 f' L' i& {. E6 m
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
8 h/ ]; q1 ^* ?, b4 k9 y2 l - *2 t' z5 c" ^: g
- * This program is free software; you can redistribute it and/or# E. x& I( O$ T5 ^% C0 \
- * modify it under the terms of the GNU General Public License as t8 c4 E; q- B( m. r. \5 E2 X3 K$ M
- * published by the Free Software Foundation version 2.
, ~3 \; D" N& ^ - *
. p) A$ \% o/ G3 O$ o; S2 ` - * This program is distributed "as is" WITHOUT ANY WARRANTY of any; b! t1 c# F- l2 e: ^
- * kind, whether express or implied; without even the implied warranty( \8 ^) l t. @+ l. X9 \1 n
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X/ ~8 E4 D; u* I* ] - * GNU General Public License for more details." f' V, F1 B' S
- */
) c) T# L1 h! D4 m
* v7 N8 @3 X. H4 w; @3 a- #include <linux/module.h>9 @: U" Q8 Y }/ Y
- #include <linux/init.h>
$ p4 B0 P* s. n. _* j8 z+ _ - #include <linux/errno.h>! p, u+ e1 |5 J: i. k0 _
- #include <linux/types.h>5 M' u$ Z" A7 ?. k p) {; z
- #include <linux/interrupt.h> e- ?+ k, l( X( R* a- ~
- #include <asm/io.h>/ v; F. \3 |' }1 |, t( Z. D5 l
- #include <linux/moduleparam.h>
. Y( l) [5 i3 K' s - #include <linux/sysctl.h>
8 s: L) S1 O. O - #include <linux/mm.h>
" |' x$ R" K+ T/ {4 ^, {# k8 d2 j' a+ Z6 Y - #include <linux/dma-mapping.h>( L5 w* Y$ L4 \' d) a
~( a# A; U8 t8 f% t- p- #include <mach/memory.h>1 h& x7 {2 w6 N) P/ ]) {- U. b
- #include <mach/hardware.h>* G& l' m6 T- q, t1 K
- #include <mach/irqs.h>
5 u& a) k. a q+ g5 k, N- ^ - #include <asm/hardware/edma.h>
8 d c ]1 G# D0 i8 b" {/ Z/ x3 U
' t/ F8 s2 Q5 ?* @3 p0 t- #undef EDMA3_DEBUG9 U0 e/ j) y/ ~
- /*#define EDMA3_DEBUG*/$ @4 A* o* y3 h+ P) p( [; K. i7 }$ u
q+ O7 k( {& y4 e- #ifdef EDMA3_DEBUG) J- O/ i- J' R! p2 y; ]# m1 P$ F* Z- s
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)- v' U$ |9 u3 s ]- K; h
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__): A; d; p& r3 [. h- B+ D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 K0 a4 D$ ]# z p - #else
0 l+ {5 e \9 Y. p+ s$ D3 w$ K - #define DMA_PRINTK( x... )7 R. }- B, H; J( R- [: i
- #define DMA_FN_IN6 R3 C: `; R" m# D) e9 h5 T4 _# C
- #define DMA_FN_OUT
( ^# s3 @. K/ L, t2 ]4 V9 X7 ~! t6 y# |) E - #endif( E3 `3 y( R/ _
- / \& |. t, I$ w3 { ~; W+ h1 ^
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)6 F' i$ k# b4 _) P- R2 A
- #define STATIC_SHIFT 3
* H% _( o+ \) w) I) h. O - #define TCINTEN_SHIFT 20
6 @' z) J" b: q; Z- k2 l. F - #define ITCINTEN_SHIFT 21( H0 Z% o) Y$ W$ {! r+ y* X' }
- #define TCCHEN_SHIFT 22
; n: t. N1 D* {! A" r! w/ Q7 z - #define ITCCHEN_SHIFT 23
& D$ k$ y2 y0 d5 p: P - $ Z6 O1 I S( W; Y: ~' ?
- static volatile int irqraised1 = 0;( x7 b2 c# d9 K7 Y" ?$ Z. F3 `
- static volatile int irqraised2 = 0;
* B! z1 k6 S5 r$ v5 K& f0 j8 q. o - 6 g! ?3 c2 g! ~3 g2 E
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);+ G. T Z3 T u2 c
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, K+ y/ K1 x* z: Y3 ]- }5 u- y
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) m2 P. R9 |1 D1 a - 5 _5 D. ~9 l [% w4 r8 H$ d& C: ?
- dma_addr_t dmaphyssrc1 = 0;
# M% e2 [4 z" c: @8 q ] - dma_addr_t dmaphyssrc2 = 0;% {* {6 x( D) o5 J( _( n
- dma_addr_t dmaphysdest1 = 0;1 u' U& q/ A6 w5 O
- dma_addr_t dmaphysdest2 = 0;- m7 V/ R$ V' a4 R
- " k9 {+ d$ E. f/ M
- char *dmabufsrc1 = NULL;
8 i6 t0 m, G& C6 n& ~2 D5 U9 E - char *dmabufsrc2 = NULL;
# n/ \2 G1 Q X T - char *dmabufdest1 = NULL;
5 c2 i$ J" C' V - char *dmabufdest2 = NULL;5 u7 _& L6 z/ [6 S) J
- 1 _$ B! m. O5 B6 |5 ]
- static int acnt = 512;
5 G& t* V9 N" J0 A. F - static int bcnt = 8;: y' h7 A$ W6 y
- static int ccnt = 8;
6 b3 V! M9 Y6 S8 K: `
1 Q m1 R( ?" H! ?9 |$ J- module_param(acnt, int, S_IRUGO);6 P- o4 v& \4 h5 ~! P) M1 } M
- module_param(bcnt, int, S_IRUGO);
' U8 v/ S4 T: l6 P - module_param(ccnt, int, S_IRUGO);
复制代码
; g6 A1 r2 o6 X$ J$ M8 y" r. U( T- N) h a j2 n3 B# M
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 H# ]9 N, A: I6 p' M& M* L/ Varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
5 w+ m% ~6 ~- D' a 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
; P; q1 n9 |# R
. ]6 g, C# W( R2 O9 s, V5 }
/ i3 q$ S; b. B/ f( I/ f |
|