|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ D$ l/ o+ B8 b( D" @2 d. ]
- [code]EDMA sample test application+ Z* C _8 A2 q k; }
- /*
_; G6 L6 G% H( j/ ?( a4 k - * edma_test.c
; x+ \6 ~, r# H& Z a3 v( m* ? - *6 H8 H/ P0 F0 f3 b" q
- * brief EDMA3 Test Application. U7 p& `4 m3 V/ U: U/ O
- *
& K! A* c/ y/ ]1 k - * This file contains EDMA3 Test code.
) i$ x+ \; a7 G3 m5 {0 Y, Y6 L - ** X, j& Y8 v _5 D- M3 K
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE8 L; _9 Z* ~; T0 H
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT$ R- B* t, \/ J4 e2 D; c
- * TO CHANGE.
% X1 V. I. C1 a8 m: V5 { - *8 V& t* D$ d/ d$ e, T
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ ]4 x% ^4 S' N
- *
$ M6 M T% x& D' Q% e( p - * This program is free software; you can redistribute it and/or
7 `5 r2 h9 v2 N - * modify it under the terms of the GNU General Public License as( V; c! P1 Q+ Y# j) v! E
- * published by the Free Software Foundation version 2.
$ _! g' `. K: f - *
% S d3 h% m9 p1 P0 [7 ?6 f( q - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
3 ^/ d) P! J4 f4 q7 t. \5 | - * kind, whether express or implied; without even the implied warranty
, V. n" \$ y4 ?$ F; R8 u+ {4 {% d - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ Y% U2 d9 x: N3 l" J! C5 ] - * GNU General Public License for more details.
|9 L# @/ K4 Q \4 }) B/ f1 A( T - */
& m/ |. G4 ^3 v* a - 9 S) {* h4 j I7 D' y
- #include <linux/module.h>0 |: n) R0 X% c/ }
- #include <linux/init.h>
: X; u8 Q% l; C9 i( G - #include <linux/errno.h>
3 N7 \' q8 Q5 r: n9 d+ p0 x+ `) B - #include <linux/types.h>
5 R/ t2 m4 J. n5 b - #include <linux/interrupt.h>
5 U% c4 {6 J- s0 b1 ] - #include <asm/io.h>1 y! m( T0 ^( N' K, C3 M) v
- #include <linux/moduleparam.h>9 u, H2 M1 E) h- _
- #include <linux/sysctl.h>) j g' T, D% p4 g' d# h: h% G2 x6 J8 a
- #include <linux/mm.h>$ R9 l1 x7 R1 [8 @7 c* z0 H3 {
- #include <linux/dma-mapping.h>9 l; P4 p2 I) g N+ @& r
- 0 R6 r- ~- R' k( }
- #include <mach/memory.h>/ d( T0 a* ?! x) a+ h
- #include <mach/hardware.h>
; E( h4 x R" ?4 l' Y1 X$ m - #include <mach/irqs.h>
, }) C' X9 ~# u7 c6 v0 z - #include <asm/hardware/edma.h>/ |0 \1 v% Y* g$ v- A8 M1 G; {" ]
! p/ K8 L8 U1 r% d+ W7 x, W- #undef EDMA3_DEBUG
, H* Y1 ]% [/ U# ~ - /*#define EDMA3_DEBUG*/! |8 h- q+ o) Q9 [1 v" o
- 9 J, R+ Q$ d7 f
- #ifdef EDMA3_DEBUG8 ]1 `7 N. n( B( A' Q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)3 W$ H' Z6 Q I
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( v/ G4 P6 H# y$ u) F) U - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)# Q1 _6 A: s; G% E ~/ j. Z: u. J
- #else( O f ~! @ L
- #define DMA_PRINTK( x... )9 _% q% q1 `0 a5 H3 C9 ?0 _) f
- #define DMA_FN_IN
' r8 N4 G" `' z5 E# L9 `5 ~' q - #define DMA_FN_OUT( P8 O6 F, j' d
- #endif5 Y& B0 |) v) O
- 0 Z" V7 K6 Q! f* C5 N7 s) b
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)8 n7 \. k/ \+ A2 T
- #define STATIC_SHIFT 3
& W1 | Y+ p) K7 @% e* k: C - #define TCINTEN_SHIFT 208 A/ c& _/ \3 d" ~: d2 }5 h
- #define ITCINTEN_SHIFT 21. H, R4 j: }8 N" K/ ]" G4 w& [
- #define TCCHEN_SHIFT 220 f% H$ }& g* D. b
- #define ITCCHEN_SHIFT 236 ^- W# J, b S% @4 L
& w! [" j/ k W$ S9 K' Q. ~- static volatile int irqraised1 = 0;' V( s9 t5 _6 @) `3 Q% a7 H3 C
- static volatile int irqraised2 = 0;
' p) E! j" P9 C7 u7 x - 5 }7 C! }; n. V2 M
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);' y5 M) i/ t0 C/ s
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 l$ R6 {6 `# n - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) ? j( p# E" Y* i) Z. x, f9 u
8 z k% ^( h$ r& A- dma_addr_t dmaphyssrc1 = 0;
! Z, u# }( I0 b1 E) U4 \, ` - dma_addr_t dmaphyssrc2 = 0;
% I$ ~, m' w1 K j2 y% ^. e - dma_addr_t dmaphysdest1 = 0;1 Z% P# m1 [0 \2 U f' a
- dma_addr_t dmaphysdest2 = 0;
# N9 z1 W) g/ w) |
`! D o9 ]1 ]- char *dmabufsrc1 = NULL;
3 p, \9 b1 @5 f+ \; E& R - char *dmabufsrc2 = NULL;
; X5 Y* v1 Q- S1 G- m/ C - char *dmabufdest1 = NULL;: |5 h. j% o$ _8 E0 R6 H
- char *dmabufdest2 = NULL;! a1 U, i) ^8 x4 i: M$ O. D. z8 d5 X
- $ x4 Y% k4 }$ j8 v- t0 Y
- static int acnt = 512;) U2 o x0 E6 ]& N- i. ]! c+ o
- static int bcnt = 8;
) T, x$ o2 U j4 S - static int ccnt = 8;" C% M1 W1 y7 i! _( b
7 [" e4 d: Z2 p- module_param(acnt, int, S_IRUGO);
. { Z0 m7 L, W7 B' z" e - module_param(bcnt, int, S_IRUGO);' |' A, R5 u m: c n+ m/ I
- module_param(ccnt, int, S_IRUGO);
复制代码
* ?/ J4 R% l8 p. C. H2 i8 y8 t3 w$ j: k4 O; v+ u
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
X/ B" i+ P% p5 ?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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ _9 N T. @) Y, S D: ?
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
, N1 C4 l/ p* t4 T
. J' {9 G; C& Y8 j4 ]6 x5 i K0 P2 v- p( k7 d2 j; I4 R
|
|