|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 ~% m1 U% ^$ Y6 k6 S$ i5 E, d- [code]EDMA sample test application
- L, ]# N o, v% j$ f# ~/ b# h0 ? i* x - /*
+ w6 y/ y8 Z, i8 a! }; a& I - * edma_test.c
* k7 b8 E. T- u2 o# s- c3 r - *
i3 f9 D/ I4 G) P* o - * brief EDMA3 Test Application6 s) H3 P6 g Y/ Y) C& W" R
- *
. Z$ n7 b0 \- V6 J0 e9 \0 k. D - * This file contains EDMA3 Test code.( Y/ {# [6 T1 ^1 @- ~& P( g' v& {) K
- *% O" [3 }8 M5 ]( E; V
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE8 P0 G: ~6 p" T0 `4 p) W: l. {
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
4 w) |0 J( l5 C& ^ - * TO CHANGE.
; ]; J# I& @7 d( d+ t4 G& z# g! } - *
; `! z ~& q+ N2 g1 g, Q8 ?. ?4 t5 h - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/: R* S$ h/ S/ h6 ^6 r$ i S
- *; B2 O! p3 v& `( e
- * This program is free software; you can redistribute it and/or' [4 v( b3 c4 D$ F3 G2 _
- * modify it under the terms of the GNU General Public License as% W2 Q- z& n& P
- * published by the Free Software Foundation version 2.2 e! @, x t: r
- *
/ J: u% a2 N& R: ~ - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
7 n9 W+ `8 J& m; @ - * kind, whether express or implied; without even the implied warranty5 _8 A! T0 k# F
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ c# a+ ?! S. n" c6 E& E# W% ]; x - * GNU General Public License for more details.
! d5 {2 |! N3 y) N0 R& Q - */$ v+ F" M$ g v% r( P2 z! ~ c
- " W4 x8 C1 C8 S; j& {9 H
- #include <linux/module.h>1 f' z9 g$ |4 W n' O$ f" T
- #include <linux/init.h>
( O/ F2 ?/ x# l& m7 J3 j - #include <linux/errno.h>
% @* S! _, V, U- O8 g& U; k+ T - #include <linux/types.h>
' e" C, `% H7 o4 C - #include <linux/interrupt.h>
* D. \! A- f' N3 |# N& B2 W0 D( G - #include <asm/io.h># ]% x. k# R- b1 `; v, Y7 s2 a
- #include <linux/moduleparam.h>0 Z! x$ l! [) E _
- #include <linux/sysctl.h>
- I( D7 ?) S2 B* {' A; b+ h - #include <linux/mm.h>
: O" l# z9 c, S2 S% S0 ]) A - #include <linux/dma-mapping.h>
: ?6 E! _8 U, l
( J6 m ^; \) F: J; y# Z- #include <mach/memory.h>
0 L; K% H: g9 r8 _- o+ ^1 S - #include <mach/hardware.h>2 Q' ]/ q# C \; N& M2 L4 d
- #include <mach/irqs.h>: C k0 i8 @1 `6 H& t2 M" @
- #include <asm/hardware/edma.h>
% r3 S; `/ [, e$ g5 y" }! b - # y; ~. G' U H. ^! w1 Z4 `
- #undef EDMA3_DEBUG% I& {! {! {+ H3 [$ ~# M2 N
- /*#define EDMA3_DEBUG*/' V+ I* O% V8 M* n& C9 H5 K
0 s/ A! B9 m4 a9 Z- #ifdef EDMA3_DEBUG# F; x* R$ }9 _* t
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)) y" q0 J3 A+ L# w+ [7 L
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)) F1 O, b+ w1 ~& @
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( h3 Y: `4 A1 X" n- S# c* N7 ?3 @. X5 ?1 N
- #else# u! T1 P/ z, G8 A( m
- #define DMA_PRINTK( x... )
2 [* i) K" s4 [& n# C/ C& i - #define DMA_FN_IN2 ?, I8 Z+ k! e% u
- #define DMA_FN_OUT; @( r1 k+ P$ X) f
- #endif4 m. w! `3 N8 X. ]( J' j; C% ?) t1 a
* o u' W) H6 ?* l0 t$ F! @4 o. k F- #define MAX_DMA_TRANSFER_IN_BYTES (32768)* s1 V- W: I/ w; `- s! ]# M/ @
- #define STATIC_SHIFT 3# F6 j* l7 N/ b- I5 j- n
- #define TCINTEN_SHIFT 20
6 t+ \' A- V# U - #define ITCINTEN_SHIFT 21
5 J% E' i( l* n. M! p9 P; Q+ r - #define TCCHEN_SHIFT 22
. a# P$ _0 c" y; R- ~ - #define ITCCHEN_SHIFT 23$ @; r {0 F* ?, Y e- Y
% |4 E+ T- d, e% i# U" G- static volatile int irqraised1 = 0;2 n' \" p$ N9 d8 k: Q
- static volatile int irqraised2 = 0;
* I4 r6 v. U8 m0 q, l8 A
* R n1 ^& A) n" v$ I+ A4 U- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 J6 H# ~) M) b6 V2 r) t5 r
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 H) s2 W% ?4 o8 m6 F; D3 K - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);/ {- L- {* Q% ~+ O' L
- 0 k r1 Q# v7 T2 B* p1 a8 w
- dma_addr_t dmaphyssrc1 = 0;
. g4 G9 g1 W2 j3 |4 t. e; G - dma_addr_t dmaphyssrc2 = 0;3 a* N" x1 y: _( j4 _, q
- dma_addr_t dmaphysdest1 = 0;3 f+ o4 o' D& }, v! n
- dma_addr_t dmaphysdest2 = 0;
2 ^) r5 e: C/ V S
6 Z( k* t2 ]& S) o- char *dmabufsrc1 = NULL;
6 O" C! q. }- \ T8 S - char *dmabufsrc2 = NULL;6 r C( |2 r% t b+ j2 r1 z/ J. n
- char *dmabufdest1 = NULL;
" W' z, o2 Y% m8 T7 p - char *dmabufdest2 = NULL;4 O; Z! L- }; J6 k1 X; m- d
- 6 b' k0 ^* d$ u9 b; Y2 v" `+ h
- static int acnt = 512;5 Y: N0 k* W) s
- static int bcnt = 8; R, B9 V2 J( {. h6 A# j5 q: X
- static int ccnt = 8;3 }7 ~ ]9 X; |; ~3 h# E0 g
# g1 w0 ~5 ?4 m8 N# R) r- module_param(acnt, int, S_IRUGO);
3 q% i8 L, ?5 f- z$ ~2 ~8 [& y - module_param(bcnt, int, S_IRUGO);+ ^3 I3 Y. u- P4 m
- module_param(ccnt, int, S_IRUGO);
复制代码
N+ x' l+ ~" s- j8 m
8 g5 M0 n% Z8 g1 m# F8 ^ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
7 x9 X" T- o3 m2 U$ }6 f$ \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 Q5 Y' m9 z; i 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
- o8 p) a1 W2 v' {* I3 ~6 T7 ]- o7 }6 V
+ G; s$ i- N: s/ o+ N2 b9 O7 G |
|