|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 t$ Z# I5 P; k" V$ U9 a
- [code]EDMA sample test application. l& `' w3 O2 D) y5 i
- /*
6 k& K4 J N* P4 \3 k - * edma_test.c
! ^. O _3 H. C - *
2 V$ W" p6 G: J1 t - * brief EDMA3 Test Application
0 H* X1 u; n, h - *
4 A/ c) R# \ E) Q# B# k - * This file contains EDMA3 Test code.
4 ]( j$ ?8 @! ~ - *6 R7 i, R- T* f
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE' d) O9 h4 g% a/ L3 Y" R
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: O* d. v# U W9 P - * TO CHANGE.( r& ?" ] a: ~) D4 s: b+ O
- *% J' Q- S z7 p( x# v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' ?" b2 Z! K- ^8 v7 o
- *& J/ |( A/ n9 m6 V) u
- * This program is free software; you can redistribute it and/or
0 x y9 y- s# O1 ^ - * modify it under the terms of the GNU General Public License as' p7 x+ U* N' \0 ]4 f
- * published by the Free Software Foundation version 2.
8 k$ j9 x& O3 k& [ - *4 M* |# z" L% f
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
$ f* U7 T# U, ]! w4 c4 d E - * kind, whether express or implied; without even the implied warranty' C! y b% z, R
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 {. f. G" |# S$ A' o# M - * GNU General Public License for more details.
0 [2 H9 A/ _4 G4 a9 } - */
. F6 ]% A. D; R, S" T! q$ a - ; \, @/ v8 e5 g" @2 j
- #include <linux/module.h>7 G- U X4 L) M$ l
- #include <linux/init.h>% e s. _$ u. |3 V Y b8 X
- #include <linux/errno.h>
9 e' P! I5 u5 u& f& O - #include <linux/types.h>9 ~$ P9 r7 n a7 F) g& g) k
- #include <linux/interrupt.h>
8 Y- Z- M4 X& V - #include <asm/io.h>
* H7 |" O3 f/ g1 w9 ^' Q - #include <linux/moduleparam.h>
' h. r& W) W. O6 I) F# l) M - #include <linux/sysctl.h>
6 |3 B: c8 n! z/ |2 o% ~# p( K& b - #include <linux/mm.h>) }+ \# K0 y0 ]( i" S+ l+ E$ e$ @
- #include <linux/dma-mapping.h>4 ?2 d: z( d6 X" c
- % z9 R( W( j7 ^+ a6 w8 H
- #include <mach/memory.h>
* W& j) l% L, h+ M3 G - #include <mach/hardware.h>
" W4 _6 Q- z6 _2 J0 D& W' A% V' o/ i - #include <mach/irqs.h>3 ~ w2 u! t9 D
- #include <asm/hardware/edma.h>5 \( Y6 P0 c% _0 c' a7 H$ K
3 P& a ^ k/ w5 p- #undef EDMA3_DEBUG4 y7 I1 ^. ^; L. i" k
- /*#define EDMA3_DEBUG*/$ [: K4 x! v) A1 W
- # k# @6 f! d5 X( J+ w: N$ y7 t1 t
- #ifdef EDMA3_DEBUG9 K5 b4 p8 @& |$ v6 [8 C
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
9 Y+ b" K6 x9 x) C. s: k1 W - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)( W n7 D+ I- M' v0 i
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
& V& @6 b' O# b8 t7 U3 { - #else
6 W' Q& m* K( |: |4 T: M; v/ }* p - #define DMA_PRINTK( x... )
/ v8 V: [1 L: X% z& F. b - #define DMA_FN_IN
* L; |& {5 [: D% ` - #define DMA_FN_OUT
' B; h7 S& y; p9 c3 Q - #endif
4 ^# N; @' U( u g2 e b" j
1 }: u/ @0 [; P, }; c8 }* u- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
! R) i1 S+ H: I7 H& ?! G6 n0 { - #define STATIC_SHIFT 3
" z6 }5 ?2 B- f+ h& w. n ^" |: p) C - #define TCINTEN_SHIFT 206 K t8 e# I; }5 k
- #define ITCINTEN_SHIFT 21- \4 K! _) s4 N% f% w* o' }
- #define TCCHEN_SHIFT 22
! ^. a: ]3 z% n6 _0 d - #define ITCCHEN_SHIFT 23! }6 U' z o/ v9 u; |' w
, K1 ^$ g2 `+ N3 l3 Y- static volatile int irqraised1 = 0;; m5 Z* I& i! K4 d# |) O
- static volatile int irqraised2 = 0;0 _* Q. k1 o+ v* u4 e$ f
- ]- F$ b% c; h- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& H. V3 J, g& i3 j2 a: E$ f( b
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% I9 T0 E) L! v" Q# }" ? - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' B+ B# p r! p - / e$ q' |% B4 Q9 h1 A" Q# K- L
- dma_addr_t dmaphyssrc1 = 0;
% z5 ^$ h4 K/ J. |* t. u - dma_addr_t dmaphyssrc2 = 0;
5 t o' x% n& C$ r9 H( `, _8 S - dma_addr_t dmaphysdest1 = 0;
4 O V! U5 U' j' m2 U# K/ n - dma_addr_t dmaphysdest2 = 0;$ I* Q; e' Y, Q- A* S- L8 s8 ~
) N: j: t9 M0 v+ S8 ]4 `# b- char *dmabufsrc1 = NULL; J. W7 G! I# B4 L" x0 C
- char *dmabufsrc2 = NULL;
0 g. C' _/ L3 [9 w% k - char *dmabufdest1 = NULL;6 s, A, {* `& ~( G e; R1 r
- char *dmabufdest2 = NULL;# U1 R. C3 j9 q y: z# X7 D0 ^. Q
- + M o, z# I' @
- static int acnt = 512;
& ?" ~/ h$ F/ u: F; s - static int bcnt = 8;
* L2 s5 |" }! B. ]4 w1 ]0 ~0 [ - static int ccnt = 8; P7 K' X0 _* P
- 1 n. z8 T$ u' |' g
- module_param(acnt, int, S_IRUGO);3 X- D/ J5 D2 m g7 G
- module_param(bcnt, int, S_IRUGO);
* ~( Y+ }9 J0 B* c6 V! l - module_param(ccnt, int, S_IRUGO);
复制代码
- d' Q' c* B9 v/ S0 W) R; o2 y% T0 ?/ N
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
* N: ?) m& n" y/ marm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
4 k" t' v2 O2 I 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。 V0 l+ B8 M0 L8 A. F. l
8 ]/ ` D) ^4 h5 Z( l
9 k) e) L# ^3 Q. E- O; [$ \ |
|