[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-libc-dev] [Patch, committed] Remove almost all device specific chec
From: |
Senthil Kumar Selvaraj |
Subject: |
[avr-libc-dev] [Patch, committed] Remove almost all device specific checks in sleep.h |
Date: |
Wed, 19 Nov 2014 17:14:08 +0530 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
This patch does away with device name based conditional definition of
set_sleep_mode for almost all tiny and mega devices. This has already been
done for xmega devices in commit rev 2455. Since all SLEEP_MODE defines
have now been moved to header files, I've removed those as well.
I tested the patch by diff'ing the disassembly of a set_sleep_mode
(SLEEP_MODE_IDLE) call for all supported devices before and after
the change. The only differences are
1. atmega325p and atmega3250p now have set_sleep_mode defined.
2. atmega16hvb, atmega16hvbrevb, atmega32hvb and atmega32hvbrevb now
(correctly) mask all three SM bits.
The only device specific checks left are for ATmega{161,162,8515} - the SM
bits are spread across more than one register for these. I'll
see if there's a way to get rid of those checks as well - perhaps by
adding/checking for specific defines.
Committed as rev #2457.
Regards
Senthil
ChangeLog
2014-11-18 Senthil Kumar Selvaraj <address@hidden>
* include/avr/sleep.h (set_sleep_mode): Remove SLEEP_MODE defines
for tiny and mega devices as well. Branch on presence of SM<n>
instead of device name.
Index: include/avr/sleep.h
===================================================================
--- include/avr/sleep.h (revision 2455)
+++ include/avr/sleep.h (working copy)
@@ -159,13 +159,10 @@
#endif
-/* Define set_sleep_mode() and sleep mode values per device. */
+/* Special casing these three devices - they are the
+ only ones that need to write to more than one register. */
#if defined(__AVR_ATmega161__)
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_PWR_DOWN 1
- #define SLEEP_MODE_PWR_SAVE 2
-
#define set_sleep_mode(mode) \
do { \
MCUCR = ((MCUCR & ~_BV(SM1)) | ((mode) == SLEEP_MODE_PWR_DOWN ||
(mode) == SLEEP_MODE_PWR_SAVE ? _BV(SM1) : 0)); \
@@ -176,13 +173,6 @@
#elif defined(__AVR_ATmega162__) \
|| defined(__AVR_ATmega8515__)
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_PWR_DOWN 1
- #define SLEEP_MODE_PWR_SAVE 2
- #define SLEEP_MODE_ADC 3
- #define SLEEP_MODE_STANDBY 4
- #define SLEEP_MODE_EXT_STANDBY 5
-
#define set_sleep_mode(mode) \
do { \
MCUCR = ((MCUCR & ~_BV(SM1)) | ((mode) == SLEEP_MODE_IDLE ? 0 :
_BV(SM1))); \
@@ -190,265 +180,7 @@
EMCUCR = ((EMCUCR & ~_BV(SM0)) | ((mode) == SLEEP_MODE_PWR_SAVE ||
(mode) == SLEEP_MODE_EXT_STANDBY ? _BV(SM0) : 0)); \
} while(0)
-#elif defined(__AVR_AT90S2313__) \
-|| defined(__AVR_AT90S2323__) \
-|| defined(__AVR_AT90S2333__) \
-|| defined(__AVR_AT90S2343__) \
-|| defined(__AVR_AT43USB320__) \
-|| defined(__AVR_AT43USB355__) \
-|| defined(__AVR_AT90S4414__) \
-|| defined(__AVR_AT90S4433__) \
-|| defined(__AVR_AT90S8515__) \
-|| defined(__AVR_ATtiny22__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_PWR_DOWN _BV(SM)
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~_BV(SM)) | (mode)); \
- } while(0)
-
-#elif defined(__AVR_ATtiny167__) \
-|| defined(__AVR_ATtiny87__) \
-|| defined(__AVR_ATtiny828__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
- } while(0)
-
-#elif defined(__AVR_AT90S4434__) \
-|| defined(__AVR_ATA5505__) \
-|| defined(__AVR_ATA5272__) \
-|| defined(__AVR_AT76C711__) \
-|| defined(__AVR_AT90S8535__) \
-|| defined(__AVR_ATmega103__) \
-|| defined(__AVR_ATmega161__) \
-|| defined(__AVR_ATmega163__) \
-|| defined(__AVR_ATmega16HVB__) \
-|| defined(__AVR_ATmega16HVBREVB__) \
-|| defined(__AVR_ATmega32HVB__) \
-|| defined(__AVR_ATmega32HVBREVB__) \
-|| defined(__AVR_ATtiny13__) \
-|| defined(__AVR_ATtiny13A__) \
-|| defined(__AVR_ATtiny15__) \
-|| defined(__AVR_ATtiny24__) \
-|| defined(__AVR_ATtiny24A__) \
-|| defined(__AVR_ATtiny44__) \
-|| defined(__AVR_ATtiny44A__) \
-|| defined(__AVR_ATtiny84__) \
-|| defined(__AVR_ATtiny84A__) \
-|| defined(__AVR_ATtiny25__) \
-|| defined(__AVR_ATtiny45__) \
-|| defined(__AVR_ATtiny48__) \
-|| defined(__AVR_ATtiny85__) \
-|| defined(__AVR_ATtiny88__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
- } while(0)
-
-#elif defined(__AVR_ATtiny2313__) \
-|| defined(__AVR_ATtiny2313A__) \
-|| defined(__AVR_ATtiny4313__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_PWR_DOWN (_BV(SM0) | _BV(SM1))
- #define SLEEP_MODE_STANDBY _BV(SM1)
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
- } while(0)
-
-#elif defined(__AVR_AT94K__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
- } while(0)
-
-#elif defined(__AVR_ATtiny26__) \
-|| defined(__AVR_ATtiny261__) \
-|| defined(__AVR_ATtiny261A__) \
-|| defined(__AVR_ATtiny461__) \
-|| defined(__AVR_ATtiny461A__) \
-|| defined(__AVR_ATtiny861__) \
-|| defined(__AVR_ATtiny861A__) \
-|| defined(__AVR_ATtiny43U__) \
-|| defined(__AVR_ATtiny1634__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_STANDBY (_BV(SM0) | _BV(SM1))
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
- } while(0)
-
-#elif defined(__AVR_AT90PWM216__) \
-|| defined(__AVR_AT90PWM316__) \
-|| defined(__AVR_AT90PWM161__) \
-|| defined(__AVR_AT90PWM81__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_STANDBY (_BV(SM1) | _BV(SM2))
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
- } while(0)
-
-#elif defined(__AVR_AT90CAN128__) \
-|| defined(__AVR_AT90CAN32__) \
-|| defined(__AVR_AT90CAN64__) \
-|| defined(__AVR_AT90PWM1__) \
-|| defined(__AVR_AT90PWM2__) \
-|| defined(__AVR_AT90PWM2B__) \
-|| defined(__AVR_AT90PWM3__) \
-|| defined(__AVR_AT90PWM3B__) \
-|| defined(__AVR_AT90USB162__) \
-|| defined(__AVR_AT90USB82__) \
-|| defined(__AVR_AT90USB1286__) \
-|| defined(__AVR_AT90USB1287__) \
-|| defined(__AVR_AT90USB646__) \
-|| defined(__AVR_AT90USB647__) \
-|| defined(__AVR_ATmega128__) \
-|| defined(__AVR_ATmega128A__) \
-|| defined(__AVR_ATmega1280__) \
-|| defined(__AVR_ATmega1281__) \
-|| defined(__AVR_ATmega1284__) \
-|| defined(__AVR_ATmega1284P__) \
-|| defined(__AVR_ATmega128RFA1__) \
-|| defined(__AVR_ATmega1284RFR2__) \
-|| defined(__AVR_ATmega128RFR2__) \
-|| defined(__AVR_ATmega16__) \
-|| defined(__AVR_ATmega16A__) \
-|| defined(__AVR_ATmega162__) \
-|| defined(__AVR_ATmega164A__) \
-|| defined(__AVR_ATmega164P__) \
-|| defined(__AVR_ATmega164PA__) \
-|| defined(__AVR_ATmega165__) \
-|| defined(__AVR_ATmega165A__) \
-|| defined(__AVR_ATmega165P__) \
-|| defined(__AVR_ATmega165PA__) \
-|| defined(__AVR_ATmega168__) \
-|| defined(__AVR_ATmega168A__) \
-|| defined(__AVR_ATmega168P__) \
-|| defined(__AVR_ATmega168PA__) \
-|| defined(__AVR_ATmega169__) \
-|| defined(__AVR_ATmega169A__) \
-|| defined(__AVR_ATmega169P__) \
-|| defined(__AVR_ATmega169PA__) \
-|| defined(__AVR_ATmega16HVA__) \
-|| defined(__AVR_ATmega16HVA2__) \
-|| defined(__AVR_ATmega16M1__) \
-|| defined(__AVR_ATmega16U2__) \
-|| defined(__AVR_ATmega16U4__) \
-|| defined(__AVR_ATmega2560__) \
-|| defined(__AVR_ATmega2561__) \
-|| defined(__AVR_ATmega2564RFR2__) \
-|| defined(__AVR_ATmega256RFR2__) \
-|| defined(__AVR_ATmega32__) \
-|| defined(__AVR_ATmega32A__) \
-|| defined(__AVR_ATmega323__) \
-|| defined(__AVR_ATmega324A__) \
-|| defined(__AVR_ATmega324P__) \
-|| defined(__AVR_ATmega324PA__) \
-|| defined(__AVR_ATmega325__) \
-|| defined(__AVR_ATmega325A__) \
-|| defined(__AVR_ATmega325PA__) \
-|| defined(__AVR_ATmega3250__) \
-|| defined(__AVR_ATmega3250A__) \
-|| defined(__AVR_ATmega3250PA__) \
-|| defined(__AVR_ATmega328__) \
-|| defined(__AVR_ATmega328P__) \
-|| defined(__AVR_ATmega329__) \
-|| defined(__AVR_ATmega329A__) \
-|| defined(__AVR_ATmega329P__) \
-|| defined(__AVR_ATmega329PA__) \
-|| defined(__AVR_ATmega3290__) \
-|| defined(__AVR_ATmega3290A__) \
-|| defined(__AVR_ATmega3290P__) \
-|| defined(__AVR_ATmega3290PA__) \
-|| defined(__AVR_ATmega32C1__) \
-|| defined(__AVR_ATmega32M1__) \
-|| defined(__AVR_ATmega32U2__) \
-|| defined(__AVR_ATmega32U4__) \
-|| defined(__AVR_ATmega32U6__) \
-|| defined(__AVR_ATmega406__) \
-|| defined(__AVR_ATmega48__) \
-|| defined(__AVR_ATmega48A__) \
-|| defined(__AVR_ATmega48PA__) \
-|| defined(__AVR_ATmega48P__) \
-|| defined(__AVR_ATmega64__) \
-|| defined(__AVR_ATmega64A__) \
-|| defined(__AVR_ATmega640__) \
-|| defined(__AVR_ATmega644__) \
-|| defined(__AVR_ATmega644A__) \
-|| defined(__AVR_ATmega644P__) \
-|| defined(__AVR_ATmega644PA__) \
-|| defined(__AVR_ATmega645__) \
-|| defined(__AVR_ATmega645A__) \
-|| defined(__AVR_ATmega645P__) \
-|| defined(__AVR_ATmega6450__) \
-|| defined(__AVR_ATmega6450A__) \
-|| defined(__AVR_ATmega6450P__) \
-|| defined(__AVR_ATmega649__) \
-|| defined(__AVR_ATmega649A__) \
-|| defined(__AVR_ATmega6490__) \
-|| defined(__AVR_ATmega6490A__) \
-|| defined(__AVR_ATmega6490P__) \
-|| defined(__AVR_ATmega649P__) \
-|| defined(__AVR_ATmega64C1__) \
-|| defined(__AVR_ATmega64HVE__) \
-|| defined(__AVR_ATmega64M1__) \
-|| defined(__AVR_ATmega644RFR2__) \
-|| defined(__AVR_ATmega64RFR2__) \
-|| defined(__AVR_ATmega8__) \
-|| defined(__AVR_ATmega8A__) \
-|| defined(__AVR_ATmega8515__) \
-|| defined(__AVR_ATmega8535__) \
-|| defined(__AVR_ATmega88__) \
-|| defined(__AVR_ATmega88A__) \
-|| defined(__AVR_ATmega88P__) \
-|| defined(__AVR_ATmega88PA__) \
-|| defined(__AVR_ATmega8HVA__) \
-|| defined(__AVR_ATmega8U2__)
-
-
- #define SLEEP_MODE_IDLE (0)
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))
- #define SLEEP_MODE_STANDBY (_BV(SM1) | _BV(SM2))
- #define SLEEP_MODE_EXT_STANDBY (_BV(SM0) | _BV(SM1) | _BV(SM2))
-
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
- } while(0)
-
+/* All xmegas work the same way */
#elif defined(__AVR_XMEGA__)
#define set_sleep_mode(mode) \
@@ -456,67 +188,35 @@
_SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(SLEEP_SMODE2_bm |
SLEEP_SMODE1_bm | SLEEP_SMODE0_bm)) | (mode)); \
} while(0)
-#elif defined(__AVR_AT90SCR100__)
+/* For everything else, check for presence of SM<n> and define set_sleep_mode
accordingly. */
+#else
+#if defined(SM2)
- #define SLEEP_MODE_IDLE (0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1))
- #define SLEEP_MODE_STANDBY (_BV(SM1) | _BV(SM2))
- #define SLEEP_MODE_EXT_STANDBY (_BV(SM0) | _BV(SM1) | _BV(SM2))
-
#define set_sleep_mode(mode) \
do { \
_SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
} while(0)
-#elif defined(__AVR_ATA6285__) \
-|| defined(__AVR_ATA6286__) \
-|| defined(__AVR_ATA6289__)
+#elif defined(SM1)
- #define SLEEP_MODE_IDLE (0)
- #define SLEEP_MODE_SENSOR_NOISE_REDUCTION (_BV(SM0))
- #define SLEEP_MODE_PWR_DOWN (_BV(SM1))
-
#define set_sleep_mode(mode) \
do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
+ _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1))) |
(mode)); \
} while(0)
-#elif defined (__AVR_ATA5790__) \
-|| defined (__AVR_ATA5795__)
+#elif defined(SM)
- #define SLEEP_MODE_IDLE (0)
- #define SLEEP_MODE_EXT_PWR_SAVE (_BV(SM0))
- #define SLEEP_MODE_PWR_DOWN (_BV(SM1))
- #define SLEEP_MODE_PWR_SAVE (_BV(SM1) | _BV(SM0))
-
#define set_sleep_mode(mode) \
do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
+ _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~_BV(SM)) | (mode)); \
} while(0)
-#elif defined(__AVR_ATtiny4__) \
-|| defined(__AVR_ATtiny5__) \
-|| defined(__AVR_ATtiny9__) \
-|| defined(__AVR_ATtiny10__) \
-|| defined(__AVR_ATtiny20__) \
-|| defined(__AVR_ATtiny40__)
-
- #define SLEEP_MODE_IDLE 0
- #define SLEEP_MODE_ADC _BV(SM0)
- #define SLEEP_MODE_PWR_DOWN _BV(SM1)
- #define SLEEP_MODE_STANDBY _BV(SM2)
-
- #define set_sleep_mode(mode) \
- do { \
- _SLEEP_CONTROL_REG = ((_SLEEP_CONTROL_REG & ~(_BV(SM0) | _BV(SM1) |
_BV(SM2))) | (mode)); \
- } while(0)
-
#else
#error "No SLEEP mode defined for this device."
-#endif
+#endif /* if defined(SM2) */
+#endif /* #if defined(__AVR_ATmega161__) */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-libc-dev] [Patch, committed] Remove almost all device specific checks in sleep.h,
Senthil Kumar Selvaraj <=