34#define _AVR_SLEEP_H_ 1
134#if defined(SLEEP_CTRL)
137 #define _SLEEP_CONTROL_REG SLEEP_CTRL
138 #define _SLEEP_ENABLE_MASK SLEEP_SEN_bm
139 #define _SLEEP_SMODE_GROUP_MASK SLEEP_SMODE_gm
141#elif defined(SLPCTRL)
144 #define _SLEEP_CONTROL_REG SLPCTRL_CTRLA
145 #define _SLEEP_ENABLE_MASK SLPCTRL_SEN_bm
146 #define _SLEEP_SMODE_GROUP_MASK SLPCTRL_SMODE_gm
150 #define _SLEEP_CONTROL_REG SMCR
151 #define _SLEEP_ENABLE_MASK _BV(SE)
153#elif defined(__AVR_AT94K__)
155 #define _SLEEP_CONTROL_REG MCUR
156 #define _SLEEP_ENABLE_MASK _BV(SE)
158#elif !defined(__DOXYGEN__)
160 #define _SLEEP_CONTROL_REG MCUCR
161 #define _SLEEP_ENABLE_MASK _BV(SE)
179#if defined(__AVR_ATmega161__)
181 #define set_sleep_mode(mode) \
183 MCUCR = ((MCUCR & ~_BV(SM1)) | ((mode) == SLEEP_MODE_PWR_DOWN || (mode) == SLEEP_MODE_PWR_SAVE ? _BV(SM1) : 0)); \
184 EMCUCR = ((EMCUCR & ~_BV(SM0)) | ((mode) == SLEEP_MODE_PWR_SAVE ? _BV(SM0) : 0)); \
188#elif defined(__AVR_ATmega162__) \
189|| defined(__AVR_ATmega8515__)
191 #define set_sleep_mode(mode) \
193 MCUCR = ((MCUCR & ~_BV(SM1)) | ((mode) == SLEEP_MODE_IDLE ? 0 : _BV(SM1))); \
194 MCUCSR = ((MCUCSR & ~_BV(SM2)) | ((mode) == SLEEP_MODE_STANDBY || (mode) == SLEEP_MODE_EXT_STANDBY ? _BV(SM2) : 0)); \
195 EMCUCR = ((EMCUCR & ~_BV(SM0)) | ((mode) == SLEEP_MODE_PWR_SAVE || (mode) == SLEEP_MODE_EXT_STANDBY ? _BV(SM0) : 0)); \
199#elif defined(__AVR_XMEGA__)
201#define set_sleep_mode(mode) \
203 _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_SLEEP_SMODE_GROUP_MASK)) | (mode)); \
210 #define set_sleep_mode(mode) \
212 _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) | _BV(SM2))) | (mode)); \
217 #define set_sleep_mode(mode) \
219 _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) | (mode)); \
224 #define set_sleep_mode(mode) \
226 _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~_BV(SM)) | (mode)); \
231 #error "No SLEEP mode defined for this device."
244#if defined(__DOXYGEN__)
254#define sleep_enable() \
256 _SLEEP_CONTROL_REG |= (uint8_t)_SLEEP_ENABLE_MASK; \
262#if defined(__DOXYGEN__)
272#define sleep_disable() \
274 _SLEEP_CONTROL_REG &= (uint8_t)(~_SLEEP_ENABLE_MASK); \
285#if defined(__DOXYGEN__)
293 __asm__ __volatile__ ( "sleep" ::: "memory" ); \
299#if defined(__DOXYGEN__)
315#define sleep_mode() \
325#if defined(__DOXYGEN__)
336#if defined(BODS) && defined(BODSE)
340#define BOD_CONTROL_REG BODCR
344#define BOD_CONTROL_REG MCUCR
348#define sleep_bod_disable() \
351 __asm__ __volatile__("in %[tempreg], %[mcucr]" "\n\t" \
352 "ori %[tempreg], %[bods_bodse]" "\n\t" \
353 "out %[mcucr], %[tempreg]" "\n\t" \
354 "andi %[tempreg], %[not_bodse]" "\n\t" \
355 "out %[mcucr], %[tempreg]" \
356 : [tempreg] "=&d" (tempreg) \
357 : [mcucr] "I" _SFR_IO_ADDR(BOD_CONTROL_REG), \
358 [bods_bodse] "i" (_BV(BODS) | _BV(BODSE)), \
359 [not_bodse] "i" (~_BV(BODSE)) \
void sleep_bod_disable(void)
void set_sleep_mode(uint8_t mode)
unsigned char uint8_t
Definition: stdint.h:88