altos: Add ao_gpi_set/clr_bits functions
authorKeith Packard <keithp@keithp.com>
Fri, 18 Dec 2015 03:27:42 +0000 (19:27 -0800)
committerKeith Packard <keithp@keithp.com>
Wed, 13 Apr 2016 13:17:06 +0000 (06:17 -0700)
These set or clear a group of bits in a single GPIO register all together.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_arch_funcs.h
src/stm/ao_arch_funcs.h
src/stm/stm32l.h

index ea340dfd56901194b9534a600fb146fbbdef1be4..1eb506cdcb1d02000e238609284e091dc4dc05c9 100644 (file)
@@ -146,4 +146,6 @@ ao_spi_init(void);
 #define ao_enable_output(port,bit,pin,v) cc1111_enable_output(port,token_evaluator(port,DIR), token_evaluator(port,SEL), pin, bit, v)
 #define ao_gpio_set(port, bit, pin, v) ((pin) = (v))
 #define ao_gpio_get(port, bit, pin) (pin)
-
+#define ao_gpio_get_bits(port) (port)
+#define ao_gpio_set_bits(port, bits) ((port) |= bits)
+#define ao_gpio_clr_bits(port, bits) ((port) &= ~bits)
index 087e00d91da77d13075a80fa98c9234884a04a02..f1d17ed152a5a8e0aea983e3446dcc1018634b72 100644 (file)
@@ -177,6 +177,11 @@ ao_spi_try_get_mask(struct stm_gpio *reg, uint16_t mask, uint8_t bus, uint32_t s
 
 #define ao_gpio_get(port, bit, pin) stm_gpio_get(port, bit)
 
+#define ao_gpio_set_bits(port, bits) stm_gpio_set_bits(port, bits)
+
+#define ao_gpio_clr_bits(port, bits) stm_gpio_clr_bits(port, bits);
+
+
 #define ao_enable_output(port,bit,pin,v) do {                  \
                ao_enable_port(port);                           \
                ao_gpio_set(port, bit, pin, v);                 \
index 01afedc625bc0b66fe4c07798237903019e5f2a9..0b6b27983d6a3633d891be36bfdd0f0ecb3063fe 100644 (file)
@@ -166,6 +166,16 @@ stm_gpio_set(struct stm_gpio *gpio, int pin, uint8_t value) {
        gpio->bsrr = ((uint32_t) (value ^ 1) << (pin + 16)) | ((uint32_t) value << pin);
 }
 
+static inline void
+stm_gpio_set_bits(struct stm_gpio *gpio, uint16_t bits) {
+       gpio->bsrr = bits;
+}
+
+static inline void
+stm_gpio_clr_bits(struct stm_gpio *gpio, uint16_t bits) {
+       gpio->bsrr = ((uint32_t) bits) << 16;
+}
+
 static inline uint8_t
 stm_gpio_get(struct stm_gpio *gpio, int pin) {
        return (gpio->idr >> pin) & 1;