2012-01-07 17 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 ....これは高割り込みのコードで、2つの機能が同等に優先順位付けされています。もう一つのプラグマがあります - > #pragma lowinterrupt InterruptHandler ........またはmaby私は間違っているので、フローとステッパーは異なる優先順位を持っています。 – Christian

関連する問題