|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
' \( z- l, ` S7 G0 K- {- [code]EDMA sample test application7 W9 u4 w, s4 h; S& _8 @% v6 T
- /*
( N; q \, Q5 B g/ n - * edma_test.c
5 a6 p- R, z" y5 _* J& ~ - *
/ |3 o/ C+ K e2 r' K1 ~2 o - * brief EDMA3 Test Application) n \: T* c$ n) b
- *
0 W6 q+ C) t5 ^. e - * This file contains EDMA3 Test code.
+ T; Q# B: H, D% z6 v7 ^* H6 q - *
( m& p+ ~' M$ f7 I6 ]) S( H" h - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
1 w, [6 y5 y% {) m$ U, j7 Q) G4 C0 D - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT3 D! o6 b% m2 c+ A* I; a G9 v
- * TO CHANGE.- a3 O" m8 Z. Z7 A( Y" _/ H4 h
- *: X9 v! s* A# M$ N, v
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 A& p6 l! c+ u2 l& x/ C
- *2 a3 A0 W8 E! j( r3 `
- * This program is free software; you can redistribute it and/or6 x3 M; P) Z8 U# B/ J- q: X1 ^
- * modify it under the terms of the GNU General Public License as# }8 d) F% L' C4 C0 m! A( r, a
- * published by the Free Software Foundation version 2.. C# v* S$ R H. A* _
- *9 i2 ?6 |, Q% X; m) z
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 y- b" d" C; C+ \6 \" r - * kind, whether express or implied; without even the implied warranty
; F8 N# w4 x- c7 \ - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' Z4 I* R* |! k/ k+ p- N - * GNU General Public License for more details.4 |. \# i" t Z" J
- */
; @4 A3 Q; T; |! I# T5 S
8 R y% n0 x5 {7 k) O- #include <linux/module.h>- P8 K" t! N. o M8 Q
- #include <linux/init.h># b. [" s% Y% s& R- ^
- #include <linux/errno.h>4 w/ s# d2 h( z
- #include <linux/types.h>0 P w4 b8 ]- ]# I: w3 o4 b
- #include <linux/interrupt.h>
2 e8 B5 Y2 z* e: b6 h: K - #include <asm/io.h>
a0 N6 h- t" p0 }4 h# m - #include <linux/moduleparam.h>
( l8 e" y4 R3 y+ h - #include <linux/sysctl.h>
; J! y; v* \1 F1 C* I. @ - #include <linux/mm.h>
! N) z/ i* J9 `, b - #include <linux/dma-mapping.h>
7 F; u$ Q! d1 b' x$ L) h" q - 1 I/ e* T7 ?4 a# T% q/ N3 v! O
- #include <mach/memory.h>; L8 c+ s: X, Z3 I2 e5 s; H6 o
- #include <mach/hardware.h>
* ^# B0 r. s2 U- t+ W# l& g$ H2 d - #include <mach/irqs.h>
1 p* v" m& `& w3 z# w" j - #include <asm/hardware/edma.h>' g7 y b6 R" J5 S
3 M4 c9 }2 @; @/ b* {+ n s7 G- H& @- #undef EDMA3_DEBUG
2 p5 o# j: s5 ]: Y: w - /*#define EDMA3_DEBUG*/
9 |+ S5 s7 u5 y5 k0 U - 8 S; l2 `" q! i. \7 U
- #ifdef EDMA3_DEBUG
( X6 O# n, t0 R" ^( ^ - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)% c. U6 X; V% i" a6 v Q( I2 \, d' s
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
& m7 ] e, g9 H: D# m9 x8 v - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__), E' p; v1 t0 P& B' a6 O
- #else$ [ Y- k$ _* \
- #define DMA_PRINTK( x... )
. G, j, T2 n- a: e5 d4 L - #define DMA_FN_IN0 t9 R, Q* @- j, R2 \- I& J
- #define DMA_FN_OUT
& j& D0 W" a1 t6 r - #endif, J5 o" V+ G. \. a
- 5 j/ a5 P! a# {, j5 s
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)8 G& Y& o Z/ N% @" G# v; C4 G
- #define STATIC_SHIFT 3: O* O, ]" t0 t6 s! M* w
- #define TCINTEN_SHIFT 20
+ x8 Y# q, l. Y3 E, L - #define ITCINTEN_SHIFT 216 r. u' C3 I$ d6 H) \) o I$ ]
- #define TCCHEN_SHIFT 22
0 X2 r$ Z5 @. K# Q$ R - #define ITCCHEN_SHIFT 23
( Q; N- A6 q$ K& i) M& E
( \, H0 G# T0 U9 C- static volatile int irqraised1 = 0;. H, n u' G$ J
- static volatile int irqraised2 = 0;
R/ B; U( a+ x - 2 e" H* j" J ~, l. ~5 q
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
9 L. `$ `+ l& S0 S' e - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* d/ q9 _9 v0 X
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( w( F! s9 l `2 @; E
" z4 `2 _0 r, B1 {9 O/ w" C6 Z N- dma_addr_t dmaphyssrc1 = 0;; i1 h! S4 z0 f; Z
- dma_addr_t dmaphyssrc2 = 0;4 C( O$ b: ` M% q! V9 J6 r
- dma_addr_t dmaphysdest1 = 0;
- S) u2 ~5 B- i1 |) q - dma_addr_t dmaphysdest2 = 0;
/ m# q5 D( D2 o | - " v( t9 ~& G; p" k+ c
- char *dmabufsrc1 = NULL;
1 v) v, q% x/ o* [ - char *dmabufsrc2 = NULL;3 h4 G( I! F4 f& L+ A0 C
- char *dmabufdest1 = NULL;2 @6 Y, l/ ]. ^/ c$ u
- char *dmabufdest2 = NULL;
4 e$ ^; f( T$ \7 B4 B3 \/ F! K8 ^ - 9 E" G, W$ N$ {
- static int acnt = 512;
8 C1 _/ C0 a- f: w7 G/ F - static int bcnt = 8;5 Z! N: \6 p( b2 K3 Z- L" N! d
- static int ccnt = 8;8 j4 j3 N# N# f, H
& |8 h$ B( d5 ?2 _/ ^( V- module_param(acnt, int, S_IRUGO);+ I& w8 W7 g- R+ g2 f6 v
- module_param(bcnt, int, S_IRUGO);
* _2 x" l" h3 s. w1 |, u) _ - module_param(ccnt, int, S_IRUGO);
复制代码 2 f5 N: a k, B; ~4 f
' C) O8 y8 z0 W' W& G9 ]2 _# F0 l+ [ 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用$ V0 m6 z0 ]4 N) s- E+ f6 X
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
# w' A4 T }, d6 D 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。6 b2 _/ T) V& O0 u
6 e+ B" U" {/ i' l$ {& C# T/ T; }. L# C2 g
|
|