|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
) k8 O/ k( B1 E. e- d- [code]EDMA sample test application
k; \$ `$ D4 d2 I4 o1 { - /** G2 M$ A1 g& ~
- * edma_test.c
Q" ^! m1 [* V0 N - *, B1 l& ?/ G+ B- v" F9 o
- * brief EDMA3 Test Application
& q& k s! i3 s/ f - *
$ h' J: [8 Z0 S - * This file contains EDMA3 Test code.
( E2 C- j- F2 ~5 I7 k - *8 g! ]% R5 [& }; e
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
0 U2 r3 h) a* z) X c @* \7 a - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT6 ]2 Q2 `. `7 ]' @" j4 H
- * TO CHANGE.) P% l) l! D$ Z& @ E% }
- *2 z) G: J! l" h7 _% l& P( x
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/( u4 B, w6 Y" v1 Z
- *6 R$ b3 m# {" s: B1 c" d6 B0 |
- * This program is free software; you can redistribute it and/or
. m8 r' c. h5 J N$ q6 w- b - * modify it under the terms of the GNU General Public License as" N1 j' e- v9 Z* M$ o3 Z
- * published by the Free Software Foundation version 2.
C+ H# t! M, H/ O - *5 _: N p4 E6 U
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
! B2 F7 M$ X; p" M - * kind, whether express or implied; without even the implied warranty
$ i# j# r, f( n( f - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the& S3 [, H5 h @ ^, @5 o+ P+ O
- * GNU General Public License for more details. z- k' k: O) V4 i' f8 r; d9 B
- */
! ^! @, x& p2 |" o8 s2 @ ? - : Z& E8 ]& m' ~* B- b) C
- #include <linux/module.h>& J, K8 p3 }: a0 e/ q$ Z* |) e
- #include <linux/init.h>+ _1 R7 ]: R$ G, A- E
- #include <linux/errno.h>) Y% D6 |+ g6 _6 L
- #include <linux/types.h>
) q ?* w" O% [% y9 B$ M) ` - #include <linux/interrupt.h>
' m/ b1 f# d8 k+ F - #include <asm/io.h>4 _; b- S$ a w9 W+ A2 ]
- #include <linux/moduleparam.h>
- F7 G1 u: L3 E b8 {# H. H# g7 c v8 } - #include <linux/sysctl.h>% O) ~- Z- @$ ~; C& V
- #include <linux/mm.h>$ Z5 `' G J# N0 m. ^& z/ g( p& [1 v
- #include <linux/dma-mapping.h>
% s: |$ N" y! j
: F% i& N3 M0 K5 Q, |- #include <mach/memory.h>
* U7 \! X9 f- z) q# L - #include <mach/hardware.h>
2 z7 t. S. f t n5 G - #include <mach/irqs.h>/ ~/ `8 r* P: p& N* i5 t
- #include <asm/hardware/edma.h>9 A7 P4 q4 X4 G# J% e3 t' O# f, H
0 W+ V! i& Y% K- #undef EDMA3_DEBUG. B* M. j: [& S1 ?; ~& B0 f& Q! N
- /*#define EDMA3_DEBUG*/3 Z- }. B8 l; i
$ E% i. \2 V v! ]; k8 X0 h- #ifdef EDMA3_DEBUG
/ w7 w p) c1 v3 N! I1 E - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
( J, a5 X' H* d6 h/ F) s - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
+ L) ~& Z- Z. ? - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)2 I% E6 G. Z; E# O% f2 o. a8 ]
- #else
2 S4 E( k3 d9 D- Z2 ?5 F3 M q' [ - #define DMA_PRINTK( x... )$ s8 u; b' h" x1 N" B
- #define DMA_FN_IN- K& F0 v! t% {' C( k: U) d
- #define DMA_FN_OUT
( x( ^, ^+ b- v2 V - #endif
" R4 q i# n3 {. o
a' }: Z! k6 ~& a* ^4 `, M, R- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
: L: x2 K! F) e0 M7 d - #define STATIC_SHIFT 3
( P& E5 s1 j6 g% y) t8 y - #define TCINTEN_SHIFT 20
' T, D ~; t( D3 s+ V3 u) t - #define ITCINTEN_SHIFT 21
8 n1 p/ Q# N+ z/ G3 d - #define TCCHEN_SHIFT 22
- j) A' H+ u/ @% l - #define ITCCHEN_SHIFT 23
& a9 g9 H" K" \0 e) |6 F+ J+ F$ L - 8 J* O$ L$ c) o5 s) z* d$ Q3 x4 |
- static volatile int irqraised1 = 0;% ?" _4 q" y. i; J; I
- static volatile int irqraised2 = 0;
' ^6 w2 b0 O% d0 b( ~+ [) Y - * b" a" p" m0 M. u
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! `* U1 c. F: ]. N- I) p4 B8 F8 |/ T, F
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; _) b0 N5 y3 V, A
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 `; U* |6 @$ B; F
- % t2 t, ], e2 B E' ^
- dma_addr_t dmaphyssrc1 = 0;( s3 b1 y) ]0 W/ w4 {
- dma_addr_t dmaphyssrc2 = 0;: Y: C# K: X. `! A
- dma_addr_t dmaphysdest1 = 0;% w5 \9 h( s/ @0 ~- d' _/ A
- dma_addr_t dmaphysdest2 = 0;* n$ _2 w2 h% p0 D+ w
- ; ~' S/ N" U$ t8 e6 c# Y6 O
- char *dmabufsrc1 = NULL;
2 I' U0 ~4 B' Z9 Y$ S - char *dmabufsrc2 = NULL;
: v) {2 B: S) p3 e% C+ M0 ? - char *dmabufdest1 = NULL;; P+ `; _* O4 n
- char *dmabufdest2 = NULL;
+ q* e, e7 `# S% ~7 |9 j
2 V3 W$ P8 A* V) Q7 Y: O* {- static int acnt = 512;3 D) m% c0 Z$ R& m, a4 f9 f; F
- static int bcnt = 8;
- Y3 k# m: h0 C - static int ccnt = 8;
8 ~( [: b7 C' X& T8 [6 i
" d, \9 S$ t& L* k- module_param(acnt, int, S_IRUGO);+ W6 D: f. |' J; [, q
- module_param(bcnt, int, S_IRUGO);
' b" R( P6 Q& h$ d1 v) U - module_param(ccnt, int, S_IRUGO);
复制代码 " |* {$ o7 B5 W0 B8 [
5 W7 Y9 n! v4 \. v5 }% U; L9 s
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
+ {( n7 X0 g: E! i1 Darm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
; S4 ?# @' Y2 Y9 Z- {8 z5 k# Y: \ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
. \ e' l+ v k+ O4 S) ^6 h3 n( ]2 ?- _8 [/ i$ z
D5 r/ M" y9 G+ I: C1 @9 ^* e |
|