我正在为 MSP430 编写 ISR。它读取 volatile PxIFG 寄存器并在第一条指令上将其复制到堆栈变量中。ISR 跳转是否有任何开销,或者我可以期待吗
__interrupt void SW_PRESSED_ISR(void)
{
unsigned short currnet_ifg = P4IFG;
...
}
编译成类似的东西
... Register saving instructions
JSR ... // jump into ISR
LD P4IFG ... // load volatile register P4IFG value
...
我知道如果 ISR 跳转后的第一条指令是寄存器加载,我的 ISR 将按预期工作。我的理解是MSP430保证跳转后一条指令可以再次中断。如果加载不是跳转后的第一条指令,我会遇到一个问题,即在读取 P4IFG 寄存器之前我可能会再次被中断,并且它的值可能会更改为不同的值,这将是一个问题。
我期望编译器在跳转之后立即放置我的加载指令是否合理,从而确保我总是能在另一个中断可以更改它之前获得该寄存器的副本?
谢谢