|
|
本帖最后由 yyj 于 2018-1-30 11:01 编辑
6 { n: ]4 g* I( G0 S% j- [code]EDMA sample test application9 A$ j! w8 Z9 R) {4 U* a! x/ H
- /*
& K+ b# K% B7 U' ^' G - * edma_test.c4 F% H, y" P1 X" J3 U+ a
- *% `0 I7 P, r9 n2 C. n* ~; i
- * brief EDMA3 Test Application j$ L) r' ]+ \0 L- t) [
- *
9 [1 S- r, }" ]% `. f6 E0 p6 f. ` - * This file contains EDMA3 Test code.# f/ C: ?1 I* R5 `6 @
- *6 E! [& m% v' }( Y( k/ d5 a
- * NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
$ M/ h9 N! M1 c# j1 j1 _ L - * REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT, D0 z. @' K% U9 b- `" m
- * TO CHANGE.
7 C, p( K$ d6 o# \ r! E - *
& h3 a% b3 Z0 ? ?% V$ v - * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/' i7 a+ ?( ]5 u6 c
- *
2 B! k7 |, F! J* E - * This program is free software; you can redistribute it and/or: _" F$ T; z9 @7 Q* e
- * modify it under the terms of the GNU General Public License as
/ U7 z1 q9 w3 F9 k - * published by the Free Software Foundation version 2.$ Q3 `! B: I* Q4 q- h# n# O
- *6 W u( P; |/ b# ?# v
- * This program is distributed "as is" WITHOUT ANY WARRANTY of any+ ^& d& I. _6 c4 j# o
- * kind, whether express or implied; without even the implied warranty, c4 C7 Q6 c* T0 f+ @9 M' m; u
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3 C" ]7 k# u$ R, D, ]: r# ~ - * GNU General Public License for more details.
: z, X) Q- s' k% i1 O; q# x6 f* t" u - */9 |; U& \# U; F' H$ j
- ' }2 A) O3 M" [) q
- #include <linux/module.h>! x, R( V) E. o* ?9 B
- #include <linux/init.h>
+ T8 A1 ~/ ?2 o - #include <linux/errno.h>; o, p8 Y$ U5 M+ K. }) t
- #include <linux/types.h>+ S) U2 U" s% Y4 A; j
- #include <linux/interrupt.h>
6 W0 R/ D2 F- P3 A - #include <asm/io.h>
* w$ z( d0 R% {. n- h( V: R - #include <linux/moduleparam.h>
0 b( X1 ^! B1 q - #include <linux/sysctl.h>; }; v1 }3 n; z- z/ H: F
- #include <linux/mm.h>
$ a$ S1 k C8 c7 L - #include <linux/dma-mapping.h>0 r' l1 `: v3 ?
6 U' q2 F% V+ t2 Y: S- #include <mach/memory.h>2 b% d% K h! Y
- #include <mach/hardware.h>
7 r; w) N e% A+ V5 |9 c, m - #include <mach/irqs.h>
n) h- U4 M+ X - #include <asm/hardware/edma.h>
. f; g" g3 I9 [- d - $ i, v8 }2 S5 ^7 T2 d# q4 ?* d
- #undef EDMA3_DEBUG$ q( _5 X1 e' t5 M \) ~8 r
- /*#define EDMA3_DEBUG*/3 x. O7 |% |7 U% P" F/ j! Z
; \6 w3 ~5 [" D1 i3 j& j' {- #ifdef EDMA3_DEBUG5 e" c! q, I" ]$ R; B
- #define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
4 [5 @! D4 I) ` U8 b5 n9 f - #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)$ ^+ Q/ l4 ?* T1 ?, H
- #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)2 }5 W/ @3 H0 _: v' }( t3 {& T: @
- #else* A" m- }9 Q( u& j
- #define DMA_PRINTK( x... )6 g* H7 ?7 f( p3 A5 O/ k/ o
- #define DMA_FN_IN" A, S" U# n9 A
- #define DMA_FN_OUT
' ?% ?8 d$ c4 s - #endif
9 v, n( f7 y* V% o2 Q8 G2 U - 0 ^- G3 `, E- r% p$ v
- #define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 T9 m9 R; e7 ^& V8 G7 y, O% d - #define STATIC_SHIFT 3
( F0 v' v6 o9 e7 G8 C. R - #define TCINTEN_SHIFT 20
# U5 o; L7 V4 A+ A; y# L& l8 d - #define ITCINTEN_SHIFT 21+ E5 t2 U0 J( [' D3 W2 |
- #define TCCHEN_SHIFT 226 E4 d. _5 A# @2 P( {
- #define ITCCHEN_SHIFT 23
+ O2 d' ~! E6 t* k+ O8 A
' M Q5 b+ K" k# S8 e2 f- static volatile int irqraised1 = 0;
3 b, F2 q N8 \2 ~8 D# R8 \+ `! p - static volatile int irqraised2 = 0;5 L" O- N1 `% ]* B9 X& e
/ B3 d% H- r0 }8 {1 B8 Y; r- int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);7 S8 ~6 n, M; P' m1 B5 z/ ^
- int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);* W9 _# k5 m; X6 Y! M, F2 ?0 n
- int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);) D* k( f5 S9 m; }$ b* N
- ] j. q% b/ @
- dma_addr_t dmaphyssrc1 = 0;' O6 b# d! P, z/ @! H5 c
- dma_addr_t dmaphyssrc2 = 0;- j8 _* o9 t0 Z( h- t( |
- dma_addr_t dmaphysdest1 = 0;
. n9 g3 t t! |4 k2 a - dma_addr_t dmaphysdest2 = 0;
5 [5 X3 b; y) @. }5 r; V - # W8 C) q4 Q; e# A% X
- char *dmabufsrc1 = NULL;
& ?/ E' G' A/ i/ r$ H4 j* W - char *dmabufsrc2 = NULL;' i; i& ?( B% @1 m' L1 B5 Q
- char *dmabufdest1 = NULL;
! s9 _" t* ~1 z/ ?+ C8 a% ~1 A" C - char *dmabufdest2 = NULL;4 e. ]; H# G+ r6 [4 O
4 C/ ~2 z$ j; n- [. ?& I- static int acnt = 512;! D- r$ o( Z! t" p5 R
- static int bcnt = 8;9 J5 z6 N$ P* E% y! f$ q# @7 C3 ?
- static int ccnt = 8;
- `! V8 Q7 e! W
- ^' ]0 f) t7 }5 q' w- K1 v- module_param(acnt, int, S_IRUGO);
" `7 i: Z" |3 z - module_param(bcnt, int, S_IRUGO);
! A9 @# j& E# G; u; m, R% \ - module_param(ccnt, int, S_IRUGO);
复制代码
+ U+ g4 f S8 j% a/ t! i2 }7 ~0 G$ H! E% a3 `
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用. S" P; \$ @& U1 G/ u! M1 ~
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
6 j9 r" d1 W; E7 i$ C j! d 我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
$ [8 x: k. w+ M H
2 f4 q5 u; ?( Z2 f
) \8 N2 F0 N4 g K u8 B |
|