【テーブルアクセスの概要】
PIC18シリーズに新たに追加された機能の中に、「TABLE READ/WRITE」の機能
があります。
この機能は、基本的には、プログラムメモリに対する連続Read、Writeをする機能です。
Table Readは、プログラムメモリから読み出すだけですからことは簡単で、プログラム
メモリの2バイト単位のアドレス扱いをバイト単位の扱いに合わせるだけでことは済みます。
しかし、Table Writeのときには、プログラムメモリへの書込みが発生するので問題と
なります。つまり、プログラムメモリへの書込みには、プログラミング状態(PICへの書込み
状態)にする必要があるからです。
それでもPIC18Fシリーズでは、低電圧プログラミング機能が追加され、通常の電源電圧
の状態で、プログラムメモリの書き換えが可能になりましたので、容易にWrite機能を実現
することができます。
さらにPIC18シリーズでは、このテーブルアクセスの機能で、外部メモリとのデータの
やり取りが可能となっています。
【テーブルリードの場合】(TBLRD命令)
プログラムメモリからの連続読み出し機能は下図のように動作します。
まず、読み出す場所は、Table Pointer として用意されている3バイトのレジスタTBLPTR
内の下位22ビットでアドレス指定されます。
この22ビットのアドレスの下位21ビットは、プログラムメモリをバイト単位でアドレス指定
して読み出し、データメモリのTabel Latch(TABLAT)レジスタに読み出します。
この21ビットのアドレスはTBLRD命令によって命令実行後に±1されます。この実行後
の状態は下記となります。
TBLRD* そのまま
TBLRD*+ 読み出し後TBLPTR+1
TBLRD*- 読み出し後TBLPTR-1
TBLRD+* TBLPTR+1してから読み出し
さらに、最上位の22ビット目を「1」にするとID FieldやConfiguration Dataの読み出しが
可能となります。
【テーブルライトの場合】(TBLWT命令)
プログラムメモリへの連続書込み機能は、下図のように動作します。まず、書込みは
1ワード(2バイト)単位でしか実行されません。
TBLPTR(最下位が0)の指しているアドレスの下位バイトの書込み時データは、一旦
内部のHolding Rgisterに保持され、続くTBLPTR(最下位が1)の指している上位バイト
の書込み時に一緒に1ワードとして書き込まれます。
従って、Table Writeは常に下位、上位の2バイト単位で扱う必要があります。
Table Write命令にもReadと同じようにTBLWT命令によってテーブルポインター
(TBLPTR)が±1されます。
TBLWT* そのまま
TBLWT*+ 書込み実行後TBLPTR+1
TBLWT*- 書込み実行後TBLPTR-1
TBLWT+* TBLPTR+1してから書込み実行
さらに、プログラムメモリへ書き込む時には、プログラミングモードにする必要があり
ます。これをしないと実際の書込みは行われません。
また、書込みには時間がかかります。フラッシュメモリになったとしても1msec程度を
必要とします。