kill_ak47
驱动牛犊
驱动牛犊
  • 注册日期2003-02-27
  • 最后登录2004-03-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3776回复:9

请各位高手看看,vxWorks DMA 问题

楼主#
更多 发布于:2003-08-18 21:01
我如何分配一段内存供DMA使用,
另外,为什么9054在Win98下可以读写正确
而vxWorks下,读到的数据不对,似乎是32为的数据错位,Big Edian
似乎不对,我该如何解决。谢谢
janmeejm
驱动牛犊
驱动牛犊
  • 注册日期2002-06-10
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-08-20 12:36
please in detail!
janmeejm
驱动牛犊
驱动牛犊
  • 注册日期2002-06-10
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-08-20 12:42
val32 = sysInLong(base0 + PCI9054_DMA0_MODE);
val32 |= //Demand mode
sysOutLong(base0 + PCI9054_DMA0_MODE, val32);
sysOutLong(base0 + PCI9054_DMA0_PCI_ADDR,Buffer));
val32 = sysInLong(base0 + PCI9054_SPACE0_REMAP);
sysOutLong(base0 + PCI9054_DMA0_LOCAL_ADDR, val32&0xFFFFFFFE);
sysOutLong(base0 + PCI9054_DMA0_COUNT,BufferSize);
sysOutLong(base0 + PCI9054_DMA0_DESC_PTR, BIT3);
val32 = sysInLong(base0 + PCI9054_INT_CTRL_STAT);
val32 |= BIT18;
sysOutLong(base0 + PCI9054_INT_CTRL_STAT, val32);
sysOutLong(base0 + PCI9054_DMA_COMMAND_STAT,BITs)
seven
驱动小牛
驱动小牛
  • 注册日期2001-04-03
  • 最后登录2007-03-28
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-20 16:24
这是什么呀?
我爱中医:http://www.ngotcm.com/forum/index.php
kill_ak47
驱动牛犊
驱动牛犊
  • 注册日期2003-02-27
  • 最后登录2004-03-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-21 20:10
就是说例如我有4k的数据,需要从外面的fifo中通过DMA传输到系统内存
中,我必然需要一段4k的系统内存,这一段系统内存应该不可以被应用
程序占用,但应用程序可以访问。专供dma来写。我想问一问这段内存如何锁定给dma。
另外,vxWorks中什么语句可以引起pci总线一次猝发传输,谢谢
沙漠之鹰
驱动大牛
驱动大牛
  • 注册日期2001-12-30
  • 最后登录2007-08-02
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-22 08:20
就是说例如我有4k的数据,需要从外面的fifo中通过DMA传输到系统内存
中,我必然需要一段4k的系统内存,这一段系统内存应该不可以被应用
程序占用,但应用程序可以访问。专供dma来写。我想问一问这段内存如何锁定给dma。
另外,vxWorks中什么语句可以引起pci总线一次猝发传输,谢谢


内存应该是在你的驱动里面分配的。关于pci总线的猝发传输,好像不是由什么语句引起的吧,我觉得应该是由你的硬件设备决定的。
------------------------------ [color=red]茶壶深爱着茶叶,表达爱意时却遭到拒绝,茶壶大吼:为什么?这一切都是为什么? 茶叶胆怯地说:俺妈说了,成天灌水的都不是好人。 ---别到处看,说你哪!!    [/color]
lyw51
驱动牛犊
驱动牛犊
  • 注册日期2002-04-06
  • 最后登录2007-12-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-09-09 16:18
好象 VXWORKS 只支持 LITTLE 端模式
ying_xun
驱动牛犊
驱动牛犊
  • 注册日期2004-06-08
  • 最后登录2005-04-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-09-09 21:27
查看tornado帮助有关cacheLib的内容,可能对你有帮助。
cacheDmaMalloc()分配一块区域,CACHE_DMA_FLUSH刷新该区域,再用CACHE_DMA_VIRT_TO_PHYS把虚地址转换成物理地址,然后直接对这块区域操作,看看能不能行,个人愚见。
myswin
驱动小牛
驱动小牛
  • 注册日期2003-10-13
  • 最后登录2005-11-21
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-09-12 09:59
cacheDmaMalloc() 就可以了~
沙漠之鹰,如果硬件支持猝发,那就一定是猝发的吗?
=========== D =========== R =========== I =========== V =========== E ---------抵制日货-------
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-14 21:38
就是说例如我有4k的数据,需要从外面的fifo中通过DMA传输到系统内存
中,我必然需要一段4k的系统内存,这一段系统内存应该不可以被应用
程序占用,但应用程序可以访问。专供dma来写。我想问一问这段内存如何锁定给dma。
另外,vxWorks中什么语句可以引起pci总线一次猝发传输,谢谢

可以通过USER_RESERVED_MEM宏从内存空间的最后保留一块内存专供dma使用。这块内存操作系统不会使用,用户可以通过绝对地址来访问。
至于你说的突发功能,那是pci的功能。而不是vxworks的功能。你见过windows下有引起pci总线突发传输的函数吗?如果你的两次连续地址的pci传输足够快,这个传输就会以突发方式传输。
有了驱动,人才有了力量。
游客

返回顶部