@@ 1,35 1,33 @@
 #include <stdint.h>
-#include <stm32h7xx.h>
 
 #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.
  * @param[in] data The data to write on pos.
  * @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;
 }