diff options
| author | Loïc Guégan <manzerbredes@mailbox.org> | 2025-03-24 09:33:49 +0100 |
|---|---|---|
| committer | Loïc Guégan <manzerbredes@mailbox.org> | 2025-03-24 09:33:49 +0100 |
| commit | 7741f014456df395b655b72d9ebb848af72cc37e (patch) | |
| tree | 5ddae273929780ac7c0af2a26b64ba1a382e4b05 /src/libs/gpio.c | |
| parent | d3ecfe3498d73d3ba924063bc1001cca3f333170 (diff) | |
Init repository
Diffstat (limited to 'src/libs/gpio.c')
| -rw-r--r-- | src/libs/gpio.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/libs/gpio.c b/src/libs/gpio.c new file mode 100644 index 0000000..9d61d85 --- /dev/null +++ b/src/libs/gpio.c @@ -0,0 +1,39 @@ +#include "addrmap.h" +#include "utils.h" +#include "gpio.h" + +void gpio_init() { REG_WRITE_BITMAP_CLEAR(RESETS_BASE, 32);} // Reset bank0 (all gpios) + +void gpio_set_function(u8 gpio, u8 fn){ + REG_WRITE(IO_BANK0_GPIO25_CTRL, fn); // Set function as SIO +} + +void gpio_output_enable(u8 gpio){ + u32 r=REG_READ(SIO_GPIO_OE)|1<<gpio; + REG_WRITE(SIO_GPIO_OE, r); +} + +void gpio_toggle_state(u8 gpio){ + REG_WRITE(SIO_GPIO_OUT_XOR,1<<gpio); +} + +void gpio_toggle_led(){ + // Ensure led pin is configured + u32 fn=REG_READ(IO_BANK0_GPIO25_CTRL); + u32 oe=REG_READ(SIO_GPIO_OE)&1<<25; + if(fn!=GPIO_FN_SIO || !oe){ + gpio_set_function(25, GPIO_FN_SIO); + gpio_output_enable(25); + } + gpio_toggle_state(25); // Switch between ON/OFF +} + + +void gpio_blink_led(int n){ + for(int i=0;i<n;i++){ + gpio_toggle_led(); + for(int j=0;j<5000000;j++){} // These are disgusting but I am lazy.. + gpio_toggle_led(); + for(int j=0;j<5000000;j++){} + } +} |
