13. 寄り道: I/Oポート制御関数のまとめ

harmony を使うか使わないかで I/Oポート制御関数の記述がいろいろ変わって混乱するため、 現時点での harmony での I/Oポート制御関数の記述方法を少しまとめてみました。
関数の種類がかなり多いのですが、ここではビット単位の関数だけをまとめてみます。
詳細は、help_harmony_v1_02_00.pdf の P.3275 あたりから解説があります。



・アナログ/デジタル兼用ピンのモード設定

  AN0ピンを、アナログピンにする
  PLIB_PORTS_PinModeSelect(PORTS_ID_0, PORTS_ANALOG_PIN_0, PORTS_PIN_MODE_ANALOG);

  AN0ピンを、デジタルピンにする
  PLIB_PORTS_PinModeSelect(PORTS_ID_0, PORTS_ANALOG_PIN_0, PORTS_PIN_MODE_DIGITAL);

・ピンの入出力設定

  RC4を入力ピンにする
  PLIB_PORTS_PinDirectionInputSet(PORTS_ID_0, PORT_CHANNEL_C, PORTS_BIT_POS_4);

  RC4を出力ピンにする
  PLIB_PORTS_PinDirectionOutputSet(PORTS_ID_0, PORT_CHANNEL_C, PORTS_BIT_POS_4);

・ピンをクリア/セット

  RC4をクリア
  PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_C, PORTS_BIT_POS_4);

  RC4をセット
  PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_C, PORTS_BIT_POS_4);

  RC4をトグル(クリアとセットを交互)
  PLIB_PORTS_PinToggle(PORTS_ID_0, PORT_CHANNEL_C, PORTS_BIT_POS_4);

・ピンのリード

  RC4をリード
  bool bitStatus = PLIB_PORTS_PinGet(PORTS_ID_0, PORT_CHANNEL_C,PORTS_BIT_POS_4);



PIC32 USB Starter Kit III でのLED制御の例。

※ harmony でプロジェクトを作成し、ポートの初期設定ルーチンは自動で組み込まれているという前提。
  ポート初期設定の記述については、自動で生成されたファイル sys_ports_static.c の記述を参照。
・LED1を点灯(RD0をセット)

	PLIB_PORTS_PinSet(PORTS_ID_0, PORT_CHANNEL_D, PORTS_BIT_POS_0 );	// SET PORT D bit0

・LED2を消灯(RD1をクリア)

	PLIB_PORTS_PinClear(PORTS_ID_0, PORT_CHANNEL_D, PORTS_BIT_POS_1);	// CLR PORT D bit1

・スイッチ1のON/OFFで、LED1を点灯/消灯させる。(注意:スイッチの極性は反転)

	int	sw_data ;

	sw_data = PLIB_PORTS_PinGet( PORTS_ID_0, PORT_CHANNEL_D,PORTS_BIT_POS_6 );	// GET RD6 : SW-1 INVERTED
	if ( sw_data == 0 )
		PLIB_PORTS_PinSet( PORTS_ID_0, PORT_CHANNEL_D, PORTS_BIT_POS_0 );	// SET RD0
	else
		PLIB_PORTS_PinClear( PORTS_ID_0, PORT_CHANNEL_D, PORTS_BIT_POS_0 );	// CLR RD0


ところで、PORTS_ID_0 というのは何なんでしょう? 必要の無いパラメータのような気もするのですが、何か意味があるのでしょうか?
未だに謎のままなのですが、とりあえずおまじないと思うことに。(^^;)