next up previous contents
: 仕様 : バッチ処理 : バッチ処理   目次

Flash EEPROM

バッチ処理は電源を切った後も保存されている方が望ましい。また、ADuC814のユーザメモリは256byteしかなく、書き換えが頻繁に起こらないなどの理由から、Flashデータ・メモリ(Flash EEPROM)に書き込むこととする。このFlashメモリは640byteあり、書込みおよび消去の単位となる1ページが4byteとなっている。Flashメモリへの処理は以下のSFRを介して行う。

これを図に示すと図7.3のようになる。

プログラム上では、次のような共用体の大域変数_a用意することでFlashメモリへの処理を簡単に扱えるようにしている。

typedef union EData
{
    ulong  i;           // 4byte正整数1つとして見る
    ushort w[2];        // 2byte正整数2つとして見る
    byte   c[4];        // 1byte正整数4つとして見る
} EData;
つまり、書き込み時は_aに書き込みたい値を代入した後に、引数に書き込み先のアドレスを指定して書き込み用関数writeFlash()を実行し、読み込み時は引数に読み取りたいアドレスを指定して読み取り用関数readFlash()を呼び出した後、_aの中身を参照する。writeFlash()内部では_aの中身をEDATA1〜4にコピーして書き込み、readFlash()内部ではデータの読み取り後EDATA1〜4を_a[0]〜_a[3]にコピーしているのである。

図 7.3: フラッシュメモリとそれに関連するSFR
\includegraphics[scale=0.9]{images/flashMemory.eps}



Deguchi Lab. 平成20年3月5日