マイコン・メモ
マイコンRX220の使い方(1)
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
ルネサスエレクトロニクス(株)の32ビットマイコンRX220の基本的な使い方を、これまで製作したものを基に紹介します。
■参考資料■
(1)RX220グループ ユーザーズマニュアル ハードウェア編 :ルネサス エレクトロニクス
(2)RXファミリ ユーザーズマニュアル ソフトウェア編 :ルネサス エレクトロニクス
(3)RXファミリ C/C++コンパイラ、アセンブラ、最適化リンケージエディタコンパイラパッケージ ユーザーズマニュアル :ルネサス エレクトロニクス
1.RX220マイコンボード

RX220マイコンボードの写真
秋月電子通商で、マイコンRX220(R5F52206BDFM)を搭載した、比較的安価なマイコンボード(CPUボード)が販売されています(左写真)。2.54mmピッチのピンヘッダで接続できるので試作や趣味の工作には便利です。
RX220には、100ピン,64ピン,48ピンパッケージがありますが、このマイコンボードに搭載されているRX220は64ピンで、フラッシュROMを256KB、RAMを16KB内蔵したものです。
RX220は32MHzで動作可能ですが(高速オンチップオシレータの場合)、外部クロックは20MHzまでとなります。このマイコンボードに搭載されている水晶発振子は20MHzなので、メインクロックは20MHzです。
以降は、このマイコンボードを使用した例を基に説明します。
2.RX220の特徴

マイコンRX220の特徴について簡単に紹介します。詳細は『RX220グループユーザーズマニュアル ハードウェア編』をご覧ください、ルネサスエレクトロニクスのサイトからダウンロードできます。
RX220は、RXシリーズのマイコンなのでRX621/RX62Nなどと基本的な部分は同じですが、動作クロックをmax32MHzとし、内蔵周辺機能(周辺モジュール)を絞り込んだマイコンになっています。また、外部バスはなく、外部にメモリ等を追加することはできません。
主な特徴は次のようなものです(パッケージや型名により異なる場合があります)。

1)RX220の特徴
2)RX220が持つ主な周辺機能
3.CPUレジスタセット

下図はRX220のCPUレジスタセットです。図のように、32ビットの汎用レジスタ16本と8本の制御レジスタ、そして1本のアキュムレータで構成されています。ただし、R0はスタックポインタとして使用されるので汎用レジスタは15本と言った方がいいかもしれません。
CPUレジスタの構成は、RX621/RX62Nなどとほぼ同じですが、単精度浮動小数点演算機能はないので、FPSW (浮動小数点ステータスワード)レジスタがない構成になっています。
RX220のCPUレジスタ一覧

4.オプション設定領域と固定ベクタ 領域

RX220では、一部のオプション設定をROM中に置くことで設定するようになっています。
このオプション設定は、ROM中にあらかじめセットしておくものなので、プログラムによって設定したり変更したりすることはできません。
下表のように、オプション設定には、ユーザーブートモードで使用するもの、独立ウォッチドッグタイマ(IWDT)や電圧検出回路(LVDAa)の設定を行うものなどがありますが、ユーザーブートモードでなければ初期状態のままでも動作します。
固定ベクタは、例外を検知したときの分岐用ベクタテーブルで、一部構成は違いますがRX621/RX62Nなどと同じ配置です。
このオプション設定領域および固定ベクタ領域は、他の目的に使用できないので注意が必要です(予約領域を含む)。

オプション設定領域・固定ベクタ領域
0xFF7FFFE8 UBコードA ユーザーブートモードを使用するときに必要なコード
0xFF7FFFEC
0xFF7FFFF0 UBコードB
0xFF7FFFF4
0xFF7FFFF8 エンディアン選択レジスタB(MDEB) ユーザーブートモード時のエンディアン選択
0xFFFFFF80 エンディアン選択レジスタS(MDES) シングルチップモード時のエンディアン選択
0xFFFFFF84 予約
0xFFFFFF88 オプション機能選択レジスタ1(OFS1) 独立ウォッチドッグタイマ(IWDT)、
電圧検出回路(LVDAa)などの設定
0xFFFFFF8C オプション機能選択レジスタ0(OFS0)
0xFFFFFF90 予約
0xFFFFFF94 予約
0xFFFFFF98 予約
0xFFFFFF9C 予約
0xFFFFFFA0 ID コードプロテクト IDコード1~3 ブートモードで、オンチップデバッガやPCで
ROMの読み出し/プログラム/イレースを禁止す る
0xFFFFFFA4 〃    IDコード4~7
0xFFFFFFA8 〃    IDコード8~11
0xFFFFFFAC 〃    IDコード12~15
0xFFFFFFB0 予約
0xFFFFFFB4 予約
0xFFFFFFB8 予約
0xFFFFFFBC 予約
0xFFFFFFC0 予約
0xFFFFFFC4 予約
0xFFFFFFC8 予約
0xFFFFFFCC 予約
0xFFFFFFD0 特権命令例外のベクタ 例外の固定ベクタ
0xFFFFFFD4 予約
0xFFFFFFD8 予約
0xFFFFFFDC 未定義命令例外のベクタ
0xFFFFFFE0 予約
0xFFFFFFE4 予約
0xFFFFFFE8 予約
0xFFFFFFEC 予約
0xFFFFFFF0 予約
0xFFFFFFF4 予約
0xFFFFFFF8 ノンマスカブル割り込み(NMI)のベクタ
0xFFFFFFFC リセット(RESET)のベクタ

5.エンディアン

5-1.エンディアン選択レジスタ

RX621/RX62Nでは、データのエンディアンを端子によりリトルエンディアンかビッグエンディアンに切り換えられましたが注1、RX220ではROM中にあるエンディアン選択レジスタで設定します。
エンディアン選択レジスタS(MDES)注2はアドレス0xFFFFFF80番地のROM中にあり、下図に示すようにその32ビットデータのb2~b0で決まります。ただ、フラッシュROMの初期化直後は全ビット'1' になっているので、リトルエンディアンであれば改めて指定しなくても問題ありません。
注1.外部アドレス区間は、エリアごとにCSn制御レジスタ(CSnCR)によって切り替え可能です。
注2.エンディアン選択レジスタにはB(MDEB)とS(MDES)があり、アドレス0xFFFFFF80番地のMDESはシングルチップモード時のもので、ユーザーブートモードではアドレス0xFF7FFFF8番地のMDEBが使用されます。 ちなみに、MDEB/MDES内の32ビットデータはリトルエンディアンです。
RX220のエンディアン選択レジスタ

5-2.エンディアンの設定例

設定例を下記に示します(純正のC/C++コンパイラの例)。
マクロ“__BIG”を定義してコンパイルするとビッグエンディアンに、定義しないとリトルエンディアンになります。
このように#pragma addressを使って変数のアドレスを指定すると、この例では“$ADDR_C_FFFFFF80”というセクションが自動的に作成され、その先頭アドレスが0xFFFFFF80番地になります。

#pragma address _MDEreg=0xffffff80
#ifdef __BIG
const unsigned long _MDEreg = 0xfffffff8;
#else
const unsigned long _MDEreg = 0xffffffff;
#endif
/* MDEレジスタアドレス(シングルチップモード) */

/* ビッグエンディアン */

/* リトルエンディアン */


6.レジスタライトプロテクション

6-1.プロテクトレジスタ

RX220には、プログラムが暴走した場合に重要なレジスタを書き換えられないように、保護する機能があります。
プロテクトレジスタ(PRCR)は、下図のような構成の16ビットレジスタで、PRC3,PRC1,PRC0の3ビットで下表に示すレジスタの書き換えを保護します。
つまり、下表に示すレジスタに設定する場合は、プロテクトレジスタ(PRCR)の対応するビットを'1' にしておかなければなりません。
PRC3,PRC1,PRC0の初期状態は、いずれも'0' です。
RX220のプロテクトレジスタ

b0 PRC0 ・クロック発生回路関連レジスタ
    SCKCR、SCKCR3、MOSCCR、SOSCCR、LOCOCR、ILOCOCR、HOCOCR、
    OSTDCR、OSTDSR、HOCOCR2
b1 PRC1 ・動作モード関連レジスタ
    SYSCR1
・消費電力低減機能関連レジスタ
    SBYCR、MSTPCRA、MSTPCRB、MSTPCRC、OPCCR、RSTCKCR、MOSCWTCR、
    SOSCWTCR、FHSSBYCR、HOCOWTCR2
・クロック発生回路関連レジスタ
    MOFCR、HOCOPCR
・ソフトウェアリセットレジスタ
    SWRR
b3 PRC3 ・LVD関連レジスタ
    LVCMPCR、LVDLVLR、LVD1CR0、LVD1CR1、LVD1SR、
    LVD2CR0、LVD2CR1、LVD2SR

6-2.プロテクトレジスタの設定例

クロック発生回路関連レジスタ、およびモジュールストップコントロールレジスタへの書き込みを許可する設定例を下記に示します注3

1)クロック関連の設定を行う場合は、次のように設定してプロテクトを解除しておきます。
SYSTEM.PRCR.WORD = 0xA503;
/* b0:PRC0=1:クロック発生回路関連レジスタへの書き込み許可 */
/* b1:PRC1=1:動作モード、消費電力低減機能、ソフトウェアリセット関連レジスタへの書き込み許可 */
/* b3:PRC3=0:LVD関連レジスタへの書き込み禁止 */
2)モジュールストップの設定を行う場合は、次のように設定してプロテクトを解除しておきます。
SYSTEM.PRCR.WORD = 0xA502;
/* b0:PRC0=0:クロック発生回路関連レジスタへの書き込み禁止 */
/* b1:PRC1=1:動作モード、消費電力低減機能、ソフトウェアリセット関連レジスタへの書き込み許可 */
/* b3:PRC3=0:LVD関連レジスタへの書き込み禁止 */
3)設定が終わったら、下記のように全てのレジスタへの書き込みを禁止する設定をしておきます。
SYSTEM.PRCR.WORD = 0xA500;
/* b0:PRC0=0:クロック発生回路関連レジスタへの書き込み禁止 */
/* b1:PRC1=0:動作モード、消費電力低減機能、ソフトウェアリセット関連レジスタへの書き込み禁止 */
/* b3:PRC3=0:LVD関連レジスタへの書き込み禁止 */
注3.
・純正のC/C++コンパイラ使用で、統合開発環境CS+が生成するファイル“iodefine.h”によってI/Oレジスタが定義されているものとします。
・この例では、ファイル"iodefine.h"に定義されたマクロを使用しています。
ホームページに戻るトップページに戻る前ページに戻る次ページに進む最終ページに進む
■■■ 注 意 ■■■
1.ここに掲載された内容(写真,図,表などを含む)の、全てまたは一部を無断で使用しないでください。
2.ここで紹介した手法(構造や仕組み,回路,プログラムなどを含む)を使用したことにより、問題や不利益が発生したとしても一切関知しません。
3.ここで紹介したプログラム例は、正常なコンパイルおよび正常な動作を保証するものではありません。