|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 . T* D. p; C4 u' B M# w/ {
- [code]EDMA sample test application. p5 J, I" N$ A2 o
- /*8 j( m3 `2 v/ V Y$ A, y6 M* C
- * edma_test.c" d" L) ?- p* m( x6 W* `: M7 w
- *
7 W9 N/ E. h. J, X: C8 B - * brief EDMA3 Test Application
* X# U. |# e7 C1 d5 V: X4 A$ W1 z% r - *- O* ?9 y7 ]; b {4 f3 q0 x
- * This file contains EDMA3 Test code.: m) z' J5 E3 q: S$ i
- *
5 n8 V4 @+ g* E7 G+ _+ }3 o6 F - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
# Q' p& P' h; J - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
$ F% o; l: o! G8 p. R. N" ?7 q3 K - * TO CHANGE.: u$ N0 e5 Y# A/ L8 V/ Q
- *7 h6 }/ ~9 V2 _ C! g9 F! k" o1 g% I6 L
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 e: m7 e5 F U* U4 {3 q
- *& H" H& B" d L# X7 U# Y
- * This program is free software; you can redistribute it and/or0 i" y- S A; @" @! W. V+ F. L: R
- * modify it under the terms of the GNU General Public License as
# f# p/ h: Q+ c) g/ R5 z2 n - * published by the Free Software Foundation version 2.6 P- y+ }9 a/ [ m' l* y# ?4 h
- *
) |' O. p) F$ e- O - * This program is distributed "as is" WITHOUT ANY WARRANTY of any t0 T/ H. x- N' h
- * kind, whether express or implied; without even the implied warranty" F2 O- t3 n, c, ]( |4 {/ e
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the, j7 [! g$ i9 @( K
- * GNU General Public License for more details.# M% x- V: E1 E
- */
3 p" f! }: ` G5 T, Y- Y
; _ K. Z" k u$ I! j' A- #include <linux/module.h>7 I% S2 P( C( O; S" w& W- P
- #include <linux/init.h>! E. O' {. \' Y3 G
- #include <linux/errno.h>
* d- Y6 {& b3 b( {+ k/ C - #include <linux/types.h>: G+ h: h6 A7 S4 t
- #include <linux/interrupt.h>
1 m8 S% C- x2 ] - #include <asm/io.h>( }* ?# S; r, f$ G, G% F
- #include <linux/moduleparam.h>
( r- N1 f) @+ o4 i - #include <linux/sysctl.h>
- K3 n9 K2 k% ]9 W7 Y - #include <linux/mm.h>
) K8 s" ]0 V$ d" ]6 S - #include <linux/dma-mapping.h>
! H, z9 l9 Z- v2 w2 s( X% ^ - $ W# [6 d; c+ }
- #include <mach/memory.h>+ H. g8 u: s+ @# S
- #include <mach/hardware.h>
% s, W' q& P: `& [" L - #include <mach/irqs.h>3 b3 b3 F* R c9 T$ Z6 s1 _2 i
- #include <asm/hardware/edma.h>
' A1 C4 Y) D y. c
9 \( z( [3 J+ b+ \2 u- #undef EDMA3_DEBUG, f0 }2 F/ h3 e0 v% A
- /*#define EDMA3_DEBUG*/
) \" l! d% v5 Z+ V- l" J! ~& K - ) H% G/ S* F2 E* y" D( X, k
- #ifdef EDMA3_DEBUG
' \7 d+ z1 C% C- w$ g( E! Y% P- e" P - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)/ @8 e# ~" P' p
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
' [% ?/ l8 Y& ? - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)8 _3 o1 C, j7 {9 {
- #else( @. y# j! r1 \$ i
- #define DMA_PRINTK( x... )
& X+ ?& y3 Z4 t/ i - #define DMA_FN_IN2 C2 K. P1 ?/ j+ W/ @$ A# h
- #define DMA_FN_OUT6 O* v2 g" f+ v: h
- #endif
. i4 i7 [: p3 j9 [* H9 d! |# d
1 \1 y$ \; Q, _, t1 U. u- #define MAX_DMA_TRANSFER_IN_BYTES (32768)+ f, y6 z& L4 u- U
- #define STATIC_SHIFT 33 u5 L5 B; t7 b1 W) l
- #define TCINTEN_SHIFT 20
" Z/ x$ ?/ w7 \ - #define ITCINTEN_SHIFT 21
. l& h5 p m( U- G# e; H - #define TCCHEN_SHIFT 227 T! q" M2 U' ]$ s. @! R l
- #define ITCCHEN_SHIFT 23" c7 n- M3 I, m* T7 J
, A+ G' X7 a- V! `9 o4 p; t- static volatile int irqraised1 = 0;
$ k- H ?. `3 r! @ - static volatile int irqraised2 = 0;
- ?8 d: m. q5 e - " S6 ?2 ~( m" h4 t
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);& I9 T4 K" h1 K
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 y z/ E9 [) V2 \* u8 ^3 h7 G - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
* y3 U& F$ {2 D+ Z% _ - $ `1 k, g6 {: D; M) D3 [+ z& g0 s! H
- dma_addr_t dmaphyssrc1 = 0;
) ~+ q' K, ^! q# T9 R - dma_addr_t dmaphyssrc2 = 0;
9 b) D: T1 a) ~8 S5 ?4 P - dma_addr_t dmaphysdest1 = 0;& T# }. f/ x8 S9 a1 G9 S
- dma_addr_t dmaphysdest2 = 0;. Z3 J: \* i9 B* m7 C
- + ?- J* @% R: p v
- char *dmabufsrc1 = NULL;
2 D0 e: [) K! x - char *dmabufsrc2 = NULL;
- G& z# n' ]5 V' N - char *dmabufdest1 = NULL;. b# s3 u' H& `
- char *dmabufdest2 = NULL;
! i. `2 |% l+ A+ X% L
9 }2 P% O; _1 _! f! R1 |) x+ k- static int acnt = 512;
9 z4 c8 M1 u/ h8 m6 T - static int bcnt = 8;
- a8 J3 ?) l/ M - static int ccnt = 8;2 n. \7 n b. X- d: w& ?
" s" O* @6 `$ W% W! ^- module_param(acnt, int, S_IRUGO);
, O7 D" m `/ {) z, `! j. a - module_param(bcnt, int, S_IRUGO);
; |4 X$ e" S U5 s% V2 Z8 R" | - module_param(ccnt, int, S_IRUGO);
复制代码
. w$ {7 Y% a7 n$ D
5 \9 b+ s) m7 H" Y) U2 G5 U# _' y 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用; V1 t' `' y4 j( b
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。+ g- t4 d* S. z8 O6 {/ `" b- X+ H
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
( l% a, I& }' g/ u" J! s+ y) r) H( u% F
% ]; H2 o5 Q6 a# c; g
|
|