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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

5

主题

11

帖子

73

积分

注册会员

Rank: 2

积分
73
跳转到指定楼层
楼主
发表于 2018-1-30 11:01:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yyj 于 2018-1-30 11:01 编辑   s/ Y" S5 x( I2 A) f$ c
  1. [code]EDMA sample test application
    $ {; v# Q& F$ b- x5 G
  2. /*$ w" S! E: v8 `  _& a
  3. * edma_test.c
    7 u' [( `0 a  N( |4 J. d
  4. *
    - X7 ]0 k; o8 X$ D
  5. * brief  EDMA3 Test Application/ p+ |' C6 n" S+ h( j( |
  6. *' W( s9 o4 @5 }  Q1 z
  7. *   This file contains EDMA3 Test code.6 ?+ O" q/ ~/ c- e  z' N; C5 J7 }
  8. *' X: `9 `+ Q0 ?8 t# s) D
  9. *   NOTE: THIS FILE IS PROVIDED ONLY FOR INITIAL DEMO RELEASE AND MAY BE
    ) b! O- W( m) W
  10. *         REMOVED AFTER THE DEMO OR THE CONTENTS OF THIS FILE ARE SUBJECT
    ; X" p0 Z; X: A6 b, M  v" L
  11. *         TO CHANGE.2 K7 ], _" i; c  x& W% P
  12. *
    7 f! \$ q) G) i2 _# I6 w
  13. * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
    9 z  Y0 ^3 b# |; m
  14. *& Y" K8 r1 g- n1 q* X7 K5 [
  15. * This program is free software; you can redistribute it and/or7 t9 V; v. }8 V$ Q3 e) W2 [: ^& B
  16. * modify it under the terms of the GNU General Public License as
    1 y2 I/ B: c  S  p1 m- V
  17. * published by the Free Software Foundation version 2.
    8 R/ i% N  F) g5 c. Y
  18. *
    0 h6 I- Z# x  Z& A" v; t
  19. * This program is distributed "as is" WITHOUT ANY WARRANTY of any% T; l) }7 c5 G- I/ ~. p
  20. * kind, whether express or implied; without even the implied warranty
    $ W5 e/ L3 u  N( |3 K0 k; ^( P
  21. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the. e3 z5 h8 F, v$ }+ B
  22. * GNU General Public License for more details.
    , d' h% ]* @: A4 O8 U% E. E8 }
  23. */+ ]  c( J' n. a, K
  24. # w4 Q0 N) c; u
  25. #include <linux/module.h>
    , O. V3 V% c( o7 Y* {1 ]
  26. #include <linux/init.h>
    8 M2 v0 c6 `" c" x6 d, ]3 Y
  27. #include <linux/errno.h>8 _; e# D0 d! y9 g, |6 P1 k$ p- c
  28. #include <linux/types.h>
    / i9 U2 `9 B. |+ B, j1 n
  29. #include <linux/interrupt.h>
      j$ E- H# c! @* `/ e
  30. #include <asm/io.h>
    + K, q: ]+ B4 D, O" V6 {  w
  31. #include <linux/moduleparam.h>5 t+ ~/ F6 {2 L6 X( A
  32. #include <linux/sysctl.h>2 n) b( Y  H6 F
  33. #include <linux/mm.h>: A) }' R9 x5 q( g# B
  34. #include <linux/dma-mapping.h>& w+ x" `' L+ `# _4 _/ g
  35. 1 b2 x1 v' `2 w1 J
  36. #include <mach/memory.h>- o% N% B& ^. p: @4 Y
  37. #include <mach/hardware.h>- ?( d, E$ K# h  y7 z7 ^4 d( {
  38. #include <mach/irqs.h>, o8 g7 s% e8 H! ~# h* V
  39. #include <asm/hardware/edma.h>- C. i/ V. I/ ]
  40. / e7 `( o4 j! }+ M* ]5 H2 t: y
  41. #undef EDMA3_DEBUG
    0 F& Z0 B2 W/ V4 _& r" J4 {
  42. /*#define EDMA3_DEBUG*/: b+ h9 B5 k! W6 a# a6 _) [& ~- `

  43. " H) L7 y% S: K/ D
  44. #ifdef EDMA3_DEBUG/ ?, J$ Y6 e' [" }
  45. #define DMA_PRINTK(ARGS...)  printk(KERN_INFO "<%s>: ",__FUNCTION__);printk(ARGS)
    . d& I: j6 U' [4 M* R, O7 t; ~8 W
  46. #define DMA_FN_IN printk(KERN_INFO "[%s]: start\n", __FUNCTION__)+ o: }" F( p: r4 a
  47. #define DMA_FN_OUT printk(KERN_INFO "[%s]: end\n",__FUNCTION__)( f" B* a& I0 u$ B
  48. #else
    & `- U7 i* n& f, p; [5 A% E
  49. #define DMA_PRINTK( x... )
    ! X  ?- J8 i9 D! ^! I
  50. #define DMA_FN_IN, t) ~- T1 }! N$ W3 ^* |0 T3 a
  51. #define DMA_FN_OUT
    ) ?9 e6 Z: `& K4 }
  52. #endif
    7 D+ f4 @: i) P

  53. 6 I( L: U/ B* V% _, m7 M0 Q
  54. #define MAX_DMA_TRANSFER_IN_BYTES   (32768); h9 @, Y* _7 @" Y9 i' R
  55. #define STATIC_SHIFT                31 R2 t& ~& b- d" K2 V: {& K
  56. #define TCINTEN_SHIFT               20
    % O! c# C0 k+ p: k* S! a' U
  57. #define ITCINTEN_SHIFT              21
    " J3 K: B/ h5 u* ~# [
  58. #define TCCHEN_SHIFT                22: y, |, H" a1 t/ O, Q1 X
  59. #define ITCCHEN_SHIFT               23+ p) ^" }  R. m

  60. ' f6 s, _: H) C1 p' ~0 C' Q  B' E
  61. static volatile int irqraised1 = 0;' z; T) Q* Q( k# B6 v& `# N
  62. static volatile int irqraised2 = 0;, _/ I+ A, ^  D& u$ Z" C
  63. , s2 E* E' H- S
  64. int edma3_memtomemcpytest_dma(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);0 h1 ^9 a% O/ ]
  65. int edma3_memtomemcpytest_dma_link(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);  X  J1 p9 w; g; Y3 A9 ?: O
  66. int edma3_memtomemcpytest_dma_chain(int acnt, int bcnt, int ccnt, int sync_mode, int event_queue);1 E4 k9 X6 c2 K. O/ R
  67. ' A; L% X" A# q& y/ g
  68. dma_addr_t dmaphyssrc1 = 0;
    6 S/ \4 f" e% {% ^
  69. dma_addr_t dmaphyssrc2 = 0;
    0 O6 X) p$ N3 M
  70. dma_addr_t dmaphysdest1 = 0;9 x, V/ |0 ~5 S0 `# G
  71. dma_addr_t dmaphysdest2 = 0;2 W, y, G( ~* T
  72. 1 N& d4 ?% M4 n( N% o9 U" _0 `2 i
  73. char *dmabufsrc1 = NULL;
    ( F# R- d! Q7 l0 D0 v4 u$ r
  74. char *dmabufsrc2 = NULL;% [7 C/ B' q  z; `, r2 y% M. W
  75. char *dmabufdest1 = NULL;3 M1 _9 ^) _' m$ V
  76. char *dmabufdest2 = NULL;
    3 l* r5 \4 H1 x

  77. / ?6 [* O6 S, u4 F8 L9 i& z0 ~
  78. static int acnt = 512;& {8 Q0 J, }3 A1 m
  79. static int bcnt = 8;
    ! [9 k2 N: X) N5 q: N
  80. static int ccnt = 8;- W2 @# G- j+ n/ Q2 u  `
  81. 8 i" W1 v* R. P) S
  82. module_param(acnt, int, S_IRUGO);( d( o: W, e# m& v: \+ @
  83. module_param(bcnt, int, S_IRUGO);: j9 q8 x' I9 L2 @( v
  84. module_param(ccnt, int, S_IRUGO);
复制代码
/ t' X/ l9 a% K0 D4 A
6 L& {0 L1 @# c+ T+ m/ d
      这是在TI上找到的一个针对Davanci处理器简单的EDMA3驱动程序测试例程的一部分,我在编译的过程中是用& c. r4 F  B1 \$ K. _
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这个命令来链接库文件进行编译,但是报的错误特别多,我又试着一个函数一个函数往进加,仍然是很多错误。
9 s# {* Q" L2 l     我想问一下如何用一个简单的程序来测试一下EDMA3的驱动。
" M3 U& x: w1 w; C' p0 J  s  C# B# u! M6 S

" |8 w3 z. R- N1 z$ r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 10:14 , Processed in 0.054894 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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