|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 7 }/ d5 ]6 v8 R$ E( q
- [code]EDMA sample test application! g& v: \: U8 J5 F! {
- /*
; t1 ?& R* @: B& n - * edma_test.c
9 b( C' E! V3 v0 S - *- f/ `# r9 ]" F* `
- * brief EDMA3 Test Application2 x" S" {3 f w, V+ o' T9 L
- *
. b! F" e3 ]/ }. n - * This file contains EDMA3 Test code.8 U7 ?+ g1 A% B! T* @* T
- *
2 e1 G- n( C1 P- |0 X3 h; K$ m - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( z+ u: C; S/ Q Q9 l2 j - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
( j& q0 F; R; Y j, B - * TO CHANGE. Q ?( F3 y5 R# f5 Y$ r( o3 |
- *
8 |* e3 T: M" @ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 o# b0 x4 X. i6 u h0 g$ i% O - *
6 d9 \8 R# P. H3 y6 d1 G/ w - * This program is free software; you can redistribute it and/or
6 S2 D0 ?, ~1 Q8 d! v1 i - * modify it under the terms of the GNU General Public License as
9 q: c! Z* E3 w0 U1 H3 O: ` - * published by the Free Software Foundation version 2.
$ q0 ?/ P- m9 U# c, ]- p' t - *1 Q, Z+ I. z* a+ r0 z. Q1 J
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any b1 I1 ~+ z8 {( s
- * kind, whether express or implied; without even the implied warranty: v4 N, g+ y% S: v
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 c5 \3 E. G" ]1 N$ H. J% ]0 x
- * GNU General Public License for more details.' G1 ]2 }9 e) g6 z
- */ \ O: r+ m5 N b! O0 ~
; h8 M. j3 {' D- #include <linux/module.h>
1 E @8 Z. }0 T3 ?! v - #include <linux/init.h>
2 @' k) g+ b x% y6 [; l; n - #include <linux/errno.h>2 c5 p1 W4 S T6 S, h
- #include <linux/types.h>
7 o0 z( M% S8 h7 m1 O. U - #include <linux/interrupt.h>/ C8 w- B" ^9 J9 O$ O
- #include <asm/io.h>* K: T3 w( ?9 u% z! ~* D
- #include <linux/moduleparam.h>
) r! o+ f, c5 H9 v8 T - #include <linux/sysctl.h>
' G$ N. i( ^3 M/ a5 m - #include <linux/mm.h>" Q/ z1 q9 B. X& J+ G, M( h
- #include <linux/dma-mapping.h>% e; b0 @2 u8 k O* a
. @) |5 P9 {1 o. U5 ~# H- #include <mach/memory.h> L# H! ~* ]* D3 E, q, ^) q
- #include <mach/hardware.h>5 Y4 `. s* V8 ?: i
- #include <mach/irqs.h>' w3 ~) T d) h6 `0 `) u- M! x
- #include <asm/hardware/edma.h>) `4 _0 w( y3 {/ ~$ ^* F3 ]1 L
6 u/ u% E' N6 k9 _% O6 [- #undef EDMA3_DEBUG$ n; _( v. d& _/ O" u; \5 `1 C6 J
- /*#define EDMA3_DEBUG*/. s9 e; U6 v* B4 R- H
% w: Y: J/ G0 o3 p0 x- #ifdef EDMA3_DEBUG3 ]/ Z% n; S* I# Z( l+ M
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
4 c1 k. F9 T! |2 ? - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( [: E6 T; f7 z+ @; U a* x( v% c - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! N) ]0 [, n* J$ E - #else$ G% m% e6 x4 j+ I7 F
- #define DMA_PRINTK( x... )# p3 C9 O' h5 W6 t) n7 z% K
- #define DMA_FN_IN
7 \. W' j& R/ o, ]7 u: ^' s# T& ? - #define DMA_FN_OUT
( h6 v: i7 d4 C3 D4 @( C" J# z - #endif: \& m* h( z- L( r& k; y
- / g* L8 Q" [- F3 O- T; H4 Z' Z
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 k0 O3 g1 @. g% J& L. Q$ x8 k - #define STATIC_SHIFT 3% T$ u. ^" \+ ^. w9 w
- #define TCINTEN_SHIFT 20. @4 }" \) E. G, x& y7 r z
- #define ITCINTEN_SHIFT 21- o! z2 Q- C- j# g% p- i* j! M" ?
- #define TCCHEN_SHIFT 22$ ^5 q- s/ l( h9 R
- #define ITCCHEN_SHIFT 23) ?5 z9 O; @* P1 g
1 @6 X& `; E! J7 q: W5 f& F- static volatile int irqraised1 = 0;
& y' R0 ^1 q: `; W2 Y& R% W- b - static volatile int irqraised2 = 0;! p( v" S P9 ]# N5 ~$ w
( C8 M; }) k0 q5 M9 t, F- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); Z; j3 P# I9 d r9 r
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! z2 V j: q5 Y: K. @ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; i; O0 J( i7 ]
3 F) e( M+ |9 N3 Y- dma_addr_t dmaphyssrc1 = 0;
0 `7 w7 v2 B& D+ w3 K! { - dma_addr_t dmaphyssrc2 = 0;
+ Z _! S! k, |- X- t( f - dma_addr_t dmaphysdest1 = 0;& ], O H3 x2 `( u. @5 G ~% z# b
- dma_addr_t dmaphysdest2 = 0;
% X7 S9 k* J5 ?7 r: j- _
& W, g# z) y5 Z- char *dmabufsrc1 = NULL;
1 u+ W+ b; V4 F0 M9 L- i7 G - char *dmabufsrc2 = NULL;
; h( A+ H: l8 l! Y- }) I1 }3 v2 B - char *dmabufdest1 = NULL;2 e2 Q# d+ f+ g9 y. f
- char *dmabufdest2 = NULL;* F1 N# ~7 U% w! i. w
- ) K( Q! K1 h& S0 g7 x7 \. Q n( w' V
- static int acnt = 512;
' a5 k- D5 I5 |5 q) b3 ~ - static int bcnt = 8;# p* `0 M" f% A1 c6 H
- static int ccnt = 8;
1 V2 U& F: A; k7 v, {! m
* _6 _4 u, m3 O- module_param(acnt, int, S_IRUGO);' a6 j: \' X; ?' L2 q* J
- module_param(bcnt, int, S_IRUGO);
+ m. [5 X" w3 g3 D8 z. ~1 J1 I - module_param(ccnt, int, S_IRUGO);
复制代码
; e X! [3 v/ H% |" u/ d3 S6 h i# p. k
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用2 ^8 o7 `- E! _- J) h8 A# H" r
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。1 z, Z8 S _% r# j
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。2 B+ W1 ~) L: y1 ?/ ?: g3 @' H
' H) _- I. s, w% S! [% W
. P5 I6 `1 o% v- n0 f
|
|