|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
/ r5 V6 C$ r# n! I- [code]EDMA sample test application, h6 w' }3 v9 I A' b" m, K' ~
- /*
9 f |9 g& c8 B8 a. i& @/ O - * edma_test.c0 P7 v: C5 O+ ]5 ^8 I& y3 j5 ^. X
- *
' v* Z$ W. i6 N/ N4 t - * brief EDMA3 Test Application5 P! q; R- ]- C' t0 g; L! I
- *+ T* D3 R/ ~3 B9 ^
- * This file contains EDMA3 Test code.) x- M4 k/ X+ f0 a2 V: p |
- *2 W2 K) @: j7 Y6 Z5 F9 ~( _7 R* V* ?4 R
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
6 Z; ?/ ~1 A0 F+ n6 u' m - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT6 }# _2 X# E' p1 P2 x
- * TO CHANGE.
- n6 ?7 V+ G8 C" z8 s - *8 H# P( q( ?: N) O, H
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/, w) O1 m* W+ C I" D i; h0 m
- */ Q. c; x0 u( E& _
- * This program is free software; you can redistribute it and/or* ]0 h, w1 I; d6 C5 c' Q, G
- * modify it under the terms of the GNU General Public License as
9 n$ K6 g0 h, S1 q1 {* ~& J, h - * published by the Free Software Foundation version 2./ |, ~3 l8 |) a' w% x; Q! u
- *5 F% j+ C) `8 @! O
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 [1 O) Q w% i0 `- V
- * kind, whether express or implied; without even the implied warranty1 b5 ^( r% Q; [7 J; {# S
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 g9 p8 D6 z4 h6 `* `$ g% C - * GNU General Public License for more details. _) k7 A0 g6 Q) i# s
- */
6 n% T a$ E# p: }
( @' z) y% c- G4 f- #include <linux/module.h>8 p N! A" B% ?4 G; I
- #include <linux/init.h>
: N4 Y- g2 X+ G6 ]7 U; H - #include <linux/errno.h>
+ b; u$ s. A1 ` - #include <linux/types.h>
% `9 H# K1 \& {0 t+ {9 m+ m. \ - #include <linux/interrupt.h># \. g) L: x0 T$ v, R
- #include <asm/io.h>
3 X/ ]8 ~0 E: C! i" q; ^% {, a - #include <linux/moduleparam.h>- Q+ i% P) Q# D/ H+ ]" Y3 i
- #include <linux/sysctl.h>, F8 A7 y) N, A: `8 `* O
- #include <linux/mm.h>
3 I3 P6 }1 s* O) C" v - #include <linux/dma-mapping.h>
3 c* p$ ^) O. A8 p - 0 q& V5 H2 |/ i, d2 L7 v
- #include <mach/memory.h>/ Q8 U( J$ P) T& K2 q
- #include <mach/hardware.h>6 p9 V8 u' ? c7 U: u: g6 F
- #include <mach/irqs.h>
! B! \* F# m' N! ^- i) j9 B3 I - #include <asm/hardware/edma.h>
0 K& S* X# j) A0 U+ T5 O
% ~# W" h1 B4 x% j- #undef EDMA3_DEBUG
! s4 v" a) c% Z5 `3 ]8 [, D Y - /*#define EDMA3_DEBUG*/
' H& D& C( N4 m; | v' ~1 l; e - 0 F9 H p2 X- V6 S3 u
- #ifdef EDMA3_DEBUG
& ~7 |: W) Q( O& b( P- c2 ? - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)( A! k* ]$ O6 c* r$ e
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)( u4 k, ^7 _7 U# ]- |/ T
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
; O7 j+ m3 N/ t$ s% p- C& j5 k - #else1 R& w7 }, \( _
- #define DMA_PRINTK( x... )
! O/ }4 k% w9 q5 A9 e - #define DMA_FN_IN) u. U# \ j; k2 @' H
- #define DMA_FN_OUT5 V+ p" U2 o, X: ?' f: {1 K
- #endif# ]! w" N C( O( ~. ^! z d9 b' l
- # M, z5 m* f! [ l+ u$ ?' M
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)6 ]$ h1 N) ?: j
- #define STATIC_SHIFT 37 {, e( c6 @" J" m C1 Z& g
- #define TCINTEN_SHIFT 20, I1 C }, M2 E
- #define ITCINTEN_SHIFT 215 }; w1 N# F8 C
- #define TCCHEN_SHIFT 229 _( ?$ H9 L; E# t2 i7 Q7 j
- #define ITCCHEN_SHIFT 23
% A o2 _( I+ d9 w8 f) ~$ c- [ - 6 p! u/ R' k9 f& Z7 d/ F6 q
- static volatile int irqraised1 = 0;- n& N4 e2 s* X+ j9 u
- static volatile int irqraised2 = 0;; R# H/ [/ @ n# I( A0 M1 Y- F3 \
- * V% Y' U; k, J' w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 s8 R5 k! v! `( q$ |/ h
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ o) _- R8 X9 s' o$ G% n& K# l
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 Q1 M4 Z' e e9 `1 o: e
. B& Q# U3 Q! `! ?- dma_addr_t dmaphyssrc1 = 0;6 N s3 c0 |7 }9 n' R
- dma_addr_t dmaphyssrc2 = 0;! G) @$ M3 x5 p+ T
- dma_addr_t dmaphysdest1 = 0;
2 Z8 L5 k& o" s9 S/ k, y+ R0 c$ A - dma_addr_t dmaphysdest2 = 0;
; i! m8 l5 t6 Q5 @
! w! {3 L2 N/ u8 n4 v- char *dmabufsrc1 = NULL;) A' k& a% ~) \2 B
- char *dmabufsrc2 = NULL;
+ R5 r. D1 Q, M: U" _) n - char *dmabufdest1 = NULL;
9 ~+ {9 m6 W c' ~) p- y - char *dmabufdest2 = NULL;
) P7 J8 y, m/ s) U6 N - " \( ]- |0 l% @1 S: m$ c6 A
- static int acnt = 512;
/ S. w4 E' m# _ F8 k- l% B6 t - static int bcnt = 8;% v5 h& C) C6 Q* k3 K& n- m! v2 w8 M
- static int ccnt = 8;# M3 s5 ^9 i, I& C6 E) P
6 ^7 _5 G D3 Q" J, Z4 u5 u- module_param(acnt, int, S_IRUGO);' G0 d, V4 n! ^1 P5 n
- module_param(bcnt, int, S_IRUGO);5 R6 ]& u& N" f1 n* ~, v; [" X
- module_param(ccnt, int, S_IRUGO);
复制代码
9 o" a$ c/ Q8 B! |7 B, S p. v
- C/ j* V( |9 |- r5 C) f 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% T [, T$ S) A) E' j* [) {8 l8 r) x
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ p( u% ~' I, k$ w
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。9 D& r3 g6 U2 |, U3 c) r; y
7 b4 i# g7 D f' [7 K4 E! O+ F7 C; w4 w! G0 K
|
|