summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c')
-rw-r--r--c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c b/c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c
new file mode 100644
index 0000000000..78c3d1e00a
--- /dev/null
+++ b/c/src/lib/libbsp/m68k/efi68k/startup/efi68k_wd.c
@@ -0,0 +1,45 @@
+/*
+ *-------------------------------------------------------------------
+ *
+ * This file contains the subroutines necessary to initalize
+ * and maintain the MAX791 based watchdog timer used on efi68k
+ *
+ * This file has been created by John S. Gwynne for the efi68k
+ * project.
+ *
+ * The license and distribution terms for this file may in
+ * the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ *------------------------------------------------------------------
+ *
+ * $Id$
+ */
+#include <bsp.h>
+
+void wd_interrupt(void) {
+ /* toggle WDI of the MAX791. A more sophisticated routine
+ can be inserted into the exception table after booting. */
+
+ /* 3 changes guaranty a pulse independent of initial state */
+ *MCR |= OUT1;
+ *MCR &= ~OUT1;
+ *MCR |= OUT1;
+}
+
+/* _catchWDint is the interrupt front-end */
+extern void _catchWDint();
+asm(" .text
+ .align 2
+ .globl _catchWDint
+_catchWDint:
+ lea %sp@(4),%sp /* pop return address */
+ moveml %d0-%d7/%a0-%a6,%sp@- /* save registers */
+ jbsr wd_interrupt
+ moveml %sp@+,%d0-%d7/%a0-%a6
+ rte
+ ");
+
+void watch_dog_init(void) {
+ set_vector(_catchWDint, WD_ISR_LEVEL+24, 0);
+}