前回に続き、CPUレジスタを調べます。
4) mstatus
割り込み状況を示すレジスタです。EWRISC-Vで観測しても、図に示す3つのビットしか使用されていないようです。
5) misa
命令セットに関する情報を示します。
これもEWRISC-Vで実際の値を読むと、0x4090 1105で、2進数にすると下図にあるように01000000100100000001000100000101となります。
この値でどの命令セットを使っているのか?どの拡張命令を使っているのか?が分かるようになっています。
GD32VF103では、Atomic拡張、Compressed拡張, RV32/64/128Iベース、Multiple拡張、ユーザモードあり、独自拡張あり、などを読み取ることが出来ます。
6)mideleg とmedeleg
RISC-Vでは通常trapは特権モードで処理されますが、パフォーマンスの観点からより低いレベルで実行することが可能にできるようです。
midelegではINTERRUPTの権限を委譲し、medelegではその下のものの権限を移譲するようです。
パフォーマンスのところまでまだ理解が出来てませんが、割込み周りで何か起きるのだろうと思っていますが、追々調べていく必要がありそうです。
7)mieと12)mip
割り込み許可を設定するmieと、割込み状態(PENDING)を示すmipになります。
RISC-Vの仕様からはこの色がついたところが実装されているようですが、GD32VF103ではいろいろビットが増えています。ここが分からないです。
8)mtvec
mtvecは割込み時のアドレスとその時の動作モードを指定します。動さモードとしては、割込み発生時に、常に固定のアドレスに割り込む(Direct)もしくは、割込み要因によってアドレスを変える(Vector)方式を設定します。
Directの時は、ハンドラ内で要因を確認して処理を変える必要があります。Vectorの時は、BASE+要因x4のハンドラにジャンプしてくれます。
9)mepc
割り込み発生時のアドレスを保存します
10)mcause
11)mtval
mtvalは例外に関する情報を保存し、mcauseは割り込み・例外が発生した要因を保存します。
まずはここまで調べました。