|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ E2 w/ ]+ [" o- [code]EDMA sample test application4 z) z! E1 f7 }: Q. ?
- /*; N$ d5 K; T3 U
- * edma_test.c
5 f$ ^/ b; v9 U1 Z, X - *) c, \7 A4 B2 }$ Y
- * brief EDMA3 Test Application- \0 k% [( @- z* e. J7 o2 H5 q& }
- *1 \9 R6 e D! a, Z0 u
- * This file contains EDMA3 Test code.6 V. v1 B! k8 Y& S
- *+ C- }( p5 e) P2 T$ K; c* c2 w
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( ] v8 M$ t+ W* K! ] - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
( p- w; M; T$ w3 u# j - * TO CHANGE.
3 `, O: |8 Y7 b) k$ r - *1 b. z* \. f' \1 I
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 [$ K. K4 b& O" y8 x - *# y* B! J0 y5 b0 v& O
- * This program is free software; you can redistribute it and/or/ q8 d7 C% }! N7 {: ^
- * modify it under the terms of the GNU General Public License as- ~: p+ c6 H- W- C" F
- * published by the Free Software Foundation version 2.
; V c o6 @% E+ |- f5 m - *
( A: ~- E0 c o7 T& t* K - * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 y2 l/ X& Y7 A) a0 K4 v
- * kind, whether express or implied; without even the implied warranty# l* p I: z, ^. f
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the) Z% S) A e, v9 M" W
- * GNU General Public License for more details.( w& ?! Y! t% c" t8 t% p
- */
" j& d; A- J8 C5 \
8 o- }$ `: _# G- W& f6 k7 y( d0 B3 e- #include <linux/module.h>
2 V+ ?) _8 [. l) i; C. r6 A1 x# ~ - #include <linux/init.h>
% k. {1 }* @# y- u5 |7 o* M - #include <linux/errno.h>: I5 C m# c% L% }: C
- #include <linux/types.h> r& J4 W( q: o( N% t. {% O
- #include <linux/interrupt.h>
6 y3 F/ @7 w4 G0 d( r( E( a - #include <asm/io.h>
2 a5 M5 {$ }* j+ P" V% w - #include <linux/moduleparam.h>9 z# P! y# G, T' d; d1 K S
- #include <linux/sysctl.h>
# p9 _9 B+ n7 i# P$ k2 k - #include <linux/mm.h>4 d) k2 C6 k. I" l
- #include <linux/dma-mapping.h>
% ]8 Y V; ?4 X4 X g
& Q( x# u L) ]$ Q9 |: b9 g3 Z& K- #include <mach/memory.h>5 Y6 @1 \5 S! w( a. L
- #include <mach/hardware.h>' o8 @/ `. {1 B! `8 F: {
- #include <mach/irqs.h>6 C( n6 \- ^- h3 H
- #include <asm/hardware/edma.h>
" p( }0 h% S" `4 z6 ` - * [8 Y! L n- t- I- F& G
- #undef EDMA3_DEBUG+ u4 p6 M M% w* E2 F
- /*#define EDMA3_DEBUG*/
& u9 e2 m7 u9 J- g! p) K$ g; h - 1 A9 t8 a2 ^) m* n5 x! k
- #ifdef EDMA3_DEBUG/ ^- B! v! I, \' B/ q- l/ @, N6 h6 U
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
6 s H3 ?) A- k& i1 E - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
0 p' Y+ L ~+ Z9 e ?2 R4 Z$ m, r3 J; ] - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
' ]" b0 x) y4 _5 f" C+ t - #else
+ x: \. m$ g( @' C, H - #define DMA_PRINTK( x... ). S* |* c3 ]( b8 F% r: V# G% z7 k
- #define DMA_FN_IN
! n4 E7 ?5 ?4 d+ `+ z" A2 w. D: c - #define DMA_FN_OUT
% Z+ L' E+ t) b9 F; p- f) {9 h4 ^ - #endif T! C- B" V7 ~
- 9 v+ K& b" S# g9 C; ?# q
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
! L. W0 e7 ]9 i. Q/ [4 t' N" ?5 | - #define STATIC_SHIFT 3
7 C9 H8 g& G: B' H) y1 k - #define TCINTEN_SHIFT 20
* O$ v- d4 W2 `( J5 ` - #define ITCINTEN_SHIFT 21
& \# e: C) W) P; b; V! I - #define TCCHEN_SHIFT 22
: ~1 N- v1 i7 u - #define ITCCHEN_SHIFT 23- B6 E% G! Q' m% A; j& ? T5 ^
- 7 U- n e Y0 D, ^
- static volatile int irqraised1 = 0;' a" |: k$ a3 W2 P8 M: R5 y+ u% B
- static volatile int irqraised2 = 0;% x. X: j6 H/ U- f6 J& E+ @0 D
- , v& R) L- U( C `, `
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) r$ H( P- N: {# ?+ o# G& ?4 k$ P
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);3 ~2 Y) a: f$ u
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 r2 c" q. O; T: V y3 X. K% U
1 i$ m& J. M# t7 v- dma_addr_t dmaphyssrc1 = 0;
3 T7 {9 C4 F' y) S9 ^6 U - dma_addr_t dmaphyssrc2 = 0;
9 F- a- P' v- T7 a4 B% x; p - dma_addr_t dmaphysdest1 = 0;
4 D1 x# o2 q$ I6 X0 } - dma_addr_t dmaphysdest2 = 0;
* G- y; W) T# c - 9 s1 a1 y% r3 Q" z- ?, X
- char *dmabufsrc1 = NULL;
6 R D: \5 {* r u- H S - char *dmabufsrc2 = NULL;
7 w( l: t. e$ ~3 b8 G8 T - char *dmabufdest1 = NULL;0 S3 g- z. p _5 k) W a* B
- char *dmabufdest2 = NULL;* {/ f: L( B! ] k: J
* H3 }# p# _4 F8 S) b- static int acnt = 512;2 m9 {1 ?: c+ x) F
- static int bcnt = 8;% B9 B" F$ p+ }" o, j& P! p' j
- static int ccnt = 8;) P# t! m9 r& M' ?7 h
- ( X4 W* X- u# Y1 |
- module_param(acnt, int, S_IRUGO);2 @: I: I3 }; l9 W+ m. k2 z* |
- module_param(bcnt, int, S_IRUGO);
0 f- {9 c5 o; a6 `6 ]- b4 ~ - module_param(ccnt, int, S_IRUGO);
复制代码
1 E. Q& ]* v0 t& E7 ?% Z; z
1 g5 m- V/ c" m* N9 g 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 v5 N, N7 k8 J0 _$ Y( xarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。$ B' r+ Y( m' A
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。) i: i& U; M1 n8 `; ]$ n; a
^3 V! ^' X: D3 }4 W$ ^0 X% a
8 V y% S/ \$ ]: A1 c x/ B |
|