|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : t7 o5 O6 O, w6 v9 W) D! f6 V9 |
- [code]EDMA sample test application r) q9 B: T0 e1 H' e; l J+ H' ]
- /*$ {& N' N5 V9 e4 Q
- * edma_test.c7 X5 y+ ~& t7 @, C8 N
- *3 b# M7 N6 \" n, G
- * brief EDMA3 Test Application
% r! R* k0 Z4 z- m. m8 o$ w( v - *
' D8 L: M+ B+ Q( e - * This file contains EDMA3 Test code.
% p; m, q+ m0 a+ f - *2 H. P# X& e6 s5 V
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
5 z) g6 J U0 J4 H6 s - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# Q! Y+ u5 l. d" R
- * TO CHANGE.( m5 @6 E' n) @' R
- *- y& A. y; _% o& o d! `! t
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4 w- U4 o6 j6 }$ y - *
2 d, P( R3 g) W. r6 q - * This program is free software; you can redistribute it and/or
. n+ {% n: I8 `9 @# s - * modify it under the terms of the GNU General Public License as/ u9 \6 o4 V; P& S! w. f( R
- * published by the Free Software Foundation version 2.& p7 Q; p( w7 \' C$ b# z# c) r
- *
1 F; }& o% a9 K4 O) b. K% k& L0 s2 v - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
8 h0 j7 J' @+ C) c+ e - * kind, whether express or implied; without even the implied warranty/ x5 H7 Q4 Q, B
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the3 o3 g8 j1 ?9 V
- * GNU General Public License for more details.
" T- J! E9 C4 ~% R - *// ?& x% y4 x7 O3 O! u) `& L* m9 r
$ Z8 U7 X. }/ _3 S7 ~5 X- #include <linux/module.h>
3 i: _. `% n0 w$ P2 m6 n( y - #include <linux/init.h>- M; f4 q5 x- i T* X; Y
- #include <linux/errno.h>7 d9 `$ a! D/ b( ^5 g) E/ h8 [! r- s
- #include <linux/types.h>
( Y7 ]1 C ]7 r- V, I4 P+ Q - #include <linux/interrupt.h>
; e& r/ |* _* [# V5 }: X4 }6 j4 b - #include <asm/io.h>
d' i" f! j* b; r+ U - #include <linux/moduleparam.h>; h/ i* B+ R( G8 z) p! ~
- #include <linux/sysctl.h>& t$ x+ z/ g. G4 e4 |
- #include <linux/mm.h># G6 V. P5 a" @4 m- Z7 ]
- #include <linux/dma-mapping.h>& f d( r8 O: G& I. r/ }
6 Z$ n( ^4 F& `1 i- #include <mach/memory.h>4 o# `; R: S8 m* ?
- #include <mach/hardware.h>! u& q. W# m1 O( w* ~
- #include <mach/irqs.h>; R6 u- }& P: R
- #include <asm/hardware/edma.h>
9 j, y$ _) t! r# t- E6 s - 5 t3 v- H+ x7 h, Q- p6 w
- #undef EDMA3_DEBUG
' U. K; F3 o5 k( W( g - /*#define EDMA3_DEBUG*/0 d& N. @' |0 j% E6 a4 B# E
% ?9 q, m4 z2 w4 e. k. I- #ifdef EDMA3_DEBUG
8 |9 S6 E1 f6 M5 ]" I - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 A) L0 P9 t9 ?2 P
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
' H8 Y/ A& O2 l6 z - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__). h; t3 ]* d# |# _" a2 _; Y: s! ^
- #else* |. s1 y1 E9 Y8 R1 U
- #define DMA_PRINTK( x... )
! E3 ]; G! K( g - #define DMA_FN_IN
! m9 t$ \" o( } - #define DMA_FN_OUT8 t2 @$ ^* E! {$ T- \5 u6 [4 v" u1 G& b) a
- #endif" g4 t- x- d. F+ N5 Z* I% d" {$ s8 m
4 P: R% s3 B4 P( @( h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
6 z" n$ D0 z9 P5 W* M3 E, g - #define STATIC_SHIFT 3
" @, p- `3 q i+ a4 }. g1 H! C - #define TCINTEN_SHIFT 20
1 q, Q" u" P$ F3 Z# c - #define ITCINTEN_SHIFT 21
9 _4 y- h# H' k$ ~7 ^8 o$ n9 c1 ? - #define TCCHEN_SHIFT 22
9 R2 n& b) x, J& B; ] - #define ITCCHEN_SHIFT 23# F0 g% \3 [ `6 s4 R" [: ~9 ^
- ! p+ }- n. x. u: L& ?
- static volatile int irqraised1 = 0;! p! b& j1 t$ c1 X3 K1 I
- static volatile int irqraised2 = 0;. a1 Z1 P$ w4 {3 Y9 u0 R
, q/ c5 r+ F5 k! v8 h- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# C* d. E! N' l8 G/ X1 a& C
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; c* r5 o+ i9 v9 `. U1 v - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
$ J! Y* O8 R4 B+ u/ U; j& K - 5 C$ b5 c3 r( R& E( K# c
- dma_addr_t dmaphyssrc1 = 0;
5 d+ q9 d5 M S! g+ _) m+ S* M - dma_addr_t dmaphyssrc2 = 0;% {8 R' \+ b8 N2 _$ H: C
- dma_addr_t dmaphysdest1 = 0;
7 E& u \2 d1 }, X) O$ h6 [* Q/ K - dma_addr_t dmaphysdest2 = 0;6 D% w# ~: n+ |( ~" Z0 ?& Z
( g/ ^6 ?: n: {5 [/ y0 B( Z- char *dmabufsrc1 = NULL;/ k( u( S; Y7 P/ D( w9 C/ h9 k
- char *dmabufsrc2 = NULL;
! H$ t i" y+ J8 t3 n3 d - char *dmabufdest1 = NULL;9 h! [4 Y6 B' N8 S6 f: m9 M
- char *dmabufdest2 = NULL;
" ~8 \; M/ D* Y* q- C* X9 i - ; R' O# P6 c1 B4 K' R3 [$ W/ d
- static int acnt = 512;/ Z- E3 P4 }! w3 H, i! o
- static int bcnt = 8;
0 B- ^$ J, L7 A/ l) q3 k - static int ccnt = 8;0 W% m1 E0 l* E
- ' Y& D1 j. u8 F5 h R
- module_param(acnt, int, S_IRUGO);8 |/ i% L8 v# ]9 }. B7 f
- module_param(bcnt, int, S_IRUGO);
M6 R1 c6 y0 y+ U - module_param(ccnt, int, S_IRUGO);
复制代码 % p4 I0 @* Z' \" p* I$ U% w4 m0 M' U
: c4 J C. ~' X1 m8 t' ~' ~- ]" o 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" d6 k. r5 ]+ ]# U6 h& X+ @2 Earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。3 c5 h" z/ k. E8 j& R2 `( N
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 N, N8 V; h3 ]9 b1 U9 d o, M, m; U- p E% i2 z
8 i4 ~3 I3 Q3 A
|
|