|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : j# g% E% E' w- Q8 Y! v! |: v3 Q
- [code]EDMA sample test application
% j4 d9 b) V& ], U - /*
8 X" D3 M7 J0 G! a2 L* e - * edma_test.c
1 ?2 {: q% ^& ]- L8 t. V$ ~ - *- k6 e' _7 }5 c! E
- * brief EDMA3 Test Application% b2 |/ g3 M% y- e4 K7 E. s& W
- *
7 V9 a, @5 T) g; m3 e - * This file contains EDMA3 Test code.* t: n0 e# g1 |( Q
- *" _3 [8 O7 J, n: y
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE+ f U- m1 L6 O
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
3 k; @' b) Q8 d3 \. j - * TO CHANGE.
1 q' t- v; k1 m7 x j7 ] - *
6 e9 ~$ z( F- c3 Y/ z* H - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/. `+ O* E" [9 K3 ?7 _
- *& p/ I. k; Y2 j6 p$ [
- * This program is free software; you can redistribute it and/or( u5 [1 x- o' v8 {. X5 h
- * modify it under the terms of the GNU General Public License as6 E/ A: @, G% R: ~& }/ ]* P! L
- * published by the Free Software Foundation version 2. h* x/ [) i8 L8 P6 j5 o9 F
- *7 u& R# o6 J% z+ F+ ^+ k/ A
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
" r' v# Z- M2 N; X4 k$ x F) D - * kind, whether express or implied; without even the implied warranty
* @" H# e6 i0 ~ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the, {0 W7 [/ Y) a, j E1 N
- * GNU General Public License for more details.9 i Q1 d$ A& h) e2 H% M: v. t3 R
- */
$ G3 g8 P6 [9 I! P7 N3 n' S' O
6 t. \; k* z( ^- #include <linux/module.h>
3 M7 y7 {. ?! b# N6 s - #include <linux/init.h>
( \) k. a9 c: r7 I, F5 S% D+ i - #include <linux/errno.h>
: z5 N: d/ y0 b; } - #include <linux/types.h>% N, |- E4 ~2 v# _4 i9 U! N
- #include <linux/interrupt.h>
+ A, h! r6 p/ T/ ^/ Q6 j - #include <asm/io.h>% l. k Y6 m9 q) W
- #include <linux/moduleparam.h>- n7 N+ p+ k- V( c. I9 C! T3 j v
- #include <linux/sysctl.h>
3 ]6 n6 F! }- R1 a8 p! E( D - #include <linux/mm.h>8 R! x, r" k+ D% ^1 J V
- #include <linux/dma-mapping.h>
6 V) i& r. G2 X7 w6 A
7 U; }( P6 E& R& Z. Y- #include <mach/memory.h>
( g* \( U+ p9 \3 u$ v4 v( U, x - #include <mach/hardware.h>
) \4 Q$ u$ ]3 i7 q8 U4 T9 T - #include <mach/irqs.h>) J" j2 {5 ~) t" y8 R! c3 |/ B
- #include <asm/hardware/edma.h>
) ~: P7 `9 r; L/ O7 ]. W1 ~/ X- v
: q) y9 X; W* u& I- a }- #undef EDMA3_DEBUG
3 P4 h6 j3 |: _4 [' q: f. J - /*#define EDMA3_DEBUG*/7 z3 A* @# W8 N% C
+ V& L8 x) H! e0 P! p0 A( U- #ifdef EDMA3_DEBUG. X# X+ Q& N$ x( I+ o; ^
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ `6 U X+ ]6 f- y) }
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
2 U" B! {; O/ B6 k, T - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)% R- a7 j% A9 b5 |: H4 i+ F
- #else N$ c1 B6 q, p0 o2 x/ f
- #define DMA_PRINTK( x... )3 l' ~5 L I4 m6 U3 G
- #define DMA_FN_IN
5 |& p( F* A8 Q: f5 k | - #define DMA_FN_OUT
* c& ^7 d, u: k0 \4 Y0 ^, z& G - #endif* E, i" k& r Z% C3 J5 r: B
* s2 f9 F L8 T- P, E- h+ j) {! m- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
1 A" E8 P$ ~' Q$ @6 w/ Y8 ? - #define STATIC_SHIFT 3
2 B" X) f" q" ^ - #define TCINTEN_SHIFT 20
$ A' {8 x" @7 ?: ^! } - #define ITCINTEN_SHIFT 21- P" |& v2 ]9 ]- D
- #define TCCHEN_SHIFT 22: R. `$ k6 Y; h: o
- #define ITCCHEN_SHIFT 23; U# @/ n8 {. O* Y( o" y; F8 K$ v
9 j: L( u* K8 B& }% g+ \- static volatile int irqraised1 = 0;
4 b. M2 K$ \9 j9 D0 h - static volatile int irqraised2 = 0;
2 M# b: b/ K Y% M! F J - 5 D9 A9 h" U# a! `4 z2 `
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 s0 P/ q3 U/ L: c
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 Y8 a4 S" D" r% m5 K - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( X% [2 L4 ]# h; \8 r
( a* d3 E+ F0 `- N- dma_addr_t dmaphyssrc1 = 0;" L! P" g! `4 @' H
- dma_addr_t dmaphyssrc2 = 0;2 S8 Z* s. e0 D+ u7 F. l7 u
- dma_addr_t dmaphysdest1 = 0;' V" J1 t5 R+ I- U' N, k d
- dma_addr_t dmaphysdest2 = 0;" ^' j: P% `" w% e% ]1 _3 ^7 U
0 F$ S7 S/ j. P- char *dmabufsrc1 = NULL;
/ ~$ W4 K% Q* Q/ A1 x - char *dmabufsrc2 = NULL;7 p$ x2 B' ^( [2 ?
- char *dmabufdest1 = NULL;+ y. x, v% t! |# K* X& n
- char *dmabufdest2 = NULL;
( o# {+ j# z$ u' `4 Z' P, L# Z - & o% `' N6 q0 z, d" d
- static int acnt = 512;+ C2 ^0 F0 q6 s6 O
- static int bcnt = 8;
$ Z& L0 {1 O f' a, _2 { - static int ccnt = 8;( `2 l8 W" u- J' d% l
: t* C @! w4 C+ t- module_param(acnt, int, S_IRUGO);
S& @9 a! W4 D4 U$ H9 W - module_param(bcnt, int, S_IRUGO);/ E8 m. ~. Y, i6 O
- module_param(ccnt, int, S_IRUGO);
复制代码 & o' q) u9 Y) a6 N5 v5 B3 R
3 S& q2 a0 W. K7 l' B 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用+ k* K" N$ U ?2 T4 O8 i4 t/ @3 k
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。& C" X9 z3 l' X' z a
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
; S% G: p& \8 Z( K3 t' z8 }4 J3 ?; q. t* O
" b# K I9 t9 C
|
|