60歳からの電子工作ノート

生涯学習として取り組んでいます。

RL78/G16 CPUボートの試作(スタートアッププログラム)

試作したRL78/G16のCPUボードのスタートアップ処理です。

以下の資料を参考にしています。

資料1*1、資料2*2、資料3*3、資料4*4、資料5*5

 

スタートアップ処理

  CS+の新規プロジェクト作成でスタートアッププログラムができますが、汎用性が高く難しいので、ここでは新たに作成しました。電源ONから main()起動までの処理です。

1) オプション・バイト(0x0000C~0x000C3)のデータよりリセット解除電圧に達したらリセットを解除する。(資料1の「19.3 セレクタブル・パワーオン・リセット(SPOR)回路の動作」)

2)リセットベクタ(0x00000)に書かれているアドレスから実行

3)スタックポインタのセット

4)RAM領域の初期化

5)初期値付きグローバル変数の初期値をRAM領域へコピー

6) main()の実行

(.sdataセクションを使用しない、saddr配置変数(0xFFE20~0xFFF1Fに配置される初期値付き変数、初期値なし変数)を使用しない前提で作成しています。)

 

図1. スタートアップ処理

 

オプションバイトの設定

動作周波数やリセット解除電圧を設定します。ソースファイルで設定しています。

本実験では電源電圧を5[V]としています。このためSPOR検出電圧を、立ち上がり電圧=4.28[V],立ち下がり電圧=4.20[V]としました。(本設定では電源電圧=3.3[V]とした場合、リセットが解除されずCPUは動作しません。)

図2. オプションバイトの設定
RAM領域の初期化

RAM(アドレス _RAM_ADDR_START~_STACK_ADDR_START)を0で初期化します。

図3. RAM領域の初期化
変数初期値のコピー

ROM上の.data領域にある初期値付き変数の初期値を、RAM上の.dataR領域コピーします。(変数のため、初期値を書き換える場合があるため)

図4. 変数初期値のコピー


開発ツールの設定

CC-RL ビルドツールの設定

オンチップデバックとRAMモニタのため、リンクオプション→デバイスで設定します。

本実験では、ユーザ・オプション・バイトはファイルで設定します。

図5. オンチップデバックとRAMモニタの設定

セクションは自動配置(デフォルト)設定です。

図6. セクション配置指定

 ROMからRAMへマップするセクションを編集します。

(セクション .sdataは使用しないため)

図7. ROMからRAMへマップするセクション

また関数や変数の配置を知るために、マップ情報を出力すると便利です。

図8. mapファイル表示用

E2 Liteデバックツールの設定

リセット解除後から表示:「CPUリセット後に指定シンボルまで実行する」=いいえ

実行中の変数表示:実行中のメモリアクセス「実行を一瞬停止してアクセスする」=はい

図9. E2-Liteの設定


スタートアッププログラム

スタートアップだけのプログラムです。start_up.cは cのファイルですが中身はアセンブラで記述しています。(インラインアセンブラ)

iodefibne.hは、RL78/G16(ROM16KB)のR5F121BAxFP(32pin)の「新規プロジェクト作成」で作成されたファイルです。

図10. スタートアッププログラム

 

ファイル一覧

図11. ファイル一覧

GitHub登録場所: https://github.com/vABCWork/rl78_startup

 

・開発環境

無償評価版 CS+ for CC V8.11.00 [30 Nov 2023]

CC-RL V1.13.00

ダウンロード後の状態

スタートアッププログラムをダウンロードした状態です。CC-RLの設定「リンクオプション→デバイス」で、オンチップデバック、RRM、DMMを設定すると、モニタ用のプログラムがユーザのROM領域に書き込まれます。(資料1「23.4 ユーザ資源の確保」)

リセットベクタはモニタプログラムの先頭を示しています。0x00002,0x00003には、リンクオプションで設定した、RRM/DMM機能用ワーク領域開始アドレスの下位16ビットが書き込まれています。0x000ceからモニタプログラム( セクション名 .monitor1)が10バイト入ります。0x000d8が、実際のプログラムの開始です。

図12. ダウンロード後(「表示」→「逆アセンブル」→「逆アセンブル1」)


その他


メモリマップ(デバックモニタあり)

オンチップデバック、RRM、DMMを設定してデバック用モニタを含めた場合のメモリマップです。(資料1の「23.4 ユーザ資源の確保」)

図13. メモリマップ(ROM 16[KB]版 デバックモニタあり)


ミラー領域 

資料4に説明されています。ここでは図解にしました。

ミラー領域とは、ROMに書かれている定数(const宣言)を、読み出す際にプログラムサイズを少なくするためにデータ領域から読み出しできるようにした領域です。

RL78のアドレス空間は 1Mbyte(0x00000~0xFFFFF)あり、アドレスの指定には20ビット必要です。-----①

データ読み出しには、読み出しアドレスをレジスタで指定しますが、レジスタは16ビットのため、指定できるアドレスは0x0000~0xFFFF(64Kbyte)の範囲です。-----②

図14-1. ミラー領域の説明(1/3)

 ESレジスタで上位4ビットを指定すれば、全アドレス空間を指定できますが、
コードサイズが大きくなります。-----③

図14-2. ミラー領域の説明(2/3)

このためRL78では、0x00000~0x0FFFFにあるプログラムコードと、0xF0000~0xFFFFFにあるデータは、下位16ビットのアドレスだけで読み出しできるよう設計しました。-----④

定数データ(const)はROMに書き込む必要があるため、コード領域に置かれますが、データを16ビットのアドレスでReadするには、0xF0000~0xFFFFFに置く必要があります。
ミラー領域(0xF0800~0xF7FFF)を持つことで、これらのROMデータも16bitのアドレス指定でReadできるので、プログラムサイズも小さくなります。-----⑤

図14-3. ミラー領域の説明(3/3)
起動時にフラッシュROMを消去する (E2 Lite設定)

E2 Liteには、「起動時にフラッシュROMを消去する」設定があります。

図15. 起動時にフラッシュROMを消去する

これは次の状況で「はい」を選択しました。

CPUのフラッシュ上のオプションバイトのSPOR検出電圧設定(0x 000c1) = 0xF3(立ち上がり電圧=4.28[V],立ち下がり電圧=4.20[V])が書き込まれてる状態で、
電源電圧=3.3[V]とした場合、CPUのリセットは解除されず動作しません。
「はい」とすれば、E2接続時にフラッシュを消去してくれます。

図16. CPUがリセット解除できない状況
プロジェクトの作成法

CS+のメニュー「ファイル」→「新規作成」→「新しいプロジェクト作成」→マイコン選択→RL78/G16(ROM16KB)のR5F121BAxFP(32pin)→プロジェクト名入力→作成ボタン によりファイルを作成します。本実験で必要なファイルは、iodefine.hだけです。

図17. プロジェクト作成法

 

 

*1:資料1「RL78/G16 ユーザーズマニュアル ハードウェア編」 Rev.1.10 2023.08

*2:資料2「CC-RL コンパイラ ユーザーズマニュアル」 Rev.1.13 2023.12

*3:資料3「RL78 ファミリ ユーザーズマニュアル ソフトウェア編」 Rev.2.30 2022.04

*4:資料4 「FAQ 1010743 : RL78/G13のメモリ・マップをみると「Mirror」とあります。これは何のためのものですか?」 https://ja-support.renesas.com/knowledgeBase/17794735

*5:資料5 「絵解き マイコンC プログラミング教科書 第1版」 CQ出版社