CPU运行过程中,是如何知道外设发生了某些事件,如按键,触摸屏,与外设数据的交互。
有两种方法:
(1)查询方式:可以用程序不断的查询各个设备的状态,并响应相关状态,做出一定的处理。但是这种方法比较占用CPU资源,不适用于多任务的系统。
(2)中断方式:当某个事件发生时,硬件会设置某个寄存器,CPU在执行完一条指令后会通过硬件查看这个寄存器。如果相应的事件发生了,则中断当前程序流程,跳转到一个固定的地址处理该事件。处理完后返回被中断程序。
1.先看2440的中断处理框图
(1)Request sources(without sub-reg)中的中断源被触发后,会将SRCPND中的相应位置一。如果该中断没有被INTMSK屏蔽,则会进入中断优先级的处理。
(2)Request sources(with sub-reg)中的中断触发时,会将SUBSRCPND某一位置一。如果没被SUBMASK屏蔽,进入下一步的优先级的处理。
(3)如果被触发的中断是快中断(可以通过设置INTMOD的相应位为1,来使得该中断号对应的中断为快中断),则CPU进入快中断模式处理。可以说,快中断具有最高优先级。
如果是一般中断,可能有几个同时发生,未被INTMSK屏蔽的中断,经过比较选出优先级最高的,然后此中断在INTPND中对应 的位被置一。CPU检查INTPND位,进入IRQ模式进行处理。
中断源的确定:INTPND或是INTOFFSET.
2.中断优先级模块
(上图最后一个仲裁器是5,不是0)
可以通过设置PRIORITY寄存器,来设置相应普通中断的优先级。
优先级的判断:
通过7个仲裁器完成,6个一级仲裁 + 1个二级仲裁
每个仲裁器有6个输入引脚:REQ0-REQ5
对于每个仲裁器,PRIORITY寄存器通过3位来控制
3.中断处理流程
4.中断清除问题
如果该类型中断不会在ISR执行过程中发生,可以在调用ISR后清除。如果在ISR执行过程中,这类中断有可能发生,且必须响应,则调用ISR前必须清除中断,不然就会有可能导致中断的丢弃。
中断的清除:向SRCPND,INTPND相应位写1.。。
阅读(2141) | 评论(2) | 转发(3) |