========================================================================= RX231用FIT対応サンプルプログラム補足説明書 Renesas Starter Kit for RX231 編 2020年12月23日 Copyright (c) 2019-2020, MiSPO Co., Ltd. http://www.mispo.co.jp/ ========================================================================= ■はじめに Renesas Starter Kit for RX231 (R0K505231S900BE)用のNORTiのサンプルプログ ラムに、ルネサス エレクトロニクスのFirmware Integration Technology (FIT) モジュールを組み込む例として、本サンプルプログラムは作成してあります。 ■ファイル構成 r_bsp ------------ ボードサポートパッケージFITモジュールのフォルダ r_config --------- FITのコンフィグレーションファイルのフォルダ r_gpio_rx -------- I/Oポート(GPIO)のFITモジュールのフォルダ r_sci_rx --------- SCIのFITモジュールのフォルダ r_byteq ---------- FITのバイト型キューバッファ(BYTEQ)のフォルダ ent_int.src ------ FITに対応したent_int/ret_intのラッパー関数 rx231.h ---------- 内蔵周辺モジュール定義ヘッダ r0k505231.c ------ ボード依存の内蔵周辺の初期化 n4i231.c --------- 割り込み管理と周期タイマ割り込みのソース smp231_fit.c ----- シリアル入出力を使ったサンプルプログラム smp231_fit.mtpj -- CS+用プロジェクトファイル smp231_fit.rcpe -- Renesas共通プロジェクトファイル(e2studioインポート用) readme.txt ------- RX231用FIT対応サンプルプログラム補足説明書(本書) r_bsp~r_byteqはルネサスのRX Driver Packageのモジュールで、移植のための 変更を下記ソースに「// 201?-??-?? ...... by MiSPO」のコメントと共に施し てあります。 r_bsp\platform.h r_bsp\board\generic_rx231\hwsetup.c r_config\r_bsp_config.h r_config\r_sci_rx_config.h r_sci_rx\src\targets\rx231\r_sci_rx231.c ent_int.srcとsmp231_fit.cは、本サンプルプログラムで新規に作成したソース で、rx231.hとr0k505231.cとn4i231.cは、FIT対応のために改訂したソースです。 ■FITモジュールの組み込み方法 FITに付属のアプリケーションノート「CS+に組み込む方法」に記載の手順どおり に組み込み、次の「FITモジュールに含まれる割り込みハンドラの扱い」に従って、 割り込みハンドラをOS管理下の割り込みとして使えるように修正してください。 これ以外の注意点は特にございません。 ■FITモジュールに含まれる割り込みハンドラの扱い 次の例のように、FITモジュールの割り込みハンドラに、ient_int()/iret_int() の発行を追加してください。 extern void ient_int(void); extern void iret_int(void); static void sci5_eri5_isr(void *cb_args) { ient_int(); // 追加 eri_handler(&ch5_ctrl); iret_int(); // 〃 } NORTiの割り込みハンドラでは、ent_int()/ret_int()でレジスタの待避/復元を 行うと共にタスクの切り替えが実行されますが、FITモジュールの割り込みハン ドラでは、#pragma interruptでレジスタの待避/復元だけが行われます。そのた め、#pragma interruptと共に使えるient_int()/iret_int()を新たに設けました。 あるいは、ient_int()/iret_int()を使わず、FITモジュールの割り込みハンドラ をOSの管理外とすることもできます。具体的には、カーネルコンフィグレーショ ン用のKNL_LEVELマクロでデフォルトでは6に定義されているカーネルの割り込み 禁止レベルより、高優先としてください。ただし、この場合、割り込みハンドラ では一切のNORTiのシステムコールを発行できません。 ■FITモジュール以外の割り込みハンドラの扱い NORTiの方式の割り込みハンドラを、FITモジュールの方式の割り込みハンドラと 混在することができます。ただし、FITモジュールでは割り込みベクタテーブル がROMに固定されていることが前提ですので、def_inh()による割り込みハンドラ の登録ができません。 そこで、CC-RXの「プロジェクト・ツリー」の「CC-RX(ビルド・ツール)」にある 「リンク・オプション」タブで、「その他」の「その他の追加オプション」に、 -vectn=28=_inthdr,??=????, ... というように、割り込み番号と割り込みハン ドラを指定してください。本サンプルプログラムでは、OSが使用する周期タイマ として、コンペアマッチタイマのハンドラを、このように登録してあります。 ■セクション 本サンプルプログラムのセクションは、FITモジュールの方式を取り込んで以下 のように配置されていますが、NORTiで不要なユーザスタックのSUセクションと 割り込みスタックのSIセクションは、最小の4バイトとしてあります。 アドレス | セクション ------------+-------------------------------- 0x00000400 | B_1,R_1,B_2,R_2,B,R,STACK 0x0000FFF8 | SI,SU 0xFFF80000 | C_1,C_2,C,C$*,D*,P*,VECT,W*,L 0xFFFFFF80 | EXCEPTVECT 0xFFFFFFFC | RESETVECT NORTiがスタックとして使用するのはSTACKセクションで、この先頭アドレスから SUセクションの末尾(0x0000FFFF)までがスタック領域として使われます。すなわ ち、SUセクションは、リセットでスタックポインタの初期値を決めるためだけに 使用されます。一方、SIセクションは未使用ですが、FITモジュールでは省くこと ができないため、SUセクションの手前に配置してあります。