|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ; c) ]0 A5 |9 {6 _
- [code]EDMA sample test application
: @: w% s5 a+ \/ P - /*
- |. O/ x/ ~4 H- C( G - * edma_test.c9 h6 X$ x6 t- p
- *
0 I+ }. v8 C1 O# o - * brief EDMA3 Test Application
6 c7 Q! A1 z5 G( Z! p3 z* l" N - *
. ~: @6 P6 Z2 | - * This file contains EDMA3 Test code.
! `& r* ?/ X5 [7 R - *# R' u1 G4 a% [& S: Q: A1 x& D5 y! q
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
q& U: t6 l$ v% E6 ~6 z3 Q, J - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
8 {& @% t& R. u' }, {4 g- K J - * TO CHANGE.
7 {) I) h8 c- U! v5 J @ - *( W9 b$ |& v! G0 {6 Q
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/. B' I* i. V8 M+ M3 q1 b+ @
- *
$ r2 P, f- X8 k' B6 N' W/ v' r - * This program is free software; you can redistribute it and/or
* H/ T7 S7 s& X( l6 \8 m- g - * modify it under the terms of the GNU General Public License as
! ^2 E6 J, G$ Y# t/ e& C - * published by the Free Software Foundation version 2.4 l: ]7 e3 B+ p; s {. z
- *: f5 d7 V8 x3 D# S1 d/ a
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
* b. o8 N. @! g: s, O* q7 U6 g - * kind, whether express or implied; without even the implied warranty
" h# m/ Z1 |* N ~6 _9 m9 U - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7 w+ X8 Q0 e1 F$ `* C: k0 y& h - * GNU General Public License for more details.
# ^& E; y0 x# [/ Y# V* V8 N - */0 `5 s- ]" ]5 g4 u) P' O W
- 9 l* G e& k! k
- #include <linux/module.h>
8 Q h3 a9 r9 H: h. D - #include <linux/init.h>
$ V# |# f5 \4 q( \. o( V# {* c - #include <linux/errno.h>
+ D; M4 J+ V9 ]+ S2 w - #include <linux/types.h>2 k4 G9 {' h Q1 S2 T5 T; q1 y
- #include <linux/interrupt.h>
! T- s& d3 ]$ t" ^. }) O } - #include <asm/io.h>
# i! }3 ~& _) m& q% F. y0 F# t - #include <linux/moduleparam.h>
' x& F) p c4 }/ {5 h, v - #include <linux/sysctl.h>9 E7 e- l$ R8 m8 M8 G$ G1 d( D8 r
- #include <linux/mm.h>8 D' V2 \. v( n0 w# E1 D2 F; v
- #include <linux/dma-mapping.h>
# L, ?1 f, a) h2 G - + y5 I! n4 ^6 Z
- #include <mach/memory.h>3 F* M/ M' d: v Q7 G& q
- #include <mach/hardware.h>5 d L5 w5 ~7 H& Q7 C
- #include <mach/irqs.h>
+ ^9 R. N/ D2 ^ - #include <asm/hardware/edma.h>3 y; |. F! z8 _6 U. o
- 5 j2 a! v6 @- s, @8 E& P; p
- #undef EDMA3_DEBUG
% {, ]. O3 o$ u# f - /*#define EDMA3_DEBUG*/8 ^. @/ B( K9 F6 K; ]8 }& W
7 V! G* o$ K% d$ l4 Q6 ?- #ifdef EDMA3_DEBUG# T P% h6 r/ r
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ e: n& ?, B {+ L5 \! }0 f
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)8 P' ~/ H: T6 g! ~
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). s, `0 F! ^$ J8 o2 x" X
- #else, B* @' H$ p6 J3 U* ^
- #define DMA_PRINTK( x... )3 _ h- Y3 u4 P) Z# C
- #define DMA_FN_IN( ~8 U S3 L: ~/ ^
- #define DMA_FN_OUT# n9 E" k4 R. E# e/ ]
- #endif
9 o" ]8 Z3 d* @( A2 G! s0 g; Q
! q4 P7 y7 m& ?- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
{; o; f: _6 F9 Y) a6 U - #define STATIC_SHIFT 3
$ L9 K& K: H1 ] - #define TCINTEN_SHIFT 20+ P( g" n1 c% K
- #define ITCINTEN_SHIFT 21
4 p! `$ _( O) E; e - #define TCCHEN_SHIFT 22, ?8 n$ @& M$ u, f2 ]# N% H( e
- #define ITCCHEN_SHIFT 23
- C7 P4 f/ u' D8 Q0 J( ~0 ?
0 h# X w- E* @' |$ D. b- static volatile int irqraised1 = 0;! P# l; P% `9 F9 }
- static volatile int irqraised2 = 0;0 g% ~1 z( k* b% J
- Z8 M% P8 i4 g# r/ p- P* a" ^9 l6 T
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" V+ w, \, W5 j A3 b( X# Q - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 M- X; u, I Z& e! e- y - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' [( q; }5 ~* F2 j - , w( f, |5 s! m" a& A
- dma_addr_t dmaphyssrc1 = 0;" H, m8 l. [0 O% a0 b" y
- dma_addr_t dmaphyssrc2 = 0;
$ m) L$ S- _0 d. z - dma_addr_t dmaphysdest1 = 0;) R0 E5 u4 Q5 J8 E ^# @
- dma_addr_t dmaphysdest2 = 0;
: H( x! o2 A1 R: u. y0 s; d- i - 6 I; }, G5 \ n( }. t% |; T
- char *dmabufsrc1 = NULL;
% }3 b6 ? d2 L% ]$ s7 B6 F$ x - char *dmabufsrc2 = NULL;
' J; p7 S& e6 A6 \# T- I - char *dmabufdest1 = NULL;
# m4 F8 J4 I1 s& O - char *dmabufdest2 = NULL;
! W. a Q2 L# l8 ~8 Q3 n
e1 r# Z( `& v! l9 a' r; |9 A# u- static int acnt = 512;' C8 I& P0 g* o, n( ?
- static int bcnt = 8;4 v$ u7 k% O% P; P9 y
- static int ccnt = 8;
1 L3 X- n% G3 E7 P
- u' d7 O7 d( |3 T0 s- module_param(acnt, int, S_IRUGO);' E4 ]8 r/ m8 i d1 z! L1 m
- module_param(bcnt, int, S_IRUGO);
5 S$ z+ r' W& Z; d7 A6 k1 d - module_param(ccnt, int, S_IRUGO);
复制代码 6 }/ G' d. \: |# {
2 a7 b- z. s8 c. ` 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用' @9 ^2 l4 T" n: A0 e/ B$ a0 j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
6 g* v: ]! t7 v% v% R 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 ]- Q' M+ }0 b+ [4 o
( r1 z, W, T0 C
* ^( |+ `3 X# r V |
|