Add explicit queuebuf and packetbuf to build
[contiki-2.x.git] / cpu / msp430 / watchdog.c
blob7df5a8bd3ccaeabe0303cb43f9f7ed92691bbb81
1 /*
2 * Copyright (c) 2005, Swedish Institute of Computer Science
3 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the Institute nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
29 * This file is part of the Contiki operating system.
31 * @(#)$Id: watchdog.c,v 1.8 2010/04/04 12:30:10 adamdunkels Exp $
33 #include <io.h>
34 #include <signal.h>
35 #include "dev/watchdog.h"
37 static int stopped = 0;
38 /*---------------------------------------------------------------------------*/
39 static void
40 printchar(char c)
42 /* Transmit the data. */
43 TXBUF1 = c;
45 /* Loop until the transmission buffer is available. */
46 while((IFG2 & UTXIFG1) == 0);
49 /*---------------------------------------------------------------------------*/
50 static void
51 hexprint(uint8_t v)
53 const char hexconv[] = "0123456789abcdef";
54 printchar(hexconv[v >> 4]);
55 printchar(hexconv[v & 0x0f]);
57 /*---------------------------------------------------------------------------*/
58 static void
59 printstring(char *s)
61 while(*s) {
62 printchar(*s++);
65 /*---------------------------------------------------------------------------*/
66 interrupt(WDT_VECTOR)
67 watchdog_interrupt(void)
69 uint8_t dummy;
70 static uint8_t *ptr;
71 static int i;
73 ptr = &dummy;
75 printstring("Watchdog reset");
76 /* printstring("Watchdog reset at PC $");
77 hexprint(ptr[3]);
78 hexprint(ptr[2]);*/
79 printstring("\nStack at $");
80 hexprint(((int)ptr) >> 8);
81 hexprint(((int)ptr) & 0xff);
82 printstring(":\n");
84 for(i = 0; i < 64; ++i) {
85 hexprint(ptr[i]);
86 printchar(' ');
87 if((i & 0x0f) == 0x0f) {
88 printchar('\n');
91 printchar('\n');
92 watchdog_reboot();
94 /*---------------------------------------------------------------------------*/
95 void
96 watchdog_init(void)
98 /* The MSP430 watchdog is enabled at boot-up, so we stop it during
99 initialization. */
100 stopped = 0;
101 watchdog_stop();
103 IFG1 &= ~WDTIFG;
104 IE1 |= WDTIE;
106 /*---------------------------------------------------------------------------*/
107 void
108 watchdog_start(void)
110 /* We setup the watchdog to reset the device after one second,
111 unless watchdog_periodic() is called. */
112 stopped--;
113 if(!stopped) {
114 WDTCTL = WDTPW | WDTCNTCL | WDT_ARST_1000 | WDTTMSEL;
117 /*---------------------------------------------------------------------------*/
118 void
119 watchdog_periodic(void)
121 /* This function is called periodically to restart the watchdog
122 timer. */
123 if(!stopped) {
124 WDTCTL = (WDTCTL & 0xff) | WDTPW | WDTCNTCL | WDTTMSEL;;
127 /*---------------------------------------------------------------------------*/
128 void
129 watchdog_stop(void)
131 WDTCTL = WDTPW | WDTHOLD;
132 stopped++;
134 /*---------------------------------------------------------------------------*/
135 void
136 watchdog_reboot(void)
138 WDTCTL = 0;
140 /*---------------------------------------------------------------------------*/