質問: Cortex-M3マイコンのスタートアップ処理をアセンブラで書いているのですが、 ``` ...... MV R0, 0x50 MSR BASEPRI, R0 ...... ``` という命令を書き、デバッガでマイコンにダウンロードして動かしこの時点での`BASEPRI`の値を確認すると、`0x40`になってしまいます。 (すみません1行目は`MV`だったかうろ覚えですが、ともかく`R0`に値を転送しています。) ステップ実行してみると、1行目の時点でちゃんと`R0`は`0x50`になっていて、2行目実行後も`R0`は`0x50`のままです。 このような現象が起こる原因に心当たりのある方はいらっしゃいますでしょうか。 ちなみに、 ``` ...... MV R0, 0x40 MSR BASEPRI, R0 ...... ``` と値を変えて試してみると、ちゃんと`BASEPRI`の値は`0x40`になります。`R0`の値ももちろん`0x40`です。 また、`0xFF`は`0xE0`になります。 ### 補足情報(言語/FW/ツール等のバージョンなど) コンパイラ・デバッガ:IAR EWARM 東芝マイコンTMPM370グループ
回答: 東芝のマイコンは使ったことがないのですが、 「BASEPRIレジスタの0x10に該当するビットがread-onlyになっている」 可能性はありませんか。 たとえば、0x4fとか0xffを書き込んだ場合、どうなりますか? ARMのリファレンスマニュアルによるとBASEPRIレジスタは8ビット長ですが、そのうちの何ビットが実際にR/Wできるかはマイコンの実装依存になっています。お使いのマイコンの割り込み優先度が8レベルしかない場合、BASEPRIは上位3ビットしかwriteできない仕様かもしれませんよ。 !ARMv7-M Architecture reference manual