~ubuntu-branches/ubuntu/gutsy/avr-libc/gutsy

« back to all changes in this revision

Viewing changes to include/avr/wdt.h

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2006-11-15 21:12:47 UTC
  • mfrom: (3.1.2 feisty)
  • Revision ID: james.westby@ubuntu.com-20061115211247-b7qhgnb6o49v5zsg
Tags: 1:1.4.5-2
* Convertion to debheler fixed (closes: #398220)
* Reference to /usr/share/common-licenses in copyright file

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* Copyright (c) 2002, 2004 Marek Michalkiewicz
2
 
   Copyright (c) 2005 Eric B. Weddington
 
2
   Copyright (c) 2005, 2006 Eric B. Weddington
3
3
   All rights reserved.
4
4
 
5
5
   Redistribution and use in source and binary forms, with or without
29
29
  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
30
  POSSIBILITY OF SUCH DAMAGE. */
31
31
 
32
 
/* $Id: wdt.h,v 1.9.2.2 2005/01/10 22:44:22 arcanum Exp $ */
 
32
/* $Id: wdt.h,v 1.22.2.8 2006/09/13 20:41:41 arcanum Exp $ */
33
33
 
34
34
/*
35
35
   avr/wdt.h - macros for AVR watchdog timer
41
41
#include <avr/io.h>
42
42
#include <stdint.h>
43
43
 
44
 
/** \defgroup avr_watchdog Watchdog timer handling
 
44
/** \defgroup avr_watchdog <avr/wdt.h>: Watchdog timer handling
45
45
    \code #include <avr/wdt.h> \endcode
46
46
 
47
47
    This header file declares the interface to some inline macros
55
55
 
56
56
    \note Depending on the fuse configuration of the particular
57
57
    device, further restrictions might apply, in particular it might
58
 
    be disallowed to turn off the watchdog timer. */
 
58
    be disallowed to turn off the watchdog timer.
 
59
 
 
60
    Note that for newer devices (ATmega88 and newer, effectively any
 
61
    AVR that has the option to also generate interrupts), the watchdog
 
62
    timer remains active even after a system reset (except a power-on
 
63
    condition), using the fastest prescaler value (approximately 15
 
64
    ms).  It is therefore required to turn off the watchdog early
 
65
    during program startup, the datasheet recommends a sequence like
 
66
    the following:
 
67
 
 
68
    \code
 
69
    #include <stdint.h>
 
70
    #include <avr/wdt.h>
 
71
 
 
72
    uint8_t mcusr_mirror;
 
73
 
 
74
    void get_mcusr(void) \
 
75
      __attribute__((naked)) \
 
76
      __attribute__((section(".init3")));
 
77
    void get_mcusr(void)
 
78
    {
 
79
      mcusr_mirror = MCUSR;
 
80
      MCUSR = 0;
 
81
      wdt_disable();
 
82
    }
 
83
    \endcode
 
84
 
 
85
    Saving the value of MCUSR in \c mcusr_mirror is only needed if the
 
86
    application later wants to examine the reset source, but clearing
 
87
    in particular the watchdog reset flag before disabling the
 
88
    watchdog is required, according to the datasheet.
 
89
*/
59
90
 
60
91
/**
61
92
   \ingroup avr_watchdog
65
96
 
66
97
#define wdt_reset() __asm__ __volatile__ ("wdr")
67
98
 
68
 
#if defined(__AVR_ATtiny2313__) || defined(__AVR_ATmega48__) \
69
 
|| defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
70
 
#define _WD_CONTROL_REG     WDTCSR
71
 
#define _WD_PS3_MASK        _BV(WDP3)
72
 
#else
73
 
#define _WD_CONTROL_REG     WDTCR
74
 
#define _WD_PS3_MASK        0x00
 
99
#if defined(WDP3)
 
100
# define _WD_PS3_MASK       _BV(WDP3)
 
101
#else
 
102
# define _WD_PS3_MASK       0x00
 
103
#endif /* WDP3 */
 
104
 
 
105
#if defined(WDTCSR)
 
106
#  define _WD_CONTROL_REG     WDTCSR
 
107
#else
 
108
#  define _WD_CONTROL_REG     WDTCR
75
109
#endif
76
110
 
77
111
#if defined(WDTOE)
81
115
#endif
82
116
 
83
117
 
84
 
#if defined (__AVR_ATmega169__) || defined(__AVR_AT90CAN128__) \
 
118
#if defined(__AVR_AT90CAN128__) \
 
119
|| defined(__AVR_AT90CAN32__) || defined(__AVR_AT90CAN64__) \
 
120
|| defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) \
 
121
|| defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) \
85
122
|| defined(__AVR_ATmega48__) || defined(__AVR_ATmega88__) \
86
 
|| defined(__AVR_ATmega168__)
 
123
|| defined(__AVR_ATmega164P__) \
 
124
|| defined(__AVR_ATmega165__) || defined(__AVR_ATmega165P__) \
 
125
|| defined(__AVR_ATmega168__) \
 
126
|| defined(__AVR_ATmega169__) || defined(__AVR_ATmega169P__) \
 
127
|| defined(__AVR_ATmega324P__) \
 
128
|| defined(__AVR_ATmega325__) || defined(__AVR_ATmega3250__) \
 
129
|| defined(__AVR_ATmega329__) || defined(__AVR_ATmega3290__) \
 
130
|| defined(__AVR_ATmega406__) \
 
131
|| defined(__AVR_ATmega640__) \
 
132
|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \
 
133
|| defined(__AVR_ATmega645__) || defined(__AVR_ATmega6450__) \
 
134
|| defined(__AVR_ATmega649__) || defined(__AVR_ATmega6490__) \
 
135
|| defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) \
 
136
|| defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) \
 
137
|| defined(__AVR_AT90PWM2__) || defined(__AVR_AT90PWM3__)
87
138
 
88
139
#define _wdt_write(value)   \
89
140
    __asm__ __volatile__ (  \
104
155
#define wdt_disable() \
105
156
__asm__ __volatile__ (  \
106
157
    "in __tmp_reg__, __SREG__" "\n\t" \
 
158
    "cli" "\n\t" \
107
159
    "sts %0, %1" "\n\t" \
108
160
    "sts %0, __zero_reg__" "\n\t" \
109
161
    "out __SREG__,__tmp_reg__" "\n\t" \
142
194
#define wdt_disable() \
143
195
__asm__ __volatile__ (  \
144
196
    "in __tmp_reg__, __SREG__" "\n\t" \
 
197
     "cli" "\n\t" \
145
198
    "out %0, %1" "\n\t" \
146
199
    "out %0, __zero_reg__" "\n\t" \
147
200
    "out __SREG__,__tmp_reg__" "\n\t" \
178
231
   a negligible change.
179
232
 
180
233
   Possible timeout values are: 15 ms, 30 ms, 60 ms, 120 ms, 250 ms,
181
 
   500 ms, 1 s, 2 s.  Symbolic constants are formed by the prefix
 
234
   500 ms, 1 s, 2 s.  (Some devices also allow for 4 s and 8 s.)
 
235
   Symbolic constants are formed by the prefix
182
236
   \c WDTO_, followed by the time.
183
237
 
184
238
   Example that would select a watchdog timer expiry of approximately
217
271
    See \c WDT0_15MS */
218
272
#define WDTO_2S     7
219
273
 
220
 
#if defined(__AVR_ATtiny2313__) || defined(__AVR_ATmega48__) || \
221
 
defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
 
274
#if defined(__DOXYGEN__) || defined(WDP3)
222
275
 
223
276
/** \ingroup avr_watchdog
224
277
    See \c WDT0_15MS
225
 
    Note: This is only available on the ATtiny2313, ATmega48, ATmega88,
226
 
    and the ATmega168.
 
278
    Note: This is only available on the 
 
279
    ATtiny2313, 
 
280
    ATtiny24, ATtiny44, ATtiny84, 
 
281
    ATtiny25, ATtiny45, ATtiny85, 
 
282
    ATtiny261, ATtiny461, ATtiny861, 
 
283
    ATmega48, ATmega88, ATmega168,
 
284
    ATmega164P, ATmega324P, ATmega644P, ATmega644,
 
285
    ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
 
286
    ATmega406,
 
287
    AT90PWM2, AT90PWM3,
 
288
    AT90USB646, AT90USB647, AT90USB1286, AT90USB1287.
227
289
    */
228
290
#define WDTO_4S     8
229
291
 
230
292
/** \ingroup avr_watchdog
231
 
    See \c WDT0_15MS 
232
 
    Note: This is only available on the ATtiny2313, ATmega48, ATmega88,
233
 
    and the ATmega168.
 
293
    See \c WDT0_15MS
 
294
    Note: This is only available on the 
 
295
    ATtiny2313, 
 
296
    ATtiny24, ATtiny44, ATtiny84, 
 
297
    ATtiny25, ATtiny45, ATtiny85, 
 
298
    ATtiny261, ATtiny461, ATtiny861, 
 
299
    ATmega48, ATmega88, ATmega168,
 
300
    ATmega164P, ATmega324P, ATmega644P, ATmega644,
 
301
    ATmega640, ATmega1280, ATmega1281, ATmega2560, ATmega2561,
 
302
    ATmega406,
 
303
    AT90PWM2, AT90PWM3,
 
304
    AT90USB646, AT90USB647, AT90USB1286, AT90USB1287.
234
305
    */
235
306
#define WDTO_8S     9
236
307