|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 0 o9 K4 m# \, B4 p) c" Q. f5 ~
- [code]EDMA sample test application
+ G( A) f3 m8 Q" w8 P - /*% W) J7 T; F2 C1 ^7 H
- * edma_test.c
0 H. y3 l _" \- K( R, N5 k& [6 g - *& f" H8 C7 u( o
- * brief EDMA3 Test Application
; }' G) Z$ L( t9 J$ D - * x0 S' X5 P% t1 m4 d
- * This file contains EDMA3 Test code.1 G z, Q/ s3 ?, m0 K7 f4 ^6 L: I
- *
) K1 U2 M9 I4 N k- o - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( \$ }3 V' @* e - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT* H& z. t1 f7 N2 P Q) ?
- * TO CHANGE.
+ ?. D/ d j! q5 Z - *
, L3 C2 v) e" ~# K3 Q# @+ D - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/* Q: q% d" L z* [
- *
0 \5 I% r6 d3 s0 Q2 Q) j9 d - * This program is free software; you can redistribute it and/or. t& u# `* O% J7 [% a6 @" k0 E
- * modify it under the terms of the GNU General Public License as7 J9 |0 R, W3 G3 X# M% w7 ^
- * published by the Free Software Foundation version 2.7 Y1 f% }) w2 ]: B Q
- *
' U8 o8 _7 ^ i: B1 A5 v" r - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
, z3 L( R6 {( Y# v& M - * kind, whether express or implied; without even the implied warranty
% B; c- ~% v3 v/ P - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the( Z$ X$ E2 F. Q; ]5 t: P
- * GNU General Public License for more details.
6 R) \1 Z1 @, d6 v0 @4 P - */# t* q' B' w$ i7 w
: z* U! Z4 j5 T9 Z- #include <linux/module.h>5 Y" f+ E8 q: b/ H* \
- #include <linux/init.h>
9 I, Z, B' y. z# C, n# R" C - #include <linux/errno.h>5 K2 v& s9 n& o$ D: s
- #include <linux/types.h>$ }. u2 |, w9 u* e
- #include <linux/interrupt.h>: a4 G" S& Q7 N! t# m
- #include <asm/io.h>
4 a" s, y; \/ {9 F - #include <linux/moduleparam.h>
/ Y: ^& o* L) \/ A! f! b - #include <linux/sysctl.h>
. T8 D0 L; y i) s) K - #include <linux/mm.h>$ B6 ^! K6 ^* q7 S8 r
- #include <linux/dma-mapping.h>
; m7 T: V( u8 {
" q! l& Y( g- N. y! \' o" ^- #include <mach/memory.h>$ L" b- E1 n! M. z
- #include <mach/hardware.h>
7 P2 R! r8 |1 B( o" c" S$ ^, Z - #include <mach/irqs.h>
* t. O! d- d% q2 | } - #include <asm/hardware/edma.h>
$ R4 D) |# j3 G* J8 ]* n
: u- c; v1 L) q, i/ }- #undef EDMA3_DEBUG6 K( l0 W+ w. ^* t
- /*#define EDMA3_DEBUG*/
2 H) ]) ^3 o6 s2 O. |' g - " ]# @3 \3 X$ d. Q* q
- #ifdef EDMA3_DEBUG! `0 {; @" Y) d
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
2 a2 R1 h8 d. t& Q7 p - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
4 e3 @: N8 @$ V5 V% Y! l/ c - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
8 ?) |6 b$ H2 ~. _4 w2 E - #else
0 Z/ Z0 i4 l) }; @0 X9 D - #define DMA_PRINTK( x... ). J1 h0 `( q- J6 M: ?+ r+ H2 s4 Q
- #define DMA_FN_IN) S2 j, F# p' z" H6 Z' i/ ^
- #define DMA_FN_OUT R* Z4 v- h! A/ a4 S, @; [+ j
- #endif) b7 [$ ]: Z! Z) N1 s; w" t# Z2 T
9 \$ L: c+ \2 }6 ~% f* L- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
], R, S! Z- q: S6 H - #define STATIC_SHIFT 3) j% f. u6 i1 O& |- c/ r! R4 t
- #define TCINTEN_SHIFT 20; w |+ y/ C8 G
- #define ITCINTEN_SHIFT 21/ y% W% M0 c2 J! _- F
- #define TCCHEN_SHIFT 22
m3 z) H5 r' _! ~! h5 ~# h - #define ITCCHEN_SHIFT 23
1 t4 H5 R/ f* X3 \7 }
' K# n3 s5 j' e6 Y- static volatile int irqraised1 = 0;. t9 T& b( j' w) }) V
- static volatile int irqraised2 = 0;2 h" c% y( g3 t7 c
! g" ~# r; Z3 u+ k% ^- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
' R! T. A3 Z. [4 ]8 u - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
" X0 s" \% R5 B+ } - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
0 C5 ?7 d! u$ c8 Y
+ W: ~ X0 T2 z2 q. i+ E- dma_addr_t dmaphyssrc1 = 0;
+ K' U: D5 M0 o% \ - dma_addr_t dmaphyssrc2 = 0;
" e$ \* d$ ^4 Z# F7 { - dma_addr_t dmaphysdest1 = 0;
* }# P( k1 I* w/ z1 r( ~5 ? - dma_addr_t dmaphysdest2 = 0;; s" d$ |% A' a/ X" I& W9 ]3 [" v _9 u
- 4 H& O2 u0 @* O7 y+ x! f3 a+ k1 d
- char *dmabufsrc1 = NULL;- P# z+ `3 K( _$ k! z
- char *dmabufsrc2 = NULL;7 V6 D1 I3 m' \/ m( | z" n' [
- char *dmabufdest1 = NULL;9 ?$ A, J0 C! T) X+ s |" B5 e
- char *dmabufdest2 = NULL;" z0 T/ \$ s% V- S2 ]
- 1 z. d" E/ F! y2 j V
- static int acnt = 512;
+ Z$ f$ _' z% K# c: o - static int bcnt = 8;
# `" C- x( ]: @( ~9 v - static int ccnt = 8;
' S6 g( E5 k1 S4 q6 y# ]5 c - ! Q% C1 }" z* b; B
- module_param(acnt, int, S_IRUGO);& F8 J& _5 j/ ?
- module_param(bcnt, int, S_IRUGO);+ r# u3 Q" Y; q, b" j7 n5 K
- module_param(ccnt, int, S_IRUGO);
复制代码 7 y# b% Z) _4 N f% m
' t7 q, `' ^4 e; y5 s
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用# R: V6 }! Z" Z; w( \
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
) _& \3 R$ n. M 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。: m, O3 o/ Y$ N2 i" \( R
+ c7 l9 e# h; n8 X$ B% ?1 e$ }. Y
8 ~! ^3 n& u5 D# @ |
|