From 76bfb7680886ed7ae054a167f4d81eac6815efb3 Mon Sep 17 00:00:00 2001 From: Rutherther Date: Fri, 29 Nov 2024 19:27:50 +0100 Subject: [PATCH] Revert "feat: atomic register modifications" This reverts commit 997dd77e0476ee3929fdab6b1ad29cef85f32c2b. --- include/registers.h | 52 ++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/include/registers.h b/include/registers.h index 6b131bf..ccaf2ac 100644 --- a/include/registers.h +++ b/include/registers.h @@ -1,22 +1,8 @@ #include -#include #ifndef REGISTERS_H #define REGISTERS_H -/** - * @brief Writes data into the register. - * @param[in,out] reg The address to change. - * @param[in] data The data to write to the whole register. - * @param[in] mask The mask to and the data with, ie. if you want only two bits, set to 0x3. - */ -static inline void __attribute__((always_inline)) reg_write_bits(volatile uint32_t *reg, uint32_t data, - uint32_t mask) { - uint32_t set = data & mask; - uint32_t clear = (~data) & mask; - ATOMIC_MODIFY_REG(reg, clear, set); -} - /** * @brief Writes data on the given position in register. * @param[in,out] reg The address to change. @@ -24,12 +10,24 @@ static inline void __attribute__((always_inline)) reg_write_bits(volatile uint32 * @param[in] pos The position to start writing to. First @see data param is shifted by this. * @param[in] mask The mask to and the data with, ie. if you want only two bits, set to 0x3. */ -static inline void __attribute__((always_inline)) +inline void __attribute__((always_inline)) reg_write_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, uint32_t mask) { - reg_write_bits(reg, data, mask << pos); + *reg &= ~(mask << pos); + *reg |= (data & mask) << pos; } +/** + * @brief Writes data into the register. + * @param[in,out] reg The address to change. + * @param[in] data The data to write to the whole register. + * @param[in] mask The mask to and the data with, ie. if you want only two bits, set to 0x3. + */ +inline void __attribute__((always_inline)) reg_write_bits(volatile uint32_t *reg, uint32_t data, + uint32_t mask) { + *reg &= ~(mask); + *reg |= (data & mask); +} /** * @brief Write ones on the given position in register. @@ -37,9 +35,9 @@ reg_write_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, * @param[in] pos The position to start writing to. First @see mask param is shifted by this. * @param[in] mask The mask of bits to write ones to, ie. if you want only two bits, set to 0x3. */ -static inline void __attribute__((always_inline)) reg_set_bits_pos(volatile uint32_t *reg, uint8_t pos, +inline void __attribute__((always_inline)) reg_set_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { - ATOMIC_SET_BIT(reg, mask << pos); + *reg |= mask << pos; } /** @@ -47,9 +45,9 @@ static inline void __attribute__((always_inline)) reg_set_bits_pos(volatile uint * @param[in,out] reg The address to change. * @param[in] mask The mask of bits to write ones to. */ -static inline void __attribute__((always_inline)) reg_set_bits(volatile uint32_t *reg, +inline void __attribute__((always_inline)) reg_set_bits(volatile uint32_t *reg, uint32_t mask) { - ATOMIC_SET_BIT(reg, mask); + *reg |= mask; } /** @@ -59,7 +57,7 @@ static inline void __attribute__((always_inline)) reg_set_bits(volatile uint32_t * @param[in] pos The position to shift the @see mask by. * @param[in] mask The mask saying what bits to toggle (1), from the @see pos. */ -static inline void __attribute__((always_inline)) reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, +inline void __attribute__((always_inline)) reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { *reg ^= (mask << pos); } @@ -70,7 +68,7 @@ static inline void __attribute__((always_inline)) reg_toggle_bits_pos(volatile u * @param[in,out] reg Address of the register to toggle bits in. * @param[in] mask The mask saying what bits to toggle (1). */ -static inline void __attribute__((always_inline)) +inline void __attribute__((always_inline)) reg_toggle_bits(volatile uint32_t *reg, uint32_t mask) { *reg ^= mask; } @@ -81,9 +79,9 @@ reg_toggle_bits(volatile uint32_t *reg, uint32_t mask) { * @param[in] pos The position to start writing to. First the mask is shifted by this. * @param[in] mask The mask of bits to write ones to, ie. if you want only two bits, set to 0x3. */ -static inline void __attribute__((always_inline)) +inline void __attribute__((always_inline)) reg_clear_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { - ATOMIC_CLEAR_BIT(reg, mask << pos); + *reg ^= ~(mask << pos); } /** @@ -91,9 +89,9 @@ reg_clear_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { * @param[in,out] reg The address to change. * @param[in] mask The mask of bits to write ones to. */ -static inline void __attribute__((always_inline)) +inline void __attribute__((always_inline)) reg_clear_bits(volatile uint32_t *reg, uint32_t mask) { - ATOMIC_CLEAR_BIT(reg, mask); + *reg &= ~mask; } /** @@ -104,7 +102,7 @@ reg_clear_bits(volatile uint32_t *reg, uint32_t mask) { * @param[in] mask The mask to apply on the resulting data * @return The read data. */ -static inline uint32_t __attribute__((always_inline)) +inline uint32_t __attribute__((always_inline)) reg_read_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { return ((*reg) >> pos) & mask; } -- 2.48.1