|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ) s- n! @$ `+ E% x/ y a6 h6 t5 n- c" l
- [code]EDMA sample test application
o' s, x7 f( _2 ]5 ` - /*% X$ w$ J; a4 P
- * edma_test.c! n$ [& z* m3 t& @ ], U
- *, p" h A' }) @5 l
- * brief EDMA3 Test Application
- \, ]( u# {0 B& D# S - *
2 Q& A) e! k: e8 }8 C& J$ q2 [6 Q - * This file contains EDMA3 Test code.
* \9 V1 V% {$ z4 p - *" W9 ^- i1 \+ [5 W' y; Z6 ~
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
! h# |. ~' b, C7 W! ` - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT6 [& l) f6 n, }
- * TO CHANGE./ y% k+ T6 Y" p; v6 R
- *7 P$ X6 [9 \/ |* H) r4 I/ D
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
/ r. h( n0 m' | - *
. J4 `; A5 @4 \ - * This program is free software; you can redistribute it and/or+ z5 ~+ ], j- ] E
- * modify it under the terms of the GNU General Public License as; u4 C) e$ m C+ R, _7 P+ Z
- * published by the Free Software Foundation version 2.' {5 g3 z& C( l' s& b
- *
! v1 k1 J/ k9 a! m' P, ~ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any3 ]) K/ q; S X& I
- * kind, whether express or implied; without even the implied warranty/ L" C% d3 u2 |& i
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# x6 p. }) h$ M5 d6 ]( `
- * GNU General Public License for more details.; O U. C6 m& ^1 p2 g4 y0 g: t; }
- */' V: @- l1 `! k0 i3 q; Q, C1 L
: d- A0 k; {6 O$ x# Q- #include <linux/module.h>& H0 l6 J0 O/ ^9 u) r
- #include <linux/init.h>0 d) d7 d9 C; F3 G' ^8 E
- #include <linux/errno.h>
, h1 R+ V' Y5 C9 M: f - #include <linux/types.h>
" {* M0 ?2 ]0 {+ F/ b - #include <linux/interrupt.h>
7 J A8 N# Z* Z' U - #include <asm/io.h>! K3 X3 l: A6 L: N$ Y& t4 c
- #include <linux/moduleparam.h>
; Y( d; ?$ Z7 m - #include <linux/sysctl.h>5 D( T N7 f; C( ~
- #include <linux/mm.h>; p; V' g* R: H& \) a0 K1 B2 w- O) u
- #include <linux/dma-mapping.h>
: K# n$ i/ [5 |1 c; z- B
. ?; [$ i* L8 U: Q- #include <mach/memory.h>( X& |2 e4 E0 C" M0 D' W
- #include <mach/hardware.h>
+ {' u8 ^( \- ]5 Z: N" P& b& N" }9 x0 Q - #include <mach/irqs.h>
" |& A$ f6 Y1 H# P - #include <asm/hardware/edma.h>
6 W5 J0 ]" u3 S" r7 q1 b - * E. R' w; G. @/ J
- #undef EDMA3_DEBUG
( L7 Z- a- |$ b6 A7 E! \0 B. D - /*#define EDMA3_DEBUG*/
( |4 S) F5 R' j3 Y - 2 L+ k1 M3 C: z6 g/ Z1 m
- #ifdef EDMA3_DEBUG/ ?! ~! H4 D: }4 ?- D, {1 C
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
! C# {- ^; a2 M - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
9 P% Q; m/ h9 I7 f - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
, V+ C' H2 R9 p& o& E8 |1 l- B - #else
1 r/ X* ^- j8 L- g" b* o% i- v - #define DMA_PRINTK( x... )
' U$ D$ q; m! B, @! U6 H - #define DMA_FN_IN# i% @+ a* Y4 W# X: i+ ^( t
- #define DMA_FN_OUT
' g* N0 S8 U2 \* v3 j# {% N - #endif
9 b' C% `4 ?7 X4 P: v8 E2 Y - & b3 G7 C# y2 o' q3 x& X: M: {: ^+ L( k
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)6 q9 \+ u- c6 E+ y5 j
- #define STATIC_SHIFT 3
+ H) A$ d+ A' W: E7 \7 r; _% o - #define TCINTEN_SHIFT 20
X0 Z3 O! E6 a8 {4 i- Q" a - #define ITCINTEN_SHIFT 21
+ E: n; s! u' Q+ Y) ~. H - #define TCCHEN_SHIFT 222 l3 A, Q- m' q3 ^1 G
- #define ITCCHEN_SHIFT 23" u x" H5 l, B. I) \
- + U: m( K( C( P* v f1 B, q2 ]
- static volatile int irqraised1 = 0;1 S8 W1 |* z9 ~, F
- static volatile int irqraised2 = 0;
|9 U6 a: Q# e# |: E4 @+ d - : G9 I/ [3 L5 E: k5 u9 h1 O1 N
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, T/ z _" i" F3 S
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* V2 _3 f% \5 B8 D, K
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% U, O% a2 k: J: X1 I
" K- T2 \4 d$ M' X" p8 W8 _( o, O+ e- dma_addr_t dmaphyssrc1 = 0;! q2 L0 z) j3 \7 l- R9 `
- dma_addr_t dmaphyssrc2 = 0;
4 f2 {: i0 J1 t - dma_addr_t dmaphysdest1 = 0;
6 F1 x4 S3 Z' D y1 n% P7 O - dma_addr_t dmaphysdest2 = 0;8 H% ~9 o/ S# N3 u4 R( s
0 X! a, G1 ~1 i h: [. @* k5 t- char *dmabufsrc1 = NULL;0 ]1 ^7 d3 u0 E/ O6 m$ l
- char *dmabufsrc2 = NULL;
' |+ y5 Z- d* W# z - char *dmabufdest1 = NULL;9 T% s E: z. F, N5 r- J! O; @; I
- char *dmabufdest2 = NULL;2 A, g: g) _& K
- + \$ G9 n- l4 d+ z Y1 s) K
- static int acnt = 512;
' W# q+ S$ [! ?+ j" q7 _ - static int bcnt = 8;6 O( b7 }) [& x* t
- static int ccnt = 8;
+ G/ D4 F2 I* J, Y) Y. q
) H( t$ p) `: v- module_param(acnt, int, S_IRUGO);
( T/ [' B( \2 U) H' d/ r4 p# G - module_param(bcnt, int, S_IRUGO);
8 i( y% s& \7 Q9 M2 A' W - module_param(ccnt, int, S_IRUGO);
复制代码
" F8 `( `4 T& y5 ?$ b7 M7 d
# _; C( _( q3 J3 r/ G$ ~+ t9 ` 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
6 h# S+ R) l2 N4 P, g0 garm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。! D7 f1 W7 Z7 J; G
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
$ v* G6 L, j8 m. ~) G
/ z4 E9 E. \; G' s5 I2 n! M- S& e- S
|
|