WinCE驱动中设备中断的处理

因为BSP和WinCE系统,已经做了大量的工作,完成了所有底层的处理。所以我们仅调用几个api,就可以完成驱动程序对中断的处理。

    在WinCE中,中断被转换成为了一个事件。所以我们可以创建一个线程,该线程循环等待事件发生,一旦发生则去操作对应设备。这个线程被成为IST。整个过程如下:

在驱动的XXX_Init()中
1.创建一个事件

hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
2.获得sysIntr,硬件有一个中断号,如EINT0,等等,但该中断号并不是WinCE系统能识别的中断号,故要获取WinCE的系统中断号。
KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &sysIntr, sizeof(UINT32), NULL);
其中Irq为硬件中断号,如EINT0等等。
当调用完KernelIoControl函数后,硬件中断号对应的系统中断号,则会保存在sysIntr中。
3.将事件与中断号相连接
在连接前,先禁止该中断,连接后调用一次InterruptDone则会启动该中断。
InterruptDisable(sysIntr);
if(!InterruptInitialize(sysIntr, hEvent, NULL, 0) )
 goto error;
InterruptDone(sysIntr);
4.创建中断服务线程(IST)
hThread = CreateThread(NULL, 0, &IST, NULL, 0, NULL);
至此,就完成了有关设备中断的初始化操作。接下来实现创建中断服务线程即可
其样式如下,省略了对设备操作的代码。
DWORD IST(LPVOID param)
{
 DWORD we;
 while(hThread)
 {
  we = WaitForSingleObject(DPRAM.hEvent, INFINITE);
  ...;
  InterruptDone(sysIntr);
 }
 return ERROR_SUCCESS;
}

转载于:https://www.cnblogs.com/jiegekaoyan/archive/2010/08/12/1798522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值