【データメモリアーキテクチャの概要】
PIC18シリーズのデータメモリは、まだ「Bankの概念」が残っています。従ってアクセス
する時にはBankの切り替えを必要とします。
しかし少し工夫が加えられています。それは、「Access Bank」という考え方が新たに
追加されたことです。
このアクセスバンクを使えば、特殊レジスタ(SFR)と128バイトの汎用レジスタは、バンク
を切り替えなくても、いつでもアクセスが可能となるようになったことです。
これにより128バイト以下の変数で済むときにはバンクを意識する必要は無くなりました。
データメモリの構成は下図のようになっています。
・バンクは256バイト単位で最大16バンクまで
・最大256×16=4kバイトまで拡張
・バンク15の上位128バイトが特殊レジスタ領域(SFR)となっている。
・バンク0の下位128バイトが汎用レジスタ領域の一部で、これとSFR領域をひとつの
「アクセスバンク」としてバンク切り替え無しでアクセスが可能。
【データメモリのアドレッシング】
データメモリのアクセス方式には、直接アドレッシングと間接アドレッシングがあります。
(1) 直接アドレッシング
データメモリの直接アドレッシングには、Bank Select Register(BSR)が必要となり
ます。
このBSRの下位4ビットと命令内のオペランドの8ビットのアドレスの合計12ビットで
4Kバイトのデータメモリを直接アドレスしてアクセスします。これを図で表すと下図のよう
になります。
つまり、命令のオペランドは8ビットですからこれで、256バイトまでアクセスできます。
これを単位としてバンクとしています。そして、これ以外にBSRレジスタを上位に加えて
16個のバンクが指定できることになります。
ここで、全バンクをアクセスする時には命令のオペランドのAccess Bank指定ビットを
「1」にしておく必要があります。
このビットが「0」の場合にはBSRレジスタの内容は無視されて、「アクセスバンク」が
常時指定され、命令のオペランド内のアドレス(8ビット)で指定されたアクセスバンク
内のデータを指定したことになります。
(2) 間接アドレッシング
データメモリの間接アドレッシングには、File Select Register(FSRn)と間接アクセス
用レジスタ(INDFn)が使われます。それぞれのレジスタが3個ずつ3組あり、3つの間接
アドレッシングを同時進行させることが可能です。
この関係を図で表すと下図のようになります。
まず、FSRnレジスタは12ビット構成の3組となっており、下位8ビットはFSRnLレジスタ、
上位4ビットはFSRnHレジスタの下位4ビットに対応しています。(nは0,1,2の3種類)
このFSRnにセットしたアドレスで指定された場所のデータメモリは、間接アクセス用
レジスタ経由(INDFn)でアクセスします。
つまり、間接アクセス用レジスタに書き込めば、指定アドレスのデータメモリに書き込んだ
ことになり、間接アクセス用レジスタ(INDFn)を読み出せば、データメモリから読み出した
ことになります。
さらに、この間接アクセス用レジスタ命令は、これまでINDFの1種類だけでしたが、
PIC18シリーズでは下記のような5種類に増えて、間接アドレッシングが強力に強化されて
います。
これによりテーブルアクセスのプログラミングがぐっと楽に出来ます。
(a) INDFn 間接アクセス後FSRnに変化なし
(b) POSTDECn 間接アクセス後 FSRn-1
(c) POSTINCn 間接アクセス後 FSRn+1
(d) PREINCn FSRn+1してから間接アクセス
(e) PRUSWn FSRn+Wレジスタを間接アクセス(FSRnはもとのまま)
(nは0,1,2の3種類)
【2ワード命令】
PIC18シリーズには2ワード命令が追加されました。この中に、上記4kバイトのデータ
メモリの全空間を直接アクセスできる命令も追加されました。
このような命令には、下図のような命令があります。
図のようにデータメモリを12ビットのアドレスで指定するため、4kバイトの全空間を
直接アドレス指定してレジスタ間のコピーを1命令で実行することができます。
【特殊機能レジスタ】(SFR)
Special Function Registerは、PIC18F2x20/2x40では 下図のように1つのバンク
にすべて収納されていますので、SFRへのアクセスにはバンク切替が必要になる
ことはなくなりました。特にアクセスバンクを使えば、データでそのバンクに切替えて
いるときでも、直接アクセスバンクを指定できるので、このような場合にはバンク
切替による不便さはなくなりました。