|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
, ]4 ?' Z1 O: c, h0 X- [code]EDMA sample test application
# ]" \' ?7 i1 X9 I; F' q& F# p - /*. v& [# f1 D2 S: F3 \
- * edma_test.c0 `, X$ e e/ Z* N- j% G
- *
3 s9 l$ k# X2 B# ] - * brief EDMA3 Test Application
@) `" e/ C5 U# ?9 j+ ~, ] - * o3 l8 _& W' s- L& ]
- * This file contains EDMA3 Test code.' \) v! M7 Q* ?/ Z& @
- *
$ x6 a( W4 U( G+ b A% l - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( S/ c4 E+ s( y7 q. M3 y8 i8 o
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
! i: @. O* ]1 i3 v( S/ P7 F: M - * TO CHANGE.1 ^6 \( p$ e* e3 q& `2 Y
- *& A* u; G( L- n3 _, f
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/, a% e" Q6 ^: V) O' i
- *
8 Z) @) k8 o0 s# R4 j - * This program is free software; you can redistribute it and/or7 g j9 h; |$ x
- * modify it under the terms of the GNU General Public License as# R* p7 Q+ L' @' S$ u( V
- * published by the Free Software Foundation version 2.$ d4 l; L, V3 E1 T2 O: J/ L
- *
' h: }4 O0 y9 G/ _1 g# |+ k r - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 L1 [7 L. u+ p$ X% J/ ` - * kind, whether express or implied; without even the implied warranty% K* w# f* _1 s* Q9 z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' L! W' z# F. i- { Q- O* N - * GNU General Public License for more details.) Z5 m# l% w; U7 {2 F! Z. r' l
- */# T, s: ^7 E% U J( a. \% N; t+ t
- 9 Q7 }% [. a& ^0 n5 j
- #include <linux/module.h>
s4 v# T; v- W) }. d1 ^- l6 m - #include <linux/init.h> O% g, ?- j6 Z
- #include <linux/errno.h>
; V' p1 }, y" G7 }, n: E! ]; }! x - #include <linux/types.h>% n, p+ N0 G" |% p7 t5 N
- #include <linux/interrupt.h>
- C6 q' A% ^* b9 X8 w4 z* d; ]& c - #include <asm/io.h> |9 {- N+ M# k9 g7 ~. k
- #include <linux/moduleparam.h>
( k" o+ ~# d' z - #include <linux/sysctl.h> V) p8 r2 j& i4 m3 D6 z7 @! K
- #include <linux/mm.h>* Z8 \ s T' {& P& l
- #include <linux/dma-mapping.h>) C) m9 w* N2 `# X
- 5 N. r6 y w9 G9 U# X
- #include <mach/memory.h>
7 D$ j/ C6 q* \" [8 G - #include <mach/hardware.h>0 }8 l& P: O0 L+ ?8 ?6 D4 y) C
- #include <mach/irqs.h>
6 y% |, D3 Q1 d, r% ~2 o - #include <asm/hardware/edma.h>
3 \8 D- l `' t0 e: `/ W4 `9 e& b
- W# K6 ?8 B) X- #undef EDMA3_DEBUG
( e5 Q& B6 ]. T7 m& c" r6 T* Z - /*#define EDMA3_DEBUG*/5 y% z+ _' b0 C9 H( u% Y( `
0 U( }: z# P2 l9 r$ a" l- #ifdef EDMA3_DEBUG
: n' _* A4 o( V/ N- h% O/ D* O - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ ?5 {/ w0 b D4 E, e9 M) V - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__) J3 Z4 g7 M- P* h3 l9 V# V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) n- @; P/ ?! J+ \
- #else; H5 V o2 j; C- D
- #define DMA_PRINTK( x... )
( S4 a4 k/ E2 f+ D# h" _ - #define DMA_FN_IN
& M9 ~* D/ [1 ^- E! h) [ - #define DMA_FN_OUT8 b% y- n1 s& \8 x b
- #endif
) @& `4 C! O# g, d" q
m u4 e+ F' V$ |) k- #define MAX_DMA_TRANSFER_IN_BYTES (32768)- K) s. k" ]% v& e4 R
- #define STATIC_SHIFT 3
" n4 K0 v1 \4 t0 F3 ^: u' X - #define TCINTEN_SHIFT 20
# Y* q& \$ R$ g7 {: m' b - #define ITCINTEN_SHIFT 21% G9 g2 A, M8 ?9 q/ U
- #define TCCHEN_SHIFT 227 r# [9 z; q& L# y8 q
- #define ITCCHEN_SHIFT 23+ o# B$ H1 e' `+ a, a; L; d% t/ K7 n* {
- ; i4 a9 e n" `& {% ]+ g
- static volatile int irqraised1 = 0;0 v" |: w4 ]9 U
- static volatile int irqraised2 = 0;
; P6 W1 Q9 g( M- z - " ?8 z7 e* W8 z* V: M$ J) P7 ^8 z
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: t! n9 J6 m3 ?8 X - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! V) M% _5 R/ g
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# O! M# {. u; e, W8 o6 |
; A. K- f; G/ u& F! s* p9 J- dma_addr_t dmaphyssrc1 = 0;: p) m3 P5 A9 k! u+ I* y
- dma_addr_t dmaphyssrc2 = 0;- a3 g( T4 f' E4 q
- dma_addr_t dmaphysdest1 = 0;
' t) L! |( z* |# p - dma_addr_t dmaphysdest2 = 0;0 G# l! p( {' F3 Y
- - M0 Q( D$ |1 t v, X
- char *dmabufsrc1 = NULL;
* i1 w' A: v3 [/ v: p2 h: h7 s+ K8 ] - char *dmabufsrc2 = NULL;
; l0 w" g0 Z% K: ^ - char *dmabufdest1 = NULL;
/ q- b; f- l- M; T9 G/ h9 l - char *dmabufdest2 = NULL;
, R) n. c6 K2 u: p7 A
- _* B' f" @- S- static int acnt = 512;4 d. p4 \6 l; M
- static int bcnt = 8;! u. h4 k' T6 \& \! X! ^6 C% O
- static int ccnt = 8;4 ^. f5 i3 X% N% m! _
- 1 O2 _! W) f6 {. S4 Z: B6 }
- module_param(acnt, int, S_IRUGO);
8 U# Z) n. s5 }' J# a1 j - module_param(bcnt, int, S_IRUGO);( b& Z- G! W$ @
- module_param(ccnt, int, S_IRUGO);
复制代码 ' A7 I" w9 \. l
( k u4 l9 S, W- t/ \8 N 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
# ?2 }- |* z/ e/ C' f; }' K8 }2 Parm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; i# t( n$ k! K- w 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。( S8 ?8 h* R3 Q. C" |- I6 h6 g$ h$ J
" Q/ V0 V& I2 _. d" ^
" X# N$ o- N. s; x5 E6 z& t |
|