|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑 : z# {4 ^+ d [3 R( Z1 X
- [code]EDMA sample test application1 X$ d0 O( _$ M( \
- /*8 J5 q& }$ _- X/ k& r% S$ W0 z5 F
- * edma_test.c0 J# f% U3 n0 k) o
- *8 K" _/ r0 p5 z: f
- * brief EDMA3 Test Application1 u% C) L) d* f) X0 f9 _, \
- *6 j4 Y& |9 w# j$ I8 O
- * This file contains EDMA3 Test code.5 v; X) u7 @4 [* P
- *
2 h. i* o+ L1 X0 h1 L6 s - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE; I z' o. q5 s; v% n: k
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT; r# i! c/ A2 F3 z
- * TO CHANGE.
9 u3 a' w8 n: l+ k - *
$ l/ a. X6 ]5 p5 U - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
- c! n* w/ P% |% ~: T+ y - *( v0 P! k$ _7 [4 m$ g1 A R
- * This program is free software; you can redistribute it and/or! X! ^! a7 M/ O" C2 `1 G
- * modify it under the terms of the GNU General Public License as X- L: A) @ o. n+ |8 V, Y
- * published by the Free Software Foundation version 2.; [. R% D4 Z% m+ ^$ S
- */ J( o: s1 s3 C4 y
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any3 `3 h2 A( f( ^/ J4 x; r0 W
- * kind, whether express or implied; without even the implied warranty
( C' ?0 Y* E( c8 R2 r2 C - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the( h% ], G4 I* ?& I, G
- * GNU General Public License for more details.
% a6 w, ]# M. b: C1 M4 A) V - */% l" j4 K( M! L9 ~! w
0 k3 o. ~, n- B* V- #include <linux/module.h>: y6 t! u6 r9 b
- #include <linux/init.h>7 L& r1 H r" O/ X4 @
- #include <linux/errno.h>! N# n3 A( i* `" `
- #include <linux/types.h>+ F/ Z A' u" f. O# ~& U
- #include <linux/interrupt.h>: d1 v! x- x0 {, X
- #include <asm/io.h>
P7 b N) }% Z0 f1 a' N5 C - #include <linux/moduleparam.h>5 m, \8 f5 {- ^4 L" Q, `
- #include <linux/sysctl.h>. X$ X1 g# K0 n k( B3 k
- #include <linux/mm.h>
$ _; b, Q" E S) [3 z: J6 j$ h - #include <linux/dma-mapping.h>; E ~7 E/ {) L6 v7 V+ T: h g
+ U+ K5 [' w, A% `- #include <mach/memory.h>
$ T1 I6 ]& l6 H1 | - #include <mach/hardware.h>
U3 E) }2 B+ C2 d/ d1 z. u - #include <mach/irqs.h>
$ {* W. M2 d2 N% {3 P: q3 b - #include <asm/hardware/edma.h>
; A' j2 {$ p) ^$ q - ; W/ k3 {& h9 {' g! R9 z. p( `3 p
- #undef EDMA3_DEBUG( ~; d: j) m4 G% e
- /*#define EDMA3_DEBUG*/
" B/ W, I# N9 V8 I1 Y+ z0 x8 K( s" a
% a2 U# t; y1 W/ `6 t3 f- #ifdef EDMA3_DEBUG
4 E4 P. P7 j% Z- k4 j - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS); O. _- V: N: N+ r3 w0 a
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
, Q; ^( `/ R. Q0 \- D - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( U* S. R0 e- k! ]
- #else' \. M0 Y# J X4 Q' r- ?0 a
- #define DMA_PRINTK( x... )* g5 @1 Z2 _! `# f6 G8 p/ V
- #define DMA_FN_IN' c+ y8 v! Q0 B! r/ m. g3 C
- #define DMA_FN_OUT
: u2 W1 w: h m9 M$ ^3 U; |- c% a - #endif
: [5 C- i; }$ j( |% y: O; f! | - v8 L: \4 x L6 k2 P
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)" |0 j! x P, u% ]
- #define STATIC_SHIFT 37 R$ \% H0 F0 S0 r
- #define TCINTEN_SHIFT 20
! l' k3 g6 S* q4 P s( n: V) n! w - #define ITCINTEN_SHIFT 216 B: W# _6 O# J& D% y" \. w) J3 |( ^
- #define TCCHEN_SHIFT 22
; g8 u9 a/ n+ i* q0 A- | - #define ITCCHEN_SHIFT 23! Q& H Y/ Q" Z* I& T
( n' H7 Q {# F9 f; b7 G- static volatile int irqraised1 = 0;$ \" I4 D- |7 d3 D4 M; n
- static volatile int irqraised2 = 0; x, m( u/ e0 w7 |
- + l! j. k; A6 i4 q4 j/ s k$ N
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
# A! Z( w k! F4 j - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);, Z* o: D) }" i7 {& r+ b, H
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
& Y2 o8 {2 o2 c9 d, N/ e2 V3 i+ @
& s6 v2 `9 F4 h: b ^- A- dma_addr_t dmaphyssrc1 = 0;
9 V$ t! Q* P% G2 R @( b' M - dma_addr_t dmaphyssrc2 = 0;
3 W( n' P+ z6 S5 U' X o1 Y9 k - dma_addr_t dmaphysdest1 = 0;5 P5 O' I" G$ r- I5 Y# [- v
- dma_addr_t dmaphysdest2 = 0;
0 J3 S& Z" |; y4 k
* _' \+ l+ @& V" U3 b& ^- char *dmabufsrc1 = NULL;3 W/ \. Q: D ?! p. ]& x2 b9 Q) F7 ~
- char *dmabufsrc2 = NULL;
9 {. B9 c, d8 q8 q }3 L9 _# K' C - char *dmabufdest1 = NULL;8 P1 X0 M0 T3 {( J$ r( O' N8 O
- char *dmabufdest2 = NULL;. p- _) `, l9 d9 p' f
& O1 a0 H8 K0 |; ^0 X( t9 u- static int acnt = 512;" d8 I8 @8 M% Y v
- static int bcnt = 8;( ?' S* W0 }7 X
- static int ccnt = 8;
( O, n- ~4 X# O# \7 V# y' k2 X - T1 b3 j* C: M2 S
- module_param(acnt, int, S_IRUGO);
: {9 a0 Y/ J/ g# K; d7 q9 ~ - module_param(bcnt, int, S_IRUGO);% u2 R' L% y7 u6 z
- module_param(ccnt, int, S_IRUGO);
复制代码 8 q) f& H; F. w$ z& t" j; T* P4 {5 g
% o4 O R2 Q" z& k i) {$ H' R$ {
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
% g& @: W# r) {/ S6 S( varm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
: A. S C& N! g8 W6 D 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。! J& c* @, {' d7 U
, e' W' Z8 A- j1 t, r( b6 [* a0 P" A
|
|