|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 $ v; C% ^( l! N# i, R% p
- [code]EDMA sample test application
4 E# U4 B3 C8 K' e' P/ X c5 J+ q - /*; u* |: s" [8 T# M+ e
- * edma_test.c
V ~1 R& y: F: u9 ^! v# M; H' p - */ Q( R/ j. Z% w$ U7 c8 ]
- * brief EDMA3 Test Application
3 K$ `, @( _! B3 Z- c% O - *4 i @% D5 t: J
- * This file contains EDMA3 Test code.
0 @, y+ G* n" X0 O - *
6 ~0 B$ a' k9 v3 {! t) P% b+ Z2 X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
' F1 C( \( N; t9 w - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT& i6 D7 H! b9 ?6 P: Q
- * TO CHANGE.
6 ?5 r/ Y$ D$ f' g0 ~ - *8 b3 o" m" O* B+ U( Z2 e' I
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 z9 A/ N! `" |* z/ L
- *
2 M m& f2 t: p( G8 D. y$ l) L - * This program is free software; you can redistribute it and/or
/ ` x: b/ ^- X4 Z - * modify it under the terms of the GNU General Public License as
: t$ C4 x; D: e6 P1 l - * published by the Free Software Foundation version 2.
9 g0 a' ]' q; \- n' G - *+ v8 K3 b* m0 x8 O0 ]7 A8 A3 r
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any. P; \! W: N2 q8 H6 ^0 C( w
- * kind, whether express or implied; without even the implied warranty- Y' Y9 m2 Z4 R; a1 z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the0 ]4 K5 `* {* q2 F! X
- * GNU General Public License for more details.
% x0 G5 g- A9 }' A- ?* s. ]1 J - */( d1 y1 R0 U+ n9 f8 g- d8 Y: g3 B
- ! ]' E& N4 r$ Q' ?
- #include <linux/module.h>+ _; M* v) ]/ A# z2 G
- #include <linux/init.h>' u' ]3 s7 R$ R0 j+ Q
- #include <linux/errno.h>4 e' l; N7 ], ]# M1 r+ z! Y
- #include <linux/types.h>, O) r. t7 \* C" q2 I
- #include <linux/interrupt.h>
4 _" b7 [" N ?9 {9 r0 T - #include <asm/io.h>) f! Z. |5 u$ R0 J5 M7 }; W
- #include <linux/moduleparam.h>
+ _5 L7 P- n* l. k9 r/ X - #include <linux/sysctl.h>% \% t2 V7 a6 f* b
- #include <linux/mm.h>1 O1 m8 y- G3 H" h; P' Q/ j
- #include <linux/dma-mapping.h># L- D( M/ ?1 S/ k5 G! Y E
9 N- B* X. ?9 A9 D- #include <mach/memory.h>
6 R. |4 [5 |* v - #include <mach/hardware.h>
& a+ _8 A' g5 l - #include <mach/irqs.h>. W9 q5 ]+ g* c7 W. d6 @
- #include <asm/hardware/edma.h>
7 Z) l; x3 s6 j% n
( W3 k# e* W! D0 R; _: W- Q5 A; C- #undef EDMA3_DEBUG
5 i8 I3 f& _) I! `& N - /*#define EDMA3_DEBUG*/3 d+ r% _+ E' h0 i, Y
- 7 ~0 N9 U0 G+ ^( Q" g; u: s
- #ifdef EDMA3_DEBUG
- X3 h9 {! s6 ^' C. q2 e - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
1 u/ [+ S; _6 ?$ j3 T - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)& ]. M9 X' B5 `$ K) X* l
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
( P7 U: |# H1 M! t - #else
. M% u6 q; D# r3 _ ? - #define DMA_PRINTK( x... )6 X! m4 u3 |3 i+ v; S! r4 }
- #define DMA_FN_IN1 |2 X8 b$ E; X% ?4 g
- #define DMA_FN_OUT) D/ x' B( U0 o8 P1 ?7 A$ C3 z0 `
- #endif. e+ H5 X6 i$ s( k. ^* |
- y, R9 [9 V% L8 W7 J- #define MAX_DMA_TRANSFER_IN_BYTES (32768)! ]9 F/ w* o, f- Q* V8 i
- #define STATIC_SHIFT 3
4 O' f1 a6 S( Z/ P - #define TCINTEN_SHIFT 20
! t, [5 N1 G" u* W0 W* e - #define ITCINTEN_SHIFT 21
* U0 @2 r9 u$ ` - #define TCCHEN_SHIFT 22# E( p) }1 s/ U, Z, ~
- #define ITCCHEN_SHIFT 233 k1 M: p7 M* B1 ]
0 W, l5 c" v( B7 o- static volatile int irqraised1 = 0;% _! P3 L0 Q" }
- static volatile int irqraised2 = 0;
' D" a2 x4 j7 T4 ?/ K2 Q
% `+ s( ?5 ?, r2 ^/ g% v5 a: W- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# j" s$ P [7 k0 R9 m; h) e( d - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 X; r; Y; ^9 l2 R - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& m4 X/ X# m' Z8 G
+ {* d- ^* R( A& T% C) ~0 }+ h5 ?- dma_addr_t dmaphyssrc1 = 0;* t# A8 O& c: g ]
- dma_addr_t dmaphyssrc2 = 0;3 \) I1 `" l7 b4 P
- dma_addr_t dmaphysdest1 = 0;
$ s0 W( c0 B1 u3 a# P q- G - dma_addr_t dmaphysdest2 = 0;2 P+ Y9 \1 @. ?+ ?
- ! C( E. \! J: g, H# `
- char *dmabufsrc1 = NULL; `' l2 {; O' {% G1 o e: v3 s `
- char *dmabufsrc2 = NULL;9 L% B$ C0 |5 @: f
- char *dmabufdest1 = NULL;
! Y& i' ~+ e# U. {; ~# {& h8 E3 S - char *dmabufdest2 = NULL;% S* [$ i4 A$ T" y4 I; Q
- & s% Q: f; H7 N1 ^' d- ]" z$ Q
- static int acnt = 512;
0 k0 h, l s7 p - static int bcnt = 8;
2 s1 l7 s1 U( i7 Z4 k3 d1 {; o - static int ccnt = 8;
; I: j' t4 e) t1 L' n' T& | - 7 }* ` i1 k$ R/ _# u, [5 U
- module_param(acnt, int, S_IRUGO); T" B" h8 {. z. H( U% b
- module_param(bcnt, int, S_IRUGO);
+ K& v6 p$ F7 U% X; l7 Z - module_param(ccnt, int, S_IRUGO);
复制代码 v# c5 z: Y7 g/ M& }0 ]
0 ]+ e; H8 I& a; M0 S 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用$ F. L; i/ u) T( ?! j
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
- G9 h1 S' L. n9 F 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
% A, d/ k. J% B& C% _2 k/ `7 }5 F) ~" A4 t5 I% m2 z' ]
2 Q) Q# D# g& _, `$ a8 g9 ] |
|