« アンテナアナライザーの製作(SWR,R,Xの計算) | メイン | アンテナアナライザーの製作(SWRカーブの表示) »

2015年6月25日 (木)

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シリーズのフラッシュメモリーに書きこむ例はこちらにあります。

INDEXに戻る