|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
- k. r- k3 x# N; r8 L4 r% u- [code]EDMA sample test application
* P7 K! I1 e3 r - /*
, N& i& o: @+ N C - * edma_test.c
- [8 }" B$ ?% s F6 s# X; R3 ^ - *8 t0 [, t: w2 C4 B ]8 F
- * brief EDMA3 Test Application" p2 y. H+ l1 m x3 s
- *2 T9 M; F& I2 V3 {& ^, I8 v1 P
- * This file contains EDMA3 Test code.
; {7 g! z9 O$ e0 m2 |8 q - *
* N1 u" S( C* J - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
r0 U3 p5 R, f4 j# J- } - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT8 I) C9 t2 ]* G3 }
- * TO CHANGE.
6 R; ~& I0 R, E7 ] - *) B7 U4 M; n, b/ Z. O4 M2 N( J
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/$ B3 C6 H% U. p* j c2 M; y. y
- *: ~9 G% G" [( D, R; m
- * This program is free software; you can redistribute it and/or
* R/ @8 A4 J7 L/ m' o - * modify it under the terms of the GNU General Public License as
+ `! U( H! p; n2 ~ - * published by the Free Software Foundation version 2.* w, F5 U. h3 ?# s8 F$ Z1 W: t
- *
& L7 |) U+ E% ^6 [, D - * This program is distributed "as is" WITHOUT ANY WARRANTY of any0 s8 ~+ N8 c! ?0 G F( a1 y: Q
- * kind, whether express or implied; without even the implied warranty
' n3 O' [0 V9 Z, a+ u - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' b3 u* }4 F9 D' M5 V+ w
- * GNU General Public License for more details.8 O" U W6 k: [0 h6 @) w7 |4 O
- *// W! |' K; T q" k% t
- * d, h3 m* B2 w$ y% U& N7 r& E
- #include <linux/module.h>
; D1 p' h' f$ O, e - #include <linux/init.h>/ t) l( @. e) G9 _
- #include <linux/errno.h>2 }8 B( ?5 H$ D4 U8 s8 j0 d
- #include <linux/types.h>& x7 h9 z) P( a F
- #include <linux/interrupt.h>
! {6 ~ L' f- T - #include <asm/io.h>
& |: U4 @7 k7 {, L; @; @! Q: ? - #include <linux/moduleparam.h>
% {1 K" d. p2 z. i, l( E - #include <linux/sysctl.h>
% ^, T; b8 p# x5 r4 V% _ - #include <linux/mm.h>
3 X9 @7 U4 g) _* P6 K - #include <linux/dma-mapping.h>
$ M& F# | G- w0 c) {9 y& C - 6 H! M; w" t1 h# C) K: _ R( _
- #include <mach/memory.h>
6 b* M* l2 K/ ^7 X) \ - #include <mach/hardware.h>
: a! r+ p% }6 Q - #include <mach/irqs.h>( R- ^; L5 V; j
- #include <asm/hardware/edma.h>
5 P- K- J+ k; E9 b0 L- B2 ]- U - & c+ ~9 N0 q7 _" q! j3 ], F: q
- #undef EDMA3_DEBUG
0 n2 g6 g4 C5 u, A- q: { - /*#define EDMA3_DEBUG*/
; E! T) B; q" p - M; h$ Y0 Z! T D Y- B# h+ I
- #ifdef EDMA3_DEBUG
u1 }" D8 m' B% b" I - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
" j7 [% I3 C# z/ B - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ ~5 Z: E: E4 j9 X% @8 j$ o - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)! a& B( `: C8 [1 {$ y3 j
- #else7 x, T2 o9 r& ?3 g5 }. T
- #define DMA_PRINTK( x... )% O) B+ E3 H: p6 X9 b$ y3 w! }
- #define DMA_FN_IN6 W4 b+ y4 Z& \4 F5 l" E
- #define DMA_FN_OUT
7 [) e! Q; J- p - #endif
- T7 I" j# p# j* `
+ U# ~; [* ?! [/ C; {0 r- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
9 K Y( W% q2 O' g. K- `4 [ - #define STATIC_SHIFT 3, b, U0 u" g3 {
- #define TCINTEN_SHIFT 20
# U# C5 ^* J8 L4 Q - #define ITCINTEN_SHIFT 212 r- I$ B- C$ Y# T
- #define TCCHEN_SHIFT 22
' @5 O+ E" O& a; n' D - #define ITCCHEN_SHIFT 23
' e4 J: n% \& A O$ [6 i - ' ?! N- z: }- Q& j: h7 V
- static volatile int irqraised1 = 0;
9 n/ C% A, v- A- B8 E - static volatile int irqraised2 = 0;% [& Y: A6 q: D
- 5 H& ~6 G& o; {: r
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; ~! n" ?$ U% D& l" ^3 m- i
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, n) Q/ v5 F6 n% c$ q( K4 b6 }
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 k" z' C/ d) r, J" J( M
- * Q* }' {' J# @5 Y, I+ G* H
- dma_addr_t dmaphyssrc1 = 0;; [2 z# U# h. u9 C# R2 X' Q i. W
- dma_addr_t dmaphyssrc2 = 0;
. @/ C8 {) ?5 S* e+ w& S$ Z' e: _ - dma_addr_t dmaphysdest1 = 0;
) f0 Y4 }: v/ [$ o3 X - dma_addr_t dmaphysdest2 = 0;
4 B v3 A, B2 Z; r; Y# a# \ - : ]) X% X6 I5 C6 g4 G
- char *dmabufsrc1 = NULL;
- U+ n5 K' L: H* U' ~0 P9 E - char *dmabufsrc2 = NULL;9 H4 Z' r4 b. @/ }+ v$ o; s
- char *dmabufdest1 = NULL;9 u$ u" D& q' O0 Q# `, K
- char *dmabufdest2 = NULL;3 `- X; k/ Y1 U. ]! n
- % n/ I+ R8 ~4 ?0 ^6 r; _
- static int acnt = 512; W! u) Q/ e, J; I& m2 ?
- static int bcnt = 8;
+ h, M* U' f( p/ p - static int ccnt = 8;
( V+ G6 L, y9 u; L P - 7 s, j/ r# d, n9 y! g+ o. c
- module_param(acnt, int, S_IRUGO);" O& u, Z3 U; N9 R9 J( K
- module_param(bcnt, int, S_IRUGO);- w/ N9 ^9 @# Z( r5 z
- module_param(ccnt, int, S_IRUGO);
复制代码 / z' g. k: ~& W: @5 J( L
) j8 ]+ Q. l, k. G 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
* w' R% M4 ]6 `0 m( \( ]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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. E% N% @4 c2 e: |4 }) k: q
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。1 w" R5 p& B. F/ t2 Y0 q% d% w' k
# `) f, z, M6 d. E3 ~
5 D& z- c( h( x1 v |
|