|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
; q6 ~* u0 W" N2 i* w# c- [code]EDMA sample test application: _$ \6 g3 |- \: W. d" A
- /*
9 K( D. _* O$ e7 } - * edma_test.c3 C) C5 `2 Z! b- K
- *
% {, j& m9 y f) a" U/ L ] - * brief EDMA3 Test Application
5 j# O+ J% }) j4 O0 w+ X - *
: E# J9 ^1 Y) B% r: h5 q* j - * This file contains EDMA3 Test code.0 ?% V {, n4 Q4 G% ~2 u
- *
y# q+ N# @7 [% q1 t - * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( ]) b) }5 z# b1 _( z
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
* H/ h; m# c, g; ^* ] - * TO CHANGE.
9 b( Q( z2 k8 O% S: l4 T - *
8 N* Z! }/ \( ?0 i3 t% D0 C - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
6 X; e$ A' k% S8 j5 | - *
) K! t4 o/ a% K" \ - * This program is free software; you can redistribute it and/or
& F# r+ X" m2 e& O0 h) l1 P8 e - * modify it under the terms of the GNU General Public License as5 Q) ~" }( ^ ]( H/ }2 V6 @, F
- * published by the Free Software Foundation version 2.
1 N2 W# R ]: `. f% | W - *
" G1 Z2 C1 Z% q. d _* P - * This program is distributed "as is" WITHOUT ANY WARRANTY of any
/ b( g9 j! m2 I& h2 u - * kind, whether express or implied; without even the implied warranty8 B# p2 I' S# F& M+ m/ V9 z j
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9 b" ]( H k+ E9 ^ - * GNU General Public License for more details.
2 Z3 F2 i4 z' j/ e' J2 Z - */, k1 Y/ B1 \2 T P
- 5 P3 d' k2 M5 _
- #include <linux/module.h>. z/ m9 b* h- p% X$ p. `
- #include <linux/init.h>
; c. m) h# {. Q( n9 |5 W - #include <linux/errno.h>
" A4 R' j. Q y1 ^" r - #include <linux/types.h>* Z# k( ~3 V( l8 I
- #include <linux/interrupt.h>, U) K$ l2 F# ]) {# p$ R7 }# w
- #include <asm/io.h>
6 ]9 A1 t1 p$ F) g& H) e4 ?( X - #include <linux/moduleparam.h>4 b d0 z& m2 q8 \* F
- #include <linux/sysctl.h> x+ z9 A8 C7 l( y/ B
- #include <linux/mm.h>' w5 E" {0 R( ?$ e- v4 ?
- #include <linux/dma-mapping.h>
. {, H+ |) A6 ]6 i: A* h; y0 v6 G - 1 {. B) z# E# y# o& G
- #include <mach/memory.h>8 H" l/ E: |7 m. t
- #include <mach/hardware.h>& I/ u. S Q; L" Q
- #include <mach/irqs.h>$ e y$ a9 ~) n
- #include <asm/hardware/edma.h>
* U' \7 O' C1 L, G, M. @
2 u- M. R; _. i+ _# ]0 G% P+ U- #undef EDMA3_DEBUG# f1 C* K4 Z# O4 f9 A+ [+ o7 T! j
- /*#define EDMA3_DEBUG*/; T- B. y* ]) R
- & e5 p+ Z6 W. G' e b& l2 w$ c
- #ifdef EDMA3_DEBUG6 ?7 A% y+ P g( s1 t! @" k
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)$ ?: W/ g O1 D7 t0 I2 E) |: t8 z
- #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)9 w) L' p: u' L: N* q+ L. D
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)" r4 r6 P$ E4 q, {- D) V
- #else% ^" k( H) l3 S1 ]
- #define DMA_PRINTK( x... ), o$ o Z7 i: j4 ^
- #define DMA_FN_IN
. O. o; @2 R( Z& q: G2 K - #define DMA_FN_OUT2 c- H3 I1 t! H, [! y9 x
- #endif
* M7 W& Z* x) z! y6 P# ^ - * }3 `1 S7 S6 T- c# ^7 o
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)0 _7 R- N) i3 ^/ x
- #define STATIC_SHIFT 3% g7 X# N4 h% L" P6 d% _
- #define TCINTEN_SHIFT 201 Z% @3 X7 P% V. {
- #define ITCINTEN_SHIFT 21
3 O) ~5 o" Q N. H+ s. Y' z$ e - #define TCCHEN_SHIFT 22
- ?) H/ w: ?! j$ F% [# V - #define ITCCHEN_SHIFT 23- G5 w+ n9 L3 _% Y% d ?2 A8 A
- $ o) |, _* \5 L2 N, K
- static volatile int irqraised1 = 0;
h/ m; M- _; U e4 x7 ~$ g - static volatile int irqraised2 = 0;( q$ a/ m0 F+ c- m
- , z" T; Q6 C) y" W
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 g0 V9 H; y* X0 _* G - int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
3 O! P U3 o( M9 F - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);% p' j, N0 D0 m
! ?$ v0 I; g& i e- dma_addr_t dmaphyssrc1 = 0;& H( N3 w% H2 j T Z6 H, @! W4 r
- dma_addr_t dmaphyssrc2 = 0;' j. c. }" S+ v# J
- dma_addr_t dmaphysdest1 = 0;: U2 [: x4 L$ j, {# ]. D
- dma_addr_t dmaphysdest2 = 0;
$ ~+ J, f' ]; X, ] L
$ O9 i$ B: s- E' D) J( Z9 `- char *dmabufsrc1 = NULL;
/ }2 K4 P* A5 j& N, _3 \- f - char *dmabufsrc2 = NULL;' O( K, ?, ^/ _9 s3 K4 ?
- char *dmabufdest1 = NULL;0 s* U2 C: W3 u
- char *dmabufdest2 = NULL;, h9 B! q. |. f3 B6 a$ `* M
- # i3 Y% I2 \4 G- s0 h L
- static int acnt = 512;
: P0 {* i. r7 r+ ` e - static int bcnt = 8;
6 y: I: I' R. q/ `& q5 ^" B5 F% _ - static int ccnt = 8;
! M9 o3 P* _% v3 o3 j7 B( M/ P( @
& F0 m; G) f4 k! B( a- module_param(acnt, int, S_IRUGO);
0 ?9 ?3 R0 f8 F7 V6 \ - module_param(bcnt, int, S_IRUGO);
9 J' D" w# T i - module_param(ccnt, int, S_IRUGO);
复制代码 * f% d, d2 h! x. w" X" S) E
% L$ T4 B' F' q+ R& R
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
4 v: F1 j( {- ?9 c2 X: S+ farm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
& N ]) e3 R7 I1 m! z6 | 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。" o a8 q5 w4 t+ e1 D8 l
, S3 j6 r4 ?& f, a7 c# C/ h; V7 J$ o+ ]4 m5 k, j- u
|
|