|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 , a; r4 c) ~' @9 K+ q1 x
- [code]EDMA sample test application
5 I0 R+ U" }& i% ]" V - /*" t" M$ p9 ]3 h* {: x9 |
- * edma_test.c. B, O$ Q, _/ I$ G- J9 i
- *2 K$ u; F x: x3 u
- * brief EDMA3 Test Application
8 X6 n/ Z1 n; b& }9 t" \ - *
. C, S) f3 @: K) E; N# |- _( U - * This file contains EDMA3 Test code.
/ a/ b" L! \$ j$ J3 T# |& }* a/ Q: p - *
. w# |8 X5 @' i7 e } - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE1 Z" C+ O# ]4 B: _( M& J
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% g4 X$ h' j! m! x8 K4 T" m' P - * TO CHANGE.
' ]+ X6 i: s2 }" \+ ~ - *
+ {0 ~9 H# r* e8 O - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/- e& t' }& q; o( m3 l* l. ~8 A* G
- *
- V7 o7 {3 {5 L6 I1 J) W- `; D - * This program is free software; you can redistribute it and/or. [: t! V, G$ g( Q% j- k6 o9 @
- * modify it under the terms of the GNU General Public License as% r* ]2 q& u2 K: y0 P8 f
- * published by the Free Software Foundation version 2./ B% e2 s4 c; r+ T/ Q
- *( L- w& e- ]2 J
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any- n9 A! S& ^) E# u* w& i/ T, R$ o, J
- * kind, whether express or implied; without even the implied warranty' {6 ~/ q7 D/ G; z' G" l
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the z8 J, M' [" b0 }( w e) \. t
- * GNU General Public License for more details.! L# w/ _4 a' L) S \
- */+ P3 A4 w4 z& y# q H' ?
; l2 s: v \0 F+ N, }- #include <linux/module.h>
9 B( `9 v4 ?* x* j3 J9 F - #include <linux/init.h>
3 A8 p) Y' k" T$ {; b - #include <linux/errno.h>9 k5 G, f. q& ] t
- #include <linux/types.h>
' ~' y' X, H; @5 d: c - #include <linux/interrupt.h>
3 @# Z8 {' w3 H; Y - #include <asm/io.h>
, _4 a4 r5 I2 @ - #include <linux/moduleparam.h>: A1 J8 d' A5 A3 n
- #include <linux/sysctl.h>
* `( a9 M7 N4 @/ m( C' p - #include <linux/mm.h>
( a4 o8 {+ D+ W' g+ l$ D: d! T - #include <linux/dma-mapping.h>4 @. s0 g8 x: F9 I9 f4 f6 T: m
- 1 S3 O( V; s4 D
- #include <mach/memory.h>
1 s3 J9 W# E$ t8 d) g) R7 G - #include <mach/hardware.h>
8 T% k/ N' ^7 X/ c0 k - #include <mach/irqs.h>
6 o3 c2 C) J3 ` - #include <asm/hardware/edma.h>
8 U$ x4 X6 T* L: G+ v* U+ T; m \ - # S4 c+ |* y8 y9 d& i) W2 i/ A
- #undef EDMA3_DEBUG" {/ T! m+ M G. [6 J
- /*#define EDMA3_DEBUG*/4 r% e3 p1 \8 P) k( `; _: B$ j% e
- % B s0 j) w* u
- #ifdef EDMA3_DEBUG5 C% F7 d! D& o$ u9 u- g( {) {
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 m! n5 I9 f x1 w3 M
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
3 M, @# l$ c- h( O - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)8 v1 x8 q: G3 _
- #else
0 |5 E: i# B/ y" _' o - #define DMA_PRINTK( x... )" Y; t3 j6 {: c: d, b% M
- #define DMA_FN_IN' Y/ t+ ~2 S4 [: q$ U
- #define DMA_FN_OUT
) I' U9 {) A+ s* P: F - #endif
7 M3 {- Q1 K# g8 I6 P, o5 i% W
" e; k$ q8 t0 @& G1 K2 S5 F- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: K7 D3 ]! @3 l" r' d - #define STATIC_SHIFT 3% }8 W4 H: H' M! |
- #define TCINTEN_SHIFT 20
1 k0 i- P K: Z' }8 s$ L2 W+ A - #define ITCINTEN_SHIFT 21
4 ^8 S9 N& F% i" U v, F c: } - #define TCCHEN_SHIFT 22
6 @" K* X/ _' e4 ]. V- O- _ - #define ITCCHEN_SHIFT 23; P% A% E" R7 x* L7 z- K. V
' N" Y( a2 O" e9 B, p8 l9 P8 I- static volatile int irqraised1 = 0;
: V6 X& S2 i+ z, Q$ M& j/ { - static volatile int irqraised2 = 0;
, S4 z! z5 n) i
' `$ p" O* F( M( q2 X- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. p6 t8 \) S2 s, v7 z1 v
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 ~$ |) L$ b: z2 R* v8 q1 k' k
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 [0 p# u2 I. p: b! P - . M5 j# M' ^3 e
- dma_addr_t dmaphyssrc1 = 0;7 x5 O$ I6 |+ v( F7 R
- dma_addr_t dmaphyssrc2 = 0;6 M9 O! }$ I' v7 F# ]
- dma_addr_t dmaphysdest1 = 0;
" M, z8 w! Y# } - dma_addr_t dmaphysdest2 = 0;
" Z' n: m/ u/ Z) {2 t
2 X- U4 }2 Z! M4 ^- b/ a- char *dmabufsrc1 = NULL;4 E; [0 r1 y( l X9 l
- char *dmabufsrc2 = NULL;/ t4 j! o. o3 d
- char *dmabufdest1 = NULL;' {/ H+ F. K9 _9 o" o; J3 Q( N }
- char *dmabufdest2 = NULL;
6 S9 s1 d& m9 L! ^* \* M$ P: F
) C$ u# t% s3 M R- static int acnt = 512;
3 D# v$ e4 _+ Y0 F# T - static int bcnt = 8;0 }( u% ]4 V; D4 I1 j& @3 i
- static int ccnt = 8;+ r7 T( c2 D; d* e8 k
- # \& e; |5 J2 Q# p
- module_param(acnt, int, S_IRUGO);
$ `3 b$ n! n8 k; {( J# ] - module_param(bcnt, int, S_IRUGO);
7 n7 q5 q y+ P) k$ j9 Y - module_param(ccnt, int, S_IRUGO);
复制代码
3 r0 \, g1 I3 ~5 I0 Q( J8 d8 y, _! a* r
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 O6 z* A' Y$ V8 rarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. S5 |, v' S+ ~+ u8 } 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 [- e4 l3 V* f
/ ~ t$ ^+ D* U9 f) q
$ k/ ^0 ^; N- H, G0 v$ R( N* p |
|