PIC24FV32KシリーズのEEPROM読み書き
<カテゴリー:PICマイコン>
アンテナアナライザーのコントローラーとして、PIC24FV32KA302というマイコンを使っていますが、このマイコンに内臓されたEEPROMは、8bit系のマイコンとは異なり、プログラムメモリーのアドレス上に配置されています。 従い、EEPROMの書き込み読み出し方法は、従来の8bit系とは異なっています。
このEEPROMに書き込んだり、読み込む為の、サンプルプログラムはデータシートの中に出てくるのですが、イマイチ良く判りません。WEB上でサンプルを探しておりましたら、Microchipのホームページ内のFAQのところにひな形のプログラムがありました。 これをコピペしたら、エラーなくコンパイルされ、ちゃんと読み書きできました。
日本語ページでは、なかなか見つける事が出来ませんでしたので、以下そのソースを紹介します。
//データEEPROMへの読み書き
unsigned int eeRead(unsigned int address) {
while(NVMCONbits.WR); // wait for any last write to complete
TBLPAG = 0x7f; // eprom is a t 0x7ffe00
return __builtin_tblrdl(0xFE00+address);
}
void eeWrite(unsigned int address, unsigned int data) {
while(NVMCONbits.WR); // wait for last write to complete
NVMCON = 0x4058; // Set up NVMCON to erase one word of data EEPROM
TBLPAG = 0x7f; // eprom is a t 0x7ffe00
__builtin_tblwtl(0xFE00+address, 0xffff);
asm volatile ("disi #5");
__builtin_write_NVM(); // Issue Unlock Sequence & Start Write Cycle
while(NVMCONbits.WR); // wait for errase to complete
NVMCON = 0x4004; // Set up NVMCON to write one word of data EEPROM
__builtin_tblwtl(0xFE00+address, data); // Write EEPROM data to write latch
asm volatile ("disi #5");
__builtin_write_NVM();
}
書き込みは下の1行です。
eeWrite(address,data);
addressがEEPROM内の相対アドレスで0から254までの偶数を指定します。
dataは書き込もうとするワードデータ(16bit)です。 書き込みは16bit単位で行われますので、8bit単位で行いたい時は、書き込む前に、ふたつの8bitデータを連結するか、空の8bit(例えば0x00)と書き込みたいデータを連結したワードデータを用意します。
読み出しは下の1行です。
DATA=eeRead(address);
DATAに16bitデータが格納されます。
PIC24FJ64GAシリーズのフラッシュメモリーに書きこむ例はこちらにあります。