|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 [ { Z0 L+ V4 l! C9 ?
- [code]EDMA sample test application
( f& } d, O3 Z! M, A - /*
; k! D. Z3 ?) I( e; D6 t - * edma_test.c, N3 U2 x) J+ `$ o7 g! `
- *
& Z# H* P! C( Q6 l( k4 w0 w - * brief EDMA3 Test Application
7 @- p% `/ ]1 L( {" v: W! b* i - *) U( s; ~. S" b. Q2 }* [
- * This file contains EDMA3 Test code.3 ?9 t% l& j$ Z( D4 W& B, Q
- *
2 M, h# J% F+ f1 U8 i1 b% W* |" R' w - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE4 P f. s; Z3 N h4 p: `4 I* s( [* u8 j
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT) `) g) b. f) o% A6 c6 N4 P
- * TO CHANGE.
5 x. l2 \0 o- k) O% d" a! T) R - *
( ~# \* d: F. ~/ @* T+ _# Z - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/( m, U$ O% J, h1 \# h& |
- *
! S+ d8 k9 l* T, m - * This program is free software; you can redistribute it and/or
5 e5 ~. g w' I. L - * modify it under the terms of the GNU General Public License as
; u" V0 |+ I) T% p - * published by the Free Software Foundation version 2.
1 s" Z7 t! T; S | - *! C2 [. V' U7 [# w6 K9 _
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. R& s" h! N8 M; `, z) v; T' N. v - * kind, whether express or implied; without even the implied warranty
! ~- W' {1 e6 N/ }5 o) R) q6 n - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
& y! L: a) t# v7 A) ~' D) m& { - * GNU General Public License for more details.* `+ q8 a4 g) T+ [! l5 u2 t* r
- */; L- E8 F0 c! r T* u0 C& M1 Z
4 U0 A+ o- n% X0 ~9 i+ M" b: ~ B/ Y- #include <linux/module.h>
% ?" D, _" {; e( u' V - #include <linux/init.h>2 Q, R2 K+ e2 c
- #include <linux/errno.h>
$ F/ f' ]1 {( v - #include <linux/types.h>& k$ J$ H. y) l
- #include <linux/interrupt.h>
3 T* k- Y3 H( k/ S% R - #include <asm/io.h>
5 k0 ~/ v) F( p. X& L3 T" z( B) y - #include <linux/moduleparam.h>
2 `; z4 |# \% ~5 J1 L' t7 C1 v - #include <linux/sysctl.h>
0 v, M' K. g8 { - #include <linux/mm.h>
: y1 _# H8 Y. Q - #include <linux/dma-mapping.h>; m" R% u- r" j* B1 j: b
- / S+ w; ]9 N3 h) p% I; P) V& ^
- #include <mach/memory.h>7 t& {5 s$ R. M5 v& u3 `
- #include <mach/hardware.h>: V+ U( M2 @! g6 c2 @
- #include <mach/irqs.h>
: K6 N3 f3 E4 t, A6 s) ?4 o% w: j) z - #include <asm/hardware/edma.h>
6 o: C0 u+ v) | - % g, y x' w1 j. L8 v$ W
- #undef EDMA3_DEBUG
1 r' z8 L) k9 N - /*#define EDMA3_DEBUG*/' a' v, f. ~. X: T9 Y5 G0 }, E
) ~) G; ]8 o2 C) R4 @/ }- #ifdef EDMA3_DEBUG% p6 j; T" E' P; Y
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
% L3 A0 n: D ?$ y7 G* f& Q2 F - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)3 S* i7 Q! O2 r. j+ {8 n: u. B
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. j% @0 `, Z. A - #else
% G+ p5 ?# r. i6 ^. X0 I - #define DMA_PRINTK( x... )
7 @0 P/ j4 t/ ~4 k( j2 A& I - #define DMA_FN_IN
/ ^" ]. S# E2 c2 R& S - #define DMA_FN_OUT
. `4 `6 g1 d! E4 \- ] - #endif
: N! x: G0 c# T: z) J' X- q - 3 ?/ d8 M& z7 N( O
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) m* o; y( |! I: r$ ^- Q) O, T& E - #define STATIC_SHIFT 3: Z% U; T4 w) b/ r
- #define TCINTEN_SHIFT 20
$ r/ T+ S+ n% x$ e" A% F; C - #define ITCINTEN_SHIFT 21& N" n. G* j- _5 s2 v9 W
- #define TCCHEN_SHIFT 22
7 \' p# [ K6 |6 Q# q5 Q - #define ITCCHEN_SHIFT 23
. }2 Z" y' I. t - & O) _/ i- O, \/ |: t l5 p
- static volatile int irqraised1 = 0;
2 h! z4 @0 p j, `6 W' b7 w* @ - static volatile int irqraised2 = 0;
2 S5 |! {: h N) a - " C0 E! o9 d( d! t" o! e% k% w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" H- B0 K( S( c/ u$ f: Z/ R2 j2 ` - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 ]7 C; {! K$ F* P# G+ v9 k3 K' X
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- D* O8 G. {( P/ J) x
- - J, \# p; f0 h8 a
- dma_addr_t dmaphyssrc1 = 0;8 \( H$ x7 {" q
- dma_addr_t dmaphyssrc2 = 0;
/ b& [1 g( {4 j+ o4 R* f7 T - dma_addr_t dmaphysdest1 = 0; O. I7 Z$ g2 |& {
- dma_addr_t dmaphysdest2 = 0;% y7 J8 `! a" F" }
- . U3 c9 l1 o9 O2 |
- char *dmabufsrc1 = NULL;
3 t, }/ a: c% [0 v - char *dmabufsrc2 = NULL;
; k9 L; }8 p: C4 R( n# X - char *dmabufdest1 = NULL;
i9 Y4 a6 D7 I+ r - char *dmabufdest2 = NULL;5 ]! S1 Z0 d* N9 x( _
- 0 r6 P9 E* B2 G3 D x( }
- static int acnt = 512;
7 \1 U1 t1 |7 o, M2 U+ R - static int bcnt = 8;
& I! k8 J3 \* ], S- V, R" X - static int ccnt = 8;
6 {$ _% b, C, P/ F - / Y, \& P; B1 ?% d
- module_param(acnt, int, S_IRUGO);
9 O+ J+ k7 j, G6 F5 b - module_param(bcnt, int, S_IRUGO);
- J* _3 }' u& |( c, U - module_param(ccnt, int, S_IRUGO);
复制代码 * D3 ~" I$ u$ I5 _2 ~; ^: a
0 d% R9 Z9 [9 q% |5 }6 B/ \( B" l 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用6 Z( ~& x7 w( l6 C
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
J% o7 D( `& N 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
8 F7 v( D0 R* n: k$ ?. o+ L; }3 P# h o& ^0 T! w0 G5 R7 o4 B
; T5 ^" v3 |+ w4 v
|
|