|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 - x+ P& \$ S8 i( h8 I5 M& ]
- [code]EDMA sample test application% I: N$ J( f9 g/ U2 Z
- /*0 Q$ j/ N' g0 D6 y! K3 T
- * edma_test.c& J; P' G* a8 N3 a' o
- *# B& @6 ], F7 e4 ^* ^ Z* [
- * brief EDMA3 Test Application) ^. v# Q2 T2 i) P a
- *& p8 y7 V' `: i' S. Q+ j
- * This file contains EDMA3 Test code.* r7 K. a, k7 C% p7 d- Z2 C+ G
- *
; P5 }" O" p/ u4 E - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
: s, v1 h0 ?* Y& |0 ] - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT6 M2 ^7 H, Z- u j5 z- X
- * TO CHANGE.0 X+ t! I& U8 U8 p t: q: p
- *9 X5 Z0 J* q8 r0 I6 E m
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
0 W! i! i q/ W8 W6 x3 t - *
- ]# M6 |+ n: ^9 C& a! ^ - * This program is free software; you can redistribute it and/or
& ~, X. e( S; y- W+ S# E - * modify it under the terms of the GNU General Public License as
; W2 }& n) I6 ^( {) r; n - * published by the Free Software Foundation version 2.' B. m9 A3 {( y: ^
- *7 p4 h6 t) B# H" y- I
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any. m. j x' D C* X, Z! U. {& f7 H
- * kind, whether express or implied; without even the implied warranty
( b5 \/ `3 S- B. h* m4 d+ j& z1 d4 Q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the/ f4 i# O$ |" F1 s9 p
- * GNU General Public License for more details.0 ]' Z1 Q: D; Q
- */
$ X" A, T7 v5 S; k
4 ]( v8 s: |* c+ z, {- #include <linux/module.h> k f, W9 y) K1 }$ H
- #include <linux/init.h>
/ M6 ~. ]. c) I7 B4 z8 @- X - #include <linux/errno.h> C9 U9 `% Z$ w2 n: \* x0 W( I
- #include <linux/types.h>
# r. w5 X' {- \# h - #include <linux/interrupt.h>. m' J! Q' T+ S" w! f, j
- #include <asm/io.h>. E1 p3 N Q9 Q' |, ~ R# n
- #include <linux/moduleparam.h>
' }5 H$ z- a* c+ d3 q5 h( t4 h - #include <linux/sysctl.h>: V3 Q. O* J! `' }! C6 Q# V
- #include <linux/mm.h>
# p/ |. P$ X8 C2 e3 ~. ` - #include <linux/dma-mapping.h>
; }! u7 A, I. y# S9 L/ T( M/ q - 1 g9 w9 r+ x5 l' I
- #include <mach/memory.h>
9 F5 c7 h* D% V: k' K - #include <mach/hardware.h>
+ h( M2 X( C# w% T - #include <mach/irqs.h>4 K7 A" O# b2 G1 y4 Z) h* M. O# G8 v
- #include <asm/hardware/edma.h>5 _4 Z, i1 H4 W# m; }% m4 ]
- # o' F& A O" @& M! ^
- #undef EDMA3_DEBUG
* V2 V0 l1 s, x- q - /*#define EDMA3_DEBUG*/8 b9 Y. \ X% s
- " z6 _6 D9 U' ~* p z
- #ifdef EDMA3_DEBUG
) ^- H. r z3 Q) }/ t* e - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)5 {* w- F% P: o/ n% n0 _. {" P
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
: L" {8 i0 u4 @* F" O - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. N2 e) E6 [' o9 Q, Y V - #else
2 i9 G2 g; R2 u' D- `& r - #define DMA_PRINTK( x... )/ T: P' i8 [& `) w& B7 {
- #define DMA_FN_IN. _$ H. D: e- E5 h
- #define DMA_FN_OUT' J& z# t: T9 m/ d. T% @1 s; ]; o
- #endif
3 ?$ z) }) l7 B0 L" E8 L7 Q
7 v( z0 l3 r/ s+ ]% J+ p8 A0 [- #define MAX_DMA_TRANSFER_IN_BYTES (32768). o1 ?+ v- W0 [7 k0 |/ D1 ]2 g# ^
- #define STATIC_SHIFT 3; J9 m/ w! V2 D1 }, ^" K1 D
- #define TCINTEN_SHIFT 20
3 j4 r ]7 B: ]7 T H - #define ITCINTEN_SHIFT 21
( Z6 ^ M) d4 P1 j! w - #define TCCHEN_SHIFT 22& }4 r8 j. Z1 ?. h0 {/ t! _
- #define ITCCHEN_SHIFT 23! _+ e6 f% ?1 [( l# s0 Z2 g7 C
- % H3 h2 Q, Z; m; I1 Q) J# R0 y
- static volatile int irqraised1 = 0;
' u5 F" C& P( l) m3 ` - static volatile int irqraised2 = 0;9 Z) q3 O9 Y8 F! `7 J- ?
, q" Q* \/ d- \# B/ |- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);4 Q# m# j F! ]* J
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, x2 d1 f* P6 y3 ~
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* G t3 R% m% C( |# J; R8 m
0 y/ s3 z9 o& n( J- dma_addr_t dmaphyssrc1 = 0;+ A3 I: U3 f9 z8 B0 w6 w) A
- dma_addr_t dmaphyssrc2 = 0;
`) H7 N$ F7 \5 c6 @' V - dma_addr_t dmaphysdest1 = 0;
- H3 w' V; C5 u) L6 M" a - dma_addr_t dmaphysdest2 = 0; H2 l" Y1 x. X3 h5 ?& C
5 M$ q( r- X2 ] O- char *dmabufsrc1 = NULL;
$ q$ R, _5 d& ~7 K0 ?( n$ D2 @. j* c - char *dmabufsrc2 = NULL;
Y9 X6 z5 v% v f8 I - char *dmabufdest1 = NULL;7 j$ L) M9 Q" A Q6 S
- char *dmabufdest2 = NULL;# ^! d) ]- P+ h2 u6 z
- 2 f$ o2 w- Y8 m9 U: X
- static int acnt = 512;
" Z3 x$ T- U" j4 Y9 y6 K - static int bcnt = 8;1 V+ `7 y# {' @; ?' V1 |0 O+ n2 ^- l
- static int ccnt = 8;
0 N+ F% y5 e1 \, ~3 c6 N6 I( ]! N
+ w2 h" s! l5 |) e0 M/ |9 v3 F1 I- module_param(acnt, int, S_IRUGO);
1 c: h9 `. y, a6 q" K! i - module_param(bcnt, int, S_IRUGO);0 o/ ^! A8 s$ ~- Z: q
- module_param(ccnt, int, S_IRUGO);
复制代码 / F& ]7 _: q; r' H5 b) `. v
7 i0 Y2 X* H# i+ A6 q: I 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 S* I: a2 z* ~7 w. C: z0 W
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 B) f2 I8 q8 b9 h 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
7 S$ O1 Y; v( h6 _
7 N8 X# x) `$ y# g* ~( y1 `0 p% X9 F2 h: g* g( X+ k+ }
|
|