Move cm3 type to generic types header.
[bertos.git] / bertos / cpu / types.h
index d7e3e8bde0b2c08cb51951b4f5ec6282cf80210f..08772a97daaa5b9f72799fa78122284d4f18f1eb 100644 (file)
@@ -233,4 +233,24 @@ STATIC_ASSERT(sizeof(cpu_stack_t) == SIZEOF_CPUSTACK_T);
 STATIC_ASSERT(sizeof(cpu_aligned_stack_t) == SIZEOF_CPUALIGNED_T);
 STATIC_ASSERT(sizeof(size_t) == SIZEOF_SIZE_T);
 
+
+/**
+ * Macros for hardware access, both direct and via the bit-band region.
+ */
+/*\{*/
+#define HWREG(x)   (*((reg32_t *)(x)))
+#define HWREGH(x)  (*((reg16_t *)(x)))
+#define HWREGB(x)  (*((reg8_t *)(x)))
+
+#define HWREGBITW(x, b) \
+        HWREG(((reg32_t)(x) & 0xF0000000) | 0x02000000 |               \
+              (((reg32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
+#define HWREGBITH(x, b) \
+        HWREGH(((reg32_t)(x) & 0xF0000000) | 0x02000000 |              \
+               (((reg32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
+#define HWREGBITB(x, b) \
+        HWREGB(((reg32_t)(x) & 0xF0000000) | 0x02000000 |              \
+               (((reg32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
+/*\}*/
+
 #endif /* CPU_TYPES_H */