|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 , x5 O/ g/ G, V/ H K' q) l
- [code]EDMA sample test application
1 K @# `( N* Y1 w - /*7 b7 L. K) C5 x6 Q& {
- * edma_test.c
& w4 F* | f$ a% I. H - *
4 K& N4 x/ r' X - * brief EDMA3 Test Application+ |, s l4 P3 f* a6 m
- *; X5 {4 O8 j. x" m( i4 E9 Q4 R
- * This file contains EDMA3 Test code.
6 F) B" u) Y7 ^$ M; ?/ D - *7 J; j9 K6 ^" A+ ?
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE' E& v$ {4 ?6 ~9 p+ L* F( C
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
( ], b/ ?( q+ q& N - * TO CHANGE.' j# w7 r. X8 i" w5 A( L) Q. y
- *+ P6 ?7 t, A( ]! n4 N& D) y* A3 e
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/4 q9 w1 D" @( [, `; R) t* t* ?+ [
- *; d$ z5 c3 m) E' f! b9 w( y; e
- * This program is free software; you can redistribute it and/or
+ G9 U% O: H4 {' b# Y/ `& f - * modify it under the terms of the GNU General Public License as- s. ^9 `7 E3 ]( v1 |# Y$ |+ [8 v
- * published by the Free Software Foundation version 2.+ a+ u" y) r! j' C8 d% Z& {
- *. h: W6 {- l3 B
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any6 K) e3 l! j+ y1 P- F9 s, q
- * kind, whether express or implied; without even the implied warranty
9 w& V3 l$ c- O. w2 z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the6 O0 z) F6 [4 @/ A( v5 f, ^
- * GNU General Public License for more details.$ L% w) |/ R8 d6 b+ C3 @
- */, s$ e9 \7 t. B8 Y2 d9 E8 [7 b# n
- 1 J' `. H) S* {0 p9 i
- #include <linux/module.h>
3 b4 l8 h: G8 f; s6 x; @. j - #include <linux/init.h>$ u! b+ Z* c) S: ?# @% u) W" J9 \6 e. U7 B
- #include <linux/errno.h>
8 ~" Q m$ m% X7 U - #include <linux/types.h>. Q/ K- C; g! G- O' j0 C. ~
- #include <linux/interrupt.h>" A$ i; Z+ c4 a! }% O
- #include <asm/io.h>
7 {" C7 F) ?6 w7 Q1 O! C! s' I- A8 v - #include <linux/moduleparam.h>+ p& ^2 A# C) m- S8 ^
- #include <linux/sysctl.h>
# S# U) Z, @5 B7 Q# i - #include <linux/mm.h>" f* s% o1 x6 w# u, W6 O
- #include <linux/dma-mapping.h>& M) [$ F3 Y8 w
; X" H! [/ S3 h" O$ o- j8 E$ B) q( s- #include <mach/memory.h>
$ ^# E2 }1 h4 m$ y: B) n - #include <mach/hardware.h>
' l2 C% [: }! d - #include <mach/irqs.h>
& o* g2 b3 N) T+ A% q3 T - #include <asm/hardware/edma.h>1 Q3 `( _. z0 C, a
% }# R- y0 I U' B% R7 G, O1 P) k5 p) d- #undef EDMA3_DEBUG+ o4 C- x7 B7 k- A$ \1 y
- /*#define EDMA3_DEBUG*/( S, |/ ]: m0 X/ f; x+ H# @1 f( i
" s$ q" n* `1 {- #ifdef EDMA3_DEBUG% \* r t5 C" U, W1 x' S' t( w
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
9 A' l8 m: e& `4 U - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
& p+ q: ]( [" w5 [' U% e0 V. q - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)# {; i1 R2 }" i8 k
- #else
) G! T( E8 T9 P - #define DMA_PRINTK( x... )
" k+ m& p8 Z) m6 _/ @ - #define DMA_FN_IN
$ F: r6 a, T+ x. Q; t1 n - #define DMA_FN_OUT3 \; s* {1 D N. B& M$ L
- #endif- E& l- E0 i; X/ o
- 0 A9 t$ F6 s* \, ~- k7 ~& Z5 z
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)% E5 `- F6 I& K8 T0 h% o% |; R
- #define STATIC_SHIFT 3. w, p9 ]+ y$ F3 [
- #define TCINTEN_SHIFT 20
: T0 k6 I' {9 o! l - #define ITCINTEN_SHIFT 21
. U! v5 r7 d; w9 ^ - #define TCCHEN_SHIFT 226 i$ `/ V; j1 g, u) C% Z5 R
- #define ITCCHEN_SHIFT 23( |( ~6 y2 r) j4 ~& x
- : ^" w) _3 M+ G: Q
- static volatile int irqraised1 = 0;* s: h4 t. U2 w9 b
- static volatile int irqraised2 = 0;5 [1 b( b! o* \. ]
! T7 H' s+ H0 Q& F: A ^* ~% G- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
~8 F% Y7 q2 W9 @' i - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( G5 H8 y$ u$ ]4 C
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, Q5 {& C1 y9 o$ n6 |# t5 z/ c n/ ]
6 \3 w9 k/ M3 V3 L& R$ g8 a4 x- dma_addr_t dmaphyssrc1 = 0;! G) M' {$ w0 c5 P
- dma_addr_t dmaphyssrc2 = 0;
- P1 V j V+ ?+ b+ E - dma_addr_t dmaphysdest1 = 0;+ L' n% b5 q" g+ a' I% M
- dma_addr_t dmaphysdest2 = 0;- K5 ~! ]7 O6 ], T
- & B% X a/ I( T4 V9 B3 g
- char *dmabufsrc1 = NULL;) [% G8 c3 W9 u4 \6 V# h8 p/ G
- char *dmabufsrc2 = NULL;4 O! z) ]( Y! u
- char *dmabufdest1 = NULL;
8 C; g' l/ k7 f - char *dmabufdest2 = NULL;$ B4 X3 z% n* f1 q( @2 V
- & S+ V& k1 ?; ?$ }4 s e9 l) V
- static int acnt = 512;
0 W; E. i0 m) s - static int bcnt = 8;" _* x. w" b, p( z
- static int ccnt = 8;
5 v9 [" v/ ]1 ?4 i. B - 6 Y3 v; G8 U, ~% t$ |3 @1 V% z8 b
- module_param(acnt, int, S_IRUGO);* ^; r: B' A1 d8 b4 ]
- module_param(bcnt, int, S_IRUGO);
9 J/ Z9 o" ^) D) a, ~% w - module_param(ccnt, int, S_IRUGO);
复制代码
* f$ L" D; x: w& {8 N& K
& Z& u9 J7 u H4 Q H 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用, o j5 [9 F; K, o) Y, L
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。, }9 x. r# F/ }# l
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。, v8 o7 `( d" \; e" q o" s8 l6 o! X
8 u* w/ f: ?) ~/ W8 e: F# J
, U" g# H# k R k9 C3 G, X |
|