Нужно ли отключать прерывания, когда они в одном? - PullRequest
4 голосов
/ 07 января 2012

Нужно ли отключать высокие прерывания внутри, если я использую несколько прерываний на микросхеме 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

1 Ответ

2 голосов
/ 07 января 2012

Это зависит от оборудования.Некоторые процессоры автоматически отключают прерывания при их обслуживании.Другие устанавливают приоритеты своих прерываний, так что прерывание с более высоким приоритетом может по-прежнему происходить, пока обслуживается более низкое.

Микроконтроллеры серии Microchip PIC18 имеют несколько уровней аппаратных прерываний, и они могутбыть опционально приоритетными тоже.

...