wince中断如何写?

dszhang88   2009-9-9 08:58 楼主
我知道wince中中断分中断服务例程(ISR)和中断服务线程(IST),那我要写一个按键的中断,需要完成哪些工作?
下面是终端过程:
①当内核的异常处理代码接收到一个来自硬件的中断时,内核会侦测到一个异常情况发生,并会提交这个硬件中断。
②内核的中断支持处理器通知ISR去禁止该中断的重复提交,直到相关的中断处理全部完成后,才再度使能该中断。还会通知硬件屏蔽优先级别低的中断,直到必需的处理结束后,再重新打开被屏蔽的中断。在这个过程中,允许高优先级中断触发。
③异常处理器调用ISR来响应中断。
④内核接收ISR返回值,依据该返回值决定如何处理中断。
⑤内核触发中断支持管理器来唤醒中断服务线程(IST)并激活该线程。
⑥当中断服务线程(IST)被唤醒后,它开始处理相应的中断。
⑦如果需要,中断服务线程调用各种I/0例程访问硬件来完成工作。
⑧中断处理结束后调用InterruptDone函数通知内核。
⑨内核调用OEMInterruptDone完成整个中断处理过程,0AL通知底层硬件使能所有中断
哪些是wince已经提供的,哪些还需要修改和写代码?ISR用不用写写到什么地方?

回复评论 (5)

一言难尽,请看俺博客和简单中断程序powerbutton驱动。
点赞  2009-9-9 09:03
哪些是wince已经提供的,哪些还需要修改和写代码?ISR用不用写写到什么地方?
wince5.0 6.0标准BSP后,基本只要自己写驱动,isr一般不改,除非想提高中断速度。
点赞  2009-9-9 09:05
以三星2410 + WinCE5.0 为例:

按键中断分为下面几步:

1、确定要使用的CPU【外部中断】针脚;
2、建立标准【流驱动】,其中包括【IST】部分;
3、修改 OEMInterruptXXX 系列函数,即【ISR】部分;

////////////////

【流驱动】部分

这个需要你已经掌握基本的【流驱动】制作:

XXX_Init
XXX_Open
XXX_Read
XXX_Write

等等,不过这里很多都用不到,搭个框架就行;

这里主要的是 IST 线程,而其中最主要的就是:

InterruptInitialize 函数的调用,它会通知 OEMInterruptEnable 开启中断;

接下来就是 WaitForSingleObject 的调用了;

当收到中断后,比较麻烦的是如何把这个信息传给应用程序;

有人发送按键消息,有人用事件通知等,这个需要你自己去摸索。

////////////////

【ISR】部分

这个,你只要搜索 OEMInterruptXXX 系列函数,找到地方,然后修改:

其中包括:

Enable

Done

Disable

Handler

整个处理过程,WinCE 帮助中都有介绍;

另外,2410 中有个powerbutton驱动就是一个按键驱动,可以参考。
点赞  2009-9-9 09:22
谢谢,两个高手解答。
我是wince 6.0
点赞  2009-9-9 12:36
不是很理解电源管理,在驱动中的作用
点赞  2009-9-10 08:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复