|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! P/ z ]9 c4 h7 q+ O, N
- [code]EDMA sample test application
" r2 m+ h ?7 s. W9 l' @& b7 A - /*
. y, q$ L$ g4 L2 _ |& M - * edma_test.c- T$ U8 G% b" @! I& Y
- *
1 ?( i S3 e: C1 b - * brief EDMA3 Test Application8 u& |1 r3 U/ }2 M% n
- *( c' }/ _6 n# w ~9 o. n1 J
- * This file contains EDMA3 Test code.
9 a/ u+ p/ A; N5 K - *
: J' _/ h. ^) ^$ }' _ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE9 p. [ ~: M5 h" f, h H# v* A
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT& P. I9 c# l$ r, g: q; o: {* l# k
- * TO CHANGE.( T, @6 L' {$ ]+ q/ i
- *
& A3 I* m8 W% W* K3 }. E! V - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 R& p# v! C8 E) J( u+ Y. V6 j - *
6 N) X% m0 @5 u! i+ R8 y6 y1 G - * This program is free software; you can redistribute it and/or
+ Z& M% B9 O) q# | - * modify it under the terms of the GNU General Public License as
' r7 ]) r2 G, h! F3 e - * published by the Free Software Foundation version 2.
' w9 |& x8 Z( P# r4 h - *( f* r2 i/ h' W- h5 ]! X
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any" K" s Z8 \: A" J: s
- * kind, whether express or implied; without even the implied warranty
! a: O" b {- o" t& M7 R - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" Y& @2 z/ q0 o3 p5 ^( }$ f+ t. k - * GNU General Public License for more details.: j* O* d" A3 B
- */9 M2 x) D; |6 q g I
- ) X8 @4 N% D+ ]! a
- #include <linux/module.h>- U: h+ E0 \8 C: d
- #include <linux/init.h>5 c# Y! p( Y- z3 }. f6 e; Q# P
- #include <linux/errno.h>
5 J }* b; j4 `) _ - #include <linux/types.h>
. b: d2 n2 o1 W: F% Q6 t - #include <linux/interrupt.h>0 x! T# ?6 i+ ~
- #include <asm/io.h>
% N* w& \! ^& |) b - #include <linux/moduleparam.h># Z4 H$ z4 D; b& q' R8 H
- #include <linux/sysctl.h>2 x5 m: ?( I' j& S
- #include <linux/mm.h>6 h" m- o. k3 j2 d; E R, F
- #include <linux/dma-mapping.h>
' v+ _9 z0 ?# ]; E- J2 ^2 L
* a- [% k! i2 U' G& _- #include <mach/memory.h>
% y/ R$ d! M3 G# ~& R- ? - #include <mach/hardware.h>! x, v# k1 r+ E9 p
- #include <mach/irqs.h>
( W a" B9 v. S - #include <asm/hardware/edma.h>
! `7 a4 K4 U6 l/ }: [8 K
# {' @3 s. @. `, [# q- #undef EDMA3_DEBUG0 l, U B3 N4 @, E% n
- /*#define EDMA3_DEBUG*/
* b9 G7 E' m- m: d
; g( ]3 C' Z/ t7 _, X- R8 @- #ifdef EDMA3_DEBUG
0 U0 [( [5 K1 y1 ~# \4 q - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
: E7 J1 d: L5 m3 e! D - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& M2 e8 D( z7 h0 V; _! A
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 k9 K, M1 K5 v" L; e - #else
+ a* S/ f8 K1 R9 q1 H# E( @4 @ t - #define DMA_PRINTK( x... )
$ }& {& H% k; g - #define DMA_FN_IN4 W1 I4 o3 W h
- #define DMA_FN_OUT% o; b! G8 h3 a. i& x$ W
- #endif& l3 W+ u/ r' u+ X
+ J6 t3 t7 q% F1 v- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ A) V# A1 B3 e6 x1 d) Q( s
- #define STATIC_SHIFT 3
$ }6 C6 ^! k, I. O! ]( s: b# q. z. w - #define TCINTEN_SHIFT 20+ d/ C8 s/ s, l0 z) _: n9 |/ @. c
- #define ITCINTEN_SHIFT 21/ r. {+ N& q8 w9 Z$ x; w
- #define TCCHEN_SHIFT 22
0 S W2 o* |& |) B) V4 s& w - #define ITCCHEN_SHIFT 23
" W0 J% H# |+ F2 l
+ T1 u( K! r4 Q! B3 @- static volatile int irqraised1 = 0;
6 T6 ^9 l' q0 A/ B) B- D8 [ - static volatile int irqraised2 = 0;8 d# O" y# l) a
- 5 x1 ]/ ]( ` c8 ~' N
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) M1 V w* o5 T" q- R4 ]1 Q! q3 I0 n& ~
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 l+ Y* ]$ Y* J( U/ c - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# H( h, g7 @: p' L/ N$ m- b: v" j u
2 E( K% @2 |2 U# W% k- dma_addr_t dmaphyssrc1 = 0;
6 W C& `) ?$ `. U$ |; a - dma_addr_t dmaphyssrc2 = 0;
8 J/ d! t) k1 U, p1 N: {' \0 w - dma_addr_t dmaphysdest1 = 0;
7 [* A/ k* z. v2 }* z& b; ` G - dma_addr_t dmaphysdest2 = 0;
- r+ B( x7 J0 j# s" F% A
' O( {- }& t" E3 F- char *dmabufsrc1 = NULL;2 M5 O# M' p. `! F% _7 k, a
- char *dmabufsrc2 = NULL;
4 L* v( d2 l" y6 X5 y4 ?$ L& j( L - char *dmabufdest1 = NULL;: P" u) L2 h, A1 z- g4 z$ e
- char *dmabufdest2 = NULL;% f6 r6 P- ? c
- & b5 U$ E5 ^$ y' V, Q! p Y
- static int acnt = 512;
: z; ~. i6 n2 T - static int bcnt = 8;
' P4 w$ K$ |, M) I) E( M - static int ccnt = 8;
% n3 m6 [4 `! O3 d, m
; w; Y3 K0 j: y- module_param(acnt, int, S_IRUGO);% b; }( e# ?1 y2 v4 r: Y
- module_param(bcnt, int, S_IRUGO);
3 T7 `7 S' r ]5 }7 T - module_param(ccnt, int, S_IRUGO);
复制代码
2 v; D- u$ H) P5 n4 @0 @1 D9 J: `1 I5 d5 O% \/ L
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# E# C+ H, y( W7 K/ G: @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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
v6 \0 e0 _ d/ u. f" {$ N d: m 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 g! O" D* S( U4 F2 V6 y& u
/ e0 `6 Y* ~- J# ?% a* G* f! m- ?4 e# S6 J! d; E
|
|