|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
2 o& U1 b: G/ l5 ]* D- [code]EDMA sample test application
% H1 `/ C' \: L) K6 r* c+ a" d' u, l - /*
4 ]! T" t0 x# s# a9 m' B2 z* @ - * edma_test.c
8 H0 W5 [& m3 F/ w - *
4 P" a7 I. B& k9 z, ~* m R - * brief EDMA3 Test Application
, h `3 Q) d/ Z6 K - *5 [* C# M* H( Z" i5 y# u. \ C! I
- * This file contains EDMA3 Test code.( A3 A8 {0 H6 u$ N" q( i* f
- *
0 r% G- X& W+ T* W* w' J7 R5 @ - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE. S/ J- a0 ]4 Y& _
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT! n6 {9 S1 [% ?$ P
- * TO CHANGE.
# z2 W- [$ M) H7 L6 ^$ i - *7 t u: Y5 t. s2 v: {4 c; t
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com// V; d# j. I- C- P: ]
- *# R1 ]: {9 x. O4 {
- * This program is free software; you can redistribute it and/or
( V' H. Y& c) I* P; { - * modify it under the terms of the GNU General Public License as
2 D9 J# z$ I) W% t3 ]4 y - * published by the Free Software Foundation version 2.
! u3 v4 B* ?/ k s1 Y - *
6 o5 R6 }7 _3 H - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
6 D0 p$ ?$ V8 G. ~7 u7 C - * kind, whether express or implied; without even the implied warranty' M X' r, l, {( F- v. I, i, c: C
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the6 ]9 K: `* ~# _; ]6 |9 y
- * GNU General Public License for more details.! O$ ~; f/ k( N8 ^3 b
- */& i+ F5 N# r$ a& B8 N
- 3 d! X8 _: Q, B+ Z
- #include <linux/module.h>
2 F: }' g8 D a2 i; m& y4 Q9 k* | - #include <linux/init.h> v3 T# \$ b5 r
- #include <linux/errno.h>
6 a0 n1 o( e3 e* _. \ - #include <linux/types.h>
7 z) |: B5 l( M+ A. t8 w - #include <linux/interrupt.h> c# E( E8 m/ \8 B \7 w
- #include <asm/io.h># R4 @# N0 U7 R/ S
- #include <linux/moduleparam.h>$ E6 Y1 C+ @8 C: v- F( {5 E. b
- #include <linux/sysctl.h>" i7 R/ P" Q& j+ W( a5 Y f
- #include <linux/mm.h>
: e8 d$ i: X& K - #include <linux/dma-mapping.h>- o+ a3 z! W# I i4 l
- ) j% R) K: K6 U* P1 N6 t3 z1 L5 ]
- #include <mach/memory.h>1 m, p; g' N' H3 A$ g
- #include <mach/hardware.h> j6 c% A; \5 ?3 h/ J8 K, U
- #include <mach/irqs.h>
K; Y) w: w- X+ s - #include <asm/hardware/edma.h>
* k9 [0 |. y# }4 ^( j) A - , I/ P& [; H3 V1 @. L- c
- #undef EDMA3_DEBUG6 \* G9 s& e/ }4 c
- /*#define EDMA3_DEBUG*/
# h) m- M) V( V. C( u2 R
9 t. Z. A9 {, z! B- #ifdef EDMA3_DEBUG, g9 n! a" T9 {+ ^9 @
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
& A0 U% F) K6 D% K - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
6 t3 Z, L9 Q% W, ~9 C( D9 ] - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
+ D* N4 O3 ]1 C* k - #else
8 d4 c+ e; x( U/ u# ] - #define DMA_PRINTK( x... )
8 b, n2 I! t+ A3 q - #define DMA_FN_IN
4 l2 K; B- @: s* \2 b8 P0 G - #define DMA_FN_OUT) O2 r0 m" j/ R/ D
- #endif
; Z7 C: z. D& Q# {; v2 s. \) ~# ]
% S }( y+ j: R& P, F h7 h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)0 \/ c/ ~- \, T# M: ^
- #define STATIC_SHIFT 3/ M( g6 O; a$ q, ?1 V; L' j
- #define TCINTEN_SHIFT 204 ?! n% L3 F* u* y+ r5 S5 i' x
- #define ITCINTEN_SHIFT 21
. T/ i: w1 X. V3 t - #define TCCHEN_SHIFT 22
' h, {) V7 ~/ ^4 Q& `: q5 g# H8 z - #define ITCCHEN_SHIFT 23
; I4 v8 ^6 w& D, c! W0 ^/ _* g: B" ]: w0 c
+ z3 Q# N1 Q1 A( G1 H- static volatile int irqraised1 = 0;
9 r, h* e2 Q p l& x: Q6 [% {4 [ - static volatile int irqraised2 = 0;
$ r2 O- y6 G% I E* w
2 c, C% a1 ?9 D2 ^# N8 W- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 O8 V8 p. ]/ ?
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 w& Y; N5 f; B) m; \7 k - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; G3 _( q# o! \2 L! X
* e$ w1 M9 L9 \2 W- dma_addr_t dmaphyssrc1 = 0;# Q _5 J* G4 r5 v: B' m- A
- dma_addr_t dmaphyssrc2 = 0;
' P) b3 [' U0 S+ r/ S! O - dma_addr_t dmaphysdest1 = 0;/ a% q9 I9 Y3 Q
- dma_addr_t dmaphysdest2 = 0;* K% Q; ~$ x% ]9 u& W: X6 y
4 J( [8 I& u+ y( c- char *dmabufsrc1 = NULL; {( e2 a4 g" ?* T
- char *dmabufsrc2 = NULL;4 R- O: `. l8 g: o0 w
- char *dmabufdest1 = NULL;
' [9 B3 Q2 H+ o: R" ~$ v - char *dmabufdest2 = NULL;" t: d7 r# i& ~$ d3 N' Y* U
" k( M3 L5 |- [$ ^" I- static int acnt = 512;
& I8 v" t3 j z - static int bcnt = 8;
0 M, a1 w. }* P, p4 @ - static int ccnt = 8;
6 ?* v4 f- [* C
, s* N) f: b4 U- module_param(acnt, int, S_IRUGO);
2 f- ^* h% Y0 x9 T5 K - module_param(bcnt, int, S_IRUGO);% Q. I* Y1 q% g+ }% r7 l- T# |; f
- module_param(ccnt, int, S_IRUGO);
复制代码
8 F) X% q2 d1 ]7 p! s
3 K6 B/ g1 l6 A# J 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用; J% }9 s5 _0 y9 k3 ?* Y7 j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# `' Z% b- f9 ~3 k4 S% U( L
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, |0 |, p' O2 U# e; n
/ A$ W K8 l1 z) T( g, d1 b- Z" R4 y
|
|