|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 4 J8 v0 G* @; ]
- [code]EDMA sample test application4 q0 g# o; X, Q$ A
- /*
0 g5 G6 I2 e- N0 k5 a - * edma_test.c
5 t6 ?, C- r( y6 _/ r: C' x - *
0 }! j, E9 Y8 x! {. m& P2 e - * brief EDMA3 Test Application
; b' A; ?' A( F+ y! i( T4 v) I - *
) [. r" |) Y$ ^9 f, [2 u - * This file contains EDMA3 Test code./ V# L7 I& Y9 D1 H( c# R! h: n
- *+ R- ]) n2 t) v: N& C! q
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 Q. ~6 p" O6 E! H$ ] S4 G8 c3 P - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
" u) Y$ }. X& i0 {, l - * TO CHANGE.8 D+ ?% r& [( ?$ o5 s/ m5 l% D
- *
( k* ]# P# ^* j# J/ }2 x. |, W# _* L - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
% f& O9 [, i+ p" z* A! @9 q - *. |: v+ n0 H: J' Z9 ~4 `/ ]
- * This program is free software; you can redistribute it and/or+ s \* H; D' z& z
- * modify it under the terms of the GNU General Public License as! _1 U- c* ?9 p4 ?
- * published by the Free Software Foundation version 2.
9 ?6 g1 L6 e& G - *
4 o6 A/ _7 |% T8 R0 j5 ] - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
; n7 J, ^+ K3 s7 d7 L- J" S - * kind, whether express or implied; without even the implied warranty
1 @9 x! D' G$ F0 A" c - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
/ h# d) C* a% Q - * GNU General Public License for more details.; `& H6 n* E" [2 u% n
- */
8 o- n0 e1 f+ C- ]
. W1 _4 p' y1 N4 U" |- #include <linux/module.h>
1 d8 U- u7 p) p" H3 a3 \( a - #include <linux/init.h># d F5 D8 |% F6 y0 N* N
- #include <linux/errno.h>; z4 a/ Y; q: W$ b q: D$ g2 m
- #include <linux/types.h>
- x9 K4 u6 S# g- `) `9 B0 k- G" } - #include <linux/interrupt.h>8 d) a/ a( Z; t
- #include <asm/io.h>
. \" H; q; ]4 H4 B" | - #include <linux/moduleparam.h>
. `- r/ G+ ~' f- i; {# ]- _4 b - #include <linux/sysctl.h>6 e$ z2 O, m9 ^1 V
- #include <linux/mm.h>2 w! ^9 }+ B+ i- k
- #include <linux/dma-mapping.h>
& m3 C! a" H& l+ Z' Z1 _ - 0 U( d4 j9 ~% z0 n* e0 o; u7 X
- #include <mach/memory.h>
2 U9 Y( Z/ g5 A5 P# M& c; F0 s - #include <mach/hardware.h>
1 A) A" J4 H: Q' B' C/ W - #include <mach/irqs.h>
" @. P1 x" [0 ?8 O: q: l3 U - #include <asm/hardware/edma.h>. u3 C1 {% J1 O, J" n' x9 S1 L% b
- 0 S2 r. e( r( u! Q9 j- [5 n! ?
- #undef EDMA3_DEBUG
, l2 I0 p" e; U7 C - /*#define EDMA3_DEBUG*/; ^; Y, N: I" m# \3 Y) ^
+ I# A% J) O) }0 k/ h& Q( ]& ~' @8 s- #ifdef EDMA3_DEBUG9 M" D$ h. p( c1 j$ g' m) H
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)3 Q+ J ]- K5 H8 L m1 X
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__); Q. x7 G; x( l- b: v6 t& X
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
' y, Q4 N' C: i - #else
# I/ p4 T" K3 H. E |- D) h - #define DMA_PRINTK( x... )0 A% [+ G) v: K$ t0 c) }6 A
- #define DMA_FN_IN
! m; d7 q% X1 s4 A- G( ~/ |6 v - #define DMA_FN_OUT- Q7 Q! D+ V1 X- D. g. b3 O
- #endif5 O5 f* ?1 |" n. G4 D. I+ x" |+ c
- . i$ H3 h* m7 N, `
- #define MAX_DMA_TRANSFER_IN_BYTES (32768). Q5 v8 r& n7 ~" R x
- #define STATIC_SHIFT 3
/ `$ l; S2 ]/ ?" l2 u' A - #define TCINTEN_SHIFT 204 \0 @5 @9 X. L
- #define ITCINTEN_SHIFT 219 E5 S' ], p$ J
- #define TCCHEN_SHIFT 22
5 u; E0 W$ _5 A( P3 h' v9 ] - #define ITCCHEN_SHIFT 23( U& c$ a. j5 P J# y
- , p4 U- B* U- T$ |+ a2 T: ~+ @# \
- static volatile int irqraised1 = 0;7 M& ]; q7 \6 J' e' E+ j
- static volatile int irqraised2 = 0;
3 a8 X% x) {# w' {2 l G$ [ - 2 h; n$ r; Y% l3 W: [! x
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( F+ v$ { t/ ~
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 i; Y/ m6 P7 J) x& N
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
s% X' x2 q+ X/ T8 |
2 x; E3 e Y n m/ W: r! Q- dma_addr_t dmaphyssrc1 = 0;
7 e$ o0 Z1 U, W) G$ V - dma_addr_t dmaphyssrc2 = 0;2 y- G1 M' D% T/ R" q6 o
- dma_addr_t dmaphysdest1 = 0;2 v" h4 ?. m) K! h
- dma_addr_t dmaphysdest2 = 0;! ^3 i& _" Q5 g! y# |8 {
& e! G5 g7 J }) y- char *dmabufsrc1 = NULL;
Z% H' _7 |: a% R& Z: J4 y - char *dmabufsrc2 = NULL;
3 O/ {" i& C4 P0 C - char *dmabufdest1 = NULL;
- ~: m/ n- Y5 V6 q - char *dmabufdest2 = NULL;
- a7 y( [4 }" O0 \, a: S - 2 m; ?; I; x& y% k7 t
- static int acnt = 512;
. L* N# q# G3 [ N7 m1 @' S - static int bcnt = 8;# | Y @, V. i0 `
- static int ccnt = 8;
8 O9 J8 ^/ d% U1 I6 b - 6 R% [# y% {( L0 N' C4 j- I/ P5 U( D
- module_param(acnt, int, S_IRUGO);
, R5 X5 |2 Q$ K, g5 U - module_param(bcnt, int, S_IRUGO);7 Q t5 l1 W* ?1 o$ t/ l/ h) y! u
- module_param(ccnt, int, S_IRUGO);
复制代码
8 D/ f% F" h4 r$ R% P l7 w* W! U* Z! Z& W3 b/ F8 w* W
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用( j* R' Z- Q3 G# n8 p; E. V+ d
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。8 h+ M; m- |* F4 }
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 \7 V1 G8 Z8 W$ ~! r b5 Y2 K. u
" E$ ]$ `$ s/ q. S% ~1 X& t/ I
5 z& V. G+ m5 d1 e |
|