|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 0 H' g' m: M/ C+ y e5 w( l: H
- [code]EDMA sample test application8 T8 h R8 _# ~7 H
- /*! `0 l) {) ^$ v" i6 g- D$ F+ f
- * edma_test.c
; ]. V9 c. T9 y7 d# ?0 ? - *
4 j- z/ g4 M) ~ - * brief EDMA3 Test Application: S* {3 r" J$ m m/ l* K2 U% g6 z
- *
2 u. H9 j, e5 }# ^; T% n - * This file contains EDMA3 Test code.- \( h7 L s) q0 o! z, ]
- ** G" Y7 M) S1 M% G) ]& u; @
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
. ?! E* ]; v! S N5 V @! } - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 f; ?5 x- F% p" w& D- v - * TO CHANGE.
7 t' O) _% D" C: D( ~- B- R$ D - *0 l1 C8 M$ P0 m0 F6 R) R2 k
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/1 e; p. m& x; w: `* B
- *
, q: U+ k8 ]$ y5 O# D - * This program is free software; you can redistribute it and/or
7 w& O5 F Z4 H8 a' [0 O - * modify it under the terms of the GNU General Public License as
$ b9 N5 B$ h4 Y H4 A+ j3 I - * published by the Free Software Foundation version 2.
- a/ c- [9 k6 ]: q - *
+ g* e$ X p4 U; t$ Z* H' v - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
V8 M! t. j+ M: A5 I - * kind, whether express or implied; without even the implied warranty
8 o. W$ Q& o/ s2 x - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the5 _5 r+ p u$ {: Y p
- * GNU General Public License for more details.
1 h2 o& z- h# |7 n+ z2 \ - */
+ t* o" I4 {$ K7 f3 M: m7 b - ; z- H; ~+ ~ n4 [3 T
- #include <linux/module.h> b8 H5 p4 S8 L# ?
- #include <linux/init.h>2 W' q C4 b4 f% c
- #include <linux/errno.h>
4 N; p( i5 F& N% ^6 w - #include <linux/types.h>( E+ p0 @5 d+ g7 B0 k: b+ Z
- #include <linux/interrupt.h>
7 f1 S9 f$ I) r( [* E2 I - #include <asm/io.h>2 @" }) }7 s' O! D
- #include <linux/moduleparam.h>" N. r$ q( w! c/ l9 _) R
- #include <linux/sysctl.h>
: H6 M/ r+ a( n) `0 n, ?1 r - #include <linux/mm.h>
7 r# L% }$ U# {% C- A" x$ M - #include <linux/dma-mapping.h>
- O& R& r$ o- O8 } - Q% m8 q+ U: I2 o9 X
- #include <mach/memory.h>
' G9 }' X4 }) v: h( K6 h, X" G7 N- n - #include <mach/hardware.h>
- ^; V; B, b/ U2 f w _: N - #include <mach/irqs.h>
1 |7 p4 h# m9 N2 N# W0 v - #include <asm/hardware/edma.h>9 e% i4 Z ^- {+ Z# C
* A5 c2 R3 P1 D# | l- #undef EDMA3_DEBUG
! P/ q! K; R2 t$ N( Q2 @( s6 O c - /*#define EDMA3_DEBUG*/
6 [) w7 u; C& C6 } - & A0 f4 p/ R. V- t# n4 o" H( K. v o3 U
- #ifdef EDMA3_DEBUG2 V9 L1 y2 R* }8 y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)8 R% X' s: }! V) o4 v4 |
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
: k/ ?6 c* ?* v+ F% u- E7 b# T - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
c" B, t) m3 K8 ^1 D - #else& _. ^7 A- L! k6 Z4 o
- #define DMA_PRINTK( x... )
! Q% {+ n: ]9 X. i5 F- @ - #define DMA_FN_IN
! ^& s! L6 I9 U4 C$ ~% d- I( G - #define DMA_FN_OUT
8 |+ G4 j3 _ `( W. R3 v6 H - #endif
' t# s6 Z z, q* b
6 U( b5 c# H# ^, A- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
3 T# p- d& p$ Z" |) ^4 P8 I - #define STATIC_SHIFT 3
# T0 {" X2 }* c1 K4 z - #define TCINTEN_SHIFT 20; m( g, S! y3 Q4 E/ y# ]9 o
- #define ITCINTEN_SHIFT 21/ [6 `9 F" d5 ^( Z' Y* p+ Y: V
- #define TCCHEN_SHIFT 22
% W3 q) O. O+ x6 [ - #define ITCCHEN_SHIFT 23
4 `8 v7 N/ P5 j3 E7 s$ e' T3 V6 ]: t
" Q, w6 g% a' z( x3 o% o* V- static volatile int irqraised1 = 0;
" \* h$ X A; ~. m. z, y5 \ - static volatile int irqraised2 = 0;/ `3 z$ u" C& |
, x3 e% w' H9 i( a* ^+ |- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) ?# [- i4 v2 ?) Y' K9 F - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
% ? ~6 W: w1 W. Q! [ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# d8 G5 m. |: j1 o B a
# v; C1 q1 j' }7 G- dma_addr_t dmaphyssrc1 = 0;3 r; p" @! t: Z# g h# ] Y
- dma_addr_t dmaphyssrc2 = 0;* Q/ j" P- h- Q" C0 s9 r \
- dma_addr_t dmaphysdest1 = 0;, a* |' G8 Y9 M/ M
- dma_addr_t dmaphysdest2 = 0;" `$ z' X3 k2 `" N& y; m- C& f% ^1 `
- # c7 Q) n W1 U R' E6 a9 q
- char *dmabufsrc1 = NULL;6 Q9 E6 \- X: c4 R9 p$ p
- char *dmabufsrc2 = NULL;: i4 Q2 D1 u) T' d. k4 d9 C
- char *dmabufdest1 = NULL;
) S1 P* m. t2 ?8 ~2 s - char *dmabufdest2 = NULL;
3 z$ O) o6 n+ O# |3 P) m; i3 i - 1 x, @! d J6 i# Y# x1 e' Z
- static int acnt = 512;% H% \* x4 [/ `. |1 g9 J, f
- static int bcnt = 8;
& B l1 j0 X0 N0 E0 A2 O - static int ccnt = 8;6 m+ z1 Z# S+ Z! F
: M N! {* r7 r6 q- J5 N) M; I- module_param(acnt, int, S_IRUGO);: o2 a0 y8 ~5 y1 W, c. a
- module_param(bcnt, int, S_IRUGO);- _/ k& s8 C+ n/ X& o
- module_param(ccnt, int, S_IRUGO);
复制代码
% U$ z. |4 x/ d9 u: Y
: `- G+ l1 A& m$ p1 U 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 F+ Z6 s# c. ] C a/ qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
! R. d o: L7 l, ` 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
6 @# Z: y* M& ~3 S- W9 K) z Q/ F8 @. W
# X7 J1 d8 Z7 z2 d# x
|
|