中断向量表
有人会问,不是讲异常吗,怎么讲到中断向量表,其实我们在前面提高过,异常也是一种中断,在中断向量表中有他自己的位置,中断向量表包含堆栈指针的复位值,起始地址,也叫异常向量,中断向量表包含所有的异常向量如下图所示:
系统复位后,中断向量表固定从0地址开始,特权模式下软件可以修改中断向量表的起始地址到其他地址,这个地址是有范围限制的,可以在0x00000080~0x3FFFFF80范围内修改。每个异常都有一个关联的优先级,优先级数值越低表示优先级越高,除过Reset,HardFault,NMI,所有的异常优先级都可配置。Reset,HardFault,NMI异常的优先级是固定的且为负数,比其他的异常优先级要高,这点要注意。高优先级的异常可以抢占低优先级的异常处理。
异常入口和返回
入口:
异常的入口发生在当有足够高优先级的异常挂起,或者处理器处于线程模式,或者高优先级的异常抢占低优先级的异常处理。当高优先级的异常抢占低优先级的异常处理,就出现异常嵌套。
返回:
异常返回发生在当处理器处于Handler模式并且执行指令装载EXC_RETURN到PC指针,EXC_RETURN是在异常入口时装载到链接寄存器LR中的值,异常机制依赖于这个值检测什么时候处理器完成了异常处理。EXC_RETURN低五位会提供堆栈返回和处理器模式的信息。异常返回的行为可以通过EXC_RETURN得值看出,具体的值如下图所示:
通过低五位就可以判断出处理器和堆栈的信息,其他位为固定1.
嵌入式
程序猿
微信号:InterruptISR