|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 + R; p; I' D: q( M+ W* T: w& o
- [code]EDMA sample test application' d3 v8 J3 K3 g1 V2 N k8 L
- /*$ H" e) O7 ^* _2 f
- * edma_test.c" S+ k4 r. N- ?2 b) k7 R
- *
& L, I% @2 B+ X+ ^3 }- R - * brief EDMA3 Test Application- N+ z# z3 }) N; w( E" e' \
- *& c2 ]# U5 k7 W+ X* x$ E7 g
- * This file contains EDMA3 Test code.. u W2 o" @* d1 N* b
- ** A. B6 V% ~0 X
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
/ [0 |! M0 d( o" t7 P - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
$ b4 v; m+ D# H9 O - * TO CHANGE.
- _) V# o" M# `/ ` C/ l - *% f. G4 A# Z( l% h( A* r7 @! t. V
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
" k$ D. i" o) C; M - *
% r' C6 `0 e O9 H5 n/ J8 [0 F& j" l - * This program is free software; you can redistribute it and/or
% v/ R4 x" N! k0 z/ z+ u2 k; o! _ - * modify it under the terms of the GNU General Public License as9 D4 [: D" x5 C* h S1 p. [5 c- }
- * published by the Free Software Foundation version 2.% j8 Q8 p5 h4 G2 N( H: C& [
- *, E2 I% D/ o; l$ D" h
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any' y9 K3 p' M, H& r2 Q2 t
- * kind, whether express or implied; without even the implied warranty4 z/ Q0 d8 W8 v6 F( b# k* A
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the7 ]* ?: E# K0 W; t' [4 m
- * GNU General Public License for more details.
3 y$ X5 W S- |* M- n/ \' B; J - */% ?! S( N# A$ W
- $ s* f) ^( d+ S5 ]' l; n' p2 H' `
- #include <linux/module.h>: I P: _% D! A2 H9 |* G
- #include <linux/init.h>
2 u4 L1 l9 }) H& d1 v - #include <linux/errno.h>
5 Q( r7 v9 p5 M% ]; u: v# ]9 L - #include <linux/types.h>$ @+ G. c+ t/ d }( y" b
- #include <linux/interrupt.h>0 P/ K. o9 z L) D; V
- #include <asm/io.h>+ B: d9 {, T& o# q2 s
- #include <linux/moduleparam.h># a* b% U9 \- L0 D
- #include <linux/sysctl.h>
+ g& s# }( ~# B0 W - #include <linux/mm.h>
" {6 T& A$ Q' s" R, L - #include <linux/dma-mapping.h>) w. g9 x! A% d& a
+ Y4 C9 d# T+ ]" ?3 V0 a- #include <mach/memory.h>& p$ `0 q0 Z+ m/ R! H& F
- #include <mach/hardware.h>
2 a: |! J) R7 H; C6 @ - #include <mach/irqs.h>
3 w5 w& n2 m# U& z5 O1 \9 L( X - #include <asm/hardware/edma.h>
) v& h4 D' Z: n8 W- g% z
Y0 W& N7 O4 _7 o# z- #undef EDMA3_DEBUG
; u- ?8 ?; U) c" ?5 u& J, H1 O" T3 t - /*#define EDMA3_DEBUG*/+ B, n4 n! K* H4 \1 r0 L2 [
& G% y1 f [" I" u f- #ifdef EDMA3_DEBUG2 _2 v2 M; F- t: L7 M; D
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% m, h2 p( f% f" ?9 u - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__); R4 j6 e- ^1 T+ T) V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
! F) [$ T2 n$ l1 m+ r" Y0 y( N - #else
/ o. G! c: d/ ?; ?- x - #define DMA_PRINTK( x... )8 G. e" l" Q: Z. C5 u; s' q
- #define DMA_FN_IN [0 c6 c9 m3 G( t* M5 R/ T
- #define DMA_FN_OUT6 e" s& y+ k% l/ U7 d
- #endif: s7 s7 O( p$ [8 L
- 7 [7 F/ l6 ~( f6 I$ g& j
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)& N, M7 m0 O% r) D& ~& W
- #define STATIC_SHIFT 3
; o: e* N. O' V- G9 o9 Z" L - #define TCINTEN_SHIFT 200 b& Z$ s, D5 G
- #define ITCINTEN_SHIFT 21
( \6 U( ?6 a7 n' ^4 B2 t - #define TCCHEN_SHIFT 22
2 V6 l! c% p% T& W$ S - #define ITCCHEN_SHIFT 23+ Z: U( R- o9 ]! ^+ r; ~' I% [
7 ]9 c/ q$ R k: a- static volatile int irqraised1 = 0;
" G1 Q: D7 z+ ~% Y - static volatile int irqraised2 = 0;7 p& }1 z }( P6 I+ d. }9 o
1 f6 A ~3 R& j( v5 a- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: y! m; D4 @! F) Q4 D% D2 L - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ |. U0 B+ C s2 k4 k9 G# ~
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ \4 r- D' T% t; l" J) O3 j
1 Y* a0 f U) o) E8 [6 o- dma_addr_t dmaphyssrc1 = 0;, p2 j- f( F4 W+ B
- dma_addr_t dmaphyssrc2 = 0;$ M2 L+ G- I( w% ]. z
- dma_addr_t dmaphysdest1 = 0; J' z: V; j8 n/ x, _* c1 f
- dma_addr_t dmaphysdest2 = 0;
, I# L+ b( O \6 J' o) v
4 J4 B+ D! J. |& ^- char *dmabufsrc1 = NULL;; y: B6 A" P" d; e$ i
- char *dmabufsrc2 = NULL;
7 ?/ V6 _% G$ A! w# z0 { - char *dmabufdest1 = NULL;
) s" N; o5 C% E9 _* P2 y' k - char *dmabufdest2 = NULL;
9 H: Q m' @: u& }6 q! P - 1 l W3 p7 N2 q
- static int acnt = 512;
' }# t# {, i# j# n$ [) [7 R - static int bcnt = 8;# K7 j2 O3 h; d$ t& h5 s: D
- static int ccnt = 8; j/ ~9 ^8 j0 A% ^" y" P q
- / `; x; ^5 E K$ G( t
- module_param(acnt, int, S_IRUGO);
. F! b& ?3 B% J& w5 ^" e( v - module_param(bcnt, int, S_IRUGO);5 D+ u8 _9 \! r/ [2 I" N! F
- module_param(ccnt, int, S_IRUGO);
复制代码
2 J5 o; M0 a/ u4 _& i" N" R2 J
" c. u. H( @- n- k( t 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
3 M2 I# q, _- A2 y: yarm-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) G# M' G* n* l; v% _2 ^/ q( X
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( k' W {0 K7 A
2 V) r' }% S$ ?; b6 l$ R5 r; u6 {9 t/ o" o
|
|