|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; A. N% @. S, T2 c9 b- [code]EDMA sample test application
( g" a# b& N% R; h - /*
4 n- X$ o! {' j }+ K7 h$ u1 v4 w - * edma_test.c* i; x9 ~0 ^1 s# H: S' M, ?
- * h/ X4 w5 S; h( G9 C. q
- * brief EDMA3 Test Application
+ w' u/ Q6 u, x8 K& [/ H: s - *
% c' |, S) k' P9 Z# { Y - * This file contains EDMA3 Test code.. d5 z) c3 }! S% V* j4 v: ]. o" A
- *
. M3 ?9 N( n4 u3 q6 s2 K - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
! Y7 l) w5 j- ^' h9 D3 b% w - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
8 L0 i- r' h- q) N - * TO CHANGE.0 D1 f# W3 a& r( Y" j: I/ G# @
- *9 r m4 w8 [( j T
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
8 W. j, h% Z% \) l) k" y$ n - *
+ O) @4 Q1 H% b* V; ]. ~4 | - * This program is free software; you can redistribute it and/or. q: f8 V! D' D8 R7 N; j9 N8 ?
- * modify it under the terms of the GNU General Public License as
" z2 l2 H% l9 T9 e( n - * published by the Free Software Foundation version 2.
( e& L1 m3 l3 d% J/ X - *
6 W% J8 y$ P c5 a y - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
% N$ e/ o1 P8 M3 q1 ? - * kind, whether express or implied; without even the implied warranty
) A" C; p& n, z# T2 m* D3 [& |5 N - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. o1 G5 b( e' f$ {1 [
- * GNU General Public License for more details.) [2 s6 H4 C8 k t! X5 }4 e
- */
3 z! }- @# g& J' k1 r1 M - 6 ~( h$ j O2 e; P, I
- #include <linux/module.h>
; W- }! P8 `! L - #include <linux/init.h>( X3 z, Y9 ]0 L( e |
- #include <linux/errno.h>
1 C' @0 Q$ ^/ j0 V9 r/ T; {. e. s: N - #include <linux/types.h>$ }( A* r+ k) j) f; _8 j+ C
- #include <linux/interrupt.h>- @: A: M, |" D$ L
- #include <asm/io.h>
. ?4 s" ?" X8 S+ R& t - #include <linux/moduleparam.h>
, }* k F+ N+ | - #include <linux/sysctl.h>
2 ^% i' c7 [( T2 u, k+ y - #include <linux/mm.h>
P0 s( C1 d& H( x( D. V& w- `' U - #include <linux/dma-mapping.h>
7 y0 n2 J5 `# D& J7 k# J- [$ @ - - `& z: c+ m- ~) N
- #include <mach/memory.h>) N8 i4 T- F; q
- #include <mach/hardware.h>
/ x5 u- `1 Y0 x2 T$ a( e. G - #include <mach/irqs.h>
5 h6 Y( A& s; q! I - #include <asm/hardware/edma.h>% H, W; c2 p) K. u9 \+ U
- : ]; e! `% y% r% A. c7 K4 s5 _0 ]. B
- #undef EDMA3_DEBUG+ m: S/ G8 `+ R) s- H, ` h
- /*#define EDMA3_DEBUG*/
$ H* T: s4 S G
9 T' _6 {* s0 a o& T/ d2 V' I- #ifdef EDMA3_DEBUG: M8 Y0 `5 d5 o. X, o% j
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
: @( g9 b" ?7 j' a - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
2 t$ W9 }: g% q - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)! o/ {- Y6 f0 A1 @$ g$ l6 Z7 m8 i
- #else& s! Y8 R$ ?# t& h
- #define DMA_PRINTK( x... )3 M4 E0 K- N8 ^. A3 u5 f
- #define DMA_FN_IN
+ F$ a" A- ?9 {6 p3 k - #define DMA_FN_OUT
: e; x- [! h* y5 A/ y# f - #endif6 F4 r$ t5 F. N( \1 b
- ) o/ {& z3 k3 {0 Q: p/ H1 B: C) y+ j
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
2 |, P9 d: d, e# o - #define STATIC_SHIFT 3
' J5 R$ |. Q4 P& g4 `( F* c% ]" A - #define TCINTEN_SHIFT 20" |) H# Z7 |4 z
- #define ITCINTEN_SHIFT 21
2 }& I H# G; v9 H% A/ ]* C - #define TCCHEN_SHIFT 22
4 ]4 F- u3 B7 R! s - #define ITCCHEN_SHIFT 23
9 Q1 x; B, l% O) s' o' z3 k/ W% w - 2 o2 L/ O- N" d3 D; G
- static volatile int irqraised1 = 0;2 v% ]6 M {1 }# g! {* ]
- static volatile int irqraised2 = 0;
5 A# u J- H# T" L4 l, r2 z
- ~4 n1 M% D( ^( d1 S4 u- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& {/ n3 R& A& }: ~% i( _
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 h0 o5 q) X) g$ @2 X - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- T A# \0 V2 f3 `8 t
- 8 Q7 a& `! F. f0 Y3 {
- dma_addr_t dmaphyssrc1 = 0;
' B( o' R/ P, _+ N1 v - dma_addr_t dmaphyssrc2 = 0;5 b8 R( c8 Y4 v$ n: [; |/ J
- dma_addr_t dmaphysdest1 = 0;
1 p: @ G5 L( t( G8 J& m - dma_addr_t dmaphysdest2 = 0;
! t" u: ]8 d) F: k# f, c7 n, s - 3 P/ r: T( Z9 ~
- char *dmabufsrc1 = NULL;
* }2 [/ } t' [7 i1 @ - char *dmabufsrc2 = NULL;
' ]. v* u1 ? y1 Q, s - char *dmabufdest1 = NULL;7 Y6 l# u4 L9 Q: ]* W
- char *dmabufdest2 = NULL;( z) I8 W1 a. K8 }: V7 |( A0 ]
; {4 [( R% A; r2 ^& o6 g+ k- static int acnt = 512;+ o! x' \+ V# w" F! N& V1 r
- static int bcnt = 8;& ]' }' V5 E( g
- static int ccnt = 8; G+ p9 x. k0 F0 n& ?* n9 C _3 k5 G
- $ k" f, K# G7 X% U
- module_param(acnt, int, S_IRUGO);; n3 v% S' s. i) }% U3 P8 F c
- module_param(bcnt, int, S_IRUGO);
9 ~" Y& b+ o3 Z1 a6 D6 x - module_param(ccnt, int, S_IRUGO);
复制代码
$ i0 a) v! A/ |6 C4 P% l
( ^8 w7 K) p1 R 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
4 U9 c& m5 \4 F$ A( I6 h2 n8 Q6 b& aarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
! g& P' r9 H0 [1 u/ Z 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。% y9 k# T5 m; \9 I; ^* r3 c6 G3 H' d1 o
7 Z1 `" n4 \: M O
6 ?8 a% E$ i f$ S0 n |
|