Microchip C18コンパイラを使用していますが、割り込みが発生すると、ISRコードの実行が開始されるまでにかなり長い遅延が発生します。
実験として、これは私の主な機能です:
while(1)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
割り込みハンドラーとして、いくつかの例からコピーしたこのコードを使用しています(なぜこのように行われたのかわかりません)。
#pragma interrupt high_isr
void high_isr(void)
{
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 1;
LATAbits.LATA4 = 0;
}
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
SPI経由でバイトを受信していますが、バイトを受信した直後にメインループが停止します。次に、ISRコードの実行が開始される前に、16.5 µsの遅延が続きます。これは165命令サイクルです。
割り込みに関連するコンテキストの保存がいくつかあり、優先度の低い割り込みではさらに悪化することを私は知っています。IPENを無効にし、優先度の高いベクトルのみを使用しています。165の命令は、コンテキストを保存するための通常の期間ですか?