The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
TARGET_TB_SENSE_12/TOOLCHAIN_IAR/em_common.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- Committer:
- AnnaBridge
- Date:
- Thu Nov 08 11:45:42 2018 +0000
- Revision:
- 171:3a7713b1edbc
- Parent:
- TARGET_EFM32GG_STK3700/TARGET_Silicon_Labs/TARGET_EFM32/emlib/inc/em_common.h@160:5571c4ff569f
mbed library. Release version 164
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AnnaBridge | 156:ff21514d8981 | 1 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 2 | * @file em_common.h |
AnnaBridge | 156:ff21514d8981 | 3 | * @brief General purpose utilities. |
Anna Bridge |
160:5571c4ff569f | 4 | * @version 5.3.3 |
AnnaBridge | 156:ff21514d8981 | 5 | ******************************************************************************* |
Anna Bridge |
160:5571c4ff569f | 6 | * # License |
AnnaBridge | 156:ff21514d8981 | 7 | * <b>Copyright 2016 Silicon Laboratories, Inc. http://www.silabs.com</b> |
AnnaBridge | 156:ff21514d8981 | 8 | ******************************************************************************* |
AnnaBridge | 156:ff21514d8981 | 9 | * |
AnnaBridge | 156:ff21514d8981 | 10 | * Permission is granted to anyone to use this software for any purpose, |
AnnaBridge | 156:ff21514d8981 | 11 | * including commercial applications, and to alter it and redistribute it |
AnnaBridge | 156:ff21514d8981 | 12 | * freely, subject to the following restrictions: |
AnnaBridge | 156:ff21514d8981 | 13 | * |
AnnaBridge | 156:ff21514d8981 | 14 | * 1. The origin of this software must not be misrepresented; you must not |
AnnaBridge | 156:ff21514d8981 | 15 | * claim that you wrote the original software. |
AnnaBridge | 156:ff21514d8981 | 16 | * 2. Altered source versions must be plainly marked as such, and must not be |
AnnaBridge | 156:ff21514d8981 | 17 | * misrepresented as being the original software. |
AnnaBridge | 156:ff21514d8981 | 18 | * 3. This notice may not be removed or altered from any source distribution. |
AnnaBridge | 156:ff21514d8981 | 19 | * |
AnnaBridge | 156:ff21514d8981 | 20 | * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Silicon Labs has no |
AnnaBridge | 156:ff21514d8981 | 21 | * obligation to support this Software. Silicon Labs is providing the |
AnnaBridge | 156:ff21514d8981 | 22 | * Software "AS IS", with no express or implied warranties of any kind, |
AnnaBridge | 156:ff21514d8981 | 23 | * including, but not limited to, any implied warranties of merchantability |
AnnaBridge | 156:ff21514d8981 | 24 | * or fitness for any particular purpose or warranties against infringement |
AnnaBridge | 156:ff21514d8981 | 25 | * of any proprietary rights of a third party. |
AnnaBridge | 156:ff21514d8981 | 26 | * |
AnnaBridge | 156:ff21514d8981 | 27 | * Silicon Labs will not be liable for any consequential, incidental, or |
AnnaBridge | 156:ff21514d8981 | 28 | * special damages, or any other relief, or for any claim by any third party, |
AnnaBridge | 156:ff21514d8981 | 29 | * arising from your use of this Software. |
AnnaBridge | 156:ff21514d8981 | 30 | * |
AnnaBridge | 156:ff21514d8981 | 31 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 32 | #ifndef EM_COMMON_H |
AnnaBridge | 156:ff21514d8981 | 33 | #define EM_COMMON_H |
AnnaBridge | 156:ff21514d8981 | 34 | |
AnnaBridge | 156:ff21514d8981 | 35 | #include "em_device.h" |
AnnaBridge | 156:ff21514d8981 | 36 | #include <stdbool.h> |
AnnaBridge | 156:ff21514d8981 | 37 | |
AnnaBridge | 156:ff21514d8981 | 38 | #ifdef __cplusplus |
AnnaBridge | 156:ff21514d8981 | 39 | extern "C" { |
AnnaBridge | 156:ff21514d8981 | 40 | #endif |
AnnaBridge | 156:ff21514d8981 | 41 | |
AnnaBridge | 156:ff21514d8981 | 42 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 43 | * @defgroup emlib EMLIB |
AnnaBridge | 156:ff21514d8981 | 44 | * @brief Low-level peripheral library |
AnnaBridge | 156:ff21514d8981 | 45 | * @details |
AnnaBridge | 156:ff21514d8981 | 46 | * EMLIB is a low-level peripheral support library that provides a unified API for |
AnnaBridge | 156:ff21514d8981 | 47 | * all EFM32, EZR32 and EFR32 MCUs and SoCs from Silicon Laboratories. |
AnnaBridge | 156:ff21514d8981 | 48 | * |
AnnaBridge | 156:ff21514d8981 | 49 | * EMLIB modules are provided for all peripherals and core features. The library |
AnnaBridge | 156:ff21514d8981 | 50 | * implements no interrupt handlers. Static data, critical sections and module |
AnnaBridge | 156:ff21514d8981 | 51 | * interdependencies are kept at a minimum. |
AnnaBridge | 156:ff21514d8981 | 52 | * |
AnnaBridge | 156:ff21514d8981 | 53 | * @note |
AnnaBridge | 156:ff21514d8981 | 54 | * EMLIB functions assert on error if DEBUG_EFM is defined. See @ref ASSERT |
AnnaBridge | 156:ff21514d8981 | 55 | * for more information on error handling and default assertion and how to |
AnnaBridge | 156:ff21514d8981 | 56 | * implement a custom handler. |
AnnaBridge | 156:ff21514d8981 | 57 | * |
AnnaBridge | 156:ff21514d8981 | 58 | * @n |
AnnaBridge | 156:ff21514d8981 | 59 | * @note |
AnnaBridge | 156:ff21514d8981 | 60 | * EMLIB does not implement support for radio features. Please refer to stack |
AnnaBridge | 156:ff21514d8981 | 61 | * documentation for more information on RF support. |
AnnaBridge | 156:ff21514d8981 | 62 | * @{ |
AnnaBridge | 156:ff21514d8981 | 63 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 64 | |
AnnaBridge | 156:ff21514d8981 | 65 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 66 | * @addtogroup COMMON |
AnnaBridge | 156:ff21514d8981 | 67 | * @brief General purpose utilities and cross-compiler support. |
AnnaBridge | 156:ff21514d8981 | 68 | * @details |
AnnaBridge | 156:ff21514d8981 | 69 | * This SDK supports the following compilers/IDEs: |
AnnaBridge | 156:ff21514d8981 | 70 | * @li Simplicity Studio |
AnnaBridge | 156:ff21514d8981 | 71 | * @li IAR Embedded Workbench |
AnnaBridge | 156:ff21514d8981 | 72 | * @li Atollic TrueSTUDIO IDE |
AnnaBridge | 156:ff21514d8981 | 73 | * @li Rowley Associates CrossWorks for ARM |
AnnaBridge | 156:ff21514d8981 | 74 | * @li Keil µVision IDE |
AnnaBridge | 156:ff21514d8981 | 75 | * @li Plain armgcc |
AnnaBridge | 156:ff21514d8981 | 76 | * |
AnnaBridge | 156:ff21514d8981 | 77 | * Certain compiler features such as alignment is implemented differently in the tools. |
AnnaBridge | 156:ff21514d8981 | 78 | * Therefore, macros such as @ref SL_ALIGN are provided to enable compiler independent |
AnnaBridge | 156:ff21514d8981 | 79 | * code. |
AnnaBridge | 156:ff21514d8981 | 80 | * |
AnnaBridge | 156:ff21514d8981 | 81 | * @note RAM code macros are implemented in a separate module @ref RAMFUNC. |
AnnaBridge | 156:ff21514d8981 | 82 | * Cross-compiler RAM code support needs extended documentation and it is therefore |
AnnaBridge | 156:ff21514d8981 | 83 | * implemented as a separate module. |
AnnaBridge | 156:ff21514d8981 | 84 | * |
AnnaBridge | 156:ff21514d8981 | 85 | * @{ |
AnnaBridge | 156:ff21514d8981 | 86 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 87 | |
AnnaBridge | 156:ff21514d8981 | 88 | #if !defined(__GNUC__) |
AnnaBridge | 156:ff21514d8981 | 89 | /* Not GCC compilers */ |
AnnaBridge | 156:ff21514d8981 | 90 | |
AnnaBridge | 156:ff21514d8981 | 91 | /** @brief Macro for getting minimum value. */ |
AnnaBridge | 156:ff21514d8981 | 92 | #define SL_MIN(a, b) ((a) < (b) ? (a) : (b)) |
AnnaBridge | 156:ff21514d8981 | 93 | |
AnnaBridge | 156:ff21514d8981 | 94 | /** @brief Macro for getting maximum value. */ |
AnnaBridge | 156:ff21514d8981 | 95 | #define SL_MAX(a, b) ((a) > (b) ? (a) : (b)) |
AnnaBridge | 156:ff21514d8981 | 96 | |
AnnaBridge | 156:ff21514d8981 | 97 | /** @brief Macros for handling packed structs. */ |
AnnaBridge | 156:ff21514d8981 | 98 | #define STRINGIZE(X) #X |
AnnaBridge | 156:ff21514d8981 | 99 | #define SL_PACK_START(X) _Pragma(STRINGIZE(pack(X))) |
AnnaBridge | 156:ff21514d8981 | 100 | #define SL_PACK_END() _Pragma("pack()") |
AnnaBridge | 156:ff21514d8981 | 101 | #define SL_ATTRIBUTE_PACKED |
AnnaBridge | 156:ff21514d8981 | 102 | |
AnnaBridge | 156:ff21514d8981 | 103 | #if defined(__CC_ARM) |
AnnaBridge | 156:ff21514d8981 | 104 | /** @brief MDK-ARM compiler: Macros for handling aligned structs. */ |
AnnaBridge | 156:ff21514d8981 | 105 | #define SL_ALIGN(X) __align(X) |
AnnaBridge | 156:ff21514d8981 | 106 | |
AnnaBridge | 156:ff21514d8981 | 107 | /** MDK-ARM compiler: Macro for handling weak symbols. */ |
AnnaBridge | 156:ff21514d8981 | 108 | #define SL_WEAK __attribute__ ((weak)) |
AnnaBridge | 156:ff21514d8981 | 109 | |
AnnaBridge | 156:ff21514d8981 | 110 | /** MDK-ARM compiler: Macro for handling non-returning functions. */ |
AnnaBridge | 156:ff21514d8981 | 111 | #define SL_NORETURN __attribute__ ((noreturn)) |
AnnaBridge | 156:ff21514d8981 | 112 | |
AnnaBridge | 156:ff21514d8981 | 113 | /** MDK-ARM compiler: Macro for handling section placement */ |
AnnaBridge | 156:ff21514d8981 | 114 | #define SL_ATTRIBUTE_SECTION(X) __attribute__ ((section(X))) |
AnnaBridge | 156:ff21514d8981 | 115 | #endif |
AnnaBridge | 156:ff21514d8981 | 116 | |
AnnaBridge | 156:ff21514d8981 | 117 | #if defined(__ICCARM__) |
AnnaBridge | 156:ff21514d8981 | 118 | /** @brief IAR Embedded Workbench: Macros for handling aligned structs. */ |
Anna Bridge |
160:5571c4ff569f | 119 | #define SL_ALIGN(X) _Pragma(STRINGIZE(data_alignment = X)) |
AnnaBridge | 156:ff21514d8981 | 120 | |
AnnaBridge | 156:ff21514d8981 | 121 | /** @brief IAR Embedded Workbench: Macros for handling weak symbols. */ |
AnnaBridge | 156:ff21514d8981 | 122 | #define SL_WEAK __weak |
AnnaBridge | 156:ff21514d8981 | 123 | |
AnnaBridge | 156:ff21514d8981 | 124 | /** @brief IAR Embedded Workbench: Macro for handling non-returning functions. */ |
AnnaBridge | 156:ff21514d8981 | 125 | #define SL_NORETURN __noreturn |
AnnaBridge | 156:ff21514d8981 | 126 | |
Anna Bridge |
160:5571c4ff569f | 127 | /* *INDENT-OFF* */ |
AnnaBridge | 156:ff21514d8981 | 128 | /** IAR Embedded Workbench: Macro for handling section placement */ |
AnnaBridge | 156:ff21514d8981 | 129 | #define SL_ATTRIBUTE_SECTION(X) @ X |
AnnaBridge | 156:ff21514d8981 | 130 | #endif |
Anna Bridge |
160:5571c4ff569f | 131 | /* *INDENT-ON* */ |
AnnaBridge | 156:ff21514d8981 | 132 | |
AnnaBridge | 156:ff21514d8981 | 133 | #define SL_ATTRIBUTE_ALIGN(X) |
AnnaBridge | 156:ff21514d8981 | 134 | |
AnnaBridge | 156:ff21514d8981 | 135 | #else // !defined(__GNUC__) |
AnnaBridge | 156:ff21514d8981 | 136 | /* GCC compilers */ |
AnnaBridge | 156:ff21514d8981 | 137 | |
AnnaBridge | 156:ff21514d8981 | 138 | /** @brief Macro for getting minimum value. No sideeffects, a and b are evaluated once only. */ |
Anna Bridge |
160:5571c4ff569f | 139 | #define SL_MIN(a, b) __extension__({ __typeof__(a)_a = (a); __typeof__(b)_b = (b); _a < _b ? _a : _b; }) |
AnnaBridge | 156:ff21514d8981 | 140 | |
AnnaBridge | 156:ff21514d8981 | 141 | /** @brief Macro for getting maximum value. No sideeffects, a and b are evaluated once only. */ |
Anna Bridge |
160:5571c4ff569f | 142 | #define SL_MAX(a, b) __extension__({ __typeof__(a)_a = (a); __typeof__(b)_b = (b); _a > _b ? _a : _b; }) |
AnnaBridge | 156:ff21514d8981 | 143 | |
AnnaBridge | 156:ff21514d8981 | 144 | /** @brief GCC style macro for handling packed structs. */ |
AnnaBridge | 156:ff21514d8981 | 145 | #define SL_ATTRIBUTE_PACKED __attribute__ ((packed)) |
AnnaBridge | 156:ff21514d8981 | 146 | |
AnnaBridge | 156:ff21514d8981 | 147 | /** @brief Macro for handling packed structs. |
AnnaBridge | 156:ff21514d8981 | 148 | * @n Use this macro before the struct definition. |
AnnaBridge | 156:ff21514d8981 | 149 | * @n X denotes the maximum alignment of struct members. X is not supported with |
AnnaBridge | 156:ff21514d8981 | 150 | * GCC. GCC always use 1 byte maximum alignment. |
AnnaBridge | 156:ff21514d8981 | 151 | */ |
AnnaBridge | 156:ff21514d8981 | 152 | #define SL_PACK_START(x) |
AnnaBridge | 156:ff21514d8981 | 153 | |
AnnaBridge | 156:ff21514d8981 | 154 | /** @brief Macro for handling packed structs. |
AnnaBridge | 156:ff21514d8981 | 155 | * @n Use this macro after the struct definition. |
AnnaBridge | 156:ff21514d8981 | 156 | * @n With GCC, add SL_ATTRIBUTE_PACKED after the closing } of the struct |
AnnaBridge | 156:ff21514d8981 | 157 | * definition. |
AnnaBridge | 156:ff21514d8981 | 158 | */ |
AnnaBridge | 156:ff21514d8981 | 159 | #define SL_PACK_END() |
AnnaBridge | 156:ff21514d8981 | 160 | |
AnnaBridge | 156:ff21514d8981 | 161 | /** @brief GCC style macro for aligning a variable. */ |
AnnaBridge | 156:ff21514d8981 | 162 | #define SL_ATTRIBUTE_ALIGN(X) __attribute__ ((aligned(X))) |
AnnaBridge | 156:ff21514d8981 | 163 | |
AnnaBridge | 156:ff21514d8981 | 164 | /** @brief Macro for aligning a variable. |
AnnaBridge | 156:ff21514d8981 | 165 | * @n Use this macro before the variable definition. |
AnnaBridge | 156:ff21514d8981 | 166 | * @n X denotes the storage alignment value in bytes. |
AnnaBridge | 156:ff21514d8981 | 167 | * @n To be gcc compatible use SL_ATTRIBUTE_ALIGN(X) before the ; on normal |
AnnaBridge | 156:ff21514d8981 | 168 | * variables. Use SL_ATTRIBUTE_ALIGN(X) before the opening { on struct variables. |
AnnaBridge | 156:ff21514d8981 | 169 | */ |
AnnaBridge | 156:ff21514d8981 | 170 | #define SL_ALIGN(X) |
AnnaBridge | 156:ff21514d8981 | 171 | |
AnnaBridge | 156:ff21514d8981 | 172 | /** @brief Macro for defining a weak symbol. */ |
AnnaBridge | 156:ff21514d8981 | 173 | #define SL_WEAK __attribute__ ((weak)) |
AnnaBridge | 156:ff21514d8981 | 174 | |
AnnaBridge | 156:ff21514d8981 | 175 | /** @brief Macro for handling non-returning functions. */ |
AnnaBridge | 156:ff21514d8981 | 176 | #define SL_NORETURN __attribute__ ((noreturn)) |
AnnaBridge | 156:ff21514d8981 | 177 | |
AnnaBridge | 156:ff21514d8981 | 178 | /** Macro for placing a variable in a section. |
AnnaBridge | 156:ff21514d8981 | 179 | * @n Use this macro after the variable definition, before the = or ;. |
AnnaBridge | 156:ff21514d8981 | 180 | * @n X denotes the section to place the variable in. |
AnnaBridge | 156:ff21514d8981 | 181 | */ |
AnnaBridge | 156:ff21514d8981 | 182 | #define SL_ATTRIBUTE_SECTION(X) __attribute__ ((section(X))) |
AnnaBridge | 156:ff21514d8981 | 183 | |
AnnaBridge | 156:ff21514d8981 | 184 | #endif // !defined(__GNUC__) |
AnnaBridge | 156:ff21514d8981 | 185 | |
AnnaBridge | 156:ff21514d8981 | 186 | /***************************************************************************//** |
AnnaBridge | 156:ff21514d8981 | 187 | * @brief |
AnnaBridge | 156:ff21514d8981 | 188 | * Count trailing number of zeros. Use CLZ instruction if available. |
AnnaBridge | 156:ff21514d8981 | 189 | * |
AnnaBridge | 156:ff21514d8981 | 190 | * @param[in] value |
AnnaBridge | 156:ff21514d8981 | 191 | * Data value to check for number of trailing zero bits. |
AnnaBridge | 156:ff21514d8981 | 192 | * |
AnnaBridge | 156:ff21514d8981 | 193 | * @return |
AnnaBridge | 156:ff21514d8981 | 194 | * Number of trailing zeros in value. |
AnnaBridge | 156:ff21514d8981 | 195 | ******************************************************************************/ |
AnnaBridge | 156:ff21514d8981 | 196 | __STATIC_INLINE uint32_t SL_CTZ(uint32_t value) |
AnnaBridge | 156:ff21514d8981 | 197 | { |
AnnaBridge | 156:ff21514d8981 | 198 | #if (__CORTEX_M >= 3) |
AnnaBridge | 156:ff21514d8981 | 199 | return __CLZ(__RBIT(value)); |
AnnaBridge | 156:ff21514d8981 | 200 | |
AnnaBridge | 156:ff21514d8981 | 201 | #else |
AnnaBridge | 156:ff21514d8981 | 202 | uint32_t zeros; |
Anna Bridge |
160:5571c4ff569f | 203 | for (zeros = 0; (zeros < 32) && ((value & 0x1) == 0); zeros++, value >>= 1) { |
Anna Bridge |
160:5571c4ff569f | 204 | ; |
Anna Bridge |
160:5571c4ff569f | 205 | } |
AnnaBridge | 156:ff21514d8981 | 206 | return zeros; |
AnnaBridge | 156:ff21514d8981 | 207 | #endif |
AnnaBridge | 156:ff21514d8981 | 208 | } |
AnnaBridge | 156:ff21514d8981 | 209 | |
AnnaBridge | 156:ff21514d8981 | 210 | /* Deprecated function. New code should use @ref SL_CTZ. */ |
AnnaBridge | 156:ff21514d8981 | 211 | __STATIC_INLINE uint32_t EFM32_CTZ(uint32_t value) |
AnnaBridge | 156:ff21514d8981 | 212 | { |
AnnaBridge | 156:ff21514d8981 | 213 | return SL_CTZ(value); |
AnnaBridge | 156:ff21514d8981 | 214 | } |
AnnaBridge | 156:ff21514d8981 | 215 | |
Anna Bridge |
160:5571c4ff569f | 216 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 217 | * @brief |
Anna Bridge |
160:5571c4ff569f | 218 | * Reverse the bits. Use the RBIT instruction if available, else process. |
Anna Bridge |
160:5571c4ff569f | 219 | * |
Anna Bridge |
160:5571c4ff569f | 220 | * @param[in] value |
Anna Bridge |
160:5571c4ff569f | 221 | * Data value to reverse. |
Anna Bridge |
160:5571c4ff569f | 222 | * |
Anna Bridge |
160:5571c4ff569f | 223 | * @return |
Anna Bridge |
160:5571c4ff569f | 224 | * Reversed value. |
Anna Bridge |
160:5571c4ff569f | 225 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 226 | __STATIC_INLINE uint32_t SL_RBIT(uint32_t value) |
Anna Bridge |
160:5571c4ff569f | 227 | { |
Anna Bridge |
160:5571c4ff569f | 228 | uint32_t result; |
Anna Bridge |
160:5571c4ff569f | 229 | |
Anna Bridge |
160:5571c4ff569f | 230 | #if (__CORTEX_M >= 0x03U) |
Anna Bridge |
160:5571c4ff569f | 231 | result = __RBIT(value); |
Anna Bridge |
160:5571c4ff569f | 232 | #else |
Anna Bridge |
160:5571c4ff569f | 233 | int32_t s = 4 * 8 - 1; |
Anna Bridge |
160:5571c4ff569f | 234 | |
Anna Bridge |
160:5571c4ff569f | 235 | result = value; |
Anna Bridge |
160:5571c4ff569f | 236 | for (value >>= 1U; value; value >>= 1U) { |
Anna Bridge |
160:5571c4ff569f | 237 | result <<= 1U; |
Anna Bridge |
160:5571c4ff569f | 238 | result |= value & 1U; |
Anna Bridge |
160:5571c4ff569f | 239 | s--; |
Anna Bridge |
160:5571c4ff569f | 240 | } |
Anna Bridge |
160:5571c4ff569f | 241 | result <<= s; |
Anna Bridge |
160:5571c4ff569f | 242 | #endif |
Anna Bridge |
160:5571c4ff569f | 243 | return result; |
Anna Bridge |
160:5571c4ff569f | 244 | } |
Anna Bridge |
160:5571c4ff569f | 245 | |
Anna Bridge |
160:5571c4ff569f | 246 | /***************************************************************************//** |
Anna Bridge |
160:5571c4ff569f | 247 | * @brief |
Anna Bridge |
160:5571c4ff569f | 248 | * Reverse the bits. Use the RBIT instruction if available, else process. |
Anna Bridge |
160:5571c4ff569f | 249 | * |
Anna Bridge |
160:5571c4ff569f | 250 | * @param[in] value |
Anna Bridge |
160:5571c4ff569f | 251 | * 16-bit data value to reverse. |
Anna Bridge |
160:5571c4ff569f | 252 | * |
Anna Bridge |
160:5571c4ff569f | 253 | * @return |
Anna Bridge |
160:5571c4ff569f | 254 | * 16-bit reversed value. |
Anna Bridge |
160:5571c4ff569f | 255 | ******************************************************************************/ |
Anna Bridge |
160:5571c4ff569f | 256 | __STATIC_INLINE uint32_t SL_RBIT16(uint32_t value) |
Anna Bridge |
160:5571c4ff569f | 257 | { |
Anna Bridge |
160:5571c4ff569f | 258 | return SL_RBIT(value) >> 16; |
Anna Bridge |
160:5571c4ff569f | 259 | } |
AnnaBridge | 156:ff21514d8981 | 260 | |
AnnaBridge | 156:ff21514d8981 | 261 | /** @} (end addtogroup COMMON) */ |
AnnaBridge | 156:ff21514d8981 | 262 | /** @} (end addtogroup emlib) */ |
AnnaBridge | 156:ff21514d8981 | 263 | |
AnnaBridge | 156:ff21514d8981 | 264 | #ifdef __cplusplus |
AnnaBridge | 156:ff21514d8981 | 265 | } |
AnnaBridge | 156:ff21514d8981 | 266 | #endif |
AnnaBridge | 156:ff21514d8981 | 267 | |
AnnaBridge | 156:ff21514d8981 | 268 | #endif /* EM_COMMON_H */ |