|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
) P+ u# {7 r- p4 X6 L) j- [code]EDMA sample test application
4 f$ r9 Z4 i/ y4 j8 e. O) C - /*
* i7 V; ~: \' s+ T. w0 X- t5 N - * edma_test.c+ g, }5 M* U) m, T* y
- *
( V: p" _0 N) t6 q- t - * brief EDMA3 Test Application
+ u# e5 ^7 n- [4 r$ |; p1 l5 J - *
7 J8 o" T2 \% v# m: d& R - * This file contains EDMA3 Test code./ [% w1 h- Q/ i! x- K
- *
! L& }- q" _% Z* R: o - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE# {2 L8 ]# Q @" X
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
0 j; i+ z8 h$ \& h' E7 c4 V - * TO CHANGE.
! H; C( x( ]* A% M# ]/ d - * } q) w* ?- n7 r$ s' g! f3 y
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/; Q7 r/ [( [; Y, `5 z- y2 U
- *5 _/ N; g% L% X
- * This program is free software; you can redistribute it and/or
% ^( Z/ Q- l$ B& L' t - * modify it under the terms of the GNU General Public License as
! Y9 H9 I# d9 L6 p* j: { - * published by the Free Software Foundation version 2.
+ e4 V0 L S1 y+ t: o - *2 ?; c/ i( ]7 _3 S U6 Z' [' ?
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, }9 O$ l" m/ V# s' N - * kind, whether express or implied; without even the implied warranty
: \( m' C m9 e8 Q - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6 H" e7 e% \' `1 y - * GNU General Public License for more details.
7 B O$ O' m8 E/ a) i- d6 }4 V - */
* ^# n" U% K* m0 Y6 j( e
% l- u0 u1 X/ G- #include <linux/module.h>
4 j" [; u" ~* l ~8 T/ V. _7 C - #include <linux/init.h>4 t# j1 }/ g J8 A5 @2 Y8 T
- #include <linux/errno.h>
9 {1 f' Z$ k ~ e - #include <linux/types.h>
6 _* U2 t, ]6 d( c$ \ - #include <linux/interrupt.h>1 G z" o0 c8 \' |* p
- #include <asm/io.h>. \1 N* u* x: {8 ^, x( A3 _" o
- #include <linux/moduleparam.h>
: W" R0 ]4 \; [! D& q - #include <linux/sysctl.h>1 ]5 U" o; J, Z/ k: X6 u
- #include <linux/mm.h> y# l& ^$ a3 E0 I- Q
- #include <linux/dma-mapping.h> R% o# C7 t) T4 [
- 8 {) K+ I8 K/ Y, w! L/ j1 X
- #include <mach/memory.h>% |4 W0 [6 Q: ?
- #include <mach/hardware.h>
; Y/ }5 b m# p8 t0 o' R7 ]- g - #include <mach/irqs.h>$ T V! a; P2 h6 k+ I
- #include <asm/hardware/edma.h>
- V. Q% \: Z& n - * U1 c$ `: _- C) W$ t
- #undef EDMA3_DEBUG
: _5 |( d5 K5 u9 k/ D9 C - /*#define EDMA3_DEBUG*/
. a! K9 e" Y. H6 @: n9 C- v0 w8 ` - 6 t6 X3 E) l" R. z% R# |, a5 T* U
- #ifdef EDMA3_DEBUG5 }- }8 l: r1 M. j% S! G
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)! d. ?) f! v$ `) V) D$ [$ H
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)1 v8 q! D, s* e9 g# Y3 F: T( Y2 t4 d
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
, @9 P6 I4 T, D" \ - #else1 d, S' M# @* a) v+ \' i- z2 M. Y
- #define DMA_PRINTK( x... )
% R; I t6 b+ c0 P - #define DMA_FN_IN
- J% y4 l$ w& Y6 i - #define DMA_FN_OUT
* W* v. @% Y5 b2 } - #endif; H# }2 z5 R( Q0 o
# H, E- g# S4 [, f5 B- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
! v2 `9 ?1 c4 l8 D; G/ u! Z - #define STATIC_SHIFT 3
1 s N& W( ?8 o4 f$ b+ a5 B - #define TCINTEN_SHIFT 20
) W- p0 `: N% G! ? - #define ITCINTEN_SHIFT 21% E7 h3 d# M1 _+ `
- #define TCCHEN_SHIFT 22' Y6 E3 l, b' U1 B# ]
- #define ITCCHEN_SHIFT 233 e9 ? \. H, {; c
( k# w$ T# l* n% Y6 ^# x- static volatile int irqraised1 = 0;/ @; ^3 @: `! Z# v+ n" b; s8 }
- static volatile int irqraised2 = 0;) q- K8 E: \ R
- 7 D7 L) J* q6 z$ n, W5 \
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 U8 X+ ^' P g, j/ H! d3 U# R7 O
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
]' X5 j6 t6 E/ [ _6 V' ^ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);- R) T9 J( @, a: C3 ?. z& N5 y
- $ g3 M, @9 G1 W0 I" W3 e
- dma_addr_t dmaphyssrc1 = 0;5 _. {- c. a9 s2 f
- dma_addr_t dmaphyssrc2 = 0;
_& d6 |8 e/ t2 U* z1 k c - dma_addr_t dmaphysdest1 = 0;; p# r9 Y5 ]: L: Y. }" Q( [: F
- dma_addr_t dmaphysdest2 = 0;7 n5 O# V! U( D
- 8 x8 Z4 S) W9 R% x2 O" C: `( H
- char *dmabufsrc1 = NULL;
& @0 ~! S1 i3 ~( m' _- c; l% v* M+ L( } - char *dmabufsrc2 = NULL;2 W( ]) w' j [( z
- char *dmabufdest1 = NULL;
7 p; n Y# C$ ?6 P - char *dmabufdest2 = NULL;7 o2 ^& O, K2 y0 r2 G
- ( ^. k, `0 S0 r( P/ ~7 A7 z
- static int acnt = 512;
. A0 d" V) r$ V- I6 p1 H& d, Z6 i - static int bcnt = 8;
7 F$ _3 M) o2 _4 l/ ] - static int ccnt = 8;1 J1 u) x) O% D6 P' {! p5 P7 T
- 2 L# p) A& R" N; X* _! Y
- module_param(acnt, int, S_IRUGO);
! E: `+ |2 T8 {9 L - module_param(bcnt, int, S_IRUGO);$ P' j& u8 G+ i( v" L
- module_param(ccnt, int, S_IRUGO);
复制代码
' i8 d/ ?6 Z+ x, [: G# a! R7 c S. g1 Z ~$ t5 U
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- Y' a4 `5 H% U9 t
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 ?" I8 Y* k! T h7 ]4 u4 O a" m! _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( D: n+ L' Y @/ g1 \& U+ Q4 S/ \1 H! g6 e9 D3 c9 p$ N5 e% X. S
/ V8 I+ C0 ~8 I |
|