mtkernel_3

μT-Kernel3.0 RX65Nマイコン向け実装仕様書

Version.02.00.00

2023.12.01

目次

1. 概要

1.1. 目的

本書は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を示し、本実装と称する場合、前述のソースコードの実装を示す。

1.2. 対象ハードウェア

実装対象のハードウェアは以下の通りである。

分類 名称 備考
マイコン RX600シリーズ RX65Nグループ
R5F565NE
ルネサス エレクトロニクス製

本実装は、RX65Nマイコンについてのみであり、マイコンを搭載した実機は定めない。

1.3. ターゲット名

本実装では対象ターゲットを定めないのでターゲット名も定めない。関連する識別名は以下とする。

分類 名称 対象
対象CPUアーキテクチャ CPU_RX65N RX65Nシリーズ
対象CPUコア CPU_CORE_RXV2 RXv2コア

識別名は対象システムの以下のファイルで定義しなければならない。

 include/sys/sysdepend/<対象システム>/machine.h

1.4. 関連ドキュメント

以下に関連するドキュメントを記す。

分類 名称 発行
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グループ ユーザーズマニュアル ハードウェア編 ルネサス エレクトロニクス

1.5. ソースコード構成

機種依存定義sysdependディレクトリ下の本実装のディレクトリ構成を以下に示す。名称に(*)の点いたディレクトリが本実装の対象である。

─ sysdepend         ハードウェア依存部
├ <ターゲットn>          ターゲットn 依存部
└ cpu                    CPU依存部
   ├ rx65N                         RX65Nマイコン依存部 (*)
   ├     :
   └ <CPUn>                        CPUn依存部
   └ core                          コア依存部
          ├ rxv2                        RXv2コア依存部
          ├    :
          └ <core n>                    コアn依存部

「RXv2コア依存部」は、RXv2コアに共通するコードであり、他の共通のコアを有するマイコンでも使用される。 「RX65Nマイコン依存部」は、前述のコア依存部以外の本マイコンに固有のコードである。

2. 基本実装仕様

2.1. マイコン関連

2.1.1. 対象マイコン

実装対象のマイコンの基本的な仕様を以下に記す。

項目 内容
CPUコア RXv2
ROM 2048KB(内蔵フラッシュROM)
RAM 256KB(内蔵RAM) + 384KB(拡張RAM)

2.1.2. 実行モードと保護レベル

RXv2向け実装仕様書を参照のこと。

2.1.3. CPUレジスタ

RXv2向け実装仕様書を参照のこと。

2.1.4. 低消費電力モードと省電力機能

省電力機能はサポートしていない。プロファイルTK_SUPPORT_LOWPOWERはFALSEである。よって、マイコンの低消費電力モードに対応する機能は持たない。

省電力機能のAPI(low_pow、off_pow)をサポートする場合は、対象システムの以下のファイルに、適切な省電力処理を記述し、プロファイルTK_SUPPORT_LOWPOWERをTRUEに指定する。

/kernel/sysdepend/<対象システム>/power.c

2.1.5. コプロセッサ対応

本マイコンはFPUおよびDSPの機能を有する。コンフィギュレーションUSE_FPUおよびUSE_DSPにより、OSのコプロセッサ対応機能を有効とすることができる。FPUやDSPが有効の場合、コプロセッサレジスタ操作APIが使用可能となる。 詳細はRXv2向け実装仕様書を参照のこと。

2.2. メモリ関連

2.2.1. メモリモデル

RXv2向け実装仕様書を参照のこと。

2.2.2. マイコンのアドレス・マップ

マイコンのアドレス・マップは、シングルチップモードまたは内蔵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 コードフラッシュメモリ

2.2.3. OSのメモリマップ

本実装では、マイコンの内蔵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
例外スタック領域 例外および割込みハンドラにて使用されるスタック

2.2.4. スタック

RXv2向け実装仕様書を参照のこと。

2.2.5. OS内の動的メモリ管理

RXv2向け実装仕様書を参照のこと。

2.3. 割込みおよび例外関係

2.3.1. マイコンの割込みおよび例外

RXv2向け実装仕様書を参照のこと。

2.3.2. 割込み関連定義

本マイコンのハードウェアに関わる割込み関連の定義を以下に記す。項目は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

2.3.3. ベクタテーブル

本マイコンは、例外ベクタテーブルと割込みベクタテーブルを有する(各テーブルの具体的な仕様はマイコンのユーザマニュアルを参照のこと)。 また、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向け実装仕様書を参照のこと。

2.3.3.1. 割込み優先度

RXv2向け実装仕様書を参照のこと。

2.3.4. OS内部で使用する割込み

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 ```

2.3.5. 多重割込み対応

RXv2向け実装仕様書を参照のこと。

2.3.6. クリティカルセクション

最高割込み優先度INTPRI_MAX_EXTINT_PRIは、本OSが管理する割込みの最高の割込み優先度であり、以下のファイルで定義される。詳細はRXv2向け実装仕様書を参照のこと。

include/sys/sysdepend/cpu/rx65n/sysdef.h ``` #define	INTPRI_MAX_INT_PRI	15 ```

2.3.7. μT-Kenrel/OSの割込み管理機能

本マイコン固有の実装仕様を以降に記す。共通仕様はRXv2向け実装仕様書を参照のこと。

  • 割込み番号 本マイコンはグループ割込み(GROUPBE0、GROUPBL0、GROUPBL1、GROUPBL2、GROUPAL0、GROUPAL1)を有する。 コンフィギュレーションUSE_GROUP_INTが有効(1)の場合、グループ割込みが使用可能となる(初期値は有効(1))。

割込み番号の割当ては以下となる。

割込み番号 対応する割込み
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

2.3.8. μT-Kernel/SMの割込み管理機能

RXv2向け実装仕様書を参照のこと。

2.3.9. OS管理外割込み

RXv2向け実装仕様書を参照のこと。

2.3.10. その他の例外

RXv2向け実装仕様書を参照のこと。

2.3.11. 選択型割込みの対応

本実装では選択型割込みに対応して選択型割込み設定API setPERIを提供する。本APIはμT-Kernel 3.0仕様には含まれない。

項目 内容
形式 ER SetPERI(UINT intno, UINT fctno)
引数 UINT intno 選択型割込みの割込み番号
UINT fctno 設定する割込み要因番号
戻り値 エラーコード
機能 intnoで指定した選択型割込みに、fctnoで指定した割込み要因番号を設定する

3. システムの起動

3.1. 起動処理

3.1.1. リセットハンドラ

リセットハンドラはRXv2向け実装仕様書を参照のこと。 リセットハンドラから呼ばれるknl_startup_hw関数により対象システムに固有の処理が実行される。 knl_startup_hw関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。関数の仕様については、共通実装仕様書を参照のこと。 knl_startup_hw関数は対象システムの以下のファイルに定義される。本実装では未実装である。

 kernel/sysdepend/<対象システム>/hw_setting.c

3.1.2. OS初期化処理

OS初期化処理は共通部のmain関数で実行される。共通実装仕様書を参照のこと。 main関数から以下の対象システムに依存する処理が実行される。

(1) デバイスの初期化 knl_init_device main関数より呼び出され、デバイスドライバの登録に先立ち、必要なハードウェアの初期化を行う。 knl_init_device関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。 knl_init_device関数は対象システムの以下のファイルに定義される。本実装では未実装である。

 kernel/sysdepend/<対象システム>/devinit.c

3.2. 初期タスク

3.2.1. 初期タスクの処理

初期タスクの処理は共通部のinit_task_main関数で実行される。 init_task_main関数から以下の対象システムに依存する処理が実行される。

(1) デバイスの実行(knl_start_device) デバイスドライバの登録、実行を行う。 knl_start_device関数は対象とするハードウェアおよびアプリケーションに応じて実装しなければならない。 knl_start_device関数は対象システムの以下のファイルに定義される。本実装では未実装である。

 kernel/sysdepend/<対象システム>/devinit.c

4. システムの終了と再起動

4.1. 終了処理と再起動処理

終了処理と再起動処理は共通部の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

5. タスク

本マイコンに依存するタスクの仕様を以下に記す。

5.1. タスク属性

タスク属性のハードウェア依存仕様を以下に示す。

属性 可否 説明
TA_COP0 FPU(TA_FPUと同じ)
TA_COP1 × DSP
TA_COP2 × 対応無し
TA_COP3 × 対応無し
TA_FPU FPU(TA_COP0と同じ)

5.2. タスクの処理ルーチン

RXv2向け実装仕様書を参照のこと。

5.3. タスク・コンテキスト情報

RXv2向け実装仕様書を参照のこと。

6. 時間管理機能

6.1. システムタイマ

RXv2向け実装仕様書を参照のこと。

6.2. タイムイベントハンドラ

タイムイベントハンドラの実行中の割込みマスクレベルは、タイムイベントハンドラ割込みレベルTIMER_INTLEVELに設定される。TIMER_INTLEVELは、以下のファイルで定義される。

include/sys/sysdepend/cpu/rx65n/sysdef.h

本実装では初期値は以下のように0(すべての割込みを許可)が設定されている。

#define TIMER_INTLEVEL	0  //すべての割込みを許可

7. その他の実装仕様

7.1. 物理タイマ機能

7.1.1. 使用するハードウェアタイマ

マイコン内蔵の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は物理タイマに初期化される)。

7.1.2. タイマの設定

物理タイマのクロック設定は、以下のファイルで定義される。

include/sys/sysdepend/cpu/rx65n/sysdef.h

#define TMR01_CLOCK     (0x08)          // Count PCLK
#define TMR23_CLOCK     (0x08)          // Count PCLK

この値は、TMRのTCCRレジスタのCKSビットに設定される。上記の設定を変更することにより、各物理タイマのクロックを変更できる。

7.1.3. タイマ割込み

物理タイマはその内部処理において、各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

7.2. T-Monitor互換ライブラリ

本マイコンは未実装である。

8. 変更履歴

版数 日付 内容
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 ・初版

以上