|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% M" d" C6 h R0 P* w+ O* `# i1 t0 Y+ C- [code]EDMA sample test application. U) k1 t5 q p2 J
- /*
- [$ q* A/ \: `& l' Q& U$ I8 a - * edma_test.c! b J' N0 ~- k8 A4 R* Q
- *
& z/ H7 W& d# S# o! V - * brief EDMA3 Test Application X2 Z4 s, J( x2 S2 h# V& x
- *
. E# `# \- P3 p - * This file contains EDMA3 Test code.+ t* J ]( e# T
- *
6 {% O1 }# Y7 |9 K o* [$ s6 l - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE& F5 u" z) z- j. C
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT8 Q. W3 u( S; S+ n. e9 N
- * TO CHANGE.
5 g. r' c& E7 x: S. \1 V7 `" \ - *! |, H9 m( O- S4 X' Q8 U6 ]/ I c. j
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com// g, l) j- C6 Q7 T3 R" e
- *) R4 W8 V2 A! J0 B4 \$ q
- * This program is free software; you can redistribute it and/or; i5 Q; G" r+ Y: X
- * modify it under the terms of the GNU General Public License as4 Y+ H \5 a1 c5 J L. P
- * published by the Free Software Foundation version 2.
& A) b! o) y: g5 L7 i$ E; Q - *
) Q3 n i7 x- N/ s( I/ s - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
1 p1 c* j% w/ D: \0 Q: C! \ - * kind, whether express or implied; without even the implied warranty
( ~ r3 K( b) M) d) ~' U' [9 y: m - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2 @/ \. J; n {* m - * GNU General Public License for more details.+ h" \- t# }/ t) }8 C
- */0 F, ~% R) }2 a
- 7 c G& Y5 p" E
- #include <linux/module.h>( r5 E; J1 R" ^3 z$ [ Q
- #include <linux/init.h>) D8 F0 C$ V& ^# R: y' e3 K
- #include <linux/errno.h>
# X3 z( a5 V1 q5 H( ~# X - #include <linux/types.h>
1 f8 v* Z/ [$ Q# F - #include <linux/interrupt.h>, x. \. k! G4 Z* v
- #include <asm/io.h>
! Y' V7 N: T1 p2 P$ g* ^ - #include <linux/moduleparam.h>
' _6 T. S( o" |* _& I, M - #include <linux/sysctl.h>
+ ^+ m- a9 e9 N0 {: ` i' y1 z - #include <linux/mm.h>, W* A9 \6 o, P3 Q. A% D0 w/ f! a
- #include <linux/dma-mapping.h>) w" e1 j% o5 ~3 t6 }- a- G
% Q$ a! c7 b% e+ {! x, y- #include <mach/memory.h>! K; J* ^. D3 k* n. x
- #include <mach/hardware.h>
* b, M+ y- Q, t4 _& W - #include <mach/irqs.h>
$ z+ {; M# ^. Q+ ]( }* t - #include <asm/hardware/edma.h>
M8 Y; l* n0 z! U& T+ R" g# h
' _ B: j2 n- j) G4 a% g$ X- #undef EDMA3_DEBUG
- d" J# D/ i. C4 i - /*#define EDMA3_DEBUG*/' o9 m1 p7 x% g8 j- S% M3 C$ Q
- 4 B. U& H* L0 C0 l
- #ifdef EDMA3_DEBUG S/ p) {- w+ k
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
: a2 t' F" x/ ~6 r2 m* V7 @ - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). A/ z$ A9 X W; f: y- T
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)* j0 p- @- w, w: M; s: A6 r4 {
- #else0 H! _, i; M' } G O0 v- L0 j2 C
- #define DMA_PRINTK( x... )
6 _* L k! Q- W9 Q3 l! C - #define DMA_FN_IN" Y/ E, \4 s$ F- q8 K
- #define DMA_FN_OUT _+ N0 K5 i1 r4 M- K% o: @
- #endif
1 ~4 q" o% \+ G' g& G+ }
' S/ z) i2 z1 w& U- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- q4 }! \1 d4 |# M" L+ f
- #define STATIC_SHIFT 3$ {4 G- } L0 g. q
- #define TCINTEN_SHIFT 20+ p; u5 H% i2 R6 K: d: a1 J; N g
- #define ITCINTEN_SHIFT 21. l3 j/ H: ^. n) z8 A4 E
- #define TCCHEN_SHIFT 228 K1 u0 i7 N4 ?' Y' j$ K
- #define ITCCHEN_SHIFT 23
! z% ?% j4 X8 W$ M/ `( K* A7 S
" v# _* b K( t" I! \5 Y- static volatile int irqraised1 = 0;/ t! M( x) h3 B+ @ [
- static volatile int irqraised2 = 0;
2 B0 ]2 M. x O! ~) f+ [% p - * X; b m7 r# T- \% i0 A$ W4 J. C
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' J. u4 | W! I+ F - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);" s' O4 d1 S" @' P, ]8 ]% f2 N
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ A" @9 v" n9 j - 3 O$ x; V/ @. E/ W$ R0 S
- dma_addr_t dmaphyssrc1 = 0;
n; L8 f3 s% o, ~- T' Z - dma_addr_t dmaphyssrc2 = 0;- ]4 d, m3 y4 ]9 n7 N/ e
- dma_addr_t dmaphysdest1 = 0;0 n' ^& `% ?2 N1 O7 N( g
- dma_addr_t dmaphysdest2 = 0;
4 t7 a6 J# Z) ]$ y/ `: ^; c- P
' z, u1 N; L+ e4 k) B# {( {" G- K8 S- char *dmabufsrc1 = NULL;. \6 ^9 A+ Z, F' q9 k1 U
- char *dmabufsrc2 = NULL;
1 h$ K" ]3 D. `0 H' b - char *dmabufdest1 = NULL;
A B9 ~6 ~ f4 T: l6 a+ l - char *dmabufdest2 = NULL;0 q {4 H% c- i P1 z# Q
( r" U) U5 s* f7 v- static int acnt = 512;
9 V0 G N4 t$ S0 \8 E+ Z/ p( H - static int bcnt = 8;. M, a4 b( P1 u6 Z5 x
- static int ccnt = 8;
: }" I/ B. [' m2 _9 S& X - 7 ^4 z, ^0 `$ e& A/ R
- module_param(acnt, int, S_IRUGO);6 q6 i% u9 v4 N+ N: S$ h0 k
- module_param(bcnt, int, S_IRUGO);
6 h, [+ H3 s- {5 w0 K - module_param(ccnt, int, S_IRUGO);
复制代码
0 i# b5 i$ Z8 H/ D; U, g2 o; g) J/ ^( A; |+ @# m9 X
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用& q* C# A ^1 p! W* y* r# c2 i/ G
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
0 ^$ Z; k9 e! L$ S& `- M: J 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
6 _) a( ~+ I- d: I9 _( j: v2 i: a4 f& X
7 B" v) v) L( ]3 L% {! @ |
|