以前に紹介したRB5ポート注意点に続いて、RB14ポートについても同じような設定ミスによって意図した動作をしないという現象に遭遇したため、紹介したいと思います。
今回はRB14をSPIマスタのSCKに設定しました。CSやデータは出力されているものの、RB14ポートからクロック信号が出ないという現象に遭遇しました。また、USB初期化関数内のPLIB_USB_Enableを実行する前はクロックが出るものの、当該関数の実行後はクロックが出なくなることからUSB関連の設定に問題があることが分かりました。
RB14ポートのUSB関連設定を確認すると案の定、RB14にVBUSONポートの機能があることが分かりました。VBUS関連の設定を調べるとDeviceConfig3のVBUSONが有効(ON)となっていることが分かりました。VBUS機能は使用していないため、OFFにするとUSB初期化関数内のPLIB_USB_Enable実行後でもSPIのクロックが出るようになりました。USBの初期化によってSPIのクロック出力設定がVBUSに上書きされていたようです。
RB14をSPIとして機能割り当てしているにも関わらず、DeviceConfig3のVBUSON設定が残っていたため、うまく動かなかったようです。以前も自らに忠告しておきながら、また、USB関連の設定を見落としてデバッグに時間を要してしまいました。特にUSBやJTAG系の設定はGPIO設定とは設定項目が異なるため、見落としがちなので注意が必要です。Harmony ConfiguratorはGUI上で簡単に設定できるものの、各設定の矛盾まではチェックしてくれないのでこのような不具合が発生する可能性があります。