|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 a/ [, [% G* }
- [code]EDMA sample test application3 \6 y$ o- F1 q; _1 Q
- /*
* f+ _. g! J1 E1 ^2 v - * edma_test.c V; J9 a* `! [3 {3 z; N: p1 k
- *
+ c% i1 O) f* \5 U8 z - * brief EDMA3 Test Application
# h7 B! H4 Q; ]/ ]! j - *
1 t# ]' _6 y; h" C% a - * This file contains EDMA3 Test code.
/ a' T7 f/ M/ j% `0 c; Q( [' b - *
$ r3 x2 H A6 g# o" F% ` - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
$ k6 x% q. Q5 @ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
8 Q n* t+ F( m( i T: _2 e - * TO CHANGE.
; J4 v' A5 o0 l) l4 H( ]4 g - *
7 E f, r; m2 M! u3 r e6 g9 g5 z - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
0 p z: y( E7 o6 K: d& A - *
0 m6 f% h4 r- m8 }- n4 q - * This program is free software; you can redistribute it and/or
+ Z3 s) ~: M) h - * modify it under the terms of the GNU General Public License as
" B0 s% x7 H5 g/ p$ c2 i r) R# e - * published by the Free Software Foundation version 2.
U, K' e% D7 k1 J7 R7 w% u4 C - *0 j# Z! H. f5 h4 T \8 {
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
* ^4 z0 }* D3 e) [0 P- t" a - * kind, whether express or implied; without even the implied warranty
# G! {" `; d1 D - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ x( J1 H# g5 L! z6 L
- * GNU General Public License for more details.
$ w# x; S/ M/ J! P& w/ A% F - */
, e" `1 a' H" S& R" O1 ` - / f; D6 Y6 E# ?* x$ O: |
- #include <linux/module.h>
! `7 B8 Q, ~, a3 W6 ^2 K* C - #include <linux/init.h>
/ C: }7 {1 L8 |+ d5 W. X - #include <linux/errno.h>5 O3 O9 b+ A) O1 L1 _
- #include <linux/types.h>
* ~# c \+ J& f$ R - #include <linux/interrupt.h>
$ O: B- K, |& R" ~* O) `% I, }. v - #include <asm/io.h>7 k% v9 z& E# b/ W" P" j. _6 M9 f* N
- #include <linux/moduleparam.h>
3 R* B# h6 i+ r- Z6 ^; y+ ? - #include <linux/sysctl.h>
0 Q1 m- \# ~4 R - #include <linux/mm.h> j |0 r; `( ^/ Q& d$ r
- #include <linux/dma-mapping.h>
) {% |4 L) q! o& c1 S! f( |( L - , w# ?$ q4 [$ f5 v
- #include <mach/memory.h>! s% [8 ^6 d9 y3 s( p9 B8 ~
- #include <mach/hardware.h>
' I9 F- g0 R9 i% g - #include <mach/irqs.h>
6 t& R% I& V' D( p5 h - #include <asm/hardware/edma.h>
- ?4 n1 g' A+ u: k! ]( Q# c - + I. W2 X9 t& s" m/ b7 O
- #undef EDMA3_DEBUG
9 Q: w/ d2 m1 A( V- n - /*#define EDMA3_DEBUG*/0 m. }- q& |0 [" @* l
0 U4 I0 H l. W. l4 N2 W/ [+ U8 }- #ifdef EDMA3_DEBUG
/ W: ^# H* L; S/ ] - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* U! f# e4 ]& S% T8 N - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 C% f. P2 o7 r' M( N4 B - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! V$ R% ]3 n; ^7 j - #else
* E) L# m4 F4 [0 e( n8 z - #define DMA_PRINTK( x... )+ n8 ?8 S' d$ c/ {* p7 z2 X$ q! P
- #define DMA_FN_IN
1 ~$ v0 Y+ a5 C2 i6 @% I - #define DMA_FN_OUT
& r/ `( u$ p" M* Z$ r- q8 a/ n* | - #endif
; b/ C" \5 `6 S& D b7 E - 1 Z: E) D4 I a& I, @- w7 q2 J; E
- #define MAX_DMA_TRANSFER_IN_BYTES (32768), j0 L+ z! R, q8 T4 s1 B3 z
- #define STATIC_SHIFT 3
* U+ [- o/ N! j: |2 J! i; { - #define TCINTEN_SHIFT 20
& m% V1 u" N, \" _( |6 `9 p - #define ITCINTEN_SHIFT 21
' L+ ?2 P5 m# ]; Z$ i! K$ ]. m - #define TCCHEN_SHIFT 22
+ O |& Z2 u% @ s - #define ITCCHEN_SHIFT 23: a' d& `' S5 J% L/ b, o
7 e# [4 X! G+ ?7 } Y ]- static volatile int irqraised1 = 0;
T3 T' Y0 \: m7 b. P+ ` - static volatile int irqraised2 = 0;4 F8 Z# P* X+ \1 T; I: ]
_6 B3 t1 f: B' N. S! m" y/ w- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& p I" u' k3 ?/ u0 d - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 p7 ?& C+ ]- K - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 g; \' r: s! J
- 8 F1 u6 B& f$ k: @& ~
- dma_addr_t dmaphyssrc1 = 0;
, y6 n+ H8 ^0 y+ S3 I9 M) w - dma_addr_t dmaphyssrc2 = 0;% p& Z- O* f) m
- dma_addr_t dmaphysdest1 = 0;
* C! d9 F: `- Z& O - dma_addr_t dmaphysdest2 = 0;, d0 |2 s4 i$ U% S) K9 w
- K- o6 Z8 I2 f Y" r) G
- char *dmabufsrc1 = NULL;( y5 E& H2 m, G0 v3 C
- char *dmabufsrc2 = NULL;2 N2 S2 C1 D# F5 Q: T
- char *dmabufdest1 = NULL;7 T4 w6 ]& O0 N9 T4 E4 a
- char *dmabufdest2 = NULL;( j8 j6 M+ Q. v3 @" t/ d
5 Z( N# v- K+ Q! T9 w( W- static int acnt = 512;! E* i) p5 {" ^5 x9 a r
- static int bcnt = 8;
- L/ Q+ m1 C7 j0 g - static int ccnt = 8;- R. {1 m8 k% I9 t( i3 S
: V% I' Q* u& Q/ D- module_param(acnt, int, S_IRUGO);
; o `& Q% z. ]+ p0 z: Q" B# f - module_param(bcnt, int, S_IRUGO);
7 W7 k4 h5 [0 O- p* G1 x3 b - module_param(ccnt, int, S_IRUGO);
复制代码
, M+ b8 l6 w0 [" h- ]$ K
+ h$ h$ t7 E1 R; {% Y- n* L( H 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- q1 f) h5 z) |- e+ p% D+ u
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。6 n& G+ s, v: ^# D
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
9 r R8 n9 u$ }6 n& M* {& E# t7 L, ?9 g6 e
8 M i. o0 e" C$ C. t; Z- _
|
|