floatheart
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2005-08-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1742回复:3

pci9052中断读取数据死机问题求教?

楼主#
更多 发布于:2004-10-20 15:40
    pc通过9052读取pci板卡上dpram的数据,宽度16位。采集卡数据存放dpram中,写满后向pc发中断请求读取。
    板卡和上位机测试程序在一台工控机上运行良好。更换其他工控机,每次都在中断读取数据时候死机。把EEPROM中数据宽度改为32位后,正常响应中断。
 这样一来,高位的数据就读不到了。因为dpram是16位的。
 
我硬件上是这样接线的:
  LBE1作为LA1,然后LA1-LA13与dpram的A0-A12相连,映射基地址membase后,在此基础上加偏移量读取ram数据.但每次实际偏移量和程序偏移量相差2倍才能访问;
  比如读取dpram中0x02的内容,在程序中就要写read(membase+0x04)才能实现
所以,本来是8k的dpram,就要在EEprom分派16k的映射空间。
是不是这里有问题呢?

 盼望各位过路高手指点
Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-10-23 09:28
用户被禁言,该主题自动屏蔽!
floatheart
驱动牛犊
驱动牛犊
  • 注册日期2003-10-27
  • 最后登录2005-08-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-23 20:10
你是说eeprom中的配置吗?
配成16位的在中断中就死机了。
我原来配成16位的宽度,返回ax16位数据
后来为了提高速度,在程序中可以返回32位数据,一切正常
unsigned int Read_mem(unsigned long addr)
{
  asm{
      push ds
      mov ax,0
      mov ds,ax
      mov esi,addr
      mov eax,[esi]
      pop ds
  }
  return _EAX;
}
现在换了台机子就不行了,可能是时序问题
我现在也不明白为什么能读到32位数据
tangling
驱动牛犊
驱动牛犊
  • 注册日期2005-04-07
  • 最后登录2005-07-22
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-07-19 11:33
双口RAM应该改为8位模式,在局部寄存器中设置,如果为16位,也要设置,而且在响应中断的时候最好不要跟踪
游客

返回顶部