2024年1月25日の日記の2番目の記事へのコメント
■基板
PIC-K150 でPIC12F509にプログラムを書き込むと、毎度以下のよくわからないダイアログが出ます。
ここでYesとNoのどちらを選んでも正常に書き込みが完了してPICも普通に動作することは以前確認していましたが、そもそもこのエラーが意味するところは何なのかよくわかっていなかったので、改めて調べてみました。
- このエラーメッセージに出てくる謎の単語「OSCAL」は、実は「OSCCAL」のtypoで、OSCCALはPICの内蔵のオシレータを使う際のキャリブレーション値
- キャリブレーション値は、個体ごとに異なり、製造時に最初からPICの0x3FFに書き込まれている (バックアップは0x404にある)
- キャリブレーション値 XX は、実際には0xCXXという値で書かれている。これはMOVLW XX という命令に相当し、実行するとWレジスタにXXがロードされる
- プログラムカウンタはリセット時に 0xFFFになっているが、PIC12F509のメモリアドレスの範囲は 0x0〜0x3FFなので、0x3FFが実行される
- つまり、リセットすると Wレジスタにキャリブレーション値が入った状態で、0番地からの命令が始まることになる
- 一方で、hexファイルには0x3FFに入れる値が書かれていないため、PIC-K150のツールでhexファイルを読み込むと0x3FFには0xFFFが入った状態となる
- 0xFFFは XORLW 0xFF なので、Wレジスタと0xFFをXORをした結果がWレジスタに入る命令となるため、「これじゃダメでしょ?0xCXXに置き換える?」と言っているのがこの警告の内容っぽい
- ツール自体は実際のところ0x3FFに0xFFFを書き込むことはせず、消去前に元の値を一旦読み出して、書き込み時に元の値を書き直しているっぽい
結局ツール側で元の値を残してくれるっぽいのでどうでもいいんですが、一応手動で書き換えておくと、先のダイアログは出なくなるようですw
あと、CPicS2のプログラムでは、そもそもこのキャリブレーション値を使っていないため、ここが0xFFFになったりしていても特に問題なかったりします。
2024年1月25日の日記の2番目の記事へのコメント
[コメントを書く]