进入中断服务程序后,LR(R14)寄存器的值会被更新为特殊的值'EXC_RETURN’(原来的值已压入堆栈);执行完中断服务程序后,只要把这个值送往PC,就会启动中断返回序列;
EXC_RETURN位段如下:
bits | - |
---|---|
bit[31:4] | EXC_RETURN的标识,全为1 |
bit[3] | 0表示返回后进入handler模式,1表示返回后进入线程模式 |
bit[2] | 0表示返回后使用MSP,1表示返回后使用PSP |
bit[1] | 保留 |
bit[0] | 0表示返回ARM状态,1表示返回thumb状态,CM3中必须为1 |
合法的EXC_RETURN值
0xffffffff1 : 返回handler模式
0xffffffff9 : 返回线程模式,并使用MSP
0xffffffffd : 返回线程模式,并使用PSP
如果在线程模式,且使用MSP时被中断,中断服务例程中EXC_RETURN=0xfffffff9;
如果在线程模式,且使用PSP时被中断,中断服务例程中EXC_RETURN=0xfffffffd;
如果在handler模式时被中断,中断服务例程中EXC_RETURN=0xfffffff1;
联系客服