|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
U( z- `: Q1 y% k3 @& K- [code]EDMA sample test application
9 j$ N" o) L- I# p( b3 Z - /*
" w# q- p$ O+ U0 D( M - * edma_test.c$ o0 J# U5 ~: @9 g9 g
- *
1 O& Y( I7 @9 {& A/ [' T2 {; Q - * brief EDMA3 Test Application! b; ?& T2 A _$ b0 l* O1 W0 h
- *1 c1 ^; v, z0 ?! p& ~" n! B% y
- * This file contains EDMA3 Test code.
5 }& \5 \+ {$ u - *
( a: R8 P. \* ? - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* h7 w5 r2 K: i - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT# Q. ?9 {# f# [, }
- * TO CHANGE.
4 o0 T/ @2 P- u( l) B9 T1 w - *7 d1 @. \6 R! I( f3 V2 F8 M4 ]& O
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4 D- Y7 V# ?0 c! r - *
, _0 y( X' e2 }1 ?7 l. i - * This program is free software; you can redistribute it and/or
+ _& w/ P: e2 N" m - * modify it under the terms of the GNU General Public License as
# R+ R V+ |0 B% n& ?7 V3 k - * published by the Free Software Foundation version 2.3 P/ M: P+ S+ y5 a9 I
- *
9 ^% G: @6 J/ B6 B - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# Q0 i6 G( {4 [- c; n - * kind, whether express or implied; without even the implied warranty4 q3 g, K, u- h6 ^1 d; y& a5 m
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the! A5 I% F' g- X$ U: Z8 T C
- * GNU General Public License for more details.
& e# |$ J. a. l; L- h - */
# B7 q* d+ f$ [9 f" v9 S; ~ - + Q) a. W2 r/ g& e. L, N& x
- #include <linux/module.h>
3 V4 ~! w B, ]/ \ - #include <linux/init.h>
R8 j- g y- J# x) `. ~ - #include <linux/errno.h>* k U% u, ?) j: K+ E0 R
- #include <linux/types.h>0 T- R% p7 F G* N9 j5 K
- #include <linux/interrupt.h>5 O" s' {: N$ x5 M! _+ C
- #include <asm/io.h>7 s! H2 j1 B% \1 T: Q
- #include <linux/moduleparam.h>
, Y1 Y" W: n) m$ V- X: ^) h# x - #include <linux/sysctl.h>
. d; C: i, J' y; S: D- Y - #include <linux/mm.h>3 a. q$ Y* [5 V1 ], ^4 j; X
- #include <linux/dma-mapping.h>, O* M9 C! b0 |; [ d" Q
- * P: o5 v2 F9 ^7 o# W
- #include <mach/memory.h> b% Q3 k' t* X5 E
- #include <mach/hardware.h>! P; G: s7 f% U1 m4 O0 }
- #include <mach/irqs.h># j3 O) q; |& n; _% l J- I
- #include <asm/hardware/edma.h>
! Y* t" F( q) K0 ?0 f' U - % ]) X0 Z. g9 V. _( I) T
- #undef EDMA3_DEBUG. E; ~ P. \1 M r3 d) n! i9 H1 e
- /*#define EDMA3_DEBUG*/! V6 V* u1 V& K5 p2 B, z$ k
- S0 s4 d& ^; M
- #ifdef EDMA3_DEBUG
" ~% R( G& k# I5 E' @3 s: K - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
5 y7 |1 _- E3 Y: b5 D6 r( s4 n" v8 R4 G - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)/ H' G+ [0 b( K1 h4 |
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
0 _5 v* W9 Z" s& r1 U - #else# Q! ]. d2 u0 ]; z
- #define DMA_PRINTK( x... )
# L7 r0 s' W0 @0 ~' m - #define DMA_FN_IN2 b( H. D5 `, ^
- #define DMA_FN_OUT4 ~) s7 z2 {8 T; m+ g
- #endif
" S5 {* }; m6 p% [ g5 q# _! F9 i - # V/ B( T `0 a$ G- i
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)' O. W e# Z% b9 x/ S
- #define STATIC_SHIFT 39 S; ^: W4 B; v' a- [7 ^
- #define TCINTEN_SHIFT 201 n k6 y1 }+ l) C
- #define ITCINTEN_SHIFT 21
- v3 w; ^. G( c, U. n, _& s; s - #define TCCHEN_SHIFT 223 c- ~% a; k6 p* J# O
- #define ITCCHEN_SHIFT 239 c0 Q( ]/ v6 O) {
+ l) {( c1 h! k! b2 Z- static volatile int irqraised1 = 0;
l1 F0 e* T9 v3 i+ Q - static volatile int irqraised2 = 0;
" F/ J+ O2 I; [. i Y9 Y% Q - ; ]5 y# [! i6 x4 E$ L. r
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 P) i7 |: ?2 @0 A, r% Y. }
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 x1 S2 q* X! m4 L
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 N( P9 l. X" B. h/ q - $ o Q Q3 c3 y
- dma_addr_t dmaphyssrc1 = 0;/ z+ z0 v, P& q7 P
- dma_addr_t dmaphyssrc2 = 0;% ]- Z& H# l8 L) y! O! \ t
- dma_addr_t dmaphysdest1 = 0;
% H7 _4 f; t' `5 @1 J - dma_addr_t dmaphysdest2 = 0;
# r6 n! i% u& f
/ `5 N" P+ _4 S$ E7 ^; @" ?! C- char *dmabufsrc1 = NULL;$ B5 ]: r1 b; Y
- char *dmabufsrc2 = NULL;. F! m% I0 m% p9 F j3 j$ l* X
- char *dmabufdest1 = NULL;
6 A( L) @9 f# S8 N8 L - char *dmabufdest2 = NULL;
( O7 f2 i! L" ^' I3 n - ' Z* ?5 Q9 ]2 ]* r: `% D
- static int acnt = 512;: i6 J# i0 d7 D. P
- static int bcnt = 8;
1 B4 }, J$ i+ \( G7 T - static int ccnt = 8;
1 ^8 o ]- e- Q E3 ]; C0 N
& @. \6 d, M9 ?) ^) g- module_param(acnt, int, S_IRUGO);; N; l" V8 Q) B5 T6 q% O, T' m. f
- module_param(bcnt, int, S_IRUGO);* o/ P2 ]" S5 V
- module_param(ccnt, int, S_IRUGO);
复制代码
! F0 O7 t3 W9 ]
4 x( S% T# d0 q" n- ^, z 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! a+ q1 ~7 H, ~( f; L, J) j$ uarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ m! A- o% X9 J4 f$ `/ j/ u
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。- r2 O2 H2 _. @, Z3 P" B
7 Y/ ]$ R6 J' R! j0 W+ Y8 W- c
1 r* ?$ v* C$ r |
|