CE驱动开发入门之中断处理
2010-07-06 18:45
211 查看
驱动程序开发过程中对中断的处理是很重要的一部分,直接关系程序的运行结果与效率,所以需要对其给予足够的重视.
中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分.
CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为:
1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件.
2.用InterruptInitialize将些事件与硬件所需要的中断关联起来.
3.创建一个线程,在此线程中用WaitForSingleObject等待事件,当等到这个事件之后,开始相应的处理,完成之后调用InterruptDone去重新激活中断.
硬件相关部分,
一般的,OAL层的中断处理程序(OEMInterruptHandler),在监测到某个中断后,会将CPU相应的中断标志位清除,同时禁用该中断,以保证系统调度不会被该中断再次打断,而后返回一个中断号给系统,从而使系统开始调度其IST,驱动程序的IST被激活,完成相应的处理之后应该清除硬件级的中断标志,从而使硬件知道中断服务已经完成,而不再产生该中断。当然有些硬件,例如ATA/ATAPI不需要这个动作,这些设备在最后一个字节被读出/写入之后会将其DRQ标志清除,自然,只要还有一个字节没有被读出/写入,DRQ就一直存在。
注意:
5。0以后引入PQOAL的概念,在PQOAL格式的BSP中,有一个SYSINTR与IRQ的概念,SYSINTR是系统使用的中断,IRQ为硬件中断,即CPU使用的中断线,一般的BSP中,将其CPU的中断标志寄存器的各位一一对应,即,IRQ0对应于该寄存器的第0位,IRQ2为第2位。所以,做为驱动程序,必须知道它所驱动的硬件所使用的IRQ,即硬件中断线。然后调用KernelIoControl的IOCTL_HAL_REQUEST_SYSINTR功能得到一个SYSINTR,然后再进入上面描述的流程。这样,驱动程序 以后就只使用申请到的SYSINTR,而不关心其IRQ了。 OAL层会将IRQ与SYSINTR做相互转换。
中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分.
CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为:
1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件.
2.用InterruptInitialize将些事件与硬件所需要的中断关联起来.
3.创建一个线程,在此线程中用WaitForSingleObject等待事件,当等到这个事件之后,开始相应的处理,完成之后调用InterruptDone去重新激活中断.
硬件相关部分,
一般的,OAL层的中断处理程序(OEMInterruptHandler),在监测到某个中断后,会将CPU相应的中断标志位清除,同时禁用该中断,以保证系统调度不会被该中断再次打断,而后返回一个中断号给系统,从而使系统开始调度其IST,驱动程序的IST被激活,完成相应的处理之后应该清除硬件级的中断标志,从而使硬件知道中断服务已经完成,而不再产生该中断。当然有些硬件,例如ATA/ATAPI不需要这个动作,这些设备在最后一个字节被读出/写入之后会将其DRQ标志清除,自然,只要还有一个字节没有被读出/写入,DRQ就一直存在。
注意:
5。0以后引入PQOAL的概念,在PQOAL格式的BSP中,有一个SYSINTR与IRQ的概念,SYSINTR是系统使用的中断,IRQ为硬件中断,即CPU使用的中断线,一般的BSP中,将其CPU的中断标志寄存器的各位一一对应,即,IRQ0对应于该寄存器的第0位,IRQ2为第2位。所以,做为驱动程序,必须知道它所驱动的硬件所使用的IRQ,即硬件中断线。然后调用KernelIoControl的IOCTL_HAL_REQUEST_SYSINTR功能得到一个SYSINTR,然后再进入上面描述的流程。这样,驱动程序 以后就只使用申请到的SYSINTR,而不关心其IRQ了。 OAL层会将IRQ与SYSINTR做相互转换。
相关文章推荐
- 驱动开发入门之中断处理
- 嵌入式学习-驱动开发-lesson3-混杂设备驱动模型与linux中断处理流程
- WinCE中中断的处理过程(驱动开发人员角度)
- Linux内核与驱动开发学习总结:中断和中断处理(八)
- WinCE中中断的处理过程(驱动开发人员角度)
- WinCE中中断的处理过程(驱动开发人员角度)
- linux2.6 驱动开发入门:中断
- 【转载】WinCE中中断的处理过程(驱动开发人员角度)
- [Linux驱动入门]中断处理
- 第十章--中断处理 (专注于嵌入式Linux内核和驱动开发)
- WinCE中中断的处理过程(驱动开发人员角度)
- Exynos4412 中断驱动开发(二)—— 中断处理流程分析
- WinCE中中断的处理过程(驱动开发人员角度)
- QNX驱动开发——中断处理
- Exynos4412 中断驱动开发(二)—— 中断处理流程分析
- WinCE中中断的处理过程(驱动开发人员角度)
- Linux驱动开发-中断处理模型笔记 5
- QNX驱动开发—中断处理,中断响应机制
- 转载—— WinCE中中断的处理过程(驱动开发人员角度)