|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
! \% }. A6 d/ z/ o& u) Z- [code]EDMA sample test application
3 \% O0 }% W) L - /*1 Y3 M9 o2 J; ^9 C+ p
- * edma_test.c
. p$ {- \$ |% [' x - *) Q1 C/ a7 @: s) R3 E, d! }
- * brief EDMA3 Test Application
# a8 Q3 t7 ]! P! `) B - *
& o8 B) l5 j) L5 o& H ? - * This file contains EDMA3 Test code., j/ F" Y4 ?' ~! ^$ J( |2 L1 B
- *. [* p/ w' J( L0 _8 P- T$ R) T( d* P
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
6 P' h6 T& P, \0 A& t6 b, A# E) j; e - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
3 c* S2 @. @; k8 V1 M c - * TO CHANGE.! H' N0 W& Z- C$ Q% U# J3 G
- *
2 O8 n/ T# z+ ~1 D - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
, Q3 @/ _5 X Y8 u: b% d! q - *
6 f$ U) F! {0 Y. F1 I - * This program is free software; you can redistribute it and/or
! k1 c5 p. j: w7 P( [/ H5 r7 E3 T - * modify it under the terms of the GNU General Public License as
- ~& t* X; t9 ]/ { - * published by the Free Software Foundation version 2.
) I: _5 I2 h) d. |$ W - *
# s$ D, d% ~, V, [3 B - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 E8 ^6 L) f6 W* D8 Z" r7 P' w, a - * kind, whether express or implied; without even the implied warranty0 p$ v3 w! ^0 W( [ Y0 S) @ W
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ?& ^0 J- _" e- J- a
- * GNU General Public License for more details. O* H* y4 s5 ?
- */8 x; G; m7 v0 F: `8 {; a, A- F
+ c# q* w+ c- @/ }$ ^- #include <linux/module.h>
" R" @! F8 b# G; a& E - #include <linux/init.h>1 P& V$ Y6 D1 s- e+ O
- #include <linux/errno.h>: C8 h7 r" ~. R$ D( z2 h& C8 a
- #include <linux/types.h>
" D2 M q& O' _9 O - #include <linux/interrupt.h>
# g4 U( J7 c/ |; p% l6 Z, E - #include <asm/io.h>
3 c5 }- [4 \- E% a1 h( l - #include <linux/moduleparam.h>
& f/ V2 {" R- C7 a! J0 G - #include <linux/sysctl.h>9 s0 Z9 A% L) x, I0 K! A6 x
- #include <linux/mm.h>3 |# z3 |' G- j5 Q0 R
- #include <linux/dma-mapping.h>! V% Q0 l4 s! E, U8 v
- , y5 y* w: f2 f0 {9 C
- #include <mach/memory.h>8 }9 j$ I& E% A+ L
- #include <mach/hardware.h>
) p+ P( L* H0 G - #include <mach/irqs.h>
$ g* v8 S3 g& S0 H+ y* N9 n. y - #include <asm/hardware/edma.h>$ ~( U$ j* E, h% {2 ~* F
- 3 F- q- K/ @9 z; R
- #undef EDMA3_DEBUG# w5 v+ _6 g3 }0 {0 K" U2 J( u& e h
- /*#define EDMA3_DEBUG*/- h- f; q% X* `) r; Z9 A
+ w8 b: {! p; L1 l8 y# l- #ifdef EDMA3_DEBUG
$ }5 T: ^6 N S& ~ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS) m1 F f- B' a8 w
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)0 i& t- _. v. K$ @ r5 K6 {9 O9 {
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
* A! a: Q2 P+ l; H$ |: n- I1 k - #else
! l- G6 ~1 Y) o - #define DMA_PRINTK( x... )
& F9 ^) q% x z - #define DMA_FN_IN" g8 M! K4 @, M* K3 p5 `% Q
- #define DMA_FN_OUT1 g/ C3 v L2 A
- #endif1 Y& [7 w# C- H9 R# H) t* z
- 6 H' f6 L" I2 I6 }8 Q
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
2 ]9 m+ y6 f2 j( ^$ J5 i - #define STATIC_SHIFT 3
% q1 ?! \' m5 K i* ~. A, i& R - #define TCINTEN_SHIFT 202 X$ G1 K. n6 I: y
- #define ITCINTEN_SHIFT 210 m& I! B/ g" E8 A0 k6 e
- #define TCCHEN_SHIFT 22 U8 N' f6 Y0 e; U4 |* c& @
- #define ITCCHEN_SHIFT 234 H3 ~/ a% S3 t: C
- 1 n4 [, i. v$ ?/ w/ C' L
- static volatile int irqraised1 = 0;9 U9 u( T+ v% [# {/ D
- static volatile int irqraised2 = 0;( V2 ~8 |; p# m- o/ d. W
9 {7 ^7 n/ \ s, c8 J* F8 @. ~- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& b* ]1 w3 S' i0 ]$ `& y% x - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 T2 b3 u z0 G S! r - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& V5 N( A, T2 S- }8 i - , s$ _+ M! R; R. [. i b
- dma_addr_t dmaphyssrc1 = 0;
6 W8 G6 n" a+ O N( A/ w - dma_addr_t dmaphyssrc2 = 0;0 ?- e* @% N/ {, A
- dma_addr_t dmaphysdest1 = 0;
$ ~+ h1 {+ C3 [9 f+ Z) H1 K N - dma_addr_t dmaphysdest2 = 0;
' e& R$ T/ _& u
& h; c. G. K* ?9 z4 u" t9 {- char *dmabufsrc1 = NULL;
. f7 |8 t' C1 w! E - char *dmabufsrc2 = NULL;4 S2 N* P7 d" G/ a3 z# f
- char *dmabufdest1 = NULL;8 D: \( {+ V/ I0 v# D
- char *dmabufdest2 = NULL;6 [: P. M8 E- D$ u9 p
: M1 c, { P( a6 A1 { ?" G6 B- static int acnt = 512;& i! o. O" ?, p, r9 h( H
- static int bcnt = 8;
: y( p+ J, ?# L5 u, J# L% U" @ - static int ccnt = 8;! C% Y$ g/ p! ]: Y
- ; W' ~7 _0 V3 s0 L
- module_param(acnt, int, S_IRUGO);7 V$ ^, H. [' t+ e7 h7 @( Y- B
- module_param(bcnt, int, S_IRUGO);
0 i7 b) Z! C+ I" z! v - module_param(ccnt, int, S_IRUGO);
复制代码
+ o5 d- [" M7 Y u! |! G: `6 F- H5 ?8 X
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
$ f+ ~' ^* G% o3 garm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
7 _$ B2 z+ ~2 Q 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( f9 _* _4 M, [0 q
% E- q3 r( H, g5 g
6 J C4 I6 C8 \, W' a: ~ |
|