PokittoLib with changes to lcd refresh etc.

Dependents:   Pokittris

Fork of Pokitto by Pokitto Community Team

This is a fork by user @Spinal, and is used in Pokittris for testing. Do not import this to your own program.

Committer:
Pokitto
Date:
Sat Oct 07 21:31:12 2017 +0000
Revision:
5:7e5c566b1760
mbed-pokitto integrated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pokitto 5:7e5c566b1760 1 /**************************************************************************//**
Pokitto 5:7e5c566b1760 2 * @file core_cmInstr.h
Pokitto 5:7e5c566b1760 3 * @brief CMSIS Cortex-M Core Instruction Access Header File
Pokitto 5:7e5c566b1760 4 * @version V3.20
Pokitto 5:7e5c566b1760 5 * @date 05. March 2013
Pokitto 5:7e5c566b1760 6 *
Pokitto 5:7e5c566b1760 7 * @note
Pokitto 5:7e5c566b1760 8 *
Pokitto 5:7e5c566b1760 9 ******************************************************************************/
Pokitto 5:7e5c566b1760 10 /* Copyright (c) 2009 - 2013 ARM LIMITED
Pokitto 5:7e5c566b1760 11
Pokitto 5:7e5c566b1760 12 All rights reserved.
Pokitto 5:7e5c566b1760 13 Redistribution and use in source and binary forms, with or without
Pokitto 5:7e5c566b1760 14 modification, are permitted provided that the following conditions are met:
Pokitto 5:7e5c566b1760 15 - Redistributions of source code must retain the above copyright
Pokitto 5:7e5c566b1760 16 notice, this list of conditions and the following disclaimer.
Pokitto 5:7e5c566b1760 17 - Redistributions in binary form must reproduce the above copyright
Pokitto 5:7e5c566b1760 18 notice, this list of conditions and the following disclaimer in the
Pokitto 5:7e5c566b1760 19 documentation and/or other materials provided with the distribution.
Pokitto 5:7e5c566b1760 20 - Neither the name of ARM nor the names of its contributors may be used
Pokitto 5:7e5c566b1760 21 to endorse or promote products derived from this software without
Pokitto 5:7e5c566b1760 22 specific prior written permission.
Pokitto 5:7e5c566b1760 23 *
Pokitto 5:7e5c566b1760 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Pokitto 5:7e5c566b1760 25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Pokitto 5:7e5c566b1760 26 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Pokitto 5:7e5c566b1760 27 ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
Pokitto 5:7e5c566b1760 28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
Pokitto 5:7e5c566b1760 29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
Pokitto 5:7e5c566b1760 30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
Pokitto 5:7e5c566b1760 31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
Pokitto 5:7e5c566b1760 32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Pokitto 5:7e5c566b1760 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Pokitto 5:7e5c566b1760 34 POSSIBILITY OF SUCH DAMAGE.
Pokitto 5:7e5c566b1760 35 ---------------------------------------------------------------------------*/
Pokitto 5:7e5c566b1760 36
Pokitto 5:7e5c566b1760 37
Pokitto 5:7e5c566b1760 38 #ifndef __CORE_CMINSTR_H
Pokitto 5:7e5c566b1760 39 #define __CORE_CMINSTR_H
Pokitto 5:7e5c566b1760 40
Pokitto 5:7e5c566b1760 41
Pokitto 5:7e5c566b1760 42 /* ########################## Core Instruction Access ######################### */
Pokitto 5:7e5c566b1760 43 /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
Pokitto 5:7e5c566b1760 44 Access to dedicated instructions
Pokitto 5:7e5c566b1760 45 @{
Pokitto 5:7e5c566b1760 46 */
Pokitto 5:7e5c566b1760 47
Pokitto 5:7e5c566b1760 48 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
Pokitto 5:7e5c566b1760 49 /* ARM armcc specific functions */
Pokitto 5:7e5c566b1760 50
Pokitto 5:7e5c566b1760 51 #if (__ARMCC_VERSION < 400677)
Pokitto 5:7e5c566b1760 52 #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
Pokitto 5:7e5c566b1760 53 #endif
Pokitto 5:7e5c566b1760 54
Pokitto 5:7e5c566b1760 55
Pokitto 5:7e5c566b1760 56 /** \brief No Operation
Pokitto 5:7e5c566b1760 57
Pokitto 5:7e5c566b1760 58 No Operation does nothing. This instruction can be used for code alignment purposes.
Pokitto 5:7e5c566b1760 59 */
Pokitto 5:7e5c566b1760 60 #define __NOP __nop
Pokitto 5:7e5c566b1760 61
Pokitto 5:7e5c566b1760 62
Pokitto 5:7e5c566b1760 63 /** \brief Wait For Interrupt
Pokitto 5:7e5c566b1760 64
Pokitto 5:7e5c566b1760 65 Wait For Interrupt is a hint instruction that suspends execution
Pokitto 5:7e5c566b1760 66 until one of a number of events occurs.
Pokitto 5:7e5c566b1760 67 */
Pokitto 5:7e5c566b1760 68 #define __WFI __wfi
Pokitto 5:7e5c566b1760 69
Pokitto 5:7e5c566b1760 70
Pokitto 5:7e5c566b1760 71 /** \brief Wait For Event
Pokitto 5:7e5c566b1760 72
Pokitto 5:7e5c566b1760 73 Wait For Event is a hint instruction that permits the processor to enter
Pokitto 5:7e5c566b1760 74 a low-power state until one of a number of events occurs.
Pokitto 5:7e5c566b1760 75 */
Pokitto 5:7e5c566b1760 76 #define __WFE __wfe
Pokitto 5:7e5c566b1760 77
Pokitto 5:7e5c566b1760 78
Pokitto 5:7e5c566b1760 79 /** \brief Send Event
Pokitto 5:7e5c566b1760 80
Pokitto 5:7e5c566b1760 81 Send Event is a hint instruction. It causes an event to be signaled to the CPU.
Pokitto 5:7e5c566b1760 82 */
Pokitto 5:7e5c566b1760 83 #define __SEV __sev
Pokitto 5:7e5c566b1760 84
Pokitto 5:7e5c566b1760 85
Pokitto 5:7e5c566b1760 86 /** \brief Instruction Synchronization Barrier
Pokitto 5:7e5c566b1760 87
Pokitto 5:7e5c566b1760 88 Instruction Synchronization Barrier flushes the pipeline in the processor,
Pokitto 5:7e5c566b1760 89 so that all instructions following the ISB are fetched from cache or
Pokitto 5:7e5c566b1760 90 memory, after the instruction has been completed.
Pokitto 5:7e5c566b1760 91 */
Pokitto 5:7e5c566b1760 92 #define __ISB() __isb(0xF)
Pokitto 5:7e5c566b1760 93
Pokitto 5:7e5c566b1760 94
Pokitto 5:7e5c566b1760 95 /** \brief Data Synchronization Barrier
Pokitto 5:7e5c566b1760 96
Pokitto 5:7e5c566b1760 97 This function acts as a special kind of Data Memory Barrier.
Pokitto 5:7e5c566b1760 98 It completes when all explicit memory accesses before this instruction complete.
Pokitto 5:7e5c566b1760 99 */
Pokitto 5:7e5c566b1760 100 #define __DSB() __dsb(0xF)
Pokitto 5:7e5c566b1760 101
Pokitto 5:7e5c566b1760 102
Pokitto 5:7e5c566b1760 103 /** \brief Data Memory Barrier
Pokitto 5:7e5c566b1760 104
Pokitto 5:7e5c566b1760 105 This function ensures the apparent order of the explicit memory operations before
Pokitto 5:7e5c566b1760 106 and after the instruction, without ensuring their completion.
Pokitto 5:7e5c566b1760 107 */
Pokitto 5:7e5c566b1760 108 #define __DMB() __dmb(0xF)
Pokitto 5:7e5c566b1760 109
Pokitto 5:7e5c566b1760 110
Pokitto 5:7e5c566b1760 111 /** \brief Reverse byte order (32 bit)
Pokitto 5:7e5c566b1760 112
Pokitto 5:7e5c566b1760 113 This function reverses the byte order in integer value.
Pokitto 5:7e5c566b1760 114
Pokitto 5:7e5c566b1760 115 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 116 \return Reversed value
Pokitto 5:7e5c566b1760 117 */
Pokitto 5:7e5c566b1760 118 #define __REV __rev
Pokitto 5:7e5c566b1760 119
Pokitto 5:7e5c566b1760 120
Pokitto 5:7e5c566b1760 121 /** \brief Reverse byte order (16 bit)
Pokitto 5:7e5c566b1760 122
Pokitto 5:7e5c566b1760 123 This function reverses the byte order in two unsigned short values.
Pokitto 5:7e5c566b1760 124
Pokitto 5:7e5c566b1760 125 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 126 \return Reversed value
Pokitto 5:7e5c566b1760 127 */
Pokitto 5:7e5c566b1760 128 #ifndef __NO_EMBEDDED_ASM
Pokitto 5:7e5c566b1760 129 __attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value)
Pokitto 5:7e5c566b1760 130 {
Pokitto 5:7e5c566b1760 131 rev16 r0, r0
Pokitto 5:7e5c566b1760 132 bx lr
Pokitto 5:7e5c566b1760 133 }
Pokitto 5:7e5c566b1760 134 #endif
Pokitto 5:7e5c566b1760 135
Pokitto 5:7e5c566b1760 136 /** \brief Reverse byte order in signed short value
Pokitto 5:7e5c566b1760 137
Pokitto 5:7e5c566b1760 138 This function reverses the byte order in a signed short value with sign extension to integer.
Pokitto 5:7e5c566b1760 139
Pokitto 5:7e5c566b1760 140 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 141 \return Reversed value
Pokitto 5:7e5c566b1760 142 */
Pokitto 5:7e5c566b1760 143 #ifndef __NO_EMBEDDED_ASM
Pokitto 5:7e5c566b1760 144 __attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int32_t __REVSH(int32_t value)
Pokitto 5:7e5c566b1760 145 {
Pokitto 5:7e5c566b1760 146 revsh r0, r0
Pokitto 5:7e5c566b1760 147 bx lr
Pokitto 5:7e5c566b1760 148 }
Pokitto 5:7e5c566b1760 149 #endif
Pokitto 5:7e5c566b1760 150
Pokitto 5:7e5c566b1760 151
Pokitto 5:7e5c566b1760 152 /** \brief Rotate Right in unsigned value (32 bit)
Pokitto 5:7e5c566b1760 153
Pokitto 5:7e5c566b1760 154 This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
Pokitto 5:7e5c566b1760 155
Pokitto 5:7e5c566b1760 156 \param [in] value Value to rotate
Pokitto 5:7e5c566b1760 157 \param [in] value Number of Bits to rotate
Pokitto 5:7e5c566b1760 158 \return Rotated value
Pokitto 5:7e5c566b1760 159 */
Pokitto 5:7e5c566b1760 160 #define __ROR __ror
Pokitto 5:7e5c566b1760 161
Pokitto 5:7e5c566b1760 162
Pokitto 5:7e5c566b1760 163 /** \brief Breakpoint
Pokitto 5:7e5c566b1760 164
Pokitto 5:7e5c566b1760 165 This function causes the processor to enter Debug state.
Pokitto 5:7e5c566b1760 166 Debug tools can use this to investigate system state when the instruction at a particular address is reached.
Pokitto 5:7e5c566b1760 167
Pokitto 5:7e5c566b1760 168 \param [in] value is ignored by the processor.
Pokitto 5:7e5c566b1760 169 If required, a debugger can use it to store additional information about the breakpoint.
Pokitto 5:7e5c566b1760 170 */
Pokitto 5:7e5c566b1760 171 #define __BKPT(value) __breakpoint(value)
Pokitto 5:7e5c566b1760 172
Pokitto 5:7e5c566b1760 173
Pokitto 5:7e5c566b1760 174 #if (__CORTEX_M >= 0x03)
Pokitto 5:7e5c566b1760 175
Pokitto 5:7e5c566b1760 176 /** \brief Reverse bit order of value
Pokitto 5:7e5c566b1760 177
Pokitto 5:7e5c566b1760 178 This function reverses the bit order of the given value.
Pokitto 5:7e5c566b1760 179
Pokitto 5:7e5c566b1760 180 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 181 \return Reversed value
Pokitto 5:7e5c566b1760 182 */
Pokitto 5:7e5c566b1760 183 #define __RBIT __rbit
Pokitto 5:7e5c566b1760 184
Pokitto 5:7e5c566b1760 185
Pokitto 5:7e5c566b1760 186 /** \brief LDR Exclusive (8 bit)
Pokitto 5:7e5c566b1760 187
Pokitto 5:7e5c566b1760 188 This function performs a exclusive LDR command for 8 bit value.
Pokitto 5:7e5c566b1760 189
Pokitto 5:7e5c566b1760 190 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 191 \return value of type uint8_t at (*ptr)
Pokitto 5:7e5c566b1760 192 */
Pokitto 5:7e5c566b1760 193 #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr))
Pokitto 5:7e5c566b1760 194
Pokitto 5:7e5c566b1760 195
Pokitto 5:7e5c566b1760 196 /** \brief LDR Exclusive (16 bit)
Pokitto 5:7e5c566b1760 197
Pokitto 5:7e5c566b1760 198 This function performs a exclusive LDR command for 16 bit values.
Pokitto 5:7e5c566b1760 199
Pokitto 5:7e5c566b1760 200 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 201 \return value of type uint16_t at (*ptr)
Pokitto 5:7e5c566b1760 202 */
Pokitto 5:7e5c566b1760 203 #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr))
Pokitto 5:7e5c566b1760 204
Pokitto 5:7e5c566b1760 205
Pokitto 5:7e5c566b1760 206 /** \brief LDR Exclusive (32 bit)
Pokitto 5:7e5c566b1760 207
Pokitto 5:7e5c566b1760 208 This function performs a exclusive LDR command for 32 bit values.
Pokitto 5:7e5c566b1760 209
Pokitto 5:7e5c566b1760 210 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 211 \return value of type uint32_t at (*ptr)
Pokitto 5:7e5c566b1760 212 */
Pokitto 5:7e5c566b1760 213 #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr))
Pokitto 5:7e5c566b1760 214
Pokitto 5:7e5c566b1760 215
Pokitto 5:7e5c566b1760 216 /** \brief STR Exclusive (8 bit)
Pokitto 5:7e5c566b1760 217
Pokitto 5:7e5c566b1760 218 This function performs a exclusive STR command for 8 bit values.
Pokitto 5:7e5c566b1760 219
Pokitto 5:7e5c566b1760 220 \param [in] value Value to store
Pokitto 5:7e5c566b1760 221 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 222 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 223 \return 1 Function failed
Pokitto 5:7e5c566b1760 224 */
Pokitto 5:7e5c566b1760 225 #define __STREXB(value, ptr) __strex(value, ptr)
Pokitto 5:7e5c566b1760 226
Pokitto 5:7e5c566b1760 227
Pokitto 5:7e5c566b1760 228 /** \brief STR Exclusive (16 bit)
Pokitto 5:7e5c566b1760 229
Pokitto 5:7e5c566b1760 230 This function performs a exclusive STR command for 16 bit values.
Pokitto 5:7e5c566b1760 231
Pokitto 5:7e5c566b1760 232 \param [in] value Value to store
Pokitto 5:7e5c566b1760 233 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 234 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 235 \return 1 Function failed
Pokitto 5:7e5c566b1760 236 */
Pokitto 5:7e5c566b1760 237 #define __STREXH(value, ptr) __strex(value, ptr)
Pokitto 5:7e5c566b1760 238
Pokitto 5:7e5c566b1760 239
Pokitto 5:7e5c566b1760 240 /** \brief STR Exclusive (32 bit)
Pokitto 5:7e5c566b1760 241
Pokitto 5:7e5c566b1760 242 This function performs a exclusive STR command for 32 bit values.
Pokitto 5:7e5c566b1760 243
Pokitto 5:7e5c566b1760 244 \param [in] value Value to store
Pokitto 5:7e5c566b1760 245 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 246 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 247 \return 1 Function failed
Pokitto 5:7e5c566b1760 248 */
Pokitto 5:7e5c566b1760 249 #define __STREXW(value, ptr) __strex(value, ptr)
Pokitto 5:7e5c566b1760 250
Pokitto 5:7e5c566b1760 251
Pokitto 5:7e5c566b1760 252 /** \brief Remove the exclusive lock
Pokitto 5:7e5c566b1760 253
Pokitto 5:7e5c566b1760 254 This function removes the exclusive lock which is created by LDREX.
Pokitto 5:7e5c566b1760 255
Pokitto 5:7e5c566b1760 256 */
Pokitto 5:7e5c566b1760 257 #define __CLREX __clrex
Pokitto 5:7e5c566b1760 258
Pokitto 5:7e5c566b1760 259
Pokitto 5:7e5c566b1760 260 /** \brief Signed Saturate
Pokitto 5:7e5c566b1760 261
Pokitto 5:7e5c566b1760 262 This function saturates a signed value.
Pokitto 5:7e5c566b1760 263
Pokitto 5:7e5c566b1760 264 \param [in] value Value to be saturated
Pokitto 5:7e5c566b1760 265 \param [in] sat Bit position to saturate to (1..32)
Pokitto 5:7e5c566b1760 266 \return Saturated value
Pokitto 5:7e5c566b1760 267 */
Pokitto 5:7e5c566b1760 268 #define __SSAT __ssat
Pokitto 5:7e5c566b1760 269
Pokitto 5:7e5c566b1760 270
Pokitto 5:7e5c566b1760 271 /** \brief Unsigned Saturate
Pokitto 5:7e5c566b1760 272
Pokitto 5:7e5c566b1760 273 This function saturates an unsigned value.
Pokitto 5:7e5c566b1760 274
Pokitto 5:7e5c566b1760 275 \param [in] value Value to be saturated
Pokitto 5:7e5c566b1760 276 \param [in] sat Bit position to saturate to (0..31)
Pokitto 5:7e5c566b1760 277 \return Saturated value
Pokitto 5:7e5c566b1760 278 */
Pokitto 5:7e5c566b1760 279 #define __USAT __usat
Pokitto 5:7e5c566b1760 280
Pokitto 5:7e5c566b1760 281
Pokitto 5:7e5c566b1760 282 /** \brief Count leading zeros
Pokitto 5:7e5c566b1760 283
Pokitto 5:7e5c566b1760 284 This function counts the number of leading zeros of a data value.
Pokitto 5:7e5c566b1760 285
Pokitto 5:7e5c566b1760 286 \param [in] value Value to count the leading zeros
Pokitto 5:7e5c566b1760 287 \return number of leading zeros in value
Pokitto 5:7e5c566b1760 288 */
Pokitto 5:7e5c566b1760 289 #define __CLZ __clz
Pokitto 5:7e5c566b1760 290
Pokitto 5:7e5c566b1760 291 #endif /* (__CORTEX_M >= 0x03) */
Pokitto 5:7e5c566b1760 292
Pokitto 5:7e5c566b1760 293
Pokitto 5:7e5c566b1760 294
Pokitto 5:7e5c566b1760 295 #elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
Pokitto 5:7e5c566b1760 296 /* IAR iccarm specific functions */
Pokitto 5:7e5c566b1760 297
Pokitto 5:7e5c566b1760 298 #include <cmsis_iar.h>
Pokitto 5:7e5c566b1760 299
Pokitto 5:7e5c566b1760 300
Pokitto 5:7e5c566b1760 301 #elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
Pokitto 5:7e5c566b1760 302 /* TI CCS specific functions */
Pokitto 5:7e5c566b1760 303
Pokitto 5:7e5c566b1760 304 #include <cmsis_ccs.h>
Pokitto 5:7e5c566b1760 305
Pokitto 5:7e5c566b1760 306
Pokitto 5:7e5c566b1760 307 #elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
Pokitto 5:7e5c566b1760 308 /* GNU gcc specific functions */
Pokitto 5:7e5c566b1760 309
Pokitto 5:7e5c566b1760 310 /* Define macros for porting to both thumb1 and thumb2.
Pokitto 5:7e5c566b1760 311 * For thumb1, use low register (r0-r7), specified by constrant "l"
Pokitto 5:7e5c566b1760 312 * Otherwise, use general registers, specified by constrant "r" */
Pokitto 5:7e5c566b1760 313 #if defined (__thumb__) && !defined (__thumb2__)
Pokitto 5:7e5c566b1760 314 #define __CMSIS_GCC_OUT_REG(r) "=l" (r)
Pokitto 5:7e5c566b1760 315 #define __CMSIS_GCC_USE_REG(r) "l" (r)
Pokitto 5:7e5c566b1760 316 #else
Pokitto 5:7e5c566b1760 317 #define __CMSIS_GCC_OUT_REG(r) "=r" (r)
Pokitto 5:7e5c566b1760 318 #define __CMSIS_GCC_USE_REG(r) "r" (r)
Pokitto 5:7e5c566b1760 319 #endif
Pokitto 5:7e5c566b1760 320
Pokitto 5:7e5c566b1760 321 /** \brief No Operation
Pokitto 5:7e5c566b1760 322
Pokitto 5:7e5c566b1760 323 No Operation does nothing. This instruction can be used for code alignment purposes.
Pokitto 5:7e5c566b1760 324 */
Pokitto 5:7e5c566b1760 325 __attribute__( ( always_inline ) ) __STATIC_INLINE void __NOP(void)
Pokitto 5:7e5c566b1760 326 {
Pokitto 5:7e5c566b1760 327 __ASM volatile ("nop");
Pokitto 5:7e5c566b1760 328 }
Pokitto 5:7e5c566b1760 329
Pokitto 5:7e5c566b1760 330
Pokitto 5:7e5c566b1760 331 /** \brief Wait For Interrupt
Pokitto 5:7e5c566b1760 332
Pokitto 5:7e5c566b1760 333 Wait For Interrupt is a hint instruction that suspends execution
Pokitto 5:7e5c566b1760 334 until one of a number of events occurs.
Pokitto 5:7e5c566b1760 335 */
Pokitto 5:7e5c566b1760 336 __attribute__( ( always_inline ) ) __STATIC_INLINE void __WFI(void)
Pokitto 5:7e5c566b1760 337 {
Pokitto 5:7e5c566b1760 338 __ASM volatile ("wfi");
Pokitto 5:7e5c566b1760 339 }
Pokitto 5:7e5c566b1760 340
Pokitto 5:7e5c566b1760 341
Pokitto 5:7e5c566b1760 342 /** \brief Wait For Event
Pokitto 5:7e5c566b1760 343
Pokitto 5:7e5c566b1760 344 Wait For Event is a hint instruction that permits the processor to enter
Pokitto 5:7e5c566b1760 345 a low-power state until one of a number of events occurs.
Pokitto 5:7e5c566b1760 346 */
Pokitto 5:7e5c566b1760 347 __attribute__( ( always_inline ) ) __STATIC_INLINE void __WFE(void)
Pokitto 5:7e5c566b1760 348 {
Pokitto 5:7e5c566b1760 349 __ASM volatile ("wfe");
Pokitto 5:7e5c566b1760 350 }
Pokitto 5:7e5c566b1760 351
Pokitto 5:7e5c566b1760 352
Pokitto 5:7e5c566b1760 353 /** \brief Send Event
Pokitto 5:7e5c566b1760 354
Pokitto 5:7e5c566b1760 355 Send Event is a hint instruction. It causes an event to be signaled to the CPU.
Pokitto 5:7e5c566b1760 356 */
Pokitto 5:7e5c566b1760 357 __attribute__( ( always_inline ) ) __STATIC_INLINE void __SEV(void)
Pokitto 5:7e5c566b1760 358 {
Pokitto 5:7e5c566b1760 359 __ASM volatile ("sev");
Pokitto 5:7e5c566b1760 360 }
Pokitto 5:7e5c566b1760 361
Pokitto 5:7e5c566b1760 362
Pokitto 5:7e5c566b1760 363 /** \brief Instruction Synchronization Barrier
Pokitto 5:7e5c566b1760 364
Pokitto 5:7e5c566b1760 365 Instruction Synchronization Barrier flushes the pipeline in the processor,
Pokitto 5:7e5c566b1760 366 so that all instructions following the ISB are fetched from cache or
Pokitto 5:7e5c566b1760 367 memory, after the instruction has been completed.
Pokitto 5:7e5c566b1760 368 */
Pokitto 5:7e5c566b1760 369 __attribute__( ( always_inline ) ) __STATIC_INLINE void __ISB(void)
Pokitto 5:7e5c566b1760 370 {
Pokitto 5:7e5c566b1760 371 __ASM volatile ("isb");
Pokitto 5:7e5c566b1760 372 }
Pokitto 5:7e5c566b1760 373
Pokitto 5:7e5c566b1760 374
Pokitto 5:7e5c566b1760 375 /** \brief Data Synchronization Barrier
Pokitto 5:7e5c566b1760 376
Pokitto 5:7e5c566b1760 377 This function acts as a special kind of Data Memory Barrier.
Pokitto 5:7e5c566b1760 378 It completes when all explicit memory accesses before this instruction complete.
Pokitto 5:7e5c566b1760 379 */
Pokitto 5:7e5c566b1760 380 __attribute__( ( always_inline ) ) __STATIC_INLINE void __DSB(void)
Pokitto 5:7e5c566b1760 381 {
Pokitto 5:7e5c566b1760 382 __ASM volatile ("dsb");
Pokitto 5:7e5c566b1760 383 }
Pokitto 5:7e5c566b1760 384
Pokitto 5:7e5c566b1760 385
Pokitto 5:7e5c566b1760 386 /** \brief Data Memory Barrier
Pokitto 5:7e5c566b1760 387
Pokitto 5:7e5c566b1760 388 This function ensures the apparent order of the explicit memory operations before
Pokitto 5:7e5c566b1760 389 and after the instruction, without ensuring their completion.
Pokitto 5:7e5c566b1760 390 */
Pokitto 5:7e5c566b1760 391 __attribute__( ( always_inline ) ) __STATIC_INLINE void __DMB(void)
Pokitto 5:7e5c566b1760 392 {
Pokitto 5:7e5c566b1760 393 __ASM volatile ("dmb");
Pokitto 5:7e5c566b1760 394 }
Pokitto 5:7e5c566b1760 395
Pokitto 5:7e5c566b1760 396
Pokitto 5:7e5c566b1760 397 /** \brief Reverse byte order (32 bit)
Pokitto 5:7e5c566b1760 398
Pokitto 5:7e5c566b1760 399 This function reverses the byte order in integer value.
Pokitto 5:7e5c566b1760 400
Pokitto 5:7e5c566b1760 401 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 402 \return Reversed value
Pokitto 5:7e5c566b1760 403 */
Pokitto 5:7e5c566b1760 404 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV(uint32_t value)
Pokitto 5:7e5c566b1760 405 {
Pokitto 5:7e5c566b1760 406 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
Pokitto 5:7e5c566b1760 407 return __builtin_bswap32(value);
Pokitto 5:7e5c566b1760 408 #else
Pokitto 5:7e5c566b1760 409 uint32_t result;
Pokitto 5:7e5c566b1760 410
Pokitto 5:7e5c566b1760 411 __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
Pokitto 5:7e5c566b1760 412 return(result);
Pokitto 5:7e5c566b1760 413 #endif
Pokitto 5:7e5c566b1760 414 }
Pokitto 5:7e5c566b1760 415
Pokitto 5:7e5c566b1760 416
Pokitto 5:7e5c566b1760 417 /** \brief Reverse byte order (16 bit)
Pokitto 5:7e5c566b1760 418
Pokitto 5:7e5c566b1760 419 This function reverses the byte order in two unsigned short values.
Pokitto 5:7e5c566b1760 420
Pokitto 5:7e5c566b1760 421 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 422 \return Reversed value
Pokitto 5:7e5c566b1760 423 */
Pokitto 5:7e5c566b1760 424 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __REV16(uint32_t value)
Pokitto 5:7e5c566b1760 425 {
Pokitto 5:7e5c566b1760 426 uint32_t result;
Pokitto 5:7e5c566b1760 427
Pokitto 5:7e5c566b1760 428 __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
Pokitto 5:7e5c566b1760 429 return(result);
Pokitto 5:7e5c566b1760 430 }
Pokitto 5:7e5c566b1760 431
Pokitto 5:7e5c566b1760 432
Pokitto 5:7e5c566b1760 433 /** \brief Reverse byte order in signed short value
Pokitto 5:7e5c566b1760 434
Pokitto 5:7e5c566b1760 435 This function reverses the byte order in a signed short value with sign extension to integer.
Pokitto 5:7e5c566b1760 436
Pokitto 5:7e5c566b1760 437 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 438 \return Reversed value
Pokitto 5:7e5c566b1760 439 */
Pokitto 5:7e5c566b1760 440 __attribute__( ( always_inline ) ) __STATIC_INLINE int32_t __REVSH(int32_t value)
Pokitto 5:7e5c566b1760 441 {
Pokitto 5:7e5c566b1760 442 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
Pokitto 5:7e5c566b1760 443 return (short)__builtin_bswap16(value);
Pokitto 5:7e5c566b1760 444 #else
Pokitto 5:7e5c566b1760 445 uint32_t result;
Pokitto 5:7e5c566b1760 446
Pokitto 5:7e5c566b1760 447 __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) );
Pokitto 5:7e5c566b1760 448 return(result);
Pokitto 5:7e5c566b1760 449 #endif
Pokitto 5:7e5c566b1760 450 }
Pokitto 5:7e5c566b1760 451
Pokitto 5:7e5c566b1760 452
Pokitto 5:7e5c566b1760 453 /** \brief Rotate Right in unsigned value (32 bit)
Pokitto 5:7e5c566b1760 454
Pokitto 5:7e5c566b1760 455 This function Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
Pokitto 5:7e5c566b1760 456
Pokitto 5:7e5c566b1760 457 \param [in] value Value to rotate
Pokitto 5:7e5c566b1760 458 \param [in] value Number of Bits to rotate
Pokitto 5:7e5c566b1760 459 \return Rotated value
Pokitto 5:7e5c566b1760 460 */
Pokitto 5:7e5c566b1760 461 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __ROR(uint32_t op1, uint32_t op2)
Pokitto 5:7e5c566b1760 462 {
Pokitto 5:7e5c566b1760 463 return (op1 >> op2) | (op1 << (32 - op2));
Pokitto 5:7e5c566b1760 464 }
Pokitto 5:7e5c566b1760 465
Pokitto 5:7e5c566b1760 466
Pokitto 5:7e5c566b1760 467 /** \brief Breakpoint
Pokitto 5:7e5c566b1760 468
Pokitto 5:7e5c566b1760 469 This function causes the processor to enter Debug state.
Pokitto 5:7e5c566b1760 470 Debug tools can use this to investigate system state when the instruction at a particular address is reached.
Pokitto 5:7e5c566b1760 471
Pokitto 5:7e5c566b1760 472 \param [in] value is ignored by the processor.
Pokitto 5:7e5c566b1760 473 If required, a debugger can use it to store additional information about the breakpoint.
Pokitto 5:7e5c566b1760 474 */
Pokitto 5:7e5c566b1760 475 #define __BKPT(value) __ASM volatile ("bkpt "#value)
Pokitto 5:7e5c566b1760 476
Pokitto 5:7e5c566b1760 477
Pokitto 5:7e5c566b1760 478 #if (__CORTEX_M >= 0x03)
Pokitto 5:7e5c566b1760 479
Pokitto 5:7e5c566b1760 480 /** \brief Reverse bit order of value
Pokitto 5:7e5c566b1760 481
Pokitto 5:7e5c566b1760 482 This function reverses the bit order of the given value.
Pokitto 5:7e5c566b1760 483
Pokitto 5:7e5c566b1760 484 \param [in] value Value to reverse
Pokitto 5:7e5c566b1760 485 \return Reversed value
Pokitto 5:7e5c566b1760 486 */
Pokitto 5:7e5c566b1760 487 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
Pokitto 5:7e5c566b1760 488 {
Pokitto 5:7e5c566b1760 489 uint32_t result;
Pokitto 5:7e5c566b1760 490
Pokitto 5:7e5c566b1760 491 __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
Pokitto 5:7e5c566b1760 492 return(result);
Pokitto 5:7e5c566b1760 493 }
Pokitto 5:7e5c566b1760 494
Pokitto 5:7e5c566b1760 495
Pokitto 5:7e5c566b1760 496 /** \brief LDR Exclusive (8 bit)
Pokitto 5:7e5c566b1760 497
Pokitto 5:7e5c566b1760 498 This function performs a exclusive LDR command for 8 bit value.
Pokitto 5:7e5c566b1760 499
Pokitto 5:7e5c566b1760 500 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 501 \return value of type uint8_t at (*ptr)
Pokitto 5:7e5c566b1760 502 */
Pokitto 5:7e5c566b1760 503 __attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __LDREXB(volatile uint8_t *addr)
Pokitto 5:7e5c566b1760 504 {
Pokitto 5:7e5c566b1760 505 uint32_t result;
Pokitto 5:7e5c566b1760 506
Pokitto 5:7e5c566b1760 507 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
Pokitto 5:7e5c566b1760 508 __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) );
Pokitto 5:7e5c566b1760 509 #else
Pokitto 5:7e5c566b1760 510 /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not
Pokitto 5:7e5c566b1760 511 accepted by assembler. So has to use following less efficient pattern.
Pokitto 5:7e5c566b1760 512 */
Pokitto 5:7e5c566b1760 513 __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );
Pokitto 5:7e5c566b1760 514 #endif
Pokitto 5:7e5c566b1760 515 return(result);
Pokitto 5:7e5c566b1760 516 }
Pokitto 5:7e5c566b1760 517
Pokitto 5:7e5c566b1760 518
Pokitto 5:7e5c566b1760 519 /** \brief LDR Exclusive (16 bit)
Pokitto 5:7e5c566b1760 520
Pokitto 5:7e5c566b1760 521 This function performs a exclusive LDR command for 16 bit values.
Pokitto 5:7e5c566b1760 522
Pokitto 5:7e5c566b1760 523 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 524 \return value of type uint16_t at (*ptr)
Pokitto 5:7e5c566b1760 525 */
Pokitto 5:7e5c566b1760 526 __attribute__( ( always_inline ) ) __STATIC_INLINE uint16_t __LDREXH(volatile uint16_t *addr)
Pokitto 5:7e5c566b1760 527 {
Pokitto 5:7e5c566b1760 528 uint32_t result;
Pokitto 5:7e5c566b1760 529
Pokitto 5:7e5c566b1760 530 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
Pokitto 5:7e5c566b1760 531 __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) );
Pokitto 5:7e5c566b1760 532 #else
Pokitto 5:7e5c566b1760 533 /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not
Pokitto 5:7e5c566b1760 534 accepted by assembler. So has to use following less efficient pattern.
Pokitto 5:7e5c566b1760 535 */
Pokitto 5:7e5c566b1760 536 __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" );
Pokitto 5:7e5c566b1760 537 #endif
Pokitto 5:7e5c566b1760 538 return(result);
Pokitto 5:7e5c566b1760 539 }
Pokitto 5:7e5c566b1760 540
Pokitto 5:7e5c566b1760 541
Pokitto 5:7e5c566b1760 542 /** \brief LDR Exclusive (32 bit)
Pokitto 5:7e5c566b1760 543
Pokitto 5:7e5c566b1760 544 This function performs a exclusive LDR command for 32 bit values.
Pokitto 5:7e5c566b1760 545
Pokitto 5:7e5c566b1760 546 \param [in] ptr Pointer to data
Pokitto 5:7e5c566b1760 547 \return value of type uint32_t at (*ptr)
Pokitto 5:7e5c566b1760 548 */
Pokitto 5:7e5c566b1760 549 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __LDREXW(volatile uint32_t *addr)
Pokitto 5:7e5c566b1760 550 {
Pokitto 5:7e5c566b1760 551 uint32_t result;
Pokitto 5:7e5c566b1760 552
Pokitto 5:7e5c566b1760 553 __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) );
Pokitto 5:7e5c566b1760 554 return(result);
Pokitto 5:7e5c566b1760 555 }
Pokitto 5:7e5c566b1760 556
Pokitto 5:7e5c566b1760 557
Pokitto 5:7e5c566b1760 558 /** \brief STR Exclusive (8 bit)
Pokitto 5:7e5c566b1760 559
Pokitto 5:7e5c566b1760 560 This function performs a exclusive STR command for 8 bit values.
Pokitto 5:7e5c566b1760 561
Pokitto 5:7e5c566b1760 562 \param [in] value Value to store
Pokitto 5:7e5c566b1760 563 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 564 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 565 \return 1 Function failed
Pokitto 5:7e5c566b1760 566 */
Pokitto 5:7e5c566b1760 567 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
Pokitto 5:7e5c566b1760 568 {
Pokitto 5:7e5c566b1760 569 uint32_t result;
Pokitto 5:7e5c566b1760 570
Pokitto 5:7e5c566b1760 571 __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
Pokitto 5:7e5c566b1760 572 return(result);
Pokitto 5:7e5c566b1760 573 }
Pokitto 5:7e5c566b1760 574
Pokitto 5:7e5c566b1760 575
Pokitto 5:7e5c566b1760 576 /** \brief STR Exclusive (16 bit)
Pokitto 5:7e5c566b1760 577
Pokitto 5:7e5c566b1760 578 This function performs a exclusive STR command for 16 bit values.
Pokitto 5:7e5c566b1760 579
Pokitto 5:7e5c566b1760 580 \param [in] value Value to store
Pokitto 5:7e5c566b1760 581 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 582 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 583 \return 1 Function failed
Pokitto 5:7e5c566b1760 584 */
Pokitto 5:7e5c566b1760 585 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
Pokitto 5:7e5c566b1760 586 {
Pokitto 5:7e5c566b1760 587 uint32_t result;
Pokitto 5:7e5c566b1760 588
Pokitto 5:7e5c566b1760 589 __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
Pokitto 5:7e5c566b1760 590 return(result);
Pokitto 5:7e5c566b1760 591 }
Pokitto 5:7e5c566b1760 592
Pokitto 5:7e5c566b1760 593
Pokitto 5:7e5c566b1760 594 /** \brief STR Exclusive (32 bit)
Pokitto 5:7e5c566b1760 595
Pokitto 5:7e5c566b1760 596 This function performs a exclusive STR command for 32 bit values.
Pokitto 5:7e5c566b1760 597
Pokitto 5:7e5c566b1760 598 \param [in] value Value to store
Pokitto 5:7e5c566b1760 599 \param [in] ptr Pointer to location
Pokitto 5:7e5c566b1760 600 \return 0 Function succeeded
Pokitto 5:7e5c566b1760 601 \return 1 Function failed
Pokitto 5:7e5c566b1760 602 */
Pokitto 5:7e5c566b1760 603 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
Pokitto 5:7e5c566b1760 604 {
Pokitto 5:7e5c566b1760 605 uint32_t result;
Pokitto 5:7e5c566b1760 606
Pokitto 5:7e5c566b1760 607 __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) );
Pokitto 5:7e5c566b1760 608 return(result);
Pokitto 5:7e5c566b1760 609 }
Pokitto 5:7e5c566b1760 610
Pokitto 5:7e5c566b1760 611
Pokitto 5:7e5c566b1760 612 /** \brief Remove the exclusive lock
Pokitto 5:7e5c566b1760 613
Pokitto 5:7e5c566b1760 614 This function removes the exclusive lock which is created by LDREX.
Pokitto 5:7e5c566b1760 615
Pokitto 5:7e5c566b1760 616 */
Pokitto 5:7e5c566b1760 617 __attribute__( ( always_inline ) ) __STATIC_INLINE void __CLREX(void)
Pokitto 5:7e5c566b1760 618 {
Pokitto 5:7e5c566b1760 619 __ASM volatile ("clrex" ::: "memory");
Pokitto 5:7e5c566b1760 620 }
Pokitto 5:7e5c566b1760 621
Pokitto 5:7e5c566b1760 622
Pokitto 5:7e5c566b1760 623 /** \brief Signed Saturate
Pokitto 5:7e5c566b1760 624
Pokitto 5:7e5c566b1760 625 This function saturates a signed value.
Pokitto 5:7e5c566b1760 626
Pokitto 5:7e5c566b1760 627 \param [in] value Value to be saturated
Pokitto 5:7e5c566b1760 628 \param [in] sat Bit position to saturate to (1..32)
Pokitto 5:7e5c566b1760 629 \return Saturated value
Pokitto 5:7e5c566b1760 630 */
Pokitto 5:7e5c566b1760 631 #define __SSAT(ARG1,ARG2) \
Pokitto 5:7e5c566b1760 632 ({ \
Pokitto 5:7e5c566b1760 633 uint32_t __RES, __ARG1 = (ARG1); \
Pokitto 5:7e5c566b1760 634 __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
Pokitto 5:7e5c566b1760 635 __RES; \
Pokitto 5:7e5c566b1760 636 })
Pokitto 5:7e5c566b1760 637
Pokitto 5:7e5c566b1760 638
Pokitto 5:7e5c566b1760 639 /** \brief Unsigned Saturate
Pokitto 5:7e5c566b1760 640
Pokitto 5:7e5c566b1760 641 This function saturates an unsigned value.
Pokitto 5:7e5c566b1760 642
Pokitto 5:7e5c566b1760 643 \param [in] value Value to be saturated
Pokitto 5:7e5c566b1760 644 \param [in] sat Bit position to saturate to (0..31)
Pokitto 5:7e5c566b1760 645 \return Saturated value
Pokitto 5:7e5c566b1760 646 */
Pokitto 5:7e5c566b1760 647 #define __USAT(ARG1,ARG2) \
Pokitto 5:7e5c566b1760 648 ({ \
Pokitto 5:7e5c566b1760 649 uint32_t __RES, __ARG1 = (ARG1); \
Pokitto 5:7e5c566b1760 650 __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
Pokitto 5:7e5c566b1760 651 __RES; \
Pokitto 5:7e5c566b1760 652 })
Pokitto 5:7e5c566b1760 653
Pokitto 5:7e5c566b1760 654
Pokitto 5:7e5c566b1760 655 /** \brief Count leading zeros
Pokitto 5:7e5c566b1760 656
Pokitto 5:7e5c566b1760 657 This function counts the number of leading zeros of a data value.
Pokitto 5:7e5c566b1760 658
Pokitto 5:7e5c566b1760 659 \param [in] value Value to count the leading zeros
Pokitto 5:7e5c566b1760 660 \return number of leading zeros in value
Pokitto 5:7e5c566b1760 661 */
Pokitto 5:7e5c566b1760 662 __attribute__( ( always_inline ) ) __STATIC_INLINE uint8_t __CLZ(uint32_t value)
Pokitto 5:7e5c566b1760 663 {
Pokitto 5:7e5c566b1760 664 uint32_t result;
Pokitto 5:7e5c566b1760 665
Pokitto 5:7e5c566b1760 666 __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) );
Pokitto 5:7e5c566b1760 667 return(result);
Pokitto 5:7e5c566b1760 668 }
Pokitto 5:7e5c566b1760 669
Pokitto 5:7e5c566b1760 670 #endif /* (__CORTEX_M >= 0x03) */
Pokitto 5:7e5c566b1760 671
Pokitto 5:7e5c566b1760 672
Pokitto 5:7e5c566b1760 673
Pokitto 5:7e5c566b1760 674
Pokitto 5:7e5c566b1760 675 #elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
Pokitto 5:7e5c566b1760 676 /* TASKING carm specific functions */
Pokitto 5:7e5c566b1760 677
Pokitto 5:7e5c566b1760 678 /*
Pokitto 5:7e5c566b1760 679 * The CMSIS functions have been implemented as intrinsics in the compiler.
Pokitto 5:7e5c566b1760 680 * Please use "carm -?i" to get an up to date list of all intrinsics,
Pokitto 5:7e5c566b1760 681 * Including the CMSIS ones.
Pokitto 5:7e5c566b1760 682 */
Pokitto 5:7e5c566b1760 683
Pokitto 5:7e5c566b1760 684 #endif
Pokitto 5:7e5c566b1760 685
Pokitto 5:7e5c566b1760 686 /*@}*/ /* end of group CMSIS_Core_InstructionInterface */
Pokitto 5:7e5c566b1760 687
Pokitto 5:7e5c566b1760 688 #endif /* __CORE_CMINSTR_H */