|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' O3 T S" g. C: ~8 {5 @% b- [code]EDMA sample test application
3 @" x( z/ i) m9 C4 ~; U. A - /*' q6 U0 F! x1 D { f( U( g4 `
- * edma_test.c' C: m" Z8 G5 [9 a
- *
6 Q" I; _/ X: D6 T& V - * brief EDMA3 Test Application
" R3 W$ R& `6 b- e; Y% J+ f - *
0 x% ~7 t9 m2 }( S: w" _: I( j - * This file contains EDMA3 Test code.
$ E& D6 X$ C& b# K1 L' V - *
/ O$ N. m) p( I! W) q - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
* q: s; {& l8 a" D! V, M - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
2 S1 n( M5 O4 e O2 U1 y - * TO CHANGE.
% G0 i# |) b1 d$ T5 \) a& ^0 h - *
3 v9 {: T" [4 y0 \6 s! Y - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/+ v- |/ V6 q5 C8 P B5 b; i
- *
: t+ i. }4 j* K; V1 u3 P( t b# s6 A - * This program is free software; you can redistribute it and/or& b8 P9 f0 N; ?7 A/ I
- * modify it under the terms of the GNU General Public License as3 B- N/ J) B h) x8 ^, S2 J! Z
- * published by the Free Software Foundation version 2.9 W L+ p" Y* q9 P: @: q. j
- *
3 _- h3 I2 e7 S" C2 R - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
3 o$ x; [0 A3 N8 d4 S- v' v& Q8 E - * kind, whether express or implied; without even the implied warranty: U( e R* T, {. j% k# f- `
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' n4 n+ Q" w# i6 N' Y3 Y) u4 Y& w
- * GNU General Public License for more details.
z8 A7 s+ P9 l - */
5 U, v# E2 w! F- P) |4 `4 G* ^
. F1 ]7 Q8 P& L- #include <linux/module.h># J% g/ Q3 L8 U* e' d; w6 ^6 G
- #include <linux/init.h>2 B% ]3 ?1 } l* H! }
- #include <linux/errno.h>
& J, A4 U0 Q5 v - #include <linux/types.h>8 q. _) z) }7 a% ~ W
- #include <linux/interrupt.h>
6 n) p# V6 B8 s) L5 ~ - #include <asm/io.h>5 d1 j9 F2 @. u9 e; r; p2 Q7 Z/ I
- #include <linux/moduleparam.h>: m+ q4 \9 T- I8 _2 g0 l
- #include <linux/sysctl.h>
& k1 @- J" k$ r1 }) N - #include <linux/mm.h>! ]' @* G' r) b+ l' P' ]
- #include <linux/dma-mapping.h>* T3 u8 C1 V: q) \7 M0 U1 a
- $ g& C5 c4 S0 \2 }( W$ o
- #include <mach/memory.h>
& ]' Q6 G/ u1 D: H5 B% o) }" V - #include <mach/hardware.h>0 ?/ @3 R4 Q, v6 E4 P
- #include <mach/irqs.h># I5 r/ m0 b% T& K; h
- #include <asm/hardware/edma.h>
- G8 r6 m, Q: X( L' U. D' s, L
6 T# z* {. [' w2 q, ]0 Z- #undef EDMA3_DEBUG
! e- H; ]6 M- ]2 V" x - /*#define EDMA3_DEBUG*/2 l# |6 ~' d, A, c/ h
, f- E6 ?, n8 o7 v- M! U) |0 u- #ifdef EDMA3_DEBUG
5 G K/ H+ \% v/ o5 c - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)9 E' _5 r) _6 R5 h* G2 M
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
( G8 L7 j0 ]. S; J6 z, L; G - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)3 B+ z3 X L9 M" F8 A
- #else
2 Z) _- ~- y$ u9 [ - #define DMA_PRINTK( x... )
& A0 z p, D4 Y1 X# V- a - #define DMA_FN_IN1 j6 K% S4 `5 X9 D$ C2 u$ e1 I
- #define DMA_FN_OUT
2 y# V2 f$ P/ H7 Z' a2 h* {/ j - #endif
1 I t1 l2 X. K+ @ - : r+ A9 |% h1 a
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
" ~$ w9 @7 y' s2 h! t9 F - #define STATIC_SHIFT 35 D0 l- N& @2 n9 n
- #define TCINTEN_SHIFT 206 k+ k$ f+ ~9 g% O# \ O% G
- #define ITCINTEN_SHIFT 21- M( N1 @' Q5 k3 r
- #define TCCHEN_SHIFT 22
6 s+ e2 @( U- C& A5 ~ - #define ITCCHEN_SHIFT 23
/ w: q5 b$ v5 ~2 b& g
2 a3 t+ l% I+ F' r" e" e- static volatile int irqraised1 = 0;
5 ?# r0 j% f* I" @/ t1 h& r, Q/ u - static volatile int irqraised2 = 0;$ @. R* u+ z6 I3 d2 `
% x, B" J9 m# o' z- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. {9 v+ W l @: H- `( J
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
7 B `& b+ w2 L. E4 ~ - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);: H* I. j3 z' [$ \1 q; z' I
- # I# P7 O% I; ` r6 V
- dma_addr_t dmaphyssrc1 = 0;( ^: h& y; v4 N5 m5 o! ]
- dma_addr_t dmaphyssrc2 = 0;
0 c$ `$ U+ ~# r; W - dma_addr_t dmaphysdest1 = 0;
; s/ _; F4 s6 @+ C6 Z# X4 Q1 m5 R - dma_addr_t dmaphysdest2 = 0;4 Z1 r& Y- k( f& o# m
6 s* g" L9 B: w- char *dmabufsrc1 = NULL;* y; O- U5 ]$ Q, x. d2 Q1 H7 D
- char *dmabufsrc2 = NULL; N2 w l; j% W+ ^3 I" K* J# S1 V
- char *dmabufdest1 = NULL;
& C& }) N5 G0 i- s! P - char *dmabufdest2 = NULL;
* v* q, x: |( M - - R& q" v: v4 e& M
- static int acnt = 512;8 W" j& C3 C+ ?4 t" d
- static int bcnt = 8;
5 G; ^1 {- H" z. Q9 P2 G* O. B - static int ccnt = 8;
! K3 ^5 v$ ]9 d E" ~0 i - . J2 X4 L% y, K5 o6 O K
- module_param(acnt, int, S_IRUGO);
' N' m3 n5 z" C3 \/ n; \1 Y: ? - module_param(bcnt, int, S_IRUGO);
, `* u4 b0 D: a+ S+ ~& T - module_param(ccnt, int, S_IRUGO);
复制代码 & O( b5 R4 h- ~6 _! H
5 k& ?, w1 j+ a8 j
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
+ l8 M+ Q K. F- Varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
% u; G9 P% Q& h 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 s/ V. {! T# I# c2 m# v8 Z% {( b
# M* {# r% B! S8 i
5 v* }; B) @5 j3 d7 p4 | |
|