|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
}9 \$ P l$ u' K% ]4 Z$ @. o! v$ L- [code]EDMA sample test application! }$ q9 H; Y" g p0 Z1 F
- /*
& { ~- N2 M8 l2 r - * edma_test.c
7 L1 m, {, H% V, \2 p7 [ - *
. O9 g2 C* P6 F - * brief EDMA3 Test Application& g7 a% m! M$ P
- *
# `; y+ H/ W' t- p- J( P" R - * This file contains EDMA3 Test code.: Q, \: C* a' z/ n/ {5 \
- *0 Z3 N& C+ p$ l" B% b: Q
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE1 j. g) b! z: W. d. Y! N
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
- t$ U4 q* U8 T: J8 w1 e8 X/ M - * TO CHANGE.0 n, r# b- J/ S. Q9 ~
- *
! d5 c5 V; E/ y* }8 r6 A* I3 x - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' T. [6 I. O7 t* l( W/ F+ G& _, W
- *" \0 M* g) J0 B) x/ l. \0 C
- * This program is free software; you can redistribute it and/or
0 z7 ^+ X' D/ G8 j - * modify it under the terms of the GNU General Public License as
5 v5 |" e! R2 ] - * published by the Free Software Foundation version 2.
+ H' f4 a$ f0 J6 ]6 l% b9 e - *5 L. F3 n/ o4 u6 `
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
- @, Q) X1 l- X( H* N) \& f - * kind, whether express or implied; without even the implied warranty
, z2 `+ f {, F1 h - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% }) x3 K% P/ W) ? - * GNU General Public License for more details.
$ c4 Y9 N8 P P: c# c - */
( z+ J+ L5 ~4 a4 P/ Y
o' r' r7 v* s5 A( z$ Q6 e! @- #include <linux/module.h>
' ^- J5 Z: q5 S) m5 N" s! Q# D Z - #include <linux/init.h>
& t6 K, E1 r, `7 o& ~ U- y) x5 L( h - #include <linux/errno.h>
0 L8 u/ [# d# ^2 L; n& E - #include <linux/types.h>
- s% E9 [3 N: j1 u+ o; C - #include <linux/interrupt.h>
0 S. @$ j. z' U0 J4 W' Y - #include <asm/io.h>
0 U1 E* N% ~7 ~: f - #include <linux/moduleparam.h>0 h3 [, z5 L( |/ @
- #include <linux/sysctl.h>* z' |/ i- |/ Q U" W
- #include <linux/mm.h>
& e1 N5 A/ u; [) |/ o7 b K - #include <linux/dma-mapping.h>% Y1 N8 U" ]) J' Y
- 6 v& o6 m# X) E2 [+ @, V# ?
- #include <mach/memory.h>7 r4 X: Y4 u. k7 `
- #include <mach/hardware.h>$ ]7 U8 {$ E4 s+ h5 c" V9 z; I- b
- #include <mach/irqs.h>
( u$ E: B, i* `1 C1 `9 \ - #include <asm/hardware/edma.h>
3 h9 b; ^9 s8 z$ ~* s+ F% d
7 O2 K) A) f' F$ o- e: O# C2 g- #undef EDMA3_DEBUG6 R, h0 {: ? s2 D9 A8 k7 e
- /*#define EDMA3_DEBUG*/
( d# ] @2 w7 A& Q7 g - : J5 r! H5 V. ?: Y' G7 @
- #ifdef EDMA3_DEBUG6 R d4 I% ? n7 r: |6 T; h, k' i
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)% M: E( i" }' c* x7 e
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__). t2 H& _4 n6 F
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)6 B, X7 A$ x% e2 F' H: w; J
- #else
' V j7 G# w3 D! v - #define DMA_PRINTK( x... )( T( ` U I2 ? `+ p
- #define DMA_FN_IN1 _- n$ S; Z2 {
- #define DMA_FN_OUT$ z& p6 V5 o+ U* d/ u% g2 Q
- #endif, e( J7 i6 a6 g
- * {* q5 \9 [. Z7 W
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
. U9 j8 R# k Z. G: r: r# O - #define STATIC_SHIFT 3% B/ Z9 h* D1 z1 e- R
- #define TCINTEN_SHIFT 20
1 z7 F5 d( j2 Q0 g7 ]" ? - #define ITCINTEN_SHIFT 21) E+ s) u8 C8 R% J8 I H
- #define TCCHEN_SHIFT 22
0 h* `& o: g; g1 R% v. x+ b; V - #define ITCCHEN_SHIFT 23
4 p$ x: ], G/ T# R# I5 u1 y - 9 M. c; D8 J3 J P/ Y7 w; b6 M
- static volatile int irqraised1 = 0;
* |$ F( D$ U4 ^0 `9 i - static volatile int irqraised2 = 0;
- ^ L3 A1 k' [" H
' I6 C Y! o8 b8 A8 p- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, j5 I% ^$ x: D9 R! s4 T
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' J9 ?' D; }" Y' L6 y3 w) m - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);$ T w/ x- m) |% b, L. v/ ]/ x
- T% T7 F3 B% }9 y+ V- dma_addr_t dmaphyssrc1 = 0;6 n) R) q- P' A1 [) l# T
- dma_addr_t dmaphyssrc2 = 0;9 W* ]: s% ]) C5 h5 X7 B4 k
- dma_addr_t dmaphysdest1 = 0;
3 F) z5 u: \* K8 E4 K - dma_addr_t dmaphysdest2 = 0;2 |/ T* u1 n% Q
% I6 ]9 ^( D( M- char *dmabufsrc1 = NULL;
/ P* l. |: G' ]5 N5 i, N" f, u9 n X' | - char *dmabufsrc2 = NULL;3 ~) Q2 z8 [; E: O C
- char *dmabufdest1 = NULL;
8 C6 |( Q2 \6 `! D0 d - char *dmabufdest2 = NULL;
) p+ F0 d% I1 h5 y5 Z( _* k$ Y4 `! P
; O$ O( ], m) G" E# O8 D+ L- s- static int acnt = 512;
: i# ^+ b1 w, d$ `" {- J) b- Q" e - static int bcnt = 8;
a* ?8 `6 t* W2 }! P - static int ccnt = 8;
- D# t7 M. n8 [$ S% X1 s0 y8 i/ R
9 N W* N9 |5 F" T% d) G$ |. E- module_param(acnt, int, S_IRUGO);
$ V# G9 t& \+ K6 U2 s' ^ - module_param(bcnt, int, S_IRUGO);
4 k. `. f P2 T4 c8 u - module_param(ccnt, int, S_IRUGO);
复制代码 4 x) h$ y6 N- W, V+ `
9 C9 m. N d S' E* Q4 C 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
. V, r3 G2 X1 i" m6 O8 Tarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
. ]# A/ t t3 t1 k* u; _ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( F! `3 s4 I: n0 R& e7 O: J
M: @1 o+ H {& \9 Y8 G0 j6 ?6 J, [* K
|
|