|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 E# V4 |' Z3 B, i7 ?+ l$ Z7 a
- [code]EDMA sample test application0 r3 X. M5 Q/ Z! D$ i2 @7 i
- /*. B7 A& J. m4 }' c' @1 b
- * edma_test.c/ @' U6 b( {7 J% E$ k6 I
- *" s9 y) u0 L& z$ i1 a
- * brief EDMA3 Test Application) ^+ ]2 P: I$ L' R
- *2 A# U5 N2 t" O7 ]8 |; Q4 ]. s4 U
- * This file contains EDMA3 Test code.4 ^' v& [5 @ M! E# I, E
- *# y( O( N& Z( X. e& d; J, L
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE1 i ?5 m& z1 V: B( V
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
5 }# b* i) W& x) B0 r, t9 y' s. B" x - * TO CHANGE.$ _$ U2 f2 a) W6 `
- *
6 z) A8 H$ e$ y* y3 S9 [ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/) t$ N* ^! ?1 [2 t3 |- o, R1 J3 j" k5 h
- *
1 G8 d! r$ A9 l; {) A- U3 a - * This program is free software; you can redistribute it and/or
8 x# b: I' q& \* H - * modify it under the terms of the GNU General Public License as
2 e6 H9 c; q0 P+ S! @' ]1 f - * published by the Free Software Foundation version 2.6 B, j" Z$ f; J9 X# R( p
- *
& d# A; ~! `3 J4 q: G; _ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any1 M9 A0 S; e1 `* V, [6 v; y
- * kind, whether express or implied; without even the implied warranty
8 S0 w/ a9 c6 }/ @6 B4 Z3 H+ w" o - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! m: K7 Y" C0 n5 \) t, l
- * GNU General Public License for more details.4 @5 c* E6 ^1 t3 t" x6 \/ z& ~& z k
- */
: p, H; e6 P1 `5 ?
+ O' v+ t$ Y+ S" ~ J: ?$ Y- #include <linux/module.h>
: i$ }4 Z4 k3 k$ p* k! p$ D - #include <linux/init.h>
* N {, j) z+ ?# J3 {- ]8 b3 v - #include <linux/errno.h>
3 p3 t) I% y- ]2 i" B9 S - #include <linux/types.h>0 E& i8 ?1 O7 A' a3 i' V
- #include <linux/interrupt.h>
" {) }- @, Z, U - #include <asm/io.h>
) V4 N% R0 G, r$ B - #include <linux/moduleparam.h>% Q2 ?# e$ D1 r4 p# \1 |
- #include <linux/sysctl.h>- [* y( m, h: }( h0 K4 z
- #include <linux/mm.h>5 H, \6 J( b0 L# x0 _! K
- #include <linux/dma-mapping.h>
7 S0 \1 b" e3 a - 6 l3 w0 m1 s5 w+ ^# c* @5 Y
- #include <mach/memory.h>! G( k. A: t D
- #include <mach/hardware.h>
. u- n9 J& ~- Q' ?5 Z5 \( j% X - #include <mach/irqs.h>
" Q6 ]6 O* ~' ]/ ~$ D - #include <asm/hardware/edma.h>0 o7 t# f: _" g, p
8 K9 A" n/ C4 ^" a P5 J- #undef EDMA3_DEBUG3 }) y2 h9 h; g( Z* _+ a
- /*#define EDMA3_DEBUG*/- {# K+ d2 w1 z# o
- 4 n+ W% B. Q( z6 ^0 p
- #ifdef EDMA3_DEBUG
$ m. W: v$ x# k0 \; L+ | - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)( O6 W9 P @2 i4 {5 K8 i( p
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# @( p' d1 i) I$ I! V) p8 B! i) f. [
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 n# H7 a+ B$ f: ` t! |5 p* I: Y - #else8 g9 T0 S, M8 K
- #define DMA_PRINTK( x... )
- G9 ^& _9 c6 @: Q0 b - #define DMA_FN_IN- K X' T. ^8 U( S- }
- #define DMA_FN_OUT; x9 E! O: {! H" K9 x3 K
- #endif! w( E& ? W7 {
: ~ L7 O% E" K2 `& r' o4 w7 x5 e- #define MAX_DMA_TRANSFER_IN_BYTES (32768)9 o6 |- q) |+ b# X6 Z% g
- #define STATIC_SHIFT 3
; x9 ? G ^) d# u9 L) K9 n8 n - #define TCINTEN_SHIFT 209 v8 d2 x. L- Y# z* @7 |
- #define ITCINTEN_SHIFT 21
! T1 {5 g' {7 s) t" U& C/ ?/ O" n - #define TCCHEN_SHIFT 221 U4 I1 p$ I. _7 l3 }
- #define ITCCHEN_SHIFT 23
. x) S% l+ x+ O9 a - 0 Z2 T6 M- q0 K* @: Z. H* ]$ S
- static volatile int irqraised1 = 0;0 P' @( J2 z& F
- static volatile int irqraised2 = 0;
. m# y& b+ j+ J9 W5 A
7 B8 |/ ]. N) c8 A! J- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& c+ L$ _9 |" ^. r4 L: N - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. I) x8 `5 l9 I9 u5 b: q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, h! e" t7 I% Q7 c. f3 i% q" C( c
- 3 Z) k' C% S% F Q) W# |8 c
- dma_addr_t dmaphyssrc1 = 0;# u5 j) u$ D( q: g6 }
- dma_addr_t dmaphyssrc2 = 0;3 J; ~) y: i0 n2 Y4 F
- dma_addr_t dmaphysdest1 = 0;
) [, r8 @) j* \7 q4 w - dma_addr_t dmaphysdest2 = 0;
$ @ O0 y- {) ]$ r" _- j - ' N$ p1 j9 b/ |4 k
- char *dmabufsrc1 = NULL;
9 l3 C. x7 L8 U+ }% C$ K - char *dmabufsrc2 = NULL;: |; @. H+ @% D" x3 G! _
- char *dmabufdest1 = NULL;: G" \) O$ S/ }6 x2 g' Y
- char *dmabufdest2 = NULL;
4 f( T5 d5 \0 B+ y3 x- M - % R3 i) S D8 a2 R6 d8 u9 u
- static int acnt = 512;7 V! [3 S. l7 [2 x, a
- static int bcnt = 8;2 g( u( I3 [; n& _! L' {, I( t; k
- static int ccnt = 8;
' i7 Q9 w. f6 V1 m( x7 z4 U - 5 [* F. q0 T1 Z2 z! C3 u- k u3 Z
- module_param(acnt, int, S_IRUGO);
2 _1 n% q( [; S - module_param(bcnt, int, S_IRUGO);
$ W& L+ d+ b- } - module_param(ccnt, int, S_IRUGO);
复制代码
. N! e) N; k4 r
" [6 W8 w- t3 b: |0 m. ? 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
5 Y1 m- b( u2 S* T7 S6 Farm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ L! e4 S% k& x
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
$ \: k2 q9 t+ S7 ~2 \, r D" A( s; [4 n* T B2 W6 s4 ~& H
! R* C+ D" L6 N |
|