我正在使用 Microchip C18 编译器,在发生中断时,我在 ISR 代码开始运行之前经历了相当长的延迟。
作为一个实验,这是我的主要功能:
while(1)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
作为中断处理程序,我使用的是从一些示例中复制的代码(我不知道为什么要这样做):
#pragma interrupt high_isr
void high_isr(void)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
我通过 SPI 接收字节,在收到一个字节后不久,主循环停止。然后在 ISR 代码开始运行之前有 16.5 µs 的延迟。那是165个指令周期!
我知道有一些与中断相关的上下文保存,而且低优先级中断更糟。我禁用了IPEN,我只使用了高优先级向量。165条指令是上下文保存的正常持续时间吗?