根据arm公司提供的资料,在使用快速中断的时候一般对时间要求比较高,这时建议客户使用汇编语言进行编写fiq的中断处理函数,如果使用mdk的关键字__irq,则使用方法如下:
1. 中断服务程序
不同的arm微控制器有不同的中断优先级和中断系统。参考开始使用arm开发工具集用户指南, 中断,可了解各种中断相关概念。
2. keil编译器提供关键字__irq 以定义标准的(irq)和(fiq)中断函数。
例子:
__irq void irq_handler (void) {
/* the interrupt code */
}
4. 对没有向量中断处理或fiq中断函数的微控制器,需要按要求改变cpu的启动代码。
例子:
下面的c代码实现了一个空的 fiq_handler:
__irq void fiq_handler (void) {
;
}
在启动代码中,要进行如下修改以调用fiq_handler:
vectors ldr pc, reset_addr
:
ldr pc, fiq_addr ; instruction at fiq vector
location
:
preserve8 ; tell linker: stack
;alignment is 8-byte
import fiq_handler ; use external fiq_handler
fiq_addr dcd fiq_handler ; fiq entry point
以上部分节选自keil的用户指南部分。