こんにちは、
私は厳しい制約の中でアプリケーションを開発しています。
私の問題はPINTのレイテンシに関連しています。私の理解では、ARM Cortex M0+における割り込みの典型的なレイテンシは約15クロックサイクルです。私の時計は30MHzです。
したがって、レイテンシは0.5~1マイクロ秒程度になると予想されます。
信号と割り込み発生までの時間を計測し、割り込みヘッドの直後のピンをレバーアップさせたところ、実際には7マイクロ秒という結果が得られました。
アセンブラを確認したところ、割り込み処理の先頭にはわずかな命令(10個未満)しか見当たりませんでした。
PINT割り込みは、優先度が0の唯一の割り込みです。
これは普通のことですか?それとも私が何か間違ったことをしているのでしょうか?
回答してくださった皆様、ありがとうございました。
こんにちは、 @carlos_o さん、ご回答ありがとうございます。
私はカスタムハードウェアを使用しています。私は、2400Hzの矩形波発生器を使用し、その出力をLPCのピンに接続して測定を行いました。IRQに入る最初の命令は、別のピンの状態を変更します。それから、入力ピンに1つ、出力ピンに1つ、計2つのプローブが付いたオシロスコープを持っています。私は2つの前線間の時間差を測定します。
本当にIRQLATENCYレジスターを失くしてしまった!ご指摘ありがとうございます。実際には、デフォルト設定は0x10にあります。
ピンの入力フィルタは無効になっていますが、ヒステリシスは有効にしています。
私の理解では、GPIOはコアと同じ周波数で管理されており、ピンの状態を変更するには1サイクルが必要です。入力についても同じことが言えると思います。質問があります。データシートを見ると、GPIOはバスをバイパスしてコアに直接接続されているように見えますが、命令やデータへのアクセスにはバスが必要です。つまり、DMAがバスをバースト転送に使用している場合、割り込みを遅延させることは可能でしょうか?
よろしくお願い申し上げます。
こんにちは、 @xs_graziano
投稿ありがとうございます
カスタム基板をご使用かどうか確認させていただけますか?そうでない場合は、使用しているボードの種類を明記してください。
割り込みが発生するまでのタイミングをどのように測定しているのか教えてください。
IRQLATENCYレジスタに何か変更を加えましたか?
BR
カルロス
さらにいくつか確認を行いました。ピンをハイに設定してからすぐにローに設定するには、4つのアセンブリ命令が必要で、合計で最大5クロックサイクルかかります。255ナノ秒という結果が得られました。これは20MHzのクロック周波数と互換性があります(私は約160ナノ秒を期待していました)。
そこで、メインクロックをピンのクロック出力として設定したところ、オシロスコープで30MHzの明確な信号が得られました。
システムは、メインクロックとして 30MHz FRO に設定されており、SYSAHBCLKDIV は 1 (1) に設定されているため、分周は行われません。
メインクロック(SYSCON経由で有効化)のクロック出力が30MHzを示している場合、コアの動作周波数が低い可能性もあります。
あるいは、何かがコアの処理速度を低下させているのだろうか?
...問題の一部が分かったと思います。コアの処理速度がFLASHへのアクセス時間によって低下しているようです。フラッシュメモリへのアクセス時間を変更すると、大幅な改善が見られます。
しかし、データシートには、最低保証アクセス時間の詳細やその条件に関する記載が見当たりません。
命令実行時間が改善すれば、割り込みレイテンシも改善される(フラッシュへのアクセス時間はシステムクロックの2倍で5マイクロ秒)が、それでも期待値には程遠い。
7μsのレイテンシ(30MHzで約210サイクル)は、コアの理論上の15サイクル最小値を上回ります。これは主にペリフェラルバス同期、GPIO入力グリッチフィルター、メモリ待機状態によるもので、コアの実行時間ではありません。ピン割り込み(PINT)は、非同期の外部信号をシステムクロックに同期させるために複数のペリフェラルクロックサイクルを必要とし、さらにコードやベクトルテーブルがRAMではなくフラッシュメモリに存在する場合、バスの仲裁遅延やフラッシュレイテンシが発生する可能性があります。