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