|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 K: c: i" M1 m: N" e
- [code]EDMA sample test application
" }' a( N2 z5 y1 p8 d - /*
% x1 @9 U/ G! u0 B* f; ~& O - * edma_test.c
/ `4 |1 j" S" c) p+ q- L( F - *
, A9 R4 F" I) g1 c - * brief EDMA3 Test Application
c7 ^, T; J8 W0 g$ x4 I - *
6 k1 V8 n+ ~ b9 {5 C - * This file contains EDMA3 Test code.$ U/ L6 U5 F6 ~
- *
5 T9 G+ y& M1 C% k, f - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE: }7 Q2 q( Y% [. G2 m" g
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT, A Q. G9 \, E$ i/ d$ R
- * TO CHANGE.
3 o) a# |. Q7 c* A1 Y4 ~# v& ? - *
- W4 X3 w6 ]7 n' e - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/2 K+ `' [7 M& u( a1 l* O/ z7 Q' }
- *. `6 y& z0 f* y& t! u4 W
- * This program is free software; you can redistribute it and/or
5 I9 i5 B& C1 z" O2 y - * modify it under the terms of the GNU General Public License as# L+ \ K/ q1 a7 }; F0 v
- * published by the Free Software Foundation version 2.
6 ~2 I$ X" |, j' S! s! n* F - *9 H' y" `2 O* R4 u7 k7 C
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
3 [: ?9 T+ g$ _8 ~$ S: Y! m- S - * kind, whether express or implied; without even the implied warranty5 N. s7 O7 j9 j2 ~ \" h4 ?5 y
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ A* s- [6 |, G. l5 X+ a4 r, M
- * GNU General Public License for more details.
$ [1 X; q0 \2 L0 _- b - */, Y9 {$ @: v/ B
- 7 v. C: [' t# r6 ~: J. K
- #include <linux/module.h>- v+ z& |8 U) p* d- q1 v& F
- #include <linux/init.h>9 t! J5 C4 e. W# T) t
- #include <linux/errno.h>& [3 x: W& D1 j% P
- #include <linux/types.h>$ Y1 F! O7 G Q% z* F& |/ W
- #include <linux/interrupt.h>. U. d0 D5 w2 M" ]! {% e) i/ P7 J
- #include <asm/io.h>
3 T/ S" S( v( ?. F( L! c7 H4 ] - #include <linux/moduleparam.h>* m; A3 u! m) e7 G. x/ h# N# q
- #include <linux/sysctl.h>) \$ S! J) _. k' X
- #include <linux/mm.h>
: G8 G9 R0 I+ I; E H - #include <linux/dma-mapping.h>1 {6 e1 n0 ?9 V+ u- o% H3 ` o
- 2 R# b) x, [* q
- #include <mach/memory.h>5 W( x, ]1 R& _5 Z& a8 s
- #include <mach/hardware.h>
: Z1 Z3 ~) v1 T! C* i* @ - #include <mach/irqs.h>/ \' Q* v/ P- W- c5 L0 E \2 O
- #include <asm/hardware/edma.h>
- g4 G: ?1 z- B Z4 W - 4 `+ t" Z1 o% L5 Q b$ z
- #undef EDMA3_DEBUG
5 ]" [8 x2 Q" W$ T2 Y - /*#define EDMA3_DEBUG*/- U* e4 h) }) O1 h/ X. v% G9 U& t- A
4 H h/ u! B# N$ {- #ifdef EDMA3_DEBUG+ f3 p" M& R' g# ?' |: e) v% p
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)* n( F( m4 |4 Y! [* G, n* o
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; [8 @% j7 r3 c7 } O3 t% H - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
# Z+ ]0 h# M( z - #else
. J, ^! E7 i: k% g1 u* a) y - #define DMA_PRINTK( x... ), q5 h$ \, S6 l+ ]0 [! O* ^7 x
- #define DMA_FN_IN0 F! Z7 R% d' O3 b/ S
- #define DMA_FN_OUT
, | [" V Z4 h! ^! v: C6 C - #endif( ]9 R, V3 m! ]4 S- ]; L7 [& P
- 7 H. z. Z) _- u e: O: ?& N$ J ^6 }
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)1 G2 ]) w6 C- g- U0 i
- #define STATIC_SHIFT 36 v1 x- r; {& b
- #define TCINTEN_SHIFT 20, i, T! O2 N: _+ U0 n/ _( T7 B R
- #define ITCINTEN_SHIFT 21
2 z' \- Q& T) W) [# @ - #define TCCHEN_SHIFT 22
4 p3 U2 b `$ T% M! O - #define ITCCHEN_SHIFT 23
1 z# r9 C' |# d: T# ^/ s) | - % C6 y5 V1 Q' B" e
- static volatile int irqraised1 = 0;
4 B% a l6 K8 o; X1 X$ R - static volatile int irqraised2 = 0; B6 V- g# M: O3 S- N, ]
% M- v% x+ h4 W' S7 q- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 L% K# V; E$ a* X% h; I
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 h) g9 d, E: ?/ ?/ J3 ^ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: x4 _; S0 V9 \: b
' C' Z0 V3 M1 @8 P7 n5 m- dma_addr_t dmaphyssrc1 = 0;+ l5 U* o& \$ I6 q% X( c! w+ |6 W
- dma_addr_t dmaphyssrc2 = 0;
$ R6 S9 H& n: l - dma_addr_t dmaphysdest1 = 0;
2 D' n' F7 F- A. ?- e% H7 E - dma_addr_t dmaphysdest2 = 0;
1 V' F: i+ e: M9 {3 x; e/ E
5 K7 s- O3 F; }. M6 F5 z% ]( e- ?- char *dmabufsrc1 = NULL;! @0 p) D5 [: i5 [: h
- char *dmabufsrc2 = NULL;
6 o. D$ _) A, C: n E - char *dmabufdest1 = NULL;
, Z- E/ v6 O' o - char *dmabufdest2 = NULL;
b# E. U! a7 e
3 e, W# w( ^( a7 l" v g8 |+ t% A- static int acnt = 512;/ r% q& b M2 _/ B" m
- static int bcnt = 8;: m. Z- _ E, v& p% u
- static int ccnt = 8;- b9 R, V% `* n# f" m/ X& b
- 9 I( g* P2 m4 s, Z# h
- module_param(acnt, int, S_IRUGO);7 \$ C W3 H; S- ?
- module_param(bcnt, int, S_IRUGO);
( M5 L5 P7 W' O- h/ y5 c - module_param(ccnt, int, S_IRUGO);
复制代码
- ~: g# {/ D) T" ?$ |# W8 l8 V* a/ W% Q: h! `
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用9 E2 A' \6 Z" |* x1 E9 V* ?8 O4 s
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ u% J, [/ R2 R 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
% G ~3 n* I( v! h4 c! R V
( ^/ e8 G# I2 b, v0 F9 u
0 s3 Q; _2 h* t/ a4 y1 d |
|