|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
7 t9 ~1 W! g8 b: N/ Y% v6 c* X& X, K- [code]EDMA sample test application: M9 w: |/ h$ S e" P" d5 H1 ]
- /*
; y/ i7 X# Z$ D - * edma_test.c
0 L8 E/ E6 O; l3 r, h - *9 ]' F0 R( o7 R; C: {2 G) g. @+ b2 \
- * brief EDMA3 Test Application
& W/ k+ i, b8 @; V( k - *
: O, ]9 K! T2 W - * This file contains EDMA3 Test code.
- o/ R, G, U! T6 A5 g- ?- \& a - *
0 ?9 K0 g E. d+ Q - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE0 c3 {$ N* V' J* [3 I7 g" f! p
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
: p7 T, a( ~. ?! c: ~ - * TO CHANGE.2 h, |! m. Z% y: ]: U, K4 q
- *5 y/ C) |8 ~, \" F" }
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/, J: R- `4 _% i: y& O) q# j
- *) m+ H) {0 W0 D' H9 q# y& \5 d
- * This program is free software; you can redistribute it and/or
9 J5 I% Y% k$ E" K1 l5 @; }1 ~1 O - * modify it under the terms of the GNU General Public License as6 Y3 W0 K1 ~/ R8 u
- * published by the Free Software Foundation version 2.
6 B1 S+ Y- n4 }9 Y2 F2 n9 b/ U - *
6 C2 n6 v( P8 i+ x2 [- J8 U - * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 w, b, T" v4 W) ~) O* m
- * kind, whether express or implied; without even the implied warranty6 v; l$ o$ O/ K. b7 K
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the1 e4 `! m$ @9 t+ d+ [& P8 E( i
- * GNU General Public License for more details.
7 M6 Q, A& S: x8 |/ N+ T - */5 ]( `6 x, z- o# ~, G
- & _" a1 u/ M4 p8 m/ g$ j# \
- #include <linux/module.h>4 F# Y/ c, u. L$ ?
- #include <linux/init.h>4 H1 F% d' E3 O f: n$ f
- #include <linux/errno.h>
# s4 e( k" ?8 B' O8 v* ^+ w" a; X9 @ - #include <linux/types.h>. A, O; Y1 M6 B4 H* Z" F! c
- #include <linux/interrupt.h>
, y1 k& h- N# I4 H. Z% @% i- v2 b! d - #include <asm/io.h>; z I1 r. F) Q- n, f
- #include <linux/moduleparam.h>
7 ?8 a0 K; ~2 l4 O9 | X5 d/ J - #include <linux/sysctl.h>, Q9 d0 F8 ]$ _- m1 h
- #include <linux/mm.h>; t# i. i9 V9 W+ n# E& z
- #include <linux/dma-mapping.h>7 U) `# r* O' Y% g6 B
- p3 r9 ?0 U; H6 U( S1 ?; V$ a" V- #include <mach/memory.h>
' X3 S z: M* T& h" j8 N3 ~ - #include <mach/hardware.h>
+ P# K. _/ N9 d) W: X7 |3 f* k) A - #include <mach/irqs.h>( V. B# a9 p* J" A! o
- #include <asm/hardware/edma.h>: b% S& ?9 O$ m6 C' g
) r8 b! Q6 w7 s" P, s( Z- #undef EDMA3_DEBUG
% L i+ v" b2 D# f - /*#define EDMA3_DEBUG*/! F6 j" ?7 Q+ z9 l- u% M% @) y9 p0 c
# j$ w7 u6 q* ~3 X9 u- #ifdef EDMA3_DEBUG7 v. b v9 x7 D, z$ \! ~
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)1 A" Q* Y4 _- Z
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)! n# s3 x' _% D6 D! E- o* C
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__): M. ` ?, Y3 }( E& G' G, e
- #else3 `7 b7 b# Z4 E
- #define DMA_PRINTK( x... )& D& q- U, p& |: A7 _
- #define DMA_FN_IN N" h" S E7 E# j) W" m4 A$ ~4 U
- #define DMA_FN_OUT! O) y2 Z3 ~, @! |" y2 L! @8 r6 o
- #endif, p$ z6 Z, }2 q& [$ Z( W! A% o9 A
! e9 N+ {# u: P* C0 ^2 X, h- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
& l* |6 R9 ^4 s+ p. s8 h - #define STATIC_SHIFT 3
' Q% ~- R) U: ~ t5 C' ] - #define TCINTEN_SHIFT 20& J' F2 ]& u0 g; D, A8 M' s" j, `
- #define ITCINTEN_SHIFT 21
( z9 @; @, M/ k- q* V - #define TCCHEN_SHIFT 22 a& R7 ~$ N+ G- L
- #define ITCCHEN_SHIFT 23
9 `+ p) c+ f6 i4 a8 F - ( A& n1 k8 b2 I. \* K& o" D& D: u
- static volatile int irqraised1 = 0;6 I4 r9 p$ v( ?, K2 T
- static volatile int irqraised2 = 0;
. |+ {- B; o5 D- Y6 S8 y- y% d
1 _7 A8 C4 X% i' H2 o- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
- i- r) k! P3 y1 v' F - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);; O7 w" K1 K3 u! |( o7 H2 N9 }6 [" d
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
4 J# ]& q! J0 ~% S
) A* t- y8 K* m- x- dma_addr_t dmaphyssrc1 = 0;
k( N# {/ x7 d# k* Y - dma_addr_t dmaphyssrc2 = 0;1 U$ d3 w& V; B0 F# y8 P/ R
- dma_addr_t dmaphysdest1 = 0;
1 z7 W/ U+ D2 O# W t - dma_addr_t dmaphysdest2 = 0;+ J. |8 _! @' v. F
6 ~; @/ ]! W* H# C! @) \ _- char *dmabufsrc1 = NULL;8 } [8 a8 l7 R0 c, L
- char *dmabufsrc2 = NULL;
( G" h$ \4 O& X& X( o8 a - char *dmabufdest1 = NULL;
, ^: I2 V( K R I* E - char *dmabufdest2 = NULL;
1 i2 ]3 ^0 G! S/ a3 i
" j# j- v0 H4 a- static int acnt = 512;
: y; N8 U" J8 w- O - static int bcnt = 8;' J2 n+ w& m! j+ H
- static int ccnt = 8;! ~4 v( B; D1 f1 ?) K" p4 b$ T
) j4 {0 @( v+ ]. I. p2 X- module_param(acnt, int, S_IRUGO);4 M0 M9 P! m. ?8 ]3 C3 _
- module_param(bcnt, int, S_IRUGO);
+ z6 g" |) k5 I9 _. C! n - module_param(ccnt, int, S_IRUGO);
复制代码 . R" d' l# t. P% W! r8 _$ R+ i
% A1 c. E. C9 B$ S! g# z 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
1 j E1 A: s% zarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。( R* ?. h+ L4 m [. O0 |
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
: R- h0 @0 a+ j2 j
: C0 c: O4 A& a, L9 t! y6 W3 Y7 D
; ~0 I6 k& ~; X) _/ j |
|