ddxj
驱动牛犊
驱动牛犊
  • 注册日期2002-04-12
  • 最后登录2003-06-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1681回复:1

难家不会,会家不难,大侠请帮我看看这个中断服务程序

楼主#
更多 发布于:2002-04-27 16:55
pci的i/o卡,9052芯片,希望卡实现中断,用VToolsd写了一个Vxd,代码如下:
BOOL Pci7432Device::OnSysDynamicDeviceInit()
{
    ioport=0xdc00&0xfffe;
  //0xdc00是用windriver看到的pci卡的bar1的首地址
    io=ioport+0x4c;
  //0x4c是9052中断控制寄存器的偏移
    pMyIRQ = new MyHwInt();
    if (!pMyIRQ || !pMyIRQ->hook()) //挂接中断
        return FALSE;
    pMyIRQ->physicalUnmask(); //允许中断
    VSD_Bell();//鸣叫一声
    return TRUE;
}

BOOL Pci7432Device::OnSysDynamicDeviceExit()
{
    if (pMyIRQ) delete pMyIRQ;
    VSD_Bell();//鸣叫一声
    return 1;
}

BOOL MyHwInt::OnSharedHardwareInt(VMHANDLE hVM) //中断处理
{
   VSD_Bell();//鸣叫一声
   _outpd(io,0x00000400);
//0x00000400是我从别的地方看来的,不知是什么意思,估计是清除9052中断标志吧。
    sendPhysicalEOI();
    return TRUE;
}

这样做出来的vxd,在应用程序中加载了以后,只来一次中断(只鸣叫一声),不知是什么原因。我课题太紧,没有时间仔细研究9052及驱动的编写,只想把中断实现就行。还请诸位大侠帮我分析一下,哪些地方需要改进。先谢过了。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-05-04 18:07
PCI设备,资源(地址等。。。)可以在驱动里面得到的呀。如果系统更改了资源,难道你再编译一次?
在VxD里面怎么能用new/delete操作符呢?除非你重载了。
游客

返回顶部