RL78マイコンコーステキスト更新

ルネサス半導体セミナー無償テキストのRL78マイコンコースが、2013年2月28日 Rev.1.22版から2013年4月18日 Rev.1.23へ更新されました。どこが変更されたかは、変更履歴が無いので不明です。

このテキストは、RL78/G13とG14の割込み制御や割込みレジスタバンクの効能、SADDRとCALLTの効能、G14イベントリンクコントローラなどが記述された解りやすい解説書ですので、旧版をダウンロードした方は、最新版に更新することをお勧めします。

マイコン・トレーニング・キット¥9,980

スマートフォンとの連携利用ができるRL78/G14のマイコン・トレーニング・キット:MTK-RL78G14が6月末まで¥9980の限定価格で販売されます(マルツパーツ館の情報。ルネサスエレクトロニクスサイトに2013年5月22日現在、掲載無し)。

実装されているマイコンは、RL78/G14(R5F104PJAFB:100ピン、256K-ROM、LQFP-0.5mm)で、無償版CubeSuite+は、64K-ROMコンパイル制限のために使えません。但し、カフェルネ情報では、裏ワザで回避策があるそうです。

スマートフォンとの連携動作のために、802.11b(11nではない)モジュールや3軸加速度センサーが付くなど、マイコン以外の周辺回路も豊富で、これで¥9980なら安い気がします。CPUコアがS3のRL78/G14でなく、S2のG13なら即購入なのですが、興味のある方は、6月末までに購入すると良さそうです。

RL78 CPUコアをS1/S2/S3で分類

2013/04/11発行のRL78 ファミリ ユーザーズマニュアル  ソフトウェア編で、RL78 ファミリのCPUコアがS1/S2/S3の3種類に分類されました。本ブログ関連のRL78/G13とG14は、S2コアとS3コアに分類されます。

表 各CPUコア機能差と製品例

項目 RL78-S1コア RL78-S2コア RL78-S3コア
CPU 8ビット 16ビット
命令の種類 74種類 75種類 81種類
汎用レジスタ 8ビット・レジスタ×8(バンクなし) 8ビット・レジスタ×8×4バンク
乗除算積和演算命令 なし あり
製品例 RL78/G10 RL78/G13RL78/G12、RL78/G1A、RL78/G1C、RL78/I1A等 RL78/G14

 

前の版、2011年1月31日Rev.1.00のユーザーズマニュアル  ソフトウェア編では、このCPUコア分類はありませんでした。製品が多くなったので、分類が追加され、これですっきりした感じがします。旧NEC系がS1、旧ルネサス系がS3、両者融合の現社ルネサスエレクトロニクスがS2といったところでしょうか?

RL78-S2コアでソフト設計しておけば、適用製品が多いソフト開発ができそうです。

マイコンセミナーテキストの概要

2013年4月2日発行のルネサスエレクトロニクスセミナーニュースVol.83によると、マイコンセミナーのテキストをPDFで公開しており、セミナー受講に関係なく閲覧ができます。そこで、RL78とR8Cのテキストをダウンロードしましたので、その概要を示します。

セミナーテキストは、1ページに“スライド+解説”の構成で、網羅的記述のユーザーズマニュアルよりは、理解しやすいものです(但し、下記に示すように結構ページ数がある)。また、ユーザーズマニュアルの重要項目のみを抜き出して解説しているので、この内容を理解していれば、RL78、R8Cマイコンを使用するには十分な内容と推測されます。機種は、RL78/G14に限定して解説していますが、G13にもほとんどそのまま適用できます。

テキスト名 概要
RL78マイコンコース2013/2/26 Rev.1.22

(全243ページ)

RL78/G14のユーザーズマニュアル・ハードウエア編のサブセット。

G14特有のイベント・リンク・コントローラ、データ・トランスファ・コントローラの記述あり。第6章の割込み制御は、理解しやすく良くできている。CubeSuite+のコード生成を利用する際に、割込み優先順位とバンク設定の考え方の参考になる。

RL78コンパイラコース2013/3/18 Rev.1.05

(全194ページ)

ユーザーズマニュアル・RL78、78K0Rコーティング編のサブセット。

共用体を配列として宣言する場合は、全体が偶数サイズとなるようにメンバ調整が必須などの注意事項記述。第3章の効率アップ手法と、第6章のスタックサイズの算出は、必読。

R8Cマイコンコース2012/3/21 Rev.2.20

(全238ページ)

R8C/25のハードウエアユーザーズマニュアルと、Cコンパイラユーザーズマニュアルのサブセット。

R8Cは、3/x、5/xと性能と使いやすさを追求して展開中であるが、本テキストは、R8C/25に限定して解説しており、個人的にはうれしいし、役立つ。全体の目次ページが無いので、各章目次を抜き出したものを以下に添付。

 

R8Cマイコンコーステキスト全体目次

第1章 概要

1.1 R8Cファミリの特徴

1.2 R8Cファミリのシリーズ展開

1.3 R8C/25グループ概略仕様

1.4 開発ツール

第2章 R8C/2xシリーズのハードウェア

2.1 アドレス空間

2.2 リセット動作と電圧検出回路

2.3 発振回路

2.4 パワーコントロール

2.5 プロテクト機能

第3章 R8Cファミリのアーキテクチャ

3.1 SFR領域と固定ベクタテーブル

3.2 レジスタセット

3.3 扱えるデータタイプ

3.4 メモリとレジスタ上のデータ配置

3.5 アドレッシングモード

3.6 命令セット

第4章 NC30の実装仕様

4.1 概要

4.2 データ型と修飾子

4.3 絶対番地へのアクセス

4.4 メモリ配置

第5章 スタートアッププログラム

5.1 役割と構成

5.2 プログラム例

5.3 スタック使用量の算出

第6章 R8Cファミリの割り込み制御

6.1 割り込みの動作と使用方法

6.2 INT割り込み

第7章 割り込みプログラムの記述

7.1 割り込みを使うには

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

7.3 割り込みの初期化

7.4 割り込み関数

第8章 R8C/25グループの内蔵周辺機能

8.1 プログラマブル入出力ポート

8.2 タイマ

8.3 ウォッチドッグタイマ

8.4 シリアルインタフェース

8.5 A/Dコンバータ

8.6 フラッシュメモリ

付録

A. NC30起動オプション一覧

B. アセンブリ言語レベルの最適化

マイコンセミナーテキストの概要

2013年4月2日発行のルネサスエレクトロニクスセミナーニュースVol.83によると、マイコンセミナーのテキストをPDFで公開しており、セミナー受講に関係なく閲覧ができます。そこで、RL78とR8Cのテキストをダウンロードしましたので、その概要を示します。

セミナーテキストは、1ページに“スライド+解説”の構成で、網羅的記述のユーザーズマニュアルよりは、理解しやすいものです(但し、下記に示すように結構ページ数がある)。また、ユーザーズマニュアルの重要項目のみを抜き出して解説しているので、この内容を理解していれば、RL78、R8Cマイコンを使用するには十分な内容と推測されます。機種は、RL78/G14に限定して解説していますが、G13にもほとんどそのまま適用できます。

テキスト名 概要
RL78マイコンコース2013/2/26 Rev.1.22

(全243ページ)

RL78/G14のユーザーズマニュアル・ハードウエア編のサブセット。

G14特有のイベント・リンク・コントローラ、データ・トランスファ・コントローラの記述あり。第6章の割込み制御は、理解しやすく良くできている。CubeSuite+のコード生成を利用する際に、割込み優先順位とバンク設定の考え方の参考になる。

RL78コンパイラコース2013/3/18 Rev.1.05

(全194ページ)

ユーザーズマニュアル・RL78、78K0Rコーティング編のサブセット。

共用体を配列として宣言する場合は、全体が偶数サイズとなるようにメンバ調整が必須などの注意事項記述。第3章の効率アップ手法と、第6章のスタックサイズの算出は、必読。

R8Cマイコンコース2012/3/21 Rev.2.20

(全238ページ)

R8C/25のハードウエアユーザーズマニュアルと、Cコンパイラユーザーズマニュアルのサブセット。

R8Cは、3/x、5/xと性能と使いやすさを追求して展開中であるが、本テキストは、R8C/25に限定して解説しており、個人的にはうれしいし、役立つ。全体の目次ページが無いので、各章目次を抜き出したものを以下に添付。

 

R8Cマイコンコーステキスト全体目次

第1章 概要

1.1 R8Cファミリの特徴

1.2 R8Cファミリのシリーズ展開

1.3 R8C/25グループ概略仕様

1.4 開発ツール

第2章 R8C/2xシリーズのハードウェア

2.1 アドレス空間

2.2 リセット動作と電圧検出回路

2.3 発振回路

2.4 パワーコントロール

2.5 プロテクト機能

第3章 R8Cファミリのアーキテクチャ

3.1 SFR領域と固定ベクタテーブル

3.2 レジスタセット

3.3 扱えるデータタイプ

3.4 メモリとレジスタ上のデータ配置

3.5 アドレッシングモード

3.6 命令セット

第4章 NC30の実装仕様

4.1 概要

4.2 データ型と修飾子

4.3 絶対番地へのアクセス

4.4 メモリ配置

第5章 スタートアッププログラム

5.1 役割と構成

5.2 プログラム例

5.3 スタック使用量の算出

第6章 R8Cファミリの割り込み制御

6.1 割り込みの動作と使用方法

6.2 INT割り込み

第7章 割り込みプログラムの記述

7.1 割り込みを使うには

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

7.3 割り込みの初期化

7.4 割り込み関数

第8章 R8C/25グループの内蔵周辺機能

8.1 プログラマブル入出力ポート

8.2 タイマ

8.3 ウォッチドッグタイマ

8.4 シリアルインタフェース

8.5 A/Dコンバータ

8.6 フラッシュメモリ

付録

A. NC30起動オプション一覧

B. アセンブリ言語レベルの最適化

構造体と共用体

構造体と共用体は、マイコンのソフト作成時、初心者には必須技術です。既存ソースの理解や、コード生成ソースの解読に欠かせないからです。そこで、初心者も判りやすいシンプルな解説書を作成しました。

構造体は、“複数の既存型で、新しい型を作る”。共用体は、“複数の既存型で、メモリを共有する”。この2点を覚えてください。そうすれば、以下の例(R8C/25)が理解できます。RL78の場合は、”bit”が予約語になっているので、適当に変えれば(私の場合は、”b”を使用)使えます。

構造体の解説
構造体の解説
構造体の中身
構造体の中身

 

共用体の解説
共用体の解説
共用体の中身
共用体の中身

 

コード生成の不具合とリリース・ノート一読の薦め

ソフトにバグは付き物です。CubeSuite+のコード生成にも、このバグがあります。自作ソフトのバグと、純正ツールが生成したバグ、両方に対処する必要があるのは残念ですが、やむを得ません。今回は、2013年2月15日にリリースされたコード生成バグで、RL78/G13とG14に関するものを2点紹介します。

CA78K0Rの更新履歴
CA78K0Rの更新履歴

ここ1年のCubeSuite+、CA78K0Rの更新履歴を診ると、2~3か月でバージョンアップされていることが判ります。CA78K0Rは、純正ビルド・ツールで、コード生成もこのツール出力です。各版フォルダ内にDocフォルダがあり、この中にリリース・ノートがあります。

リリース・ノートには、変更点と注意事項があり、使用前に必ず読むようにありますが、初心者は読まないでしょう。ツール更新が自動化され、更新完了すると、なるべく早く開発を継続したいからです。そうすると、自作バグと純正ツールバグの切り分けができず、ハマッテしまいます。経験者は、このハマッタ経験があるから、ツール更新時は、落ち着いてリリース・ノートを読みます。

RL78/G13とG14の注意点:スタートアップ・ルーチン

スタートアップルーチンの注意事項
スタートアップルーチンの注意事項

初心~中級者は、スタック領域サイズを変更することはないと思います、が、念のため読んでおきましょう。コード生成が出力するr_systeminit.cのhdwinit関数は、main関数前に処理されるので、デバッガダウンロード時、デフォルト設定なら自動実行されます。また、r_systeminit.cは、コード生成に問題がない時は、全く気にしないファイルです。従って、かなり見つけにくいバグになるでしょう。この場合には、デバッガのデフォルト設定(指定シンボル:_main)を変更し、コード生成出力に、回避策を手動で追加する必要があります。

RL78/G14のタイマRD/RJの注意点:

RL78/G14の特徴に、高速オンチップオシレータ64MHz対応のタイマRD PWMモードがあります。この特徴を使ったタイマRDの、コード生成出力のデューティ比が、正しくない不具合があります。また、ポート割当てとの競合を示す!マークも正しく表示されません。

タイマRJのパルス周期計測モード使用時、コード生成の計測計算に、誤りがあります

これらの不具合には、リリース・ノート記載の回避策に沿って対処します。根本的には、次回2013年4月頃予定のCubeSuite+次期バージョンで改善されるそうです。しかし万一、これらが原因でハマッテしまった場合、切り分けや、抜け出すのが困難であることが判るでしょう。ツール更新時は、リリース・ノート一読をお薦めする理由です。

アプリ時分割起動処理

組込みマイコンのIDEが出力するmain()には、普通while文の無限ループによるアプリ起動処理が一か所記述されます。CubeSuite+のコード生成出力にもこれがあります。このアプリ起動処理を、起動されるアプリ側から検討します。

CubeSuite+が生成するmain()の無限ループ
CubeSuite+が生成するmain()の無限ループ

起動されるアプリには、割込みの確認/応答などのようにリアルタイム処理が必要なものから、スイッチチャタリング処理などの数ミリsec~数10ミリsec程度の処理間隔時間が必要なものまで様々です。このように処理時間が異なるアプリを、一か所の処理から起動すると、問題点がアプリ側に生じます。

スイッチチャタリング(以下SWと略す)処理を例に示します。1回目に起動されたSW処理で、スイッチのOn/Offを検出し、2回目に起動された時に再検出して1回目のOn/Offと同じであれば、スイッチの値を確定するような処理です。使用するスイッチにもよりますが、1回目と2回目の検出には、数ミリsec~数10ミリsecの時間間隔が必要です。この間は、On/Off値がハード的にバタついて安定しないからです。もし、起動処理が一か所の場合には、アプリのSW処理側でこの時間間隔分の検出処理をしない、“飛ばし”が必要になります。この“飛ばし”をn回とします。n回起動されるまで2回目のOn/Offを調べない訳です。

起動処理は一か所ですので、他のアプリも起動します。起動側のアプリにもSW処理と同様、処理を“飛ばす”場合があると、結果として、SW処理の起動間隔は別アプリの“飛ばし”有無により変わってしまいます。SW処理は、他のアプリの“飛ばし”有無は判りませんので、このままではSW処理プログラムが書けません

これを解決する方法の1つは、SW処理アプリが、“他のアプリ処理に係らず、常に例えば10ミリsecの一定間隔で起動“されることです。これならSW処理に“飛ばし”は不要です。このように本来は、アプリの要求時間に応じて、複数の起動処理が必要なのです。ここが、初心者が見落としがちな箇所です。アプリケーションノートには、説明を簡単にするため、1アプリ起動例しか載せないことが多いことが原因です。

複数の起動処理としては、1msec/10msec/100msec/1sec4つの時分割起動で、起動側のアプリ例は、表のようにした場合に経験的に上手く機能しました。この時分割は、マイコン内臓タイマを使い、CubeSuite+のコード生成に追加します。これが、前回紹介した追加コードです。そして、このコードを追加したものがテンプレートです。

アプリ起動間隔 起動されるアプリ例
1msec 割込み確認、割込み応答処理など、リアルタイム性が要求される処理
10msec スイッチチャタリング処理、LCD初期設定など
100msec LED処理、LCD表示など
1sec 人間相手の処理、ウオッチドックタイマのリセットなど

 

テンプレートの時分割起動部分ソースを示します。これなら、たとえ10ミリsecSW処理以外に複数アプリが起動されても、アプリ側で“飛ばし”が不要ですので、他のアプリ処理有無に係らずSW処理のプログラミングができます。

時分割アプリ起動処理を加えたテンプレート
時分割アプリ起動処理を加えたテンプレート

 

CubeSuite+を使ったRL78/G1xの開発シナリオ

CubeSuite+は、設定項目が多く、コード生成ツールも、利用する周辺ハードのAPIを自動生成しますが、プロジェクト作成の度にこれらを設定する必要があり、この段階で設定忘れやミスなどが発生しやすく、本来のアプリ開発をする前の手間や時間がかかります。

効果的な対策は、各種の設定済みのプロジェクトを再利用することです。生成ソースの指定エリアに、コードを追加記述していれば、設定を変更して再コード生成しても、追加分はそのままマージされるからです。これで設定ミスなどは減らせます。

開発シナリオの比較
開発シナリオの比較

追加するコードは、アプリを時分割起動する処理にします。そして、このアプリ起動処理追加済みのプロジェクトをテンプレートにします。アプリ開発は、このテンプレートをコピーし、別名、例えば、アプリ名で保存した後、始めます。アプリを起動する処理は、既にテンプレートに記述済みなので、即アプリ開発に着手できます。

この追加コードの詳細は、近日中に明らかにします。

コード生成の設定順序

CubeSuite+のコード生成では、クロック発生回路の“端子割り当て設定タブ”で、はじめに必ず設定してください。この設定は1度行うと変更できませんと、赤コメントが表示されます。今回は、この理由とコード生成の周辺機能の設定順序について示します。

周辺機能ピンの確定必要性
周辺機能ピンの確定必要性

RL78マイコンは、1つのピンに複数の周辺機能のI/Oピンを割付け可能です。これらI/Oピンには、再配置が可能なものもあります。例えば、64ピンパッケージのRL78/G13の割込みINTP10ピンは、P52P76のどちらかにでも割付け可能です。コード生成ツール(以下Cgと略す)は、GUIで周辺機能を簡単に設定できますが、対象となる周辺機能がどのピンを使うかが決まっていないと、ピンの競合判断ができません。そこで、最初に、周辺機能ピンの確定が必要になります。これを行うのが、“端子割り当て設定タブ”で、はじめに必ず…が表示される理由です。

Cgのクロック発生回路の次には、上から順にポート、割り込み、シリアル…と続きます。これは、使用頻度の高い機能順だろうと思います。しかし設定する時は、ポートを最後にすることをお勧めします。理由は、Cgが競合判断を行うからです。

ポートでは、各ポートの入出力や内臓プルアップの設定などができます。但し、デフォルトでは、全て“使用しない”となっています。この“使用しない”とは、“単純なI/Oポートとしては使用しないという意味”です。例えば、端子割り当てタブでPIOR0ビット=1にして、INTP10P76に確定したとしましょう。ポートの“ポート7”タブでのP76は、他のポートと同じ表示です。しかし、割り込みを先に設定した場合には、P76赤!マークが付きます。このマークにカーソルを合わせると、「P76INTP10で使われています。」というメッセージが表示されます。Cgが競合ありと判断したのです。

コード生成ツールの競合判断
コード生成ツールの競合判断

このように、ポート設定を周辺機能の後に行うと、既に使用済みのI/Oピンには、赤!マークが付きますので、デフォルトのままにできます。このマーク付きのピンを、どうしてもI/Oポートとして使いたい場合には、周辺機能を無効にするか、または最初のピン確定を変える必要があります。ピン確定は1度しかできませんので、新たなプロジェクト作成となります。

コード生成(設計ツール)の設定順序をまとめます。

(1) クロック発生回路>端子割り当て設定タブで、再配置可能な周辺機能の使用ピンを確定。

(2) ポート以外の使用周辺機能を設定。未使用周辺は、デフォルト無効なので、そのままでOK

(3) ポート>ポートnタブで、競合なしピンを設定。競合ピンをI/Oピンとして使う場合は、使用周辺機能を無効にするか、新プロジェクト作成が必要。

他の周辺機能に比べ、ポートは、ピン配置の自由度が高いので、最後に設定するのが良いでしょう。Cgでは、クロック発生回路のすぐ下にありますので、先に設定しがちですが、これを先にすると、周辺機能に赤!マークが付いて設定できなくなります。