|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
& Y( H3 n# Q. w$ R4 I W5 k- [code]EDMA sample test application5 D. B* C8 V1 D4 a& f0 Y
- /*9 {: M% F0 v: {- h, T9 R7 z
- * edma_test.c
. Y0 ?4 U4 W# @) y1 r - *# w5 y! A4 C) T/ a7 W
- * brief EDMA3 Test Application' X" i1 @: l; J; u4 d1 P+ I
- *
& q# B. S) U. k2 d5 k - * This file contains EDMA3 Test code.& T$ R( D% |, Z' f U1 Q5 d
- *
/ U1 j* o' h& @0 J3 p - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE2 P; i# K9 k7 G+ D. ^/ k5 f' W6 Z
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
+ l1 p+ x! M( W4 T( f4 } - * TO CHANGE.+ ?5 k1 v! B: Z& P
- *
- z( ]+ ?+ j# d; _9 H; @# z6 @ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/7 m, m$ |' c* z
- *3 C! e1 c6 u; R& l% { [) m
- * This program is free software; you can redistribute it and/or
; ]- a! e) S$ X, M - * modify it under the terms of the GNU General Public License as0 ?- H- q8 E. R
- * published by the Free Software Foundation version 2.
2 t: I+ t8 @: f& j& C - *; i! ^$ C% [! a+ u, }- Y& ?
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
% G7 I1 `5 Z$ p, }; D5 [4 o - * kind, whether express or implied; without even the implied warranty$ V; t! z% r' g
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
( A$ O) y: V" y. o3 \1 }4 C8 D - * GNU General Public License for more details.
2 i- f" O$ [/ H Q& e - */
1 H; E$ W5 l6 E1 |; O
Y' q4 ]. d; m" k/ Y' ]! E: c- #include <linux/module.h>
' M- @# A/ K5 T' O - #include <linux/init.h> e( F4 T+ ~' z; P
- #include <linux/errno.h>5 Q2 n; R& Y" ^. p6 D9 S
- #include <linux/types.h>( G8 W! q: i( h, ~8 r+ k
- #include <linux/interrupt.h>- T* _5 q$ `1 ^' N2 A3 S1 s9 C( j
- #include <asm/io.h>9 C8 I1 t. p! V6 N( W
- #include <linux/moduleparam.h># z8 {& f$ @+ }! g. g
- #include <linux/sysctl.h>
# i: V# i1 u1 b* U - #include <linux/mm.h>* y3 u+ Y# z) ^% f1 r. y& P
- #include <linux/dma-mapping.h>* I k$ U+ [: U" j5 p
2 D# r3 q, [, q3 C+ f- #include <mach/memory.h>. I( G. r* o, C) A8 \+ h
- #include <mach/hardware.h>7 i! s2 O. O0 m
- #include <mach/irqs.h>, S& i! |: E0 [; A& X
- #include <asm/hardware/edma.h>2 X: E* o3 R' u1 Q4 \6 h3 r a" L
, G! a7 M6 z5 K( z) @$ r7 A' \- #undef EDMA3_DEBUG
. a7 F$ v" R4 O; h3 B4 e - /*#define EDMA3_DEBUG*/
1 P6 a0 H- ?* c) S' A. _; z$ y - ( I# p& C' r$ z$ E
- #ifdef EDMA3_DEBUG6 d! N7 b. P. t1 B4 y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)' P9 n) h3 g8 q$ v7 }1 I
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 s4 j6 R+ ]# J5 U - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)# ?& B- P' M S, U' R, _$ g
- #else
- i$ V4 ?. r2 f* ?' `& j - #define DMA_PRINTK( x... )
: W/ v) I* d8 j' ` - #define DMA_FN_IN
6 M/ P# i% ~- i0 b4 G' x+ ^ - #define DMA_FN_OUT
: N% F: S7 \9 L0 @/ c' z2 x - #endif
9 V+ `6 }% W& C' X q5 G
% ^4 i* B" V' \, _- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 a& ] L, L5 h1 r8 @! l - #define STATIC_SHIFT 3% R0 \/ Z2 [% V
- #define TCINTEN_SHIFT 202 `6 J: f0 v/ Q
- #define ITCINTEN_SHIFT 21: n+ ]8 e. L8 e9 l' z9 B, u M
- #define TCCHEN_SHIFT 22
& O m7 X0 h- j) `' @- o- U - #define ITCCHEN_SHIFT 23/ }+ ^' _! t* _2 f$ s$ d
1 ?; u8 n: e7 ]4 q7 W" W8 J- static volatile int irqraised1 = 0;9 r. l L# d$ Z1 n
- static volatile int irqraised2 = 0;( `: V; e$ q0 `+ t8 j2 U2 w% p! m
6 V' U) M+ ?- U9 ^! p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
a: l3 u7 M$ i4 e7 w; h' O5 i - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 k, K7 Z% W5 C+ J7 N - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& O2 J: \) N" k5 p. V6 }) o
- o1 @* ~. I. W, I1 J$ I- dma_addr_t dmaphyssrc1 = 0;
# f2 ~7 q& x4 D1 S - dma_addr_t dmaphyssrc2 = 0;7 t+ I! J' }; l3 b
- dma_addr_t dmaphysdest1 = 0;
% C t# H* k3 j2 u2 d - dma_addr_t dmaphysdest2 = 0;
& A3 y4 P- a- V1 A - ; a( v" @# n5 Q! q8 U& ?; U: d) n
- char *dmabufsrc1 = NULL;" O2 N3 o z; g
- char *dmabufsrc2 = NULL;
& q, u& z6 a& m. L! V; L - char *dmabufdest1 = NULL;9 W2 J% m: B' m ]; ]# Z7 X
- char *dmabufdest2 = NULL;' v. F" H- f5 n5 E8 w
) y4 V9 n8 o$ C. A8 M/ w' _- static int acnt = 512;
+ J' G5 G# i4 z& O) d. u - static int bcnt = 8;
2 F# s# b1 C9 O0 [* S0 k - static int ccnt = 8;
* S# z* e* H; \; U0 _9 {
; L# h$ k, A: H# M8 e- module_param(acnt, int, S_IRUGO);, n+ a9 g( D$ X2 x* m$ a
- module_param(bcnt, int, S_IRUGO);
! N2 l! S! s0 ^& y( @ - module_param(ccnt, int, S_IRUGO);
复制代码 9 z8 m$ z# [6 V1 N
5 r+ i: t- k; d$ l( x
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用) `0 [$ U3 P5 i! J0 E' N
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# F0 z& I) _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
# `2 p0 [) M# r$ o L5 V. V3 Y- e9 U' q. J( w
; r( ]" ?3 ]7 E9 U9 G |
|