50円のRISC-VマイコンのCH32V003F4Pのスタートアップを調べていて、調査を継続した点についてまとめておきます。
不明なのは下のオレンジ色の吹き出し部分です。
まず、INTSYSCRを3にセットする意味を調べてみました。
CSRWはCSRにアクセスする命令です。
0x804のCSRはINTSYSCRです。マニュアルから引用しておきます。
今回は3に設定しているので、INESTENとHWSTKENが1になっています。
INESTENは多重割り込みを有効にするフラグとなっています。
HPEは最初分かりませんでしたが、Hardware Prologue/Epilogue (HPE)の事だそうです。これは割込みの時に特定のレジスタをハードウェアでスタックに積む機能のようです。以下の10個のレジスタの退避をしてくれるようです。
こうした機能は、RISC-Vの標準には無いと思うので、独自拡張なのか?と思っていますが何せ調べきれていないので、もし何かご存じの方があれば教えてください。
なので、INESTENにより割込みの設定をしていた部分は、これでOKです。
さて、mstatus=0x80するところと、main関数を呼び出すところはセットで見ないと良くわからない所でした。
これを解説すると以下の図になります。
もう少し、コメントとか入れてくれると嬉しいですね。
私はいろいろなマイコンを見てきましたが、割込みから戻る命令でスタートアップでmain関数にジャンプするのをはじめてみました。
本当に勉強になるのか?すこし使えない知識なのか?悩みますが、勉強にはなります。