嵌入式开发者社区
标题:
OMAPL138如何在Linux下使用EDMA3驱动
[打印本页]
作者:
yyj
时间:
2018-1-30 11:01
标题:
OMAPL138如何在Linux下使用EDMA3驱动
本帖最后由 yyj 于 2018-1-30 11:01 编辑
. m: u4 d1 _8 H; G2 c( C
[code]EDMA sample test application
2 ~( a! _" q8 ?3 \# y
/*
- q! h7 x! L3 A |7 g2 l
* edma_test.c
, j- G4 C# ~0 R& P, P% V. a- s; y
*
1 H. X3 R' ^, }& m, i7 ~
* brief EDMA3 Test Application
1 F% i0 X2 e, b/ v+ B4 m; h V- I
*
, q8 {/ E! m. e% C
* This file contains EDMA3 Test code.
7 _; f( N4 A! h8 i
*
4 G/ I/ d& R% x/ ]2 _3 ?. f
* NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
( ~( Y- ^: a0 _7 `7 l. ], T
* REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
& b2 X0 c7 @! M+ B' C
* TO CHANGE.
0 x/ Z2 u. `& x9 r+ [( M3 x
*
. ]9 g; D1 L+ V/ B
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
4 K( f" q& h2 ?- E r0 k; P) d. d
*
" c9 b' M6 _! B5 V V9 B
* This program is free software; you can redistribute it and/or
* p! E* }, o/ z8 g" J
* modify it under the terms of the GNU General Public License as
Q/ Y6 L, F1 m! U9 U
* published by the Free Software Foundation version 2.
, f( y" @/ Q8 Y1 S a
*
$ N% B; H1 m k
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
4 m4 F, t( G& n5 r
* kind, whether express or implied; without even the implied warranty
1 F: Y1 _ w/ _$ v; M6 T x4 H7 J( E
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
) t0 X5 A8 G0 e) ]
* GNU General Public License for more details.
. J$ V& Y) m. f2 @6 R
*/
: [: r3 g' a4 q! Q5 |
8 [/ m N3 v* f) V' A) D, ~4 W
#include <linux/module.h>
3 v: |6 E$ Z% S. |' t7 J$ _
#include <linux/init.h>
: S. y; n; N* ^# ~& f. d
#include <linux/errno.h>
$ n! e# z) G% U; x/ d
#include <linux/types.h>
5 z) Q' w3 z' g) d
#include <linux/interrupt.h>
, c- B$ _/ r: E8 N
#include <asm/io.h>
- M O! c: e! Q1 B4 i
#include <linux/moduleparam.h>
/ ]& w5 H6 v& W5 r, g
#include <linux/sysctl.h>
& C! i z. I% b- a: p$ _# o: l. A
#include <linux/mm.h>
* T: z: V! j+ W3 _( u$ T& h E* T
#include <linux/dma-mapping.h>
& K9 {( P/ X3 W) Y; K: Z! \0 h3 z
+ s- e' a. p& Z' n# _) m/ z) q
#include <mach/memory.h>
2 m; i8 J2 D, F" M3 _+ L" V6 E/ u2 B' v
#include <mach/hardware.h>
' V. _" {8 q+ A( _
#include <mach/irqs.h>
2 s# s$ V7 _) e6 F0 J
#include <asm/hardware/edma.h>
3 e Q9 \+ {' l1 C
, z4 q, ^ z, }- K7 o& S
#undef EDMA3_DEBUG
9 v. w1 [% s3 ]# a, T
/*#define EDMA3_DEBUG*/
" q: I7 v) m- O; K; v7 b6 V- ? }
5 N% ? X" M; X3 Q
#ifdef EDMA3_DEBUG
. L& F5 A6 H# K
#define DMA_PRINTK(ARGS...) printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
! {) G' h1 o P
#define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)
# N& N! Y a6 j1 o ~+ n
#define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
]; w& P* J0 m3 x9 c1 x* c
#else
. W2 Y( M8 k: [! n7 b
#define DMA_PRINTK( x... )
' f$ A8 G7 ^7 Y1 h, d% ~ x% {, Y
#define DMA_FN_IN
" D" j/ ~/ G# M8 B
#define DMA_FN_OUT
) [' N8 W, P' \. g$ f% y( L1 z
#endif
% r( q6 [2 E' _2 L6 H+ q+ {
0 i! D/ V G4 {7 R5 R5 r5 n
#define MAX_DMA_TRANSFER_IN_BYTES (32768)
0 l# Q5 z" c* v/ h* U
#define STATIC_SHIFT 3
- c" v( Q. T0 x: ^- P
#define TCINTEN_SHIFT 20
% ? H* f% T( q% o/ T. y J
#define ITCINTEN_SHIFT 21
1 m: Y/ N) P) V# x, ?% K
#define TCCHEN_SHIFT 22
+ n0 W% {% l1 o8 ]2 E
#define ITCCHEN_SHIFT 23
/ i: n' x5 p' I' a
$ |2 h, p; E; Q1 @' e. G! Y
static volatile int irqraised1 = 0;
9 D5 X, t. A& i5 p5 p5 u
static volatile int irqraised2 = 0;
, H, g/ s6 p/ z! H, k; S* b5 X3 F
, s. a, i5 O( P' ~$ j7 \8 \0 w
int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
1 V' s- `2 X' |8 \. e5 ]
int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
6 Q D; R5 B K; W; ~! R
int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);
8 z$ h" ]$ U/ }! ~3 J. f6 B
& o7 c5 c A* H; f
dma_addr_t dmaphyssrc1 = 0;
G" b! r" U4 y, K, v
dma_addr_t dmaphyssrc2 = 0;
6 n$ Y( [/ Z3 Z! _7 f& B: ^
dma_addr_t dmaphysdest1 = 0;
4 h$ X& h2 `1 E% w
dma_addr_t dmaphysdest2 = 0;
4 L6 |! w$ r% y8 g; l
( o. e+ \2 |, L! U* L
char *dmabufsrc1 = NULL;
, r# ?( t; [/ Y" s) t, _
char *dmabufsrc2 = NULL;
8 A" m2 U, N9 a* U6 g' _. {# t7 V
char *dmabufdest1 = NULL;
0 t# t9 Q( h( r
char *dmabufdest2 = NULL;
! r% O) A: [: U W* U/ a
6 E& F* {8 o( s9 e, S( z; a! X
static int acnt = 512;
! ]% H8 m2 O* `; a1 [
static int bcnt = 8;
" `! g- n2 p5 _& N' b- w$ {
static int ccnt = 8;
* e6 K; n& H: g6 b
# I4 l9 Y% ]6 I6 u
module_param(acnt, int, S_IRUGO);
+ Y0 P/ r& `) q, \7 B
module_param(bcnt, int, S_IRUGO);
: Z* D) i7 \. c
module_param(ccnt, int, S_IRUGO);
复制代码
( |- O, z# U& q- i9 n1 `
9 F& |7 [% r' m0 o# T
这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
/ u n* X5 @5 U' C% l q
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
8 w, r# t; a, x: w0 r
我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
! v6 f' T3 @; f4 f
G0 v9 y3 Y! K8 Q2 E2 y' E
R9 _( M$ n" N9 u6 _9 P
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4