|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
% Q7 w6 d: F5 e2 L, o- [code]EDMA sample test application: `) j5 h5 b" `7 |5 e: A# a
- /*
# e6 L2 ^' S/ z6 f N& R( j - * edma_test.c3 c3 Q1 }0 {2 _ r# g
- *
$ b5 a; F* e5 x) c7 X7 D n - * brief EDMA3 Test Application- g: U/ n8 n6 e/ b
- *
$ `1 F! i0 o x; \- [- C, K - * This file contains EDMA3 Test code.
/ P0 m, Z$ @+ `. n, D* [. Q. X" e f/ { - *
& }7 D0 ^4 W. Q, z - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE3 ~ Y- A6 h$ s) N" |: L, q
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT+ ^# S I J7 `2 }0 w/ W9 r. W
- * TO CHANGE.' Z( l7 _, ^! u, v. j; _# I
- *; q" l3 }* R) W6 h, L& Z% ~
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/8 |+ k l; v* b C' z$ ]' I8 a
- *
. b; c, h8 G( {% M* W - * This program is free software; you can redistribute it and/or
! o6 C- _* F1 n, M5 D - * modify it under the terms of the GNU General Public License as
: P6 f* Z! S1 C& I+ k - * published by the Free Software Foundation version 2., }. W4 W5 F# D! i
- *
$ G0 J9 B9 m o3 F* Y0 b - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
( y, K' F/ Y) `1 w4 W X/ C2 N - * kind, whether express or implied; without even the implied warranty! W+ t2 ~7 x( S
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ @5 y$ ~% Q. I2 ~
- * GNU General Public License for more details.5 @2 y+ I+ ^$ s0 }" {
- */. c9 H: w4 \, y* }" m2 f% y0 v
& {! N" f+ X) l" B: i" I- #include <linux/module.h>/ W* m8 f' O; {2 k! O
- #include <linux/init.h>
; |% R+ i4 k9 @, h/ V - #include <linux/errno.h>( w3 \0 W! F, X* T6 ^: S" ]% A! I
- #include <linux/types.h>
8 b$ ^6 Y7 d/ W. f1 o+ r& Y* m$ D! K - #include <linux/interrupt.h>
2 E; x; c8 w9 D# c - #include <asm/io.h>; E, f# c1 j" Q* m0 T; F+ I0 a
- #include <linux/moduleparam.h>
" ? H9 E j `1 ^ - #include <linux/sysctl.h>
5 n8 y. z% i9 W - #include <linux/mm.h>- ]1 m; N0 f0 O! E. j/ c
- #include <linux/dma-mapping.h>
" {7 y" D6 E% s1 J9 p6 B8 i. e. r$ Y - - M3 K( o1 E6 |7 v; _* Y
- #include <mach/memory.h>
6 s7 s. m& F5 A3 N( H+ p* ? - #include <mach/hardware.h>
6 }- B. y0 L6 i$ s" O. b. l - #include <mach/irqs.h>
: m- B4 m5 q( R0 g9 R4 b( s3 Y* |- r - #include <asm/hardware/edma.h>
6 J0 L; I' \: v
9 Z6 h( ~; y- w+ [/ D K8 h; a4 M: U- #undef EDMA3_DEBUG
8 {( L5 X% w. r. q' }* W - /*#define EDMA3_DEBUG*/
6 u( L0 ^, T) {) ]0 N - 2 e! s, L: \3 K0 b% a8 D+ s
- #ifdef EDMA3_DEBUG
0 t: q0 k3 h- z# [ z# M& H3 Z - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS): m4 B0 M: \: ?! O2 Y
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__), b- z ^; ~$ [8 V
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)& L0 |: s" C" I8 w+ p
- #else' C/ a _8 p0 {1 {" z
- #define DMA_PRINTK( x... )
/ z0 v! z: z* }' K- i2 g - #define DMA_FN_IN
8 J) E: Q% A5 w' K! |7 \& a2 n - #define DMA_FN_OUT; ^7 S( l" ~3 `6 L$ g/ c
- #endif
- O ]3 H/ \) O: P - * G; X; x; h9 o0 \0 p& z5 \
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)# l; T+ Z% Q+ u7 L' ~
- #define STATIC_SHIFT 3
5 l3 d7 h- i0 S - #define TCINTEN_SHIFT 20
; l ]7 |3 v/ T) f/ V: K - #define ITCINTEN_SHIFT 21
6 J$ l2 Z. l/ ]5 [7 `0 d - #define TCCHEN_SHIFT 22; P; t5 ?1 {; N% E/ ^
- #define ITCCHEN_SHIFT 23
8 Y; v9 G6 M( e
- Q& a7 T. @& l) a) `- static volatile int irqraised1 = 0;
+ f4 R" G, V0 ^8 z" m( B0 V - static volatile int irqraised2 = 0;: U% Y, l8 p C: ^$ G
/ y/ b Z/ T' { D2 _3 c/ K) u- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! Y b/ v+ B P% \3 S8 V* h; T - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 g" X, t* q/ p, T- A - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. R0 |9 A* e3 F9 z
% _4 t. d2 R; X) \- dma_addr_t dmaphyssrc1 = 0;
+ Q+ t5 i, d# X- S* b* r - dma_addr_t dmaphyssrc2 = 0;) O# @% C0 g6 `( k( r5 L1 P, ]
- dma_addr_t dmaphysdest1 = 0;
0 m( ?6 p. W2 x8 m - dma_addr_t dmaphysdest2 = 0;- M" c. K ?+ L# |4 a% ]5 o3 }# m& D, U
- ; r5 K, d+ x6 u# Q8 H
- char *dmabufsrc1 = NULL;& y8 y0 ^! U( W' ?1 X1 _8 j
- char *dmabufsrc2 = NULL;2 X& S( v; p1 d* E! a7 }
- char *dmabufdest1 = NULL;
$ Q9 @4 _' K% s+ |, K! s - char *dmabufdest2 = NULL;
; W, Y I) x" D. a5 W: f. F - * B1 {% }- \0 a4 o8 A% ^
- static int acnt = 512;
K) O2 C5 B. b, o- b3 z8 z7 K& v - static int bcnt = 8;
7 B x7 p' H( N" T) i: ` v W3 q# U - static int ccnt = 8;3 C2 I7 c3 y: k- W5 e
) ~/ b# T: ~% ^: y- module_param(acnt, int, S_IRUGO);9 ~1 G; ]3 v6 b8 }1 \2 Q5 u
- module_param(bcnt, int, S_IRUGO);* L8 c4 r0 V" R! l0 W1 g* P
- module_param(ccnt, int, S_IRUGO);
复制代码
! \: f. c( y# O& L
6 v* v* y$ h/ ^! ^" s 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
; S" U% \& k$ `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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。" O# ?& x* j3 b/ x
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
& W D0 K4 @4 [% r, l' f
7 ?5 i& ]+ \' W) L% l$ G: ~0 R- F, v+ z" k
|
|