時分割処理切換えタイマの考察

販売中のRL78/G1x用のテンプレートは、タイマを使って、タイムシェアリング:時分割でタスク切換えを行います。RL78/G1xは、8チャネルのタイマ・アレイ・ユニットを最大2個持つので、8x2=16個のタイマの中から、どのタイマが時分割切替え処理に適すかを考察します。

※RL78/G13は、タイマ・アレイ・ユニットあたり8チャネル、RL78/G14は、4チャネルを持ちます。各チャネルは、同じ機能なので、ここでは、RL78/G13の場合で記述します。

タイマ・アレイ・ユニット1は、80ピン以上のパッケージで実装されます。テンプレートは、全パッケージで共通にしたいので、現在販売中の全パッケージに実装済みのタイマ・アレイ・ユニット0の中からから使用タイマを選びます。

次に、タイマ・アレイ・ユニット0の割込み要因デフォルトプライオリティ順位は、チャネル0が一番高く、チャネル7が最低です。時分割切換え処理のプライオリティは、低い順位の方が良いでしょう。より緊急度の高い処理などを先に実現できるからです。

また、チャネル0から2は、全パッケージでタイマ入出力端子があります。この端子がないと、インターバルタイマとして動作しますが、端子がある場合は、外部ペリフェラルとの同期動作が可能となります。

※RL78/G14は、全パッケージでチャネル0から3の入出力端子があります。

まとめると、1)全パッケージ実装のタイマ・アレイ・ユニット0、2)低いデフォルトプライオリティ順位、3)外部同期動作可能、以上の要求を満たす、タイマチャネル02が、時分割処理の切換えタイマに適すことが判ります。また、タイマチャネル02なら、RL78/G13とRL78/G14でテンプレートを共通にすることも可能です。

RL78ファミリ用ライブラリリビジョンアップ制限事項とは?

2013年8月8日、RL78ファミリ用EEPROMエミュレーションライブラリ Pack01がVer.1.13へ、データフラッシュライブラリ Type04がVer.1.05へリビジョンアップされました。目的は、RL78/G1xデータフラッシュ機能の読出し制限事項への対策です。この制限事項を解説します。

RL78/G1xには、プログラムを格納するコードフラシュと、データを格納するデータフラシュの2種類のフラッシュがあり、それぞれに以下のライブラリが提供されています。

対象 ライブラリ名 最新バージョン 解説
データフラッシュ EEL (Pack01) V1.13 FDLを利用してデータフラッシュを外付けEEPROMと同じように使えるライブラリ
FDL (Type01) V1.12 データフラッシュにアクセスするライブラリ。ライブラリのサイズにより、Type01/04の2種類がある。サイズが小さいのは、PicoバージョンのType04。
FDL (Type04) V1.05
コードフラッシュ FSL V2.20 プログラムをCPU動作中に書換えるライブラリ

EEL: EEPROM Emulation Libraries, FDL: Flash Data Libraries, FSL: Flash Self-Programming Libraries

今回のリビジョンアップは、テクニカルアップデート:TN-RL*-A009A/Jによると、DMA利用の場合と、旧ライブラリのあるCPU命令の組合せ、この2つの場合に発生する問題へ対応したそうです。FDLでは、シーケンサと呼ばれる(おそらく)ハードウエアで処理の一部を代行します。CPU以外に並行動作するハードウエア(この場合、DMAやシーケンサ)と、CPU処理のアクセス競合を避けるための工夫がライブラリに加えられました。

1000円で販売中のRL78/G1xテンプレートにもFDL(Type04)が使用中です。今まで、上記問題発生は確認しておりません。しかし、掲記の問題発生を避けるためにも、ライブラリをリビジョンアップして提供する予定です。

RL78習得(ネット利用編)

ネットを利用したRL78/G13、RL78/G14の習得方法を紹介します。

Runesas提供のRunesas Interactive RL78コースは、だれでも、いつでも、無料で学習できる教材です。以下にその概要を示します。1コースを10~35分で学べ、途中で停止/再開もできるので、空いた時間にアクセスしてみてはいかがでしょうか? 使用した教材は、PDFでダウンロードもできます。

Runesas Interactive RL78コース概要と時間

MCU/MPU / RL78 / 概要編

スタートアップ編:RL78ファミリ用コンパイラのスタートアップについて学習できます。(10 mins) Released: 05/17/2013 Updated: 05/17/2013

MCU/MPU / RL78 / 周辺編

スタンバイ機能:このコンテンツでは、スタンバイ機能の基礎的な内容を学習します。はじめに、スタンバイ機能の背景と電力消費のメカニズムに触れスタンバイ機能をご紹介します。次に、スタンバイの代表的なモードのHALTモードとSTOPモード、SNOOZEモードをご説明します。更に、これら3つのモードの遷移の様子、SNOOZEモードの動作例として、シリアル・インターフェースとA/D変換機能をご説明します。最後に、その他の省電力のための手段と備考・注意点を添えます。(35 mins) Released: 04/24/2013 Updated: 04/24/2013

ウォッチドッグ・タイマ:このコンテンツでは、 RL78ファミリおよび78Kファミリのウォッチドッグ・タイマ機能の基礎的な内容を学習します。まず、ウォッチドッグ・タイマの背景から始まり、ウォッチドッグ・タイマの概念、ウォッチドッグ・タイマにおけるシステム安全性向上のための工夫、と進めて、ウォッチドッグ・タイマ使用上の注意点に触れ、まとめます。(20 mins) Released: 04/24/2013 Updated: 04/24/2013

ADC編:RL78/G13搭載のADC(A/D Converter)の特長と使い方について学習できます。(10 mins) Released: 05/24/2013 Updated: 05/24/2013

SAU編:RL78/G13搭載のSAU(Serial Array Unit)の特長と使い方について学習できます。(20 mins) Released: 04/24/2013 Updated: 04/24/2013

安全機能編:RL78/G13搭載の安全機能の特長と使い方について学習できます。
(10 mins) Released: 05/24/2013 Updated: 05/24/2013

DTC編:RL78/G14搭載のDTC(Data Transfer Controller)の特長と使い方について学習できます。(10 mins) Released: 05/17/2013 Updated: 05/17/2013

ELC編:RL78/G14搭載のELC(Event Link Controller)の特長と使い方について学習できます。(15 mins) Released: 05/17/2013 Updated: 05/17/2013

タイマRD編:RL78/G14搭載のタイマRDの特長と使い方について学習できます。(20 mins) Released: 05/24/2013 Updated: 05/24/2013

テンプレート使用法(2):分析とテンプレート組込み

第2回は、LCDアプリ分析とテンプレートへの追加方法の説明です。

ドライバとアプリ分離:先ず、LCD制御ソフトを、ドライバ処理とアプリケーション処理(以後アプリ処理と略す)に分けて考えます。ドライバ処理とは、制御対象がLCDコントローラのソフトです。アプリ処理は、ドライバ処理を使ってLCDに出力する文字列を設定するソフトのことです。

LCDドライバ処理:LCD表示を行うには、マイコンピン初期設定、LCDコントローラのパワーオン処理、LCDコントローラ初期設定、LCD表示データ書込みの4種の処理が必要です。そこで、各処理をそれぞれ関数化し、条件によりこの4ドライバ関数に分岐します。これらのドライバ処理をテンプレートへ組込むと、下図(左側)のようになります。

LCDアプリ処理:ドライバ処理で準備が完了したLCDコントローラに対して、LCDで表示する文字列を設定する関数です。コンローラ準備完了判断や、通常表示と、エラーを表示する場合などの条件で分離することを考慮すると、下図(右側)のようになります。

ポータル関数の構成
ポータル関数の構成

ドライバ処理もアプリ処理も、テンプレートへ組み込む形は同じです。ポータル関数でインタフェースRAMの値によって条件分離し、各イベント処理を実行します。各イベント処理後にインタフェースRAM値を変更し、次回の条件分岐に備えます。

インタフェースRAM:関数間の変数をRAMに展開したものをインタフェースRAMと呼びます。RL78/G13やG14には、アクセス頻度が高い変数は、ショート・ダイレクト・アドレッシングsreg領域(FFE20~FFEB3 の147バイト)へ配置すると高速化が図れます。引数で記述する場合に比べ、関数単体デバックが簡単になるメリットがあります。

処理が遅い周辺回路の対処:最近のマイコンは高速動作です。しかし、LCDコントローラなどの周辺回路は、マイコン動作に比べ、とても遅いという問題があります。この遅さに対して、マイコンのポーリングや割込みを使う方法で解決できます。しかし、今回のLCD接続は、リード動作ができないので、これらは使えません。第2の方法は、周辺回路動作完了まで、マイコン側の処理に待ち時間を入れる方法です。サンプルプログラムなどでは、この方法を多く用います。マイコン処理は簡単ですが、無駄に時間を消費しますので、高速マイコンに効果的な方法とは言えません。

第3の方法が、タイムシェアリングを使う方法です。周辺回路の動作を設定した後は、マイコンに別処理を行わせ、周辺回路の処理が完了したころを見計らってさらに追加処理をする方法です。第2の方法より、効率的にマイコンを使えますが、処理完了のころあいを見積もることが大切です。見積もりが上手くいけば、多重処理ができるので、高速マイコンの特長を活かせたソフトができます。リアルタイムOSも、簡単に言うとこの方法を使っています。プログラマの処理完了の見極めが不要で、タスク切換えをOSが行ってくれます。が、それなりの大容量RAMが必要で、4MB程度のRAMでは足りませんし、使いこなしの知識や経験も必要です。また、無料OSもありますが、有料版はコストアップになります。

タイムシェア間隔固定:提供テンプレートは、タイムシェアリング間隔が、予め決まっています。ドライバ処理起動用に、250ms/1ms/10ms/100ms/1s、アプリ処理起動用には、1ms/10ms/100ms/1sです。つまり、この間隔で、遅い周辺回路の処理完了を見積もって、割り振れば良い訳です。間隔が決まっていますので、リアルタイムOSよりは効率が下がりますが、オーバーヘッドは少なくなります。

LCDコントローラの場合は、パワーオン処理に5ms、表示クリアに1.64ms、その他の処理に40us(いずれも最大値)が必要です。そこで、ドライバ処理のポータル関数は10ms間隔、アプリ処理のポータル関数は1s間隔に割り振りました。40usの処理待ちは、タイムシェアリングせずに、時間消費で対応しました。テンプレートに組込んだドライバポータル関数を下図に示します。

テンプレートへ組込んだドライバポータル関数
テンプレートへ組込んだドライバポータル関数

リアルタイムOSに比べれば効率が低下しますが、テンプレートは、少ないRAM使用量で、高速マイコンの特徴を活かした多重処理を、簡単に実現できることが判ると思います。

テンプレート使用法(1):追加アプリとハード構成

今回から数回に分けて販売中のG1xTemplateの使用方法、すなわちアプリ追加の方法を説明します。

第1回は、追加するアプリ選択とハード構成です。

追加アプリ:追加するアプリは、LCD表示アプリとします。実は、このアプリは、G1xTempleteに既に組込み済みです。組込み済みのアプリを例とした方が、組込み結果が判りやすいのためです。別アプリを追加する場合にも、今回と同様の手順と方法が使えます。

ハード構成:LCDは、雑誌などでおなじみの、16文字x2行表示キャラクタディスプレイ、HD44780互換品、秋月電子などで入手容易なものです。LCDとRL78/G13との接続方法も、最も一般的な、3制御+上位4ビットデータの7本インタフェースとします。このハード構成を下図に示します。

LCDハードウエア構成とRL78G13スタータキット実装例
LCDハードウエア構成とRL78G13スタータキット実装例

LCDはライト動作のみで、リードは行いませんのでLCD_RWは、LOW固定です。従って、マイコンに比べ動作が遅いLCDコントローラの処理終了の検出方法には、ポーリングや割込みは使いません