|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
+ U( `4 ~9 ?3 Q" M. P9 }- [code]EDMA sample test application0 ], h. U$ m; B7 |- A
- /*$ U# R+ @6 ^1 j z: l
- * edma_test.c3 p4 A/ c' @, n
- *
/ F; k9 a2 ~5 R" b, Z# R - * brief EDMA3 Test Application
/ _8 I0 G% a2 O5 p4 r% h - *
4 z- K; S# V; B" U: z7 J5 E - * This file contains EDMA3 Test code.: S. [5 b- ~8 E0 r8 S1 |
- *
* ^0 L/ ^9 J P, |2 }" t7 q8 B - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
" N5 h1 x1 H3 ?. k# R4 ]$ y - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT+ i+ P, @8 f) m
- * TO CHANGE.2 a, b& T4 H, `! W P1 b: v5 {. v4 U! z
- *' y6 x% C. r4 \6 _2 j: \9 l
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/5 b& q" b" P9 ^; N3 N$ F
- *( s7 v& y- C! E, @& A$ m. T
- * This program is free software; you can redistribute it and/or
# b5 R. Y$ M! |; o( S; d - * modify it under the terms of the GNU General Public License as
5 q3 G6 _8 M% K( z- ~5 \ - * published by the Free Software Foundation version 2.
+ m( ?9 N" _6 T; W& _ - *- n; `1 N- c- q6 R- i8 n
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any4 `6 L* o2 e! t. r6 W
- * kind, whether express or implied; without even the implied warranty
+ j, a M3 b7 M# p - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the- z. ^# ?: b0 t. T
- * GNU General Public License for more details.
! Z) O( v! c6 Y5 @. g( Z3 Q - */) l5 K8 J, ]$ f( y* o, r
- 5 p7 c- ^+ u- S, T1 {2 d
- #include <linux/module.h>
* A5 }9 t0 f; E V6 O8 t5 k/ k6 _ - #include <linux/init.h>' L a8 ?: G% @7 i; J
- #include <linux/errno.h>
( P7 ?5 |6 C, |+ p! K - #include <linux/types.h>' n4 D3 ?, u0 X& l" m7 T; o
- #include <linux/interrupt.h>. y) N% B; u0 l# K$ O7 o z
- #include <asm/io.h>( v) G9 e! v7 L0 m1 j) {* V
- #include <linux/moduleparam.h>
9 g9 O n7 X. R t. `1 L - #include <linux/sysctl.h>% b$ @4 I* H$ E6 A2 F
- #include <linux/mm.h>: Y( B4 Q: Q5 r; J1 O
- #include <linux/dma-mapping.h>
! b* s& R" O1 h6 g- k, R; ?) |) T( p' L
6 f: k: R3 r6 c& h0 f4 n- #include <mach/memory.h>
; M: M" `- X! A7 O' l0 Y - #include <mach/hardware.h>
8 j/ c! b1 V+ k% ~% a; n) F' I - #include <mach/irqs.h>/ ~, p( ]* Z+ |
- #include <asm/hardware/edma.h>
& W \9 l3 C: l* K4 T
) y5 J* z2 [( x- @2 {/ a4 D3 S( K T- #undef EDMA3_DEBUG0 C! a+ l$ h; b# B' F
- /*#define EDMA3_DEBUG*/8 g1 W6 q% [; c1 @5 Y: w
- 7 _: Z$ X; V- y$ a% n0 |
- #ifdef EDMA3_DEBUG; B! w a4 Y, u( U% [
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
$ `) |. A8 G9 d3 f) v C - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
+ N: \ B! s% y ]- x$ W U) ] - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
. o; b4 x( i q9 T: V9 l - #else- Q) \, L; j" d4 ]$ w* G7 t, p
- #define DMA_PRINTK( x... )0 ?2 v1 H3 S. h+ r, \
- #define DMA_FN_IN
0 I# K& o, [9 i! z7 [7 R - #define DMA_FN_OUT: v( t$ w" H- D' |" o' c
- #endif% i" k0 @( P4 l. Q8 S8 I) Z
u, ~( u) p% `6 F/ B" ~- #define MAX_DMA_TRANSFER_IN_BYTES (32768)1 [! ~: n$ K! O/ `1 J# c
- #define STATIC_SHIFT 3( b5 j1 C$ ]- ^2 y9 B
- #define TCINTEN_SHIFT 20
( u2 j. M1 O4 A - #define ITCINTEN_SHIFT 21
7 r$ |( h* m _! C0 d - #define TCCHEN_SHIFT 229 P; H/ F" z; M {. S
- #define ITCCHEN_SHIFT 231 j! d9 i4 P0 g4 Q# B7 q5 y6 {
) v" l- y: a% d8 E% z% r, z- u; p- static volatile int irqraised1 = 0;4 _! l2 ?6 k& @: `2 D1 H7 R, N4 i; ~
- static volatile int irqraised2 = 0;5 y5 k+ p$ P: F
- , g9 f7 j6 F7 \) X+ P& [
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); E" Z0 N8 b! L- i7 g
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
/ `# ?# F7 Y# K/ o3 q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) ?+ V1 j+ ]5 d" w' G
1 {0 P6 l& U1 ?: |( y# D: Q- dma_addr_t dmaphyssrc1 = 0;* Y2 {; |! G! O- b' x
- dma_addr_t dmaphyssrc2 = 0;
7 a8 }% c8 e# m2 A8 a2 X - dma_addr_t dmaphysdest1 = 0;' b& ]6 |4 ^2 L3 F) ?, \
- dma_addr_t dmaphysdest2 = 0;
8 H" R- ~. ~( ~5 w
! @- s/ X3 l( A- G3 i; G- char *dmabufsrc1 = NULL;
8 a' C& v- Z8 j# ^; `" H3 V - char *dmabufsrc2 = NULL;
o7 x+ n. M+ s: c* e - char *dmabufdest1 = NULL;
1 z% U4 ~. h7 x: ~ - char *dmabufdest2 = NULL;% w- X R/ U2 B7 o
- 7 W3 S. @1 w* y8 ~
- static int acnt = 512;
! P3 t. n8 X. Y8 [- ?, m - static int bcnt = 8;
2 C n% S. [, n - static int ccnt = 8;
. D R: `/ ]5 Z7 D0 f- U$ l
2 u4 k7 o/ V1 d- module_param(acnt, int, S_IRUGO);
2 u' O7 U. v6 C. [* r - module_param(bcnt, int, S_IRUGO);
! F7 @8 j# U8 v' y, {3 z" M - module_param(ccnt, int, S_IRUGO);
复制代码
7 y# x4 K) @8 e1 D- h, O. U1 C7 o" W8 V6 x" I" Y
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
! Q8 ~! S# Z* `+ d& earm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
& [! n2 G3 u: I9 s$ x. n! a+ X& k' z 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。, c% N4 ?* ~, s0 |
& I b- z$ a( z% Z' C6 K8 E) \' |
' C5 g0 s% q& l3 U
|
|