RP2350B has 48 gpio, highers 16 accessed by "HI" registers

This commit is contained in:
paolovolpi 2025-07-09 09:04:08 +02:00 committed by Xiang Xiao
parent a20ac0fe7c
commit e1e9ea2e81

View file

@ -103,10 +103,11 @@ extern "C"
static inline void rp23xx_gpio_put(uint32_t gpio, int set)
{
uint32_t value = 1 << gpio;
DEBUGASSERT(gpio < RP23XX_GPIO_NUM);
#if (RP23XX_GPIO_NUM <= 32)
uint32_t value = 1 << gpio;
if (set)
{
putreg32(value, RP23XX_SIO_GPIO_OUT_SET);
@ -115,23 +116,61 @@ static inline void rp23xx_gpio_put(uint32_t gpio, int set)
{
putreg32(value, RP23XX_SIO_GPIO_OUT_CLR);
}
#else
uint32_t mask = 1ul << (gpio & 0x1fu);
if (gpio < 32)
{
if (set)
{
putreg32(mask, RP23XX_SIO_GPIO_OUT_SET);
}
else
{
putreg32(mask, RP23XX_SIO_GPIO_OUT_CLR);
}
}
else
{
if (set)
{
putreg32(mask, RP23XX_SIO_GPIO_HI_OUT_SET);
}
else
{
putreg32(mask, RP23XX_SIO_GPIO_HI_OUT_CLR);
}
}
#endif
}
static inline bool rp23xx_gpio_get(uint32_t gpio)
{
uint32_t value = 1 << gpio;
DEBUGASSERT(gpio < RP23XX_GPIO_NUM);
#if (RP23XX_GPIO_NUM <= 32)
uint32_t value = 1 << gpio;
return (getreg32(RP23XX_SIO_GPIO_IN) & value) != 0;
#else
if (gpio < 32)
{
uint32_t value = 1 << gpio;
return (getreg32(RP23XX_SIO_GPIO_IN) & value) != 0;
}
else
{
uint32_t value = 1 << (gpio -32);
return (getreg32(RP23XX_SIO_GPIO_HI_IN) & value) != 0;
}
#endif
}
static inline void rp23xx_gpio_setdir(uint32_t gpio, int out)
{
uint32_t value = 1 << gpio;
DEBUGASSERT(gpio < RP23XX_GPIO_NUM);
#if (RP23XX_GPIO_NUM <= 32)
uint32_t value = 1 << gpio;
if (out)
{
putreg32(value, RP23XX_SIO_GPIO_OE_SET);
@ -140,6 +179,31 @@ static inline void rp23xx_gpio_setdir(uint32_t gpio, int out)
{
putreg32(value, RP23XX_SIO_GPIO_OE_CLR);
}
#else
uint32_t mask = 1ul << (gpio & 0x1fu);
if (gpio < 32)
{
if (out)
{
putreg32(mask, RP23XX_SIO_GPIO_OE_SET);
}
else
{
putreg32(mask, RP23XX_SIO_GPIO_OE_CLR);
}
}
else
{
if (out)
{
putreg32(mask, RP23XX_SIO_GPIO_HI_OE_SET);
}
else
{
putreg32(mask, RP23XX_SIO_GPIO_HI_OE_CLR);
}
}
#endif
}
/****************************************************************************