下面扼要的介绍下如安在驱动中编写中止程序。
首先说一下在wince内核中,处理器收到中止后的处理进程:
当处理器接收到中止后:
(1)跳转到内核反常处理器,而且屏蔽掉一切等优先级和低优先级的其他的一切对CPU的中止。
(2)调用OEMInterruptHandler()函数回来中止的体系中止号,而且屏蔽这个中止。
(3)中止处理器从头使能对CPU的一切的中止(除了改设备中止),而且触发相应的IST事情。
(4)IST完结中止处理使命,调用InterruptDone()函数从头使能该设备中止。
怎么去完结一个中止呢,下面就一个简略的GPIO来简述完成进程:
(1)向内核注册ISR,以及SYSINTR(逻辑中止号)。
(2)装备GPIO作为一个中止信号线。
(3)树立物理中止号和逻辑中止号之间的联络。可所以动态的如KernelIoControl().静态的是OALIntrStaticTranslate()。
(4)创立一个事情CreateEvent()。
(5)调用InterruptInitialize()来注册这个事情。(调用这个函数便是将这个事情和逻辑中止号联络起来)
(6)创立中止服务线程 IST。
在中止服务线程(IST)中应该做的是:
(1)调用WaitForSingleObject()来等候上述的事情。
(2)处理和设备相关的内容
(3)调用InterruptDone()函数来从头使能这个设备中止。
大体的中止进程便是这样的,其间有些函数都不必定要在某个当地完成,只要能履行到就可以了。