|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; k& n o; [3 {" F9 j3 _( y- [code]EDMA sample test application
# g+ n5 w0 `- o - /*! J$ V% f0 p9 p- @5 F
- * edma_test.c
7 m6 Z5 U& b: F/ F - *
4 V& ~/ L* l. l3 j- Q - * brief EDMA3 Test Application
4 ~ o+ A3 |7 I* ^& h - ** i# w% O* A" w
- * This file contains EDMA3 Test code.
6 Q( ~ r+ |# ]& F' n - *" h* r: G0 s' m- t8 Y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE% T1 z& K M/ v
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT1 ]) w$ }+ h6 F. E* V) ~ g
- * TO CHANGE.. B: _* N* B' c; Y/ j
- *6 c+ V/ N: _, s+ O1 I% t
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
! O( n# Y' y P1 a! q - *
; d- D* e: O. Z8 o% ] - * This program is free software; you can redistribute it and/or
# P& z( B$ U4 Z( P" e - * modify it under the terms of the GNU General Public License as1 a/ b& R1 N6 {4 _# K
- * published by the Free Software Foundation version 2." Q, V6 @. d7 B
- *
0 p: B) Q( }1 P9 R! V- l" l6 D - * This program is distributed "as is" WITHOUT ANY WARRANTY of any7 _# X8 n- ]0 v; R
- * kind, whether express or implied; without even the implied warranty: w5 W& }. J E* ?& e5 H
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 J: q' h4 o& N
- * GNU General Public License for more details.
1 K* i+ D' l$ ^0 @2 M9 U - */! \. g( C$ _" I% k9 i ^! K* T
- ( s$ i9 ^/ q' ?2 v! ~3 u
- #include <linux/module.h>
7 t) w. J1 C, v4 U( ]- w - #include <linux/init.h>" [/ J+ d! K! K* T0 f# R
- #include <linux/errno.h>/ n% U) ^; H; p/ s0 F0 I8 m2 D+ }% c
- #include <linux/types.h>% h3 I+ q4 u" l6 u v& U0 u
- #include <linux/interrupt.h>
% p- i1 u4 @- p/ {9 u# m* o2 U - #include <asm/io.h>
+ P3 \4 m% r/ t' h8 U: p/ b1 d: u: D - #include <linux/moduleparam.h>
+ e& c$ e1 w. h - #include <linux/sysctl.h>
/ v4 U3 P" Y( m- N' ?: A& ^* j( ] - #include <linux/mm.h>6 |6 g0 B& _( q
- #include <linux/dma-mapping.h>
( b/ Y: d0 q- x' p4 s
/ S6 w) n6 T2 S9 M4 X" O' [- #include <mach/memory.h>
: R: u5 X+ s4 s: n - #include <mach/hardware.h>
+ H7 W. B4 F6 [, z2 @ - #include <mach/irqs.h> C* I- c* k7 n" y5 P! F2 j
- #include <asm/hardware/edma.h> j1 v! N; Z9 v' b5 ^( F
8 T* L0 [6 W5 W' z- #undef EDMA3_DEBUG! b. z4 o. ?& y7 V7 g' H
- /*#define EDMA3_DEBUG*/
* n% R! C* @$ f1 r( P7 M
) @) g& k3 [ v% p& K: R8 j( `- #ifdef EDMA3_DEBUG
2 F5 J$ i! j5 g# v& m: h - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)% ^0 S5 c$ W. A( d8 m& }8 v
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__) S! U; w0 E$ }- N2 e
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! K. R6 R# `) F+ ?% I) J( l - #else5 N# e9 {7 X( L, Y! L
- #define DMA_PRINTK( x... )
$ f% {* b5 v5 P+ S: l - #define DMA_FN_IN
8 N$ j/ Z: s- t2 `" i& W6 l' w - #define DMA_FN_OUT
5 W2 v, ?3 q4 ~/ R* p - #endif
, q) i* X4 A" R Z) g
. \$ p! L5 f. y. ~" B* F( D- #define MAX_DMA_TRANSFER_IN_BYTES (32768)) s2 T* ~2 }, |2 L1 Q7 ]
- #define STATIC_SHIFT 3! \4 ]/ d/ a; H8 K+ Z8 v- ^6 U* G
- #define TCINTEN_SHIFT 20* M% H$ C) J: ]* ^. v
- #define ITCINTEN_SHIFT 21" W% b- }/ q4 C6 y
- #define TCCHEN_SHIFT 22
7 Y0 X+ Y z l7 a U& n - #define ITCCHEN_SHIFT 23
! K" v( t, R) B! N - $ B: j( q' s) F9 L
- static volatile int irqraised1 = 0;/ R2 @7 t8 O+ w
- static volatile int irqraised2 = 0;" {4 E U& G( g- v& T; d/ P2 L
- + j# W8 S4 M* h; p
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& p3 x# W" Y! m2 s; v
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( O% i# h# B2 [# M7 o: a; G$ \ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 |2 O8 }' e6 o; i1 {6 r, P1 ^9 y - # {% O+ S t3 m% W* U# Y5 Q
- dma_addr_t dmaphyssrc1 = 0;
5 z: e G. \6 J% [0 c8 s+ M - dma_addr_t dmaphyssrc2 = 0; A: Z' _0 F: m+ T2 `6 c
- dma_addr_t dmaphysdest1 = 0;
N& ?; o' r) t - dma_addr_t dmaphysdest2 = 0; `+ c. |3 b- ~# J1 P' F9 X" P' l5 f W
6 s7 ^$ n3 U+ H- char *dmabufsrc1 = NULL;
! k. Z0 f' A8 K; ? - char *dmabufsrc2 = NULL;2 A" z% x0 j: ^9 f& E
- char *dmabufdest1 = NULL;/ @4 R5 F m! @: s- n: Z
- char *dmabufdest2 = NULL;
5 l7 o+ K+ M) x - ; l6 [9 F8 e: e- P2 m5 H% o
- static int acnt = 512;/ ^9 o$ Q' m4 g# ?) s
- static int bcnt = 8;* k7 N. c/ N7 t( D j/ p
- static int ccnt = 8;
* o% j& C! K n2 S
, u+ c9 L, k) b- module_param(acnt, int, S_IRUGO);
. G' N. e5 i1 i6 v' ^0 a S5 Z! { - module_param(bcnt, int, S_IRUGO);8 q+ X3 Q: b7 S7 `, [9 Z7 ?) y% n( u
- module_param(ccnt, int, S_IRUGO);
复制代码 7 e0 f. z, ~0 J* a/ N t. ?
+ \+ J2 N4 ?$ M: s! b# [5 J/ R
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
5 @( H7 A+ _, y darm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。7 {5 W3 V% C& X. V+ |: u
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
$ s/ M. U4 K6 z3 t2 ~! E$ }1 d
/ U' N& {, ^: q$ q- ?$ T" ]$ A% F; I/ Y5 {- \3 P0 R/ h. ^, b: B
|
|