|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 {7 i; R' k5 o4 q8 a# c, `. I
- [code]EDMA sample test application
( ?& K4 I; i. l0 \ - /*
( d) R- p2 U. x1 s, o C - * edma_test.c+ E( P/ L: S! o9 l+ N6 o/ L
- *
6 I- k' p1 F$ T. F - * brief EDMA3 Test Application
+ f& X( H+ F; _2 D: Q& K' l - *, n* u+ C5 Q# {. |9 q/ I' w* M
- * This file contains EDMA3 Test code.' a& Y! t, G: N- n \
- *
9 n O" [' H1 v* l0 o- h - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE' c; \9 L$ s A( z! |3 w* s: O
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
1 ~$ g7 R' P O5 O3 s, R - * TO CHANGE.+ }" R; c0 e# H1 X. N' H1 F
- *
K; S; p) Y3 d* W - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
# D7 F2 U N! a+ J" w; a0 y: k - *
" x) z9 I. | H3 z8 F8 T7 Q- [1 ]: z - * This program is free software; you can redistribute it and/or
! \+ \* E# [7 K7 s/ x( h; Z. t8 o - * modify it under the terms of the GNU General Public License as
* u! E. X$ V( M- o$ u - * published by the Free Software Foundation version 2.
1 }/ r+ l! }3 V: T5 R- J - *& H& ~* X4 L/ v, |# q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any0 Y' r4 x2 @" {; U
- * kind, whether express or implied; without even the implied warranty
9 Z3 |5 C- Y0 Y/ [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1 _' ^8 u3 }9 c+ F4 j2 Y5 T$ k - * GNU General Public License for more details.1 j9 \ J; |* e
- */' p; ~$ f( O- |
- $ r" v9 {. D% {) t1 Y
- #include <linux/module.h>8 p: U6 s8 @. d
- #include <linux/init.h>
, S+ J: A; S6 T j. g: E0 n - #include <linux/errno.h>
/ Y Y. s" _4 y8 m5 M) ^ - #include <linux/types.h>
. I6 ] ~' [& C5 L9 A( E - #include <linux/interrupt.h># x( q+ m1 O1 z3 z$ C i/ g, I
- #include <asm/io.h>
3 o$ J3 ~! G4 e; C' N A4 i# D - #include <linux/moduleparam.h>" z4 O$ i: f+ U/ ^$ y& y0 x
- #include <linux/sysctl.h>
8 j% n9 A# K2 H5 ~3 r9 r - #include <linux/mm.h>
0 D3 G. ?0 c- }- ]4 [8 L: w- k - #include <linux/dma-mapping.h>! E% L0 _: w2 x0 k$ c% H J
. s: K' A# C5 D5 U: W- #include <mach/memory.h>) C# {$ v( Q' l( C7 U! S
- #include <mach/hardware.h>1 ` ~' @8 C) a7 E% T! Z. A
- #include <mach/irqs.h>
3 g5 a! A+ o" L* J' H/ W" } - #include <asm/hardware/edma.h>
' S0 w5 C5 N. T! u( ]4 i8 O
) p" E2 D8 D5 k- m! y' O- #undef EDMA3_DEBUG! `0 L* |+ E! D% j
- /*#define EDMA3_DEBUG*/" n; }/ [. J' {; u: I* i; c! c
- ' w ?1 g( J# n; O6 j3 s
- #ifdef EDMA3_DEBUG! q: D3 {4 C+ M( U7 T
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
0 ~; g0 Y+ l! w1 u" } - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
1 O. K' r5 g6 P1 A; g) a/ F! n/ { - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
) `/ L6 P' c1 g# E - #else# _" p6 n, P3 S; }+ O
- #define DMA_PRINTK( x... ). j6 W* Y1 j& k+ \- N
- #define DMA_FN_IN7 Z; ^6 k* }. A9 r T" D
- #define DMA_FN_OUT. W+ a P3 O/ O
- #endif
% l/ `- f/ ^. T' @ - 5 }7 X+ l% V6 ?* r) P7 T% b% Z, w
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)4 _5 n% U: ~7 z; r: P3 x4 g W2 _
- #define STATIC_SHIFT 3
0 |- f: ?1 b$ c! c5 @7 E! \ - #define TCINTEN_SHIFT 20! t1 T: e$ h! H; X; d* @
- #define ITCINTEN_SHIFT 21( B$ W" ^+ |) B5 c
- #define TCCHEN_SHIFT 229 I8 l; g# e- S& `
- #define ITCCHEN_SHIFT 23
0 f! r" w- \2 q, }5 C2 x* l
& Y- F1 I7 l% q7 b- static volatile int irqraised1 = 0;* s- E# j& C8 I4 n% {
- static volatile int irqraised2 = 0;9 G" t& _/ r# G7 [
- 4 P# L7 P" e# t4 C) P
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; z- ?8 z4 D8 O$ a1 T G - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& b: t9 j0 p/ i" A! _1 Y9 O
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 y4 V+ _, i1 r3 o- W) j- `/ q+ j
3 j. B1 V2 i! x4 ?- dma_addr_t dmaphyssrc1 = 0;! ]1 A5 r. i) k
- dma_addr_t dmaphyssrc2 = 0;
H, Q+ O) ]9 M# U N - dma_addr_t dmaphysdest1 = 0;
( n/ A2 B: d B: w7 Q* { - dma_addr_t dmaphysdest2 = 0;' v( _' Y) w) ]% H6 }# J
% M7 G$ M# J( g1 v& d- char *dmabufsrc1 = NULL;
1 W* U& S2 P# m& H, {4 c$ i; \ - char *dmabufsrc2 = NULL;) P7 A; c! S2 X D
- char *dmabufdest1 = NULL;
* r( E- H( _' w6 r, u - char *dmabufdest2 = NULL;9 @+ K( L$ I1 t# T
5 h; T& G# ~5 r) {- static int acnt = 512;
} z1 o, w0 w$ j) B& L3 L8 L - static int bcnt = 8;, ^) b" D" {7 W, ]
- static int ccnt = 8;
. F! h, s8 x& { - 7 Y" y8 _1 [3 j2 a8 _5 a8 l
- module_param(acnt, int, S_IRUGO);5 n6 k7 f+ r3 `# {9 F9 _
- module_param(bcnt, int, S_IRUGO);( `% A/ N; O7 C- @; i( ~
- module_param(ccnt, int, S_IRUGO);
复制代码
8 A# ?+ _, ?0 Q0 j
- }# e8 h# d( o4 ~* [7 ^$ s 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
6 f$ F& }, R# A' P- f$ `/ j. Barm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. k* [6 A/ O. }5 E: ~ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! p5 _8 m1 E5 y9 [# m+ @& E- ]$ _% \& I1 f
0 U& s( p2 T7 d$ M! b8 x
|
|