|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
1 c0 R/ }7 h9 }1 U6 R4 G- [code]EDMA sample test application1 S5 A5 ~! n9 c- t ^' |: R( H
- /*
# Q- |4 @: f" a+ x; b; s6 W0 s - * edma_test.c5 @6 I( `+ ^3 P, m0 a3 r$ @
- *
1 t( c% K9 S. `3 o' l9 J5 x6 E* { - * brief EDMA3 Test Application# i5 R: e& f. B% R9 {
- *
$ G. O9 ]; J( k - * This file contains EDMA3 Test code.
9 F& w- v ]+ ~9 J - *. b3 ~, C- c* j* P
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE" m" i# P4 E; ~! s4 L4 ^
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
9 O, d1 |! c2 h; y1 Z+ W - * TO CHANGE.
% j: }- G( M4 c3 J' q - *( x% E7 L; }$ d* s. }% x0 U/ Z* \- v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
8 }5 J. G9 \1 n! l: r1 }: X1 L0 |" L: n - *
- Z0 X- R7 @7 e. o. \& ` - * This program is free software; you can redistribute it and/or
, z R7 d- m8 Z& F( u" m9 u z - * modify it under the terms of the GNU General Public License as
" p/ c) ?6 K9 A, Q" V2 w" P - * published by the Free Software Foundation version 2.
# D5 }( H O1 g; l - *+ x# c$ c: Q( Q/ L8 i
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
' q5 _' x$ r0 Y: v0 n - * kind, whether express or implied; without even the implied warranty
- ~' U g5 B& N4 }! x4 ^' U - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 ]5 q4 h) b, x i - * GNU General Public License for more details.3 F. B( H: `4 u$ O
- */
( z% A; _$ X* l3 j
$ H B `* Y$ G3 b4 Y+ {2 e/ n$ [- #include <linux/module.h>
9 n) F7 X/ N- ^9 s, s6 b. }7 }0 O/ C7 p$ p - #include <linux/init.h>
3 N5 n7 u5 x9 d2 y1 j - #include <linux/errno.h>
0 w' d) W* t2 I% l' R - #include <linux/types.h>
9 {# W) m: b2 Z! \* U0 F. b( W N - #include <linux/interrupt.h>
3 N; M* e( t6 `+ G8 f" r% n - #include <asm/io.h>
& \$ ]6 `3 Z# D* s3 i - #include <linux/moduleparam.h>
# f# P2 r' j/ u* w7 r0 H - #include <linux/sysctl.h>
2 ?: q5 O) a1 L/ }+ u! g - #include <linux/mm.h>" t$ ~" g# L2 b b' s. z2 Z: U, ^) P
- #include <linux/dma-mapping.h>! ?: ^0 @8 K0 h) |+ k" s/ i4 X7 V. ~
- # M2 I' s& y- Q% X. A( ]( p
- #include <mach/memory.h>
& f' K& D: i# Q$ l2 h1 ?' I - #include <mach/hardware.h>
' [, ]1 h% Q* _! K5 r3 R8 o - #include <mach/irqs.h>+ k8 k6 K/ x9 m3 n
- #include <asm/hardware/edma.h>2 `# @+ A; E5 F5 R4 G- l
- 2 X' C% Y/ E7 z5 \: h9 g, O6 N& A
- #undef EDMA3_DEBUG
& u7 {- K6 A% k( u% B2 R - /*#define EDMA3_DEBUG*/6 L; e0 I7 ]3 i
- 5 j; }$ z# k; z+ ?2 ~* Z8 x
- #ifdef EDMA3_DEBUG z5 B6 I) R" @3 x- a, [- l
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 t+ r. ?/ R% k4 w4 N/ p$ k - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
@7 p# ?% V* \* z& V L1 t - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
" M. u3 X3 a$ G+ e - #else
v0 [1 Z0 J. ?. L U1 Q1 ?2 l* A9 u6 o - #define DMA_PRINTK( x... )
7 b$ {6 Z a8 l. _* I6 z) C - #define DMA_FN_IN
& t9 z; F, }; ?2 M# X - #define DMA_FN_OUT0 P- K3 ?' v+ _' I2 p* W( c; E/ u
- #endif; y# j2 \" M9 r: m
9 X; w( z. F2 j: {' }# P$ I- #define MAX_DMA_TRANSFER_IN_BYTES (32768): z- X0 g3 a3 |
- #define STATIC_SHIFT 3
a' C. e5 v! r - #define TCINTEN_SHIFT 20
- d- h, D0 P. y - #define ITCINTEN_SHIFT 21
% r n* U- Q2 O6 z- ? - #define TCCHEN_SHIFT 224 p7 U4 M0 L6 i8 D2 W1 V7 v/ Q
- #define ITCCHEN_SHIFT 231 t- [0 ]8 D/ l7 G4 h6 v# ]- q
- : D# b& l. R" f2 y
- static volatile int irqraised1 = 0;) z$ ~+ ?" c8 ? A) i; u5 M
- static volatile int irqraised2 = 0;
, P3 I6 K% F2 Z$ }( R
; O2 K! N3 Y4 O; W% n z. c- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 }1 j8 [) a. a& Z; ~6 G - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. o, x7 C ~# r* }+ e' ?- G5 J - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% v. E. O; X+ A# Q& ]
- 8 I* U1 I- I: G$ J5 z$ \
- dma_addr_t dmaphyssrc1 = 0;
" ^! r; P1 | a - dma_addr_t dmaphyssrc2 = 0;
" n- X5 R/ n& v$ M$ ^7 H& G2 B/ a - dma_addr_t dmaphysdest1 = 0;$ e! t d% x1 F, e
- dma_addr_t dmaphysdest2 = 0;# H U5 _' \ K: a
- : D" i/ z$ l7 w, Z
- char *dmabufsrc1 = NULL;
7 f* V' T, q2 f! _, O1 L - char *dmabufsrc2 = NULL;
6 H# B1 }# t: D. S - char *dmabufdest1 = NULL; I O( A* p- G; `4 Y+ B
- char *dmabufdest2 = NULL;! J/ u3 W! ?3 w9 Z) T% q
- 4 s8 Z) P- Y: ?; r8 l- j, O m ~
- static int acnt = 512;
0 t k, s. `7 x( m( b - static int bcnt = 8;
+ P1 U4 t) ], P3 q. }8 K/ j% D - static int ccnt = 8;
. N* v4 b8 \# j/ d7 X: w5 _ - ! S3 k! n3 s M) A$ E' ~3 t$ o
- module_param(acnt, int, S_IRUGO);8 x9 ]. R, o) y. q+ r3 |5 D! B
- module_param(bcnt, int, S_IRUGO);
; P$ M v6 t% t - module_param(ccnt, int, S_IRUGO);
复制代码
0 \! W6 D& G% T$ i, c" s
5 n' d4 b Z1 ?, q 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
' M& C! a8 `9 o! G8 Earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
( v2 M$ H' ~5 A 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, e5 ^9 f8 u% n! i9 I5 z8 W/ Q* |+ V6 P: E
9 d: B9 R! x7 J5 Y. A5 Q |
|