2003-01-14 Theodore A. Roth * configure.in (AC_OUTPUT): Add test and test/sleep Makefiles. * doc/TODO: Remove note about sleep.h. * include/avr/sleep.h: Make it work with any device (mostly). Index: configure.in =================================================================== RCS file: /cvsroot/avr-libc/avr-libc/configure.in,v retrieving revision 1.64 diff -u -r1.64 configure.in --- configure.in 14 Jan 2003 16:03:52 -0000 1.64 +++ configure.in 14 Jan 2003 23:53:19 -0000 @@ -365,6 +365,8 @@ libm/Makefile libm/fplib/Makefile avr-libc.spec doc/Makefile doc/examples/Makefile doc/api/Makefile doc/api/doxygen.config + test/Makefile + test/sleep/Makefile Makefile, [if test -n "$CONFIG_FILES"; then . ${avrlib_basedir}/config-ml.in Index: doc/TODO =================================================================== RCS file: /cvsroot/avr-libc/avr-libc/doc/TODO,v retrieving revision 1.17 diff -u -r1.17 TODO --- doc/TODO 15 Dec 2002 23:21:30 -0000 1.17 +++ doc/TODO 14 Jan 2003 23:53:19 -0000 @@ -6,7 +6,6 @@ * include/avr/timer.h * include/avr/twi.h - Verify that include/avr/*.h do not reference anything in include/avr/ina90.h - - Genericize include/avr/sleep.h - Move the following to examples and document * include/avr/parity.h - In include/avr/delay.h, add macros to allow specifying delays directly Index: include/avr/sleep.h =================================================================== RCS file: /cvsroot/avr-libc/avr-libc/include/avr/sleep.h,v retrieving revision 1.4 diff -u -r1.4 sleep.h --- include/avr/sleep.h 13 Jan 2003 18:24:47 -0000 1.4 +++ include/avr/sleep.h 14 Jan 2003 23:53:19 -0000 @@ -30,6 +30,17 @@ #include +/* Figure out which type of sleep mode the selected device uses (1, 2 or 3 + bits) */ + +#if defined(SM) && ! defined(SM0) && ! defined(SM1) && ! defined(SM2) +# define _SLEEP_TYPE 1 +#elif ! defined(SM) && defined(SM0) && defined(SM1) && ! defined(SM2) +# define _SLEEP_TYPE 2 +#elif ! defined(SM) && defined(SM0) && defined(SM1) && defined(SM2) +# define _SLEEP_TYPE 3 +#endif + /** \defgroup avr_sleep Power Management and Sleep Modes \code #include \endcode @@ -42,12 +53,20 @@ /* Mask of all the sleep mode bits. */ -#define SLEEP_MODE_MASK (_BV(SM0) | _BV(SM1) | _BV(SM2)) +#if _SLEEP_TYPE == 1 +# define _SLEEP_MODE_MASK _BV(SM) +#elif _SLEEP_TYPE == 2 +# define _SLEEP_MODE_MASK (_BV(SM0) | _BV(SM1)) +#elif _SLEEP_TYPE == 3 +# define _SLEEP_MODE_MASK (_BV(SM0) | _BV(SM1) | _BV(SM2)) +#else +# error "No SLEEP mode defined for device." +#endif /** \name Sleep Modes - \note FIXME: TRoth/2002-11-01: These modes were taken from the mega128 - datasheet and might not be applicable or correct for all devices. */ + \note Some of these modes are not available on all devices. See the + datasheet for target device for the available sleep modes. */ /* @{ */ @@ -56,6 +75,17 @@ Idle mode. */ #define SLEEP_MODE_IDLE 0 +#if _SLEEP_TYPE == 1 + +# define SLEEP_MODE_PWR_DOWN _BV(SM) + +#elif _SLEEP_TYPE == 2 + +# define SLEEP_MODE_PWR_DOWN _BV(SM1) +# define SLEEP_MODE_PWR_SAVE (_BV(SM0) | _BV(SM1)) + +#else /* _SLEEP_TYPE == 3 */ + /** \ingroup avr_sleep \def SLEEP_MODE_ADC ADC Noise Reduction Mode. */ @@ -81,6 +111,8 @@ Extended Standby Mode. */ #define SLEEP_MODE_EXT_STANDBY (_BV(SM0) | _BV(SM1) | _BV(SM2)) +#endif /* _SLEEP_TYPE == 3 */ + /* @} */ /** \name Sleep Functions */ @@ -94,7 +126,11 @@ #if defined(DOXYGEN) extern void set_sleep_mode (uint8_t mode); #else -#define set_sleep_mode(mode) (MCUCR = ((MCUCR & ~SLEEP_MODE_MASK) | (mode)) +# if defined (SMCR) +# define set_sleep_mode(mode) (SMCR = ((SMCR & ~_SLEEP_MODE_MASK) | (mode))) +# else +# define set_sleep_mode(mode) (MCUCR = ((MCUCR & ~_SLEEP_MODE_MASK) | (mode))) +# endif #endif /** \ingroup avr_sleep