stm32: gpio_toggle: ensure correct state of non-toggled pins.
This commit is contained in:
parent
0d5dac515a
commit
50dd1c5725
@ -77,7 +77,8 @@ uint16_t gpio_get(uint32_t gpioport, uint16_t gpios)
|
|||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
/** @brief Toggle a Group of Pins
|
/** @brief Toggle a Group of Pins
|
||||||
|
|
||||||
Toggle one or more pins of the given GPIO port. This is not an atomic operation.
|
Toggle one or more pins of the given GPIO port. The toggling is not atomic, but
|
||||||
|
the non-toggled pins are not affected.
|
||||||
|
|
||||||
@param[in] gpioport Unsigned int32. Port identifier @ref gpio_port_id
|
@param[in] gpioport Unsigned int32. Port identifier @ref gpio_port_id
|
||||||
@param[in] gpios Unsigned int16. Pin identifiers @ref gpio_pin_id
|
@param[in] gpios Unsigned int16. Pin identifiers @ref gpio_pin_id
|
||||||
@ -86,7 +87,8 @@ Toggle one or more pins of the given GPIO port. This is not an atomic operation.
|
|||||||
*/
|
*/
|
||||||
void gpio_toggle(uint32_t gpioport, uint16_t gpios)
|
void gpio_toggle(uint32_t gpioport, uint16_t gpios)
|
||||||
{
|
{
|
||||||
GPIO_ODR(gpioport) ^= gpios;
|
uint32_t port = GPIO_ODR(gpioport);
|
||||||
|
GPIO_BSRR(gpioport) = ((port & gpios) << 16) | (~port & gpios);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user