|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' J- Z# `- m6 Y- [code]EDMA sample test application2 k- J" o$ ]5 Y* j! [' E7 Q4 d B
- /*/ Y9 b/ ?4 v7 O
- * edma_test.c
) W5 t, h2 c) S2 U! L6 { - ** Z8 r% F! V+ g3 \
- * brief EDMA3 Test Application
d) z/ Q g/ ^# j6 L3 T - *
" i1 x* Z: O/ M3 p5 }/ L( I - * This file contains EDMA3 Test code.
; N. o- \ K8 j; b2 q - *' D5 @7 l" [( W0 w9 U
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
' S- d$ L7 K+ s, d3 ~5 T6 Y - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
% f6 G. k% P' R7 A% I - * TO CHANGE.
) A6 W+ E' M- r* s, j - *0 A% m* Z! [. A- j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
2 D M, G/ X( Y2 W - *0 F. h! }' H: K& R: O- T
- * This program is free software; you can redistribute it and/or2 M m# d. T+ c+ N
- * modify it under the terms of the GNU General Public License as- |1 i0 @! B5 `4 y* \
- * published by the Free Software Foundation version 2.4 i1 I" X# B- ?9 }
- */ u0 ?- K8 Q* K! u( A& P
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ J1 |6 r* }5 G$ b
- * kind, whether express or implied; without even the implied warranty5 L5 w* D5 v( _8 v; A
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9 n* V5 ?! U- ~6 b
- * GNU General Public License for more details.
5 y6 Q0 v" w8 d& |% H - */
+ T7 R0 X8 s" u6 X0 w: T a - & J2 w( w Y0 N& m- ?4 b
- #include <linux/module.h>
4 D0 ]. N) d5 s2 f - #include <linux/init.h>
! |7 J) T3 i S5 ~6 C3 \( Y - #include <linux/errno.h>
' x4 k2 R! s; ?# N1 I# _ - #include <linux/types.h>: @6 X; T! }6 ~' Q
- #include <linux/interrupt.h>& S4 U9 |+ e& |4 R# O& n
- #include <asm/io.h>+ x+ K0 X( b' n& q, I L
- #include <linux/moduleparam.h>4 w6 p) x5 r6 l/ M
- #include <linux/sysctl.h>
1 Z- o3 E( m; W" w - #include <linux/mm.h>8 O" o3 e4 w' F/ `* E. f* N+ X
- #include <linux/dma-mapping.h>* `6 a! P6 H: B
' G) R. a0 _+ K" j- #include <mach/memory.h>" T. K# ~8 M6 y4 ]3 v- E0 z" F
- #include <mach/hardware.h>4 |6 t4 F7 D! \+ n/ L
- #include <mach/irqs.h>
$ x3 u) B( \" C1 |& c- q. h - #include <asm/hardware/edma.h>
! O- Z1 r! X F
' O3 W! j3 _6 u$ j7 c; G+ G- #undef EDMA3_DEBUG
' M+ Z( \' s: D; Q* {; w - /*#define EDMA3_DEBUG*/
, F, x u% P5 n - 1 H/ D6 ~! r1 [4 f2 o1 y# U& b
- #ifdef EDMA3_DEBUG
0 C, ?! `& ?. o& R% O" }% U# s - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) c# W2 F- w( d- q/ B - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
2 ?( r! [# `2 ] - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)- ]! }5 w' T+ z
- #else; N9 a2 U9 @* R) q! a( Q
- #define DMA_PRINTK( x... )* n1 D# }* O: ]; f$ t
- #define DMA_FN_IN
) [) N( [+ E0 @0 N* ]8 h& d' {5 m - #define DMA_FN_OUT% w# k$ |1 ^0 j7 A& {- B* k6 L+ Z
- #endif: m) y4 B$ l6 u
- 9 `8 H' O8 {3 A
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ l2 V3 E' I$ W6 M
- #define STATIC_SHIFT 30 e# G; g' W4 Y3 E9 ~* R6 `% L) C
- #define TCINTEN_SHIFT 204 o8 O" @! _- j4 T4 I: `8 i
- #define ITCINTEN_SHIFT 21
2 _3 x# V7 R* u) X9 j/ z$ P - #define TCCHEN_SHIFT 22
5 T- F! s: k; M9 K" o1 Y - #define ITCCHEN_SHIFT 231 [& }) d( p" g ?1 p( \
- ) C4 ~( w* T/ U f- u1 J1 S& ^
- static volatile int irqraised1 = 0;
, }9 `' E8 e1 o- L: p; J - static volatile int irqraised2 = 0;! [8 `+ i# t6 C4 X4 p/ W4 c
- , S% E4 {0 ^4 r" F
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ _+ b7 m# |, }# _5 N7 U
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 P4 U* v+ V4 k) p - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 Y3 {& Y+ \" l& N7 d
G. z- j3 ?0 e# B- dma_addr_t dmaphyssrc1 = 0;: L; @8 v# l& ~; {9 n
- dma_addr_t dmaphyssrc2 = 0;
' X3 R( _1 }" h# r/ |% P' [ - dma_addr_t dmaphysdest1 = 0;8 y) i/ O6 Z& q
- dma_addr_t dmaphysdest2 = 0;
; Z5 z& m- E2 N; {- _! i0 p
7 f0 G4 f3 E5 V2 |$ f" ~: Y- char *dmabufsrc1 = NULL;
$ }6 [- o- P% l" ?2 [, ^8 i8 d - char *dmabufsrc2 = NULL;
( [" T$ u4 @5 y7 d B - char *dmabufdest1 = NULL;2 C, y( F% u; g `
- char *dmabufdest2 = NULL;5 J; ?+ l8 Y% o" d- P
- 6 t7 r" l3 t1 i. r
- static int acnt = 512;
6 {0 [# v/ ~7 o5 ` - static int bcnt = 8;
4 j) \4 i# ] B1 s - static int ccnt = 8;
: @$ J/ d, T& {1 q$ z4 f5 N' d4 k
Q8 c) U4 b* O1 S- module_param(acnt, int, S_IRUGO);
' c) z( O3 Y5 Q w: w - module_param(bcnt, int, S_IRUGO);) [, k: ~; t/ f& r* M
- module_param(ccnt, int, S_IRUGO);
复制代码 + V7 ^& [5 Y3 |5 C9 f6 D: E7 j
$ E! E' `/ ^6 P1 w, ?' q 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" a" I2 f; _* v1 yarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。3 b4 H7 f3 k, l0 u
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
3 k2 H# N0 C( r7 M8 J
% L$ n2 ~+ |/ V3 H& R; q8 G. p/ Q% Y; N
|
|