|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 4 Y9 H8 ^4 e& F2 Y5 ^
- [code]EDMA sample test application7 R5 ?% ^* A) }3 R* ^% c
- /*/ Y% A; P/ T* V' d2 {
- * edma_test.c4 E0 |# p3 J* ?9 [) H
- *
. q `( T5 A. D% E1 W - * brief EDMA3 Test Application4 d4 C3 _7 S! @; t6 | _, V
- *
* N/ n% J* \' J# v% ] - * This file contains EDMA3 Test code.
: K8 q! q1 d8 O* L* k# ~ - *
2 }- H* W9 j8 f5 l - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE8 L6 t) `, @3 J, A. }) G
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
) E* s3 [' V0 C! d/ t - * TO CHANGE.
( i5 O; ~% K% X- H9 t! S+ y - *- Q7 @* i% B6 T
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
# E5 R/ {' [- `5 L) o - *) H; M A3 c5 P% l% O7 h
- * This program is free software; you can redistribute it and/or9 D0 t$ K$ q; a9 ^4 a
- * modify it under the terms of the GNU General Public License as
7 r3 n( e. i" _ - * published by the Free Software Foundation version 2.! ^$ v7 N% F: a d. Z( X# E# w
- *7 |- g5 [# k, F( r7 R3 A
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
W- c# z7 p6 F% I, a0 B4 y - * kind, whether express or implied; without even the implied warranty6 S. s% U( f8 ]- J1 d, F
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. z+ z! A/ J6 U3 _2 n4 y! m0 l( ]) z3 f
- * GNU General Public License for more details.% G, ]0 _! d& I6 c
- */+ P$ {" Z% d: G2 t
3 k6 P2 e3 `, I" E6 w- Y- #include <linux/module.h>1 C2 p5 d, u, b. {8 K
- #include <linux/init.h>
. p$ F" V( ], e( l5 p - #include <linux/errno.h>
2 x* k6 }6 k+ h0 O i - #include <linux/types.h>
- P7 W) d3 B, R' Q+ _ - #include <linux/interrupt.h>/ t, m# j; }% ^6 d E; y7 w
- #include <asm/io.h># z2 M1 d& S2 p/ \: F2 \8 n
- #include <linux/moduleparam.h>
/ p; n* B; h; S8 Q - #include <linux/sysctl.h>
7 p, H# R6 Z" G6 ~ - #include <linux/mm.h>) O7 d5 A! P. ^+ n( X
- #include <linux/dma-mapping.h>$ i7 n7 m% T9 _" J
- 8 ^/ ^) \+ R7 C9 U) ] U! H8 h" c
- #include <mach/memory.h>
6 V, ^! @+ B3 p1 u) r" x+ T - #include <mach/hardware.h>3 ^+ r4 g9 Q& b, }# i2 _0 i i
- #include <mach/irqs.h>
; o9 x: Z4 g2 Y! w" } - #include <asm/hardware/edma.h> i1 z0 [0 \: |6 c' h
- - i6 F a b5 y8 B1 a
- #undef EDMA3_DEBUG+ }2 A; c& p/ O: ?# c
- /*#define EDMA3_DEBUG*/
! p" [ D2 Q/ o5 `1 d - ( R! ]8 l! m1 a' J
- #ifdef EDMA3_DEBUG2 [" |/ m% e+ k; [8 J5 K$ o5 b8 o; Y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! [) g1 Z# J- E$ Z
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
: k$ k) D9 k% K% [7 e2 Y2 S( B7 l - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* h, a4 e( A6 j! o
- #else" [2 o1 n" Z) N# `0 i0 @& J
- #define DMA_PRINTK( x... )
9 Q/ R! }, k8 o, L - #define DMA_FN_IN) {2 s6 N& W4 J6 U* M1 g$ R
- #define DMA_FN_OUT
6 b/ V: B) ]; ]' H9 ? - #endif
4 b: T6 F- b4 T0 `
8 k' ^; O' X, r" @$ q9 l- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
; _ y$ [9 M" y/ [6 m( [ - #define STATIC_SHIFT 3
! v( k, B7 f% B. F, v - #define TCINTEN_SHIFT 209 |3 g1 `0 W% r9 J
- #define ITCINTEN_SHIFT 21
5 l; w# o! n3 C% x- } - #define TCCHEN_SHIFT 22
5 m' R; m# r) F9 f8 E( M6 M - #define ITCCHEN_SHIFT 23, Y# S; n# Y% t$ V: \
- 7 g& _0 R! O7 U4 O# L: M
- static volatile int irqraised1 = 0;
! p: Q3 G9 P* q% d - static volatile int irqraised2 = 0;8 ^: s: p" N. O" E0 G
2 o4 d' I, [2 B0 K! z! _- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' W( ?& L" T+ D$ f# N - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& _" V; \0 H+ Z) ]8 H4 g/ g* c
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 e* O+ e/ h M( j" ~) h4 Z4 r2 j9 h
- ; C# u3 F- ?* O: i# w: ?! A: C) D1 A [
- dma_addr_t dmaphyssrc1 = 0;4 x; l' q& V3 x* f( l& ]" `
- dma_addr_t dmaphyssrc2 = 0;. o8 M6 h4 }1 H) N
- dma_addr_t dmaphysdest1 = 0;
3 ? R8 u9 |0 w* `6 E+ Q - dma_addr_t dmaphysdest2 = 0;' b" d. b$ i1 k o3 \
; `2 y7 p, H0 E- T4 u8 w, v' [4 V- char *dmabufsrc1 = NULL;( J7 i6 Z5 H. C3 [5 S& ^$ a
- char *dmabufsrc2 = NULL;+ }( p! [+ d5 T1 x7 {) M. p w F
- char *dmabufdest1 = NULL;
: x0 w& j* G; ]; I- p - char *dmabufdest2 = NULL;
7 r2 G5 u* @8 P2 F; I - : J" D; c' Z1 u( ~
- static int acnt = 512;
" I7 n4 n# \: \1 k- V - static int bcnt = 8;. {) H% B' m# a1 ]% O
- static int ccnt = 8;4 C Q3 h/ U9 w+ I1 ^. k4 R# H( i5 k
- # X4 o0 E9 @- o- U* R2 i
- module_param(acnt, int, S_IRUGO);* d! z9 s" d U. j% L B1 r
- module_param(bcnt, int, S_IRUGO);* ^" t; ^0 E, m" S- D
- module_param(ccnt, int, S_IRUGO);
复制代码
' o2 N+ D& \: ~3 |6 U0 f+ H C) W/ n7 K2 ~ u5 J
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
- ^# d( w/ Z5 h/ A! k1 R: D% U b) T% |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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. v" D3 O# `4 @9 [* _, ~
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。( [$ h" _- K" R! k i
0 O: s3 J }8 M) U6 O% ]& m/ j& f
( G$ N( J* R! W3 s! H9 a" P |
|