|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 + p1 ]5 ?4 J) e8 }) @+ |
- [code]EDMA sample test application
; R3 B8 a6 l& j - /*' ~0 W. w) J4 R: x( H
- * edma_test.c9 E% H9 z* A- O( K: \
- *
% |- A6 y3 r# k: o0 c - * brief EDMA3 Test Application3 ]6 i1 g2 \0 F7 V: k
- *
1 W7 i! c4 ^5 N/ m6 Q - * This file contains EDMA3 Test code.
$ K: n$ m+ n+ F: I - *
1 d8 @4 E* R! u; b7 H$ S/ ]7 T - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
$ m" M/ N* X6 c1 Z; ^* ?5 ^ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT% i7 m: ]1 l/ J) m: V+ o
- * TO CHANGE.
6 o; {6 l. Q2 T8 b) }! q - *" V7 L" m9 B W, y# K) _! E% W0 j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* r- I5 V U7 d
- *
: j% C0 l( _" n$ H; n& P# C0 o$ I) _ - * This program is free software; you can redistribute it and/or
3 {5 D2 ?' E1 w$ p - * modify it under the terms of the GNU General Public License as
) M6 I" Z! @9 a ]! h! e0 \+ G( ` - * published by the Free Software Foundation version 2.+ W; C- o5 _* `! t* ~- u
- *
# Z& R# i/ y0 Y/ W7 P2 c - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 @: M# L! b3 w% }+ ] - * kind, whether express or implied; without even the implied warranty
" Y! _% Q% p. c6 g - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the& y- @: {7 H6 d5 D
- * GNU General Public License for more details.
2 O4 ^9 Y, [$ h& r( O% o. Z - */
( b+ ?6 i; Z. X) I1 N, W - $ Z7 }2 |* U. Q3 Z- t1 G B
- #include <linux/module.h>
w, W! f. T# s - #include <linux/init.h>9 a P1 @: I: d+ N
- #include <linux/errno.h>% k; G7 e' ?, D
- #include <linux/types.h>; @1 v I/ K- ?. M) Z5 r( X; z, B
- #include <linux/interrupt.h>% p' Y: U9 T9 L. Y' n" k
- #include <asm/io.h>
7 e+ h# p3 ^. O" {7 F - #include <linux/moduleparam.h>
, ~* E k5 }5 p8 J; C - #include <linux/sysctl.h>0 a% Q* D" P5 X& o
- #include <linux/mm.h>; t" _6 Y5 a% N! B: c! C) q [
- #include <linux/dma-mapping.h>
& i; g- O; j0 v& h m+ N( ?! X! x, J - 5 b' @) L% F% C) H$ Y
- #include <mach/memory.h>
, Y3 J ?2 m4 u% T/ \ - #include <mach/hardware.h>: q$ k+ |+ Q& J
- #include <mach/irqs.h>
. Y8 O3 J4 e2 L' u k. D, _6 Q - #include <asm/hardware/edma.h>( r; d: N9 C- _$ w
- ! E0 v# d# t8 w8 o$ [
- #undef EDMA3_DEBUG
2 T0 D. c# f# f - /*#define EDMA3_DEBUG*/
. A& ^; Q/ k9 I0 X# z
3 t2 E; C T4 Q8 i- #ifdef EDMA3_DEBUG
1 ? ?1 K7 v* u) ^6 e. j - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 }8 P- V$ y% S$ i( h" U2 R
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
) ^/ e* ]) y- ^3 V' p - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
7 l3 u7 n8 k) h0 y! } - #else }6 B6 t: y9 N2 o* i4 y# T
- #define DMA_PRINTK( x... )
3 Q0 T( k4 n% y5 n" n1 _ - #define DMA_FN_IN
4 s7 y7 d3 J @; x, ]3 J1 b/ ?( ~ - #define DMA_FN_OUT
' N% |* f$ H5 F% K - #endif& ^" O! y. W+ h/ j- H0 q/ j& S5 n
- 8 ]# q! o( n8 F
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)3 t4 F6 m, q3 b' Z [
- #define STATIC_SHIFT 3 N9 { N- ^ i: r! ]
- #define TCINTEN_SHIFT 209 k+ r& C0 \+ a6 N
- #define ITCINTEN_SHIFT 218 ]( O6 J) X! s
- #define TCCHEN_SHIFT 22/ }) q4 e" N4 g/ c
- #define ITCCHEN_SHIFT 23
! w) K+ u1 G6 s. g/ k - # t- J2 I8 n* }5 h5 Y5 J5 A
- static volatile int irqraised1 = 0;) C0 \& V" w% E( w0 H" k- n) B% C
- static volatile int irqraised2 = 0;2 R! m5 N D+ Y% J
- : m2 M" r" ?" o
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 A0 B" e i. n/ u/ {4 Z
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; R$ l) ~: Z( r& r6 N" O
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ s1 j& a! O- @% z5 J1 d
- ' |1 l* }7 h' l! U
- dma_addr_t dmaphyssrc1 = 0;0 h/ l- w7 Q% G; T i+ X' } N
- dma_addr_t dmaphyssrc2 = 0;
4 E8 l, }3 J& x6 O) x* z w2 g - dma_addr_t dmaphysdest1 = 0;
) F6 Z6 u8 b2 Y* b4 i- o - dma_addr_t dmaphysdest2 = 0;
0 ?& c9 l' n- k; [; W) F/ U/ `
/ q- _+ h: t4 ]: g2 n+ `) {! j& {- char *dmabufsrc1 = NULL;
8 G- U0 C* g$ K5 n) J. [% C5 Y - char *dmabufsrc2 = NULL;, j7 ?; O0 c _$ M) S7 h( k
- char *dmabufdest1 = NULL;! s1 j% h; c9 x6 W; ~4 o# H, {
- char *dmabufdest2 = NULL;5 y+ d; k& `; g( s# p1 J% g: o; T
$ {! w! ?$ ]9 A- static int acnt = 512;
2 }, Y9 G3 |6 t, C - static int bcnt = 8;. m* ~( Y4 S- b- w
- static int ccnt = 8;
1 s" N8 p! u: f: R - 5 C" t+ i1 k% H
- module_param(acnt, int, S_IRUGO);
$ w4 g" x; x" p e' L& Y3 }; r/ z* n5 U - module_param(bcnt, int, S_IRUGO);
! q9 }6 r, o' D+ ]" Q& a& | - module_param(ccnt, int, S_IRUGO);
复制代码 ) A3 r' }! g! s
, h' M% R) v, `8 W* {% a 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用" f2 x6 h. q% z2 y3 `& D
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。/ o/ `. F: {4 R# R
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。9 t; S/ e( t! ~8 K" T
; r y3 a$ _9 D, ?3 d# W& `3 u6 x
) V9 d# l2 W) {9 ^ |
|