diff --git a/boards/airfy-beacon/include/board.h b/boards/airfy-beacon/include/board.h index 49b17c03e7ce7f16a76df69e40e56e18d5bcfc78..59db7e7200a560a5ec001245e197c3464269e1fb 100644 --- a/boards/airfy-beacon/include/board.h +++ b/boards/airfy-beacon/include/board.h @@ -33,7 +33,7 @@ */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xff000000) +#define XTIMER_WIDTH (24) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/arduino-mega2560/include/board.h b/boards/arduino-mega2560/include/board.h index 543266941745d543af0805e03cc2df8f758f3f60..b09d20df4ff0e893247d820bb1b1cdd93f79d6bf 100644 --- a/boards/arduino-mega2560/include/board.h +++ b/boards/arduino-mega2560/include/board.h @@ -56,7 +56,7 @@ extern "C" { * @brief xtimer configuration values * @{ */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_SHIFT (2) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/cc2650stk/include/board.h b/boards/cc2650stk/include/board.h index 12754112cadee3a58ee6fae66842657b9f9bc5da..84d4d8980bfc930689173cdd597161bc284298e3 100644 --- a/boards/cc2650stk/include/board.h +++ b/boards/cc2650stk/include/board.h @@ -31,7 +31,7 @@ extern "C" { * @brief Xtimer configuration * @{ */ -#define XTIMER_MASK (0xFFFF0000) +#define XTIMER_WIDTH (16) /** @} */ /** diff --git a/boards/chronos/include/board.h b/boards/chronos/include/board.h index 00dab1df8a694eb8b69265fb22de61ec918fb147..b4d4de2c0ff03dd52839bc23e99736ec57a3340c 100644 --- a/boards/chronos/include/board.h +++ b/boards/chronos/include/board.h @@ -40,7 +40,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) /** @} */ /** diff --git a/boards/fox/include/board.h b/boards/fox/include/board.h index e62bf4c7e21e00c037013a85593ed8b5413bc3f0..51540e1ab5a260b28ca1a4ffa42ece339ffbbea9 100644 --- a/boards/fox/include/board.h +++ b/boards/fox/include/board.h @@ -36,7 +36,7 @@ extern "C" { /** * @name Tell the xtimer that we use a 16-bit peripheral timer */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) /** * @name Define the interface to the AT86RF231 radio diff --git a/boards/iotlab-common/include/board_common.h b/boards/iotlab-common/include/board_common.h index 29babc2b96dc812676c1053b20c263c3d55ee6e7..1ecbf337066f7db78e9b4540e5b0c0afe07fda8d 100644 --- a/boards/iotlab-common/include/board_common.h +++ b/boards/iotlab-common/include/board_common.h @@ -46,7 +46,7 @@ extern "C" { /** * @name Tell the xtimer that we use a 16-bit peripheral timer */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) /** * @name Define the interface to the AT86RF231 radio diff --git a/boards/msb-430-common/include/board_common.h b/boards/msb-430-common/include/board_common.h index 72d856dcb78b21cfd0773bf7a4b209a2332e62ab..e87fd8eb38bdfaa1c510957a2b8649e4b8d84608 100644 --- a/boards/msb-430-common/include/board_common.h +++ b/boards/msb-430-common/include/board_common.h @@ -39,7 +39,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/nrf51dongle/include/board.h b/boards/nrf51dongle/include/board.h index 3e3ee91c6671b64a1aa9cf94d9070aab2a97708d..c215c3697351d21b71ae08008bfb6a9c46605915 100644 --- a/boards/nrf51dongle/include/board.h +++ b/boards/nrf51dongle/include/board.h @@ -34,7 +34,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xff000000) +#define XTIMER_WIDTH (24) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/nucleo-f103/include/board.h b/boards/nucleo-f103/include/board.h index 7641bd1b37631bf9b67d3178ea1951a8a6d6404b..944ba64d1bb7716b91f4ca45b7ba737a52f0870c 100755 --- a/boards/nucleo-f103/include/board.h +++ b/boards/nucleo-f103/include/board.h @@ -35,7 +35,7 @@ extern "C" { /** * @name xtimer configuration */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_BACKOFF 5 /** @} */ diff --git a/boards/pca10000/include/board.h b/boards/pca10000/include/board.h index 11ee1dcbb3f88609e3a28a2eb975eef1c81c5926..490a8b491d26c79ffa47478f932afe31df49479d 100644 --- a/boards/pca10000/include/board.h +++ b/boards/pca10000/include/board.h @@ -34,7 +34,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xff000000) +#define XTIMER_WIDTH (24) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/pca10005/include/board.h b/boards/pca10005/include/board.h index ab8a291f774aad9f99e7ef096f3abfb0e2465f9f..a3d2c2b65652007d7e08b559b60f73f62c30bb81 100644 --- a/boards/pca10005/include/board.h +++ b/boards/pca10005/include/board.h @@ -34,7 +34,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xff000000) +#define XTIMER_WIDTH (24) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/spark-core/include/board.h b/boards/spark-core/include/board.h index 3e0895eecd64ff1d02b973fc63d9800574f5ffba..3909af7abf614234f0dbded2f7c31337532b2c2c 100644 --- a/boards/spark-core/include/board.h +++ b/boards/spark-core/include/board.h @@ -38,7 +38,7 @@ /** * @name Tell the xtimer that we use a 16-bit peripheral timer */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) /** * @brief Macros for controlling the on-board LEDs diff --git a/boards/telosb/include/board.h b/boards/telosb/include/board.h index a3e36ab4738be26100b94309a3771fb79b3907ff..e5136a19f2a6b648fcd744d9421091460e944339 100644 --- a/boards/telosb/include/board.h +++ b/boards/telosb/include/board.h @@ -56,7 +56,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/waspmote-pro/include/board.h b/boards/waspmote-pro/include/board.h index 6ed7ad4f47c0115665c0d23670b605120036ba90..a63f84aaa7fd01e59c249d19b84c1b5a24e71b30 100644 --- a/boards/waspmote-pro/include/board.h +++ b/boards/waspmote-pro/include/board.h @@ -154,7 +154,7 @@ extern "C" { * @brief xtimer configuration values * @{ */ -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_SHIFT (4) #define XTIMER_BACKOFF (40) #define XTIMER_TICKS_INIT (921600ul) diff --git a/boards/wsn430-common/include/board_common.h b/boards/wsn430-common/include/board_common.h index 1942986328c6b11cc912aeaafadd27e47c33f358..08734f92f3a9648303edf6cbf415f7aebda8e104 100644 --- a/boards/wsn430-common/include/board_common.h +++ b/boards/wsn430-common/include/board_common.h @@ -39,7 +39,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/yunjia-nrf51822/include/board.h b/boards/yunjia-nrf51822/include/board.h index 22f21e99054bb3a8b28043323085a09fe01397e0..2442f045e57deaf0ed67c5fec959836c3e5116c0 100644 --- a/boards/yunjia-nrf51822/include/board.h +++ b/boards/yunjia-nrf51822/include/board.h @@ -33,7 +33,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xff000000) +#define XTIMER_WIDTH (24) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/boards/z1/include/board.h b/boards/z1/include/board.h index 4698181e049a315f6aeae8579ba7f1b4205e5eaa..0e2fde78a1ae4da08a80ebe034501f20893a924f 100644 --- a/boards/z1/include/board.h +++ b/boards/z1/include/board.h @@ -50,7 +50,7 @@ extern "C" { */ #define XTIMER (0) #define XTIMER_CHAN (0) -#define XTIMER_MASK (0xffff0000) +#define XTIMER_WIDTH (16) #define XTIMER_BACKOFF (40) /** @} */ diff --git a/sys/include/xtimer.h b/sys/include/xtimer.h index 1d6bec989997de25517d60ca4a42c54989e067e9..9759fa7c2ca2a98115270abf16c82a6ddfdbc98a 100644 --- a/sys/include/xtimer.h +++ b/sys/include/xtimer.h @@ -357,26 +357,38 @@ int xtimer_msg_receive_timeout64(msg_t *msg, uint64_t us); #define XTIMER_TICKS_TO_USEC(value) ( (value) << XTIMER_SHIFT ) #endif -/** - * @brief set xtimer default timer configuration - * @{ +/* + * Default xtimer configuration */ #ifndef XTIMER -#define XTIMER (0) +/** + * @brief Underlying hardware timer device to assign to xtimer + */ +#define XTIMER TIMER_DEV(0) +/** + * @brief Underlying hardware timer channel to assign to xtimer + */ #define XTIMER_CHAN (0) -#if TIMER_0_MAX_VALUE == 0xffffff -#define XTIMER_MASK 0xff000000 -#elif TIMER_0_MAX_VALUE == 0xffff -#define XTIMER_MASK 0xffff0000 +#if (TIMER_0_MAX_VALUE) == 0xfffffful +#define XTIMER_WIDTH (24) +#elif (TIMER_0_MAX_VALUE) == 0xffff +#define XTIMER_WIDTH (16) #endif #endif + +#ifndef XTIMER_WIDTH /** - * @} + * @brief xtimer timer width + * + * This value specifies the width (in bits) of the hardware timer used by xtimer. + * Default is 32. */ +#define XTIMER_WIDTH (32) +#endif -#ifndef XTIMER_MASK +#if XTIMER_WIDTH != 32 /** * @brief xtimer timer mask * @@ -384,12 +396,13 @@ int xtimer_msg_receive_timeout64(msg_t *msg, uint64_t us); * counts to, e.g., 0xffffffff & ~TIMER_MAXVALUE. * * For a 16bit timer, the mask would be 0xFFFF0000, for a 24bit timer, the mask - * would be 0xFF000000. Don't set this for 32bit timers. - * - * This is supposed to be defined per-device in e.g., periph_conf.h. + * would be 0xFF000000. */ +#define XTIMER_MASK ((0xffffffff >> XTIMER_WIDTH) << XTIMER_WIDTH) +#else #define XTIMER_MASK (0) #endif + #define XTIMER_MASK_SHIFTED XTIMER_TICKS_TO_USEC(XTIMER_MASK) #if XTIMER_MASK