|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 - I! J) K+ b/ {& J
- [code]EDMA sample test application
9 X! Z; B, Q/ Q+ m0 X6 F6 y3 A - /*0 b" `& t o6 i5 D; u
- * edma_test.c
1 I* t( P; b* ^5 e7 Q - *
( T5 C5 h' `$ M8 |9 V( R' @4 t - * brief EDMA3 Test Application; r' k0 C! F( K5 o+ E) `
- *$ ~" ?0 x# q- f- G3 z
- * This file contains EDMA3 Test code.
, d* U) N& K& U - *5 v( R9 Q8 W/ @$ ]0 ?
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
, P& ]( n3 x6 t9 }9 i( d" {8 Y5 Z - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
/ M, ]. X$ W3 n! l4 L - * TO CHANGE.
: P H% n" H8 {& b; s6 U - *9 p6 r, i$ g5 o' Q8 @4 E! s3 I
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
0 t% l+ M' ~6 T X1 h3 | - *
+ s- f. C, E9 W% Q - * This program is free software; you can redistribute it and/or- u5 n- W- }' g" ~- A8 G4 u
- * modify it under the terms of the GNU General Public License as
* _% p! f1 J1 k - * published by the Free Software Foundation version 2./ h6 N5 K" y8 d* O- f
- *& R$ w' [8 G* ~4 e! P! C% R
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
: Q: @& r3 {' s - * kind, whether express or implied; without even the implied warranty
4 E& Y r; o( a% G( E; z - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8 G8 q# D" T0 c; b8 L, y0 J) n - * GNU General Public License for more details.
1 W4 U$ k( J; a; Z5 ` - */
) J! ?* R3 J+ A7 c0 D. p
) b& R$ S: A5 z$ ]( D$ `7 |- #include <linux/module.h>
% R( ?, v1 c4 K% y7 M1 R1 v/ D* Y - #include <linux/init.h>. m2 \. B# R, v+ ]
- #include <linux/errno.h>
3 ?0 B- q6 _$ U - #include <linux/types.h>
9 B$ T& C- H u7 X: E1 i" ]7 ` - #include <linux/interrupt.h>* s9 Q# r1 C4 s6 g: b
- #include <asm/io.h>
* _1 p5 m4 s4 [. O. R8 B- k - #include <linux/moduleparam.h>4 M3 D3 H" \" @: T, B8 v; ]) Z3 Z
- #include <linux/sysctl.h>
" T' I; l: l) q4 h- `0 I - #include <linux/mm.h>. }1 h B2 N5 W2 J+ i
- #include <linux/dma-mapping.h>/ \) _" a" ?5 p' X) C& G
' U$ K- {4 t8 P8 H+ G& t; T& d4 x- #include <mach/memory.h>
& r8 b6 ?7 D5 {6 @$ g$ U4 h) l - #include <mach/hardware.h>" A* B S: D! b4 V7 [
- #include <mach/irqs.h>
" v2 T/ Y0 {( @ - #include <asm/hardware/edma.h>
$ W: z( _7 m2 {$ }& T$ V& B - ! h' _. ^5 K1 w3 |) Z
- #undef EDMA3_DEBUG7 m) W* h- s" |, W/ x8 p) t, m: V' G
- /*#define EDMA3_DEBUG*/
5 l7 h) P! V6 p4 w+ J - # ~, p' K7 U8 q- U
- #ifdef EDMA3_DEBUG
. b8 x) r+ [' s; l5 D- u- B; ^0 t. v - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ d% b. E2 O# e- @0 I
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)3 I. k. |( Z0 @6 h& z" ~
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)+ H8 N: z' i: O/ ]7 x4 Y7 ~
- #else+ Q# F( ?2 i3 F- F( M
- #define DMA_PRINTK( x... )
% h& g' z% ^5 y - #define DMA_FN_IN
; @ _4 H T9 Q - #define DMA_FN_OUT! b4 h6 i! }% ]3 n5 |
- #endif; e4 {; r" [6 {# S& g' A. H" d- F
4 O. J! ?5 ~4 D6 Y- #define MAX_DMA_TRANSFER_IN_BYTES (32768)5 U- ^% j3 K, P& X6 T+ q
- #define STATIC_SHIFT 3
! T7 G5 ]4 B- \$ o2 I - #define TCINTEN_SHIFT 20
3 L; j$ r" x3 |& L* R - #define ITCINTEN_SHIFT 21
2 ]' _/ j% z% s4 t - #define TCCHEN_SHIFT 22
, ]* j, ?* q; `/ G E6 A S - #define ITCCHEN_SHIFT 239 Q& ?6 V. Z/ P9 _, B+ w
2 ~! z5 q* x& u8 _ H( u: _' M- s6 k& V- static volatile int irqraised1 = 0;
5 s" E- |: [4 r( k4 K7 H7 ` - static volatile int irqraised2 = 0;, O# i* |! c1 ?8 w/ o
" w8 u. Z+ D: t- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 u9 f% c! {* o5 ~; ^* @ } - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ y* v, A% _1 [4 n% \( E - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ O$ R6 I. _1 ?" h% Z' X# z s! ~3 P) ~
4 u9 V# B* m8 D8 M9 w) {8 V- dma_addr_t dmaphyssrc1 = 0;
/ w$ G0 G# c1 O" c, _$ a; X0 |4 V - dma_addr_t dmaphyssrc2 = 0;
3 {& p+ y2 [$ E - dma_addr_t dmaphysdest1 = 0;, x. C% u7 X) I1 T8 O2 @
- dma_addr_t dmaphysdest2 = 0;* h7 ^1 t' [7 r: l
$ S: T# P; k9 h) U; t- char *dmabufsrc1 = NULL;
0 v, r" i* U6 w- t" D$ e A0 l - char *dmabufsrc2 = NULL;
' x4 B/ {8 Y& N% i - char *dmabufdest1 = NULL;' C1 D. c* I8 J, O g# Y1 E
- char *dmabufdest2 = NULL;
/ H3 R* ~8 M& Z- g8 @3 c0 n) d* p9 @) ^ - Q; [$ O* d& W! x4 h
- static int acnt = 512;4 [( J7 x2 b v4 u$ _# C& Q- m9 S5 k) Z
- static int bcnt = 8;
& c! A; u, h! \- V- a - static int ccnt = 8;
& E" K3 d1 W. _$ O% p! z5 P
, T; |) C- L, T* H) x+ L8 |- module_param(acnt, int, S_IRUGO);
4 S/ k) c* V2 l: j1 e; ?) `2 ~ - module_param(bcnt, int, S_IRUGO);$ x, m4 y V( u) {( F" m3 c( I
- module_param(ccnt, int, S_IRUGO);
复制代码
, X0 z8 Y* ^0 U6 x. K0 z
. @. w6 l/ K9 {& \ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- }& j! M4 N+ h# S9 J
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
! B$ \! `4 A" p7 r; `: m/ j 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
2 w1 m$ C, r: w6 B6 |( l3 B5 u5 k: Z2 F8 u5 b t: s) z
3 J' V% f; N& P, h |
|