|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ! Z7 V5 c: T) S5 i) e$ E
- [code]EDMA sample test application
. w" o7 Q- B; g2 B0 }9 a' X+ t% Y - /*+ _. `9 p: @+ H0 i. V; `/ C
- * edma_test.c
; m- }$ l+ }6 q- `% z3 Z1 d - *
8 u' p% k& T9 F- w - * brief EDMA3 Test Application
& U8 d: g- x( j3 j% s - *0 F) G9 S7 \ b4 M7 n1 O3 Q
- * This file contains EDMA3 Test code.
/ S' o: h" S' Q; [6 ] K - *
$ D* c+ ]6 x; X8 h! Q, T8 X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
& u1 p- { I& C - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT x9 ], ]3 ~% @3 T$ S9 f4 H
- * TO CHANGE.6 H. {8 Z* {) y+ R. W
- *; }* g+ O1 X- X; g1 U$ J) Z& w
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/+ L# ^! `, [2 f, A& @$ m# C
- *$ g4 y9 [& d* Q* w' \
- * This program is free software; you can redistribute it and/or0 d8 ? R4 x- P; q m+ w2 M
- * modify it under the terms of the GNU General Public License as3 ~) Y" F, ~6 _5 q! W' X4 v
- * published by the Free Software Foundation version 2.
* S$ H$ D( ~8 ]3 {; c5 s: v - *7 L" @4 W& Y* s% v9 D2 @
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# V& F) n& Y$ M - * kind, whether express or implied; without even the implied warranty
+ }5 B& @+ Z& m. A2 } - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 R: q( q- x' C- k0 ?+ v) C - * GNU General Public License for more details.6 ^& _- @9 [5 m9 y
- */: C) d: W- Z' i! e; @# d* N
( E5 E* f# A. w8 r2 T2 s( ^1 f! x" c- #include <linux/module.h>
5 S* y9 M. Y A( `" E - #include <linux/init.h>" B/ G6 S- \3 S" u
- #include <linux/errno.h>
) P9 q. ]8 e& G0 k# M, C - #include <linux/types.h>7 x+ c( C6 v2 N: X- K& \
- #include <linux/interrupt.h>
; H J+ p& g1 U" ^ - #include <asm/io.h>2 L- F: S$ f# m8 w
- #include <linux/moduleparam.h>
# q* Q8 g; q: p& X - #include <linux/sysctl.h>
) Z/ v$ E& f1 K - #include <linux/mm.h>4 S6 ~2 L3 _, w8 `' ]: }5 P
- #include <linux/dma-mapping.h>5 A4 R, X- g* B3 i
" c7 m) Z2 Y( s& g; M" {, u- #include <mach/memory.h>
9 v) J* ~( E) Y - #include <mach/hardware.h>
, ^8 O8 G7 @9 m3 j - #include <mach/irqs.h>) R4 O9 h6 a: Q3 z
- #include <asm/hardware/edma.h> p! ~, Y, X' n4 l
- y# u) q4 J. L$ a- #undef EDMA3_DEBUG
' U# B' Z- M! b A" q6 l) d - /*#define EDMA3_DEBUG*/
j) M( S' g0 @1 a8 U! {& C - $ O5 L6 V7 a. p0 W: V
- #ifdef EDMA3_DEBUG
' ~$ c" r: T- A k1 k+ O: C0 L - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)2 q5 `$ F* w- r% ~- t
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
. {+ J! R9 ^5 m# j- a8 ?8 M2 j - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)- I+ Y& E: _1 r8 _3 e, o' |0 z/ h) Y! ^
- #else
5 m8 E5 V1 }) y7 D. e8 |4 y - #define DMA_PRINTK( x... )
& m5 L" ^& H3 i: N1 Q5 p) [6 F - #define DMA_FN_IN
+ N/ h ~2 b; Q5 V# | - #define DMA_FN_OUT
( g H) d; ^9 b4 d - #endif
" ?+ R1 Y' Q8 U h. y( U
8 k, D) ^9 n) |" ]# u; c$ i8 m- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: t( N, e; ?. T% K- d - #define STATIC_SHIFT 3
- e2 g9 m0 b0 f5 a - #define TCINTEN_SHIFT 20
. }* @. |( l% a/ L - #define ITCINTEN_SHIFT 21
/ H7 p5 I0 x# T( e/ {8 ` - #define TCCHEN_SHIFT 22
1 i: Y' [7 n2 r! W4 j* r - #define ITCCHEN_SHIFT 23
% _( U% }1 n/ C' T) {% S$ n - / f& Q" _2 w3 ^1 K0 w. m! u5 O1 O
- static volatile int irqraised1 = 0;
. |2 X9 t3 y; m$ [- p0 v - static volatile int irqraised2 = 0;4 }. y, N8 E" R! }4 `
3 B4 ^+ `* h8 w% I/ v. ^0 \% h. `$ n- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& f: ]& L2 S! S2 T4 ?
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
, y' r- ?! F. D/ U - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 O* O9 O/ |. m- O. W& A( f
7 l! y8 _5 W# p5 l/ z( {- dma_addr_t dmaphyssrc1 = 0;
" E! p( v2 C6 R: ? - dma_addr_t dmaphyssrc2 = 0;' u- Q9 n5 ~# ?" ]% D( K
- dma_addr_t dmaphysdest1 = 0;1 l% s& R, y8 a% x1 @0 Y5 d
- dma_addr_t dmaphysdest2 = 0;" d) [: l. ~+ {4 W* @3 c" d+ T
- & u# T/ E* O/ Z* A0 _
- char *dmabufsrc1 = NULL;0 Y! V! a/ c: b) d! ~
- char *dmabufsrc2 = NULL;6 d: x( u7 S5 [8 M9 v
- char *dmabufdest1 = NULL;0 T& e/ `. E+ R& M6 [: z r
- char *dmabufdest2 = NULL;
8 A9 J9 y4 U6 M% p6 v: i5 R( V S
2 v; Q0 A: h0 q4 _/ L! P5 I- static int acnt = 512;
/ m1 q9 @, Z7 q" @9 x& | - static int bcnt = 8;
+ G" O2 L. A# K1 g! q% `/ a - static int ccnt = 8;
9 j5 j/ d2 r, x: a# d( R5 | - 3 i3 d( I, x4 s e" ~8 ~
- module_param(acnt, int, S_IRUGO);, ~) q& z& Q4 r3 k$ D( g
- module_param(bcnt, int, S_IRUGO);( @0 H$ T& H4 C; G
- module_param(ccnt, int, S_IRUGO);
复制代码 0 k' u6 \( H# L4 O
# G/ M7 `1 ~' z+ Z" v' l4 e 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用7 i/ q! Z1 {% I+ f( G$ \6 S
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
9 L0 X& A0 p+ \/ c 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。2 O, x2 ~' S* Z) J3 V! p
# p: p5 ^+ s, W- N; G* N' X* V8 h9 @& ~/ Z: B/ e, d) C7 \: {+ G
|
|