microcontroller - Microchip C18 上的正常中断延迟和上下文保存时间是多少?

标签 microcontroller interrupt pic pic18

我正在使用 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 个指令周期!

interrupt timing enlarge image

我知道有一些与中断相关的上下文保存,并且对于低优先级中断来说情况更糟。我已禁用 IPEN 并且仅使用高优先级向量。 165 条指令是上下文保存的正常持续时间吗?

最佳答案

在某些情况下,中断开销可能和您一样大!
看看this .

关于microcontroller - Microchip C18 上的正常中断延迟和上下文保存时间是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417351/

相关文章:

x86 - 在 x86 Intel VT-X 非根模式下,是否可以在每个指令边界传递中断?

java - 使用Thread.currentThread()。isInterrupted()与Thread.sleep()

C#串口+CCS C串口+PIC 16F877A

c - 试图了解 Microchip PIC16LF15344 I2C 外围引脚选择

c - 中断时退出函数

c - 通过 SPI 从微 Controller 发送命令以显示并接收结果

arm - 在 ARM cortex A-9 的 U-boot 中启用中断

c - 如何从ARM中的32位端口的第15脚获取值?

embedded - 微 Controller 之间处理器间通信的 UART、I2C 与 SPI

c - 如何避免 xc8 编译器中的警告 1352?