|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 6 c: u" n% } m2 T* ?
- [code]EDMA sample test application& H' y4 j1 @& q( p1 z+ j
- /*" B: o2 y+ _% w7 q3 w1 j5 h2 m
- * edma_test.c* J! w1 m Q# }4 B, t
- *# r4 X, `4 j3 q; ?+ Z y c
- * brief EDMA3 Test Application
; d/ t- y9 P# i: G8 Z+ c" F4 d - *
' [" U( q5 }8 I( y7 Z: o& a+ q - * This file contains EDMA3 Test code.
4 H1 ^* r! A' {* r* M; B - *$ w; j0 R3 P7 }& f0 A. q, a$ ]
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE; S! A1 y* P" t0 A/ [
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT7 e0 `$ o# b6 E9 g" w
- * TO CHANGE.
$ k3 u. F2 ^ k - *
* `2 Q# F9 q0 b# h7 V - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
; K9 E$ B5 Y% s - *
5 P$ W1 a; D% P, x& a - * This program is free software; you can redistribute it and/or
6 P( i) d3 i# i% j - * modify it under the terms of the GNU General Public License as
: B$ Y) s4 z9 N% M: y! b - * published by the Free Software Foundation version 2.9 @( _+ t4 X& o+ M
- *4 H+ a3 P3 Q# p7 H3 O
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any5 O) ]2 I; v7 V7 w$ Z
- * kind, whether express or implied; without even the implied warranty
) e( L8 I6 @, f( S9 a - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the; `& z9 y( ?7 H1 \, ?
- * GNU General Public License for more details.
7 V$ l. G/ z) e" d# ]7 q - */
9 E! G2 [1 \4 _" y4 E' {3 Q5 F. y - " D ~* c+ v& [% V2 ^, T
- #include <linux/module.h>, G* l4 r! m. w j* W! T' n# X7 E
- #include <linux/init.h># g5 K& X+ y' ]2 }+ |" J
- #include <linux/errno.h>) n4 u ^3 D* r- R2 S" Y& u/ m
- #include <linux/types.h>, @" |: S& J! u7 A2 j
- #include <linux/interrupt.h>
+ \! |& i1 E7 l1 }# a8 S - #include <asm/io.h>
) N% [5 c1 z8 W0 `, @ - #include <linux/moduleparam.h>
9 i( x3 ^5 L: J9 X - #include <linux/sysctl.h>9 ~2 n9 B/ [" R7 R" s3 \2 x
- #include <linux/mm.h>
: l. A7 I0 H2 F6 g4 ]1 J3 v2 h - #include <linux/dma-mapping.h>
+ }! ]3 [/ Y+ G4 G - 2 f: b( P' @- {* ~
- #include <mach/memory.h>1 R- e& w/ J- Z6 {! S7 w
- #include <mach/hardware.h>
* { C, T5 a- V - #include <mach/irqs.h>
" u' ? E% L# T' O C% \ - #include <asm/hardware/edma.h>
- t9 F9 x* o' Y& t7 d4 l. F. l) k
+ s6 w: C' t, p' B; u; Z; F9 ^- #undef EDMA3_DEBUG0 I" W) s* n! H Z+ y6 r, G
- /*#define EDMA3_DEBUG*/5 ]0 D# J o3 ?- C* {3 d( v2 p1 l
* p8 d. o$ _, |4 K- #ifdef EDMA3_DEBUG7 n3 t! k! \' r# w0 G0 q
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
/ y- H. z- r5 i - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)5 c; A6 Z1 o w' {& h
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( M+ C* ~& L! \- m9 y! K6 j
- #else4 ~7 g, X/ s. i! [1 E( z" v
- #define DMA_PRINTK( x... )0 B0 k6 C2 g$ A: Y5 U
- #define DMA_FN_IN
0 x p" R: `9 {0 }: b - #define DMA_FN_OUT- t9 T, l+ [3 ^ e
- #endif: f0 a& ^9 c* z% A
- 1 B" O M) b1 Q" B
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)# E9 ^/ `7 z$ |4 U. \ i: X
- #define STATIC_SHIFT 3* U* E. D5 Q8 l8 w: x
- #define TCINTEN_SHIFT 20. j" ]1 U' R" \4 |1 R& Y3 a7 g
- #define ITCINTEN_SHIFT 21
; d$ h1 ^; A; s/ f T. L/ _: u* M - #define TCCHEN_SHIFT 22
5 W! F& V- ~" C7 A" v - #define ITCCHEN_SHIFT 23; l) F( S) e4 g
) e l: q& j7 R2 G3 u1 {; k; |: F- static volatile int irqraised1 = 0;8 u% s$ v* M! t4 ~
- static volatile int irqraised2 = 0;
8 X/ G3 P. |$ S2 h9 l8 ?# i1 g
* N) v9 @. F6 c! D; k6 J- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, N: p, \: {* g* I% k8 x
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);9 P$ C, S# e; Y- z; @
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);# H+ S" H+ d! K
" y( ^& ]8 {6 E& U$ s1 e- N6 H- dma_addr_t dmaphyssrc1 = 0;$ [2 T: Q' k+ L3 _
- dma_addr_t dmaphyssrc2 = 0;
& b# u3 A( o- A, [4 Y: q3 K - dma_addr_t dmaphysdest1 = 0;0 s+ a+ J8 Y2 r8 p0 @
- dma_addr_t dmaphysdest2 = 0;
' K8 ^ {6 E u0 m# K5 { - 5 d3 K' ?2 G3 p% \$ J- S
- char *dmabufsrc1 = NULL;
* s; U. l6 I! j4 t3 M - char *dmabufsrc2 = NULL;
1 w9 E: Q2 P7 @* i8 I- }# f - char *dmabufdest1 = NULL;
+ `: t9 m, H0 A, e& L - char *dmabufdest2 = NULL;; i2 X' O* {: S5 F+ V" F! e* w
9 c8 Y3 z( ? h1 Q- static int acnt = 512;
% `' H* l" I( T ?: y9 I6 g - static int bcnt = 8;2 W7 H# [$ d9 Q0 L, m4 E
- static int ccnt = 8;
( r. i9 ?, S; `0 P9 A, {) F T
2 K5 C' e5 T9 d% h5 k- module_param(acnt, int, S_IRUGO);
( m7 i7 Y* F! `/ y - module_param(bcnt, int, S_IRUGO);/ \) j0 M. @5 f& h! @. [6 K
- module_param(ccnt, int, S_IRUGO);
复制代码 ' o; b$ T* v' [! Q7 B9 S; a0 o6 Y
# {! k( K: e9 Y$ |, ?' ~2 H( N 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用1 u+ w. G* P: E. `
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 |, m1 A/ @) {1 W# C9 n 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! h: j. c8 e8 ^+ B: d2 x. Q8 F# V( @$ j: o! d
7 R% H) F# A. x/ V) ^1 U& _0 P |
|