|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
2 B, y8 E2 @. Z- [code]EDMA sample test application8 ~6 D1 ]; j; u! |' i
- /*
( |( ]- K6 C4 ^ - * edma_test.c
4 Z t5 G* }& u' ?+ s* n- j - *
: D4 z) Q7 P9 X' J. h+ b2 h& X - * brief EDMA3 Test Application1 ?! [" u3 i( z1 r
- *: T" {* b n. x+ [* c+ F
- * This file contains EDMA3 Test code.
E0 |6 G. U; w! L7 a- | - ** q% V7 D+ E5 w i
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE. W B Z7 r! A% a% v# K' H) y
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT: C) K! u: m( @6 E6 t* g/ ~6 a6 I
- * TO CHANGE.8 e/ i6 |0 q$ l" X/ j( \5 p) _
- *$ A& y$ h! v( [5 z6 j( E- q
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/$ N9 {0 [3 M: D4 A8 g3 Y* Q
- *
+ q% o$ i4 ~# H* G% w - * This program is free software; you can redistribute it and/or! u$ F# W F: q( k. q+ t% ?) p8 H
- * modify it under the terms of the GNU General Public License as
( _$ A3 l5 y! a: L u! o - * published by the Free Software Foundation version 2.
, d: Z: C h% {) ?" ~8 f - *5 y7 I6 s8 _9 t8 o {6 I
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
* t* `9 y8 q- @1 Q5 n - * kind, whether express or implied; without even the implied warranty
6 f; W9 c* N3 \; N5 p6 h8 k - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! Q# Z4 c* H3 ~& w3 A: o - * GNU General Public License for more details.# |' q* Y* b, ?+ T% W Z4 x; q, L
- */
$ G/ Z3 T9 [3 `& R/ U3 [3 s
* x* ?1 i. }$ x9 U2 A- #include <linux/module.h>1 _! z3 m, u8 T- _
- #include <linux/init.h>& K$ {8 X& Z0 Y4 E! Z$ p* P1 K
- #include <linux/errno.h>
8 S( ]5 D2 q5 a - #include <linux/types.h>' p* F8 m! e$ n/ h, d
- #include <linux/interrupt.h>
7 c$ S) A+ h" y. z - #include <asm/io.h>
; p; r' }1 g7 k: G! u - #include <linux/moduleparam.h>5 z* [' U$ V% J8 w
- #include <linux/sysctl.h>
7 o1 O0 j. Z2 h% a; o+ E5 f& ^3 x - #include <linux/mm.h>
; w6 [+ p5 h( b9 n - #include <linux/dma-mapping.h>
4 g( N2 {' U* g1 ^, Z: N5 E7 k4 u - + l4 C2 o1 r( d$ J4 o
- #include <mach/memory.h>* ~, [4 A( ]& m
- #include <mach/hardware.h>0 _% _- z2 F1 [, t/ g* w/ p
- #include <mach/irqs.h>
: v2 ], A4 d X, Y' s - #include <asm/hardware/edma.h>7 L$ } [) q% ?8 [
- g9 [1 K0 T @
- #undef EDMA3_DEBUG
6 a3 `$ n( t: c) ?8 b" a: d8 N - /*#define EDMA3_DEBUG*/' I5 D5 ~5 Q/ Q9 l% |# s
* U0 l0 y. A/ m& s& C- #ifdef EDMA3_DEBUG
$ L8 I! {/ n2 @/ { - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' R* a2 ^2 b5 \! J7 u# v2 ~
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 s+ f9 } v2 [6 P+ {! N - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
/ e, N/ i, ~, C; b' { `3 e - #else k7 g0 [1 m7 f T8 X$ O
- #define DMA_PRINTK( x... )
* T% ]; A2 [5 g2 w6 b2 e( m! z7 C - #define DMA_FN_IN
0 D2 f9 K# ^1 O+ } - #define DMA_FN_OUT
7 B" E1 {, e! l1 C - #endif; f1 B2 t7 F! a' u, h6 b$ g) x
- $ p; e) m/ g- Q/ q# W
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)& E9 m l p4 ^ j
- #define STATIC_SHIFT 3
+ o1 b" ?7 A% o: r( g - #define TCINTEN_SHIFT 20* n% [( U' f& ~' d s
- #define ITCINTEN_SHIFT 211 ^7 K0 b" u7 Z1 z
- #define TCCHEN_SHIFT 22
# Z, a q: e. o% E" C$ [ - #define ITCCHEN_SHIFT 238 i) a" J; m5 R% a
, S& T( d! h# R4 I9 O- static volatile int irqraised1 = 0;
: h" n- f2 U- F$ S2 N E - static volatile int irqraised2 = 0;
# D2 c8 P3 J. G0 d, | - 2 k5 J% `9 w" o6 P" b
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 N) P/ _0 ]) b8 {' ]( a - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 E% M5 J( |. F4 T- V$ p - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ `7 d, Z, q7 E3 u
% H) T/ _+ ]0 B- ]% C) E- dma_addr_t dmaphyssrc1 = 0;
, u$ x: ]; [* e& G2 C& Y9 p) i& b& F - dma_addr_t dmaphyssrc2 = 0;
! C! Z$ f1 ?$ c5 G - dma_addr_t dmaphysdest1 = 0;9 T: c$ M/ Q2 {4 L8 r
- dma_addr_t dmaphysdest2 = 0;; l: D" W8 ?' Z3 x6 T, M3 [. n
- M& C, t* a- }1 x! L- char *dmabufsrc1 = NULL;* A0 r4 d. b! N4 ]5 {
- char *dmabufsrc2 = NULL;( [; ~9 w1 v3 z# `
- char *dmabufdest1 = NULL;1 v4 ]) J" `% f4 D
- char *dmabufdest2 = NULL;
% s! Y! { v9 y. e0 K
8 r: P7 u, u. t# o: n I" ]% Q2 J$ w! I. j- static int acnt = 512;. Z6 ` R2 }$ P- e
- static int bcnt = 8;9 p. I H9 }" \: c
- static int ccnt = 8;$ R. w; j& {6 Y6 B1 P' M: j
- 0 b, Y( @: A6 r" `% a
- module_param(acnt, int, S_IRUGO);
" |1 c6 X) n5 W1 i; B - module_param(bcnt, int, S_IRUGO);8 h' \5 T* j" C, @5 _" q
- module_param(ccnt, int, S_IRUGO);
复制代码 / R. H$ e$ {( a9 y% n
[! {! m% t+ A' e4 D" I: B C
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 m3 l* I! p3 t) ^9 v
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
0 d" h# |# `+ J: M. k/ J0 h 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( i4 q8 O w$ W8 j' k3 |5 b' O
& F( N- o& F7 a6 f* M9 [
3 z+ b9 {" W4 c |
|