1983|1

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 
Windows CE如何进行中断处理?

  (1)Windows CE中断处理流程

  ①硬件设备向Kernel发送中断异常的代码,如果检测到这个中断异常,就会被Kernel层的异常处理所截获。然后,中断服务调度程序会调用OAL例程中的OEMInterruptDisable函数,这个函数会通知硬件在处理完这一中断前关闭特殊的中断,但其它的中断仍然处于开放状态,中断服务例程 ISR会被调用来决定如何处理这一中断。

  ②Kernel接收到ISR的返回值可得知如何处理这一中断。它的响应结果之一是忽略掉这一中断不作处理(SYSINTR_NOP),或另一结果是准备执行IST。然后,Kernel引发中断服务调度程序去唤醒中断服务线程。IST是常规的Win32线程,一旦启动后,它会创建必要的EVENT,然后等待该EVENT被激发。中断服务调度通过调用PulseEvent函数来激发EVENT,从而唤醒IST线程运行。当唤醒以后,IST会对中断进行处理。

  ③当IST处理完成后,还需要调用InterruptDone函数通知Kernel。Kernel则调用OEMInterruptDone函数完成此次中断的处理过程。最后,OAL例程通知硬件设备重新启用中断。

  (2)中断处理涉及的几个常用函数

  Windows CE在处理中断时会涉及到两类函数的使用,第一类是供OAL调用的ISR函数,例如HookInterrupt函数在OEMInit函数中被调用以关联 IRQ和ISR,UnhookInterrupt函数用来终止IRQ和ISR的关联。第二类是供驱动程序调用的IST函数,例如 InterruptInitialize函数用来将EVENT对象和逻辑中断号关联并允许中断,InterruptDone函数用来通知中断处理的结束,InterruptDisable函数被驱动程序调用以关闭中断同时取消被InterruptInitialize初始化的EVENT对象。

  ISR函数属于OAL层,它将CPU寄存器中的数据移动到内存缓冲区中,但是它不能做更多的工作,其中一个原因是它不能访问用户态的存储区,它要把这些工作交给IST来完成。ISR函数做的另一项工作是进行物理中断号和逻辑中断号的映射。经过ISR后,就能把这一物理中断转换成Windows CE标准的SYSINTR_KEYBOARD逻辑中断。Kernel会根据这个逻辑中断值找到对应的EVENT,从而唤醒IST。

最新回复

飘过零分帖 这样的标题很无聊,有分也不想回答  详情 回复 发表于 2009-4-13 12:17
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
飘过零分帖

这样的标题很无聊,有分也不想回答
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表