CM3中断响应
当CM3响应一个中断的时候,会完成以下三件事:
1入栈,将8个寄存器的值入栈
2取向量
3选择堆栈指针MSP/PSP,更新堆栈指针SP,更新连接寄存器LR,更新程序计数器PC
三段式,保存现有的、取要用的,把要用的放在正确的位置(类似DVD机,取出先前的DVD并放入盒中,取出要看的DVD,将DVD装进DVD机,开始工作。)。
入栈是为了自动保存现场的必要部分,以此将xPSR、PC、LR、R12、R3-R0入栈(顺序固定)。放到哪个堆栈?当前使用PSP,就压入PSP(进程堆栈),否则压入MSP(主堆栈)。
先压xPSR、PC,就可以更早的启动服务例程指令的预取,最后压R12、R3-R0,更容易使用SP基地址索引寻址;方便了LDM多重加载指令;舒展了参数的传递过程。(常用的放在易于存取的位置)
取向量,即从向量表中找出正确的异常向量,然后再服务程序的入口处预取指。
中断向量表(很重要,存储在存储单元地址的最底部位0000H到03FFH,256*8*4)中存储中断向量,中断向量即中断处理程序的入口地址(中断向量指明了中断服务程序的位置,所以称之为向量)
SP:在入栈中会把堆栈指针(PSP或MSP)更新到新的位置。在执行服务例程后,将由MSP负责对堆栈的访问。
PSR:IPSR位段(地处PSR的最低部分)会被更新为新响应的异常编号。
PC:在向量取出完毕后,PC将指向服务例程的入口地址。
LR:LR的用法将被重新解释,其值也被更新成一种特殊的值,称为“EXC_RETURN”,并且在异常返回时使用。EXC_RETURN的二进制值除了最低4位外全为1,而其最低4位则有另外的含义。

浙公网安备 33010602011771号