|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 # {8 e g1 J5 @% ^$ `+ ]
- [code]EDMA sample test application5 g0 d4 P$ W7 n- A5 O9 [
- /*) Y2 Y- h$ g: D; c
- * edma_test.c
1 E- j' U9 A) X# f - *
% z- f9 l: t' [* I - * brief EDMA3 Test Application
" o6 w; H- c# J* H+ t, [9 L0 e1 ? - *
1 K6 W% u/ w6 `% @! Z: X& L - * This file contains EDMA3 Test code.) \# i7 H* n( X [
- ** b$ N! c5 K! H1 d7 F) M
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
3 k) a0 @) d$ ^9 o& h - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT1 X8 b7 M6 F! w
- * TO CHANGE.
. a( w2 O) x6 l, N - *
; @& c: l! C; |" m. ]" H+ k - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 ~! G' @' m) C9 _" X. }3 U# a
- *% ^4 p. b, B# d: n" m4 N3 u: G" q- K% Q+ e
- * This program is free software; you can redistribute it and/or, O! k2 O% R) i
- * modify it under the terms of the GNU General Public License as
; A" c# i' n5 h. m9 J. ? - * published by the Free Software Foundation version 2.+ c+ F- U; F/ v0 K" i5 u
- *: O0 i3 W9 U, U+ }
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any" P: G) x% _- \3 f' P2 b) |* f
- * kind, whether express or implied; without even the implied warranty
( w" i+ P# P! ^ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 r5 f+ H' V1 D* v8 x# @4 c* X - * GNU General Public License for more details.
8 r5 u' U: Y" \. `7 F C& B - */
+ @) h7 C6 }8 s! U/ m8 O - & O( y' ^, b' @7 ^3 u9 v
- #include <linux/module.h>
- @ F! o2 H# D; D. C: J, c- H" y - #include <linux/init.h>
7 y/ {! l0 P) T! Q - #include <linux/errno.h>
% T- h! e6 `6 z% s7 R' l# Q/ G - #include <linux/types.h>% B0 _! @- H4 K
- #include <linux/interrupt.h>
# ~" r$ S! w% J7 J- U - #include <asm/io.h>) l% U& i4 L1 U" m
- #include <linux/moduleparam.h>
" b. G0 `& u, [" M, k2 b4 M - #include <linux/sysctl.h># j9 k9 h& c" O# }
- #include <linux/mm.h>
9 Y z- G4 ~+ z8 {& R1 b - #include <linux/dma-mapping.h>
' V5 y' \7 _" S) J6 ~ - $ ]! @4 S' u \9 Z3 J( m
- #include <mach/memory.h>& Y9 c" O9 g+ f; B: G+ k/ w
- #include <mach/hardware.h>6 c5 _3 `# o/ l, Y
- #include <mach/irqs.h>
% r8 }. P N5 ] - #include <asm/hardware/edma.h>3 @* _! p3 e6 l& S
% s x4 N- I8 ?( j) ]* P1 x- #undef EDMA3_DEBUG; ?4 y/ M9 T# w
- /*#define EDMA3_DEBUG*/9 K6 D; U; L7 y' J8 y" \1 U
" a0 Y0 N0 h) v- #ifdef EDMA3_DEBUG
2 i: N: X/ \2 M. Q B4 e7 ^ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)* ]) V; u) a, c' y# ~; O
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)9 |. D9 [! q. R. j: }; F: `
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)/ `7 Z* p I+ B! r3 A$ O
- #else; W. X2 N2 a- k! m9 \
- #define DMA_PRINTK( x... )8 U4 |& f; M J
- #define DMA_FN_IN* I; o) f# i4 j
- #define DMA_FN_OUT
0 r3 E( u3 a7 a - #endif" w5 N8 o' F8 Y
- ( Y4 m* O# _% v+ z; {
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
# U& j8 e) u5 B2 k9 |1 ~ - #define STATIC_SHIFT 3" P( `* G: u" X. P$ y E- t' ^
- #define TCINTEN_SHIFT 20" h0 B* R9 s6 K) o8 B+ U0 D; j& h
- #define ITCINTEN_SHIFT 212 f; v! X1 S3 R' c( l6 b- \7 U
- #define TCCHEN_SHIFT 229 u& G7 |$ s; X5 P1 `
- #define ITCCHEN_SHIFT 23
1 R1 H& P) t% B - . S6 ~+ e& P4 B" [3 p c: A
- static volatile int irqraised1 = 0;. }: Z3 t, Q8 p1 d5 ]$ ^4 V5 P
- static volatile int irqraised2 = 0;
2 h, a0 d# @2 T$ t - ! e% B Q; g' ?
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 R) B o% p# `0 G# y' ^ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) T# G! z1 G& W; E q$ {+ R/ ~# X
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) O$ d* P$ P6 E" k2 r
" M/ B3 P4 c: D" d K* h l2 \- dma_addr_t dmaphyssrc1 = 0;; n. X% ^, I2 B3 p7 s
- dma_addr_t dmaphyssrc2 = 0;1 Y7 H5 V, ], Z5 v% |- r
- dma_addr_t dmaphysdest1 = 0;& n9 K2 q/ N/ G. _; C- A
- dma_addr_t dmaphysdest2 = 0;% V# L3 ~8 [! g2 f+ Y
- : P% m, _! B7 \. Y
- char *dmabufsrc1 = NULL;4 Q o. \6 r" ]3 q2 u+ J
- char *dmabufsrc2 = NULL;2 D7 k- G8 j3 P( P# ?7 L
- char *dmabufdest1 = NULL;1 S3 R2 Z' R! G8 p _8 z2 @
- char *dmabufdest2 = NULL;, R" g1 B0 e) ]) w; ?" @3 @
- 5 G) I$ D' u: u
- static int acnt = 512;
. d2 X. _! ?- T9 c0 M7 V$ B - static int bcnt = 8;, e4 y& M7 ?: i0 A( a3 m& R: F
- static int ccnt = 8;
: Z* P0 x9 C9 m" `" j0 R4 S; \
1 l* z m8 X4 N; L f+ c- module_param(acnt, int, S_IRUGO);% K6 a5 j+ T6 B. S; \
- module_param(bcnt, int, S_IRUGO);! X2 ~7 Q/ r' H6 R, S& `2 `, P$ c
- module_param(ccnt, int, S_IRUGO);
复制代码
3 z1 h$ G- m. N& E8 t
# D9 j# A) s' P, \9 L1 ]% K4 r1 B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: x! ?4 n0 [: X) S* ] C
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。 @5 _9 u. \# a5 p( \) }
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
3 T C6 }2 v. d* U$ a& F V8 b7 _
) ^- E2 N( e4 K) r! `9 E/ e- Q; Z6 j' \% Y4 A; ^$ R$ R; p
|
|