如果我在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
最佳答案 这取决于硬件.某些处理器在维护中断时自动禁用中断.其他人优先考虑他们的中断,以便在更低的服务时仍然可以发生更高优先级的中断.
Microchip PIC18系列微控制器具有多级硬件中断,也可以选择优先级.