avr-libc-dev
[Top][All Lists]
Advanced

[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__) */
 
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]