summaryrefslogtreecommitdiffstats
path: root/lib/reg/regdefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/reg/regdefs.h')
-rw-r--r--lib/reg/regdefs.h25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/reg/regdefs.h b/lib/reg/regdefs.h
new file mode 100644
index 0000000..6a38c76
--- /dev/null
+++ b/lib/reg/regdefs.h
@@ -0,0 +1,25 @@
+#ifndef LIB_REG_REGDEFS_H
+#define LIB_REG_REGDEFS_H
+
+#include <stdint.h>
+
+#define REG_8(a) (*(volatile uint8_t *)(a))
+#define REG_16(a) (*(volatile uint16_t *)(a))
+#define REG_32(a) (*(volatile uint32_t *)(a))
+
+#define BV(b) (1 << (b))
+#define IS_BIT_SET(reg, bit) (!!((reg) & BV(bit)))
+#define WAIT_BIT_UNSET(reg, bit) do { } while (IS_BIT_SET(reg, bit))
+#define WAIT_BIT_SET(reg, bit) do { } while (!IS_BIT_SET(reg, bit))
+
+#define SET_BIT(reg, bit) ((reg) |= BV(bit))
+#define UNSET_BIT(reg, bit) ((reg) &= ~BV(bit))
+
+#define GET_BIT(reg, bit) !!((reg) & BV(bit))
+#define GET_BITS(reg, offset) (((reg) & (offset ## _M)) >> (offset))
+
+#define SET_MASKED(reg, mask, bits) ((reg) = ((reg) & ~(mask)) | ((bits) & (mask)))
+
+#define BITS(n) (0xffffffff >> (32 - (n)))
+
+#endif /* LIB_REG_REGDEFS_H */