阅读:1681回复:1
难家不会,会家不难,大侠请帮我看看这个中断服务程序
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及驱动的编写,只想把中断实现就行。还请诸位大侠帮我分析一下,哪些地方需要改进。先谢过了。 |
|
沙发#
发布于:2002-05-04 18:07
PCI设备,资源(地址等。。。)可以在驱动里面得到的呀。如果系统更改了资源,难道你再编译一次?
在VxD里面怎么能用new/delete操作符呢?除非你重载了。 |
|