标签归档:FIQ

UCOS-II系统使用FIQ中断

有些产品需要及时检测外部的输入信号,这时要采用中断。LPC2214的中断分为FIQ和IRQ.FIQ可以嵌套IRQ中断。把需要及时处理的输入信号配置成FIQ中断。

ARM中设计FIQ中断是为了在快速处理的场合使用。如果也在FIQ里面进行任务调度则需要对任务状态进行保存和恢复处理。这样和用IRQ相比,优势并不明显。

在移植时为了加快FIQ处理,在FIQ里面不进行任务调度,仅仅是按照ATPCS的规定,保存一些不被用户FIQ处理程序保护的寄存器,然后调用用户FIQ处理子程序。调用完毕后恢复不被用户FIQ处理子程序保护的寄存器,退出。

在FIQ中断地址0x0000001c处定义

LDR PC,FIQ_ADDR

FIQ_Addr DCD FIQ_Handler

FIQ_Handler

STMFD SP!, {R0-R3, LR} ; 入栈

BL FIQ_Exception ; 调快速中断程序

LDMFD SP!, {R0-R3, LR} ; 出栈

SUBS PC, LR, #4 ; 返回当初的地址

在发生FIQ中断时,ARM硬件进入FIQ异常模式,禁止IRQ,FIQ中断,跳转到0x0000001c处执行。也就是开始执行FIQ_Handler函数。

void FIQ_Exception(void)

{

……

}

继续阅读