|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
9 f- f& Y( h$ } b- [code]EDMA sample test application: w) ?$ p( \; F0 P
- /*+ l2 m; C- g1 D
- * edma_test.c' G! M, C0 S' ?9 m
- *
0 \4 C" c( ~" U% S - * brief EDMA3 Test Application7 p2 e9 k+ t. ^+ |7 N
- *& L: \3 q9 U, f5 H! J* x2 l
- * This file contains EDMA3 Test code.
: j$ x9 @% C+ z+ q - *3 m1 j, z- t+ R2 b
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE, ]- Q0 {3 f4 D/ j
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. {" c% V) o: j7 m8 E: T
- * TO CHANGE.
! Q, l4 w% G& r - *
+ x9 k; u2 g/ g0 x0 s/ E. z4 u9 x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/. v- O/ k$ Y% G* s
- *
" Y( [* o0 R: z% ~/ f1 G - * This program is free software; you can redistribute it and/or6 O( i; P) M/ i% X0 u* v" ?: N
- * modify it under the terms of the GNU General Public License as
. u+ U x. Z; H - * published by the Free Software Foundation version 2.
' ^4 N4 q& A! `8 L - *
3 U1 c! B6 [; c# ^% i! K - * This program is distributed "as is" WITHOUT ANY WARRANTY of any( |8 t1 v- v# G' E1 a
- * kind, whether express or implied; without even the implied warranty, |7 T) O6 j1 G2 P0 `. m
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
" @6 L! R, P4 S2 `( U - * GNU General Public License for more details." k! ^2 S. E1 Y: O% ?
- */* { X5 O* }5 t/ [3 j- H% p
- + z1 S7 H, A) d- {) |8 {% { x
- #include <linux/module.h>
" ]% F, L4 J5 j) d1 V( I# `8 e - #include <linux/init.h>
+ }' s$ i2 s, ` - #include <linux/errno.h>
! y! S! [* h: @( M* [8 ^! n f8 ] - #include <linux/types.h>
6 }* `+ d% ~9 o/ o - #include <linux/interrupt.h>
% [7 a8 n0 M( H2 y9 E0 M9 R - #include <asm/io.h>) L {# Y" W: e( l3 Z: O
- #include <linux/moduleparam.h>
6 ]) \& W) s+ s' Q: P - #include <linux/sysctl.h>" k T* P& V$ m
- #include <linux/mm.h>
2 X2 A( j) I$ u1 ^4 o) o - #include <linux/dma-mapping.h>* D1 q! O* F/ ~- x1 `
- 4 b" a+ X3 s1 ?
- #include <mach/memory.h>9 q7 ~8 w; R @% @ M- M" P
- #include <mach/hardware.h>
" G" d# i% E4 d/ b( E' v$ [ - #include <mach/irqs.h>. J' C, {% I, o$ S- ?/ o1 j
- #include <asm/hardware/edma.h>
, L- T/ m/ m0 j- J3 d - : J8 Z8 z- d N5 d: V0 v7 o
- #undef EDMA3_DEBUG% B: P/ }/ |5 R- a4 M( [) s9 K
- /*#define EDMA3_DEBUG*/
' u$ r) J3 i4 ]6 Z
# \6 J0 U# D$ u0 o, \6 F* f- #ifdef EDMA3_DEBUG- q0 S4 i8 I& f4 d: E! _& n! {1 v
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
|8 t0 ^/ p& {8 p* K+ t: ] x - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__); W+ k' ^( d# H( I( _3 Y2 y/ A
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
2 [2 X5 ~+ D& _: `6 }( C - #else
$ G. w. g4 I( r5 |! O - #define DMA_PRINTK( x... )
9 ?! w! N% c; l l - #define DMA_FN_IN
" M, N/ R; g' X1 x- G* u - #define DMA_FN_OUT" b N$ `% ]8 V2 v$ L! T i
- #endif
$ |- }+ K- q( m; N' z2 E' O2 V) ~
" I* r+ O& T. N# D& z1 a- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
4 G# z* K0 B f7 \% I2 y - #define STATIC_SHIFT 3# I/ j1 [1 K1 l# ?1 \4 B
- #define TCINTEN_SHIFT 20
1 n& X/ F7 j1 H7 M+ v - #define ITCINTEN_SHIFT 219 C9 h- B$ r& [8 k* I9 R
- #define TCCHEN_SHIFT 22
( Q5 _! \7 x: A( A1 L0 B - #define ITCCHEN_SHIFT 23
. E9 E5 {% J5 o/ T ]8 z! g
+ n; k! z/ z/ g. D$ a- static volatile int irqraised1 = 0;! f& w+ x" w1 O; I$ v
- static volatile int irqraised2 = 0;
$ ]4 E5 s+ c: x0 L( k% [7 h - 5 o8 y# a7 w, x3 M: |% t1 I, ~
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 g1 h6 H, M8 `' A
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
g% C4 O- ~& `5 x - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 Q2 }5 S. g5 O+ Q! O! f0 c# M - 4 ?) q3 ~- ~* ^# M4 E0 }! j
- dma_addr_t dmaphyssrc1 = 0;
! n' Z; }8 ^" U% F1 f, n - dma_addr_t dmaphyssrc2 = 0;! F8 v2 x( v6 P- i$ E! d0 K( d! a
- dma_addr_t dmaphysdest1 = 0;
6 ]$ R( L1 D' p/ x - dma_addr_t dmaphysdest2 = 0;
* E1 A1 h1 y' p
: q, @# t' x8 b# |2 f4 \$ _- z- char *dmabufsrc1 = NULL;. h: T0 q+ g" }6 j
- char *dmabufsrc2 = NULL;- }+ |& n% x0 r, _. j: w
- char *dmabufdest1 = NULL;
0 s) u- |: ?/ C( K$ D - char *dmabufdest2 = NULL;/ q/ ]& i0 v9 e5 u( v- v
- 6 ^ V# @ k, j3 H4 K% ]9 E3 A
- static int acnt = 512;# c5 y0 E4 Q" \' n. t3 g) u, H% j
- static int bcnt = 8;8 n% D8 {; {: Z/ y! r
- static int ccnt = 8;
7 q; o# G8 R% Q Z' X# m: k
3 {. R3 k: ]6 C# t9 d v- module_param(acnt, int, S_IRUGO);
0 g3 E! P' `* z& p3 d) G8 p - module_param(bcnt, int, S_IRUGO);
* Q; v+ p9 U7 }$ S% W5 S2 P - module_param(ccnt, int, S_IRUGO);
复制代码 2 Q, T7 v& j* q2 U" I5 M2 S& m7 |6 r
% a0 u8 O' J% X; I { 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
- [+ B, j, }) C% g3 ?# l7 R! Larm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 Z% |( C( S3 J! A) ^" p" C5 _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
2 U1 g) d2 \# n! ^# D. W* C5 B. q s
! D/ R! s+ x4 l/ l) L |
|