wince 5.0下的串口驱动实现

中断注册是在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里去傻等了...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值