RXマイコンをルネサスの純正コンパイラではなく、KPITを用いて動かしている場合、ルネサスのサンプルにあるような組み込み関数が使えなくて困ることが多いです。ルネサスのツールチェインを使っている場合多重割り込みを許可にするための組み込み関数が用意されているのですが、KPITのツールチェインを用いる場合はそのような組み込み関数がありません。<--正確にはKPITのユーザーガイドに書いてあるのを見てなかっただけ...
今回は、RXマイコンで割り込み関数を多重割り込み可能にする手順について書きたいと思います。
参考にしたurl: http://japan.renesasrulz.com/cafe_rene/f/69/t/1515.aspx
環境 : e2 studio
マイコン : RX71M
ツールチェイン:KPITのものを使用
https://gcc-renesas.com/rx-download-toolchains/
1.ユーザーモードの解除
reset_program.asm内の89行目あたりを下のようにコメントアウト
/* change PSW PM to user-mode */ //ユーザーモードへは移行しない
// MVFC PSW,R1
// OR #00100000h,R1
// PUSH.L R1
// MVFC PC,R1
// ADD #10,R1
// PUSH.L R1
// RTE
// NOP
// NOP
2.割り込み関数の先頭で以下を実行
__builtin_rx_setpsw('I');
////////参考にしたurlのリンク先のように次のようなマクロを作っておくと便利そうです.
#define enable_interrupt() __builtin_rx_setpsw('I')
#define disable_interrupt() __builtin_rx_clrpsw('I')
これだけです。ちなみに、ユーザーモードとスーパーバイザモードでは権限のレベルが異なり、ユーザーモードでは一部の命令の使用が禁止されています。多重割り込み許可のためにはPSWのIフラグをセットする必要がありますが、これはスーパーバイザモードのみ可能です。ですので、マイコンを常にスーパーバイザモードで動かしてしまえばよいという解決方法です。スーパーバイザモードで常に動かしてもおそらく問題はないと思います。