質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

Q&A

解決済

3回答

2453閲覧

アセンブラでレジスタに値を転送するとその値が変わっている

minato_hy

総合スコア68

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

マイコン

マイクロコンピュータの略で、CPUにマイクロプロセッサを用いたコンピュータのこと。家電製品、電磁機器などの制御に用いられています。単体でコンピュータとしての機能を一通り備えています。 現代のパーソナルコンピュータに近く、同時期のメインフレームやミニコンピュータと比べ、小さいことが特徴です。

0グッド

0クリップ

投稿2017/09/11 12:10

編集2017/09/11 23:10

Cortex-M3マイコンのスタートアップ処理をアセンブラで書いているのですが、

…… MV R0, 0x50 MSR BASEPRI, R0 ……

という命令を書き、デバッガでマイコンにダウンロードして動かしこの時点でのBASEPRIの値を確認すると、0x40になってしまいます。
(すみません1行目はMVだったかうろ覚えですが、ともかくR0に値を転送しています。)
ステップ実行してみると、1行目の時点でちゃんとR00x50になっていて、2行目実行後もR00x50のままです。
このような現象が起こる原因に心当たりのある方はいらっしゃいますでしょうか。

ちなみに、

…… MV R0, 0x40 MSR BASEPRI, R0 ……

と値を変えて試してみると、ちゃんとBASEPRIの値は0x40になります。R0の値ももちろん0x40です。

また、0xFF0xE0になります。

###補足情報(言語/FW/ツール等のバージョンなど)
コンパイラ・デバッガ:IAR EWARM
東芝マイコンTMPM370グループ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

東芝のマイコンは使ったことがないのですが、
「BASEPRIレジスタの0x10に該当するビットがread-onlyになっている」
可能性はありませんか。
たとえば、0x4fとか0xffを書き込んだ場合、どうなりますか?

ARMのリファレンスマニュアルによるとBASEPRIレジスタは8ビット長ですが、そのうちの何ビットが実際にR/Wできるかはマイコンの実装依存になっています。お使いのマイコンの割り込み優先度が8レベルしかない場合、BASEPRIは上位3ビットしかwriteできない仕様かもしれませんよ。
ARMv7-M Architecture reference manual

投稿2017/09/11 14:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minato_hy

2017/09/11 23:13

東芝マイコンのリファレンスをよく見たところ、この製品では「3ビットで優先度を設定することができます」と記載がありました。 納得できました、ありがとうございます。
guest

0

ググっただけなので、大いに外している可能性大ですけど、
msrで更新する前に、mrsでの読み込みはセットでなければならないように思います。

割り込みを制御するのだから、当然その間の割り込みが制御されなければならないはずで、
その為に、mrsでロックし、msrでロック解除みたいなシーケンスのような気がします。

デバッグでは値が正しいというのは、デバッグ自体が割り込みですから、そのような事ではないかと。
追記

よく読むと、ステップ実行したら、BASEPRIは正しいなどとは説明されていませんね。
案の定、外しましたすみません。

投稿2017/09/11 14:10

編集2017/09/11 15:24
sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ちらっと Cortex-M3 Devices Generic User Guide を見ただけですが、
BASEPRIのRequired privilegePrivilegedになっています。
権限の設定は出来ているでしょうか?(権限の設定はCONTROLレジスタで行うようです)

的外れでしたらすみません。

投稿2017/09/11 14:03

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問