|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
8 h2 s6 _' B% d) w/ T( K- ^. D3 [- [code]EDMA sample test application; ]. B! E+ s1 `( c3 {
- /* P5 b1 }3 F! N7 F
- * edma_test.c3 w4 d8 B) U: F3 {( ~
- *& W) B& s. L! A' M
- * brief EDMA3 Test Application9 x9 v! x+ j4 R6 Z8 A5 m
- *, s/ l+ [4 y7 i4 R
- * This file contains EDMA3 Test code.
* q1 }7 k2 [% t: P - *
t) O: i# L2 S7 E: L8 a - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
! h4 e- @5 ]: Y/ u, _! z; m - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
4 N" m" B' v; D. G/ G) d- ]0 n - * TO CHANGE.$ N9 k' m4 |# U" c; h( r# A- o$ r
- *, U* W9 K0 C+ j) f
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 H Z% F% }' u! T, J7 {
- *+ ^( A1 q% _- |/ Z, K
- * This program is free software; you can redistribute it and/or2 m* ]& @" ]9 Q
- * modify it under the terms of the GNU General Public License as
7 f7 {& C! ]5 G/ f - * published by the Free Software Foundation version 2.
! {4 I# L y; J7 k. u) q - *. Y6 d+ R( i) g3 X% I7 p* a
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any. _6 M$ b$ L/ a/ P( K1 T
- * kind, whether express or implied; without even the implied warranty
& A& X7 f+ J% @6 F T2 T - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ c( s8 l0 l$ X5 ^
- * GNU General Public License for more details.
7 R! X% o @+ c( f# e1 V$ E - */, B: H: p4 f$ u6 R& l4 _' [; V
" k1 h r6 T4 E7 c) I1 k- #include <linux/module.h>5 S k. q: q* d6 [$ d2 N' I
- #include <linux/init.h>4 J$ d$ o3 Y# ?3 u/ t% x
- #include <linux/errno.h>
8 w# y! }2 \5 v1 T - #include <linux/types.h>6 r) ?. Z; t9 B
- #include <linux/interrupt.h>5 d n' z, f% n6 n( ^) J9 D6 g
- #include <asm/io.h>
# i( r6 X1 }. R9 f6 v - #include <linux/moduleparam.h>2 ~+ L1 S. D, w4 ~: R
- #include <linux/sysctl.h>
6 {) h# Q2 P0 l" S - #include <linux/mm.h>
0 |2 m2 `8 T V% G - #include <linux/dma-mapping.h>
0 i- X, `0 ]8 s6 ~( O0 D$ q( n7 Q
5 U. |6 ?: X, ` Q' I3 c9 P- #include <mach/memory.h>
% a6 a' K+ h" b: e( y& k - #include <mach/hardware.h>- _9 @6 G5 m2 u. ?2 X
- #include <mach/irqs.h>
, }1 H4 Z, ?$ A, R- v* R( R - #include <asm/hardware/edma.h>
& K# R& a2 R# r+ ` - * D i7 J8 k+ T- t* R
- #undef EDMA3_DEBUG- s7 b, Z0 j9 S4 N" ?, h
- /*#define EDMA3_DEBUG*/
. V- a- Z' ?* j/ y, K - $ |) R# S4 V2 M: ?& ?( H
- #ifdef EDMA3_DEBUG
( ?3 ^: \2 j- R; k8 P - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS), [1 Q/ y9 C1 c- C. l3 E
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)9 ~ y, ?1 I8 s. U) b3 j* @ q
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
O) F! C; m, e8 U - #else1 G h6 Z" K; I% p
- #define DMA_PRINTK( x... )3 F% l+ P1 y2 H7 e( P# K
- #define DMA_FN_IN
( a! T2 H" D9 I7 }. s- K - #define DMA_FN_OUT* S( V+ Y2 J" M1 J3 {% a& a. O# p9 x
- #endif
) P" y* C7 o; P& o1 x5 h; T( d - ! _1 Q- m! i# H# t P9 b X
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)/ q3 e& H& W; A% n+ M
- #define STATIC_SHIFT 35 D, D7 u/ P$ Y( C* N X a+ N" o' d
- #define TCINTEN_SHIFT 201 I" J7 l5 C- [% ^- |, l
- #define ITCINTEN_SHIFT 21+ F8 y; {: C4 ]# \3 x% N
- #define TCCHEN_SHIFT 22( }& `& n. O6 P7 L+ g, |0 x5 ?7 |
- #define ITCCHEN_SHIFT 23
# Z, `0 W" ~3 m6 F" {7 P - # `* X9 S5 I% y5 [4 a! r/ q
- static volatile int irqraised1 = 0;
, K x v7 [0 ^ - static volatile int irqraised2 = 0;
7 [' i) A+ r' q0 i B6 G
- x% o4 o+ j) r- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- o. R- C6 B- v. ?( L! R% ]0 w - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* S6 w- C0 U! |9 m D0 {+ {/ Y3 j
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ a+ ?. D5 p( x' `$ s% b; f( R! k: H3 E
- 3 `9 h% d/ s* z1 V8 v4 m
- dma_addr_t dmaphyssrc1 = 0;, Z. P& ~0 }# ~
- dma_addr_t dmaphyssrc2 = 0;
0 }% h( C( ^* b- Z" t - dma_addr_t dmaphysdest1 = 0;3 b5 `; u& _" n
- dma_addr_t dmaphysdest2 = 0;5 [. S2 k$ t4 e. S: r
- ^) l1 s& B! m, u* p- char *dmabufsrc1 = NULL;
9 s) v1 I2 I8 R& ?! Z - char *dmabufsrc2 = NULL;
7 k3 [0 r! {: m$ u" s8 E9 M8 n - char *dmabufdest1 = NULL;4 Q2 q8 [# c1 {) A: |: r
- char *dmabufdest2 = NULL;2 W! i' g& c/ o) O2 i
- 9 r* s' M3 B k. @, D7 q
- static int acnt = 512;
. F/ \4 g$ x+ s' d8 S4 v - static int bcnt = 8;- h% W J( U) J% u) _; J
- static int ccnt = 8;
6 T/ X0 S# s4 N. U& f# a% h - 9 ^/ J# v: ]. b$ N' [. E: C" {
- module_param(acnt, int, S_IRUGO);+ u2 c5 [6 u8 o Q9 v
- module_param(bcnt, int, S_IRUGO);4 S" \& U$ r: i! H: u
- module_param(ccnt, int, S_IRUGO);
复制代码 # c' {. U+ Z4 s: [, c# `8 ^
) T- J! v( p' [: ^/ J0 i
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% @0 Q/ f/ o" [! G9 h4 Farm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。' @/ A( @' C' q
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
% _( d: C$ m( F+ m8 b$ v* v2 d! x
1 O( x+ |) y, b, h |
|