割り込みの概要
割り込みシミュレーションシステムの概要について
割り込みをシミュレーションすることで、ハードウェアが入手可能になるよりかなり前に、割り込みサービスルーチンのロジックをテストして、ターゲットシステムで割り込み処理をデバッグできます。擬似割り込みと C-SPYのマクロとブレークポイントを連携させることによって、割り込み駆動型の周辺デバイスのような複雑なシミュレーションを構築できます。
ほとんどのコアおよびデバイスには、C-SPY シミュレータには、デバッグ中に割り込みの実行をシミュレーションできる割り込みシミュレーションシステムが用意されています。割り込みシミュレーションシステムをハードウェア割り込みシステムと同じように構成することができます。一部のコア及びデバイスには、C-SPY シミュレータは、IAR C-SPY シミュレータドライブの代わりに Imperas 命令セットシミュレータを使用するので注意してください(IAR C-SPYシミュレータを参照)。Imperas 命令セットシミュレータは、シミュレートされた割り込みをサポートしていません。C-SPY がImperas ドライバを使用するとき、割り込みシステムは、ハードウェアの割り込みシステムとより同じようになります。
割り込みシステムの特長を以下に示します。
Arm コアのシミュレートされた割り込みのサポート
単発もしくはサイクルカウンタに基づく周期割り込み
さまざまなデバイス用の定義済割り込み
保持時間、確率、タイミングのばらつきの設定
タイミングの問題を特定するためのステータス情報
ダイアログボックスまたはC-SPYシステムマクロ、つまり対話型インタフェースと自動インタフェースを1つずつ使用した割り込みの設定。また、割り込みを即時強制することができます。
定義された割り込みごとにイベントを継続的に表示するログウィンドウ
現在の割り込みアクティビティを示すステータスウィンドウ
[割り込み設定]ウィンドウを使用して定義した割込みはすべて、削除しない限りデバッグセッション終了後も保持されます。一方で強制割り込みはサービスを受けるまで存在し、セッション終了後は保持されません。
ヒント
割り込みシミュレーションシステムはデフォルトでは有効になっていますが、必要がない場合は無効にすることでシミュレーションの実行速度を向上させることができます。無効にするには、[割り込み設定]ウィンドウか、システムマクロを使用します。
割り込み特性
擬似割り込みは、ターゲットハードウェアの実際の割り込みに似せるために、各割り込みを微調整する属性のセットから構成されています。初回割り込み待機時間、繰返し間隔、保持時間、ばらつき、確率のいずれかを指定できます。

割り込みシミュレーションシステムは、サイクルカウンタを時計として使用し、シミュレータで割り込みを発生させるタイミングを決定します。初回割り込み待機時間は、サイクルカウンタ単位で指定します。C-SPY は、サイクルカウンタが指定された初回割り込み待機時間を超えると、割り込みを生成します。ただし、割り込みが生成されるのは命令と命令の間だけです。すなわち、1 つのアセンブラ命令の実行が完了するまでは、その命令に必要なサイクル数に関係なく、割り込みの生成は待機させられます。
周期的に生成される割り込みを定義するには、繰返し間隔を指定します。この値は、次の割り込みを生成するまでの間隔を表すサイクル数を定義します。繰返し間隔の他に、その間隔が経過した後に実際に割り込みを発生させる確率(パーセント値)と、繰返し間隔に対するばらつき(パーセント値)の2 つのオプションによって、実際の発生間隔を制御できます。この 2 つのオプションを使用して、割り込みシミュレーションをランダム化できます。その他に、割り込みの保持時間を指定できます。この時間が経過しても処理されない割り込みは削除されます。保持時間を無限に設定すると、割り込みが確認され削除されるまで対応する保持ビットが設定されます。
割り込みシミュレーションの状態
割り込みシミュレーションシステムには、アプリケーションでのタイミングの問題発見に使用できるステータス情報が含まれています。[割り込みステータス]ウィンドウには、使用可能なステータス情報が表示されます。割り込みに関して、下記の状態が表示されます : 待機、保留、実行中、または停止です。
通常は、繰返し割り込みの場合は 実行時間よりも長い繰返し間隔が指定されています。この場合、ステータス情報の経時変化は以下のようになります。

注記
割り込み有効信号(保持ビットともいう)は、割り込みハンドラが割り込みを認識するとすぐに、自動的に無効となります。
ただし、割り込みの繰返し間隔が実行時間よりも短く、割り込みがリエントラント(またはノンマスカブル)の場合、ステータス情報の経時変化は以下のようになります。

実行時間より繰返し間隔が長い 場合は、割り込みハンドラを記述し直して速くするか、割り込みシミュレーションシステムの繰返し間隔を長く指定した方がよいことがあります。
割り込みシミュレーション用の C-SPYシ ステムマクロ
マクロには、疑似割り込みの詳細が既に整理されていて、それが要件を完全に満たしている場合に便利です。擬似割り込みの定義を含むマクロ関数を記述することによって、C-SPY の起動時にそのマクロ関数を実行できます。他にも、マクロファイルを使用した場合に擬似割り込みの定義がドキュメント化されたり、開発プロジェクトに複数のエンジニアが携わっている場合にグループ内でマクロファイルを共有できたりといった利点所があります。
IAR C-SPY シミュレータドライバが使用されるとき(割り込みシミュレーションシステムの概要についてを参照)、C-SPY シミュレータは、割り込みに関連するこれらの事前定義されたシステムマクロを提供します。
__cancelAllInterrupts__cancelInterrupt__disableInterrupts__enableInterrupts__orderInterrupt__popSimulatorInterruptExecutingStack
最初の 5 つのマクロのパラメータは、[割り込み設定]ウィンドウの該当するエントリに対応します。
各マクロの詳細については、C-SPYシステムマクロについてのリファレンス情報を参照してください。
ターゲットに合せた割り込みシミュレーションシステムの調整
割り込みシミュレーションシステムは使いやすく設計されています。ただし、割り込みシミュレーションシステムの力を最大限に利用するには、使用しているプロセッサに適合させる方法に習熟している必要があります。
割り込みシミュレーションは、ハードウェアと同じように動作します。これは、割り込みの実行はグローバルな割り込みイネーブルビットのステータスに依存することを意味します。マスカブル割り込みの実行も、個々の割り込みイネーブルビットのステータスに依存します。
デバイス固有の割り込みをシミュレーションするには、使用できる割り込みの詳細な情報を割り込みシステムに通知する必要があります。この情報は、デバイス記述ファイルに記述されています。
デバイス記述ファイルの詳細については、デバイス記述ファイルの選択を参照してください。
割り込みログの概要
割り込みログを使用すると、割り込みイベントに関する包括的な情報を得ることができます。この情報は、たとえば、高速化するためにどの割込みを微調整したらよいか調べるのに便利です。割り込みの開始と終了を記録できます。C-SPY シミュレータドライバを使用している場合(割り込みシミュレーションシステムの概要についてを参照)、トリガ済や期限切れなど、内部の割り込みステータス情報も記録できます。IDE で、
ログは[割り込みログ]ウィンドウに表示されます。
概要は[割り込みログ一覧]ウィンドウで閲覧できます。
[タイムライン]ウィンドウの[割込みグラフ]には、アプリケーションプログラム実行中の割込みイベントがグラフィック表示されます。
割り込みログの要件
割り込みログは C-SPY シミュレータでサポートされています(割り込みシミュレーションシステムの概要についてを参照)。Imperas 命令セットシミュレータは割り込みログ作成をサポートしていません。
割り込みログを行うには、Cortex-M デバイスが必要です。以下のいずれかも必要となります。
I-jetまたはI-jet Traceインサーキットデバッグプローブ、およびデバッグプローブとターゲットシステム間のSWDインターフェース
J-LinkまたはJ-Traceデバッグプローブとデバッグプローブとターゲットシステム間のSWDインターフェース
ST-LINKデバッグプローブと、デバッグプローブとターゲットシステム間のSWDインターフェース
TI XDSデバッグプローブと、デバッグプローブとターゲットシステム間のSWDインターフェース
割り込みログを使用するにあたってを参照してください。