どうもQです。
趣味ラボSCLで、友人と一緒にとあるプロジェクトをやっているのですが、自分の担当?でR8C/M11A、もしくは R8C/M12Aでシリアル通信するプログラムを書いておりました。
みんな大好き秋月のR8Cマイコン
http://akizukidenshi.com/catalog/g/gI-04524
http://akizukidenshi.com/catalog/g/gI-04525
安いし機能も少ないマイコンだから簡単だろヒャッハーwwwとか思ってたらハマったハマった…。で、ネットで色々検索かけてもあんまり情報が出てこないので、折角なんでメモ代わりに書いときます。
①書込み回路
ハードウェアマニュアルの付録に書いてある書込み回路ですが、回路図上のTXD0、RXD0は「マイコン側の」ピンを表しています。つまりPCにとっては逆。
②書込みソフト
R8CメーカのルネサスからFDTという書込みツールが出てますが、M11A,M12Aともになんかうまく認識してくれません。接続はできるんだけど、なぜかその後止まります…。一回なんかうまくいったと思ったら、ベリファイに失敗ししかも変なID書いたみたいで書込みすらできなくなりました…
同じくルネサスから出ているFlashStarterというソフトだと大丈夫です。
③機能モジュールの電力設定
最大のハマり点。これ、ハードウェアマニュアルかなんかでもっと大きく注意書きすべきだと思うのですが、まっさらなICを買うと、出荷時点で内部のフラッシュメモリにあるレジスタ、OFS2が0xFFになっています。フラッシュなので、一度意図的にプログラムでこいつを0x00に書き換えてあげないと、いつまでも0xFFのままになります。
これ自体は対処する必要はないのですが、上記の通りになっているとマイコン起動後にモジュールスタンバイ制御用のレジスタMSTCRが0xFFになります。この場合、シリアルやタイマ用の内部モジュールが全てスタンバイ状態になってしまい、各モジュール関連レジスタへの書込みが一切受け付けられません。結果、LEDチカチカみたいなのは動くけど、その他機能が何故か動かないということに。
対処法は、このMSTCRは普通に書き込めるレジスタなので、各機能の初期化の前に関連するビットを0にしてきましょう。いつまでもシリアル送信、受信ができず、ちょーーーハマりました…
多分巷に出回ってるM11A,M12A関係のマイコン情報は、上記OFS2が最初から0xFFじゃないんじゃないかなと思います(それらしいことはハードウェアマニュアルに書いてありました)。他サイトで公開されてるプログラムが何故か動いてるのはそういうことなんでないかと。
④割り込みレベル
各機能の割り込みには優先レベルがあります。初期状態では全ての機能の割り込み優先レベルが0になってて、割り込み禁止状態なので1とか2にしてあげましょう。忘れると、割り込み条件が満たしても、いつまでも割り込みが発生しません。
まあともかくこれで必要なことはできるようになりますた・・・マジでちかれた。
間違いとか、これでもいけるよーとかあったらおしえてくだちい。
2013年8月16日金曜日
2010年1月6日水曜日
つまり、それはメモということかね?
どうも、トランジスタなんて言っトランジスタ等と下らないことを宣い始めたQです、こんちには。
ここでモスモス?大丈夫ですか?等と言ってくれると嬉しい。
新年早々こんなんでいいのか僕は・・・。
さて、年末年始はR8とかと格闘しておりました。
1.R8C15とR8C29
昔、sunhayatoから出ていた今は亡きR8C15のDIP。これが無くなったのはかなり痛いのだが仕方がない。
さて、これの上位互換品としてR8C29というのが秋月で売ってます。ピン配置もベーシックなものに関しては殆ど同じなので書き込み器等を使い回すことができます。
この秋月で売ってるR8C29なのですがSSOPなので普通のユニバーサル基盤で使いまわすためにはDIP変換ボードが必要です。
SSOP→DIP変換は同じく秋月で売っているのですが、なんと微妙に足がパッドに届きません(笑)半田でなんとかくっつけられないこともないのですが…。というわけで僕は慎重にICの足をピンセットで伸ばしてくっつけました。若干不安ですが、これでなんとかなりそうです。
2.割り込みにvector番号
HEWでR8Cプログラムを頑張っていたのですが、どうも割り込み番号を指定する必要がある用です。例えばUARTの割り込み番号は18なのですが、
#pragma interrupt uart-interrupt (vector=18)
と言う風にしてあげないといけないっぽい。
昔はいらなかったんだけど、どこの設定が変わったんだろう。
3.R8C系コンパイラ(M16系)では\nの意味が違う。
H8系、SH系コンパイラは\nはCRですが、R8C系のコンパイラは\nがLFになってます。デリミタに改行を使ってたらはまった。要注意。
4.上に関連してteratermについて
受信の改行設定にCR,LF,CR+LFがあるが、調べてみても違いがいまいちよく分からない。要するにこういうことっぽい。
CR→送られてきたCRはCR、LFはLFとしてそのまま認識する。余計なことは一切しない。
LF→CRはCRとして認識する。LFが送られてきたときにLFをCR+LFに変換する。
CR+LF→CRをCR+LFに変換する。LFはLFのまま。
参考まで。
5.R8C15と29のシリアルに関するレジスタ
ucon→u0c1に集約
picより
R8C
使いたい
ここでモスモス?大丈夫ですか?等と言ってくれると嬉しい。
新年早々こんなんでいいのか僕は・・・。
さて、年末年始はR8とかと格闘しておりました。
1.R8C15とR8C29
昔、sunhayatoから出ていた今は亡きR8C15のDIP。これが無くなったのはかなり痛いのだが仕方がない。
さて、これの上位互換品としてR8C29というのが秋月で売ってます。ピン配置もベーシックなものに関しては殆ど同じなので書き込み器等を使い回すことができます。
この秋月で売ってるR8C29なのですがSSOPなので普通のユニバーサル基盤で使いまわすためにはDIP変換ボードが必要です。
SSOP→DIP変換は同じく秋月で売っているのですが、なんと微妙に足がパッドに届きません(笑)半田でなんとかくっつけられないこともないのですが…。というわけで僕は慎重にICの足をピンセットで伸ばしてくっつけました。若干不安ですが、これでなんとかなりそうです。
2.割り込みにvector番号
HEWでR8Cプログラムを頑張っていたのですが、どうも割り込み番号を指定する必要がある用です。例えばUARTの割り込み番号は18なのですが、
#pragma interrupt uart-interrupt (vector=18)
と言う風にしてあげないといけないっぽい。
昔はいらなかったんだけど、どこの設定が変わったんだろう。
3.R8C系コンパイラ(M16系)では\nの意味が違う。
H8系、SH系コンパイラは\nはCRですが、R8C系のコンパイラは\nがLFになってます。デリミタに改行を使ってたらはまった。要注意。
4.上に関連してteratermについて
受信の改行設定にCR,LF,CR+LFがあるが、調べてみても違いがいまいちよく分からない。要するにこういうことっぽい。
CR→送られてきたCRはCR、LFはLFとしてそのまま認識する。余計なことは一切しない。
LF→CRはCRとして認識する。LFが送られてきたときにLFをCR+LFに変換する。
CR+LF→CRをCR+LFに変換する。LFはLFのまま。
参考まで。
5.R8C15と29のシリアルに関するレジスタ
ucon→u0c1に集約
picより
R8C
使いたい
登録:
投稿 (Atom)