|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
# s5 d' _" Y' K9 t- [code]EDMA sample test application
2 ` ^. {3 }7 z, Y* S2 I& v# r4 J - /*
7 v/ |/ B* W. C- n* F& v# i1 v - * edma_test.c1 A- V& K' ~/ D# _
- *
( l' V# `- ?+ ]# ]' G - * brief EDMA3 Test Application2 v1 g+ n2 S, w
- *
+ y& ^! \% F& z y% n- t$ f - * This file contains EDMA3 Test code.: W- G" Z/ c1 _
- *- @# O% d2 T8 C, `2 g
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE( ^' ?1 ?5 S- q6 z3 O
- * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT8 g- |' e9 n: S9 u# `# D6 G
- * TO CHANGE.
' l P3 b; b* d7 t7 p. Z9 Q, ^ - *0 e6 v8 m% _5 o7 s% A' M
- * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
9 Q2 @+ {% q1 @" X/ s# O8 d - *1 o+ p! ~+ p/ c) h
- * This program is free software; you can redistribute it and/or
* c C! K0 l5 f2 _6 _1 }5 d+ X - * modify it under the terms of the GNU General Public License as* O7 n* n# R" f- w' a: Z2 ]8 o
- * published by the Free Software Foundation version 2.
7 B: O5 ?- X7 I. Q1 ~' q+ | - *
0 ?+ r* s# @6 L) X: T7 O - * This program is distributed "as is" WITHOUT ANY WARRANTY of any$ l3 y' @2 Q' S) @2 D
- * kind, whether express or implied; without even the implied warranty
% |5 r" X: |( N - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the$ t; B& G' M9 {, i
- * GNU General Public License for more details.
8 j$ h- T5 c2 I6 T6 `% A - */
- f, P7 d% A: |1 J, A
- J+ T. m4 m, b: q& R P: w- #include <linux/module.h>
3 C0 q: |2 W C9 q3 ? - #include <linux/init.h>+ ^; [! C# A" }" z
- #include <linux/errno.h>3 e& ^6 C7 \" p/ l' ^
- #include <linux/types.h>
* `4 ~+ [8 X3 m, N/ @! _ - #include <linux/interrupt.h>* P% N* N' \3 k( Z+ r
- #include <asm/io.h>
# ~7 x, r' V0 Q# `- ] - #include <linux/moduleparam.h>! b0 S5 L2 `- Q' G4 s: V
- #include <linux/sysctl.h>
& {. x* z/ o; k1 ~, ?0 W - #include <linux/mm.h>
$ v. x5 A2 \8 \% u% {# b - #include <linux/dma-mapping.h>+ t8 X6 n4 }& ~/ w" B
- 8 @+ V6 Z9 @. ~, P& a8 t- g
- #include <mach/memory.h> m9 u9 m6 d/ @6 ]2 Y2 Q( U
- #include <mach/hardware.h>
! I3 I" ~4 I6 K" h5 g3 W - #include <mach/irqs.h>+ {2 p2 T1 x$ v, B0 R
- #include <asm/hardware/edma.h>
3 L0 p' l) J- q' Q/ @$ e9 W" \ - " w& M* D( Q7 {5 \7 ^
- #undef EDMA3_DEBUG
+ q5 k# @+ T7 {+ B - /*#define EDMA3_DEBUG*/
) s; `# x+ D2 p
6 _& E/ f3 A6 g- u0 s- #ifdef EDMA3_DEBUG
+ F5 i$ q k- w# l! g. D - #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
) o! \& O; y0 r; G+ _) W; Q - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
$ i0 W0 p# V! T' F" f; k: c - #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
/ N0 b6 A% r; F3 t# V: l2 T( r$ c9 T( g - #else4 D7 ?' m4 F7 Z+ F! i
- #define DMA_PRINTK( x... )# e" o% p2 ~- \7 } J6 n2 H
- #define DMA_FN_IN
, \# ^! g4 m2 n - #define DMA_FN_OUT0 R: n* H7 @: z4 T4 g( |
- #endif
/ y) D6 F0 c W+ Q1 ~' X6 R - ; c5 u) D& D& m& G( x
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)2 O7 c$ w; d& M3 T1 l8 a& W2 j+ K
- #define STATIC_SHIFT 34 c# k8 r/ j* V+ f2 u9 s; j) H, g" t
- #define TCINTEN_SHIFT 202 c* N4 A( F1 b J( A1 I
- #define ITCINTEN_SHIFT 21( x% V' P) Y) d. z' c
- #define TCCHEN_SHIFT 22( F1 b% h% s R- ^: _( p
- #define ITCCHEN_SHIFT 23
9 T" g3 v/ Q# J+ q# X! f+ F
8 T& N2 ]. S( z, h* A: w; Q9 E0 h- static volatile int irqraised1 = 0;
: h5 T2 k* y% {. M7 w - static volatile int irqraised2 = 0; X5 ^ e {7 G+ k
- 1 ]7 {; C+ B/ |' b9 q) w
- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 A* e V1 Q$ D% r& }0 V
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
5 K- j: u+ z" `! {8 P) J8 } - int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
! C ^' j( s% @, M
9 X3 [& R8 j+ N Q( V! F0 r! H- dma_addr_t dmaphyssrc1 = 0;1 @0 }+ n1 ]& A( @+ Y5 {7 S( G; e$ F
- dma_addr_t dmaphyssrc2 = 0;/ p; j: A8 N2 I m% a2 j
- dma_addr_t dmaphysdest1 = 0; ~0 w: }# ~1 t! O, V
- dma_addr_t dmaphysdest2 = 0;$ A5 v v# L, \
* Q t! J& R" [# K8 ^: D' Y: N- char *dmabufsrc1 = NULL;
5 j7 v4 d3 [) l+ U/ ] - char *dmabufsrc2 = NULL;/ q& L5 t3 u4 Q; u- | b
- char *dmabufdest1 = NULL;
$ b0 l6 d& R6 e c: F4 g - char *dmabufdest2 = NULL;
' ^9 V- H% v: E0 |5 A
: [. G5 O4 A! C' e! e. r- static int acnt = 512;: J: I; |) G! g: v5 m
- static int bcnt = 8;. o- a3 E/ H) [: n9 Y* W9 z
- static int ccnt = 8;1 d; U$ ?% Y2 |7 S- C8 @
1 F5 r/ D# r# N$ H; o' \- module_param(acnt, int, S_IRUGO);$ y4 S. H0 H0 X# `& @
- module_param(bcnt, int, S_IRUGO);
* g3 l4 l/ ~& F3 G- D y - module_param(ccnt, int, S_IRUGO);
复制代码
+ S2 c. S& `# ~9 x7 A8 T3 q. \( o) V% a! v
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用5 f! v" ]9 E+ J0 H
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。. f9 _; j, [$ f" X3 u# p$ Y& @
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。8 m5 _' ^8 ^, Q$ K4 o8 {
- a$ V U$ c" |, ?, j \
6 N; N% t q! ~* ]6 D3 L |
|