|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ q' Z8 m1 o( Q% s- [code]EDMA sample test application
1 h6 s; i1 F" Z/ y! C - /*
* p7 |% f% f! z8 T - * edma_test.c
) W2 Q5 b, o" G2 c* K! i7 k - *& {5 i2 P1 W+ K5 ^5 S( y
- * brief EDMA3 Test Application
4 |9 U% L& N' g$ |, {3 T' d - *
9 N: t$ N% v/ \. Q; E# X - * This file contains EDMA3 Test code.
3 T/ b& @9 f7 f: D& F1 ~: Q - *
: n9 R$ ?9 M2 Q' v, v% k4 O - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# v% N: T3 z* c) N4 W - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* p+ e' \6 D. Z9 c, e - * TO CHANGE.
$ e7 I% e \& `% N - *0 Y9 E# Z8 `! V! j& v3 d5 a, E
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
: v+ x2 T4 w. l# S) E - *
. a" I" E y) l) L+ [# G9 f7 ` - * This program is free software; you can redistribute it and/or
, w4 b9 o+ V5 G" y+ J% O. Z - * modify it under the terms of the GNU General Public License as
! u7 |6 c" ^$ y; E( r2 I( m$ ]+ h - * published by the Free Software Foundation version 2.$ w0 {. C+ V+ o2 X- c
- *' x; ]/ U' I; |
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
& ?+ X' _. V- |. b0 m* D; W - * kind, whether express or implied; without even the implied warranty
8 H ~% {) Y9 Y5 { - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 W1 v+ [3 Q: v. p - * GNU General Public License for more details.
3 x5 w1 j. y1 w2 D; r+ k - */5 a! k# M, I3 C- t+ k* d$ ?2 f
* o D" Q7 B6 L9 W6 ^* J( ^) e- #include <linux/module.h>: c6 u1 d1 _5 Q! g; i6 {
- #include <linux/init.h>
+ o/ `- S9 `6 P" {7 r - #include <linux/errno.h>
9 O; S/ O! a5 [# ]. U. P5 z9 m z - #include <linux/types.h>
; V) U' e% n' J( o% S# f6 A - #include <linux/interrupt.h>
% U/ X1 M0 ^; z2 I4 m - #include <asm/io.h>
' E3 t: c3 e1 O( @ - #include <linux/moduleparam.h>, z+ M+ j& r+ d. ]% ^+ D0 B
- #include <linux/sysctl.h>% E; q \( b; M: f& _" T8 H/ d
- #include <linux/mm.h>
0 O2 }1 o5 r' L - #include <linux/dma-mapping.h>
" S+ m" N/ j- {. I) ~, J, A - 6 T$ U5 Z" z( F
- #include <mach/memory.h>( C! X% p' H0 u! m. F8 O/ C) H
- #include <mach/hardware.h>
1 D* x2 k$ i. Z1 Q2 p - #include <mach/irqs.h> |8 t7 q( H3 @
- #include <asm/hardware/edma.h>
' u# Q$ J+ n7 F/ P; e7 I+ q0 z - - u8 y* O. Q/ ?$ {8 J1 x
- #undef EDMA3_DEBUG
0 F2 A$ d- g2 i6 k+ ~ - /*#define EDMA3_DEBUG*/* J# y9 M( K; ^8 h9 `4 `9 E0 k
- , c* n# ?( x$ c1 Z$ s K
- #ifdef EDMA3_DEBUG/ d/ f+ q; j4 Q9 X0 z0 N
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)/ n @9 {6 B( t: t8 M2 L
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# J; z( ^. y5 {! O3 y x7 T - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. Y @1 D$ Z! e! G7 V - #else
# _7 @* q1 D4 W: n - #define DMA_PRINTK( x... )6 A9 G) V7 K w6 I4 U3 J. l1 U, o* F
- #define DMA_FN_IN w$ O8 P* ]! c6 S3 E! \$ X: G
- #define DMA_FN_OUT
4 A; O D( o( F& h( n$ O$ z6 o - #endif
; c3 e. w" D% t1 O
8 t# D m' m# }; O* O# b! x) ^- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) J" y" _3 L; P8 ~% M8 p - #define STATIC_SHIFT 37 y: S2 V# s- i% ?
- #define TCINTEN_SHIFT 20% |8 T. B& x8 J
- #define ITCINTEN_SHIFT 21
# y8 i4 Y) k+ s8 } - #define TCCHEN_SHIFT 228 W1 D. L# G3 L& M5 c3 P& [
- #define ITCCHEN_SHIFT 23+ E3 y. x( K/ [$ q8 j" R7 Q* u# r
- ; F! ^+ [) |# p
- static volatile int irqraised1 = 0;9 L7 F& D$ H: g$ [1 N$ A. [
- static volatile int irqraised2 = 0;7 x7 `) o! O* ]+ L5 d1 O
- # `* B0 Z7 C' Q6 S$ O
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; Q& t7 A7 k* v# Z2 f% m$ S% c
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ H* X5 Y$ [% g. j9 q
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# s# ^7 ?) F2 b8 H, J
3 {, d- {- [5 o; W- dma_addr_t dmaphyssrc1 = 0; e! L3 \( ?; U) r _% }
- dma_addr_t dmaphyssrc2 = 0;
) Y9 M, g4 E9 F6 ]) A1 w" w; e - dma_addr_t dmaphysdest1 = 0;1 D6 U& q* O" W9 m( R/ v
- dma_addr_t dmaphysdest2 = 0;
# ?, W% _; L/ D* l; o
& y; q0 i2 _& f7 R* Z+ o- char *dmabufsrc1 = NULL;
; Y" B H6 P; \, e; V' M - char *dmabufsrc2 = NULL;
; |4 M; ]( T. [3 j& p - char *dmabufdest1 = NULL;
5 ?7 o2 c2 w) C" [. w - char *dmabufdest2 = NULL;$ \5 L* ?! P5 p5 a' C( Y1 {! m
- % X# ~- Y; k2 i
- static int acnt = 512;
$ O' |1 ?( d# m: l$ I - static int bcnt = 8;( L; N$ a! W& F. j2 [2 H2 l% G1 t
- static int ccnt = 8;' J; m2 w5 O. @# i u8 r5 f
- 1 `' h; @& D `" G) h% D8 c2 I
- module_param(acnt, int, S_IRUGO); }. d% B; z' C' Q& X1 \
- module_param(bcnt, int, S_IRUGO);1 y7 a1 i* c) k; d. O! G% R! d
- module_param(ccnt, int, S_IRUGO);
复制代码
( i( u) D, j. Q2 q* X& u% j, Z3 W+ Y7 u7 e% ^' s7 W
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" ]) q/ a3 G0 k: w7 barm-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 `3 S. J7 G4 f6 W, S, ]
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
; n" F. f+ y0 N$ f
1 v( P/ Q$ n' G$ u, e; V3 G
1 U0 O$ o: c; C$ F: F4 U7 A |
|