2008年01月01日

フラッシュメモリの書き込み処理とA/D変換器の使用

フラッシュメモリの書き込み処理

動かなかった。

例えばチップイレースはこんな感じに書いた。

eeprom_5555H=0xAA;
eeprom_2AAAH=0x55;
eeprom_5555H=0x80;
eeprom_5555H=0xAA;
eeprom_2AAAH=0x55;
eeprom_5555H=0x10;

eeprom_busycheck();


なんで動かないのかなとモニタでディスアセンブルしてコードを見たら、上の3行目がコンパイラの最適化で削除されてしまっていた。同じアドレスに続けて書き込みしているからだ。

最適化を抑制するのはどうするんだっけ?

#define eeprom_address 0x00400000
#define eeprom_5555H *(volatile unsigned char *)(eeprom_address+0x5555)
#define eeprom_2AAAH *(volatile unsigned char *)(eeprom_address+0x2AAA)


こんなふうに volatile って付けて解決した。消去も書き込みもちゃんとできた。



(2) A/D変換器

最初動かなかったけど、モジュールストップモードを解除していないせいだった。

MSTPCR.BIT._AD=0; // A/D 変換器のモジュールストップモード解除



AD.ADCSR.BYTE=0x28; // 変換時間 134ステート
// ch0:電源電圧
// AD変換スタート
while(AD.ADCSR.BIT.ADF==0); // AD変換が終了するまで待つ

AD.ADCSR.BYTE=0x29; // 変換時間 134ステート
// ch1:サーミスタ
// AD変換スタート
while(AD.ADCSR.BIT.ADF==0); // AD変換が終了するまで待つ

sprintf(msg,"AN0:%04X",AD.ADDRA);
print(0,2,msg);
sprintf(msg,"AN1:%04X",AD.ADDRB);
print(0,3,msg);


こんな感じで簡単に使えた。
posted by りお at 20:26| コンピュータ関連 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。