|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 # n- T6 o4 P) G) }
- [code]EDMA sample test application' l0 |; [# j) T# h
- /*4 [5 e( Y- B) E4 n; i7 K' b
- * edma_test.c$ V' e' R( j) R. c$ X, a
- *$ T& F% W5 W% s$ l, ]- {
- * brief EDMA3 Test Application$ {% e) w! N; c3 w
- *
& u" w1 \" N9 H( }: R - * This file contains EDMA3 Test code.
5 L) V0 g* }/ m' a9 K; } - *
4 x% N# r7 Y" F - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
' E- f% I9 j$ y" M! y1 j. [) B - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* E9 W" K. l( ^8 }5 r, L - * TO CHANGE.
: R& O) _; N- m4 f - *
9 [' |# |( C! |+ N3 D - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
- U* g7 a+ o' F# C& j1 X/ u) m% X" C% G - *) F+ R) O$ C) c& M) v
- * This program is free software; you can redistribute it and/or
7 @. q7 ?2 o+ e) ^4 z5 x% f - * modify it under the terms of the GNU General Public License as
" G8 \( f. I9 ^ - * published by the Free Software Foundation version 2.
% ~# r% d6 |+ K- T5 a - *
' W4 f5 |. q1 q5 T - * This program is distributed "as is" WITHOUT ANY WARRANTY of any d6 d. O! G% H4 G- ]. _+ N2 e
- * kind, whether express or implied; without even the implied warranty) O4 P( J: x. y5 g1 z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% L, f; `" F& C4 C9 p. [/ t - * GNU General Public License for more details.9 E, ~2 a7 [, W* m0 u
- */- J, w) C1 N1 t
- 9 m' r8 w" V7 a8 a! p7 q; ^# m1 M
- #include <linux/module.h>1 U' q$ |3 w% ~; b9 e; j4 B) M
- #include <linux/init.h>
& M1 E2 l; |5 k# k - #include <linux/errno.h>2 B( c) @ A6 E
- #include <linux/types.h>
3 j( b$ l* Y& ~4 ^% @ - #include <linux/interrupt.h>" n8 p" r+ d# O7 p4 m8 W; _# l# ?4 z( u
- #include <asm/io.h>
% E; i3 |* c* K - #include <linux/moduleparam.h>
' W$ p+ d0 a$ c3 S9 A* K2 I - #include <linux/sysctl.h>
# Y; t6 r3 ?3 J3 n3 a - #include <linux/mm.h>) \+ _. ^9 x! l/ V& H
- #include <linux/dma-mapping.h>% {4 x) O3 S0 p" \0 Q. u
- 5 a/ D8 F$ b% D+ c* u0 m
- #include <mach/memory.h>7 d" r* X- a5 d* |( }
- #include <mach/hardware.h>
1 S7 t7 n6 x \, D$ x$ Y - #include <mach/irqs.h>! m" \& n- R1 t. T N
- #include <asm/hardware/edma.h>
* x% I% U" C% \# k5 J% F+ @
/ {( y$ @0 s1 M7 u# a- #undef EDMA3_DEBUG
8 L2 ]7 y5 j, A' W1 n - /*#define EDMA3_DEBUG*/
* \: B, S, h$ X+ [2 g - 6 j% c, M+ B3 y
- #ifdef EDMA3_DEBUG, j; z+ x( a, u( y* H, x" Z1 F
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)3 `) ]- K, K) P) F3 W" v5 U
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, z0 @7 J! l7 S! t7 V/ ?8 ~ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% [# n' S; q$ ?7 H
- #else% w& X* D: a1 C) T, @% b
- #define DMA_PRINTK( x... )4 Q( i3 T6 f) h% R
- #define DMA_FN_IN% ~ [+ B' K! x0 D. X: O: y! |
- #define DMA_FN_OUT
, u. ] j: `) N: a; t - #endif
+ H- O- A, v# z" V - 6 Z* i' D6 ]* U7 k9 C1 y& K+ c
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
$ |9 r. J+ _; Z, {' c* ]) y& D0 _ - #define STATIC_SHIFT 3# T' B$ w. X+ I+ o
- #define TCINTEN_SHIFT 20
9 ~% d6 M k* k3 @7 a. D) j - #define ITCINTEN_SHIFT 21
' o' f' [& ?3 t/ v- [ c - #define TCCHEN_SHIFT 22
4 y( J* o! r( |* Z7 D* O0 \8 d - #define ITCCHEN_SHIFT 23
& F$ y# u2 T1 t9 I - $ B) o! }9 R( g# v/ v7 O
- static volatile int irqraised1 = 0; I/ q3 w( I9 ~6 Q! h8 {
- static volatile int irqraised2 = 0;
; Q( H) S s" i+ Y- R( X' n0 B% r - ) N. V7 c5 ~# J3 U/ T8 U
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! J6 O+ j# W0 A% c* n/ C+ F* O" K
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
) [! E0 D7 b1 T/ f1 n+ ~) ]7 z6 o - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
: `3 U- c- r/ R/ R - , |+ y8 ^% M" J( g$ f* [
- dma_addr_t dmaphyssrc1 = 0;8 W2 w6 \1 b4 u u4 F
- dma_addr_t dmaphyssrc2 = 0;
9 G, L* ~( c" z) g' {& r# g, x - dma_addr_t dmaphysdest1 = 0;
) z' t4 i) ?# S+ N8 o& \' ` - dma_addr_t dmaphysdest2 = 0;
, O/ N' \5 Y) r3 \% ? - 3 N( r9 Z! ?, [
- char *dmabufsrc1 = NULL;
+ `5 @' E5 v5 e+ b# P2 J1 i - char *dmabufsrc2 = NULL;
3 c% S M( k: e; F* Y - char *dmabufdest1 = NULL;" R: `1 L9 y$ z
- char *dmabufdest2 = NULL;
5 }# G/ D9 k+ n6 r7 Q7 V - 6 q4 S2 Y2 V& U, r' {& o
- static int acnt = 512;2 {& ?) y9 h1 U7 J' l2 R, t; p
- static int bcnt = 8;
, e) |; H. \* p& @4 Z8 T: r5 a - static int ccnt = 8;
+ p) Q( h" i: J
" O! D+ s5 y- ?! T# l$ T% ~- module_param(acnt, int, S_IRUGO);: Y/ C, H L- c/ _
- module_param(bcnt, int, S_IRUGO); E3 e7 C8 c$ T* x
- module_param(ccnt, int, S_IRUGO);
复制代码 c" Q0 J( B5 }5 P4 k0 j4 R
2 h( t8 z7 F1 g! S) W 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用4 G! g2 P1 X: M, z# m5 h
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 J. j3 ?6 C5 [$ Z$ E 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。' }" z! G6 R* m) U* b L
# X) M) i" D# G1 [9 M
; ~) }1 G- Y) D6 o5 K
|
|