PIC24FのI/Oピン割り付け


【I/Oピン割り付けとは?】

 PIC24Fファミリは28ピンから100ピンの数種類のデバイス種類がありますが、すべて同じ
周辺モジュール構成となっています。したがって少ピンのデバイスでは、複数の内蔵モジュール
の入出力ピン割り当てが多重化してしまい使い難くなってしまいます。
 そこで、ユーザーが使用する内蔵モジュールごとに、使用するピンを自由に割り当てられる
ようにしました。これで、ピンが重なって内蔵モジュールが使えないという問題が解消されます。

 ピン割り付けが可能なピンは、RPnというピン名称となっているピンが対象となります。
(RP:Remappable Peripheral、nはピン番号)

例えばPIC24F64GJ002の場合には下図のようなピン配置となっています。このピン番号の中で
太字で表示されているRPnば割り付け可能なピンとなります。



 内蔵モジュールの中でピン割り付け可能なモジュールは、アナログ入力、I2C、RTCC出力、
状態変化割り込み入力以外のデジタルのみの周辺モジュールです。

【入力ピンの割り付け方】

 ピン割り付けは入力用と出力用とに、割り付けを指定するSFRレジスタが用意されていて、
レジスタ設定でピン割り付けを行います。
 このピン割り付けを指定するとこの設定が最優先され、その他のピン機能は無効となります。

 内蔵モジュールへの入力をI/Oピンに割付けるため、「RPINRx」というSFRレジスタが用意され、
その中の5ビットごとに1つのモジュールが割り付けられています。
その5ビットにRPnピンの番号nを設定すれば、対応するモジュールの入力ピンをRPnピンに
割り付けたことになります。
 このRPINRxレジスタの配置例を下図に示します。図の例はRPINR3の場合の例ですが、
上位バイトがタイマ3の外部クロック入力ピンのピン指定用のT3CKR<4:0>という5ビットの
データとなっており、下位バイトが、タイマ2の外部クロック入力ピンのピン指定用のT2CKR<4:0>
という5ビットのデータとなっています。
この5ビットにRPnの番号nを指定することで入力ピンがRPnピンに割り付けられます。





 内蔵モジュールごとに対応するRPINRxレジスタを下表に示します。




C30コンパイラでこのピン割り付けを定義する記述方法は下記のようにします。

/// Pin Assign Input
RPINR3bits.T3CKR = 7;     // Timer3 Ext input to RP7 pin
RPINR7bits.IC1R = 5;      // IC1 Input to RP5 pin




【出力ピンの割り付け】

 モジュールの出力をRPnピンに割り付けるときは、RPORxというレジスタが用意されており、
その中の5ビットずつにそれぞれのRPnピンが割り付けられていますので、その5ビットに
割り付ける周辺モジュールの出力機能番号を設定すれば、そのRPnピンが指定したモジュール
の出力ピンに設定されたことになります。

 RPORxレジスタの配置例を下図に示します。図の例はRPOR0レジスタの場合で、上位バイトに
RP1ピン用の出力モジュール割り付け用のRP1R<4:0>ビットがあり、下位バイトにはRP0ピン用の
出力モジュール割り付け用のRP0R<4:0>の5ビットが配置されています。



 PIC24FファミリのRPORxレジスタとRPnピンの配置は下表のようになっています。




またこの5ビットに記述する内蔵モジュールの出力機能番号は下表のように決められています。





C30での記述の仕方は下記のようになります。

/// Pin Assign Output
RPOR4bits.RP8R = 18;    // OC1 out to RP8 pin
RPOR3bits.RP6R = 19;    // OC2 out to RP6 pin




   目次ページへ