2012-01-07 71 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

相關問題