|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 `* ], x% m& U1 `5 X; g/ N
- [code]EDMA sample test application
2 ^( G4 S3 {' H9 r" h- x( Q( r- ` - /*% k# ^5 K6 X6 E) L
- * edma_test.c: o5 T' q. E" v% k6 I' ]
- ** c* N. ^. a# Q$ d8 x
- * brief EDMA3 Test Application
7 g6 }$ B( }8 c) A& L' e - *
6 u& l+ D. k* ?, V* E - * This file contains EDMA3 Test code.+ h' |0 r: A8 J) \: V
- *- g1 ~7 p. B9 @& P2 c
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE7 ^6 \; t* f# N
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
( k" V3 ] T) A# x' S4 W1 C- W# e - * TO CHANGE.
( d$ q# l+ o0 |; c2 L& l! ^ - *( n: [/ p$ J) f' l9 Y, c! {: Q
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
$ j: ^, X& H5 K - *
* N0 `2 e, u( z/ h' `9 d) L& ~ - * This program is free software; you can redistribute it and/or9 U0 J$ r" u- ~1 T) ^) p8 [: d
- * modify it under the terms of the GNU General Public License as9 p( U/ p" S) g3 F; k
- * published by the Free Software Foundation version 2.: t) G8 o, b$ ^. h# s. O; ?( l4 G% K
- *. Z# x6 ]) \1 E% C( b: }0 m
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
) ]9 w+ M- I2 J% k5 l- q: f - * kind, whether express or implied; without even the implied warranty
* k) q) Q) `8 H' B# C - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4 W5 B5 N M0 p, L3 M$ f: t - * GNU General Public License for more details./ Y3 H. d; A$ B* j
- */& G) q. d& F! T+ A8 D2 d
- - J9 p+ B+ P5 {4 W: Z
- #include <linux/module.h>/ T! Z0 B, D( }$ z
- #include <linux/init.h>! j' S/ ^) m+ s, h! a" u
- #include <linux/errno.h>
( ^ W& E; _7 A: [ Z7 G - #include <linux/types.h># `4 ?- j. P# ]* r. a8 O( x$ b
- #include <linux/interrupt.h>
) V4 I0 |! a3 _7 y+ }4 n4 { - #include <asm/io.h>) `1 O) |: ~* c$ B$ b
- #include <linux/moduleparam.h>
# G' x/ v! R/ T3 [3 u - #include <linux/sysctl.h>. V# p8 h8 F) U( B x8 B) B# u( j
- #include <linux/mm.h>
1 H3 d" Z0 l5 c8 b+ r( e - #include <linux/dma-mapping.h>6 _8 j/ o' e. k9 L: E1 M
8 Y7 ~% L, B$ T, n% A- #include <mach/memory.h>8 g: V" Y9 M* }
- #include <mach/hardware.h>9 c9 O, w( v6 w; n! G1 e3 o8 [/ u
- #include <mach/irqs.h>+ l( A) H: P7 S7 W, a
- #include <asm/hardware/edma.h>* g- R2 H0 H. ]0 A+ d9 |
- * H& X+ p9 h- O: x1 O
- #undef EDMA3_DEBUG
1 w3 B: d" f% |* `7 D - /*#define EDMA3_DEBUG*/
- H! L _1 b3 ~( H$ y" S - - W) `% r8 n* k
- #ifdef EDMA3_DEBUG% n$ K3 Y4 U! A/ c4 a F& r9 u! k
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)* y8 h/ S, @. p( H/ K0 a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)" T5 A& k' \" M0 H2 p
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
4 |" @' _; W7 n+ A - #else- f9 D3 |) k$ ^0 v/ U
- #define DMA_PRINTK( x... )
; m1 q* E: S; S - #define DMA_FN_IN
7 A) {9 A: t0 }- z9 U - #define DMA_FN_OUT+ j2 |3 Y" f8 A7 d' j
- #endif
" F% ]$ g0 {# e$ O' P - % _& _( ]% A+ f
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
3 O8 X+ C$ I" H7 P* V+ I/ w1 F, o6 S. T - #define STATIC_SHIFT 3
$ s: i8 m6 @8 e; | - #define TCINTEN_SHIFT 20/ r5 Y) N7 i, t9 V
- #define ITCINTEN_SHIFT 21
* ^5 v" G' |% _! W: B: y0 g9 C - #define TCCHEN_SHIFT 22
$ [& W2 P( ^' D1 F9 I/ R! j# m - #define ITCCHEN_SHIFT 23
& w. F% c' ]3 Y4 i+ n% m. n( I2 m, K - $ X v1 M; J/ L! |
- static volatile int irqraised1 = 0;& ]6 T7 L( F1 F7 C# a
- static volatile int irqraised2 = 0;" ^5 v) [, l# v6 }" J- Z# r4 |
8 ~3 Q; a: u) r- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' v$ C( |* I* d( N, _ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);+ V m6 s. O; C' w& a8 `
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( ]6 w* Z: K! m0 H. p* b
0 J+ R& f0 u1 F2 J- dma_addr_t dmaphyssrc1 = 0;
- r7 u& Y" V3 _; j7 F6 Y - dma_addr_t dmaphyssrc2 = 0;
' s _ m$ t. w/ e - dma_addr_t dmaphysdest1 = 0;, `- P* d% z. C- J9 |( g+ n1 Y
- dma_addr_t dmaphysdest2 = 0;/ Y# O! R. B9 G. ~; g
- ( F0 w5 @0 _; _* _2 P4 n" ~8 k
- char *dmabufsrc1 = NULL;
& z* Q$ c' D- ]0 N2 A# s - char *dmabufsrc2 = NULL;
( G2 R9 p7 \: m+ |" F: d7 I - char *dmabufdest1 = NULL;( C5 B4 D( K$ U& u# F; w! a2 U7 j
- char *dmabufdest2 = NULL;# `. G" Z5 }9 n9 }7 w+ k+ f9 @+ o
- 6 W5 B# V" B1 J3 b4 M3 {0 r
- static int acnt = 512;& O5 `/ K; A. ]
- static int bcnt = 8;
+ T4 o. H T& b% `3 U - static int ccnt = 8;+ b3 ^6 n' n$ q$ v H
; H+ G- F" i' F9 z" o0 b- module_param(acnt, int, S_IRUGO);$ ^/ Y' s) s+ E; N$ F9 o' a- d8 R1 ~
- module_param(bcnt, int, S_IRUGO);2 T- y5 O7 Z$ ]& C* Q) X! \
- module_param(ccnt, int, S_IRUGO);
复制代码
+ x9 f4 W* E1 Y$ V& L7 F
# \5 V% G, O. O4 } 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
0 O( O3 R3 c0 Karm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
4 ~9 n# E6 b2 @5 a7 A4 k2 w0 n 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
* S2 j4 V4 z+ C/ x
' i4 U8 m4 I0 a' y2 u& s) c7 Y% O( a- h# U( B: g
|
|