2012-01-07 39 views
4

如果我在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 

回答

2

它取决于硬件。某些处理器在维护中断时会自动禁用中断。其他优先级的中断,以便更低优先级的中断仍然可以发生。

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

+0

hm ....这是高中断内的代码,两个函数同等优先。我还有一个编译指示 - > #pragma lowinterrupt InterruptHandler ........或者maby我错了,所以流程和步进器有不同的优先级。 – Christian 2012-01-07 13:04:04

相关问题