|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 d9 j: o+ f4 V6 J# A2 C, P- [code]EDMA sample test application4 s, Z' w/ F. U" a8 M. G, R
- /*
( \; [ E9 |5 i0 J8 G; N n - * edma_test.c
* ]; R1 Z6 B! C. M - *+ R$ m. S9 n5 G( ?8 m" J$ L) \- k
- * brief EDMA3 Test Application
' o5 a$ H0 V' G+ \ - *
; E! B# J3 r! v! T7 p" Y - * This file contains EDMA3 Test code.; G0 M' M+ j# D( d# o
- *
, N$ }$ B4 D# v3 t8 h - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 ?7 X# I0 Z* D! v& Q - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. R" @' n5 L, f! q8 T/ d
- * TO CHANGE.# ~0 |8 ?* L4 p9 r
- *
3 R9 W# r6 k( [, S, S - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
: F, P; |2 Q" q1 q: _ - *
; G' R! W) q! X8 p% ~/ j9 x - * This program is free software; you can redistribute it and/or
; q/ w- V: V% `2 E3 u; J" d7 I - * modify it under the terms of the GNU General Public License as% O$ x7 q& M1 p) d% o' L
- * published by the Free Software Foundation version 2.
& i' `/ |8 {: J {6 | - *! s0 t6 I; T/ L3 ]/ u
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
: @8 n8 W5 @7 Y7 e5 @ - * kind, whether express or implied; without even the implied warranty
2 n- z$ K0 g2 ~/ ] O. D! y - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' o# N: [1 T7 u
- * GNU General Public License for more details.
2 S, I( V% P( A, Q - */
" _( [) o4 O* I& ~
$ |$ C2 A& R! V' Z! Y: L- #include <linux/module.h>
' W: l$ p4 A% J0 k) g! [ - #include <linux/init.h>
0 r" G. L: F: b8 x$ i - #include <linux/errno.h>
M0 m) \- ~- h - #include <linux/types.h>8 ?$ w0 L, M) F; I8 v4 D) X
- #include <linux/interrupt.h>' N# J" @' ^$ m7 B$ C; p. G [
- #include <asm/io.h>
% m u- j0 r8 A9 ]& ~" C - #include <linux/moduleparam.h>
& s. V, }5 Z- \% @4 y - #include <linux/sysctl.h>5 q6 C! x8 p: m, }4 {/ L* N
- #include <linux/mm.h>
; @( t) ~9 [7 }' z" ?' A4 r8 i - #include <linux/dma-mapping.h># a& T8 R5 i4 P$ H) [, S9 ^
* p+ B: l$ j7 d1 U& O( I9 s- #include <mach/memory.h>, E) y: n# [0 E, ~+ t/ i/ I
- #include <mach/hardware.h>
. H1 a0 ?% M; }% C - #include <mach/irqs.h>
6 @8 q9 x. ~( ^. x9 W - #include <asm/hardware/edma.h>
0 K! ^% X6 Z. c1 M - 1 d F U' U4 i7 P% F& [/ A
- #undef EDMA3_DEBUG8 g Y! P9 b% z4 i: R
- /*#define EDMA3_DEBUG*/
7 ^ }( b% X0 V' _8 O - . m* P- j2 J: Q, G) M
- #ifdef EDMA3_DEBUG: A8 D" ^! P# j; C! R2 }1 i |2 a
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
0 G" o( N2 d, ?% E' f - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ C# g+ C: q2 h( g - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# ?1 N& }9 L& @. A- n7 t- K" ? - #else
& ]. [9 y0 u+ q0 O( m# z& o* X - #define DMA_PRINTK( x... )! w7 E' p' q, b" A# O/ j
- #define DMA_FN_IN
' p! a8 U- {( L0 a, r5 v - #define DMA_FN_OUT2 _. L& T" s3 R' ?# n# M
- #endif5 t! e5 T+ Z# g U3 y+ t- j' v, J
- 5 t `( |! F2 g1 W$ _
- #define MAX_DMA_TRANSFER_IN_BYTES (32768) ?4 [7 l+ ?% w
- #define STATIC_SHIFT 3+ t+ \/ j8 d4 P2 c Y ^
- #define TCINTEN_SHIFT 20
; O' I- C8 B$ g0 }5 ^4 [ - #define ITCINTEN_SHIFT 219 G2 w/ ^9 R. w) P( E& i
- #define TCCHEN_SHIFT 226 P$ k# Y; a$ D: F `
- #define ITCCHEN_SHIFT 23) r" _" E; k8 e% W: k5 n5 Q7 s
7 b! R: l8 w; R7 {4 a2 Q# n- static volatile int irqraised1 = 0;
1 q' u% o3 ? z2 O: c U - static volatile int irqraised2 = 0;6 }& ?- Y- K/ ~! ?
- 6 D( b \0 C4 _9 b* F4 F
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( U$ e ^$ s5 ]8 ^, \$ i1 {
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. O& Y/ S/ p8 T3 T4 n
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 f- [ S! m x3 \. s( D. P
9 Q) w8 D, l7 E7 n; f" M. B- Q- dma_addr_t dmaphyssrc1 = 0;
- W c- R. ^$ U" Q - dma_addr_t dmaphyssrc2 = 0;
: Q+ _1 ^, @! f) y9 B' }$ ` - dma_addr_t dmaphysdest1 = 0;
* |7 i1 y- A8 w! y2 p6 A - dma_addr_t dmaphysdest2 = 0;! G1 h2 c% H" \) s
- # F3 T. B* b; P$ L
- char *dmabufsrc1 = NULL;
, p. D/ N5 L) M) D! V, D - char *dmabufsrc2 = NULL;
$ E3 a! _/ N! i) [: T5 x9 M5 Z - char *dmabufdest1 = NULL;
: A$ T% w* F3 F- P - char *dmabufdest2 = NULL; O, K. ^1 n7 |" [
, v U3 i1 w! ` s- a* X3 K' [- static int acnt = 512;
$ |- L! T+ {' d0 C0 x - static int bcnt = 8;6 [5 H0 c* L4 j4 I6 h0 V5 O; n
- static int ccnt = 8;$ N9 w* G3 z+ S
- % ~" j0 Z0 Z! d
- module_param(acnt, int, S_IRUGO);
' A& |$ P; e% [3 g2 B( q - module_param(bcnt, int, S_IRUGO);8 ^: E. P% O$ \8 M; c. s0 [! f
- module_param(ccnt, int, S_IRUGO);
复制代码 ( I* ^) R& ]# V" y, R* W8 u* k
* d( Z- g9 Y" @9 I 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用* D) _# ^4 x% W
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 \4 E2 F$ y% o' G T$ c
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
; K) ]: T {0 ^/ C2 Z) w8 W! L. P5 A' n3 @
; R* ]& E- L* }9 O |
|