aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/util.h
diff options
context:
space:
mode:
authorMarti Bolivar <mbolivar@leaflabs.com>2011-05-09 16:43:27 -0400
committerMarti Bolivar <mbolivar@leaflabs.com>2011-05-09 16:49:08 -0400
commit19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3 (patch)
treea43f7e0fb3650ca54f245b750a078a0e8c356504 /libmaple/util.h
parent868fb1c273e562a1140abfa948022c9d4f55bccf (diff)
parent1e2e177f6dae62e040c674b617744c73be187062 (diff)
downloadlibrambutan-19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3.tar.gz
librambutan-19ea6ba4ea3f1ecb9830cf4d3e1366513f4f96e3.zip
Merge branch 'refactor'
This merges the libmaple refactor work into master. The contents of libmaple proper (/libmaple/) are almost completely incompatible with previous APIs in master. See /docs/source/libmaple/overview.rst for more information on the new design. Wirish incompatibilities are limited to the HardwareTimer class; however, there are several new deprecations, most likely to be removed in 0.1.0.
Diffstat (limited to 'libmaple/util.h')
-rw-r--r--libmaple/util.h68
1 files changed, 29 insertions, 39 deletions
diff --git a/libmaple/util.h b/libmaple/util.h
index 64782d9..f54f3fd 100644
--- a/libmaple/util.h
+++ b/libmaple/util.h
@@ -23,59 +23,48 @@
*****************************************************************************/
/**
- * @file util.h
- *
- * @brief Various macros and utility procedures.
+ * @file util.h
+ * @brief Miscellaneous utility macros and procedures.
*/
-/* Generally "useful" utility procedures */
+#include "libmaple_types.h"
+
#ifndef _UTIL_H_
#define _UTIL_H_
-#include "libmaple.h"
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+/*
+ * Bit manipulation
+ */
#define BIT(shift) (1UL << (shift))
#define BIT_MASK_SHIFT(mask, shift) ((mask) << (shift))
-
-/* Return bits m to n of x */
+/** Bits m to n of x */
#define GET_BITS(x, m, n) ((((uint32)x) << (31 - (n))) >> ((31 - (n)) + (m)))
-
-/* Bit-banding macros */
-/* Convert SRAM address */
-#define BITBAND_SRAM(a,b) ((BITBAND_SRAM_BASE+(a-BITBAND_SRAM_REF)*32+(b*4)))
-/* Convert PERI address */
-#define BITBAND_PERI(a,b) ((BITBAND_PERI_BASE+(a-BITBAND_PERI_REF)*32+(b*4)))
-
-#define REG_SET(reg, val) (*(volatile uint32*)(reg) = (val))
-#define REG_SET_BIT(reg, bit) (*(volatile uint32*)(reg) |= BIT(bit))
-#define REG_CLEAR_BIT(reg, bit) (*(volatile uint32*)(reg) &= ~BIT(bit))
-#define REG_SET_MASK(reg, mask) (*(volatile uint32*)(reg) |= (uint32)(mask))
-#define REG_CLEAR_MASK(reg, mask) (*(volatile uint32*)(reg) &= (uint32)~(mask))
-
-#define REG_GET(reg) (*(volatile uint32*)(reg))
-
-#define __set_bits(addr, mask) (*(volatile uint32*)(addr) |= (uint32)(mask))
-#define __clear_bits(addr, mask) (*(volatile uint32*)(addr) &= (uint32)~(mask))
-#define __get_bits(addr, mask) (*(volatile uint32*)(addr) & (uint32)(mask))
-
-#define __read(reg) (*(volatile uint32*)(reg))
-#define __write(reg, value) (*(volatile uint32*)(reg) = (value))
-
#define IS_POWER_OF_TWO(v) (v && !(v & (v - 1)))
-#ifdef __cplusplus
-extern "C"{
-#endif
+/*
+ * Failure routines
+ */
+void __error(void);
void _fail(const char*, int, const char*);
void throb(void);
-#ifdef __cplusplus
-} // extern "C"
-#endif
+/*
+ * Asserts and debug levels
+ */
-/* Asserts for sanity checks, redefine DEBUG_LEVEL in libmaple.h to
- * compile out these checks */
+#define DEBUG_NONE 0
+#define DEBUG_FAULT 1
+#define DEBUG_ALL 2
+
+#ifndef DEBUG_LEVEL
+#define DEBUG_LEVEL DEBUG_ALL
+#endif
#if DEBUG_LEVEL >= DEBUG_ALL
#define ASSERT(exp) \
@@ -83,7 +72,6 @@ void throb(void);
} else { \
_fail(__FILE__, __LINE__, #exp); \
}
-
#else
#define ASSERT(exp) (void)((0))
#endif
@@ -94,10 +82,12 @@ void throb(void);
} else { \
_fail(__FILE__, __LINE__, #exp); \
}
-
#else
#define ASSERT_FAULT(exp) (void)((0))
#endif
+#ifdef __cplusplus
+} // extern "C"
#endif
+#endif