|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
: O/ g9 r5 R: Q- [code]EDMA sample test application
& M' C9 k# V( W2 r7 q$ K [( T - /*
3 \. d5 C( v5 T" C" j0 j* W - * edma_test.c
0 R7 n$ I8 o8 e$ C# N - *
; b+ c9 t }) a- Z8 T# f - * brief EDMA3 Test Application7 a2 w V% [& o" m& s" x9 |
- *
3 z: R! E2 g5 j" m8 `1 _. Y - * This file contains EDMA3 Test code.
4 i) L( M3 C5 s( _' e4 @( A - *
6 Q- Z+ U6 D( C8 H* X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
: Q. J) A6 Z2 H% v0 F - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 h/ c+ U2 _- \ [2 P! ?) w( u; U - * TO CHANGE.
& O" J0 U& W# i5 p3 t - *! U0 ]3 ?+ W5 y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ |+ H1 Q2 O. t8 A3 A, j- B+ _% m. a - *
9 U* `8 H; t5 Q W - * This program is free software; you can redistribute it and/or2 l8 u4 l5 a0 C* I' x& `$ g
- * modify it under the terms of the GNU General Public License as( [ H8 l" Y N$ [8 e" @( b e2 V
- * published by the Free Software Foundation version 2.3 r/ k( k8 n& q, e5 a8 y4 u
- *: x2 |4 a0 Z* v U% _& S7 n& l+ j+ G
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
! U7 I, Y: t) z8 N2 s' S - * kind, whether express or implied; without even the implied warranty% C6 x# a6 q) D9 a
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! D0 ?, ]; f, \ r) p - * GNU General Public License for more details.
, n1 T+ b0 n# O - */" N9 o, L% ]! \: L, N& s8 e
- ) N: B7 \" ^ B( J+ k& k
- #include <linux/module.h>
3 J1 q8 g( g9 ~8 |) ]% e3 M - #include <linux/init.h>4 _; J6 c+ s: ^, l& V- y1 U0 t
- #include <linux/errno.h>
& G$ T! m1 I& F. f - #include <linux/types.h>! _) ^: M8 w, i7 D2 R* }
- #include <linux/interrupt.h>4 E' b0 y; |6 z
- #include <asm/io.h>! a9 L' o2 {' K2 f6 i, T/ u3 Z b; }
- #include <linux/moduleparam.h>* x( M, b8 p+ N) a
- #include <linux/sysctl.h>) b% `/ }/ o2 N3 j( {( P$ C+ {
- #include <linux/mm.h>
% _/ N% D$ u; V% T$ I; T - #include <linux/dma-mapping.h>
$ H9 ~$ ^$ q7 P c$ L
, c; p. a& i& M6 ]- ^ _- #include <mach/memory.h>% C0 V' d' p1 ^' U; j
- #include <mach/hardware.h>7 c& g5 X0 [; l
- #include <mach/irqs.h>
g0 p. i' }5 J$ w+ M$ ~ - #include <asm/hardware/edma.h>! r. g; F3 v/ v+ }
- , j. {/ C0 E/ m" x& m" @, ?
- #undef EDMA3_DEBUG, Y e5 J) I4 n) c) i7 i5 v
- /*#define EDMA3_DEBUG*/
2 H; Z4 e, I( b& f7 ]0 D3 f
% D2 t: G7 F' A5 O& m8 D& s+ W. ^- #ifdef EDMA3_DEBUG0 y4 l, Y4 A+ C- B9 }, `3 S% C; W
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)4 P3 F4 i) u% A& X. `. O1 b
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)) E$ b B$ y( K" e2 M, v/ }( A
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
, \# \$ e- W, w9 P3 b) x) x - #else
T# ?( Q2 l; ]0 r. z - #define DMA_PRINTK( x... )" W3 `* q1 W: {. U# b
- #define DMA_FN_IN
D, f L9 X5 A* R - #define DMA_FN_OUT4 z0 c$ _* L0 G; r
- #endif; a9 {2 w1 @' \7 c: L8 Y, S
) l: x) T, k# m* f- u- #define MAX_DMA_TRANSFER_IN_BYTES (32768)4 p' {# O2 y6 N3 `) @
- #define STATIC_SHIFT 3
. a7 q0 G0 C( ^; b; f - #define TCINTEN_SHIFT 207 d9 ~9 L+ [- z3 R3 @! ]
- #define ITCINTEN_SHIFT 21
7 G. K% f. ^4 J4 P% A j* w: u - #define TCCHEN_SHIFT 22
4 t3 y! L* y6 ]1 J1 K( { - #define ITCCHEN_SHIFT 23
0 J4 b! C0 B/ ^& M) {
) V; Q8 W: c& F7 n- static volatile int irqraised1 = 0;1 L% C9 M. S1 t
- static volatile int irqraised2 = 0;
/ C. D$ ^7 C' d8 n! Y1 i - ' P- O$ L% V6 |% C; z. T& O# M) [. c
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 k" K( e' ]- Q. m; R6 x
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 w8 \% ^/ N1 b5 ?. | - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) k. j9 g' y# c
1 n4 d: i7 m* M7 L4 ^- dma_addr_t dmaphyssrc1 = 0;
& Z* K+ U0 J1 `7 ^% E3 y6 A - dma_addr_t dmaphyssrc2 = 0;
) r% x, b0 S/ Q& \" s - dma_addr_t dmaphysdest1 = 0;
* j4 e: m* S; f7 ^ - dma_addr_t dmaphysdest2 = 0;6 A# y. A/ y8 N. ~; S6 D
0 F% _+ M; e0 H2 h- char *dmabufsrc1 = NULL;
# c7 B5 T7 x* `. K" w" F$ c+ J - char *dmabufsrc2 = NULL;% u& j9 c& O, Q C1 ~
- char *dmabufdest1 = NULL;; x& Y g4 u1 {! W) P! h
- char *dmabufdest2 = NULL; E, y3 Q# {' t$ n" n
- 6 V5 W/ n- h# g! D J8 r0 Y
- static int acnt = 512;% J+ K- Q& l; K3 v3 D
- static int bcnt = 8;/ p$ R" N2 j- N- J1 ]6 [
- static int ccnt = 8;
8 B3 e0 @8 @5 a/ U& X \# u - 2 s# r" h! @1 |0 F: W1 l. M
- module_param(acnt, int, S_IRUGO);6 i% r+ ^9 A& @
- module_param(bcnt, int, S_IRUGO);
& C- |% O+ r8 u; ~7 M - module_param(ccnt, int, S_IRUGO);
复制代码 8 Z! G/ x5 h0 A( E# q# Y
6 R9 i+ e% s; z# {; ?
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% w$ c0 t) a) S, e; yarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。: B! O+ D( m7 d, ^ Y
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
8 ?0 M/ I3 r0 L, q$ I9 v& j! w- q) }* m! K* S+ m* _% _
' \6 D( E, U: I$ D' I# i |
|