HCS12のRAMのリマップ

テクニカル・ノート 62349

アーキテクチャ:

HCS12

コンポーネント:

debugger

更新日:

2018/08/13 8:30

はじめに

本テクニカルノートは、 IAR Embedded Workbench for HCS12バージョン3.x以降に適用されます。

解説

SFR領域によってRAMの一部が隠されてしまいますが、アプリケーションではそのRAM領域を必要とします。

背景

IAR Embedded Workbench for HCS12では、派生品ごとにチップ設定ファイルが用意されています。ただし、これらの設定ファイルによって、メモリタイプごとの場所が移動することはありません。すなわち、リセット時のSFR、EEPROM、RAMの場所が使用されます。そのため、アドレスは0x00から始まり、通常、これらの3種類のメモリはお互いに重なり合っています。

例えば、Freescale MC9S12DG128のリセット時のメモリマップは以下のようになります(最小サイズ16kB)。

タイプ サイズ 開始 終了
SFR 1kB 0x0000 0x03FF
RAM 8kB 0x0000 0x1FFF
EEPROM 2kB 0x0000 0x07FF

RAM内の1kBの領域とEEPROMの全領域(2kB)は、優先のメモリタイプでカバーされます。(優先順はSFR、RAM、EEPROM)

解決方法

デバイス起動時にSFR INITRMを設定し、RAMメモリを目的の場所に移動してください。

以下に、IARのファイルでこの変更を行う方法を示します。

  • .ddfファイルに以下の行を追加します。
    Sfr3 = INITRM 2 YES YES 0x20
    INITRM SFRを記述する行を追加するときに、「Sfr#」のナンバリングを修正する必要があることに注意してください。0x20という値は、「0x2000以降にRAMを配置する」という意味を表します。
  • .ddfファイルで以下の行を編集します。
    Memory1 = RAM Memory 0x00000 0x01FFF RW
    これを以下のように変更します。
    Memory1 = RAM Memory 0x02000 0x03FFF RW
  • .xclファイルで
    -D_RAM_BEGIN=00000
    -D_RAM_END=01FFF
    を以下のように変更します。
    -D_RAM_BEGIN=02000
    -D_RAM_END=03FFF
  • 最後に、支給されたデフォルトのファイルではなく、編集された.dffファイルと.xclファイルを参照するようにプロジェクトの設定を変更します。
    これらは以下の場所で設定します。プロジェクト(Project) > オプション(Options) > リンカ(Linker) > 設定(Config)
    および、プロジェクト(Project) > オプション(Options) > デバッガ(Debugger) > 設定(Setup)

例(Freescale MC9S12DG128の場合)

添付のサンプルファイル(Example for MC9S12DG128.zip)では、RAMを0x2000~0x3FFFに移動するように設定されています。

.dffファイルを編集後、プロジェクトは必ずいったん閉じてから再度開くようにしてください(.ddfファイルはプロジェクトを開いたときに一度だけ読み込まれます)。

BDMデバッガドライバでは、.ddfファイルで指定された値がSFRに書き込まれるため、推奨する解決方法は、C-SPY BDMデバッガからダウンロードする場合にうまく機能します。スタンドアロンモードでデバイスを使用する場合、__low_level_initでSFRに書き込む必要があります。

このサンプルは、「専用のシングルチップモード」用にビルド、実装、テストされています。他のモードで使用する場合は、INITRMへの書き込みを.ddfファイルに追加する必要があります。

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。