読者です 読者をやめる 読者になる 読者になる

mcommit's message

大阪でソフトウェア開発の仕事をしている simotinこと宮崎といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

RX62N UART通信

最近仕事で、RXマイコンを触っています。
今回のお仕事では、RX220を使うのですが、基板が出来上がるのがだいぶ先なのでInterface2011年5月号についていたRX62Nの基板で事前に動作確認をすることになりました。

Interface (インターフェース) 2011年 05月号 [雑誌]

Interface (インターフェース) 2011年 05月号 [雑誌]

Interfaceの基板は買ってからとりあえず半田付けまではやっていたのですが特に遊ぶことなくほったらかしになっていた基板です。
f:id:simotin13:20150917140951j:plain

ソフトは自体はUART(調歩同期式)により別のICと通信するという簡単なものです。

動作確認の手順ですが、
1.RX220用コードをRX62N用に移植
 クロック関係の設定値は、レジスタの有無に合わせて修正します。

2.RX62N基板とパソコン間で通信をさせてUARTの動作確認を行う。
 実際にUARTで通信するICは当然手元にないのでパソコンと通信させて動作を確認します。
 RX-PC間は秋月で買ったUART-USB変換ケーブルを使いました。
 ※変換基板とかも売ってますけど、これはケーブルで気軽につなげられてすごく便利ですね!

さて、1).の移植のコーディングを終えて早速基板にUSBをつなぎデバッグを始めます。
今回はお客様にE1 エミュレータを貸して頂けたので楽しくデバッグができます!

お目当てのPCとの通信ですが、

RX→PC

のデータ送信はうまくできたのですが、

RX←PC

のデータ受信がうまく動きませんでした。試しにTxとRxをループバックさせてもだめ!

おかしいなと思いつつSCI関係のレジスタの設定とかをいろいろ確認してみたのですがどう見ても正しいようです。

こんなときははず問題の切り分けだ!
※1年以上ほったらかしにしていた基板だし、半田付けには自信がないのでハードレベルで動かない可能性は十分ある。

ということでソフトが悪いのかハードが悪いのか原因を切り分けるために、
Peripheral Driver Generator(PDG)を使って、「正しく動くはず」のソフトを作ってみました。

PDGは文字通りRXマイコンが持つ周辺機能のドライバ層の関数を生成するコードジェネレータです。
PDGを使って生成したコードをHEWのプロジェクトで取り込んで使います。

そんな便利なPDGですが、1点だけ私には気に入らない点がありました。
それは、ドライバ関数の内部処理はライブラリ化されているという点です。
まぁやっていることは結局のところレジスタの読み書きにつきると思いますがやはりコードが見れないのは残念です。※逆アセ見ろよ!と突っ込まないでくださいね。。。

さて、話は飛びましたがPDGで生成したコードでパソコンと通信させるとなんと、送信も受信もできているではありませんか。

ということでうまく動かない原因はソフト、つまりはプログラマである私のせいでした。
SCIのレジスタ正しそうだということで、今度はIOポートに関するレジスタで設定漏れがないかもう一度RX62Nのハードウェアマニュアルを読み直していくとなんと重要な情報が書いてあるではありませんか!

17.2.2.4 入力バッファコントロールレジスタ(ICR)

以下、RX62Nハードウェアマニュアルより引用

ICRレジスタは、ポートの入力バッファを制御するレジスタです。
PORTn.ICRレジスタ(n=0〜9、A〜E)の各ビットは、それぞれポートnの端子1本ずつに対応してお
り、1ビット単位で指定できます。
周辺モジュールの入力端子として使用する場合は、あらかじめ、対応する端子の入力バッファを有効にす
るためにPORTn.ICRを“1”にする必要があります。PORTn.ICRを“0”にした状態のまま周辺モジュールの入
力端子として使用した場合は、周辺モジュールへの入力信号はHighに固定されます。

これだ!ということで早速SCIのRxdで使用するポートの入力バッファを有効にしたところ無事パソコン側からのデータを受信できました。

やれやれ。

同じRXマイコンでも、RX220とRX62Nではレジスタが結構違っているんですね。上記のICRレジスタもRX220にはないレジスタです。
それに、SCI(UART)に関するレジスタでもRX220では無駄に!?いろんなレジスタがありました。

同じRXなんだし、もうちょっと統一感があってもと思いましたがそもそも製品としての思想や提供する機能が違うのでこの辺はしょうがないんですかね。

というわけで、同じくRX62Nのシリアル通信でハマっていらっしゃる方がいらっしゃったらご参考にしてください。

ちなみにRXを真面目に触るのは、初めてだったのですがInterfaceの記事は結構参考になりました。

あとRXマイコンのすべて(基礎編)を買いました。CPUのレジスタとか例外、割り込み周りについてはこういう本が手元にあると安心ですね。
この本ではプログラミングに関してだけでなくRXのアーキティクチャについても序盤の章で書かれていてハード的にも勉強になりました。
※経験豊富な開発者の方はハードウェアマニュアルとソフトウェアマニュアルがあればなんとでもなると思いますが。

RXが付録についた2011年5月号はまだ書店でもちらほらあるみたいです。大阪では梅田のジュンク堂のIntarfaceのバックナンバーのコーナーに残っていました。あとは、特集記事をまとめて書籍化したものもあるみたいです。(ついている基板は同じ)

動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)

動かしながら学ぶRXマイコン活用法 (Tech Iシリーズ)


値段はこちらの方が少し高いですが、複数号の記事がまとめられているので、新規に買う人はこちらの方がお得かもしれません。

ピンヘッダやUSBのコネクタは別途購入して半田付けが必要ですが、USBでデバッグできるモニタソフトがInterfaceの特集ページに用意されています。

ダウンロード|Interface編集部ブログ

今回私はE1をつないでデバッグしましたが、半田付けが苦手な人やとりあえず手っ取り早く試したい人でも動かすことは可能です。