ibblli
驱动牛犊
驱动牛犊
  • 注册日期2001-10-18
  • 最后登录2003-10-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1076回复:1

请教:WDM 中断死机问题

楼主#
更多 发布于:2003-10-23 10:11
/卡是一块PCI声卡,在驱动安装之前,用Windriver查看其资源,
  Bar0=00000001
  INTLN=0


然后准备驱动。非常简单的驱动。几乎什么都没有添加,直接用DriverWorks的生成的框架。
请看OnStartDevice(KIrp I)部分:

NTSTATUS Pcimodem_3Device::OnStartDevice(KIrp I)
{
   NTSTATUS status = STATUS_SUCCESS;
I.Information() = 0;
PCM_RESOURCE_LIST pResList = I.TranslatedResources();
KPciConfiguration PciConfig(m_Lower.TopOfStack());

status = m_IoPortRange0.Initialize(
pResList,
PciConfig.BaseAddressIndexToOrdinal(0));
if ( !NT_SUCCESS(status) )
return status;
}

如果在OnStartDevice中简单的只初始化端口范围,则这个驱动可以安装。安装之后,
在硬件管理器中查看该卡的资源时,
  中断号11,
  口地址范围:1400-14ff
这是正常的。


但是,只要添加了与中断有关的部分,见如下代码:
NTSTATUS Pcimodem_3Device::OnStartDevice(KIrp I)
{
   NTSTATUS status = STATUS_SUCCESS;

I.Information() = 0;
PCM_RESOURCE_LIST pResList = I.TranslatedResources();
KPciConfiguration PciConfig(m_Lower.TopOfStack());

status = m_IoPortRange0.Initialize(
pResList,
PciConfig.BaseAddressIndexToOrdinal(0));
if ( !NT_SUCCESS(status) )
return status;

       //---------------------------------------------------
// Initialize and connect the interrupt
status = m_Irq0.InitializeAndConnect(
pResList,
LinkTo(Isr_Irq0),
this
);
if (!NT_SUCCESS(status)) return status;
InitializeDpcForIsr(LinkTo(DpcFor_Irq0));
return status;
       //---------------------------------------------------
         添加了与中断有关的部分,该中断是一个共享类型。
}

驱动可以编译通过。但安装时,没有任何提示信息,机器就死机了。

猜测是中断的问题,例如冲突等,初始化中断的问题。但是,这是标准的例子,
没有再多添加任何其他语句。


请论坛的朋友帮忙诊断一下。
谢谢!

ibblli
savage213
驱动牛犊
驱动牛犊
  • 注册日期2003-10-01
  • 最后登录2004-03-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-23 20:45
不懂!
游客

返回顶部