|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
, j, [( _5 }% |) L- [code]EDMA sample test application
/ n; x6 o' g6 g1 }! f! ^" @ - /*
# s: r a3 B2 ?, r, e - * edma_test.c
6 R) i$ l9 [/ E8 p4 W - *7 O, `- \1 R" R/ M; f" s7 n
- * brief EDMA3 Test Application
9 Z% I+ z& m+ e: J( e5 W9 g1 J$ z$ C - *
1 }0 W" q5 X; ~* Q$ o8 N. F - * This file contains EDMA3 Test code.
8 y) u/ g. ^0 X% J ?/ Q5 g - */ p! O! v% m2 u3 ~! ~7 t$ n
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE6 ^3 n) v9 G6 R5 M& E
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: e9 s, S0 i1 }- s' H( {. b - * TO CHANGE.
& t% ^4 m5 j% t# Y - *
* ?# @" F( A! [ - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
! o. B0 ~6 e: F6 L, b - *
) {) E. Q; t2 F' s6 i+ @- ], `: t - * This program is free software; you can redistribute it and/or) i* D( z, S- h. p% y0 j1 X$ v
- * modify it under the terms of the GNU General Public License as
2 m' ?& q/ b. `8 X - * published by the Free Software Foundation version 2.
+ n7 o. k$ Y; A( x. ^8 I s6 O, R1 X - *2 o: _ k+ ]+ J, K
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
9 M$ ~2 o$ G$ ^ - * kind, whether express or implied; without even the implied warranty/ a/ @. ~4 X; f( c* U0 n
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the8 M( Q e. x; F6 s6 [
- * GNU General Public License for more details.
- |! _. i! v! ]4 ` - */
+ h* ?/ R; H7 E/ M- {/ ]
z/ p* u- Y7 W" w8 L) y3 _- #include <linux/module.h>
: g) ^+ n; ~4 x7 i" C2 E - #include <linux/init.h>
k1 S$ C' L {! j- |- K# w - #include <linux/errno.h>
' }' l! t5 w+ H+ c' w - #include <linux/types.h> j1 o, B8 g- Q1 E& O9 x
- #include <linux/interrupt.h>
( u6 D e' b& [, ]1 q% _ - #include <asm/io.h>
2 q! E8 z8 ?- {6 X+ Z. d/ ? - #include <linux/moduleparam.h>
& ^( H: }# J" p1 N - #include <linux/sysctl.h>; ]3 m4 ^3 ^4 y9 S) E6 }3 E
- #include <linux/mm.h>3 {# q- I4 e0 f# `% s# D1 W
- #include <linux/dma-mapping.h>1 @9 B- Z9 u* ~8 m2 u
' N% W2 o: i" E- b3 M- #include <mach/memory.h>
6 L$ {* g: I; S8 B2 [1 q - #include <mach/hardware.h>
J9 G" c+ `1 J1 W9 w) P - #include <mach/irqs.h>
5 l: K: O w7 |" C8 ]6 J, ] - #include <asm/hardware/edma.h>
3 j, P5 y9 }- a" z
1 N" R0 V/ z% R3 V" I- #undef EDMA3_DEBUG) m4 _( j; H! v
- /*#define EDMA3_DEBUG*/1 g* F' Y9 b+ q% ]1 ~7 R5 u5 A
- $ r1 k' v( p+ k( y2 b) p
- #ifdef EDMA3_DEBUG; q6 ^; \3 l$ g! `# ]: F' S2 b
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 J V; Y( \3 x) A! ~/ t
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
; [- }; b! \# u$ m+ |* k7 l4 S7 B6 K3 s - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
( E# d6 ?6 W( b/ H# ~ - #else% g8 S7 a% D- Y( M# _
- #define DMA_PRINTK( x... )
# A; R* z G& P) ^% O. m% i - #define DMA_FN_IN9 G2 z" [+ K3 F! W
- #define DMA_FN_OUT2 P4 ~: W' \; s9 U/ ~# T4 o
- #endif4 e8 L6 z1 j2 J; S- p( T0 U
& o( y7 M2 V- q2 X4 {8 _2 E% K2 y7 v. r- #define MAX_DMA_TRANSFER_IN_BYTES (32768), I+ B' F7 E3 O4 ]5 H ]2 b
- #define STATIC_SHIFT 37 |. Z8 T/ ]$ `- `+ ~& g
- #define TCINTEN_SHIFT 20
4 p" _! X/ N) j1 U - #define ITCINTEN_SHIFT 214 M2 ?: x; M1 A1 s8 w
- #define TCCHEN_SHIFT 22
6 v. C/ O) v' W- l - #define ITCCHEN_SHIFT 23
! E0 I$ k% E6 v7 T( Y - / D# z" f% s0 \) d# f) T
- static volatile int irqraised1 = 0;' Y* @* G$ }/ {& }5 l% [
- static volatile int irqraised2 = 0;+ S. g0 l, @( m
- . B/ W7 {# @& V& b
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
+ i; M3 m2 K5 ]7 d* m - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* l, \8 L0 u6 X3 y9 n$ w
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
. ^; f( ~. x+ X% P4 k - ) S4 N; f( n% {. ` l7 h. j# `
- dma_addr_t dmaphyssrc1 = 0;
) B" i# E6 a+ _* r - dma_addr_t dmaphyssrc2 = 0;
8 Q" f" G) H& \! G - dma_addr_t dmaphysdest1 = 0;
! P5 ]" ]+ b M% t* {* [3 T - dma_addr_t dmaphysdest2 = 0; }/ _6 a$ t+ `+ Q; d2 ]
- ( D3 n7 F1 k* i8 J# \
- char *dmabufsrc1 = NULL;( k6 c6 P3 K% Q- y
- char *dmabufsrc2 = NULL;1 K0 x- i0 `6 `' ~( q! |* r
- char *dmabufdest1 = NULL; ^# y: d5 i: P( {; L% u
- char *dmabufdest2 = NULL;
# n6 B' v+ V6 f$ M8 B8 E6 u6 f/ Q0 @$ D# e - & n5 ~) ?+ a: u2 W# A2 \% ~, }/ Q
- static int acnt = 512;
4 q5 E! a' L$ z3 Y# j2 [, o - static int bcnt = 8;: \" l7 \. I, b5 _0 u- ~
- static int ccnt = 8;0 Q d: `; w3 D/ b. \! u
, \* x! M$ d, |( d+ h- module_param(acnt, int, S_IRUGO);
3 ^; K6 ^$ i! J" R6 I% c# p" G - module_param(bcnt, int, S_IRUGO);
( Z/ ?9 v' Y# v9 }/ ]+ X: E - module_param(ccnt, int, S_IRUGO);
复制代码 % e: W( K: Y* r* v
/ }; I ]7 f! V7 @ t 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用 H6 n/ Z9 i5 E) o _) @5 h {/ a
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。# {9 e$ x, _; |, h, X! Z- D
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。0 ^# e! x. O; T8 I! X
, M4 p, s z$ G4 f A# U
% U9 F( _' J/ Q# }0 E |
|