2
AVR割り込みサービスルーチンが期待どおりに実行されない(命令オーバーヘッド?)
7つの入力を持つ小さなロジックアナライザーを開発しています。ターゲットデバイスはATmega16820MHzのクロックレートです。ロジックの変更を検出するには、ピン変更割り込みを使用します。今、私はこれらのピンの変化を検出できる最低のサンプルレートを見つけようとしています。私は、最小5.6 µs(178.5 kHz)の値を決定しました。このレートを下回るすべての信号は適切にキャプチャできません。 私のコードはC(avr-gcc)で書かれています。私のルーチンは次のようになります。 ISR() { pinc = PINC; // char timestamp_ll = TCNT1L; // char timestamp_lh = TCNT1H; // char timestamp_h = timerh; // 2 byte integer stack_counter++; } キャプチャした信号の変化はにありpincます。それをローカライズするために、4バイト長のタイムスタンプ値があります。 データシートで私が読んだ割り込みサービスルーチンは、ジャンプするのに5クロック、メインプロシージャに戻るのに5クロックかかります。私の各コマンドのISR()実行には1クロックかかると想定しています。要するに、5 + 5 + 5 = 15クロックのオーバーヘッドがあるはずです。1クロックの持続時間は、20MHzのクロックレートに従う必要があります1/20000000 = 0.00000005 = 50 ns。秒単位の合計オーバーヘッドは、次のようになります15 * 50 ns = 750 ns = …