4

Microchip C18で複数の割り込みを使用している場合、1つの内部で高い割り込みを無効にする必要がありますか?

以下のコードを検討してください。

#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
4

1 に答える 1

2

ハードウェアに依存します。一部のプロセッサは、処理中に割り込みを自動的に無効にします。他の人は割り込みに優先順位を付けて、より低い優先度の割り込みが処理されている間に、より高い優先度の割り込みが発生できるようにします。

Microchip PIC18シリーズ マイクロコントローラは、複数レベルのハードウェア割り込みを備えており、オプションで優先度を設定することもできます。

于 2012-01-07T11:24:52.260 に答える