PICメモリマップを理解するのに助けが必要


9

いくつかの背景。さまざまなタイプの写真をプログラムするために、PicKit2でMPLABxを使用しています。現時点では16F887です。私はHi-Tech PICC Liteツールチェーンに固執しようとしていますが、いくつかのものがどのように組み立てられているかに不満が増しています。比較的高速でなければならない操作(8Mhzでの500nsの命令サイクルを考慮)は、完了するまでに最大20usかかります。それで、私はそれを処理するために自分のASMコードを挿入し始めました。

しかし、20ページのデータシートに記載されているメモリマップを理解するのが困難です。

プログラムメモリは0005hから始まります。ただし、23ページには、ポートAなどの特殊用途レジスタのファイルアドレスが表示されます。ポートAのアドレスは「05h」と表示されます。

0005hのメモリロケーションと05hにある専用レジスタを区別する方法がわかりません。専用レジスターを参照するにはどうすればよいですか?

私は古いHC11チップに対してかなり広範なアセンブラープログラミングを行ってきましたが、これはPIC asmコーディングへの私の最初の冒険です。ここでどんな助けもいただければ幸いです。

回答:


8

PICは「ハーバードアーキテクチャ」と呼ばれるものを使用します。これは、命令とデータ用に別々のアドレス空間があることを意味します。

アドレスがレジスタを参照するか、命令を参照するかは、アドレスが使用されるコンテキストによって異なります。

セクション2.1「プログラムメモリの構成」の図は、プログラムメモリまたは命令アドレス空間に関するものです。セクション2.2「データメモリの構成」の図は、レジスタと特殊機能レジスタ、またはデータメモリのアドレス空間に関するものです。


したがって、「MOVWF 0x0005」と言った場合、PICはプログラム空間ではなく、データメモリのアドレス0x0005を参照していることを認識しますか?
Michael

@マイケル:はい。命令のアドレスがプログラムとデータメモリのどちらを参照しているかは、命令によって異なります。これは、オペコードごとに説明されています。基本的に、MOVWFのようにデータを処理する場合、データメモリにアクセスします。GOTOなどのプログラムアドレスを処理する場合は、プログラムメモリにアクセスします。
Olin Lathrop、

ありがとうございました。私がアセンブラを使用していたHC11はフォンノイマンアーチだったと思います。学習しているときに、命令コードを上書きする問題がよくありました。ありがとうございました。
Michael

3

デイブが言ったことですが、プログラムメモリは5ではなく0から始まることも指摘しておきます。リセット時に、プロセッサはPCを0に設定して実行を開始します。割り込み時に、プロセッサは事実上、ロケーション4を呼び出し、グローバル割り込み有効ビットをオフにします。プログラムメモリ位置5は特別ではありませんが、割り込みルーチンがある場合、これは割り込みルーチンの2番目の命令になります。


はい、それは理解されています。つまり、5が最初の汎用命令アドレスです。
Michael

@マイケル:いいえ、それもそうではありません。先ほど述べたように、プログラムのメモリ位置5については、特別なことは何もありません。ラベルの最初の汎用命令アドレスは意味がありません。最初の命令アドレスは0であり、4も割り込みのために少し特殊です。残りは本当に特別ではなく、「ジェネリック」はこのコンテキストでは意味がありません。
Olin Lathrop、

では、最初の非リセット、割り込みのないベクトルアドレスはどうでしょうか。私が言っているのは、あなたが言っていることは何であるか理解していることです。
Michael
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.