|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 * g2 e) B* \- ]6 m/ ]
- [code]EDMA sample test application
- b2 _7 F5 d) o( y - /*. i$ d* b$ L) x9 e$ a* X% h* a5 y
- * edma_test.c
% P7 F! K$ t' r$ @7 Q - *
" Y' B5 |* j! K0 V5 n - * brief EDMA3 Test Application# Y, V" h+ s* i
- *4 E2 ^ }0 |9 X# s: l& q( Z
- * This file contains EDMA3 Test code.! p- g: M8 M; T1 H
- *0 c& o9 \" ?! f
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% L* Y1 {+ b; E! R5 e
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: E: u9 e9 C# Q; K5 q! A - * TO CHANGE.
8 h5 B- O; S0 W4 P. V - *& f' t. m9 `" L6 x; E
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
% n# q; @! d% h3 t3 h$ p7 C* W! k$ d - *. ~ h4 z+ z+ |/ Z. o
- * This program is free software; you can redistribute it and/or
$ ?/ H+ i7 C, {- [& ~: Q - * modify it under the terms of the GNU General Public License as- J& i# w8 U1 H4 |
- * published by the Free Software Foundation version 2.. s$ H6 o9 c1 B1 t5 e y
- *5 k1 {* t, J; D- }- p C
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
8 j$ C+ }4 Y* Y% n7 @8 ~ - * kind, whether express or implied; without even the implied warranty& z1 C# }. E$ B; B$ [8 P3 B h
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 T8 I1 t v) X/ J
- * GNU General Public License for more details.7 z; ?7 E/ \$ e
- */$ @6 |4 b4 `4 f2 b# b
- ( e( T8 z. r% |) x
- #include <linux/module.h>3 V. k2 I4 _' C. X2 j8 _: t
- #include <linux/init.h>
' d! W0 P% a1 n# n: \ - #include <linux/errno.h>7 s; [$ [+ Z# i/ L
- #include <linux/types.h>
$ H) Y# G5 j( K9 R! ?/ o( Y - #include <linux/interrupt.h>( O( q* R: M& o
- #include <asm/io.h>- ]* R) f: S+ b6 N2 Q* A+ r
- #include <linux/moduleparam.h>
: c; d8 I7 i0 ^4 C, u ^$ n& Q - #include <linux/sysctl.h>
& p3 j0 Q* e& H: Z - #include <linux/mm.h>
+ M- a) l0 j* ^. G - #include <linux/dma-mapping.h>1 X- P. b% f6 b/ T# ?1 [! h. I
0 j Z* O4 n/ {* e. G- #include <mach/memory.h>% ]7 \' k+ O( _% q2 _$ }6 d
- #include <mach/hardware.h>* p0 q( Y; [* h% T4 l- m; r9 k
- #include <mach/irqs.h>& r+ G4 v' g! ?! b7 v9 M
- #include <asm/hardware/edma.h>
2 U" [" U# \% ?# U* r+ K - D% e6 q4 R" g# x% W: n3 t" Z0 f
- #undef EDMA3_DEBUG# H. g( k8 ~9 G3 y7 f
- /*#define EDMA3_DEBUG*/
7 T0 z* J# ^* D& k0 p9 [, H - ; x& c; s5 Y) r
- #ifdef EDMA3_DEBUG/ ]: p# P P$ C# F
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
. N' Q3 u Z5 C! q. C8 Q3 J8 _ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; S- R2 s$ Y, Y - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" g8 G( S n& h/ ?: [
- #else
{( u1 Z, V5 @, e* L - #define DMA_PRINTK( x... )
5 C- o# c8 k* z* @0 d8 i - #define DMA_FN_IN
; U% S# i5 t5 b l( t" K" ^4 ^ - #define DMA_FN_OUT
5 ]' j# b0 f4 ^ - #endif
3 ?' t) T6 I4 t7 w* K
) d8 I' {( d9 K7 U2 c) D; K; R* Q- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" F1 z+ a& U7 b2 D8 \6 B/ v - #define STATIC_SHIFT 3
U7 ^# {! ^0 o. Q* b# g0 } - #define TCINTEN_SHIFT 20+ \+ H( v/ _9 G% g% \. i; I; X0 Y
- #define ITCINTEN_SHIFT 21
2 l0 R% X* m( ] - #define TCCHEN_SHIFT 22
# k1 A, v4 a. g# U: V. i% T# h* u - #define ITCCHEN_SHIFT 23* r7 Y+ I: ]: j! p
- ! t5 P. d! E( \; @8 ~
- static volatile int irqraised1 = 0;
1 P7 J. ]" ^9 @; [" Y) h% @ - static volatile int irqraised2 = 0;
; s' Y [% P5 z. q. e' p+ K
, D- Q1 X3 D8 d! t- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 q' S I9 R$ j. v4 X
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: D- k4 S& O" x7 U) K0 a5 G - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( w9 ~$ l8 g' x% h" ]$ {+ Z; S2 Y
- / P3 g) q- L: k a' l4 O! @" y- Q
- dma_addr_t dmaphyssrc1 = 0;
' {. }$ G+ i$ C - dma_addr_t dmaphyssrc2 = 0;* w5 ?6 H" n5 X* W/ F6 I! |( N: a
- dma_addr_t dmaphysdest1 = 0;8 s* K& E& J3 `- N5 W
- dma_addr_t dmaphysdest2 = 0;
: k* o* q# w6 G* P
' |" A# q9 a9 z- }3 N- char *dmabufsrc1 = NULL;
& B0 e, u0 z# Z8 `+ ]0 ?, u - char *dmabufsrc2 = NULL;
4 u0 }* Y3 \5 S3 s3 i( `% d - char *dmabufdest1 = NULL;. k2 P. \; F$ g
- char *dmabufdest2 = NULL;
0 g# q/ _8 {9 n$ x" V' a - : d" z: Q' h' w2 N7 c. w. f! m% z G
- static int acnt = 512;: k+ [% L5 O: `0 i
- static int bcnt = 8;
. X! M) o1 i9 k* K3 T6 y' h - static int ccnt = 8;
% S6 E8 s% K5 A - q& _, s; \7 w3 @' ^1 g# ]( ^& o! {
- module_param(acnt, int, S_IRUGO);
; \/ v; L, ^$ b Z3 _5 P' H - module_param(bcnt, int, S_IRUGO);
2 L' G# o+ l3 r- Q3 s- `. F" d0 [ - module_param(ccnt, int, S_IRUGO);
复制代码 - {0 }' ^& O6 t) T- ~8 M( A
2 ^, Y" h' R) q6 [ j* ?
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用! D+ D1 W+ ~: c6 s, n% ]' N
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 |4 x' [1 e0 z' S( E 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" Q5 _: W$ ]7 l: O; s( T- g9 ]8 K1 e! N8 m0 Z0 A
" n! J, W! u" [; T |
|