|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 ' L$ s' s- `0 T' `
- [code]EDMA sample test application
% O# B5 F$ L- t9 b - /*6 Y% n c) j# r) B% H" m* x
- * edma_test.c1 M6 z1 I0 d) q$ q
- *
# ~, h* u, ?+ w4 ~8 o - * brief EDMA3 Test Application, b/ I& @4 t8 M' A5 }5 D
- *& L2 |* m! ^9 B, ]
- * This file contains EDMA3 Test code.
1 o: f+ p$ U5 Q9 Q7 [* W - *
* O9 s0 j' G# q+ l8 \* W+ @: }2 @) Z - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE- `- \5 B( m; M1 v Q) c
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT0 o6 X7 b5 _% O, u( I' z
- * TO CHANGE.2 F* V5 Z! M9 g2 D* c1 k8 S5 _
- *# i5 K" o* c4 B0 w6 ^6 F: B/ L
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/4 }1 u& g; Y* ~6 [- r) n) G) e
- *! v" R. Z( |) ]3 p) }$ J" k
- * This program is free software; you can redistribute it and/or
! O3 ~9 A8 } H1 U - * modify it under the terms of the GNU General Public License as
( i2 u7 E6 q6 Q+ d4 O - * published by the Free Software Foundation version 2.' g, f# b" v( e9 q) H" {' V
- *7 Q7 I( P/ F: g) Z+ s8 }, y: r
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any( m5 B& u, n5 x& E: p. C: E, Q6 l/ X+ l
- * kind, whether express or implied; without even the implied warranty( n% Z/ z9 z0 D, x8 c# M4 Z
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the, _' k* F5 b0 J
- * GNU General Public License for more details.
; j- f+ V1 A9 }; J - */
2 b+ V8 B% x8 k) @4 }3 F4 d
5 s5 m9 u; F7 N* S+ T6 z9 R4 B- #include <linux/module.h>
, j: S( F+ [# z# E" L+ P - #include <linux/init.h>
p" \" G8 k# L& ^ l - #include <linux/errno.h>
; I) ?# q/ M9 Y4 O* J - #include <linux/types.h>- [* M) T3 z# B8 S
- #include <linux/interrupt.h>
% k8 A: V& \: A8 A: W, w# |, P H - #include <asm/io.h>
) z" `0 j9 \9 o - #include <linux/moduleparam.h>
* L+ x6 g) E) l4 U% }' s - #include <linux/sysctl.h>0 K) v$ T& {% V7 ~/ a, Y2 k& ~
- #include <linux/mm.h>
( v D2 D$ T& j2 A1 y; ~( W6 Y - #include <linux/dma-mapping.h>4 P1 e& S8 ^: @2 q+ k' U
o3 x3 |6 J9 Q) J( i4 J- #include <mach/memory.h>$ [- P0 N% C6 ]
- #include <mach/hardware.h>
. q% l! `* j# e% k - #include <mach/irqs.h>
* @% k/ o9 ?/ {" E - #include <asm/hardware/edma.h>. s8 s+ J: `' o# E
3 ]* y* z$ B% b- #undef EDMA3_DEBUG
/ ^0 s/ `0 ?8 t: F5 f. o - /*#define EDMA3_DEBUG*/
: s9 v* U: L/ x. q! P+ m
k3 k2 B0 r; \" U- #ifdef EDMA3_DEBUG
, q2 s9 F @* }# U! R) I - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ Y# r3 \* t: w3 y6 @/ W( J - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
% Z# n! _( y6 ^4 y2 N( u - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__) m& K% E5 u0 K7 u- E% O2 |7 ?
- #else
6 f4 X0 J; M1 P# e0 @ - #define DMA_PRINTK( x... ); r, N& ~& D/ n0 o4 C
- #define DMA_FN_IN7 W7 E! B6 r( t& p5 o/ J' v( a5 A
- #define DMA_FN_OUT% b+ g& A+ n* q+ U1 P" g4 h
- #endif
% A4 o" Q0 {- M/ a j) ~ - ( P, @( {2 D1 p& I& V1 Y1 A: \) ]
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ r+ \0 P( N) {+ F4 y1 x
- #define STATIC_SHIFT 3
H, n. j, P1 Q - #define TCINTEN_SHIFT 20
! n) @, Y$ n! H - #define ITCINTEN_SHIFT 21( d, E. Z, s# F' C" V' J
- #define TCCHEN_SHIFT 22
0 H2 {9 W% n1 v/ F; O - #define ITCCHEN_SHIFT 23
1 ~8 [. M% X0 p' U3 ]2 ~( F# d6 n - 3 I/ }4 |" R; ]+ C: |/ K
- static volatile int irqraised1 = 0;8 \4 ?9 r8 I1 c1 v
- static volatile int irqraised2 = 0;
; A- w& ?8 {: }2 m* C - 9 e0 _ C' X6 X8 u' W
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 b9 Z. f( h; D, i( K
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);8 r0 K' l& b7 f9 A
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);6 e. H9 L3 g! R9 i
# W5 q6 s9 M6 C, r- dma_addr_t dmaphyssrc1 = 0;9 `* m- F, N* J( x& z
- dma_addr_t dmaphyssrc2 = 0;
" O$ d6 s6 |) ~ y8 y5 C - dma_addr_t dmaphysdest1 = 0;$ e; z1 p# x8 m& Z
- dma_addr_t dmaphysdest2 = 0;- m1 q& {1 o" m' p/ C9 x* ]
- 1 x- G% O* ?& D% G8 r, b' V& N
- char *dmabufsrc1 = NULL;
- D9 F4 f5 V% ^! Z3 t* x - char *dmabufsrc2 = NULL;4 g, k: z2 ~: L. [. l
- char *dmabufdest1 = NULL;
8 Z. ~% [$ Z( n/ M - char *dmabufdest2 = NULL;* B0 C" N4 c* i! p: N" ?- z. K
- r( W+ H2 D! `+ g/ c
- static int acnt = 512;
9 E# G$ W! m# C1 h3 ^" |+ j3 V7 N - static int bcnt = 8;
8 @7 Q" c+ y J" X' v - static int ccnt = 8;! a9 t& K8 Z! q ?$ b
: c% h9 X# U' ^7 T+ ]# _% q- module_param(acnt, int, S_IRUGO);
9 m# B# S8 j! a1 G- @3 } - module_param(bcnt, int, S_IRUGO);
. h. n' `# W: G% B+ r7 S- R - module_param(ccnt, int, S_IRUGO);
复制代码
$ M- l# K6 C( ]$ {* x
8 a6 c/ K' Q8 G) Y6 y# M, K9 k& ^ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
9 j) O- |& E4 Darm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
# d" _8 l4 t j$ b) a3 |$ |! S0 V( F 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! L! e) a& `/ q* \ H6 x* k
3 o$ x2 g& V5 ~6 d% G* S; v
" v$ z# L5 A3 c. I3 `
|
|