|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 . L2 ]% \! |2 ]6 M* E
- [code]EDMA sample test application1 j9 l) @9 B5 C. i; K3 n: k
- /*
1 [+ x" k) o/ W+ t F - * edma_test.c$ _' b8 h! F2 w- T% _& ]! h" L
- *$ b0 E7 z% ^( B
- * brief EDMA3 Test Application* k# M$ n% Y9 ]0 t1 C6 n
- *
' D* R' i8 G. s ]. V# E - * This file contains EDMA3 Test code./ ^3 r6 F# D* q2 Q
- *
( G Y/ { @5 X' l% C2 P5 b4 K - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE: J# I8 [4 \, u( t2 `! }
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT4 c9 o/ [% a* T5 s5 i. Q v
- * TO CHANGE.- ?* A! C# d5 w
- *
: r2 J" p, d# | - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
V/ Y) U* }- |1 @ - *! L( q0 D: a* }+ M# N8 [
- * This program is free software; you can redistribute it and/or
4 Z8 Y+ ^4 M1 L - * modify it under the terms of the GNU General Public License as
* O. y+ ]6 {, P' I3 g% K - * published by the Free Software Foundation version 2.
2 Q! r a$ ^5 P& V; V" J+ I+ w) Z - *5 |' S7 f) {( J3 j2 K
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any
. E c2 F7 w3 m1 F) g! N - * kind, whether express or implied; without even the implied warranty, N3 |8 J& W: K0 { D0 I7 k* f3 v
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
: s4 M: F6 v% U' M# y# B, u5 A - * GNU General Public License for more details.
4 s0 x% ?! ~% J2 _, w9 V7 H - */. w6 b) l/ r2 ?# S# E
9 z: W# `& J3 R; P6 H C; T9 c# @- #include <linux/module.h>6 |( T7 c ~3 i- M* _
- #include <linux/init.h>+ ~5 R: P5 l: Z) o& g
- #include <linux/errno.h>& L8 b- t* E W9 A7 n8 j
- #include <linux/types.h>
; c3 o. B1 @5 j, i2 P. q, A; _ - #include <linux/interrupt.h>) w" O F- _8 |4 G. P v; e# j6 n
- #include <asm/io.h>
2 a8 o/ t( z) { - #include <linux/moduleparam.h>
( K6 P/ L+ `( L; F' ^+ i; J! I - #include <linux/sysctl.h>
# a1 t1 K. J, D( P2 a/ w9 l2 ]6 i - #include <linux/mm.h>
. u" u. F: j9 ?- s - #include <linux/dma-mapping.h>
) x8 r+ |3 U; z0 {! k
7 i6 a; z6 i* b" V1 X0 ?- #include <mach/memory.h>
' I3 f6 Y' \- h+ u - #include <mach/hardware.h>
5 ^5 e" ?) C8 q1 P9 ?- C8 ^ s - #include <mach/irqs.h>
. X5 w5 p. B( k- ?4 T2 w& k - #include <asm/hardware/edma.h>0 m* ]4 `7 }7 u6 k
- ( T% Q2 v+ w G. I( Q3 w: v) ~9 M
- #undef EDMA3_DEBUG
7 A! e" e! ?! w$ c6 ] - /*#define EDMA3_DEBUG*/
6 J4 D* F% X9 Q3 v
+ V$ ]/ x6 H! S7 Q& b# s; W4 G! i5 l- #ifdef EDMA3_DEBUG- }- Z6 ~$ @- M
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
7 K& v% M b) C3 n - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
/ N- p) w8 J, ~ - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
+ ]- Y0 ^2 Z* n- S* S0 s; w - #else/ E' U/ v1 V" }7 U/ n: Q8 A& Q
- #define DMA_PRINTK( x... )
5 q. i2 F( ?) U - #define DMA_FN_IN1 l$ z9 h5 Z, K
- #define DMA_FN_OUT
6 n/ T* g. Q% n5 p! ~" Q - #endif. u9 W% K8 l K' }$ W
- ) M* `- M. D8 \) \" z
- #define MAX_DMA_TRANSFER_IN_BYTES (32768); M: c0 a% Q& _% s4 K' i- u: C+ b
- #define STATIC_SHIFT 3) Y: g4 }, \, n
- #define TCINTEN_SHIFT 20
+ A0 O0 s0 N5 I+ x, g - #define ITCINTEN_SHIFT 215 q0 Y2 I* U* I6 v
- #define TCCHEN_SHIFT 22
6 n1 {6 Y; L4 g' W7 I - #define ITCCHEN_SHIFT 23
) ~/ J! v* I- T0 h
+ S' N' u P- k6 w$ Z; I- static volatile int irqraised1 = 0;
2 i0 R D+ p2 q4 O7 l1 N - static volatile int irqraised2 = 0;$ c6 s+ Z( [* R: P" H+ \5 h$ P
- 3 G# \* ]6 i$ {+ H; G& E1 ]
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 e/ K0 [+ U: M# b; V' {7 k - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
( Y- F) |: { z - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. G. p$ T( d+ R
2 Q- O3 _. \7 d9 E- dma_addr_t dmaphyssrc1 = 0;' n( J$ S, o: m# d. V9 W5 @$ d# P* ]
- dma_addr_t dmaphyssrc2 = 0;: L" V/ P" g! w% }0 q
- dma_addr_t dmaphysdest1 = 0;
0 L [+ o7 g( c% A, w( j - dma_addr_t dmaphysdest2 = 0;& p& N5 L" m; Q# K) J
- # F' h8 h0 g; b
- char *dmabufsrc1 = NULL;, [* ]) n) p& [8 J
- char *dmabufsrc2 = NULL;. e/ r# B( w' g) d/ H" r; b
- char *dmabufdest1 = NULL;- k9 m7 M% e! b& ?/ N
- char *dmabufdest2 = NULL;
1 ~& L- }* _& S' l4 @! v+ y3 t/ A - $ H# R5 ]7 j# _6 z) e5 `
- static int acnt = 512;4 I" J- k$ m( [- t4 e( ]
- static int bcnt = 8;! p b$ n8 [1 i' O
- static int ccnt = 8;$ Z* c( [* J' u: o
- # _5 n. _' b6 c& k9 ]( j' ?7 ~
- module_param(acnt, int, S_IRUGO);
6 D2 o L4 u* m( j$ a - module_param(bcnt, int, S_IRUGO);" r9 Q! b" q: L6 R* X- I' x+ ]
- module_param(ccnt, int, S_IRUGO);
复制代码 % u& j% K# `' ~: t, Y0 W& t( P
& x9 a- ]; o# t3 ^* K 这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用% J9 \9 j# I) X3 A+ w( n8 ]
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
1 r& ~4 e5 ?+ A5 s# i/ h 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。4 {/ W0 G4 a; u
; W- {: z, b. C8 p0 z8 z: o( ~
- j* ^+ @3 E) p) {) e9 |
|
|