|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 1 X. U; X1 z) I# E9 O: O
- [code]EDMA sample test application
: z3 T; C J5 M; I1 O - /*
& e7 U8 W7 _! n, T9 V - * edma_test.c5 z+ I4 P. Q6 P3 ~9 q2 C
- *8 o! |0 \& m9 q& \: y4 G. C6 J) } E
- * brief EDMA3 Test Application
% M5 H# n/ C" j. n4 C - *
, t$ Z# c0 k. S) ]; u5 {$ l - * This file contains EDMA3 Test code.
$ u8 x- d/ r+ d; ~0 S# Z" h - *' b3 a s1 N' {& ?
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE) |9 r R+ _ j9 P* A
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
, R$ H' U( C" ]; N- q, ^* \# W - * TO CHANGE.
+ K6 Q$ }0 u/ m5 Y$ ~4 I, C. C7 w - *% b- y) j- v; f) k
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
1 W. l. _6 k! Y4 N2 `4 V/ o - *- [: C9 T0 w% k# l; H
- * This program is free software; you can redistribute it and/or
3 S# V4 h- E4 N0 m - * modify it under the terms of the GNU General Public License as) U1 E7 \0 f6 R
- * published by the Free Software Foundation version 2.
/ T& }" z! _& b q - *
, Z9 \1 y- w8 n9 f% k7 |' p2 e - * This program is distributed "as is" WITHOUT ANY WARRANTY of any- ]% b2 K3 Y# e2 D. _& n c
- * kind, whether express or implied; without even the implied warranty
; h: g. y, r, m O - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7 ^" }# ]5 ^- b7 z, K - * GNU General Public License for more details.
' Y. n( p: }8 p& ~) d- p - */
0 i4 P! o7 K: ~* C8 E
* n" k& m4 S* W0 Z* O/ i5 w- #include <linux/module.h>; k# ?/ v& V" _* J V
- #include <linux/init.h># ~; z) n9 N5 G2 u7 M& E" n
- #include <linux/errno.h># B* X) r* n1 u* V4 g s
- #include <linux/types.h>
& r6 J- F8 J' y/ W - #include <linux/interrupt.h>9 Y* a' G6 C+ I" Y, K4 Q% s0 d; J
- #include <asm/io.h>
, ^3 `) ]* ?. o9 E5 g, M+ P( ` - #include <linux/moduleparam.h>0 x0 Q: C0 M* }/ ? B- H4 I! n
- #include <linux/sysctl.h>$ R9 S8 o2 d& F3 W4 P' j: |9 u
- #include <linux/mm.h>1 K! W$ Q) H: }+ q- Z" O
- #include <linux/dma-mapping.h>
: V; O3 m& F* T4 ]+ q
- u( @1 U9 P) H3 ?3 ]% Y% q- #include <mach/memory.h>0 P* G6 A, ?3 \! Q! b) u; n
- #include <mach/hardware.h># l( f! s4 B; A- j* R& _- L" j
- #include <mach/irqs.h>
0 R# z o# U* ~1 {# M - #include <asm/hardware/edma.h>
' T' m4 }3 F- ]' d - 4 V- @+ m+ G" x# l
- #undef EDMA3_DEBUG
9 i( [. v$ d4 _+ b T - /*#define EDMA3_DEBUG*/( ], w* }- q2 K- r. b: o
5 u. ^2 `8 ^, y+ x- F- #ifdef EDMA3_DEBUG+ y/ `4 u9 E2 Y9 z C/ |1 t
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 Y! x1 ?( I. [; Z, N - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)# ~3 C5 R8 \7 `, j
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), C5 \! X* y. u: T8 t
- #else, o$ n" ` N- O
- #define DMA_PRINTK( x... )9 q$ @% P+ O" N7 W& n3 ~
- #define DMA_FN_IN7 ]3 q: l: ~8 d+ o- @
- #define DMA_FN_OUT7 |, K! Y& _5 W; P' q* z R
- #endif4 l0 c5 z5 R/ k
- ; h- N& H/ D; X- A5 ^( D0 i4 Y, C. Y
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)& m' F5 o) f2 ^8 C0 J
- #define STATIC_SHIFT 3
8 @" L; Q: F2 L) }6 F - #define TCINTEN_SHIFT 20
: j/ v3 x: w+ L; ^4 t - #define ITCINTEN_SHIFT 21+ U& s7 d' P* \ ~9 m9 ^5 D2 `
- #define TCCHEN_SHIFT 22- C, E9 e- H1 E. V8 [
- #define ITCCHEN_SHIFT 23
- b5 u- ^6 \+ G5 G - % B& N) s+ d2 N: u$ I& w1 z/ M6 [
- static volatile int irqraised1 = 0;& d* \- k6 [4 ^6 L- ]0 m8 g
- static volatile int irqraised2 = 0;8 ?: Y5 ~& D2 o' Y% D
- + g& m+ R' _8 t( q* t. U
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 [! }# I9 W" d9 ^+ ]
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);5 v, r+ _+ _2 Q7 l
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
; d6 k7 y8 c2 F4 L C. z
8 m! t1 j# k. M. I, X- dma_addr_t dmaphyssrc1 = 0;5 J3 u& X' j; y: v
- dma_addr_t dmaphyssrc2 = 0;
4 m# a, C: H' s5 Z3 t - dma_addr_t dmaphysdest1 = 0;
/ g" }) n: c; N, n4 t( Q, Q - dma_addr_t dmaphysdest2 = 0;6 B6 K7 B. t7 x+ L5 E; w3 p8 x
7 {" L' ]8 @/ K, y* Q: h- char *dmabufsrc1 = NULL;
: C/ m# x& @4 E0 a8 F1 R% x5 { - char *dmabufsrc2 = NULL;; |3 l4 H+ ?1 z% \/ }
- char *dmabufdest1 = NULL;
# c4 C$ r! T, Z - char *dmabufdest2 = NULL;1 n- k- N5 A" [1 z& ?- N( g
- ( Q+ b+ p+ B( N& a2 w) K" `$ |
- static int acnt = 512;0 w5 X* F# |9 m7 R) n* \' X/ w
- static int bcnt = 8;$ e$ {- O3 v1 v, w
- static int ccnt = 8;% g, z" V4 \4 |. P
7 b2 J- g6 t) P/ q7 G" c1 F- module_param(acnt, int, S_IRUGO);
6 v1 C6 d# z7 ]# U" X6 Q$ `/ c6 \ - module_param(bcnt, int, S_IRUGO);
5 w1 p7 M8 o& U* e; M2 \+ v X$ [4 P - module_param(ccnt, int, S_IRUGO);
复制代码 8 F& s! B) b3 f7 W. M. u
# \. E5 t5 v# u
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用- ~; h1 ]$ p4 W, V) p
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
7 z1 Y: c% L% S7 @ 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
& B3 E0 N W# u- C+ Z
1 q! d4 |: O3 L! E4 s' z3 v
% L0 t" J) e/ ~ |
|