チョイ記事ですが、ピン設定の方法を少し。
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です)、設定完了!