"));

Interface編集部ブログ

コンフィグレーション"Coexistence"の使い方

 本誌5月号第6章のHEWの使い方の解説で、コンフィグレーション「Coexistence」の使い方について説明していませんでしたので、ここで説明します。

●Coexistence(共存)とは?
 シリアル接続HEWモニタを使って実機デバッグを行う場合、RX62Nの内蔵フラッシュROMにはシリアル接続HEWモニタを書き込みます。デバッグが終わり、通常の手順で完成したプログラムをROM化してフラッシュROMに書き込むと、当然ながらシリアル接続HEWモニタは消えてしまいます。
 RX62N内蔵のフラッシュROMは384Kバイトもあるので、シリアル接続HEWモニタと同時に、ROM化しておきたいプログラムをフラッシュROMに書き込んでおき、電源投入またはリセット時にどちらを起動させるか選択できるようになると、いろいろ応用が効きそうです。

 実はシリアル接続HEWモニタの先頭部分には、GPIOのポート35の状態を判定して、そのままシリアル接続HEWモニタを起動するか、特定のアドレスにジャンプするかを切り替える機能(ブート・セレクタ)がすでに埋め込まれています。ポート35はNMIピンと兼用ピンであり、RX62Nマイコン基板では、基板上のジャンパJPP4の設定で起動を切り替えることができます。JPP4がオープン状態の場合はシリアル接続HEWモニタが、ショート状態の場合はアドレス 0xFFFA0020 に格納されているアドレスにジャンプします。

 コンフィグレーション「Coexistence」とは、JPP4をショートして起動する場合のROM化用コンフィグレーションです。シリアル接続HEWモニタと“共存”させるという意味で、この名称が付いています。


●コンフィグレーションの切り替え
 コンフィグレーションの切り替えは、HEWの右上にあるセレクタで、図1のように切り替えてからビルドを行います。

 
 図1 コンフィグレーションの切り替え


●ReleaseとCoexistenceのセクションの違い
 このコンフィグレーションは「Release」と同様のROM化を想定したものですが、セクションの設定が一部異なります。図2に「Release」時のセクションの定義を、図3に「Coexistence」時のセクションの定義を示します。

 
 図2 「Release」時のセクション定義

 
 図3 「Coexistence」時のセクション定義

 アドレス 0xFFFFFF80 に格納する FIXEDVECT の有無だけが違います。ここはRXシリーズの固定ベクタ領域を配置するところで、完全なROM化であるReleaseコンフィグレーションは、ここにリセット・ベクタなどを記述します。それに対して、Coexistenceコンフィグレーションは、固定ベクタ領域を持ちません。リセット時はシリアル接続HEWモニタに埋め込まれたブート・セレクタが起動するので、CoexistenceコンフィグレーションによるROM化プログラムには、固定ベクタ領域が不要だからです。


●ReleaseとCoexistenceの実行開始関数の違い
 さらに、ベクタ・テーブルを生成するvecttbl.c内には、次のように記述されています。 

#ifdef COEXISTENCE
#pragma interrupt Coexistence(vect=8)
void Coexistence(void)
{
 PowerON_Reset( );
}
#else

これは、Coexistenceコンフィグレーション時に、可変ベクタの8番に、関数Coexistence()のアドレスを格納し、さらに関数Coexistence()は、関数PowerON_Reset()を呼ぶ流れになっています。また図3でわかるように、可変ベクタ領域(C$VECT)を 0xFFFA0000 に配置しています。
 すでに説明したように、ブート・セレクタはポート35がショート状態の場合、0xFFFA0020 番地に記述されているアドレスにジャンプします。0xFFFA0020 番地とは、可変ベクタ・テーブルの8番を意味します。

 


●CoexistenceコンフィグレーションによるROM化プログラムの起動の流れ
 以上をまとめて、CoexistenceコンフィグレーションによるROM化プログラムの起動の流れを説明します。

 まず、固定ベクタに記述されているリセット・ベクタには、シリアル接続HEWモニタに埋め込まれているブート・セレクタのアドレスが書かれています。よって電源投入またはリセット直後は、このブート・セレクタが起動します。
 ブート・セレクタはポート35の状態を判定し、“H”レベル(JPP4がオープン状態)ならばシリアル接続HEWモニタを起動します。“L”レベル(JPP4がショート状態)なら、アドレス 0xFFFA0020 の内容を読み出し、そのアドレスにジャンプします。

 アドレス 0xFFFA0000 からの領域には、Coexistenceコンフィグレーションでビルドしたプログラムが書き込まれています。アドレス 0xFFFA0020 には、関数Coexistence()の配置アドレスが書かれているので、ブート・セレクタからジャンプしてくる先は、この関数になります。そしてこの関数内から、実際のパワーON後の初期化を行う関数PowerON_Reset()が呼ばれ、プログラムが起動するわけです。

 よって、Coexistenceコンフィグレーション時の可変ベクタ領域(C$VECT)は 0xFFFA0000 からずらしてはいけません。これはブート・セレクタの仕様です。


●LED点滅制御サンプル・プログラムも共存可能
 本誌5月号第6章で解説している「LED点滅制御サンプル・プログラム」にも、Coexistenceコンフィグレーションを用意しています。
 よって、Coexistenceコンフィグレーションでビルドしたmotファイル(Sample_Project\RX62N\Coexistence\RX62N.mot)を下記に示す方法でシリアル接続HEWモニタといっしょに書き込めば、JPP4オープン状態でシリアル接続HEWモニタが起動し、JPP4ショート状態ですぐにLED点滅動作が始まるというわけです。


●FDT使用時の注意点
 FDTを使って、シリアル接続HEWモニタと、CoexistenceコンフィグレーションでビルドしたROM化プログラムを、いっしょに内蔵フラッシュROMに書き込むには、下記URLを参照してください。
 フラッシュ書き込みツールFDTの裏?ワザ
   http://www.kumikomi.net/interface/editors/2011/04/fdt.php

 なお、FDTを使ってフラッシュROMを書き換える場合、セキュリティ上の関係から、FDTとRX62Nマイコンの接続が確立されたタイミングで、内蔵フラッシュROMの内容が消去されます。よって、シリアル接続HEWモニタはそのままで、ROM化プログラムのみ書き換えたい場合でも、再度シリアル接続HEWモニタも書き込んでください。

 

 

カテゴリ
アーカイブ