RasPi Pico SDKの sm_config_set_in_pins()
sm_config_set_in_pins()には存在意義が無い
RasPi Pico SDK 2.0.0のPIO APIのうち、out命令に関するピン構成のAPIだけ抜き出すと次のようになっている(static inlineを削ってプロトタイプの形にしている)。ここでsm_config_set_out_pins()はsm_config_set_out_pin_base()とsm_config_set_out_pin_count()を呼び出しているだけである。
void sm_config_set_out_pin_base(pio_sm_config *c, uint out_base);
void sm_config_set_out_pin_count(pio_sm_config *c, uint out_count);
void sm_config_set_out_pins(pio_sm_config *c, uint out_base, uint out_count);
同様にset命令に関するピン構成のAPIだけ抜き出すと次のようになっている。ここでsm_config_set_set_pins()はsm_config_set_set_pin_base()とsm_config_set_set_pin_count()を呼び出しているだけである。
void sm_config_set_set_pin_base(pio_sm_config *c, uint set_base);
void sm_config_set_set_pin_count(pio_sm_config *c, uint set_count);
void sm_config_set_set_pins(pio_sm_config *c, uint set_base, uint set_count);
さらににin命令に関するピン構成のAPIだけ抜き出すと次のようになっている。ここでsm_config_set_in_pins()はsm_config_set_set_pin_base()を呼び出しているだけである。
void sm_config_set_in_pin_base(pio_sm_config *c, uint in_base) ;
void sm_config_set_in_pin_count(pio_sm_config *c, uint in_count);
void sm_config_set_in_pins(pio_sm_config *c, uint in_base);
おかしいよねぇ!
in命令のAPIだけsm_config_set_XX_pins() APIに存在価値が無い。ちなみにソースコード上の位置もこのAPIだけ変なので、たぶんコピペミス。
Issueを書いた。
現在の実装で正しいとのこと
背景にはRP2040のPIO実装がある。RP2040にはPIOのOUTピンの数を指定するSMx_PINCTR.OUT_COUNTフィールドがあるが、INピンの数を指定するIN_COUNTフィールドが無い。
なので、そもそも sm_config_in_pin_count()もなかった(か、何もしていなかった)模様。そういうわけで、sm_config_in_pins()はsm_config_in_pin_base()を呼ぶだけだった。
RP2350になってPIOにSMx_SHIFTCTRL.IN_COUNTフィールドが実装された。それに従いsm_config_in_pin_count()が実装されたが、sm_config_in_pins()は互換性のためにそのまま留め置かれているとのこと。
C++ならデフォルト値付きの引数を追加して解決できるが、仕方ない。