|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% M, j- Q' @; l# L( j: S: _& x r4 [- [code]EDMA sample test application
1 v9 W8 k. u+ U - /*2 ~/ O$ f$ f% x. C& n
- * edma_test.c# O7 o& P- O* s$ S+ s: n/ M
- *
; G/ M7 P) k' q$ [8 e% ~; E" k) i7 ?- G( F - * brief EDMA3 Test Application, ]$ n% }( `! L* z9 a
- *
3 F; U& N- F) |$ N5 R+ r, j - * This file contains EDMA3 Test code.% ^4 F! c7 B/ I! y: S/ s
- *( y& ^6 C( l( R$ J
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
" G" i; M& v/ ~3 Q0 _ - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT1 @* }& }3 {- @/ c1 j
- * TO CHANGE.
; J! c, [$ e: C; G0 F6 A+ s) M - *
# ^/ G# J4 y" v, k- k - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
6 B, M: N, [/ W( S - *
+ P3 t2 q* p9 t: b2 C - * This program is free software; you can redistribute it and/or
7 m8 U* ?- D5 W5 d7 e7 u( _ - * modify it under the terms of the GNU General Public License as
N) i% B$ N& w; _6 {0 x3 y - * published by the Free Software Foundation version 2.
6 q# Q8 P- u# ~; _; N7 P. c - *. ~/ Z) x" B' l2 C" F
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any/ `% b# h8 `+ h8 \
- * kind, whether express or implied; without even the implied warranty
% y3 Q6 d2 \+ O$ M* j - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the( m( {4 _0 p# G) U4 ^, Z: U
- * GNU General Public License for more details.
$ s _1 |# `1 A( Z8 V1 w: v - */
D l7 E2 V6 F t
6 |+ a. w* D, S2 t1 E7 N; c9 b- #include <linux/module.h>
& g6 D5 m z2 B6 g, J# H - #include <linux/init.h>
. ]0 I! L2 y+ U; R9 m% _ - #include <linux/errno.h>
+ N7 J+ h4 [5 x3 U# d - #include <linux/types.h>
; x4 e3 a2 s5 g% {! n - #include <linux/interrupt.h>
. C& A# W: ~; z - #include <asm/io.h>0 \2 f5 q1 G. W) Y' W& v2 \: h
- #include <linux/moduleparam.h>
+ J6 H! b8 W, ? - #include <linux/sysctl.h>7 \3 z+ R7 B. } u9 p" p
- #include <linux/mm.h># C7 E2 {1 N5 L4 w; O1 ?5 ^+ f
- #include <linux/dma-mapping.h>
. k3 d8 G; D# O
' I) v5 j( Z5 i* F2 a8 D- F4 T- #include <mach/memory.h>
$ K$ a" \0 W6 W, e - #include <mach/hardware.h>
& |3 n. _" A# F6 L' C- z' i3 j; y7 ~ - #include <mach/irqs.h>
/ ~. M1 ~4 l& P, S4 l( L( A, D6 I - #include <asm/hardware/edma.h>
. T8 k7 @, ]- J7 h
8 `: Y, K. _0 j: ^" I5 ]- #undef EDMA3_DEBUG( Q- }! y& |, J9 P2 d
- /*#define EDMA3_DEBUG*/
% U% `: k: b1 p. H/ z/ G" A
6 Q& p" F9 C! c# h( A9 M- #ifdef EDMA3_DEBUG% Y% N1 R) m6 g( w( p8 {
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)/ c& j) k5 I3 @2 v1 R
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
7 |: U$ x, V! t* j3 ?7 {% H - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)$ o1 d5 c a8 p0 w5 P3 K7 Y0 I% a
- #else
p0 S W& @3 K. i/ l( I' z6 { - #define DMA_PRINTK( x... )4 m+ @! o9 V* s
- #define DMA_FN_IN/ h5 P7 E/ @6 ?6 P
- #define DMA_FN_OUT
W# b" i/ ~/ j$ F( j, T, o - #endif
8 j0 P+ V% f$ N S
& ]$ P8 Z5 p; `& Y1 Y- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' ^$ i( P! O- X( b+ g1 k% N
- #define STATIC_SHIFT 3( j! I' P) D. ~
- #define TCINTEN_SHIFT 20
% y6 Q1 l# e9 F4 S! b( s" s/ s - #define ITCINTEN_SHIFT 21
$ S: k! u8 y" G$ G5 Y. q. ~ - #define TCCHEN_SHIFT 22. a. y4 ~8 l3 E) X
- #define ITCCHEN_SHIFT 23
- z7 Q8 z" }3 G* Z3 |& S! K* t
1 C, W! i, ]% Y7 \; T1 K8 s+ X- static volatile int irqraised1 = 0;/ \0 ^& z9 A! \2 Q0 F3 p
- static volatile int irqraised2 = 0;
( B g5 ?! m- _3 @6 l3 f1 ^' t - 8 X' \) x3 n! U3 h
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% _# m; U: d; T4 d5 J
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 l2 r" Z+ l1 P( w/ Y
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 U. K. F( Y/ J5 u8 m; o
- : c6 r4 F# B4 {0 ~8 ^7 t& v
- dma_addr_t dmaphyssrc1 = 0;& E8 W+ p; u! r
- dma_addr_t dmaphyssrc2 = 0;& _2 E, G4 g6 T2 K8 P: N# i9 o/ b
- dma_addr_t dmaphysdest1 = 0;5 _5 a3 @# G0 n$ }. `3 l& u$ f# I
- dma_addr_t dmaphysdest2 = 0;8 c$ @) _* r! N3 A1 ~5 U
- ! g' h2 U( L+ V! L8 h4 G3 s
- char *dmabufsrc1 = NULL;9 f- ], x4 \( @/ d
- char *dmabufsrc2 = NULL;
! j' T; J7 R% Z& X; Y% ^ - char *dmabufdest1 = NULL;( H- _9 ?0 g: j) S% S' z* [( T- B/ i
- char *dmabufdest2 = NULL;
6 i' C% E+ X$ d3 M- a5 v
2 [5 {+ g% m9 O% W/ S: x- static int acnt = 512;
: O3 w4 L+ [$ ^ - static int bcnt = 8;6 s( C; S- p+ Q; i) F( z
- static int ccnt = 8;
/ k" ^ |' E8 M) y) D6 Q - " c1 G9 i9 s1 }% `( { }
- module_param(acnt, int, S_IRUGO);; u8 |! F, d2 _+ V
- module_param(bcnt, int, S_IRUGO);
: ~2 t/ D9 C+ f* V2 ?1 y - module_param(ccnt, int, S_IRUGO);
复制代码 ' C9 R) e9 v$ X1 X
# I( ?" q; f+ C5 | 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用! }7 N# |/ ^8 `* s: I: F# ~
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
0 F+ d7 _5 P) r. ^ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
5 i: o) [7 x( e
/ A# T0 k9 ` X- f, D1 `4 s D" D T$ k. r8 z" J
|
|