OMAPL138如何在Linux下使用EDMA3驱动 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8762|回复: 0
打印 上一主题 下一主题

[未解决] OMAPL138如何在Linux下使用EDMA3驱动

[复制链接]

5

主题

11

帖子

73

积分

注册会员

Rank: 2

积分
73
跳转到指定楼层
楼主
发表于 2018-1-30 11:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yyj 于 2018-1-30 11:01 编辑
( C9 x  G( |  o. a- Z
  1. [code]EDMA sample test application
    6 M4 y% p9 L& M/ M
  2. /*
    9 J2 Q* ^" }% L0 l! Y' G4 S
  3. * edma_test.c5 {; C8 t3 G, B
  4. *
    8 |' n' q6 w7 @6 S* a" r0 q8 ~
  5. * brief  EDMA3 Test Application
    - s! x- `$ ]  Y% [5 p2 T
  6. *
    6 E* _4 ^: W( e1 P  l1 J
  7. *   This file contains EDMA3 Test code.
    : ^  o2 H* W. h( n3 _# g0 ^
  8. *. ]' ^- p2 m6 f, `' }- b
  9. *   NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE0 z* J! n; B: I% O; t; h/ T% H
  10. *         REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
    1 w7 b0 o5 o/ v0 b2 o5 L( {
  11. *         TO CHANGE.
    , t( a2 R; K, O, g, ~1 |
  12. *
    7 J5 w0 Q" _/ M1 v7 q; r
  13. * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/3 w  L- |& N, D7 \
  14. *# S1 W# @6 {; a$ b
  15. * This program is free software; you can redistribute it and/or
    + }5 @# W# Z4 l. p0 X5 o+ @
  16. * modify it under the terms of the GNU General Public License as, e" v$ t# k! }& L& G4 _8 g
  17. * published by the Free Software Foundation version 2.
    0 J, H5 ~) V' |. E$ _* P
  18. *
    , A  ~$ P7 {/ X
  19. * This program is distributed "as is" WITHOUT ANY WARRANTY of any
    0 |; V1 v9 b1 m
  20. * kind, whether express or implied; without even the implied warranty7 G7 e8 U$ k% R, G/ S
  21. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    " `0 m- R, [0 I1 Z2 W3 A" g  z, ^, i: z
  22. * GNU General Public License for more details./ J* a% e- z) \6 i
  23. */
    , R4 d6 h) \. C6 m0 j
  24. 1 ^& K* @3 ~. I# u# y5 F
  25. #include <linux/module.h>
    - q1 u. q# {3 E! r
  26. #include <linux/init.h>/ G0 T3 u. s) k& S( ~
  27. #include <linux/errno.h>
    $ |$ y; O0 J# r
  28. #include <linux/types.h>
    ; E5 N; _! }5 }5 |$ o% ?' {
  29. #include <linux/interrupt.h>+ U) Y2 H  L' @$ T
  30. #include <asm/io.h>
    1 @5 I# x+ `3 H# z1 ~! r3 ^
  31. #include <linux/moduleparam.h>7 o6 Z- r2 f' O- T
  32. #include <linux/sysctl.h>7 w# e9 W( U0 U) X8 `; x: l
  33. #include <linux/mm.h>  l1 c; \3 p$ F
  34. #include <linux/dma-mapping.h>! ^6 i% I! W" N2 C

  35. 1 [% C# c$ _0 M. Z8 k" g6 R
  36. #include <mach/memory.h>$ ?2 l8 F! W8 n6 g5 O1 C) d8 Z9 Y
  37. #include <mach/hardware.h>8 T  d, S( F9 q6 R! U
  38. #include <mach/irqs.h>$ S1 z% O/ G) M- M1 E: D
  39. #include <asm/hardware/edma.h>4 m& [0 y2 N' ?4 b$ p
  40. : B7 n8 a1 ?) U4 y% G7 w* T
  41. #undef EDMA3_DEBUG4 K, M4 H$ H3 C: s7 W
  42. /*#define EDMA3_DEBUG*/, u. R/ g1 d1 N! P* {3 F+ `
  43. $ l- C# V  d9 q( s
  44. #ifdef EDMA3_DEBUG1 x, V" W* X, U
  45. #define DMA_PRINTK(ARGS...)  printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
    0 Z3 x  O! R/ |* k/ c1 y
  46. #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)4 d( r2 ?4 s( s  i1 @
  47. #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)
    5 E8 l9 w+ f$ Z8 m. l& k
  48. #else1 Y  p4 p  m# T/ L7 _
  49. #define DMA_PRINTK( x... )' C! O4 p: e- _# u
  50. #define DMA_FN_IN
    ( n! Q1 m4 n: m& G
  51. #define DMA_FN_OUT
    0 ~2 U( H7 Z" I- m: T' G, z
  52. #endif# L0 ^% t# j+ Q" X

  53. 3 x" E( ^6 @; P; _3 E9 R/ p6 j' j' w
  54. #define MAX_DMA_TRANSFER_IN_BYTES   (32768)6 P' A3 g7 L) e7 \+ L
  55. #define STATIC_SHIFT                3
    2 k3 f4 _( @1 g( b) G4 n9 X# i2 F% }
  56. #define TCINTEN_SHIFT               20& x( e) @. ~7 |# B
  57. #define ITCINTEN_SHIFT              21* R3 y* U' l: ]" ^/ O; ~9 [  u
  58. #define TCCHEN_SHIFT                226 k2 K. R% L1 N4 F9 X+ b, z
  59. #define ITCCHEN_SHIFT               23$ e% F/ O& H. T' o. j1 H! @; c
  60. ' ^5 D! p: }8 Y" }5 H0 ?5 x
  61. static volatile int irqraised1 = 0;# P2 r% J! V3 E
  62. static volatile int irqraised2 = 0;! t6 ^+ T7 T1 g
  63. : y( k' F* E( W7 f. C5 P6 \
  64. int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);( [% U- @8 [" r6 o
  65. int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);. K  d$ }4 D: U) }3 ]8 i
  66. int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);2 U, t* d6 Y! o9 d

  67. 0 ~$ T- s% C5 @8 }" Q$ n
  68. dma_addr_t dmaphyssrc1 = 0;
      R9 ^) m, Y9 S3 h7 R
  69. dma_addr_t dmaphyssrc2 = 0;
    ' D* D- z" l; D: i8 y* _
  70. dma_addr_t dmaphysdest1 = 0;
    0 Y! V$ w) `7 ^4 K, Q
  71. dma_addr_t dmaphysdest2 = 0;
    ' l8 ?. z: ^* l2 P! t; R0 E1 L" ]3 j
  72. ; E: p. A( G7 ?% x
  73. char *dmabufsrc1 = NULL;; i8 @( a6 ^" I- y0 K
  74. char *dmabufsrc2 = NULL;: q2 K1 K1 S5 d7 |
  75. char *dmabufdest1 = NULL;  R" g9 U. ]+ r
  76. char *dmabufdest2 = NULL;
    9 G. c  J: {8 N
  77. ( j8 r8 {7 W% w7 V
  78. static int acnt = 512;- `8 ~" \. n7 z
  79. static int bcnt = 8;
    ! L! x( {) b! E2 X1 G
  80. static int ccnt = 8;4 e8 ]4 v5 B) F; }% s5 a: b

  81. ( ]0 ^3 Y3 X" B, ^  T* ~
  82. module_param(acnt, int, S_IRUGO);  P1 k* U0 d1 I. \. e* y5 f
  83. module_param(bcnt, int, S_IRUGO);
    ( w# H) e2 n. b2 n* P$ a" ?
  84. module_param(ccnt, int, S_IRUGO);
复制代码
! Z& e+ u9 E# i  g. |! v! {

" P- P$ R4 m% M  b      这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用
& ?% d+ u  l; U$ o0 N6 F/ I4 xarm-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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
+ i* c5 ^, A- b6 O) Y# ~% U6 c     我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
7 |4 N" w$ i4 r
7 R: B: C5 i) ~6 p# c
  f( i% s6 _( U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-30 23:48 , Processed in 0.046103 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表