|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 , \8 Y9 t* m% o
- [code]EDMA sample test application3 i+ E& y' _! b3 [
- /*
1 v* K3 `4 v% d; a- U) h, R7 } - * edma_test.c. W$ f* A v) ~# f# ~+ t: J& u
- *
~( |1 A ^( @ - * brief EDMA3 Test Application% u* w. r1 B0 q. V
- *+ V- q' a! W6 ~6 u
- * This file contains EDMA3 Test code.
2 Y9 [. a4 P; a5 ?" R - *& j. j5 m" a2 a9 m% e
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# `4 o( {1 s: O
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: R1 e- V! g4 p4 d2 P! ^ - * TO CHANGE.
7 w( n" S4 H+ |/ B$ R0 s - *
L- f( C/ D+ K2 K K! p2 S - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
3 d- H+ H, |+ f0 p$ [4 e7 W4 C) z - *
U% e- ?5 \: [$ Q# F - * This program is free software; you can redistribute it and/or2 {2 q- m" v+ C+ M' T) p7 `
- * modify it under the terms of the GNU General Public License as: z& M x2 T: t# T: j
- * published by the Free Software Foundation version 2.
2 z$ K- e7 j5 L% W) B - *2 o' _6 e+ l1 G2 q
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any0 Z/ x9 ]9 F9 E4 R6 ?+ @5 U
- * kind, whether express or implied; without even the implied warranty- C9 q% I# z/ V! U5 A- n+ m
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 I( g, v, K3 e8 y% } - * GNU General Public License for more details.! \9 ?$ \( r0 h; q" ?$ p
- */
7 h3 J; X' f: H1 Z
# x, }: B$ w/ o' D1 I& a! M1 q" O8 ?# x. Y- #include <linux/module.h>( ?% ~+ d4 b: f$ c4 j) }7 @, D
- #include <linux/init.h>
* @+ N, c) B, @1 h - #include <linux/errno.h>0 H' a$ e. m7 `2 d0 }4 V
- #include <linux/types.h>
( g, {! C# L6 J8 I) o' O - #include <linux/interrupt.h>% d5 H5 q, {" s& b4 w
- #include <asm/io.h>6 P9 @, x" R& ~" x0 [6 l0 K' Q
- #include <linux/moduleparam.h>
+ f2 C2 D! a) ] g - #include <linux/sysctl.h>9 t- d. V2 r5 T, s" X
- #include <linux/mm.h>
- z/ w# |/ o3 g* G) ^0 r$ R - #include <linux/dma-mapping.h>
0 z; Q% S3 O; M9 O
8 @/ \8 z8 S9 A' r8 H: F- #include <mach/memory.h>, U: F/ k0 A# z/ n
- #include <mach/hardware.h>+ X5 A( _( h, `. O Y. E
- #include <mach/irqs.h>6 G$ {8 }$ r/ T. g6 U7 y" c# b/ D
- #include <asm/hardware/edma.h>
% A$ T; {' w2 w. v9 f! N k! U
0 m l, W' @$ f Y& O/ H- #undef EDMA3_DEBUG7 C1 l9 }+ g- R% {: ^/ N0 m1 M7 O
- /*#define EDMA3_DEBUG*/2 Y7 u b$ R$ q% t$ I: q' P- l
- 6 K# L4 `, |8 q; B7 Q
- #ifdef EDMA3_DEBUG3 k) ?& m x4 i& D8 N3 N1 @
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)7 n r. L7 C; Z4 @
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__), b( A V$ J: i R* Z+ _( C
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) `5 E& Y- R: S5 l$ R5 `# k2 _1 Q
- #else8 Y0 [3 M0 y9 a# w& v4 O5 d" P/ u
- #define DMA_PRINTK( x... )8 I4 h; {; s$ Q$ i; T/ O
- #define DMA_FN_IN8 e. Y O9 K) O+ ~0 e
- #define DMA_FN_OUT6 e8 x/ z; z# g& ^. x
- #endif2 S B3 Y- x$ b v: u& S6 Q% W
- ' R( A1 y1 {! _6 I/ y5 s
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
( P% B6 V: W1 U7 W9 o2 v - #define STATIC_SHIFT 3# c6 e8 e5 N; E' X- F$ Y% l
- #define TCINTEN_SHIFT 20
+ b8 d# D7 k4 ~- V* L$ W9 o - #define ITCINTEN_SHIFT 21, \. m! V/ |* O$ n/ i( l1 h
- #define TCCHEN_SHIFT 223 ^0 `. f/ d3 V& ?7 o
- #define ITCCHEN_SHIFT 23
* E" h, c) ?7 S- P/ R( z
! r" {) ^4 z+ X) h- static volatile int irqraised1 = 0;
! r* f1 L' E7 U/ k' [ - static volatile int irqraised2 = 0;
% y% s+ |4 L6 Y& o+ `
; K% t2 R& o& B) p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ c# t; X+ m! c( I
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' ^0 `' ]6 q i8 g( Y' h0 m9 F - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. a8 G H }# t" p
3 W; k" v% T5 I3 _ y- dma_addr_t dmaphyssrc1 = 0;0 z0 |( `' ~1 e9 v2 G0 m
- dma_addr_t dmaphyssrc2 = 0;3 p) l2 z9 K" n1 H
- dma_addr_t dmaphysdest1 = 0;
/ b: {2 f( H* j+ ]8 k - dma_addr_t dmaphysdest2 = 0;
( w- ^; Z& j* I0 F
' C1 Y1 m" b& X3 w- char *dmabufsrc1 = NULL;1 W- S" s9 K0 a& n6 i7 d
- char *dmabufsrc2 = NULL;
# b( t; a4 `% |# J) `' |8 c, u - char *dmabufdest1 = NULL;3 @! @. m3 N' C, K+ T
- char *dmabufdest2 = NULL;
7 [+ y5 |6 `3 R& T; S' W - * |/ X) E" c! V! Z: y4 `
- static int acnt = 512;: z& T# d+ C3 q# L" A
- static int bcnt = 8;
2 B1 `, H+ G" O - static int ccnt = 8;" T$ _9 l% u' K# C& M( O+ Y7 x: S6 A
- 1 K9 p8 k( x( P( q
- module_param(acnt, int, S_IRUGO);/ x! `) {& e" e: |1 _6 O
- module_param(bcnt, int, S_IRUGO);& L1 T/ N4 N+ u1 i' [6 p% `
- module_param(ccnt, int, S_IRUGO);
复制代码
3 h/ [( W/ }9 v- x
& ]5 `( Q$ K$ q# ~# ~ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用3 ~1 I7 _7 ~# u2 o( s. j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
) z6 @( l# z8 I' G 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 N z0 a" B9 e9 f; I" f9 `- r Z# Z! ~3 P8 Y+ J
4 g- h. T, X6 e3 R: \ X5 \$ g
|
|