|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
5 j' [# P0 W+ n% C c& c" ~- [code]EDMA sample test application# d# o% v5 u: s; t& g; _/ }
- /*
# s' p; U4 v: @9 U - * edma_test.c
8 `# y3 C+ D, V3 e$ t3 J3 T - *
2 G( u6 \3 p# X+ b1 q1 M - * brief EDMA3 Test Application
" B" G( }, d1 l M* i$ C - *
' M+ {8 i' t1 I {; r$ y - * This file contains EDMA3 Test code.
8 z8 U' G" i( ?# n - *
1 M) d2 B5 n7 J$ w: b) m& S2 j - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* _" c6 i" Z. M - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
$ J' C# R- }2 p - * TO CHANGE.
v8 c2 N$ p: }' Y, Q - *
* e8 U' c/ `7 q3 b& H+ Y5 h# U - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' i( ~1 \1 v5 |0 M
- *' d3 d2 x; N& K( o* @
- * This program is free software; you can redistribute it and/or
5 A8 _; }/ ?$ P& m1 Y% Y1 p - * modify it under the terms of the GNU General Public License as# u: H+ G, i1 r4 m6 f# K
- * published by the Free Software Foundation version 2.
( w8 a" i2 A( q8 P0 L% a - *
2 S" z4 Z. \/ J J - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
# h( w2 C5 r' m( e - * kind, whether express or implied; without even the implied warranty4 T& [5 Q, D$ N; R
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5 r) l3 _3 n% _7 @2 I# i - * GNU General Public License for more details.
# J6 e+ W" h/ f- {/ ^" i - */! T, z% ]# n7 b: Y
9 o8 m4 W; v/ K- _- #include <linux/module.h>% T. S5 ]# Z; S" R& {
- #include <linux/init.h>
. y4 b7 N% ^8 T - #include <linux/errno.h>
& t% h1 l' R! ]0 x4 i) [ - #include <linux/types.h>; ^/ M+ y& u4 x# X/ r& W/ }$ @2 C
- #include <linux/interrupt.h>
' O8 V+ X: j! z3 m - #include <asm/io.h>8 J& e- `3 r6 a0 m
- #include <linux/moduleparam.h>) z; t5 J, ~2 U+ |3 s+ L/ [2 Z
- #include <linux/sysctl.h>$ {9 v0 l2 ^% }
- #include <linux/mm.h>0 e2 |' O2 ?4 R& j
- #include <linux/dma-mapping.h>1 E. l" e# p ^4 O8 O
. H0 z8 a* }& f1 a- #include <mach/memory.h>
& l0 L. ?7 Q% L7 y7 Z& ?. r - #include <mach/hardware.h>7 ^3 M! |" R- a
- #include <mach/irqs.h>
8 I3 J: j5 V: n) K& z, e; t - #include <asm/hardware/edma.h>
1 m- h, C1 [; y" l6 E* v
4 h1 V" X5 ?; N$ Q# C. C- #undef EDMA3_DEBUG
$ X/ S+ W f3 n" J0 l - /*#define EDMA3_DEBUG*/
, G3 }5 O2 u6 \! y5 {7 [9 G - ) A4 q( I. |% M
- #ifdef EDMA3_DEBUG
( K1 H- y) y9 i$ i2 _* o c - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
! \# U7 b! I" P3 ~: Z; w+ } - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)9 w, d1 C( _0 a( t
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
3 d7 U2 m |9 m+ Z - #else/ k$ X. v. V; K. q" L* L5 ?3 I
- #define DMA_PRINTK( x... )
3 c M, h% b$ t2 n8 s& L - #define DMA_FN_IN9 Y! H% E; G% }0 O B/ C) O+ z" J
- #define DMA_FN_OUT1 y. ?. x2 @ H4 e5 ?
- #endif. V( O$ w0 b9 N( z D3 a
- - o) P! J4 z; P4 O8 {( v H
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)2 F- ~4 Q& y( u1 |
- #define STATIC_SHIFT 32 Y3 \) N- \3 C0 A/ G5 y
- #define TCINTEN_SHIFT 20; r3 L+ k: i+ @# c
- #define ITCINTEN_SHIFT 21
% X# \6 q7 B' s) K - #define TCCHEN_SHIFT 22
+ j/ N9 r$ z. v. S+ b7 A8 h; n6 z4 D - #define ITCCHEN_SHIFT 23! i6 {$ W4 m# H/ r5 p
p5 g. }" f( Y) A+ D: I2 r- static volatile int irqraised1 = 0;
& T# f; V' ^! b/ D - static volatile int irqraised2 = 0;
1 g5 y3 _0 Q! n8 s1 e1 h s1 K - 8 | ?3 {, M3 r7 L* T2 m
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
q: V" o: w* p; q5 Z0 O! S - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# J ?0 V- B3 Z! Q B% Q - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);! L A& Y' s' B) k; T. p
. F* t. C* W' [4 d: C$ W- dma_addr_t dmaphyssrc1 = 0;
- W# z- s5 u3 ^7 b - dma_addr_t dmaphyssrc2 = 0;; b( P9 a0 v. @+ K! z
- dma_addr_t dmaphysdest1 = 0;6 a3 f+ y9 X1 b
- dma_addr_t dmaphysdest2 = 0;
1 ?1 }2 \- M' _
( n$ C/ a- Y* F2 J, K! T- char *dmabufsrc1 = NULL;
v& Y8 J4 n0 P% x* x - char *dmabufsrc2 = NULL;
3 |$ K9 ~/ ^' K3 g! x! Y, e5 z - char *dmabufdest1 = NULL;) l3 S) i# Z; d/ u7 W: Q. k
- char *dmabufdest2 = NULL;
7 t( `' d9 d0 F2 I l6 C - 8 u# n7 n5 s6 K# c: W( V& L, a
- static int acnt = 512;
- P& \' I+ ^9 l - static int bcnt = 8;, W% l0 U& @& a& C: |
- static int ccnt = 8;
$ T9 C0 H, n5 G2 E5 p - 8 {: S( i1 e6 `" S* s$ e
- module_param(acnt, int, S_IRUGO);
7 |3 z3 h8 a, u! X0 c - module_param(bcnt, int, S_IRUGO);
" l; a" u g* z8 f9 D - module_param(ccnt, int, S_IRUGO);
复制代码
- s. E, h( U6 d3 h8 v9 g9 P7 z d& \" c/ D/ R2 R' i, G
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用: F7 Q5 g0 L- Y& n; e! t
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。: z. \. V. B" {- T
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。* ^, B2 `9 `7 F# G
) n( p+ ~3 X' T1 C0 T* s3 e( X+ a H# ~4 o6 b
|
|