【问题标题】:Do I have to disable interrupts while in one?我必须在一个中禁用中断吗?
【发布时间】:2012-01-07 10:11:53
【问题描述】:

如果我在 Microchip C18 上使用多个中断,我是否必须在一个内部禁用高中断?

考虑下面的代码:

#ifndef OTHER_INTERRUPT_H
#pragma interrupt InterruptHook // interrupt fname
void InterruptHook(void)
{
    #ifdef STEPPER_H
        Stepper_Interrupt();
    #endif

    #ifdef FLOW_H
        Flow_Interrupt();
    #endif
}
#endif

我应该采用与下面代码中相同的方法吗? (然后我会将禁用功能放在函数中的适当位置。)

#ifndef OTHER_INTERRUPT_H
#pragma interrupt InterruptHook // interrupt fname
void InterruptHook(void)
{
    #ifdef STEPPER_H
        INTCONbits.GIEH = 0;
        Stepper_Interrupt();
        INTCONbits.GIEH = 1;
    #endif

    #ifdef FLOW_H
        INTCONbits.GIEH = 0;    
        Flow_Interrupt();
        INTCONbits.GIEH = 1;
    #endif
}
#endif

【问题讨论】:

    标签: c interrupt pic microchip


    【解决方案1】:

    这取决于硬件。一些处理器在服务中断时会自动禁用中断。其他人优先考虑他们的中断,以便在处理较低优先级的中断时仍然可以发生更高优先级的中断。

    Microchip PIC18 系列微控制器具有多级硬件中断,也可以选择优先级。

    【讨论】:

    • hm.... 这是高中断内的代码,两个函数的优先级相同。我还有一个 pragma -> #pragma lowinterrupt InterruptHandler........ 或者我弄错了,所以 flow 和 stepper 有不同的优先级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2014-12-21
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多