本書はRX65N向けのμT-Kernel3.0の実装仕様を記す。 対象は、トロンフォーラムから公開されているμT-Kernel 3.0(V3.00.07)のうち、RX65Nマイコン向けの実装部分である。 本実装ではRX65Nマイコンを搭載した対象システム(実機)は定めず、よって対象システムに対する実装は含まれない。実際の本実装を使用する場合は、対象システムに関する実装を作成する必要がある。
ハードウェアに依存しない共通の実装仕様は「μT-Kernel3.0共通実装仕様書」を参照、RXv2コアに共通の仕様は「μT-Kernel3.0 RXv2向け実装仕様書」を参照のこと。
以降、単にOSと称する場合はμT-Kenrel3.0を示し、本実装と称する場合、前述のソースコードの実装を示す。
実装対象のハードウェアは以下の通りである。
分類 | 名称 | 備考 |
---|---|---|
マイコン | RX600シリーズ RX65Nグループ R5F565NE |
ルネサス エレクトロニクス製 |
本実装は、RX65Nマイコンについてのみであり、マイコンを搭載した実機は定めない。
本実装では対象ターゲットを定めないのでターゲット名も定めない。関連する識別名は以下とする。
分類 | 名称 | 対象 |
---|---|---|
対象CPUアーキテクチャ | CPU_RX65N | RX65Nシリーズ |
対象CPUコア | CPU_CORE_RXV2 | RXv2コア |
識別名は対象システムの以下のファイルで定義しなければならない。
include/sys/sysdepend/<対象システム>/machine.h
以下に関連するドキュメントを記す。
分類 | 名称 | 発行 |
---|---|---|
OS | μT-Kernel 3.0仕様書(Ver.3.00.01) TEF020-S004-03.00.01 |
TRONフォーラム |
OS | μT-Kernel3.0共通実装仕様書(Ver.2.00.00) TEF033-W002-2304xx |
TRONフォーラム |
T-Monitor | T-Monitor仕様書 TEF020-S002-01.00.01 |
トロンフォーラム |
デバイスドライバ | μT-Kernel 3.0 デバイスドライバ説明書(Ver.1.00.05) TEF033-W007-221007 |
トロンフォーラム |
搭載マイコン | RX65Nグループ、RX651グループ ユーザーズマニュアル ハードウェア編 | ルネサス エレクトロニクス |
機種依存定義sysdependディレクトリ下の本実装のディレクトリ構成を以下に示す。名称に(*)の点いたディレクトリが本実装の対象である。
─ sysdepend ハードウェア依存部
├ <ターゲットn> ターゲットn 依存部
└ cpu CPU依存部
├ rx65N RX65Nマイコン依存部 (*)
├ :
└ <CPUn> CPUn依存部
└ core コア依存部
├ rxv2 RXv2コア依存部
├ :
└ <core n> コアn依存部
「RXv2コア依存部」は、RXv2コアに共通するコードであり、他の共通のコアを有するマイコンでも使用される。 「RX65Nマイコン依存部」は、前述のコア依存部以外の本マイコンに固有のコードである。
実装対象のマイコンの基本的な仕様を以下に記す。
項目 | 内容 |
---|---|
CPUコア | RXv2 |
ROM | 2048KB(内蔵フラッシュROM) |
RAM | 256KB(内蔵RAM) + 384KB(拡張RAM) |
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
省電力機能はサポートしていない。プロファイルTK_SUPPORT_LOWPOWERはFALSEである。よって、マイコンの低消費電力モードに対応する機能は持たない。
省電力機能のAPI(low_pow、off_pow)をサポートする場合は、対象システムの以下のファイルに、適切な省電力処理を記述し、プロファイルTK_SUPPORT_LOWPOWERをTRUEに指定する。
/kernel/sysdepend/<対象システム>/power.c対象システム>
本マイコンはFPUおよびDSPの機能を有する。コンフィギュレーションUSE_FPUおよびUSE_DSPにより、OSのコプロセッサ対応機能を有効とすることができる。FPUやDSPが有効の場合、コプロセッサレジスタ操作APIが使用可能となる。 詳細はRXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
マイコンのアドレス・マップは、シングルチップモードまたは内蔵ROM有効拡張モードとする。 以下にマイコンのアドレス・マップを記す。なお、リザーブ領域は記載しない(詳細はマイコンの仕様書を参照のこと)。
アドレス (上段:開始 下段:終了) |
種別 | サイズ (KByte) |
備考 |
---|---|---|---|
0x0000 0000 0x0003 FFFF |
内蔵RAM | 256 | |
0x0008 0000 x000F FFFF |
周辺I/Oレジスタ | ||
0x0010 0000 0x0010 7FFF |
内蔵ROM | 32 | データフラッシュメモリ |
0x007F C000 0x007F FFFF |
周辺I/Oレジスタ | ||
0x0080 0000 0x0085 FFFF |
拡張RAM | 384 | |
0xFFE0 0000 0xFFFF FFFF |
内蔵ROM | 2048 | コードフラッシュメモリ |
本実装では、マイコンの内蔵ROM(コードフラッシュメモリ)および内蔵RAMを使用する。内蔵ROM(データフラッシュメモリ)および拡張RAM領域のメモリは使用しないのでユーザが使用することは可能である。
OSを含む全てのプログラムのコードは内蔵ROMに配置され、実行される。 リセットベクタおよび例外ベクタテーブルは内蔵ROM上に配置される。 割込みベクタテーブルおよび割込みの高級言語ハンドラテーブルは、リセット時は内蔵ROM上にあるが、OSの初期化処理にてRAM上に再配置される。ただし、コンフィグレーションUSE_STATIC_IVTを有効にすることにより、RAM上への再配置を禁止することができる(初期値は無効)。再配置を禁止した場合、APIによる割込みハンドラの登録が不可となる。
以下に内蔵ROMおよび内蔵RAMのメモリマップを示す。表中でアドレスに「-」が記載された箇所はデータのサイズによりC言語の処理系にてアドレスが決定され、OS内ではアドレスの指定は行っていない。
(1) 内蔵ROMのメモリマップ
アドレス (上段:開始 下段:終了) |
種別 | 内容 | |
---|---|---|---|
0xFFE0 0000 - |
プログラムコード | プログラムコードが配置される領域 | |
- - |
割込みベクタテーブル | 割込みのベクタテーブル |
リセット時のみ有効 |
- - |
割込み高級言語ハンドラテーブル | 割込みの高級言語ハンドラの登録テーブル リセット時のみ有効 |
|
- - |
定数データ | C言語の定数データなどが配置される領域 | |
0xFFFF FF80 - |
例外ベクタテーブル | 例外のベクタテーブル リセット時のみ有効 |
|
0xFFFF FFFC |
0xFFFF FFFF | リセットベクタ |
(2) 内蔵RAMのメモリマップ
アドレス (上段:開始 下段:終了) |
種別 | 内容 |
---|---|---|
0x0000 0000 - |
割込みベクタテーブル | 割込みのベクタテーブル OSの初期化後に有効 |
- - |
割込み高級言語ハンドラテーブル | 割込みの高級言語ハンドラの登録テーブル OSの初期化後に有効 |
- - |
プログラムデータ | C言語の変数等が配置される領域 |
- - |
OS管理領域 | OS内部の動的メモリ管理の領域 |
- 0003 FFFF |
例外スタック領域 | 例外および割込みハンドラにて使用されるスタック |
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
本マイコンのハードウェアに関わる割込み関連の定義を以下に記す。項目はRXv2コアにおいて共通である。RXv2向け実装仕様書を参照のこと。
名称 | 意味 | |
---|---|---|
N_INTVEC0 | 256 | グループ割込み以外の割込み数 |
N_GROUP_INT | 32*6 | グループ割込み数 (※) |
N_INTVEC | N_INTVEC0 + N_GROUP_INT | すべての割込み数 |
INTPRI_MIN_INT_PRI | 1 | 割込みの最低優先度 |
INTPRI_MAX_INT_PRI | 15 | 割込みの最高優先度 |
(※) コンフィギュレーションUSE_GROUP_INTが無効(0)の場合は、N_GROUP_INTは0となる(初期値は有効(1))
以上の定義は以下のファイルで記述される。
/include/sys/sysdepend/cpu/rx65n/sysdef.h
本マイコンは、例外ベクタテーブルと割込みベクタテーブルを有する(各テーブルの具体的な仕様はマイコンのユーザマニュアルを参照のこと)。 また、OS内の管理用にHLL割込みハンドラテーブルが存在する。
(1) 例外ベクタテーブル RXv2向け実装仕様書を参照のこと。
(2) 割込みベクタテーブル 割込みベクタテーブルは、割込みおよび無条件トラップの割込みハンドラのアドレスが設定される。 リセット時の割込みベクタテーブルは、以下のファイルにknl_int_vect_romとして定義される。
kernel/sysdepend/cpu/rx65n/intvect_tbl.c
OSの初期化処理において、ROM上のベクタテーブルはRAM上にコピーされ、以降そちらが使用される。RXv2向け実装仕様書を参照のこと。 ただし、コンフィグレーションUSE_STATIC_IVTが1に設定されている場合は、ROM上のベクターテーブルが使用され続ける。USE_STATIC_IVTの初期値は0である。
(3) HLL割込みハンドラテーブル TA_HLANG属性の割込みハンドラ(高級言語(C言語)で記述された割込みハンドラ)は、OS内の高級言語対応ルーチンを経由して呼び出される。TA_HLANG属性の割込みハンドラの実行アドレスは、HLL割込みハンドラテーブルに登録される。 リセット時のHLL割込みハンドラテーブルは、以下のファイルにknl_hll_inthdr_romとして定義される。
kernel/sysdepend/cpu/rx65n/hllint_tbl.c
OSの初期化処理において、ROM上のHLL割込みハンドラテーブルはRAM上にコピーされ、以降そちらが使用される。RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
OSの内部で使用する割込みには、以下のようにマイコンの割込みまたは例外が割り当てられる。該当する割込みまたは例外は、OS以外で使用してはならない。
種類 | 割込み番号 | 割り当てられる割込み・例外 | 優先度 |
---|---|---|---|
システムタイマ割込み | 28 | CMI0 | 15 |
本実装ではディスパッチ要求および強制ディスパッチ要求には割込みを使用しない。
各割込み・例外の割り当ては以下のファイルで定義される。
/include/sys/sysdepend/cpu/rx65n/sysdef.h ``` #define INTNO_SYS_DISPATCH 1 /* Dispatch (reserved)*/ #define INTNO_SYS_SVC 2 /* System call (reserved) */ #define INTNO_SYS_RET_INT 3 /* System call : tk_ret_int (reserved) */ #define INTNO_SYS_DGSPT 4 /* Debugger support (reserved) */ #define INTNO_SYS_TICK 28 /* System Timer tick */ ``` システムタイマ割込み(INTNO_SYS_TICK)以外は将来のための予約である。
システムタイマ割込みは最高優先度が設定される。他の割込みは、この割込み優先度の間の優先度を使用しなければならない。 システムタイマ割込みの優先度は以下のファイルで定義される。
/include/sys/sysdepend/cpu/rx65n/sysdef.h ```
#define INTLEVEL_SYS_TICK 15 ```
RXv2向け実装仕様書を参照のこと。
最高割込み優先度INTPRI_MAX_EXTINT_PRIは、本OSが管理する割込みの最高の割込み優先度であり、以下のファイルで定義される。詳細はRXv2向け実装仕様書を参照のこと。
include/sys/sysdepend/cpu/rx65n/sysdef.h ``` #define INTPRI_MAX_INT_PRI 15 ```
本マイコン固有の実装仕様を以降に記す。共通仕様はRXv2向け実装仕様書を参照のこと。
割込み番号の割当ては以下となる。
割込み番号 | 対応する割込み |
---|---|
0 ~ 255 | ベクタ番号0 ~ ベクタ番号255 |
256 ~ 287 | グループ割込みGROUPBE0の要因0~31 |
288 ~ 319 | グループ割込みGROUPBL0の要因0~31 |
320 ~ 351 | グループ割込みGROUPBL1の要因0~31 |
352 ~ 383 | グループ割込みGROUPBL2の要因0~31 |
384 ~ 415 | グループ割込みGROUPAL0の要因0~31 |
416 ~ 447 | グループ割込みGROUPAL1の要因0~31 |
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
本実装では選択型割込みに対応して選択型割込み設定API setPERIを提供する。本APIはμT-Kernel 3.0仕様には含まれない。
項目 | 内容 |
---|---|
形式 | ER SetPERI(UINT intno, UINT fctno) |
引数 | UINT intno 選択型割込みの割込み番号 UINT fctno 設定する割込み要因番号 |
戻り値 | エラーコード |
機能 | intnoで指定した選択型割込みに、fctnoで指定した割込み要因番号を設定する |
リセットハンドラはRXv2向け実装仕様書を参照のこと。 リセットハンドラから呼ばれるknl_startup_hw関数により対象システムに固有の処理が実行される。 knl_startup_hw関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。関数の仕様については、共通実装仕様書を参照のこと。 knl_startup_hw関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/hw_setting.c
OS初期化処理は共通部のmain関数で実行される。共通実装仕様書を参照のこと。 main関数から以下の対象システムに依存する処理が実行される。
(1) デバイスの初期化 knl_init_device main関数より呼び出され、デバイスドライバの登録に先立ち、必要なハードウェアの初期化を行う。 knl_init_device関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。 knl_init_device関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/devinit.c
初期タスクの処理は共通部のinit_task_main関数で実行される。 init_task_main関数から以下の対象システムに依存する処理が実行される。
(1) デバイスの実行(knl_start_device) デバイスドライバの登録、実行を行う。 knl_start_device関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。 knl_start_device関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/devinit.c
終了処理と再起動処理は共通部のshutdown_system関数で実行される。shutdown_system関数からハードウェアに依存する処理が呼び出される。 対象ハードウェアに依存する処理のうち、本マイコンに依存する処理を記す。RXv2コアに依存する処理は、RXv2コア向け実装仕様書を参照のこと。
(1) デバイスの終了処理 knl_finish_device knl_start_deviceと対となるデバイスの終了処理を実行する。 knl_finish_device関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/devinit.c
(2) ハードウェア停止処理(knl_shutdown_hw) ハードウェアをすべて停止し、マイコンを終了状態とする。本関数の処理でシステムは終了する。 knl_shutdown_hw関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/hw_setting.c
(2) ハードウェア再起動(knl_restart_hw) ハードウェアの再起動処理を行う。knl_restart_hw関数は対象システムの以下のファイルに定義される。本実装では未実装である。
kernel/sysdepend/<対象システム>/hw_setting.c
本マイコンに依存するタスクの仕様を以下に記す。
タスク属性のハードウェア依存仕様を以下に示す。
属性 | 可否 | 説明 |
---|---|---|
TA_COP0 | 〇 | FPU(TA_FPUと同じ) |
TA_COP1 | × | DSP |
TA_COP2 | × | 対応無し |
TA_COP3 | × | 対応無し |
TA_FPU | 〇 | FPU(TA_COP0と同じ) |
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
RXv2向け実装仕様書を参照のこと。
タイムイベントハンドラの実行中の割込みマスクレベルは、タイムイベントハンドラ割込みレベルTIMER_INTLEVELに設定される。TIMER_INTLEVELは、以下のファイルで定義される。
include/sys/sysdepend/cpu/rx65n/sysdef.h
本実装では初期値は以下のように0(すべての割込みを許可)が設定されている。
#define TIMER_INTLEVEL 0 //すべての割込みを許可
マイコン内蔵の8ビットタイマ(TMR)を16ビットカウントモードで使用して2個の物理タイマが実装されている。 8ビットタイマは4チャンネルが存在する。そのうちTMR0とTMR1、TMR2とTMR3の組み合わせで16ビットカウントモードとし、物理タイマ番号が1から割り当てられる。
物理タイマ番号 | 対応するタイマ | ビット幅 |
---|---|---|
1 | TMR0、TMR1 | 16 |
2 | TMR2、TMR3 | 16 |
TMRは物理タイマ以外の用途にも使用可能である。その場合は物理タイマAPIを呼び出さなければよい(API StartPhysicalTimerにてTMRは物理タイマに初期化される)。
物理タイマのクロック設定は、以下のファイルで定義される。
include/sys/sysdepend/cpu/rx65n/sysdef.h
#define TMR01_CLOCK (0x08) // Count PCLK
#define TMR23_CLOCK (0x08) // Count PCLK
この値は、TMRのTCCRレジスタのCKSビットに設定される。上記の設定を変更することにより、各物理タイマのクロックを変更できる。
物理タイマはその内部処理において、各TMRBのコンペアマッチ割込み(CMIA)およびオーバーフロー割込み(OVI)を使用する。これらの割込みは選択型割込みなので、INTB128からINTB207(割込み番号128~207)の間のいずれかの割込みに割り付けることができる。 選択型割込みの割り付けは、以下のファイルで定義される。
include/sys/sysdepend/cpu/rx65n/sysdef.h
#define INTNO_PTMR1 128 // INTB128
#define INTNO_PTMR2 129 // INTB129
割り当てる選択型割込みは必要に応じて変更可能である。
各割込みの優先度は以下のファイルに定義される。割込み優先度は必要に応じて変更可能である。
include/sys/sysdepend/cpu/rx65n/sysdef.h
#define INTPRI_PTMR1 5 // 物理タイマ1
#define INTPRI_PTMR2 5 // 物理タイマ2
本マイコンは未実装である。
版数 | 日付 | 内容 |
---|---|---|
2.00.00 | 2023.12.01 | ・内容・構成の全面見直 |
1.00.02 | 2022.10.14 | ・ 誤字修正 |
1.00.01 | 2022.10.07 | ・ 1.4 関連ドキュメント バージョン番号等を更新 ・5.1リセット処理 (2)ベクタテーブルの移動 誤記修正 (誤) USE_NOINIT (正)USE_STATIC_IVT |
1.00.00 | 2022.06.30 | ・初版 |
以上