|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 ^7 p# G3 q1 f7 q+ c& y- [code]EDMA sample test application
. x& e! G x) h' f* e# `! h& T# R - /*
7 ]1 ]& V/ N2 W, q - * edma_test.c
) x7 ` e/ Z1 h+ n8 l( O: p# K - *3 h% i$ h! H. _' H' u. B, O
- * brief EDMA3 Test Application$ N2 I/ _, y$ z
- *7 p5 s0 a3 C" D5 O, @& M( J
- * This file contains EDMA3 Test code.
* a2 k7 s o7 W: b - *
: n4 _9 G+ A9 r; n. N: `6 ] - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
6 t, j$ n9 k' m3 C; o" M4 Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% Q3 C7 N+ H/ p9 G2 A. x
- * TO CHANGE.
. s' [+ [ N( }' [: g+ v; y; W+ @; S - *2 h) \ O1 n) A3 N% @
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 a1 l4 E- E0 `& z: c - *3 D& J, V# O! {/ o+ G; k# H
- * This program is free software; you can redistribute it and/or
" O o3 E' f8 A! e( u - * modify it under the terms of the GNU General Public License as
' e- p: M! G! C( p5 u2 z' Y; ] - * published by the Free Software Foundation version 2.
0 K, s( m9 r2 K6 E, a - *
9 s: s3 I/ R; G9 @; j, J$ e( @" O - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ L* \& i" u, Y5 p4 e Q% Q - * kind, whether express or implied; without even the implied warranty
~, M/ Q8 E) l& G8 W) T8 k6 t - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ D1 |4 H2 k- l9 s- M
- * GNU General Public License for more details.0 P% X8 O' k+ p! T1 M; Q4 F
- */
) P6 Q* d4 x# Q
' \1 L+ T: ]4 q* t- #include <linux/module.h>) `* z$ f6 z* D% g- P4 P. f" W
- #include <linux/init.h>
0 I: Z6 ?$ R7 E- @( S, u# q - #include <linux/errno.h>
0 |- M: m% h6 A" M+ g+ _$ n - #include <linux/types.h>
4 m: M) E, _& N! F7 I0 t8 P. { - #include <linux/interrupt.h>
" `& R, w& v. y+ L! g1 D9 ?3 K - #include <asm/io.h>
, N# \+ K& h$ N# a' X/ a - #include <linux/moduleparam.h>- n8 ?. }, P9 d7 ~; h
- #include <linux/sysctl.h>! e6 S- ^8 c" l
- #include <linux/mm.h>1 ^, M0 D4 t2 E% g5 m& l! i/ R
- #include <linux/dma-mapping.h>
9 C7 ^$ [# s3 g6 B! o$ U6 ^ - 3 S* v$ t1 ^) k, D
- #include <mach/memory.h>
: ]' O; N! Q$ G - #include <mach/hardware.h>
) S0 i# _ J4 @, c6 ?& X F - #include <mach/irqs.h>+ c, w4 J- i* ^; N
- #include <asm/hardware/edma.h>( t4 Z7 z2 s3 z& I5 h T
3 R3 Q: H0 j g' Z- #undef EDMA3_DEBUG
( N1 B; n% }% v' M# f - /*#define EDMA3_DEBUG*/* x8 ~5 N* k. }+ J8 a' E
* i4 B( R# U# w1 @& U( z- #ifdef EDMA3_DEBUG
: _8 w- b9 K8 q" e6 ~8 [7 h - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ }% e% z5 U3 @$ N
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)" m7 I5 m8 y3 c( C# J R. V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
1 F- I+ K K# w+ y8 P - #else2 s6 j" W% _5 ?
- #define DMA_PRINTK( x... )/ D; B, G: _( D" k
- #define DMA_FN_IN
" E& o- Y5 C( I - #define DMA_FN_OUT
- t% X. F) D; d0 s( Y - #endif
: i$ n! b# u' |9 p- t" h9 Y' d
+ l8 w9 `. `9 B- ]- #define MAX_DMA_TRANSFER_IN_BYTES (32768); D5 y% }8 {1 I" F: k! S- V
- #define STATIC_SHIFT 3- B" _4 ]" V w% C6 T
- #define TCINTEN_SHIFT 202 Q# A* |0 l8 ]/ D+ G1 j
- #define ITCINTEN_SHIFT 21. R* V, Z: F& A
- #define TCCHEN_SHIFT 228 z. m. ]# t1 }1 `/ m4 k
- #define ITCCHEN_SHIFT 23" f. g! r$ [* V; w, J5 b
- 8 M! w* s' J% a0 I% h: n
- static volatile int irqraised1 = 0;
1 W# P; r2 q) P: G: }; Z3 y - static volatile int irqraised2 = 0;% L" {; C2 o3 W
- I2 p1 X. X! ]' L; T5 |- ^! V- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 m/ K; ^; E- n) W# N; h - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" C3 N2 {' c8 M' z0 z" j) ^$ l - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 u& ~6 J! W2 J! ?7 l
1 r4 [) i& ]2 {$ s* H( O4 g- dma_addr_t dmaphyssrc1 = 0;) q' J" ~; o, l
- dma_addr_t dmaphyssrc2 = 0;
% I! V' F0 u# z+ P. ~5 y# i - dma_addr_t dmaphysdest1 = 0;# S0 h! o4 `# u2 ~; ^
- dma_addr_t dmaphysdest2 = 0;
8 A" v) |* h' \! }2 P# t# b- Y6 j
& h" f ]- d/ |7 ]! U$ w- char *dmabufsrc1 = NULL;
' s6 |6 B% \" K - char *dmabufsrc2 = NULL;) [9 m* o3 V" G$ }' r% E, u$ S
- char *dmabufdest1 = NULL;3 B6 h J; a. n% {. I6 a
- char *dmabufdest2 = NULL;7 A3 \) |# v" l" k& ^( p+ G, ]3 \
- 3 \2 ]5 I/ J3 x& U
- static int acnt = 512;
! M8 p% c! g/ }' ] - static int bcnt = 8;
4 B: @4 U/ X5 w; V - static int ccnt = 8;9 B! ^% G1 F' S0 Y( q
) v5 x, `/ F" k4 Y$ j) F- module_param(acnt, int, S_IRUGO);
) e; J7 k9 T; S" o% g% |6 X - module_param(bcnt, int, S_IRUGO);
, N# X: r/ ]1 ~! F1 ` - module_param(ccnt, int, S_IRUGO);
复制代码 0 o/ ]% w( i" R/ J+ o
% U5 h% S: p3 y. s4 }' _! P' {% R
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用, G z3 f4 k/ T' t8 c5 m( b
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。3 C3 y. T8 `/ h2 H
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。% g: P' [8 g9 p8 z+ B
" S' }4 W# I* Q) [- h; T- _3 z+ x& j
|
|