|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 & r6 Z# Y( y6 ^1 P' d
- [code]EDMA sample test application, p5 ]- g c! z, N" t9 q
- /*
: z( R5 M& b, E5 e& e - * edma_test.c! |/ Z$ s( f2 C5 R. o
- *
* m( A }% ]6 b - * brief EDMA3 Test Application( H4 s5 @% T9 i" `) `! s/ U% s
- *% o* @. y; {0 [) h2 ~; p |
- * This file contains EDMA3 Test code.
. J' h+ q5 r' d - *0 `+ @+ Y9 Y3 m# ^, j. X( V
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# {/ M% J! L4 O- y0 P* G
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
+ U$ C- o/ ]% }0 e& g% s5 W - * TO CHANGE.
- P* c+ l. m$ @: Y' B - *
; o; @0 _7 V, p0 V1 k" m5 q; X - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/6 f9 `* {3 `9 i
- *
0 X, a* ]3 N3 A# a, E - * This program is free software; you can redistribute it and/or
9 |8 k2 v8 u! Z/ y1 l4 z1 P0 M - * modify it under the terms of the GNU General Public License as
4 v! N7 t0 q% v- Q! y, E2 O- u1 a' s - * published by the Free Software Foundation version 2.
4 f3 G u. F1 o# x$ E* d+ B. j - *
, m/ o ]0 @* [$ z - * This program is distributed "as is" WITHOUT ANY WARRANTY of any3 C# B |; ?! G/ I; b( o1 x
- * kind, whether express or implied; without even the implied warranty: J0 P0 N9 r0 _6 v/ X' q2 |
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the: x6 i2 t) d8 V
- * GNU General Public License for more details.' l% C, n+ V# m3 `$ |# H
- */# s( z3 }+ _9 ]0 h0 P& l) @2 ~
' k1 j S6 K! ]3 l2 t! |- #include <linux/module.h>7 y2 Y6 K/ s, T9 N
- #include <linux/init.h>
* u' d6 D8 P# X! r9 x8 q - #include <linux/errno.h>
! h% J, q+ D. `! j- t, j - #include <linux/types.h>8 b% e+ a( C- Q: h$ d) s9 {
- #include <linux/interrupt.h>
% `$ J' }8 R4 W: a U7 @ - #include <asm/io.h>9 z* {( @3 Z1 B9 V3 t! n
- #include <linux/moduleparam.h>( `, s% D* W$ i6 F* A3 a j: a
- #include <linux/sysctl.h>2 Z' U2 w8 a5 U! u% V: v
- #include <linux/mm.h>& G, F- A& `5 u4 [
- #include <linux/dma-mapping.h>
l3 o. s* F9 { - 7 N3 N1 T; o0 R7 L& H" l' o/ G
- #include <mach/memory.h>6 v2 E% Q( Z @! L1 r5 ~
- #include <mach/hardware.h>
# Y; ?; v+ x* w - #include <mach/irqs.h>% ^" Z* B f/ H& L" K
- #include <asm/hardware/edma.h>
3 Y: v" U" w4 A& j. e1 U
+ r" ~" F' e! E% O6 K* ]- #undef EDMA3_DEBUG: C4 l' F3 S+ J8 Z
- /*#define EDMA3_DEBUG*// a8 M! W+ B' l( h' Z6 {1 i& ]
; A V* c: b5 }* V5 u5 s4 ~% n) d3 g- #ifdef EDMA3_DEBUG
* b2 t1 H8 U' Y - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% J, G) ]3 C/ v ]! N3 q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 v/ w% m, w% t0 y7 s - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)$ d& X! i& H) b
- #else
$ D" T' Y" f0 f( }3 { L7 i/ v7 c - #define DMA_PRINTK( x... )
) [3 R% h" S$ s) }) C+ G) Y% _ - #define DMA_FN_IN1 a& w3 ^ X8 ^7 |3 ^# C- ?
- #define DMA_FN_OUT; T' V# }, j* q* m
- #endif' u, L7 ~9 {) M% Q5 p0 S5 z
$ P" l5 X( r. Q2 y( n7 I$ j- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" H( p0 e& \0 [$ b - #define STATIC_SHIFT 31 [& [( ^& r( x
- #define TCINTEN_SHIFT 20) ?1 _% X- n$ Z- o6 v e' r1 v
- #define ITCINTEN_SHIFT 21' b' }/ {; y$ ]0 q+ i% X. V2 }9 |
- #define TCCHEN_SHIFT 226 L- W- U- f' ^# N6 T# u3 p- }
- #define ITCCHEN_SHIFT 236 z$ U# k j. T, A8 E% g% y; Z! P
- 6 M/ E4 f7 ]( \7 H$ n
- static volatile int irqraised1 = 0;( m! }* s$ [& x1 K5 \: o0 Q
- static volatile int irqraised2 = 0;' L* N( d* `; K* L% j
! N8 ?! f! X' n) }. O- a- R4 [- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 e, k* @% v- D ^$ T - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" [' Y9 I6 _7 X' p
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 }0 v! J- j3 @7 |
8 X( ]; o1 W% X- ~1 k' O4 c$ P- dma_addr_t dmaphyssrc1 = 0;
9 A3 G) q# v) v% J# w% ^) K - dma_addr_t dmaphyssrc2 = 0;
0 v$ f6 K) W j; b! O9 A/ V - dma_addr_t dmaphysdest1 = 0;
$ e2 n# m/ G" M( `' L. y m - dma_addr_t dmaphysdest2 = 0;, s `, R) }' U. s( k- a
- % u v& T) l& b1 F
- char *dmabufsrc1 = NULL;# J4 }- ^2 [( u* _0 m/ r
- char *dmabufsrc2 = NULL;
- w& |8 q- K( E' E! W* G - char *dmabufdest1 = NULL;1 o g# M+ Y7 a
- char *dmabufdest2 = NULL;2 b, n8 t) M: M$ x3 b
2 A6 N& N0 M( [' |2 E: k7 T& q7 ]4 ~$ Z- static int acnt = 512;
: c6 u- m) ^$ s# }4 P8 V! ^ u# W2 [- j - static int bcnt = 8;
% ]5 b) g# G4 M9 ? - static int ccnt = 8;
, S+ B3 q) Q; ^ - 0 [* ]/ i6 {6 A) C/ p; q: f8 z( S
- module_param(acnt, int, S_IRUGO);
/ o) `" y- n( O3 K2 `; ~2 {. f. i4 j - module_param(bcnt, int, S_IRUGO);$ ~ Z7 d1 O: o1 G7 B, p. r
- module_param(ccnt, int, S_IRUGO);
复制代码
# ^* u. f, p. [2 K
8 P2 B# N4 n, f h7 x 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% n, Z% V/ _! S" m: u2 K, u. varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
5 ^1 k! v2 g* e7 ^) n% ] 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" J8 q4 r0 Q1 T: J4 P+ g, [. ~
$ z* I. @1 C0 ^0 V
/ [# p- s# n$ q8 g* W4 T |
|