2012-01-07 3 views
4

마이크로 칩 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 -> #pragma lowinterrupt InterruptHandler ........ 또는 maby 그래서 나는 잘못 했으므로 흐름과 스테퍼는 다른 우선 순위를 가진다. – Christian