|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 - F7 }! E# h5 t) k1 B$ N0 F8 o
- [code]EDMA sample test application
* @; h7 Y2 r. u: V; L( H - /** J- @- A7 [+ o& s% G7 ^5 P& m1 \
- * edma_test.c
9 Q5 j! u- U) y8 T- J - *+ k1 x |. V6 h; y& k- i
- * brief EDMA3 Test Application
8 r- ?/ H0 X) ]% { - *+ z3 M1 a8 b7 I9 @+ w r" `9 _; n
- * This file contains EDMA3 Test code.6 L1 k+ D" w h4 u ~6 a
- *- @. ^% X* q8 o
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
9 F6 A2 n# K7 W1 y' ]# k! w - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 |3 b8 B" `: t' ?7 Z - * TO CHANGE.6 s F) w3 V9 V- G0 X1 L
- *
% x- o% \# J" q9 x! g; L4 Q - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 ~3 P% @5 H% {% v
- *
: O. J+ I5 [% D1 w+ q5 v( A - * This program is free software; you can redistribute it and/or
+ r f: t9 D! i& J7 ^: T# f - * modify it under the terms of the GNU General Public License as
* L1 |3 n9 o+ n8 H* j5 p# n - * published by the Free Software Foundation version 2.4 X" L3 ^2 S# p0 O; g7 C* t4 B( B
- *# o( ^! I. Q4 Q$ Q# e
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
% n* E3 P: H( p0 m - * kind, whether express or implied; without even the implied warranty
& K& m7 [! h: T5 g# [. A - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! @3 c' m1 x2 I& Z% Y - * GNU General Public License for more details.: _; T& |4 a) J7 g, T' O! R' V
- */4 C) ~" X7 n$ o9 C% g. h
- 2 A+ F1 K+ Y! v3 a7 X
- #include <linux/module.h>
5 R& `2 V8 }/ u+ ~. A) d* C - #include <linux/init.h>3 Y( Z4 u0 s+ d* G
- #include <linux/errno.h>
4 ^ J" H! x6 D - #include <linux/types.h>
) D0 H4 _, Y2 }/ N - #include <linux/interrupt.h>
0 h/ A9 [- X9 z1 M$ ] - #include <asm/io.h>! J; F+ G# r" @: {& ^
- #include <linux/moduleparam.h>
. t! o4 r8 r) M7 E% G - #include <linux/sysctl.h>' E# ~+ E1 W( B- R' ]% N# V6 g
- #include <linux/mm.h>
2 F% K$ Y6 J# ], s3 Q - #include <linux/dma-mapping.h>
, z% y* V( E- ~, Y$ |4 b - 9 j; u5 i! C! R8 [, j+ i
- #include <mach/memory.h>
1 J% O- `/ `6 k5 i' \- J - #include <mach/hardware.h>
! B2 p: S0 V* k3 z, R: H - #include <mach/irqs.h>' Q* D" G. Y2 n3 `2 g+ z
- #include <asm/hardware/edma.h>
# @) a0 _/ a3 P9 D
6 e7 d' D6 T) W; V- #undef EDMA3_DEBUG0 ^5 x. X$ y& e
- /*#define EDMA3_DEBUG*/9 R2 r( w4 f$ J! A4 m2 w3 D/ [
2 o% a V/ p$ l/ {- #ifdef EDMA3_DEBUG( V$ z1 A6 i! d
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) P! m) F {9 t- m- z* C( G - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
) ]+ H' B6 W; T - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), s5 S% R! ]" p" W4 I. {( L% i% y
- #else/ a2 |3 `$ A% l! s
- #define DMA_PRINTK( x... )! R& w8 V+ Z/ z6 q) ?3 n) }# F
- #define DMA_FN_IN
J& n3 ^' v+ K6 [& Z; z - #define DMA_FN_OUT
+ r/ f7 y) Z9 J2 ~1 g - #endif
. o' V) M+ g# ~: @# R! A
b# D: O& D# b- }( E- K' n( n- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
W! l- R( c0 M0 A! F! I - #define STATIC_SHIFT 3 R, N6 Z0 Q# n8 d+ P+ I* k
- #define TCINTEN_SHIFT 20
- n @. F; ~0 Y& R; z. m - #define ITCINTEN_SHIFT 21
3 _. o- |6 T- J# g; ]7 Q - #define TCCHEN_SHIFT 221 j0 d. o1 S9 u4 I1 _/ z
- #define ITCCHEN_SHIFT 23
8 I! K6 U% X4 F9 n6 B7 W R" o - : ^7 P# Q2 |+ N
- static volatile int irqraised1 = 0;
+ P0 L! d2 g: q5 G2 k3 ]8 L - static volatile int irqraised2 = 0;
3 x: u* U1 P5 L Y3 ]# P
& h! U: R6 c" P' O6 ?- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 i$ u) v" z, Y% j - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: |- o+ c* X1 n9 s. U - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ H8 u, Q& ^7 L" z T
/ I4 s7 f' J. g/ X- dma_addr_t dmaphyssrc1 = 0;
& l8 ?: V0 b" D5 q7 ~* ] - dma_addr_t dmaphyssrc2 = 0;
; p4 l, A3 a9 X6 `* {) j; K, o - dma_addr_t dmaphysdest1 = 0;
+ S6 z% E" J6 K7 X# m, O - dma_addr_t dmaphysdest2 = 0;
9 Z1 B' V! J7 ^% {6 |" h - 1 l2 `/ z4 m N2 d- }
- char *dmabufsrc1 = NULL;+ S* P6 q0 ^$ M' Y
- char *dmabufsrc2 = NULL;
/ ^) r/ V- a9 G! {- g! @ - char *dmabufdest1 = NULL;- d9 F" V1 s& K
- char *dmabufdest2 = NULL;2 Y! {+ ?; W6 E9 A
+ Y3 d, b3 {% G4 D- static int acnt = 512;
. K& ?% q! ?6 E. y, ] - static int bcnt = 8;# E- q' ]. W* i
- static int ccnt = 8;
! Q+ y7 g% B& d; e/ F
, L6 R- |( {. w; {- module_param(acnt, int, S_IRUGO);9 ?9 b9 i! O8 T& \
- module_param(bcnt, int, S_IRUGO);
+ H5 Z; M7 R: C3 c9 m# i2 N6 }2 p - module_param(ccnt, int, S_IRUGO);
复制代码
, G8 f( z3 M) U$ l! T: M
, l$ h a7 J' A 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
$ a8 t& l, {' w1 Oarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
$ @7 t' ^2 s# j+ Q 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 V* x9 T" Z3 g; N
: R- s% h( t/ U+ p1 _" X( Z" O, t. c
|
|