menyongjuan
驱动牛犊
驱动牛犊
  • 注册日期2002-11-18
  • 最后登录2003-01-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1016回复:0

如何获得I/O空间的首地址

楼主#
更多 发布于:2003-01-10 14:11
我的PCI板是WIN98下的VXD驱动,根据配置空间系统分配的I/O空间正确,我用以下程序提取I/O的首地址,调试用DOUT输出显示其首地址为0,既没有获得其首址。(程序用VTOOLS生成)如下:帮我看看程序,给我体协建议,谢谢!!!
CONFIGRET OnConfigure(
CONFIGFUNC cf,
SUBCONFIGFUNC scf,
DEVNODE devonde,
DWORD refdata,
    ULONG flags
)
{
//CMCONFIG config;
CMCONFIG config;
LOG_CONF logconf;
RES_DES hres;

switch(cf)       //branch on function code
{
case CONFIG_START:

CONFIGMG_Get_Alloc_Log_Conf(&config,devonde,CM_GET_ALLOC_LOG_CONF_ALLOC);
irq=config.bIRQRegisters[0];//从云台端接收数据满时产生中断的中断号
ioport1=config.wIOPortBase[1];//基址寄存器1的物理地址(I/O),读写数据时所应用的I/0映射通道,PASS_THRU区域1
ioport0=config.wIOPortBase[0];//基址寄存器0的物理地址(I/O)
ioport2=config.wIOPortBase[2];//基址寄存器2的物理地址(I/O),用于PCI配置时存放数据,PASS_THRU区域2
/* if(irq!=0xff){
pMyIRQ=new MyHwint();
if(!pMyIRQ||!pMyIRQ->hook))bUsingInt=FALSE;
else bUsingInt=TRUE;
};*/
/* #ifdef DEBUG
dout<<ioport0<<endl;
            dout<<ioport1<<endl;
            dout<<ioport2<<endl;
           #endif*/
return CR_SUCCESS;

case CONFIG_REMOVE:
case CONFIG_STOP:
// if(pMyIRQ)delete pMyIRQ;
irq=0xff;
return CR_SUCCESS;
default:
return CR_DEFAULT;
}
}

CONFIGRET Menyp1Device::OnPnpNewDevnode(DEVNODE devNode, DWORD loadType)
{
switch(loadType)
{
case DLVXD_LOAD_DEVLOADER:
return CONFIGMG_Register_Device_Driver(devNode,OnConfigure,0,
CM_REGISTER_DEVICE_DRIVER_DISABLEABLE| CM_REGISTER_DEVICE_DRIVER_REMOVABLE);
default:
return CR_DEFAULT;
}

return CR_DEFAULT;
}
协建议,谢谢!!!

最新喜欢:

okincnokincn
游客

返回顶部