RX仕事で最近RXマイコンを触っていますが、今回はRX220を使う機会があり、RX220用に書いたソフトを実機が無いので、RX62Nを使って動作確認していました。
さて、RX220 を触ってみた印象ですが、
「ペリフェラルを動かす際に、触らないといけないレジスタが多い!」
というのが今回触ってみた印象です。
RXシリーズでは、起動後は周辺モジュールへクロック供給が停止されているので
モジュールストップを解除する必要があります。
例えばコンペアマッチタイマを使う際は、
MSTP(CMT0) = 0; // CMT0 モジュールストップ解除
以下、省略...
というようなコードが必要です。
RX62N等では上記のコードでモジュールストップは解除され、必要な設定をすればタイマが動作します。
レジスタライトプロテクションに注意!
RX220は、レジスタライトプロテクション機能により
モジュールストップ関連のレジスタへの書き込みはプロテクトされています。
なのでモジュールストップを解除する際には、先にプロテクトを解除する必要があります。
従ってソースコードは以下のようになります。
SYSTEM.PRCR.WORD = 0xA502; // PRC1 書き込み 許可
MSTP(CMT0) = 0; // CMT0 モジュールストップ解除SYSTEM.PRCR.WORD = 0xA500; // PRC1 書き込み 禁止
以下、省略...
私は、実際にタイマがうまく動かなくてはまりました。
デバッガを使ってCMT0のレジスタに書き込みをしても書き込めなかったので原因に気づきました。
いつも思うのですが、この手の問題はマニュアルをきちんと見ればわかることなので
自分が悪いといえば悪いのですが、ちょっと不親切だなと思います。
一言、注意事項として、
「モジュールストップを解除する際にはPRCRレジスタを書き込み許可に設定してください」
と書いといてくれればいいのにと思います。
※まぁ愚痴でしかないですが、この手の問題って初心者の人とかだとなかなか解決できずにすごく時間をとられてしまうんじゃないかと思います。
同じルネサスでもCPUのシリーズによって結構書き方も違っていたりするのは読み手としては苦労します。