+#include <cpu/attr.h>
+#include <cpu/types.h>
+#include <cpu/irq.h>
+
+#include <cfg/os.h>
+#include <cfg/debug.h>
+#include <cfg/module.h>
+#include <appconfig.h>
+
+/*
+ * Include platform-specific binding code if we're hosted.
+ * Try the CPU specific one for bare-metal environments.
+ */
+#if OS_HOSTED
+ #include OS_CSOURCE(timer)
+#else
+ #include CPU_CSOURCE(timer)
+#endif
+
+/*
+ * Sanity check for config parameters required by this module.
+ */
+#if !defined(CONFIG_KERNEL) || ((CONFIG_KERNEL != 0) && CONFIG_KERNEL != 1)
+ #error CONFIG_KERNEL must be set to either 0 or 1 in config.h
+#endif
+#if !defined(CONFIG_WATCHDOG) || ((CONFIG_WATCHDOG != 0) && CONFIG_WATCHDOG != 1)
+ #error CONFIG_WATCHDOG must be set to either 0 or 1 in config.h
+#endif
+
+#if CONFIG_WATCHDOG
+ #include <drv/wdt.h>
+#endif
+
+#if CONFIG_KERNEL
+ #include <config_kern.h>
+ #if CONFIG_KERN_SIGNALS
+ #include <kern/signal.h> /* sig_wait(), sig_check() */
+ #include <kern/proc.h> /* proc_current() */
+ #include <cfg/macros.h> /* BV() */
+ #endif
+#endif
+
+
+/**
+ * \def CONFIG_TIMER_STROBE
+ *
+ * This is a debug facility that can be used to
+ * monitor timer interrupt activity on an external pin.
+ *
+ * To use strobes, redefine the macros TIMER_STROBE_ON,
+ * TIMER_STROBE_OFF and TIMER_STROBE_INIT and set
+ * CONFIG_TIMER_STROBE to 1.
+ */
+#if !defined(CONFIG_TIMER_STROBE) || !CONFIG_TIMER_STROBE
+ #define TIMER_STROBE_ON do {/*nop*/} while(0)
+ #define TIMER_STROBE_OFF do {/*nop*/} while(0)
+ #define TIMER_STROBE_INIT do {/*nop*/} while(0)