|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; l0 E% X. r" C! {' y7 r- [code]EDMA sample test application
+ [* r; I# M* P( q# Y - /*& H5 O4 i# x' G6 P* f2 c
- * edma_test.c
* i9 Y4 y4 _- N3 t7 U - *$ L. r! @/ w) M5 o
- * brief EDMA3 Test Application2 u. v# z2 C D! n3 w$ u
- *# m1 V7 U2 l/ {( d
- * This file contains EDMA3 Test code., {, ^3 I. h4 {7 E& U0 m# c4 x
- *# j4 l0 f$ s2 Q: }- K" J
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# s& c) y; q1 g3 l7 w
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT) L# q: D, v* s' S( s( O* }4 T
- * TO CHANGE.
- I- B$ G- Q2 d, } N" c - *8 c; B2 p6 o" e1 G. ]% x
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
5 k! [* u8 I* V2 m$ b2 D - *( p: R6 E) \! H5 h) m
- * This program is free software; you can redistribute it and/or. T+ G; t* P8 L
- * modify it under the terms of the GNU General Public License as
8 H# j: d+ I. }8 F3 \* ` - * published by the Free Software Foundation version 2.
% S8 L+ w5 w* C+ |* {; l3 I - *! e: D; l4 ~( C+ i
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any. P% }& E( D9 w; g( \* B8 u' R
- * kind, whether express or implied; without even the implied warranty
; t# ^* r8 |' R6 [ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! B3 g4 C" j5 G! p, b - * GNU General Public License for more details.& b! a! _* A6 u1 q" C& g
- */
" g5 f' P9 W: q* J
& X* B/ K7 p* {( g7 O- #include <linux/module.h>
7 \. W1 V+ z% C8 D9 V - #include <linux/init.h>6 ~+ U7 s! t& C$ l) C
- #include <linux/errno.h>
- b4 \9 w* C4 L f6 y - #include <linux/types.h>& e% j, }7 W3 X& B/ d4 r
- #include <linux/interrupt.h>% ]4 O7 z- _- P, `) B9 \& |- Y$ Z
- #include <asm/io.h>8 T# A; L, ~& I7 [) R# u S
- #include <linux/moduleparam.h>
( Q' V" A% [' w - #include <linux/sysctl.h>& n% h) R" b) q1 v9 d @7 V {
- #include <linux/mm.h>
v% F$ C: Z/ V' ?# m/ q: x/ c. K - #include <linux/dma-mapping.h>
7 G* U" ^! F! I/ X/ l% { - 6 d; o: [. M4 s# z3 @
- #include <mach/memory.h>
' V: x2 n9 B( V- } - #include <mach/hardware.h># a; @- S! D6 W7 _$ D' r0 Z$ k
- #include <mach/irqs.h>0 R1 C6 W5 O4 ?/ l. V
- #include <asm/hardware/edma.h>
- d# T8 V! t; Z
4 b3 H* m/ l2 d9 F0 h& t1 I- #undef EDMA3_DEBUG
$ S# u' i8 [2 V0 b: h! j - /*#define EDMA3_DEBUG*/
8 J4 h& U/ d1 m& F# ?$ ? - 9 g5 c& j/ s2 `$ W4 F; x9 j/ c
- #ifdef EDMA3_DEBUG
( n% _, ]( J2 f, W5 T0 F) @ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)3 n' X0 T/ U* L1 d
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 H# R: \9 r% J: Z/ n8 l - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
( l: Y: }1 R; m: c1 o - #else8 N# ?2 T2 `4 j% \( K* K; |# a" m
- #define DMA_PRINTK( x... )
# U/ A& {0 @6 \- v) m: ]7 m# R - #define DMA_FN_IN
& v) E9 t# K# `9 b4 |! G% ~: ~ - #define DMA_FN_OUT# Z% S. c1 D5 ~4 n! m9 W$ |
- #endif
6 }, }5 q _3 C9 I1 y
- P( }$ j; [# f! l& l- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* p. W2 m) I/ F* T7 }5 J! l: j3 r
- #define STATIC_SHIFT 3
! t: c1 S4 ~- ]* s7 I - #define TCINTEN_SHIFT 206 g/ l/ D+ |$ b1 u
- #define ITCINTEN_SHIFT 218 G( V; e. ~) ~. c& v% c
- #define TCCHEN_SHIFT 22
6 ?* w9 J, N' V1 d5 b/ d% u - #define ITCCHEN_SHIFT 237 w W* Q, B) i* l' ` q% b
4 N8 c. u2 F/ U$ g- static volatile int irqraised1 = 0;
0 m- _ Y/ T; o$ _" F - static volatile int irqraised2 = 0;
0 k! L# q# d; j9 J/ a) d
$ Y+ t: d! H4 J! Q- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" K+ L/ I# t* K
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 J w; N. j' |7 n- S - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, C, }' A6 i5 W# Q8 K
* g. W. m' _+ i8 G0 l6 q+ ~. X- dma_addr_t dmaphyssrc1 = 0;6 {2 M, C6 {' h+ W3 y6 \- ?: K
- dma_addr_t dmaphyssrc2 = 0;
! J: }+ o+ A: F( u/ E - dma_addr_t dmaphysdest1 = 0;
: h' z/ m' ~6 ]1 P - dma_addr_t dmaphysdest2 = 0;1 j- G- G q1 C. ~# g" K7 T
- % A' h" Z+ A# ^8 M$ L7 Z) z
- char *dmabufsrc1 = NULL;
# c) Y2 J- J9 l% h - char *dmabufsrc2 = NULL;
: b( C* R# L. R - char *dmabufdest1 = NULL;
D. Z4 ^9 S$ Q& M8 D - char *dmabufdest2 = NULL;
( Y; p2 L- H5 V
, m( G# A$ n* N: W. M8 ~& G1 N% O- static int acnt = 512;
+ W* D/ s2 }1 g) h; M# J - static int bcnt = 8;0 T% D9 q1 K- V9 ?: o, b
- static int ccnt = 8;: {/ N5 g- ?9 r4 s# V
- 1 W* ~1 U {, L. w" ?
- module_param(acnt, int, S_IRUGO);
, b& ^" F4 Z9 D/ u# N - module_param(bcnt, int, S_IRUGO);+ Y$ C/ ` `/ P% Z+ x4 x
- module_param(ccnt, int, S_IRUGO);
复制代码
: A! E9 _/ ~( e! P: @9 k
$ h: _* }; f3 w7 G& h x 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用* F0 T+ r) B" [% D) r2 c
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 K' ]1 M l% \- |
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
4 L! y' I6 E$ q$ w! s! r* [5 v3 i( y: n0 s
& K3 _* j4 b# T0 k' y$ u
|
|