|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 4 w9 }$ S! ^4 m3 Z( u. m
- [code]EDMA sample test application# b3 `# w) H* A
- /*
$ K; I5 x* Q0 E5 T% K/ e1 {! i - * edma_test.c
1 w1 z0 G. \- I/ z' c - *
# y* o$ n, d/ w9 C3 } - * brief EDMA3 Test Application( l7 L+ o3 q d M1 V( F" H
- *+ w3 `) T/ h) o; m' j* o
- * This file contains EDMA3 Test code.1 k& N$ D, M, H" s" C
- *
! ^: k. c5 s! F! C( H - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
' s4 P& o4 O, ~6 H6 D7 v l, S - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
`8 R3 E8 }# C - * TO CHANGE.
# Y5 G: B& Z0 p5 q. z6 T - *
6 S, V- n' ~+ |- e& q - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
& K" S" \, N7 V. r% @' D [ - *
& `& z: q1 @1 p, |5 L7 B/ y/ x" G - * This program is free software; you can redistribute it and/or
- C) x0 p" w, b+ f. s3 ]# v" j - * modify it under the terms of the GNU General Public License as
+ Y5 z, v) s5 C - * published by the Free Software Foundation version 2.
0 g1 Y$ e# S( Q4 j7 C3 m2 T _ - * V" j) A% x: m2 d X
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
: U0 s" H$ c$ F - * kind, whether express or implied; without even the implied warranty
# `' h: P* T' @ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
_7 V- J8 t* v# p* ~' D A4 P- r - * GNU General Public License for more details.: P: W& v2 h) N4 K. w
- */
1 o5 g4 m' r+ N9 G- H. `1 q - 5 M, q. [$ o5 [) P' i* u' S
- #include <linux/module.h>
4 R5 |. @' q: e. y( u2 b! ^4 R0 z - #include <linux/init.h>( K& U: L( G. ?
- #include <linux/errno.h>
$ V; S6 _2 m% k3 X/ a. d1 ? - #include <linux/types.h>" f6 N# X* p3 R
- #include <linux/interrupt.h>
) l r7 r* h3 k6 {' R% ` - #include <asm/io.h>
6 h" s2 o5 K, a( o) A) S6 K" W* @ - #include <linux/moduleparam.h>0 P, k* l/ l1 y! @( j" P
- #include <linux/sysctl.h>
0 d! }( k( j0 _2 H9 f$ ~; M. \6 @ - #include <linux/mm.h>
! @" X/ m5 O7 p- J" a7 r* x; g. ~ - #include <linux/dma-mapping.h>& y8 X8 u; u7 O, T& ?( c
- } @$ p9 \& U h( I: I- #include <mach/memory.h>
8 y' {+ w; J- i) M+ L9 h$ [+ T! N/ R - #include <mach/hardware.h>
3 P) z- Z/ w+ B1 e% m - #include <mach/irqs.h>
* Q" w: [% H I& @ - #include <asm/hardware/edma.h>; N, z( \5 ] k3 t) K; X
- * C, _0 F. C* z; ~- ?4 W
- #undef EDMA3_DEBUG
" F. N# X3 [+ P& Y: |2 U& C% K - /*#define EDMA3_DEBUG*/, r# B2 c0 `7 a! N
$ i8 i! P, m4 I, b) i G- #ifdef EDMA3_DEBUG
$ y0 P6 V) u- D; U. t" e - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
3 {5 I; |% M9 @8 Z6 i - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
5 W: V6 y7 d! n# l8 ^ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)+ Z9 B* m# E' ~3 Q: q
- #else7 q2 x2 H, `1 M: a1 z0 c5 y \
- #define DMA_PRINTK( x... )
/ F! G( @9 T9 I8 m4 H( ?4 }. O - #define DMA_FN_IN) q+ d* T' F5 `& S) j. q+ C
- #define DMA_FN_OUT
; Y+ p( A, K$ s e3 C - #endif
; r! _& g8 v4 ]( q
4 V$ @( b: J2 k% m. M4 c5 ?$ N2 J- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
* @0 `6 M$ L3 Z; N5 k4 Q$ z5 f - #define STATIC_SHIFT 3+ M9 |' A7 F/ b. t$ {' U! l- V
- #define TCINTEN_SHIFT 20
; O8 l M6 c7 Q) K6 P, N - #define ITCINTEN_SHIFT 21$ ]+ U8 o1 f0 q3 _4 P9 u4 H
- #define TCCHEN_SHIFT 22
4 C& }$ c1 c& Y/ Q8 v - #define ITCCHEN_SHIFT 23
& n% f& f: B' H+ M4 D
" {! g8 R' S% Q; e9 \' i6 J u6 S- static volatile int irqraised1 = 0;
( f, r/ j V' F& K9 p - static volatile int irqraised2 = 0;' K# G# U* ^$ c/ [( v, ^2 q
. S8 o j- D+ p4 k- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( Q9 u2 i+ x4 b - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ w/ v; T( r$ _/ ~2 `' z5 z
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 I! ?: W, F5 N! E
& b7 @ U$ \4 s/ g$ }- dma_addr_t dmaphyssrc1 = 0; d4 m; g N+ _/ }) q) }8 N
- dma_addr_t dmaphyssrc2 = 0;4 ^5 g& K- G+ n; x1 q9 L7 J: z
- dma_addr_t dmaphysdest1 = 0;
y0 t5 v2 Y2 w2 K' z6 e# G9 M, a1 D - dma_addr_t dmaphysdest2 = 0;0 ~* Z0 l2 M) v
8 Y* {. B5 r ?& m- char *dmabufsrc1 = NULL;
2 P; O. e- q6 [) }$ P9 `% ^ - char *dmabufsrc2 = NULL;
6 J; @- k1 Z4 Z# i - char *dmabufdest1 = NULL;+ Z! v7 X$ R% v3 ^, S, T, |4 L, a& J
- char *dmabufdest2 = NULL;. L, N5 H5 e* [' d- E) y
- 5 b) h3 D( x. l& @
- static int acnt = 512;
% j$ J3 }0 n! t$ r7 w - static int bcnt = 8;) t. a7 E5 b% E1 j" q1 L4 j
- static int ccnt = 8;
' m6 `, v2 n7 e/ m
7 J) [* O! \, \- module_param(acnt, int, S_IRUGO);
. Q5 A# N! p2 p/ D2 Y" m. G! n - module_param(bcnt, int, S_IRUGO);
N& K+ F2 M/ k* a+ ?/ P- y - module_param(ccnt, int, S_IRUGO);
复制代码
2 N: Q4 r4 z$ K, u2 d+ f4 i: ^- f% i7 b# d3 R [
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 x5 l$ D& P+ _$ H, O9 ~1 B' ]3 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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
, V5 H. N$ r9 r% z: y 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。( s3 b4 r1 U! }$ v$ O0 _, K
. m/ i# }8 V' a" W. m
1 \) M. d, Y6 _8 _! t$ e |
|