RL78をCS+で開発しています。
このCS+に内蔵されたシミュレータはなかなか便利なんですが、使い方がやたら難しい。
マニュアルを読んでもマニュアル自体が理解不能。
- UARTやSPIの送受信をシミュレートできる
相手が居ないときに便利です。 - ポートへのOUT状態がグラフで見える
ポートをパタパタして手動でSPIとかをする際に便利です。
またグラフ上で時間を計れるのも何気に良い。 - ソフトでの待ち時間DELAYを簡単に作れる
CPUのクロック数から経過時間を計ってくれます。 - ビルド・デバッグのサイクルが早い
E1にDLしないのでとても高速に繰り返せます。これはでかい。
などなど、もっと色んな使い途が有るんだろうと思います。
ハードが完成する前にかなりのことを試せるんで、納期の短いアナタにぴったりです。
準備
シミュレータのプロパティ説明 シミュレータのGUIの説明 端子への信号入力の方法
シミュレータでは・・・
1,実行時間の計測をするには事前の設定が必要(E1では何もしなくて測れるんだけど)。
2,トレースを行うにも事前の設定が必要。
以下の辺りをいじくれば動くが大事なのは
タイマ機能を「はい」にする。こうしないとイベント・ウインドウでの時間計測も出来ないようです。
なおシミュレータで出てくる「メイン・クロック周波数」は外部クロック使用時の設定であり、内蔵OSC使用時は無関係です(「タイマ/トレース用クロック周波数」は自動で決まるので、いじっても無意味。無意味ならグレーアウトしてくれたら良いのに)。
SPIのデバッグ
SPI(※1)のデバッグにRL78内蔵のシミュレータを使ったけど、やたら使い難く忘れちゃいそうなのでメモ。
まずはコード生成でこんな感じにした。
「データ送受信タイミング設定=タイプ1」にしてるけど、これは一般的な言い方をすれば恐らく「CPHA=1、CPOL=1」のモード3の事だと思う(※2)。
またクロックは単位がbpsだが、シミュレータ側は何故かKHzなので要注意(※3)。
(※1)ルネサスのシリアルIFは自由度と引き換えに名前や定義が面倒くさい。
SAU(要するにシリアルユニットのことらしいが良く分からん)と言う名前のCPU内蔵ハードウエアをUARTに使ったりSPIにしたりして使うんだけど、SPIひとつでも簡易SPIやRSPIなんてのまで有る。しかも名前もCSIと言うらしい。
んじゃ”世界の一般的技術者”が言うところの”普通のSPI”はどれなのよ?と言いたくなるほど分かりにくい。
汎用的で自由配置ならせめてデフォルトで「SPI、UART、I2Cはここに繋げろ」になってるのが当たり前の親切ってもんじゃん。
mbedのこの分かりやすさやμVisionの統一された美しさを少しは見習って欲しい。
(※2)ルネサスが勝手に変名したお陰で分かりにくくなってるのは、この送受信タイミング(恐らくSPIのモードのこと)以外にもCSI、SO、SI、SCKなど(それぞれSPI/MOSI/MISO/SCLK)多数あり・・・こんなどうでもいい部分で独自性を出さなくて良いから、世間の一般的な記述にして分かりやすくして欲しい。
(※3)CS+と他のツール(シミュレータ、RFP、e2studioなどなど)を同時に使うと、この手の不整合があちこちに出てくる。表示されるメッセージなども不統一なので、いちいち調べないとならない。
自分は無料版を使ってるから何も言えないけど、金を出してるお客はどう思ってるんだろ?ひょっとして全体を統括する管理者がいないのかな?
コード生成しビルドしてデバッグ開始ボタンを押すとシミュレータが開くので、シリアルと波形のウインドウを開く。
まず適当にMISOをセット(ここでは0x55にしてる)。
次にシリアルのフォーマット設定をするんだけど、ここでは何故かボーレートが「KHz」なのだ(これらは自動でデフォルト値が設定されるのが当たり前と思ったら大間違い)。
またここで繰り返しにチェックを入れるが、これは「シミュレータがMISOを繰り返し送出する」の意味なのだ。
ホント分からんよな~
次は波形ウインドウの設定。
赤枠を押すとドロップダウンが開くから見たい波形を選ぶ。
いよいよデバッグ開始。
① 「RL78シミュレータ」になってることを確認し(デバッグメニューまたは①上で右クリックで設定可能)
② CSIの受信完了割込みにブレークをセットし
③ リセットを押し
④ シミュレータ側の「自動送信」を押し ← これを忘れると表示されない
⑤ RUNを押す
そうするとこんな感じで結果が表示される。
でも「MISOを設定しないとシミュレータが動かない」って変じゃね?誰もが全二重で通信するとは限らないわけで、MISOが設定されてないときは黙ってゼロかFFでも出してくれたら良いじゃん。現実にもMOSI送出時にMISOを送出しないデバイスなんていくらでもあるじゃん。
それとコード生成側とシミュレータ側のパラメータの単位が違っていたり、デフォルトでコード生成の値をセットしてなかったりと、あれこれ使い難い部分が多数あり。便利なんだけど困りものなり。
ふ~難しかった。これ、普通分からんだろ?
イベント表示が便利
単純な待ち動作のためにディレーとか作ると思うんだけど、シミュレータを知らない頃は、E1を繋いで画面右下の動作時間表示を見たり、ポートからOUTしてオシロでトリガを描けて計測してた。シミュレータでは波形ウインドウ内の青と緑のカーソルで測ってた。
ところがイベント・ウインドウにはしっかり時間が出てるじゃん。知らなかった~。これでシミュレータもオシロも不要になった。表示単位も選べるしでこれで良いじゃん。便利じゃん。
注意するのは、シミュレータのプロパティでタイマ機能を「はい」に設定すること(このページの「準備」を参照)。
端子への疑似信号の入力
CPUの端子(ピン)に0/1を入力するシミュレーションを行うには以下のようにする。
端子への信号入力の方法
コメント