|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 7 m ~3 ^: P$ q
- [code]EDMA sample test application
* b! j; D }) v" Z5 o! r9 O - /*2 q9 R# c. N* S3 B) ?; J4 w# |
- * edma_test.c2 i" `9 U! V5 C3 U; I5 M
- *
5 i6 O( [5 y! p `" X - * brief EDMA3 Test Application
. @) o! v" O% _2 `: C9 o2 _ - *. `3 X; N1 }# J+ d
- * This file contains EDMA3 Test code.
. l, w5 [- u. R# y4 D/ r! A - *
4 F- W' Q$ K. u: q - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE2 i$ S& @. x8 {' ~ a
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# C! N: n9 b+ ~: V( k - * TO CHANGE.% _; [# C5 P# o: m
- *
0 ]5 v/ S0 F4 H0 t9 g3 z# N& X - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
* S( _% w8 S* ^. a - *
8 k8 S# t5 G- j* p5 k. g4 m6 ] - * This program is free software; you can redistribute it and/or! X2 w' O8 o: R9 z. @+ l% B' ?
- * modify it under the terms of the GNU General Public License as0 m# ]+ `8 s( f( E9 m& ^
- * published by the Free Software Foundation version 2.$ @& O0 a/ t9 Y; l! K
- *, z& s, C4 U7 `- U2 e
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 E& R p8 c# c6 i3 P. j" m# b - * kind, whether express or implied; without even the implied warranty& V" K o. p; S$ C
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* e9 y- r$ J9 e% U) ?8 Z - * GNU General Public License for more details." }/ Y; P3 C% c7 x; B. Z
- */' O4 D2 `$ u3 t) ]* w4 `4 P
- " a3 Z' V' A9 _$ }
- #include <linux/module.h>
: r' m/ I$ [" d/ A4 |! A - #include <linux/init.h>
) ?9 e' {+ K: p \8 v - #include <linux/errno.h>
( M1 E! }9 |! C( A7 |3 f6 S - #include <linux/types.h>
. z3 D2 j. |' _8 m2 b8 F6 r7 C - #include <linux/interrupt.h>$ ^ p6 \8 V t( P c
- #include <asm/io.h># B7 p3 h% R: Q: X
- #include <linux/moduleparam.h>3 s, s6 N/ X6 {) t1 A u! ]
- #include <linux/sysctl.h>
* G; H# f9 `3 V7 ?, r - #include <linux/mm.h>6 ?9 r* G3 g, W" l
- #include <linux/dma-mapping.h>
5 o z, e1 u' }( f/ f" _2 g - ! t0 T0 A3 ~; q: ^! `! t6 R
- #include <mach/memory.h>. J* P; E" b2 o7 m$ j) [
- #include <mach/hardware.h>3 ^. o1 r, j" m* S1 @' ]
- #include <mach/irqs.h>
. C5 I4 t5 j; K9 ^ - #include <asm/hardware/edma.h># @8 Z& }) [( t' ] F2 q
- * v. p I+ T( Y. Z" A+ l3 M: A
- #undef EDMA3_DEBUG) f, ~( H" u( v: P* K; `' w. Q
- /*#define EDMA3_DEBUG*/
# |( \7 w3 H1 L - L' p8 j3 Q4 Q6 ~6 D
- #ifdef EDMA3_DEBUG+ ^, E- o+ _- @/ T6 R
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 t2 H) U4 V6 ]' h5 t9 {5 }! G
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
/ {5 @: d% T( k; u - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)' u$ v+ r. ~9 n3 C$ p$ G1 C7 L* K
- #else
! V( h1 F6 M5 J& n9 S3 E. b - #define DMA_PRINTK( x... )9 J6 o; ~4 v& e, ]* M" z! P
- #define DMA_FN_IN
; B) P8 a) T; i - #define DMA_FN_OUT0 T* l# @% \5 j6 G0 _0 R1 i
- #endif
' e$ X; c6 k: B3 m% m0 v' \ - / d" W, P; n( \. j
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
4 i$ D& @" |0 H+ c2 N - #define STATIC_SHIFT 3
* h' o9 B+ n: s# M1 o - #define TCINTEN_SHIFT 20, \% `% O; c4 T, p8 H
- #define ITCINTEN_SHIFT 21- N( @" x- _3 X J
- #define TCCHEN_SHIFT 22
3 ]. l( j& q; o: i; I) M - #define ITCCHEN_SHIFT 237 J9 G9 R5 L& E
t. d; }! |& X H/ Q- static volatile int irqraised1 = 0;
& F* r) U: J& c9 O# z9 n - static volatile int irqraised2 = 0;" A5 J' _' d9 ?7 R/ n
8 h/ h( s# e' k# }+ v' W* J( R- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. Y" P$ y7 i1 G. E2 l5 n' I - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: f+ T; X( m `) E5 d4 w. ? - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ A% k5 ~) {. B' {% K( ^ - 9 Q+ ]$ u Q f0 Z; [2 o8 x0 P
- dma_addr_t dmaphyssrc1 = 0;
6 e5 j- U4 h+ s5 z) \ - dma_addr_t dmaphyssrc2 = 0;
& S9 X2 N0 Q- X5 `1 h) b$ R2 B - dma_addr_t dmaphysdest1 = 0;6 |/ N7 U% ?0 J) P
- dma_addr_t dmaphysdest2 = 0;
5 G# ]% r8 p; C# U
. S# |! P1 k' W9 p5 b- [- char *dmabufsrc1 = NULL;( X$ O7 Y- ?3 t1 y
- char *dmabufsrc2 = NULL;
% _( G, o& s9 _( H& F - char *dmabufdest1 = NULL;
* e# _' M. {9 U9 A, s! Y - char *dmabufdest2 = NULL;
- o+ f' t* F. w
( U( {' N( g, Y. C! i0 Y- static int acnt = 512; y4 o& p" H, f
- static int bcnt = 8;
" }, q! q d5 N' f - static int ccnt = 8;
- t' k+ G, i# g7 W( b! T
: Z- ~& x6 H H5 h- m" [, x9 \" F- module_param(acnt, int, S_IRUGO);% [( \1 s! m' m3 [0 A' c; A: u
- module_param(bcnt, int, S_IRUGO);3 J' A( m: t1 E( g) V
- module_param(ccnt, int, S_IRUGO);
复制代码 / O& v3 q" X- n$ E
( a* r$ A8 w w" g# Q7 u7 g2 J- S4 z 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 V! h& m! Q1 i" Q& X7 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. k1 F8 B0 K$ h- v# b) p
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 u" Y! t% H: B/ V7 W
7 g% \5 |& S; L" D7 K7 ?7 U) O
; _8 h2 N; L0 n |
|