|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
! p4 Q, Y9 i2 Q, F' U' y- [code]EDMA sample test application" p _2 n# ^ p8 Q0 h# I# u
- /*2 I3 b7 \4 u0 ~2 U/ I
- * edma_test.c
9 i$ ^; m8 h+ t) F0 J - *
: H# U, l+ j* v1 X/ U0 c; | - * brief EDMA3 Test Application
$ k- I3 O! }! U" c - *" g% t7 v; H+ H' _
- * This file contains EDMA3 Test code.$ z% d1 }/ j; A) p* p
- *" n L# h8 p Y9 i% ]5 u5 B( A4 n
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
. i$ \' [4 w9 i, L - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
, k5 X8 [* S: H - * TO CHANGE.) {& |( ~! O1 k
- *+ s. s. I6 _1 O, N) \4 E `7 I" g
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
7 d: j9 N! e' I - *8 f7 v. f) m0 ?4 s' u" N) n8 c
- * This program is free software; you can redistribute it and/or
% p' D! X8 @- C9 i6 W4 j8 a- M - * modify it under the terms of the GNU General Public License as
* b, }% h- a* o+ T- f - * published by the Free Software Foundation version 2.
3 @" U3 k3 m0 G2 D" I+ h# e6 @8 T - *# s; n- q+ t- z5 Q3 D
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any+ @, T) j1 ^& G. O f8 G
- * kind, whether express or implied; without even the implied warranty$ J4 _0 s6 S- {- j- T
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ L* w7 W/ q) w8 \3 I& w* e. u& P- f
- * GNU General Public License for more details.
1 p/ w2 S5 r" U* J, g4 I - */+ I* f* A3 O- r
- 5 t9 `% g U9 j5 f
- #include <linux/module.h>1 S" t2 \/ T' I
- #include <linux/init.h>
$ @3 s1 f* Q& g* F2 d, l: Z - #include <linux/errno.h>
% P9 F3 l! q3 t0 \# i - #include <linux/types.h>, e" R6 u4 s0 G2 F& u
- #include <linux/interrupt.h>
6 Q! Z0 [ J2 z T9 W- } - #include <asm/io.h>/ e# D4 A) I4 i' c5 r: a5 p
- #include <linux/moduleparam.h>
+ V' H6 J: `, } - #include <linux/sysctl.h>
6 P7 B' Y# y4 y4 Q - #include <linux/mm.h>8 E. T o2 f8 f4 f i
- #include <linux/dma-mapping.h>
# M6 y/ M! Z+ W) k, T6 j
5 n% }. _; e! e! C" Z# Z- #include <mach/memory.h>- Q9 J- y$ D- Q4 N- Y; f) x
- #include <mach/hardware.h>
# R& p+ ~ E, S4 v - #include <mach/irqs.h>
4 F/ c9 i! L# u6 ?7 J, U: h - #include <asm/hardware/edma.h>
# a6 {0 Z! `& [+ d+ K0 v" i8 Q - ]( A: K) u) R; t! k- y; y' Z
- #undef EDMA3_DEBUG
+ _0 E4 H4 |8 e: ] - /*#define EDMA3_DEBUG*/
. c9 O: j ~5 w6 d
2 _8 R0 |5 x7 s8 ^- #ifdef EDMA3_DEBUG
# C8 n x+ ^6 j+ O0 N! H/ ?) j' m7 A8 x - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)* ^9 Y# V4 O2 R$ S% C& J/ A
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; T; c/ z& j5 Q2 \9 { - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
; g4 x0 _$ @& r$ Z4 u" N - #else% X6 n. G4 R s- o
- #define DMA_PRINTK( x... )
4 S1 D2 B4 G6 j" o/ D - #define DMA_FN_IN
5 ~2 h3 ~% A0 [$ F - #define DMA_FN_OUT
8 U2 G9 j2 q3 v. s" F' D/ L - #endif* A! y+ d( r8 a; t& P' r
- % A" E$ Y! J4 Q" H6 c* S
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) p! {9 a5 |. N' K - #define STATIC_SHIFT 31 L6 h& W u4 Z, A& Z* @4 Q9 _: @0 C% u% x
- #define TCINTEN_SHIFT 20
" T. _! J- `; }; G - #define ITCINTEN_SHIFT 21
2 L6 g& X* Y: E4 R; _ - #define TCCHEN_SHIFT 220 C6 p) A3 \4 L1 {# p. R- }
- #define ITCCHEN_SHIFT 23
; D+ G1 B3 d% p5 o* Y% r. |5 F" |
! H4 N0 M1 U/ U" W% d. Q# z' B2 L+ r9 x- static volatile int irqraised1 = 0;
7 X9 ?. t* h" s( w z - static volatile int irqraised2 = 0;' e! x! m. ^0 O% C) U- X
2 s6 H& o8 r4 L- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 ]5 G- ~" [' L; U% G9 _5 A - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% _- i& R ?$ @1 M7 {+ F i# T
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; C7 ]3 {2 T8 X' v& ?$ _7 h
- ! u. X/ _' ^2 k( r+ y
- dma_addr_t dmaphyssrc1 = 0;
4 ~0 [8 |' ?" M: k2 i( H - dma_addr_t dmaphyssrc2 = 0;. B/ o9 _' V! y Y% _& i* y& H
- dma_addr_t dmaphysdest1 = 0;
4 z u+ p! t- x' V1 w: b' o5 u - dma_addr_t dmaphysdest2 = 0;6 _' N* ~3 L) J1 ^9 w+ ^$ p
) d" q5 O# V2 k- |: Z) _- char *dmabufsrc1 = NULL;
& r3 p& n6 R1 ~+ E) v - char *dmabufsrc2 = NULL;
) X, \/ s3 C4 c' z4 d2 i# n, ~9 N3 q - char *dmabufdest1 = NULL; t& p9 T/ C* H" m
- char *dmabufdest2 = NULL;/ G( [1 w3 t0 N# u: q0 q
5 w' K8 n+ D: }4 @ O# L6 E- static int acnt = 512;4 m" g# C. q; Y0 x% x# x/ e* M
- static int bcnt = 8;
' i- C2 a- z, u - static int ccnt = 8;$ [; S$ _. J7 e2 C7 G0 j3 a
- 7 j5 n+ T0 |* v( E. R
- module_param(acnt, int, S_IRUGO);/ e- w* k9 S% i9 E! O' A5 G0 A
- module_param(bcnt, int, S_IRUGO);
+ |) t' c" C4 D! G - module_param(ccnt, int, S_IRUGO);
复制代码 + |3 `( D4 H2 y# g" r
& I; g) W3 _6 p' M4 d
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
( R" A* Z" t0 [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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ }$ k8 ?! t5 b( D 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。+ M/ {1 Z$ E1 e& P8 ~0 U( P
4 z8 ^ b0 { p3 @4 {# r
- T* P' H- f+ M1 [# `% @$ h* Z3 { |
|