2019年11月09日

EEPROM書き込み成功〜

PICのEEPROM書き込みには、こんなシーケンスがあります。

BCF EECON1,CFGS ;Deselect Configuration space
BCF EECON1,EEPGD ;Point to DATA memory
BSF EECON1,WREN ;WR Enableビットをセット
BCF INTCON,GIE ;Disable INTs.
BANKSEL EECON2
MOVLW 55h
MOVWF EECON2
MOVLW 0AAh
MOVWF EECON2

; BANKSEL EECON1 ;★★このBANKSELは書いてはいけない!

BSF EECON1,WR ;書き込み開始
BSF INTCON,GIE ;Enable interrupts
BCF EECON1,WREN ;Disable writes
EEPROM_WRITE1: ;書き込み確認待ちループ
BTFSC EECON1,WR ;Check Write end
BRA EEPROM_WRITE1 ;
BANKSEL STATUS
RETURN

ある意味、定型文で、電気的なショックなどで
大切なEEPROM内のデータが壊れないよう、
自然には起こりえないような手順を使います。

で、これが少し前から動かなかったのですが、
基本的に、データシートからコピーしているので、
動かないはずがない!

……で、よく不動の原因になる、BANKSELについて、
積極的に表現しておきました。
……が、これが、間違いの元で、
中央辺りで、コメントアウトしたBANKSELが、
不動の原因でした。
基本的に、同じバンク内だと分かっていたのですが、
何かを追加しようとしたときに、狂ったりしやすいので、
明示的に、たくさん入れようとしていたのですが、
この中央部分に関しては、完全に、データシート通りにしないと
ダメな場合があるようで、よけいなBANKSELの追加は、
正しい手順を壊していたようです。
前後の、他のものは、あってもなくてもよかったのですが、
コメントアウトしたところだけは、あってはいけないのです。
処理はしているみたいなのに、何かがちがうようだ、と
シミュレーションなどで感じて、それこそ、1行ずつ動かしていて
このBANKSELがあるときはダメだと分かったのでした。
こういうこともあるんだねぇ。

でも、他のところでは、積極的にBANKSELを入れる方が
動作することが多いことは、確かですね。

2019_1109_231145AAa.JPG
ところで、EEPROM書き込みが、期待通り動作するようになり、
気分よくしていたら、以前動いていた発振が止まった〜。
今度は、これが、不動沼になっているようです。_| ̄|○
もしかして、Si5351Aを(過電圧で)壊したかも、と思い、
先日、秋月から届いたモジュールを、全部組み立てました。
取り替えてみても、発振しないことは同じで、
壊れたわけではないのかも、と期待をつないでいます。
以前、動いていたバージョンと比較しても、
特に、おかしな修整はしていないんだけどなぁ〜。
posted by あきたな at 23:59| Comment(0) | 日記