summaryrefslogtreecommitdiff
path: root/src/stm
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2017-04-03 11:37:21 -0700
committerKeith Packard <keithp@keithp.com>2017-04-03 11:37:21 -0700
commit0197157a295d848bac65cf7f4457dd5a99af24e3 (patch)
treeb165631d389e80f72e2956e2dc283ac218237e23 /src/stm
parent89c8e0299504e66fc416a778055958cff467e008 (diff)
stm: Add a few more GPIO functions to make dealing with the 1802 easier
ao_gpio_set_mask and ao_gpio_get_all Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/stm')
-rw-r--r--src/stm/ao_arch_funcs.h3
-rw-r--r--src/stm/stm32l.h6
2 files changed, 9 insertions, 0 deletions
diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h
index b294c379..15741505 100644
--- a/src/stm/ao_arch_funcs.h
+++ b/src/stm/ao_arch_funcs.h
@@ -202,8 +202,11 @@ ao_spi_try_get_mask(struct stm_gpio *reg, uint16_t mask, uint8_t bus, uint32_t s
#define ao_gpio_set_bits(port, bits) stm_gpio_set_bits(port, bits)
+#define ao_gpio_set_mask(port, bits, mask) stm_gpio_set_mask(port, bits, mask)
+
#define ao_gpio_clr_bits(port, bits) stm_gpio_clr_bits(port, bits);
+#define ao_gpio_get_all(port) stm_gpio_get_all(port)
#define ao_enable_output(port,bit,pin,v) do { \
ao_enable_port(port); \
diff --git a/src/stm/stm32l.h b/src/stm/stm32l.h
index a20efa8a..4f966e3e 100644
--- a/src/stm/stm32l.h
+++ b/src/stm/stm32l.h
@@ -168,6 +168,12 @@ stm_gpio_set(struct stm_gpio *gpio, int pin, uint8_t value) {
}
static inline void
+stm_gpio_set_mask(struct stm_gpio *gpio, uint16_t bits, uint16_t mask) {
+ /* Use the bit set/reset register to do this atomically */
+ gpio->bsrr = ((uint32_t) (~bits & mask) << 16) | ((uint32_t) (bits & mask));
+}
+
+static inline void
stm_gpio_set_bits(struct stm_gpio *gpio, uint16_t bits) {
gpio->bsrr = bits;
}