2012年7月21日土曜日

Smart Analog Stick でシリアル送信

 Smart Analog Stick をいじり始めて、E1エミュレータ + CubeSuite+ の組み合わせで変数のリアルタイムモニタ(おそらく実際には一瞬止めて値を拾って、また動かすっていうのを自動でやってくれるんだと思う)が可能なので、それで動かしながらのAD値を参照等ができるというのがわかったんですが、やっぱり、シリアル通信で色々と値とかデバッグ情報とか出力したいわけで・・・。なので、今回はSmart Analog Stick というかRL78マイコンのUART送信(受信よりも送信のが簡単なので、まず、送信から)を試すことにしました。H8とかSHのSCIでのシリアル通信は過去に何度も、まあ、数度目以降はコピペで何も考えなくなってしまうんですが・・・、使っているので、同じルネサスマイコンだから簡単だろうと思っていたら、半日ハマってしまいました。
 H8/SHのSCIとは(シリアル通信、UARTっていう部分は何も変わらないわけですが)、RL78のSAU(シリアル・アレイ・ユニット)はだいぶ構成が違っていて、ハードウェアマニュアルと格闘する事になりました。ここ最近Arduinoの便利さに浸っていたので、各レジスタの説明をマニュアルで調べてビットをセットしていくのはしんどかったです。まあ、好きでやっているんですが。で、途中までやっていて、(今回はe2studioでプログラムを作っていましたが)CubeSuite+のピンコンフィグのコード生成機能使えばいいじゃん・・・っていうことに気がついて、RL78/G1A用のプロジェクトを作成(Smart Analog はRL78/G1Eですが、CubeSuite+が対応していないみたい?自動コード生成が使えません)して、SAUのUART0を使うようにGUIで設定してコードを生成してコンパイルして実行したら、あっさり動いちゃった。当然といえば当然ですが。
 さっきまでの苦労はなんだったの・・・。せっかくなので、CubeSuite+が吐いたシリアル用のヘッダファイルの一部をコピペ(レジスタのビット設定に便利な定数が定義されている)してe2studio側で作成途中のプロジェクトで一部流用させてもらって、引き続きハードウェアマニュアルを見ながら独自iodefine.hをちまちま作って、なんとかUART送信させるところまで持って来ました。


 ソースを載せようと思ったけど、CubeSuite+の生成したものをコピペした部分があるから、どうなんだろう。
 ちなみに、本当はSmart Analog Stick のUSBにシリアル出力したかったんですが、USBコントローラに MAX3420E というSPIで接続するタイプのものが載っていて、どう扱っていいのかわからなかったんで、諦めました。MAX3420E に接続されているピン39と40をジャンパー線で引っ張りだして、ロジアナで動作を確認しました。 MAX3420E じゃなくて、FT232 とかだったらUARTでそのままUSBでパソコンに繋げられるんじゃないかと思うんですが。


 追って受信動作も実現できたら、秋月のUSBシリアル変換 をつないで、PCでシリアル経由でモニタできるようにしようと思っています。(元々ついてるUSBはなんなんだって話はあるけど。ルネサスが使い方資料とかサンプル出してくれないと、正直使い方わからん。MAX3420E の資料は充実しているんだけど、RL78/G1E側のSPIがよくわからないです。Smart Analog部を制御するSPIとは別みたい?SAUの三線通信?)