From 3644d05456728e9e59ae8fa9deeead6768544eff Mon Sep 17 00:00:00 2001 From: Rutherther Date: Sun, 20 Oct 2024 17:55:30 +0200 Subject: [PATCH] chore: some renames --- include/registers.h | 14 +++++++++----- src/exti.c | 16 ++++++++-------- src/pin.c | 14 +++++++------- src/registers.c | 26 +++++++++++++++++++++----- 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/include/registers.h b/include/registers.h index e62a884..64dbcb2 100644 --- a/include/registers.h +++ b/include/registers.h @@ -3,10 +3,14 @@ #ifndef REGISTERS_H #define REGISTERS_H -void reg_set_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, uint8_t mask); -void reg_set_bits(volatile uint32_t *reg, uint32_t data, uint8_t mask); -void reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, uint8_t mask); -void reg_toggle_bits(volatile uint32_t *reg, uint8_t mask); -uint32_t reg_read_bits_pos(volatile uint32_t *reg, uint8_t pos, uint8_t mask); +extern inline void reg_write_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, uint32_t mask); +extern inline void reg_write_bits(volatile uint32_t *reg, uint32_t data, uint32_t mask); +extern inline void reg_set_bits_pos(volatile uint32_t *reg, uint32_t mask); +extern inline void reg_set_bits(volatile uint32_t *reg, uint32_t mask); +extern inline void reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask); +extern inline void reg_toggle_bits(volatile uint32_t *reg, uint32_t mask); +extern inline void reg_clear_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask); +extern inline void reg_clear_bits(volatile uint32_t *reg, uint32_t mask); +extern inline uint32_t reg_read_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask); #endif // REGISTERS_H diff --git a/src/exti.c b/src/exti.c index 1331032..2db7983 100644 --- a/src/exti.c +++ b/src/exti.c @@ -19,23 +19,23 @@ void exti_external_interrupt(exti_t *exti, uint8_t line, uint8_t gpio) { uint8_t index = line >> 2; uint8_t pos = (line & 0x3) * 4; volatile uint32_t *exticr = exti->syscfg->EXTICR; - reg_set_bits_pos(exticr + index, gpio, pos, 0x0F); + reg_write_bits_pos(exticr + index, gpio, pos, 0x0F); } void exti_rising_interrupt(exti_t *exti, uint8_t line) { - reg_set_bits_pos(&exti->exti->RTSR1, 1, line, 1); - reg_set_bits_pos(&exti->exti->FTSR1, 0, line, 1); - reg_set_bits_pos(&exti->exti->IMR1, 1, line, 1); + reg_write_bits_pos(&exti->exti->RTSR1, 1, line, 1); + reg_write_bits_pos(&exti->exti->FTSR1, 0, line, 1); + reg_write_bits_pos(&exti->exti->IMR1, 1, line, 1); } void exti_falling_interrupt(exti_t *exti, uint8_t line) { - reg_set_bits_pos(&exti->exti->FTSR1, 1, line, 1); - reg_set_bits_pos(&exti->exti->RTSR1, 0, line, 1); - reg_set_bits_pos(&exti->exti->IMR1, 1, line, 1); + reg_write_bits_pos(&exti->exti->FTSR1, 1, line, 1); + reg_write_bits_pos(&exti->exti->RTSR1, 0, line, 1); + reg_write_bits_pos(&exti->exti->IMR1, 1, line, 1); } void exti_disable_interrupt(exti_t *exti, uint8_t line) { - reg_set_bits_pos(&exti->exti->IMR1, 0, line, 1); + reg_write_bits_pos(&exti->exti->IMR1, 0, line, 1); } IRQn_Type exti_irq_idx(uint8_t line) { diff --git a/src/pin.c b/src/pin.c index dc961f6..57a27c6 100644 --- a/src/pin.c +++ b/src/pin.c @@ -12,13 +12,13 @@ pin_t *pin_init(GPIO_TypeDef *gpio, uint8_t pin) { } void pin_mode(pin_t *pin, pin_mode_t mode) { - reg_set_bits_pos(&pin->gpio->MODER, (uint32_t)mode, pin->pin << 1, 0b11); + reg_write_bits_pos(&pin->gpio->MODER, (uint32_t)mode, pin->pin << 1, 0b11); } void pin_pull(pin_t *pin, pin_pullmode_t mode) { - reg_set_bits_pos(&pin->gpio->PUPDR, (uint32_t)mode, pin->pin << 1, 0b11); + reg_write_bits_pos(&pin->gpio->PUPDR, (uint32_t)mode, pin->pin << 1, 0b11); } void pin_speed(pin_t *pin, pin_speedmode_t mode) { - reg_set_bits_pos(&pin->gpio->OSPEEDR, (uint32_t)mode, pin->pin << 1, 0b11); + reg_write_bits_pos(&pin->gpio->OSPEEDR, (uint32_t)mode, pin->pin << 1, 0b11); } uint8_t pin_read(pin_t *pin) { @@ -26,7 +26,7 @@ uint8_t pin_read(pin_t *pin) { } uint8_t pin_write(pin_t *pin, uint8_t val) { - reg_set_bits_pos(&pin->gpio->ODR, val, pin->pin, 1); + reg_write_bits_pos(&pin->gpio->ODR, val, pin->pin, 1); } void pin_toggle(pin_t *pin) { reg_toggle_bits_pos(&pin->gpio->ODR, pin->pin, 1); @@ -51,10 +51,10 @@ void pin_into_output_opendrain(pin_t *pin) { } void pin_into_pushpull(pin_t *pin) { - reg_set_bits_pos(&pin->gpio->OTYPER, 0, pin->pin, 1); + reg_write_bits_pos(&pin->gpio->OTYPER, 0, pin->pin, 1); } void pin_into_opendrain(pin_t *pin) { - reg_set_bits_pos(&pin->gpio->OTYPER, 1, pin->pin, 1); + reg_write_bits_pos(&pin->gpio->OTYPER, 1, pin->pin, 1); } void pin_into_input(pin_t *pin) { @@ -70,7 +70,7 @@ void pin_into_alternate(pin_t *pin, uint8_t alternate) { uint8_t index = pin->pin >> 3; uint8_t pos = (pin->pin & 0x7) * 4; volatile uint32_t *afr = pin->gpio->AFR; - reg_set_bits_pos(afr + index, alternate, pos, 0xF); + reg_write_bits_pos(afr + index, alternate, pos, 0xF); } void pin_into_alternate_highspeed(pin_t *pin, uint8_t alternate) { pin_into_alternate(pin, alternate); diff --git a/src/registers.c b/src/registers.c index 4c76320..aed2d4c 100644 --- a/src/registers.c +++ b/src/registers.c @@ -1,23 +1,39 @@ #include -void reg_set_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, uint8_t mask) { +void reg_write_bits_pos(volatile uint32_t *reg, uint32_t data, uint8_t pos, uint32_t mask) { *reg &= ~(mask << pos); *reg |= (data & mask) << pos; } -void reg_set_bits(volatile uint32_t *reg, uint32_t data, uint8_t mask) { +void reg_write_bits(volatile uint32_t *reg, uint32_t data, uint32_t mask) { *reg &= ~(mask); *reg |= (data & mask); } -void reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, uint8_t mask) { +void reg_set_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { + *reg |= mask << pos; +} + +void reg_set_bits(volatile uint32_t *reg, uint32_t mask) { + *reg |= mask; +} + +void reg_toggle_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { *reg ^= (mask << pos); } -void reg_toggle_bits(volatile uint32_t *reg, uint8_t mask) { +void reg_toggle_bits(volatile uint32_t *reg, uint32_t mask) { *reg ^= mask; } -uint32_t reg_read_bits_pos(volatile uint32_t *reg, uint8_t pos, uint8_t mask) { +uint32_t reg_read_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { return ((*reg) >> pos) & mask; } + +void reg_clear_bits_pos(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { + *reg ^= ~(mask << pos); +} + +void reg_clear_bits(volatile uint32_t *reg, uint8_t pos, uint32_t mask) { + *reg ^= ~mask; +} -- 2.48.1