|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
4 d$ x& }# K5 c- [code]EDMA sample test application6 e# H Z' q% h
- /*
) ^( _* r# N5 R& R- _9 }4 L+ {/ _ - * edma_test.c/ [/ [# j3 W6 d6 ?0 k
- *
7 m. z3 K5 z9 l - * brief EDMA3 Test Application
V8 f* K; k1 @& Y2 |3 y - *4 g7 }% H" |; |& H7 D& k7 `, o
- * This file contains EDMA3 Test code.4 w4 }) d9 M7 k6 C% ^3 T/ l
- *
S1 g* {4 [# V/ I3 i6 a9 X - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
2 d' W$ K: x" f' o. J - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
# X4 W4 y9 D3 d1 Z( i5 Y) ` - * TO CHANGE.3 D+ @8 [; d: j
- *
0 @8 h0 z5 m% I/ m4 ^; A* d; R- d" Z - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
. n8 f6 L8 s Z* [! `3 s - *
, z8 I( V5 X1 a- f1 n - * This program is free software; you can redistribute it and/or
0 O8 L' A. ~, n7 D" z6 r) ? - * modify it under the terms of the GNU General Public License as
0 ^( V* @6 ~* V1 o - * published by the Free Software Foundation version 2.
# l2 o8 g! Y) \9 D - *
/ K& h, d5 ~( T& V" ]3 ]; G - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ |& k B: z" V% [8 `- I - * kind, whether express or implied; without even the implied warranty2 U0 k: e: \3 ^7 Q, K
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
: y- x* G$ t9 [8 g6 f$ I7 c; v - * GNU General Public License for more details.
! o. ?/ P D! @ - */9 f9 {) D9 Q- n8 S8 [
# t% G6 u A, D4 T& y! K0 C3 G- #include <linux/module.h>
% L( a" [. j& Z/ u$ ^2 E; N - #include <linux/init.h>, }0 t3 i; h+ }+ }7 ]
- #include <linux/errno.h>, M! W9 S* i" L( N* E
- #include <linux/types.h>& R. c( E: N) B4 {* o; V
- #include <linux/interrupt.h>- A7 w; i: \, f; A \) H- A' Q
- #include <asm/io.h>7 K* D( _% I) `
- #include <linux/moduleparam.h>9 ]# m6 p; h3 |7 `5 b; A
- #include <linux/sysctl.h>' @8 ~: O7 k+ V' W# v$ d
- #include <linux/mm.h>. T( C) W( q' Z2 u
- #include <linux/dma-mapping.h>+ n8 ^7 [- T! {& H% X
- , Z/ e3 Y7 q8 z0 s; h) P# ^1 N$ H" A1 o
- #include <mach/memory.h>
3 ~& P7 V+ o Q# B - #include <mach/hardware.h>
: R2 M1 z: C* A& P$ O; N1 R - #include <mach/irqs.h>* e, H7 z. [% c7 n
- #include <asm/hardware/edma.h> t9 e) X% @# c9 _8 l1 ]
! b N! B7 N( f3 Y6 D" r: Z- #undef EDMA3_DEBUG
$ h( E# M" ?& [8 ] - /*#define EDMA3_DEBUG*/
& P+ t# P$ r A/ Y7 J3 x
# d( C6 g! o, C4 s* D- #ifdef EDMA3_DEBUG
3 d+ u! b$ R" c1 q - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 @8 ~. v6 e" m2 x( ?
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)- F1 |+ a% l% g
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)) r1 J$ F/ d- |: f
- #else
9 [+ @. m1 r. z; A+ l( k9 | C - #define DMA_PRINTK( x... )
3 U t; Q% v8 b- t - #define DMA_FN_IN
9 G7 U& g) O( o- L/ P C( q - #define DMA_FN_OUT) M( y+ M" c2 Z" m S @) T* ?
- #endif2 K+ Y; d/ `, y6 Z6 c$ T% |
- " Q, l, y! k# f! _. M( s) N
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)1 U ~3 y- H+ U1 x- \$ M3 A
- #define STATIC_SHIFT 3, X) i' _! v, O9 {' l* O; u$ r: ?
- #define TCINTEN_SHIFT 20
0 q9 d' R6 [) Z k - #define ITCINTEN_SHIFT 21
0 o: s) d: ^" \; d6 g+ n0 h - #define TCCHEN_SHIFT 227 L1 k9 k" S$ U& C! R
- #define ITCCHEN_SHIFT 23
, ~# O# h, Q9 x' A - 8 V B3 K& M. `+ K* i+ c5 l1 M
- static volatile int irqraised1 = 0;
6 \" Q H+ O K! s9 ] - static volatile int irqraised2 = 0;
1 K9 v' t0 r. b& n- l5 Z+ V
; W3 V# w) |% K7 n5 w- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue); x1 {3 S% a. ^" L3 U. @" C% q
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! n6 v; k$ f. z" |$ b- ] - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& H& l6 d9 e4 w5 X - , n: A6 z% J7 x$ y! {
- dma_addr_t dmaphyssrc1 = 0;- C% w) o3 h% E
- dma_addr_t dmaphyssrc2 = 0;1 w0 l# `" M* A/ ]( Y+ @
- dma_addr_t dmaphysdest1 = 0;
, j# ?( z+ e! y' O' P7 Q& m, E - dma_addr_t dmaphysdest2 = 0;" j, ^/ R" O2 j! ?
. N$ N Y: A$ F [- char *dmabufsrc1 = NULL;/ r9 l" U Q4 z4 E6 J3 b' ]
- char *dmabufsrc2 = NULL;& `8 A$ L# m0 F! d4 r& m$ \. A
- char *dmabufdest1 = NULL;
6 i/ T* w, B9 A; M0 w; o1 e% Y - char *dmabufdest2 = NULL;4 A# X9 F! a$ l! k, v9 r: A& a2 v
$ ~2 p9 [6 A) _ u- ~! s- static int acnt = 512;
7 \' f3 g; ]2 G ^ - static int bcnt = 8;
# }) n8 z+ M! Q$ _* b- b& |+ T. ? - static int ccnt = 8;
- {1 A: v& P6 a A9 V) x1 K" R - 9 K# G0 M! s* X( D- Y% W
- module_param(acnt, int, S_IRUGO);
9 i0 U( g9 W* Q8 [' O - module_param(bcnt, int, S_IRUGO);
5 Q1 q, C$ [, f/ h4 a$ ~ - module_param(ccnt, int, S_IRUGO);
复制代码
9 q" f( A8 w# Z( E; _2 d
/ z# O" u( v$ v' R# p 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
4 A2 {7 m3 v+ |. Y7 ^% `5 |2 }* marm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。" I) I/ J: x# Z. v
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。' h- w4 |/ P& w2 s! I
; w7 ^; I! ?3 c8 d0 C; K
/ v1 x- R. {. _. i( N& P" k |
|