【发布时间】:2011-06-20 20:51:58
【问题描述】:
我正在使用 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条指令是上下文保存的正常持续时间吗?
【问题讨论】:
标签: microcontroller interrupt pic pic18