開発日記

Erlangをダラダラ書きます。

RISC-V 割り込みと例外処理

割り込みとは

  • 一般的には周辺装置側からCPUにI/O処理の完了などを通知する仕組み

  • 周辺装置(GPIO, タイマ, シリアル, LAN など)

割り込み番号

  • 割込みを一意に識別する識別子(1以上の整数値)

割込み優先度

  • 割込みの優先順位を決定するための数値(数値が大きい順に処理)

特権レベルスタック

  • 割り込み時,1つ前の特権状態をステータスレジスタに保持(復帰命令で特権状態をもとに戻す )

割り込み流れ

PLIC(プラットフォームレベル割り込みコントローラ)

  • さまざまなデバイス割り込みをHartコンテキストの外部割り込みラインに多重化し,割り込み優先度をハードウェアでサポート.

  • 割り込みはまずPLICが吸収.その後,CPUコアの各実行モードに割り振られる.

github.com

RISC-Vの処理(割り込み / 例外 発生後)

  • PCを<trap_vector>アドレスにジャンプ.

<trap_vector>アドレス

<trap_vector>アドレスの追加

  • RISC-Vでは,割り込みや例外の種類ごとに専用の<trap_vector>を追加できる.

実行モード

  • 割り込みや例外は,基本的にマシンモードで処理

Trap Delegation Register(トラップ代理レジスタ

  • 各実行モードはTDRを持つ.

  • 割り込みや例外の種類に応じて実行モードを変更して処理できる.したがって,別の実行モードで動いているタスクに直接割り込みを通達できる.便利.

five-embeddev.com

それでは.いろはにへとへと.