ARM处理器及其内核,除了中断请求(IRQ)外,还支持高速中断请求(FIQ)的处理机制。但是,在处理FIQ中断时,需要禁止IRQ中断,这是为什么呢?
首先,我们需要了解一下FIQ和IRQ之间的区别。IRQ是普通中断请求,比如异步串口中断、GPIO中断等等,用于处理时间稍长的异步事件。而FIQ适用于一些紧急情况,它是用于快速处理中断请求的。比如在手机上,接通充电后的电池电量低于20%,就会触发FIQ中断请求。这种情况下,需要及时处理FIQ以防止手机关机。
FIQ中断请求是一种可急可快的中断请求,处理时需要尽可能快速响应,比如在极短的时间内保存现场,同时又要求能够在极短的时间内恢复现场,继续处理CPU的其他任务。一旦CPU进入FIQ模式,CPU就会立刻暂停正在执行的指令,并切换到FIQ中断处理程序中去执行。所以需要尽快响应。
当进入FIQ中断时,因为FIQ中断请求是比较紧急的,所以中间是不允许有其他中断请求的。这样能够保证FIQ中断处理程序的快速响应。而IRQ中断请求的响应比较慢,为了防止中断响应时的冲突,需要在FIQ中断处理程序中禁用IRQ请求。
在处理FIQ中断时,如果IRQ中断请求同时也出现了,由于IRQ已经被禁用,CPU不会响应IRQ请求,而是优先处理FIQ请求。这样可以保证FIQ中断的快速响应处理,同时又保证了IRQ中断请求在FIQ中断处理结束后的正常响应。
因此,在处理FIQ中断时,需要禁用IRQ中断。这样既能够保证FIQ中断的快速响应处理,也能够避免中断请求的冲突,同时IRQ中断请求在FIQ中断处理结束后正常响应。