データメモリ


【データメモリの構成】

新PIC16ファミリのデータメモリの構成は下図のようになり、128バイト×32バンクで
最大4kバイトとなっています。このためバンク選択用のBSRレジスタが追加されました。

 全バンクの若いアドレス0x1F番地までにSFR領域があることも従来と変わりませんが、
新たにコアSFRというSFRが12個追加されています。
また全バンクの0x70から0x7F番地は全バンク共通領域となっていて、割り込み処理
のレジスタ退避用などに使います。


【コアSFR】

新たに追加されたコアSFRには、下記の12個のSFRが含まれていて、全バンク共通
の領域となっています。つまり全バンク共用に使う1個ずつしかありません。
これらには間接アドレッシング用のレジスタと割り込み処理で自動退避するレジスタ
が含まれています。
間接アドレッシングが2系統できるようになりましたので、関連するINDFとFSRレジスタ
がそれぞれ2個ずつ用意されています。



【強化された間接アドレッシング】

 新PIC16ファミリの間接アドレッシング機能は大幅に強化されました。
まず間接アドレッシングが2系統となり、FSR0とFSR1の2個のレジスタ
が用意されました。さらにこの2個のレジスタはいずれも16ビット幅と
なっており、64kバイトの空間を指定できます。

 この64kバイトの空間は下図のように使われるようになっています。
まず、下位の32kバイトはRAM空間で上位32kバイトはROM空間となっています。
つまり上位32kバイトはプログラムメモリを直接定数データとしてアクセス
できるようになりました。(14ビットの下位8ビットをアクセスする)





 下位32kバイトのRAM空間の中で、最下位の4kバイトは全データメモリ領域を
間接アドレッシングで直接的にアクセスします。
連続的にアクセス可能ですが、バンクごとにSFRの領域が入ってしまいます。

 これに対し新たに下図に示すように、0x2000番地から仮想空間が構成され、
全バンクにある汎用レジスタ(GPR)の80バイトずつを全部つなげ、1つの連続した
RAM領域として仮想的に構成し、連続した空間としてアクセスできるようにしました。
これで、C言語などで非常に大きな配列や構造体を扱うことができるように
なります。



 さらに、この間接アクセスを容易にするための命令が追加されました。
  MOVIW : 間接アドレス指定データメモリ → Wレジスタ
    MOVIW  INDFn
    MOVIW  ++INDFn
    MOVIW  --INDFn
    MOVIW  INDFn++
    MOVIW  INDFn--
    MOVIW  [k]INDFn   (kは-32〜+31)
 
  MOVWI : Wレジスタ → 間接アドレス指定データメモリ
    MOVWI  INDFn
    MOVWI  ++INDFn
    MOVWI  --INDFn
    MOVWI  INDF++
    MOVWI  INDF--
    MOVWI  [k]INDFn  (kは-32〜+31)



  目次ページに戻る