|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' L* H6 ]- t6 O% R6 o( P( ]3 W5 e- [code]EDMA sample test application
+ ]8 c: g3 p+ Q' d+ E0 q% i' ~ - /*$ {2 }' Y: n; @0 G
- * edma_test.c4 V$ w# h# [5 q4 f. n4 v* K! A
- *- E# N. R1 ^% B: C. o, ?
- * brief EDMA3 Test Application
# L' f! z: P) M, g+ l1 P$ M - *
5 Y+ {+ |+ W) T1 v% g0 p, z - * This file contains EDMA3 Test code.
% k% ^+ A5 g; W- }3 j/ E - *
; S/ Q* a3 t! T! ]- ^ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
9 [8 M I3 s. `0 G7 d/ h# g4 t9 w - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT. i' H: q' W, C4 G% Q3 N, Z
- * TO CHANGE.
6 \/ s7 k# f u, u# k" g - *! u( }& ] y- I1 z' G' p2 y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 q4 k: T: Q) B& f3 Y
- *% A) n" C% C* F
- * This program is free software; you can redistribute it and/or, V# h. Q% K+ T, u, M
- * modify it under the terms of the GNU General Public License as
& s) t* A2 @; P5 i0 l/ x - * published by the Free Software Foundation version 2.) D7 \4 P5 V# V% ^
- *
3 S; J( c0 \ n% z- K - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
* ?( d$ a2 P, [. m( w' D# u7 d - * kind, whether express or implied; without even the implied warranty
- _# P4 f3 t! h6 n - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
. y+ t" l" W% J# a( h - * GNU General Public License for more details.
1 q8 X4 Z# c! ~7 h1 L; A/ g. b$ K - */- F6 d( M9 n; |5 k' a5 I
6 E, B5 ~, t+ W) @% U% h' u' j- #include <linux/module.h>0 ^8 e9 X/ U* A0 t, b' d/ b' l
- #include <linux/init.h>
% N# w6 q; a' S3 L. C; b - #include <linux/errno.h>0 g" v7 H; |* S& Z
- #include <linux/types.h>
/ T% X( Z( J$ y( l - #include <linux/interrupt.h>
# _' }0 @# n4 O1 c3 q - #include <asm/io.h>: J% F6 G5 m, W+ A0 o
- #include <linux/moduleparam.h>, b) M1 @# h! d
- #include <linux/sysctl.h>) W( m: h7 O; y
- #include <linux/mm.h>* F& g+ Z' d! q( S& R; `
- #include <linux/dma-mapping.h>7 F& k* t8 n) a3 t7 \
, ~# j5 A, t8 A) {7 h# s ?- #include <mach/memory.h>
* {6 e$ c1 Q4 V0 B4 s& m+ k, j - #include <mach/hardware.h>2 y- A" [ `: l/ e/ F# i
- #include <mach/irqs.h>
' H$ O' |6 u4 F/ R - #include <asm/hardware/edma.h>
* l- o ^! }; A6 I1 R* I) w - 7 ~3 X8 B2 Q! q2 m" G
- #undef EDMA3_DEBUG
1 F" W, U% H3 j$ d - /*#define EDMA3_DEBUG*/
5 V" R! n0 L( F C8 q: C N% l - ) W; _8 X( G% c; ?' l
- #ifdef EDMA3_DEBUG
* ? h7 E& j& b; ] - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 `, D* E. b$ s0 Z! h
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)0 N# `: k1 y$ B" f
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
6 @4 h& ~' q' p+ m - #else
. L' P6 h3 m5 W! n2 i& k8 x! P - #define DMA_PRINTK( x... ): V: R$ ?3 T a; n4 o- f9 {
- #define DMA_FN_IN% x& ^4 E6 K! s3 [# F% \
- #define DMA_FN_OUT; z6 U% w- K2 Q$ `0 @0 B
- #endif
5 S% N" O1 k9 S: e
# t% r( c0 s `8 a! b" q _ J- R- #define MAX_DMA_TRANSFER_IN_BYTES (32768). b, E- J, K0 u
- #define STATIC_SHIFT 3- q8 d% v0 d6 l6 J
- #define TCINTEN_SHIFT 204 m" Z' ~5 W( {1 P! i5 U
- #define ITCINTEN_SHIFT 21
. T7 V+ d! s' Y3 `0 n9 P# M! B - #define TCCHEN_SHIFT 222 Q9 S0 G$ x, K
- #define ITCCHEN_SHIFT 23
& q1 \4 Z7 K F1 _: I - * ~% \+ Z, m# v) H
- static volatile int irqraised1 = 0;" u8 |0 t* C9 b: @! p' c3 V
- static volatile int irqraised2 = 0;
; q% y2 y! m4 J
! B/ ~) ^9 z: h4 Q' ~7 M% p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
2 l( r* n; o5 F, ]. ~ - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 i" N E$ u# J4 T% B
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 v2 _5 X Z- ?& A7 G7 o+ \% q
- $ B! } n2 M% C5 F% q
- dma_addr_t dmaphyssrc1 = 0;
$ r0 {! A! Z0 q' L6 `1 L) l9 U - dma_addr_t dmaphyssrc2 = 0;4 W8 u; T7 R R0 }5 B
- dma_addr_t dmaphysdest1 = 0;
" ~+ T$ B `2 _ { - dma_addr_t dmaphysdest2 = 0;
) O8 T( H$ ~- Q" z) P - ' L2 K* o" l+ B7 k; V. j
- char *dmabufsrc1 = NULL;! G+ U( ^* q7 l! R! t& O% c
- char *dmabufsrc2 = NULL;
; t- O/ l! y3 x' O- E) U" A* s- w - char *dmabufdest1 = NULL;
- E+ m! Y: Y) _# A1 C5 W# `: \ - char *dmabufdest2 = NULL;
& b$ m+ j) I, R* D! G; |/ A
$ d4 T$ Y, F/ y) o- static int acnt = 512;" j+ `' I' a* W3 B( ]! L: }4 \
- static int bcnt = 8;0 |, C5 \( ]- {& V& D
- static int ccnt = 8;
[4 Q1 {- H5 r2 o/ v* W
; K4 ]2 B' d! u- module_param(acnt, int, S_IRUGO);& B% _9 b( q( Q" [$ _$ ]
- module_param(bcnt, int, S_IRUGO);# E, f! }5 |+ Z* l8 b8 F0 G
- module_param(ccnt, int, S_IRUGO);
复制代码 8 x. N# P# [! q: p+ |) w7 O
' O' N9 c& R+ }& n7 H 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用+ v. {$ t% N' M
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
4 e$ i' I9 s; g6 z. j 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
0 U* h7 i8 H3 T: [; {5 H
0 J& ?0 o* Y4 J. l) ?# s: t* Q6 {
|
|