|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
1 j2 Y; S" Y$ V- [code]EDMA sample test application
( S) A( X6 y6 l) a, a2 A - /*
* F. F, R, m% @* n - * edma_test.c
! F& W2 L) o0 `) U - *' ~* }6 l, Z6 d, q! [2 I7 v# q
- * brief EDMA3 Test Application
/ d8 ]$ q$ b1 {0 N4 S1 C - *, `8 c: R+ d3 C+ T4 s4 {
- * This file contains EDMA3 Test code.' [9 e! u7 C: s& S) D% ]
- *
( O; J" Z8 n# u. {, y! B - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 D5 I9 Y4 n1 x+ k) D6 i - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
+ y1 t/ h' I. i$ t9 l - * TO CHANGE.0 ^% U& {8 p0 A6 p! x+ z: ]
- *
7 y1 F3 j7 |1 z9 r% }8 ?) Y - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" x$ x1 T7 S3 b z - *
6 J" `8 q7 C2 @# p: X - * This program is free software; you can redistribute it and/or# a9 U; q+ h1 V+ u! Q
- * modify it under the terms of the GNU General Public License as
/ O# u, G/ I( S - * published by the Free Software Foundation version 2.8 r/ t Q0 F+ `& N
- *1 L7 ~" e" m7 r% v
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' k9 O b' N; B) y* s - * kind, whether express or implied; without even the implied warranty
" Z. c9 \6 ]" \; }: e# { - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ [% Q( W1 y, A; N! j$ s
- * GNU General Public License for more details.
5 Y: s. @7 m m8 G) S" I2 h - */
0 B# v" }$ ]: ` - ! K9 n* v" i& k, O
- #include <linux/module.h>4 V6 y4 h. O$ m6 B. J7 @0 @
- #include <linux/init.h>8 i [2 G+ X% E! z0 F
- #include <linux/errno.h>
: ~& N' p; a7 h6 K" [ - #include <linux/types.h>2 [/ N% v- P6 U1 D5 v k2 h
- #include <linux/interrupt.h>, u8 r& {9 r( X. W7 e* D: w) c
- #include <asm/io.h>
6 \4 ]2 {9 E# U - #include <linux/moduleparam.h>0 v o, e$ n) i. M5 c
- #include <linux/sysctl.h>5 B& F* t6 U/ D8 l1 M9 k
- #include <linux/mm.h>
% `4 K# P' i; F% w* u6 i - #include <linux/dma-mapping.h>+ \+ P! P# O5 @) s9 ~
3 i7 W7 F: P5 E4 i( a( T, [+ u6 d- #include <mach/memory.h>
3 s, C; c1 b- {' r; A. m9 w - #include <mach/hardware.h>* j9 y/ Z4 ~# m- r, o
- #include <mach/irqs.h> b% v3 d$ v) \; T7 p- l0 v" x
- #include <asm/hardware/edma.h>) ]% B: z; G) H; ~4 |* f
: q) x' \& I0 | v- t" z- #undef EDMA3_DEBUG
* r o! J3 N- W! o3 ~ - /*#define EDMA3_DEBUG*/* ^$ x4 X |3 r0 d6 e9 ?# h
- 4 B/ f3 q% Y9 d$ ^; t8 Q- W* x
- #ifdef EDMA3_DEBUG$ y# O: c7 X. [# P
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)) f5 N0 Q& L. t: F. F) t" L6 j
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)- B ?' `! s% h" n
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) z9 K0 S) e$ F3 ^( {0 W5 o/ X, R
- #else' c5 f3 P* o3 N' H, H
- #define DMA_PRINTK( x... )4 d+ R8 E0 z% E9 ` t" C
- #define DMA_FN_IN
# m2 z% Z6 _# A7 k/ {' X - #define DMA_FN_OUT
1 ^" b, R8 j/ @2 }$ K% I& M - #endif
. M: D4 Q/ c/ w7 ?% ~
3 x2 w Z2 M& G$ i) e/ Y' B- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
; A+ \1 _" L6 x - #define STATIC_SHIFT 3
1 \4 [& l! d4 G8 b$ D - #define TCINTEN_SHIFT 20
; x3 O6 @4 c" Z3 @! b( u - #define ITCINTEN_SHIFT 21
% `9 a" q7 R' R. `$ k - #define TCCHEN_SHIFT 22
8 E) {* m" x8 i$ ~5 Z - #define ITCCHEN_SHIFT 231 M. K: y: i5 `' k7 [
- : k; s; h' p( d3 Y$ A
- static volatile int irqraised1 = 0;7 C4 i c) p% |! M" K
- static volatile int irqraised2 = 0;
- Q8 A1 K' U; i- G5 `4 x% O - , E/ N3 @2 X* s* y( j
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 T' q. C- L% `2 L
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ e: F: [) Q: k+ A - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); v# Y% C: ?" Q- o+ b0 R0 }
- ' t2 }" f) Y. T' e |0 |) C* o
- dma_addr_t dmaphyssrc1 = 0;
, @% T2 ]1 `) h6 H1 Q$ | - dma_addr_t dmaphyssrc2 = 0;
& _- j% u7 d) _ - dma_addr_t dmaphysdest1 = 0;
& b' P+ D- F" e - dma_addr_t dmaphysdest2 = 0;
8 H9 V3 s* o% V3 L; f- S - # Z6 M7 v5 q G0 A0 G; |; w: g d
- char *dmabufsrc1 = NULL;9 E; K9 B& o& K$ C0 P( I# Z/ t
- char *dmabufsrc2 = NULL;
% g' H! I: L' G2 a - char *dmabufdest1 = NULL;
; G5 x9 U2 B/ ^3 T1 e - char *dmabufdest2 = NULL;% \4 |3 B5 }2 h' A- Z
- * l6 @( p8 ?# z0 ~. M
- static int acnt = 512;
, R3 u, T4 `& Q- M; T, h - static int bcnt = 8;
9 x7 u+ Q' R$ ~, l$ ^' ?+ N: ? - static int ccnt = 8;
* R9 _0 q9 _+ J& p$ ]4 h
, m0 X! c Q3 y) F- module_param(acnt, int, S_IRUGO);; z; ^5 Q, E% N! Y# X# g7 p
- module_param(bcnt, int, S_IRUGO);
& x" F- u9 f# w" c) o! I - module_param(ccnt, int, S_IRUGO);
复制代码 ; ^% x0 f2 e1 f- ?: h. |
% z3 @$ M7 _4 m9 Y6 `' @
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 l5 T: F. I2 Uarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- R5 S# j5 w9 a( d" \6 i5 G q 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! ~/ W f8 \6 O$ ~$ I6 w* {
+ N' r" x2 \; M( g
( x) f8 Q' P/ L- D1 V, [ |
|