|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
! c6 z' ]9 k# v T/ L3 |7 P% \- [code]EDMA sample test application+ d$ U* Q* i9 M2 j0 f; {1 `
- /*
2 @: p+ p. k4 E - * edma_test.c
: \, ~* l8 P W4 ^6 ^% V2 A; y - *$ z! p4 W& f( m, O+ o( K" C9 H
- * brief EDMA3 Test Application# h: k' k N \2 G3 j: Z% q
- *3 v. i' O, B; R) m
- * This file contains EDMA3 Test code.
+ m7 J5 \4 i& `7 ^ - ** r- J }3 _% @ J4 @, |
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE! P" S; g8 \6 }7 y( c, @5 e3 z
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
' B0 O/ \& s$ S - * TO CHANGE." t6 z; ?! i+ i7 L
- *
2 i( ]5 z! f# K6 j! l - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
( E/ q! E" T0 p4 Q - *3 b$ t( C$ k" z! p# c
- * This program is free software; you can redistribute it and/or
) R& E& A0 Q7 w1 H) V4 e* R, i - * modify it under the terms of the GNU General Public License as
* Y4 o5 c8 o- C; n1 F/ ]2 l. y - * published by the Free Software Foundation version 2.. }; _: B( w) j: S; N+ K
- *3 T+ b) G* C* s1 s! ]: P8 @
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any# E& U% E! `) I E
- * kind, whether express or implied; without even the implied warranty
/ @& ]% h( d! d( V - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the. n2 A) W! p9 E6 d
- * GNU General Public License for more details.
1 N0 D' ^# a# d8 c+ P - */
% C+ s0 K$ ]0 [8 k+ |8 |; g - 2 D0 R6 P5 R, o+ _! ?5 I* @' H. g
- #include <linux/module.h>2 B+ {( ^+ W1 z5 j
- #include <linux/init.h>- C, _7 }! K/ H! t) e
- #include <linux/errno.h>. K3 A0 l8 X! w. r( x6 Q' }
- #include <linux/types.h>
, F( s7 P) f6 ?# b - #include <linux/interrupt.h>
+ Z' B/ }; ^6 f1 M( `1 @ - #include <asm/io.h>
, O# k1 t( ?3 Q! g { - #include <linux/moduleparam.h>8 H2 ^. c: @4 p$ {* L, P/ j. v1 L
- #include <linux/sysctl.h>
$ M T0 h9 S7 Y; p |/ m9 p) p3 ~ - #include <linux/mm.h># a$ i4 W. T" d1 x, A% P
- #include <linux/dma-mapping.h>
7 |3 r7 X1 C& P; J& n - ) w% z7 e% l5 b# f/ J$ o
- #include <mach/memory.h>1 v7 k) p0 b, e) C, `9 q, l
- #include <mach/hardware.h>
2 q( f" o0 J1 t3 y - #include <mach/irqs.h>
7 o0 O3 U( a7 K( L! U& ? - #include <asm/hardware/edma.h>) G3 ?/ D$ a# X- z+ _7 J5 ?
# K/ ]" [" r$ S. F- #undef EDMA3_DEBUG4 K& [. y7 V1 F5 `/ Z/ b
- /*#define EDMA3_DEBUG*/7 E- U% {* x8 V5 x" ~
( j# t% Q" Q3 E7 b, V/ u; I- #ifdef EDMA3_DEBUG
: n' o9 R+ T/ _ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 H5 j$ X8 h8 }( J$ B! R3 w: G
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
: t& g0 y0 \$ e6 V, Z - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)7 W8 Z7 V8 y2 K
- #else
9 f6 o {5 p) N: K - #define DMA_PRINTK( x... )
" j- U( p. z6 A1 \: b - #define DMA_FN_IN
( _- V' z7 h% Q& M n; w7 w - #define DMA_FN_OUT& | H2 J6 v9 i3 h' a4 w9 x
- #endif( _6 e; _/ M6 N5 w+ C. e
- ! I. C W, g" C6 F) e6 e) O+ x8 k, r
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 U W7 t7 @& l
- #define STATIC_SHIFT 3
: o9 z& X6 e' S - #define TCINTEN_SHIFT 20" ~4 t. @2 F/ t0 d5 I+ z
- #define ITCINTEN_SHIFT 21
0 B- F) ?4 m, y1 c - #define TCCHEN_SHIFT 22
# O0 y9 W# P1 i, E! a - #define ITCCHEN_SHIFT 23
8 ?) s( @" V' g# y
2 t% e9 y, n$ g; w( Y- static volatile int irqraised1 = 0;
. e4 |9 |6 M- ] A, U' m- W - static volatile int irqraised2 = 0;/ H, Z% i8 [- L( S
- 3 m M+ c& U; I9 X) k" i
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ w" \! T8 S. N6 A! n
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* ~' K! s* i! a- ?* p8 ~
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 d. }7 t7 b4 ] I& a' m - % \. o' |2 v- x" ]4 [: j
- dma_addr_t dmaphyssrc1 = 0;
3 Q: D/ X& D& A9 m( g - dma_addr_t dmaphyssrc2 = 0;6 K7 V L1 X* e/ [
- dma_addr_t dmaphysdest1 = 0;6 v' |6 e' c" s
- dma_addr_t dmaphysdest2 = 0;
+ m" ^. E; g) x: `" a7 K3 k( j
+ F& ^& D5 p* M; `- f* p! ]+ f- char *dmabufsrc1 = NULL;
6 J' _% ~, D' a: t - char *dmabufsrc2 = NULL;, K J, G5 j( t V- k8 K9 `5 z
- char *dmabufdest1 = NULL;
: P0 C- M* B5 T* ~5 d - char *dmabufdest2 = NULL;; I2 D- J8 U/ Z& [% }* ~
- / S% E7 P& M D. t& r' g9 k6 ?
- static int acnt = 512;/ t* ]# W4 I* N
- static int bcnt = 8;
; I' B x7 M; B4 s# M3 N r - static int ccnt = 8;
7 k1 C* q1 V. d
5 k: h$ {& P+ U4 a, S/ K' w- module_param(acnt, int, S_IRUGO);
" }6 p! l( z! G" b ]! l6 i% U - module_param(bcnt, int, S_IRUGO);
5 b. A! D8 z5 l: L4 H2 o0 q3 { - module_param(ccnt, int, S_IRUGO);
复制代码
( z( D3 G- P) j3 {$ x
# U% Y9 l, V5 s8 R. p5 K 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用. X: O1 _7 K+ D& \$ P6 v7 h
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# \+ ?* n* ?7 _7 d/ @
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" T5 j7 V3 ]2 w# k/ \ K' B' P; n5 E5 X% k
/ y% }2 n- C, o4 Y8 Q7 m
|
|