Setting Functions
Pico SDK provides a function gpio_set_function() to set the function of a GPIO pin. For example, to set GPIO pin 15 as SPI1 TX, you can use the following code:
OK, this seems straightforward. But, how do you know whether the SPI is SPI0 or SPI1 and what function of SPI it is? You may add a comment to clarify like follows:
To add this comment, you need to carefully check the Pico SDK documentation to find out that GPIO pin 15 is SPI1 TX. This can be a bit cumbersome, especially if you have many GPIO pins to set.
Using pico-jxglib, you can write this as follows:
GPIO15 is an instance of the GPIO15_T class, which has a member function named set_function_SPI1_TX() that sets GPIO pin 15 as SPI, specifically SPI1 TX.
Thanks to the code completion feature of your text editor, including VSCode, you can easily find available pin functions after typing GPIO15.set_function_. This makes it much easier to set the function of GPIO pins without needing to refer to the documentation.
GPIO0.set_function_SPI0_RX();
GPIO0.set_function_UART0_TX();
GPIO0.set_function_I2C0_SDA();
GPIO0.set_function_PWM0_A();
GPIO0.set_function_USB_OVCUR_DET();
GPIO1.set_function_SPI0_CSn();
GPIO1.set_function_UART0_RX();
GPIO1.set_function_I2C0_SCL();
GPIO1.set_function_PWM0_B();
GPIO1.set_function_USB_VBUS_DET();
GPIO2.set_function_SPI0_SCK();
GPIO2.set_function_UART0_CTS();
GPIO2.set_function_I2C1_SDA();
GPIO2.set_function_PWM1_A();
GPIO2.set_function_USB_VBUS_DET();
GPIO3.set_function_SPI0_TX();
GPIO3.set_function_UART0_RTS();
GPIO3.set_function_I2C1_SCL();
GPIO3.set_function_PWM1_B();
GPIO3.set_function_USB_OVCUR_DET();
GPIO4.set_function_SPI0_RX();
GPIO4.set_function_UART1_TX();
GPIO4.set_function_I2C0_SDA();
GPIO4.set_function_PWM2_A();
GPIO4.set_function_USB_VBUS_DET();
GPIO5.set_function_SPI0_CSn();
GPIO5.set_function_UART1_RX();
GPIO5.set_function_I2C0_SCL();
GPIO5.set_function_PWM2_B();
GPIO5.set_function_USB_VBUS_EN();
GPIO6.set_function_SPI0_SCK();
GPIO6.set_function_UART1_CTS();
GPIO6.set_function_I2C1_SDA();
GPIO6.set_function_PWM3_A();
GPIO6.set_function_USB_OVCUR_DET();
GPIO7.set_function_SPI0_TX();
GPIO7.set_function_UART1_RTS();
GPIO7.set_function_I2C1_SCL();
GPIO7.set_function_PWM3_B();
GPIO7.set_function_USB_VBUS_DET();
GPIO8.set_function_SPI1_RX();
GPIO8.set_function_UART1_TX();
GPIO8.set_function_I2C0_SDA();
GPIO8.set_function_PWM4_A();
GPIO8.set_function_USB_VBUS_EN();
GPIO9.set_function_SPI1_CSn();
GPIO9.set_function_UART1_RX();
GPIO9.set_function_I2C0_SCL();
GPIO9.set_function_PWM4_B();
GPIO9.set_function_USB_OVCUR_DET();
GPIO10.set_function_SPI1_SCK();
GPIO10.set_function_UART1_CTS();
GPIO10.set_function_I2C1_SDA();
GPIO10.set_function_PWM5_A();
GPIO10.set_function_USB_VBUS_DET();
GPIO11.set_function_SPI1_TX();
GPIO11.set_function_UART1_RTS();
GPIO11.set_function_I2C1_SCL();
GPIO11.set_function_PWM5_B();
GPIO11.set_function_USB_VBUS_EN();
GPIO12.set_function_SPI1_RX();
GPIO12.set_function_UART0_TX();
GPIO12.set_function_I2C0_SDA();
GPIO12.set_function_PWM6_A();
GPIO12.set_function_USB_OVCUR_DET();
GPIO13.set_function_SPI1_CSn();
GPIO13.set_function_UART0_RX();
GPIO13.set_function_I2C0_SCL();
GPIO13.set_function_PWM6_B();
GPIO13.set_function_USB_VBUS_DET();
GPIO14.set_function_SPI1_SCK();
GPIO14.set_function_UART0_CTS();
GPIO14.set_function_I2C1_SDA();
GPIO14.set_function_PWM7_A();
GPIO14.set_function_USB_VBUS_EN();
GPIO15.set_function_SPI1_TX();
GPIO15.set_function_UART0_RTS();
GPIO15.set_function_I2C1_SCL();
GPIO15.set_function_PWM7_B();
GPIO15.set_function_USB_OVCUR_DET();
GPIO16.set_function_SPI0_RX();
GPIO16.set_function_UART0_TX();
GPIO16.set_function_I2C0_SDA();
GPIO16.set_function_PWM0_A();
GPIO16.set_function_USB_VBUS_DET();
GPIO17.set_function_SPI0_CSn();
GPIO17.set_function_UART0_RX();
GPIO17.set_function_I2C0_SCL();
GPIO17.set_function_PWM0_B();
GPIO17.set_function_USB_VBUS_EN();
GPIO18.set_function_SPI0_SCK();
GPIO18.set_function_UART0_CTS();
GPIO18.set_function_I2C1_SDA();
GPIO18.set_function_PWM1_A();
GPIO18.set_function_USB_OVCUR_DET();
GPIO19.set_function_SPI0_TX();
GPIO19.set_function_UART0_RTS();
GPIO19.set_function_I2C0_SCL();
GPIO19.set_function_PWM1_B();
GPIO19.set_function_USB_VBUS_DET();
GPIO20.set_function_SPI0_RX();
GPIO20.set_function_UART1_TX();
GPIO20.set_function_I2C0_SDA();
GPIO20.set_function_PWM2_A();
GPIO20.set_function_CLOCK_GPIN0();
GPIO20.set_function_USB_VBUS_DET();
GPIO21.set_function_SPI0_CSn();
GPIO21.set_function_UART1_RX();
GPIO21.set_function_I2C0_SCL();
GPIO21.set_function_PWM2_B();
GPIO21.set_function_CLOCK_GPOUT0();
GPIO21.set_function_USB_OVCUR_DET();
GPIO22.set_function_SPI0_SCK();
GPIO22.set_function_UART1_CTS();
GPIO22.set_function_I2C1_SDA();
GPIO22.set_function_PWM3_A();
GPIO22.set_function_CLOCK_GPIN1();
GPIO22.set_function_USB_VBUS_DET();
GPIO23.set_function_SPI0_TX();
GPIO23.set_function_UART1_RTS();
GPIO23.set_function_I2C1_SCL();
GPIO23.set_function_PWM3_B();
GPIO23.set_function_CLOCK_GPOUT1();
GPIO23.set_function_USB_VBUS_EN();
GPIO24.set_function_SPI1_RX();
GPIO24.set_function_UART1_TX();
GPIO24.set_function_I2C1_SDA();
GPIO24.set_function_PWM4_A();
GPIO24.set_function_CLOCK_GPOUT2();
GPIO24.set_function_USB_OVCUR_DET();
GPIO25.set_function_SPI1_CSn();
GPIO25.set_function_UART1_RX();
GPIO25.set_function_I2C0_SCL();
GPIO25.set_function_PWM4_B();
GPIO25.set_function_CLOCK_GPOUT3();
GPIO25.set_function_USB_VBUS_DET();
GPIO26.set_function_SPI1_SCK();
GPIO26.set_function_UART0_CTS();
GPIO26.set_function_I2C1_SDA();
GPIO26.set_function_PWM5_A();
GPIO26.set_function_USB_VBUS_EN();
GPIO27.set_function_SPI1_TX();
GPIO27.set_function_UART1_RTS();
GPIO27.set_function_I2C1_SCL();
GPIO27.set_function_PWM5_B();
GPIO27.set_function_USB_OVCUR_DET();