jewelz
驱动牛犊
驱动牛犊
  • 注册日期2001-09-18
  • 最后登录2002-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1744回复:3

详细询问9052在win98下io访问的问题.

楼主#
更多 发布于:2002-02-09 21:37
     各位大侠小弟用9052做了一块适配卡,遇到了如下的一些问题希望各位大侠不吝赐教。小弟在对9052向系统(win98)申请的IO口下进行读写的时候遇到了问题。通过io口读的问题不大,可以读出9052 local端的寄存器被eeprom赋的值。但是当对io口有写的动作时产生了问题。其现象是当程序对io端口连续读写的时候会导致死机,而如果对该程序采用单步运行时死机的可能性大大减小。据我观察对io口的写操作有时会导致系统分配给9052的io地址丢失,即系统启动后若PCI Base Address 3所分配的地址是0xc080―0xc08f,经过若干次写之后地址突然变成了0x0000―0x000f,这必然导致该资源与系统的其他资源冲突。而此时我的程序还在向0xc080―0xc08f进行读写,此时该地址我觉得已经丢失了,所以导致了系统的死机。但是小弟搞不懂的是为什么系统分配给9052的io地址会丢失呢?此时可以看到9052的PCI Configuration command Register的0位和1位均变成了0,即不允许memory和io映射。希望各位大侠能够伸出援助之手,救救水生火热之中的小弟吧。
   具体的配置如下,对io口读写操作的函数小弟也列出了望大侠们看一下。
    采用ISA模式,非复用方式。PCI Base Address 1 采用i/o映射方式。(Local Address Space 1)也采用i/o映射方式。PCI Base Address 2(Local Address Space 0)没有用到。数据总线采用十六位方式。CNTRL寄存器的14位设为0,15位设为1。
    采用windriver为该适配卡产生一个inf文件,进入win98找到新硬件之后为适配卡装上inf文件,然后可以在win98的设备管理器中看到系统为我做的适配卡所分配的资源。例如为PCI Base Address 1分配的资源为0xc000―0xc07f,为PCI Base Address 2(Local Address Space 0)分配的资源为0xc080―0xc08f(我只向系统申请了这些)。由于是io映射,在98下应该可以直接对io进行读写的操作吧。我对端口的io操作采用如下程序:
WORD WORD_In(WORD io_Port)
{WORD val;
              _asm {
                mov dx,io_Port
                in ax,dx
                mov val,ax

  }

        return val;

}

WORD WORD_Out(WORD io_Port,WORD val)

{
        _asm
  {
   mov dx,io_Port
   mov ax,val
   out dx,ax
}

       return 0;

最新喜欢:

mapoflmapofl lchome0lchome...
lvwj
驱动老牛
驱动老牛
  • 注册日期2001-08-21
  • 最后登录2021-01-31
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望181点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-02-10 01:57
现象很奇怪,无法直接判别是什么原因。建议:
1)在设备驱动程序中检查是否收到资源 stop\\remove 等信息,如果是的话,那就不用想了。
2)看一看站上 windrv 的文章,可能与 windrv 有关。

我碰到的现象是启动之后有可能分配不正确的资源到知冲突,但只要选择“手工配置”即可重新分配。程序运行当中不会出现你所说的情况。
www.bjjcz.com
jewelz
驱动牛犊
驱动牛犊
  • 注册日期2001-09-18
  • 最后登录2002-03-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-02-10 09:49
请问大虾如何检查是否收到资源 stop\\remove 等信息,我在程序中作的就是对io口进行读写操作.
还有你所碰到的“启动之后有可能分配不正确的资源到知冲突,但只要选择“手工配置”即可重新分配”的现象我也碰到过。只是在程序运行当中如果io地址丢失我也是采用上面的办法可以重新获得资源.
还想请问大虾,你遇到的io口读写异常是怎样的表现状态呢?会不会在对io口读写的过程中导致系统死机?

Tom.Cat
禁止发言
禁止发言
  • 注册日期2001-10-10
  • 最后登录2019-07-29
  • 粉丝1
  • 关注0
  • 积分-53792分
  • 威望197411点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-02-19 15:15
用户被禁言,该主题自动屏蔽!
游客

返回顶部