|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
6 p* P) i* l* G( `6 U; s- [code]EDMA sample test application8 a% Z/ W$ r9 J! I
- /*
' s, K4 @" Y! } - * edma_test.c: m3 {# {: \: u' _7 C, e
- *6 V& X! H6 f( x- ~* O" U
- * brief EDMA3 Test Application; S+ m( J W! s: t* @, l# T
- *
. C# l1 h" M% P8 V: n% J( X& L/ u - * This file contains EDMA3 Test code.
$ x( o! O3 g, \8 L7 M' f& Q - *7 e @" b; p! @/ @+ {/ m# w
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* D( p' Q2 u! t8 @0 l - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT7 I) S& U- [% Q+ }& q ~( s
- * TO CHANGE.
' j0 E _; ]9 M4 ] - *9 |) e# n6 X2 x' i, S
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/- p# v6 u/ B, R
- *
, ? g4 b8 p* ^ - * This program is free software; you can redistribute it and/or% F- ]* K" a( @! {; z4 y4 i/ g
- * modify it under the terms of the GNU General Public License as/ J" H# D9 m3 A6 Q0 s0 O
- * published by the Free Software Foundation version 2.
9 T% d( l) E) `% O$ ]( n - *
' E$ @/ ~- w! t; z# j - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
j8 \! G& \, \ - * kind, whether express or implied; without even the implied warranty
: V+ _5 c, B8 h( w3 G5 l$ T# Q3 @ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) g) b1 a: C) _ R. } - * GNU General Public License for more details.3 D* w- l! v# ^( J( {
- */
$ u( ?) t* g- E' K
% ~& k9 R: \1 v- #include <linux/module.h>
+ ^7 v z+ l# z# m. y0 w; R1 j% c - #include <linux/init.h>! ]) O* t% [; z% z3 W- u
- #include <linux/errno.h>
1 t3 S4 p" q8 v# w& N2 T9 g - #include <linux/types.h>" P( |/ j, S* c F1 _; x9 t
- #include <linux/interrupt.h>
7 I. b; v: y9 a0 j8 W3 |* M1 v$ q, S( s - #include <asm/io.h>
5 t% u9 L( e. A! X+ K1 o - #include <linux/moduleparam.h>& h! e! s% [# f8 e7 |
- #include <linux/sysctl.h>) B9 X( O o' v" `; q
- #include <linux/mm.h>
0 g; }" N1 b, }6 w# | - #include <linux/dma-mapping.h>
, K& }/ |- e& R4 y& \; _
+ N9 J# l: Q- c+ S+ P( h# T% g8 R$ H- #include <mach/memory.h>
# v% S/ s7 A# l9 d - #include <mach/hardware.h>
/ J1 M! Q' P- E+ e& Q; h1 m - #include <mach/irqs.h>4 b; q( H: }3 t8 ]
- #include <asm/hardware/edma.h>
5 q0 X; K0 b. m6 P; @4 ?
R$ |5 G g4 C) F- #undef EDMA3_DEBUG$ U( S w6 ~. d: v" a4 }
- /*#define EDMA3_DEBUG*/4 o5 C6 I$ N! c- M
- 8 D( P' a$ j2 C9 B' J
- #ifdef EDMA3_DEBUG1 k3 A" \7 j) f j2 V& i6 z
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
8 X, v2 O5 \( t! P, }/ z# W9 z - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
. d0 e3 w0 e7 v - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 _+ ]: ~' k: R' @* f* y5 |- [ - #else
8 U# b1 o0 T" S+ Z3 l - #define DMA_PRINTK( x... ). n; F5 q$ ` t7 @0 C$ A
- #define DMA_FN_IN
- S# c2 \( Z% v2 S - #define DMA_FN_OUT
0 D% r* n& q& u - #endif" i, B \; ]/ u5 G
- ! v5 J1 V, ^ I s; P3 p* c/ J: f
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
# M/ [" b: \2 w) ^5 B6 p2 ~( J+ S* f - #define STATIC_SHIFT 32 [5 c2 ]/ V1 a' F! y
- #define TCINTEN_SHIFT 200 |% G5 j8 v/ m) l1 j( r
- #define ITCINTEN_SHIFT 210 c9 @4 a g( V( A( g1 s- F
- #define TCCHEN_SHIFT 22
. u6 n3 e3 N) B: d/ F! S - #define ITCCHEN_SHIFT 23
; E9 v- R! g3 K5 S - 7 H3 k7 { e1 F
- static volatile int irqraised1 = 0;: J8 A1 x4 f4 `9 S! z. c+ I! A5 E- l
- static volatile int irqraised2 = 0;
$ D- `7 Z. C5 T, U" u2 A& {
& u& E7 ~5 m& X0 P- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, J t# x6 j" a$ Z3 c. ] j$ B2 d - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 M1 H8 Y+ D# p3 r6 i5 _
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( R! F/ i( ^, n: K, y
3 [7 u+ e# d0 {- dma_addr_t dmaphyssrc1 = 0;
. {$ G* x6 b4 Z, p8 `' M# S - dma_addr_t dmaphyssrc2 = 0;. i- V* l# S: n7 s2 T
- dma_addr_t dmaphysdest1 = 0;7 Y J( a6 }* s' G
- dma_addr_t dmaphysdest2 = 0;
# y9 }9 N. W' \5 h- ^9 }- Y - : R+ Q$ r6 G3 ~ K' U# M
- char *dmabufsrc1 = NULL;
; ^9 t4 r0 ]: x8 B) X+ \ @+ H - char *dmabufsrc2 = NULL;
; r( m! ]7 J& O$ x* X) E - char *dmabufdest1 = NULL;) m9 Y" I3 G7 S3 X9 |
- char *dmabufdest2 = NULL;
; j' x/ v8 `3 P% {% L8 ` - ' ^; L: T+ I+ K( C1 v
- static int acnt = 512;
7 o, |: ]- ~; T( r - static int bcnt = 8;
/ `9 e: o" D2 }; o- }4 F - static int ccnt = 8;
4 R$ S7 C- o2 P- r6 x$ n# U2 ^ - - |9 L' q/ q3 M2 V: g
- module_param(acnt, int, S_IRUGO);+ T& q t5 T+ E+ |9 @# c
- module_param(bcnt, int, S_IRUGO);( I7 v' Z& C" x$ S- e
- module_param(ccnt, int, S_IRUGO);
复制代码
( W# L) R# W: J1 E L% W% s8 [- n4 J: p. R( I* X
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
: M1 d; z. n( } i( d6 Sarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
2 \: u, l! c8 p* k 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 A9 Q4 O) M2 ? A' r2 ]
/ ]" w) j Y: ^/ J L
( G" I8 V' {# M1 c3 J R
|
|