SNSへはこちら

RAマイコンを試食(7) - ピン設定

チョイ記事ですが、ピン設定の方法を少し。
GPIO の設定は簡単なので述べませんが、ペリフェラル用端子として設定する方法を記述したいと思います。

原則、RX マイコンと同じ設定方法になります。

PWM 端子の例

GPT という PWM タイマーを設定する際の例をご紹介しましょう。

PMISC.PWPR.BIT.B0WI = 0;
PMISC.PWPR.BIT.PFSWE = 1;
PFS.P400PFS.BIT.PSEL = 0b11; // P400(#1): GTIOC1A_A
PFS.P400PFS.BIT.PMR = 1; // Peripheral Function Enabled
PMISC.PWPR.BIT.PFSWE = 0;
PMISC.PWPR.BIT.B0WI = 1;

またしてもレジスタライトプロテクションの登場です。これ RX マイコンでハマりどころとして有名ですよね。本マイコンでも顕在です。

一応それぞれの設定内容を以下に記しておきます。
まず、ピン機能(Pin Function)を設定するには PFS のレジスタをいじる必要があります。しかしこれはデフォルトでロックされていて、PWPR レジスタの PFSWE ビットを1にする必要があります。更にこの PFSWE ビットも保護されていて、B0WI ビットを0にする必要があるのです。つまり二重ロック。

このあと PSEL を適切に設定します。そして地味にハマったのですが、その PSEL を有効にするために PMR ビットを立てる必要がありました。これも RX と同じ。ってか自分学ばないので、RX のときも RA のときもここにハマったんだよなあ、まったく。

最後に、念の為保護用のビットを全て戻しています。多分戻さなくても行ける。

ADC16(アナログ端子)の例

お次は ADC として使うアナログ端子設定です。

PMISC.PWPR.BIT.B0WI = 0;
PMISC.PWPR.BIT.PFSWE = 1;
PFS.P500PFS.BIT.ASEL = 1; // P500(#25): AN000
PFS.P500PFS.BIT.PDR = 0;
PFS.P500PFS.BIT.PMR = 0;
PMISC.PWPR.BIT.PFSWE = 0;
PMISC.PWPR.BIT.B0WI = 1;

こんな感じに、ASEL を1にするとアナログモード設定ができます。アナログモードにするためには PDR を1にする必要があります。ちなみにこれは PCNTRx レジスタの PDR をいじるのと同じです。最後に PMR を0にして(デフォルトで0です)、設定完了!