中断注册是在mdd层实现的
在你PB的安装目录查找那个mdd.c文件
COM_Init函数里,StartDispatchThread( pSerialHead )为开启那个串口监视线程,这个函数里有下面的代码
InterruptInitialize(pSerialHead->pHWObj->dwIntID,
pSerialHead->hSerialEvent,
NULL,
0) )
在这注册中断和时间关联了
COM_Init函数里,这句pSerialHead->pHWObj = GetSerialObject( DevIndex );是获取PHWOBJ类型对象的
GetSerialObject函数在你的xxxxser.c文件里实现的
假设你是用的COM1,就对应下面这类型
const HWOBJ IoObj = {
THREAD_AT_INIT,
SYSINTR_SERIAL,
(PHW_VTBL) &IoVTbl
};
pSerialHead->pHWObj->dwIntID就等于SYSINTR_SERIAL中断了
正好在改我的串口驱动,希望能帮到你
中断发生后,在OEMInterruptHandler中 会把这个IRQ转换成SYSINTR并通知系统, 则由于前面已经 将SYSINTR和ISTEVENT相关联(6楼分析了), 所以系统收到这个SYSINTR后,就把SET相关的EVENT. 从而IST从 WaitForSingleObject里跳出往下继续执行,进而读取自己模块的Interrupt Status Register进行判断,操作其他 register控制硬件, 完成后调用InterruptDone函数告知系统,然后又回到WaitForSinigleObject里去傻等了...