|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 8 Q2 a) ^) I% ?
- [code]EDMA sample test application
7 G0 o" x9 {* i1 p. V$ H. | - /*5 @; \ J# d& h+ }# K) C4 F1 P
- * edma_test.c
' N1 I+ |: I& G( t9 N - *
+ H8 D5 s8 k8 ], u* n' O - * brief EDMA3 Test Application! C. a1 f3 y( H1 c+ g( t2 L
- *
, |2 n) {. [& U - * This file contains EDMA3 Test code.; k4 I# K' w1 I* A
- *$ A# N1 h* T' P z8 p
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE6 I4 H+ x# n3 ?9 L
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! j7 {; V. A* M& y3 k5 J5 u
- * TO CHANGE.
, O. `. C: z0 K. w& D* x - *1 V! D, Q4 E8 G: r
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ ^- f/ g2 {+ ]" O2 \ - *
3 [5 j6 Z7 w7 O2 ^( B, }, i# R - * This program is free software; you can redistribute it and/or
7 t. B/ ?: {1 j" H- X- } - * modify it under the terms of the GNU General Public License as
4 y2 L9 A( x1 X - * published by the Free Software Foundation version 2.
4 f8 k: T1 F& F. o5 u: F& W6 D - *
! ?' v9 \& U# c, w8 O - * This program is distributed "as is" WITHOUT ANY WARRANTY of any9 R" S9 Y( R* b+ F" u
- * kind, whether express or implied; without even the implied warranty
: n& R0 K, @" y+ V& f+ U - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* A* Z4 r1 b6 L ], H; ^
- * GNU General Public License for more details.
! i% Q* l/ _$ ]" S - */4 s5 W% I# t7 D9 C3 J
/ G, }7 X* {& T" ^- #include <linux/module.h>
# i* u4 e' V \ - #include <linux/init.h>1 o+ M4 L" R! d( Z6 E
- #include <linux/errno.h>, Q S( @6 Y- j5 e1 J. w4 C5 N# T0 w
- #include <linux/types.h>7 o" r! k; Z& D+ n+ x2 A* S7 d
- #include <linux/interrupt.h>$ l% u5 M( ?! j% I6 U( T
- #include <asm/io.h>
, O! |2 Q2 l. ~1 d' a! v$ N - #include <linux/moduleparam.h>
- y# C! _! W/ F - #include <linux/sysctl.h>
/ @3 y7 W# G$ q) a9 a - #include <linux/mm.h>
, a- o# y) e- i. d$ N' q! J4 m4 J! S R( i - #include <linux/dma-mapping.h>/ r0 L' J: V' Q. T: U1 z
- . R, r1 X5 c( b; [* e
- #include <mach/memory.h>8 f/ c L) ]% ?4 x& P" }2 W
- #include <mach/hardware.h>6 C" k! E) T0 T; Z; \
- #include <mach/irqs.h>
1 z/ E) D- T3 r( o - #include <asm/hardware/edma.h>
. Q9 H/ ^( Y* b8 U
* Z2 u8 C2 y* M: n9 _4 q6 [1 J- #undef EDMA3_DEBUG
# {( C0 I: H. ?) d5 P G8 f2 P - /*#define EDMA3_DEBUG*/
$ ~& \* x2 Y6 C6 e4 ?
5 [* t L) u: j7 e- #ifdef EDMA3_DEBUG D7 B1 n8 m, e
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS). k3 k7 N# Q. o9 d: k
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__): q+ r( @! F2 j0 ^5 g7 `+ T' v% }
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
7 U! ?. T2 d) K% \, L% T: C - #else1 X* J; a9 o5 ]( `6 @
- #define DMA_PRINTK( x... )2 Z j/ A' h3 J/ o
- #define DMA_FN_IN! p* y$ U$ j4 z: \6 s
- #define DMA_FN_OUT
$ | \1 _2 z+ t - #endif. ]/ Z7 O7 R# X7 Z2 D
, B1 g+ @2 L8 z/ a0 r- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
& m" _/ {" W4 W4 B* r6 U - #define STATIC_SHIFT 3
; s0 ?$ N) ?& E. O I" B - #define TCINTEN_SHIFT 20
. Y j. L5 ~5 g4 T# H; L* b - #define ITCINTEN_SHIFT 21! w3 ]2 l7 h$ U/ ~
- #define TCCHEN_SHIFT 221 m7 @% b `. C2 X4 K0 j2 W0 t
- #define ITCCHEN_SHIFT 23
! [ l0 o B6 H
. ~( i/ S$ T* L3 ~) H* c, ^# S6 @- static volatile int irqraised1 = 0;$ S4 b# l" m& p
- static volatile int irqraised2 = 0;2 E3 o' ^; E( W4 v `2 a9 Z+ K
- 5 q! A3 W' U: [2 W$ ?! H
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. b- i3 |( x1 \6 Q) z3 k' R
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- o4 Z* Q8 d. V5 I* l ]% O3 n7 b! v
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 j ?# [# [5 h1 [9 S) r( _- v
- & a- l0 c) o& {6 V! C
- dma_addr_t dmaphyssrc1 = 0;
+ d: n/ X# I+ E7 L, {* Z/ n6 X - dma_addr_t dmaphyssrc2 = 0;8 p; S6 }2 W; i1 `+ @9 j
- dma_addr_t dmaphysdest1 = 0;: y: t+ h% H9 \! O* P
- dma_addr_t dmaphysdest2 = 0;
4 W: u2 k* f1 m" ]8 i/ G8 L8 e
. l6 o& W$ q8 `3 N9 n" [) `- char *dmabufsrc1 = NULL;
, r7 \1 ^ s; J - char *dmabufsrc2 = NULL;3 e2 g/ l# p, i: Q9 G7 l; K
- char *dmabufdest1 = NULL;% ?. [) T a8 c# s' r
- char *dmabufdest2 = NULL;
! a2 h! u% b2 h - % \( _* r# {) {8 z$ N' Y
- static int acnt = 512;
! X [ |0 T4 G8 M+ w) l# c - static int bcnt = 8;
7 e& e# e/ f ~# w" \/ O, h! G - static int ccnt = 8;
) X; j4 E/ Y7 x; _4 o
% b5 \) r9 c1 r% A* H, C- module_param(acnt, int, S_IRUGO);
* o3 ?" K0 O+ X - module_param(bcnt, int, S_IRUGO);7 V; L3 e* ~& `1 X
- module_param(ccnt, int, S_IRUGO);
复制代码
) K; J9 K' j- |, B( `: \0 I) ]! R' \9 O. p% v- o7 a
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
0 v7 o1 G" H) W3 }5 D2 Narm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. o- O, ~' G+ K! P3 h7 C 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" B, o1 f6 [- ?( u. Z, t
1 I2 o3 ^2 e( ]* m8 M. {) |
4 T N8 q) Z W5 N7 g |
|