最終的にはRXマイコン全サポートしたい!
かなり昔、RX63N が出た時期、176ピン版を購入した。(今は販売していない)
その時、変換基板も同時に購入して、実験基板を作ろうとしていたが、ピンの配置間隔がハーフピッチずれたバグ基板を掴まされ、作る気力が萎えてしまった・・
※ハーフピッチずれている為、ユニバーサル基板に乗せる事が出来ない。
そうこうしているうちに RX64M が出て、それを購入、品質の高い変換基板も購入、実験基板を制作して動かすまでになった。
そんなこんなで、RX631/RX63N はサポートをしていなかった。
デバイスは持っているので、実験しないと肥やしになるだけだし、ペリフェラル定義も、共通部分が多い事から RX220 サポートの勢いで進めていた。
必要最低限のピンを接続して、とりあえず動作する状態にしたい。
RXマイコンも、未だ購入が出来ない状態が続いているので、シリーズを増やすにしても、何とも歯がゆい状態が続いている。
GR-CITRUS を買う
基板を作る準備をしていたが、面倒になり、停滞していた。
そんな時、秋月のRXマイコン関係で、GR-CITRUS が1500円(通常2200円)の処分価格で売られている事を発見し、他の部品と共に注文した。
※使っていないピンを出していないとか、かなり不満の残るボードだが、1500円ならまーいいかと思って購入。
GR-CITRUS は、標準では USB 接続でフラッシュを書き換えるようになっている。
※MD端子は出ているが、2.54mm ピッチでは無い、狭いフットプリントになっているのが駄目・・(何で?)
RX631/RX63N は、フラッシュプログラム「rxprog」もサポートしたいので、外部にSCI1、MD 端子などを出してシリアルブート出来るように改造した。
RX631/RX63N は RX63T に近いプログラミングフォーマットとなっており、簡単に実装出来た。
マイクロマウスでRX631を使っている人が、rxprog を改造して使っているようだが、最新バージョンではコンパイルするだけで利用出来ると思う。
プログラムの書き込みは何の問題もなく出来た。
GR-CITRUS でシリアル書き込みを行う場合、P30(RXD1)、P26(TXD1) を配線する必要がある。
又、PC7 を抵抗でプルダウンする必要がある。
P26 は J5 によって、P05/DA1 ピンと共有するのだが、そうすると P05 を使えなくなる。
なので、J5 の P26 側にだけ配線を行い、外部に出す。
折角 100 ピンの RX631 を実装しているのに、多くのピンが未接続だし、ピンを共有していたり(何かの互換の為?)、ハッキリ言って糞ボードだと思う。
以上の点を許容できる人のみ購入を検討してみるのが賢明と思う。
クロックのブーストでハマる
RX631/RX63N は RX63T に近いクロック機能なので、RX63T のコードをコピーして少し手直しした。
とりあえず、LED 点滅「FIRST_sample」を書き込んだが、点滅しない・・・
調べると、クロック速度が遅い状態で、先に進まないようだ。
RX63T では動いていたから、何か違いがあるのか、色々調べたり、クロック関係のレジスタに直で値を入れたり、色々やったが全く駄目・・・
高速内部発振器「HOCO」では、ちゃんと動作しているようで、何で???と、数時間悩んだ・・・
そして、ようやく謎が解けたー
システムクロックコントロールレジスタ(SCKCR)の予約ビットに「0b0001」を書き込む必要があり、それが「0b0000」だと、ICLK が正しい周波数にならない・・
読み出すと「0b0000」なので、何も対策しないとハマる・・・
device::SYSTEM::SCKCR = device::SYSTEM::SCKCR.FCK.b(clock_div_(clock_profile::FCLK))
| device::SYSTEM::SCKCR.ICK.b(clock_div_(clock_profile::ICLK))
| device::SYSTEM::SCKCR.BCK.b(clock_div_(clock_profile::BCLK))
| device::SYSTEM::SCKCR.PCKA.b(clock_div_(clock_profile::PCLKA))
| device::SYSTEM::SCKCR.PCKB.b(clock_div_(clock_profile::PCLKB))
| 0b0001'0001;
この修正を加えたら、システムクロックがブーストするようになった。
RX631 のソフトディレイを調整した。
現在のフレームワーク状態
現在、ペリフェラルの実装、動作確認、は以下のようになっている。
シリーズ | コア | FPU | DFPU | 動作確認 | ペリフェラルクラス | rx_prog サポート | リンカーファイル |
---|---|---|---|---|---|---|---|
RX220 | RXv1 | No | - | 〇 | 〇 | 〇 | R5F52206 |
RX631/RX63N | RXv1 | Yes | - | 〇 | 〇 | 〇 | R5F5631F/NE |
RX63T | RXv1 | Yes | - | 〇 | 〇 | 〇 | R5F563T6 |
RX621/RX62N | RXv1 | Yes | - | 〇 | 〇 | 〇 | R5F562N7/8 |
RX24T | RXv2 | Yes | - | 〇 | 〇 | 〇 | R5F524T8/A |
RX64M | RXv2 | Yes | - | 〇 | 〇 | 〇 | R5F564MF/G/J/L |
RX71M | RXv2 | Yes | - | 〇 | 〇 | 〇 | R5F571MF/G/J/L |
RX651/RX65N | RXv2 | Yes | - | 〇 | 〇 | 〇 | R5F565NE |
RX66T | RXv3 | Yes | - | 〇 | 〇 | 〇 | R5F566TA/E/F/K |
RX72T | RXv3 | Yes | - | 〇 | 〇 | 〇 | R5F572TF/K |
RX72N | RXv3 | Yes | Yes | 〇 | 〇 | 〇 | R5F572ND/N |
RX72M | RXv3 | Yes | Yes | - | △ | △ | R5F572MD/N |
RX631/RX63N は、RX63T にフラッシュプログラムは近いので、rx_prog もサポートした。
まとめ
とりあえず、FIRST_sample、SCI_sample、RAYTRACER_sample などで動作確認を行った。
SCI_sample:
Start SCI (UART) sample for 'RX631 GR-CITRUS' 96[MHz]
SCI PCLK: 48000000 [Hz]
SCI Baud rate (set): 115200 [BPS]
Baud rate (real): 115384 (0.16 [%])
SEMR_BRME: false
SEMR_BGDM: false
CMT Timer (set): 100 [Hz]
Timer (real): 100 [Hz] (0.00 [%])
#
RAYTRACER_sample:
RX631 GR-CITRUS Start for Ray Trace: 320, 240
# Render time: 1886ms (1)
CALC_sample:(関数電卓サンプル)
# Rad
# tan(355/226)
-7497258.185325587112905071831891248663417267943785263161571
CAN_sample:
- コンパイルのみ、動作確認はしていない。
I2C_sample:
- コンパイルのみ、動作確認はしていない。
PSG_sample:
- DA1 出力をアンプに接続して、動作確認。
「rxprog」は、RX631/RX63N を追加して、プログレス表示で、%の表示を追加した。
GR-CITRUS は、メモリもそれなりに多く、今後、他プロジェクトでも、RX631 を追加して、動作確認をおこなっていく。
惜しいのは、使っていないピンをランドに出していない点、そして、一部のポート同士を接続してある点、これが無ければ、色々応用が出来るのだが・・
現状のコードは、Github にコミットしてあり、マスターブランチにマージ済。