|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 _0 p' @* D3 L0 J8 S; T1 k- @- [code]EDMA sample test application: B/ x6 R1 W) U7 _
- /*
1 v9 r* |* q9 H0 z' v. T - * edma_test.c
$ Y& l5 s ], z9 ~, G - *
6 ?+ K/ q/ P/ i% T" y& U* F - * brief EDMA3 Test Application* m, J( o% M" D9 I$ H
- *; A% ^) B, j$ a9 _/ v/ L2 R0 F1 @
- * This file contains EDMA3 Test code.0 T- ^8 @% m3 T
- *
+ Q5 T2 Z0 l, K$ } - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE, N' J* C9 h/ ~0 n. K. b8 z/ w# P7 G
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
" M: ?* X! ~7 y - * TO CHANGE.
) K6 n0 \6 `! g/ s+ e! J8 A7 ~& j - *
5 N6 L! j6 u, I/ A; @5 g6 ]7 W& D - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
( E) P* h) w }+ L" p - *
& d3 b+ w: t- Z7 ~& b - * This program is free software; you can redistribute it and/or0 z/ K& y( ^% C) h. }; v% \( _/ j
- * modify it under the terms of the GNU General Public License as/ j1 N3 `* N0 \
- * published by the Free Software Foundation version 2.
0 x' N6 J! P% i4 N1 T - *, V: {" n7 }. @2 Z2 T" E
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' O8 v$ O" ~& k* k9 o5 E - * kind, whether express or implied; without even the implied warranty: e0 w- ?: Y% ^0 h
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* p8 [- s1 ~. k i
- * GNU General Public License for more details.
+ I8 `8 w) [) c0 u8 A: m& y/ w6 c - */
& Y8 n% B5 C h% i& u% z. y1 A
' Z" ?5 r: O0 X g. M- #include <linux/module.h>
: u( [/ z1 f/ a M/ Y* Y, m, J$ Z - #include <linux/init.h>
% L9 J" |- t7 [4 b. H - #include <linux/errno.h>! z" P$ ?, f6 r I, f* |" ]
- #include <linux/types.h># d ]$ s, [+ ^( S
- #include <linux/interrupt.h>; S! E+ I4 y4 D5 n3 p( H; T1 g; Q3 s/ Z
- #include <asm/io.h>. z" \- v5 `+ e: x f
- #include <linux/moduleparam.h>! C \* a& _; W( h1 G; [, ^
- #include <linux/sysctl.h>) N- e& h1 u$ E( G* m
- #include <linux/mm.h>
7 A, D! i* Z+ u7 U/ A. n - #include <linux/dma-mapping.h>
7 }( G: X1 j+ ` - : c. f9 h: J& B+ ^/ R6 @
- #include <mach/memory.h>
1 C/ A. m/ c$ E( J. k8 J; p T f - #include <mach/hardware.h>
2 X$ E. Q5 x9 E$ X5 w$ C - #include <mach/irqs.h>2 L/ ~) C; ^, D2 A, b
- #include <asm/hardware/edma.h>7 [/ u( D7 \3 p9 J0 @3 u
- 6 r2 M' I6 _# t1 a( ^. d- Y
- #undef EDMA3_DEBUG/ Y; n# }! Q' F S+ J
- /*#define EDMA3_DEBUG*/
% s5 L$ w" q u7 H" P+ M& g4 ?! r - - i6 D3 B6 i; m6 ~$ q8 c
- #ifdef EDMA3_DEBUG( t7 w# O$ e" l4 P( s
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
* u# ^) a, T. Q) m - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)/ q9 a8 |; _% b8 X. A
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
9 e/ G; a* ~3 G" F/ ` - #else
# D1 P* i/ B" D( j2 Z' a+ Z: T4 n; N - #define DMA_PRINTK( x... )$ L, c1 o8 Q& K; ^: N
- #define DMA_FN_IN
" E0 d h& {" E& a8 b4 _# o; E2 g - #define DMA_FN_OUT
) R3 ~8 o2 l) I9 c6 |1 _ - #endif
5 P; T2 y: g2 q, ^# I' u% ^7 A
) g4 M a+ s/ r6 c2 e2 S+ ^- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' w: T. V# ]) D% Q6 l' H/ d& ^
- #define STATIC_SHIFT 3
& x! M9 R" g% U% u5 l - #define TCINTEN_SHIFT 20
( J6 T3 i1 l) I, b - #define ITCINTEN_SHIFT 21: v/ Z- F: [" d$ J
- #define TCCHEN_SHIFT 22: C) V2 ^* V$ M; d' \; w
- #define ITCCHEN_SHIFT 23
Y, n$ y9 f# d" Z k - # i4 j- o% U# t' @+ g# z5 {: b! c& \
- static volatile int irqraised1 = 0;* h% x9 I5 p9 p9 R) z! z6 z" t p
- static volatile int irqraised2 = 0;
+ M5 }5 k e- b7 I2 v: s# o& e/ F/ Z
' Z/ e9 r4 @1 T! ~* ]- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' y, S0 l6 A, Q3 W$ a" W# v - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
]. P2 s& X+ X - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 M' X: `0 R3 e. w) i' _( H$ h9 ^
7 W# N% v A& c' L. B) U- dma_addr_t dmaphyssrc1 = 0;: `. w- h0 Q+ m
- dma_addr_t dmaphyssrc2 = 0;
# |) h# ^# Z: l( k* G. w" W H) X - dma_addr_t dmaphysdest1 = 0;/ N/ m. Z/ U e9 N. F% l
- dma_addr_t dmaphysdest2 = 0;
* f/ m- B/ |: B - 1 [" N, g% a0 _% g- y+ j" {; b
- char *dmabufsrc1 = NULL;& U$ o/ p0 F8 b$ b) v2 G+ Q5 L
- char *dmabufsrc2 = NULL;
' ]+ {/ V# G) t6 b. @& A7 v4 W - char *dmabufdest1 = NULL;
, t( x- \( l! m- l9 ^ - char *dmabufdest2 = NULL;& X9 g0 W3 T# Q! j! J5 X% Z- L( I
- 7 o0 D) D7 \; m; Z
- static int acnt = 512;* I4 i6 E& \" h1 w3 f
- static int bcnt = 8;' x7 v% ~+ ~5 o3 W- m$ ^0 i0 Y
- static int ccnt = 8;
2 |# y* v, A% [3 V" a - ( e$ U% {9 o9 k0 W- ]
- module_param(acnt, int, S_IRUGO); z9 ?1 P! A$ H- F/ e
- module_param(bcnt, int, S_IRUGO);
- P" D4 d" ]0 N7 F2 f P3 k- h. _ - module_param(ccnt, int, S_IRUGO);
复制代码 6 g; d9 N3 a+ h
" Q1 b& y& Q. C: G' V9 ]( X4 @7 d 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- K5 a* C$ I0 R |8 u
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 ~. O9 [3 ]2 y# c; x* j/ c' J
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。2 [! ^0 b2 N/ [' \4 n- k1 z( q' S- |
( Z( f9 G: O4 `" l
( t N+ ?% q/ k |
|