- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于WIN CE与s2410的外部中断的实现 - Read
基于WIN CE与s2410的外部中断的实现
曹彤星
中断是指在执行程序的过程中,出现了异常情况和特殊请求时,计算机将停止现行程序的运行,转去对这些异常情况或特殊情况进行处理。
一、中断的基本知识
(一)中断的优点
当CPU与外设交换信息时,若用查询的方式,则CPU就要浪费很多时间去等待外设。这样就存在一个快速的CPU与慢速的外设之间的矛盾。为解决这个问题,一方面要提高外设的工作;另一方面发展了中断的概念。
1、同步操作
有了中断功能,CPU在启动外设工作后,就继续执行主程序,同时外设也在工作,当外设把数据准备好后,发出中断申请,请求CPU中断它的程序,执行输入或输出(中断处理),处理完以后,CPU恢复执行主程序,外设也继续工作。而且有了中断功能,CPU可命令多个外设同时工作。这样大大提高了CPU的利用率,也提高了输入、输出的速度。
2、实时控制
现场的各个参数、信息,需要的话可在任何时间发出中断申请,要求CPU处理;CPU就可以马上响应(中断要开放)加以处理。这样的及时处理在查询的工作方式下是做不到的。
故障处理
在出现电源突跳与存储出错等故障时,就可以利用中断系统自行处理,而不必停止运行。
(二)中断系统的基本功能
控制器中设置中断系统后,便可以处理各种中断。一个完整的中断系统应具备如下的基本功能。
实现中断请求
实现中断请求,就是要解决如何建立中断源,中断源在什么时候或何种条件下可向CPU发出中断申请。
实现排队判优
计算机中往往设置有多种中断源,当多个中断源同时向CPU提出中断请求后,CPU应能按轻、重、缓、急予以响应。如何确定响应的优先次序,是中断结构要解决的重要问题之一。
实现中断响应
当择优选出中断源之后,CPU以何种方式响应中断,如何保护中断时的现场,又在什么时候允许有新的中断请求等,这些问题都是在中断响应时要解决的。
实现中断服务程序的连接
在CPU响应中断后,如何停止现行程序的执行,并转入中断服务程序的入口地址,中断服务程序的结构情况等,都是要解决的问题。
实现中断返回
此功能是解决中断处理结束后,CPU如何恢复现场,并正确返回到原程序的断电。
实现多重中断
当正在执行中断处理的过程中,又出现新的中断请求时如何处理,这就是中断嵌套问题
(三)单级中断的处理过程
一般有以下几步:中断请求、中断响应、中断处理、中断返回
二、wince下关于中断的主要函数及其说明
(一)HookInterrupt:
这个函数配置一个带内核的中断服务程序来识别特定的由它的中断请求(IRQ)号来指示的硬件中断。
BOOL HookInterrupt(int bwIntNumber,FARPROC pfnHandler);
hwIntNumber:硬件中断号,注意它为实际硬件IRQ值而不是逻辑中断标示
pfnHandler:来处理特定IRQ中断的指向ISR的指针
返回值:1—成功 0—失败
这个函数仅在OEM适应层被OEM调用,OEMInit函数典型用来初始化所有的ISR
因为只有一个中断,所以不被ARM使用。
头文件:Nkintr.h
相链接的库:NK.lib
(二)InterruptDisable
通过识别中断ID号来禁止硬件中断
VOID InterruptDisable(DWORD idInt);
参数:idInt [in]中断的ID
评论:设备驱动访问InterruptDisable来禁止硬件中断与撤销通过中断初始化注册的事件。这个驱动必须在关闭事件处理之前调动InterruptDisable。这个内核访问OEMInterruptDisable函数作为这次访问的一部分。
头文件:PKfuncs.h
链接库:Coredll.lib
(三)InterruptDone
这个函数示意内核,中断过程已经完成
VOID InterruptDone( DWORD idInt );
参数:
idInt 中断标识符
评论:
设备驱动调动InterruptDone当它已经完成中断处理过程并准备为下一个中断时。InterruptDone在驱动等待注册事件再被示意之前,必须被访问来--去中断屏蔽。内核通过OEMInterruptDone函数来调用。
OS Versions: Windows CE 2.10 and later.
头文件:Pkfuncs.h
联接库:Coredll.lib
(四)InterruptInitialize
这个函数与内核一起来初始化硬件中断。初始化允许设备驱动来注册一个事件与启动中断。
BOOL InterruptInitialize(
DWORD idInt,
HANDLE hEvent,
LPVOID pvData,
DWORD cbData
);
参数:
idInt
与中断服务线程相联系的中
文档评论(0)