|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 , a: g4 g8 d% Z# |% q$ G' l3 e
- [code]EDMA sample test application
" I2 T) _* L6 @# q( u: N - /*
# {( [/ E& Z& r2 h U - * edma_test.c4 Y. a; t9 b3 l8 j0 C1 J
- *
3 k! K6 l1 F5 s, M7 {/ h3 Z - * brief EDMA3 Test Application* B' K: r: r- y4 v! d
- *( z. ^# ]9 m# H* |" g1 \% U, _+ b' u! R
- * This file contains EDMA3 Test code.& C( w3 j; S+ [4 U9 p
- *
2 S5 M; }4 h& v - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE: t( ~* N N; @/ g) }1 {
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
~2 L: ^3 K; [ - * TO CHANGE.
. x2 i; r' L5 k - *
, Q) @$ `$ Q1 W$ q4 y+ c' X$ X - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com// ~- u1 u* V0 T6 [3 L/ X
- *
3 T' s8 \1 [. U! E - * This program is free software; you can redistribute it and/or
$ m" T' e2 G, V H- i: u p0 U - * modify it under the terms of the GNU General Public License as2 M6 c5 F2 m) K. n
- * published by the Free Software Foundation version 2.1 g( W6 [; B/ L6 k# r& D) A
- *
7 a5 C( h8 @. q0 X - * This program is distributed "as is" WITHOUT ANY WARRANTY of any4 x( F+ R1 p& ~) H( _+ _
- * kind, whether express or implied; without even the implied warranty
5 n/ E5 j8 X. a) C( s - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- D! m1 S* U3 O6 ~9 G8 @; l
- * GNU General Public License for more details.3 }, z6 w; i* o9 C9 Z3 I, _+ G6 v
- */
' E( l' [ C& K6 q0 Y+ l6 @8 ? - ' y. i- D3 n: q, U. F7 C
- #include <linux/module.h>9 x q4 j" l; X; @! Y
- #include <linux/init.h>
; R7 Y3 x1 j/ q8 ?. N) y% ^ - #include <linux/errno.h>
; K/ y, _$ ~' y2 h1 J% V - #include <linux/types.h>" c2 c. d# _' {* P0 D; ~& U
- #include <linux/interrupt.h>- J8 ?+ a4 Y2 R0 x( F, Y
- #include <asm/io.h>
{+ ^- |# Y) {5 s. _ - #include <linux/moduleparam.h>+ y9 U, U8 s8 J
- #include <linux/sysctl.h>
3 n$ X1 Z8 _3 h0 O - #include <linux/mm.h>) Y y1 o8 |" @% H* T* z5 x$ ^
- #include <linux/dma-mapping.h>& N) g! @2 x- J/ Q! i" w
$ i, v8 N$ }8 p6 z+ r7 G- #include <mach/memory.h>0 t. z' h% e+ F2 n
- #include <mach/hardware.h>
" s/ { l6 b8 {0 K% _$ O7 ^ - #include <mach/irqs.h>
# j& m D F h - #include <asm/hardware/edma.h>& J c+ R3 [7 ?2 _" i! Z
- $ H6 }& w# m! b0 ~2 e! g3 f' ?
- #undef EDMA3_DEBUG) J; l& c. q! @1 C, v& e
- /*#define EDMA3_DEBUG*/- b+ Z5 r& W- E, n, s- t
- 2 V& Q# N/ C( F7 W4 X Z
- #ifdef EDMA3_DEBUG7 l8 u: r; |2 @, Y- c6 N
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)- O8 c+ X6 W8 h7 L
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
+ p+ n; z5 k) C; o5 C - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
3 M- c% j+ u1 D+ Y - #else
/ ?- }7 z% O8 R5 {: _ - #define DMA_PRINTK( x... )1 I* ]- s. y* p9 u0 T; g' \
- #define DMA_FN_IN
6 e$ M, p9 f1 T& M8 A - #define DMA_FN_OUT
( H3 R* b8 [2 c4 Q$ i: r - #endif
& c+ I8 _7 Q* q; q - - c9 L( D. [9 J2 B6 j' @2 N: X( X
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
) f. k1 X5 f- x0 @: J - #define STATIC_SHIFT 30 L' z- a9 K7 _# Z, P2 W. i# L8 X
- #define TCINTEN_SHIFT 20
8 ~' `+ Q+ b/ Q& Q9 z - #define ITCINTEN_SHIFT 21) _! e4 h- a4 f! E
- #define TCCHEN_SHIFT 22
$ R* d5 E5 D: X | - #define ITCCHEN_SHIFT 231 n9 f% x, q. W; c5 e* {7 B
- ! j) ^9 }/ Z0 c) o4 O; Z' o
- static volatile int irqraised1 = 0;) b7 P0 |3 Y7 ?3 t( @: E7 F
- static volatile int irqraised2 = 0;' H% |7 d: l5 Z- E% ~- u
- 0 y3 N( u9 v3 Q& ^
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 F1 ^/ O* F8 {! A2 R | - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 _9 f. b" \1 ?/ y) U. W" u% l
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 D. x5 O( W+ i, M4 j! ]$ [6 {
5 ?$ z& ?0 B4 e% f9 E5 e6 f- dma_addr_t dmaphyssrc1 = 0;& C. \- n2 _! |
- dma_addr_t dmaphyssrc2 = 0;
- A+ I9 M8 x* W h3 x' I - dma_addr_t dmaphysdest1 = 0;% _( G! u- x9 n h# ?1 T) q
- dma_addr_t dmaphysdest2 = 0;4 E: h( P' \+ D3 j' E( Q
" E; Q8 Z" ?$ {" _) H4 ]% ^) N9 z- char *dmabufsrc1 = NULL;
) `; V! k6 H" x9 u - char *dmabufsrc2 = NULL;
' ~2 }7 c0 `" L# p - char *dmabufdest1 = NULL;, T+ x, q$ C% ?2 _0 n% y1 b
- char *dmabufdest2 = NULL;: M) P2 @2 y, K% ?
- ' B* q* H5 q2 l1 c# S
- static int acnt = 512; L: `/ b( k! |* k* P4 y
- static int bcnt = 8;
& x4 t# f9 _$ q - static int ccnt = 8;
( F* Y" t+ D; M1 h7 {6 G/ W
! {5 v. l) E. h- module_param(acnt, int, S_IRUGO);
0 K' U2 e# S% P0 L/ R. `$ F - module_param(bcnt, int, S_IRUGO);
) A9 y, B* ~3 i# r# N2 G - module_param(ccnt, int, S_IRUGO);
复制代码
4 e% x, T+ M5 m0 \1 X3 @5 D) I) y, p
' I% Z" T7 }; I. Y& M/ V 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
" s, Y ~# l$ u e: a4 qarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。5 N& c1 y0 v. h) {+ ` H8 A+ v; D
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。9 P* n( B) R% T2 k) d8 F2 [
0 z( T4 x k% ?- \# F# @
" \; K8 Z* d4 h9 E& z- E4 a2 i Y |
|