mouvement AX12 petit robot version 2

Fork of command_AX12_petit_robot_v2 by CRAC Team

Committer:
ClementBreteau
Date:
Fri May 12 14:35:09 2017 +0000
Revision:
7:ad4a19e26b84
Parent:
2:99b1cb0d9f5e
position ax12

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SquirrelGod 2:99b1cb0d9f5e 1 /**************************************************************************//**
SquirrelGod 2:99b1cb0d9f5e 2 * @file core_cmInstr.h
SquirrelGod 2:99b1cb0d9f5e 3 * @brief CMSIS Cortex-M Core Instruction Access Header File
SquirrelGod 2:99b1cb0d9f5e 4 * @version V3.00
SquirrelGod 2:99b1cb0d9f5e 5 * @date 09. December 2011
SquirrelGod 2:99b1cb0d9f5e 6 *
SquirrelGod 2:99b1cb0d9f5e 7 * @note
SquirrelGod 2:99b1cb0d9f5e 8 * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
SquirrelGod 2:99b1cb0d9f5e 9 *
SquirrelGod 2:99b1cb0d9f5e 10 * @par
SquirrelGod 2:99b1cb0d9f5e 11 * ARM Limited (ARM) is supplying this software for use with Cortex-M
SquirrelGod 2:99b1cb0d9f5e 12 * processor based microcontrollers. This file can be freely distributed
SquirrelGod 2:99b1cb0d9f5e 13 * within development tools that are supporting such ARM based processors.
SquirrelGod 2:99b1cb0d9f5e 14 *
SquirrelGod 2:99b1cb0d9f5e 15 * @par
SquirrelGod 2:99b1cb0d9f5e 16 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
SquirrelGod 2:99b1cb0d9f5e 17 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
SquirrelGod 2:99b1cb0d9f5e 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
SquirrelGod 2:99b1cb0d9f5e 19 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
SquirrelGod 2:99b1cb0d9f5e 20 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
SquirrelGod 2:99b1cb0d9f5e 21 *
SquirrelGod 2:99b1cb0d9f5e 22 ******************************************************************************/
SquirrelGod 2:99b1cb0d9f5e 23
SquirrelGod 2:99b1cb0d9f5e 24 #ifndef __CORE_CMINSTR_H
SquirrelGod 2:99b1cb0d9f5e 25 #define __CORE_CMINSTR_H
SquirrelGod 2:99b1cb0d9f5e 26
SquirrelGod 2:99b1cb0d9f5e 27
SquirrelGod 2:99b1cb0d9f5e 28 /* ########################## Core Instruction Access ######################### */
SquirrelGod 2:99b1cb0d9f5e 29 /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
SquirrelGod 2:99b1cb0d9f5e 30 Access to dedicated instructions
SquirrelGod 2:99b1cb0d9f5e 31 @{
SquirrelGod 2:99b1cb0d9f5e 32 */
SquirrelGod 2:99b1cb0d9f5e 33
SquirrelGod 2:99b1cb0d9f5e 34 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
SquirrelGod 2:99b1cb0d9f5e 35 /* ARM armcc specific functions */
SquirrelGod 2:99b1cb0d9f5e 36
SquirrelGod 2:99b1cb0d9f5e 37 #if (__ARMCC_VERSION < 400677)
SquirrelGod 2:99b1cb0d9f5e 38 #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
SquirrelGod 2:99b1cb0d9f5e 39 #endif
SquirrelGod 2:99b1cb0d9f5e 40
SquirrelGod 2:99b1cb0d9f5e 41
SquirrelGod 2:99b1cb0d9f5e 42 /** \brief No Operation
SquirrelGod 2:99b1cb0d9f5e 43
SquirrelGod 2:99b1cb0d9f5e 44 No Operation does nothing. This instruction can be used for code alignment purposes.
SquirrelGod 2:99b1cb0d9f5e 45 */
SquirrelGod 2:99b1cb0d9f5e 46 #define __NOP __nop
SquirrelGod 2:99b1cb0d9f5e 47
SquirrelGod 2:99b1cb0d9f5e 48
SquirrelGod 2:99b1cb0d9f5e 49 /** \brief Wait For Interrupt
SquirrelGod 2:99b1cb0d9f5e 50
SquirrelGod 2:99b1cb0d9f5e 51 Wait For Interrupt is a hint instruction that suspends execution
SquirrelGod 2:99b1cb0d9f5e 52 until one of a number of events occurs.
SquirrelGod 2:99b1cb0d9f5e 53 */
SquirrelGod 2:99b1cb0d9f5e 54 #define __WFI __wfi
SquirrelGod 2:99b1cb0d9f5e 55
SquirrelGod 2:99b1cb0d9f5e 56
SquirrelGod 2:99b1cb0d9f5e 57 /** \brief Wait For Event
SquirrelGod 2:99b1cb0d9f5e 58
SquirrelGod 2:99b1cb0d9f5e 59 Wait For Event is a hint instruction that permits the processor to enter
SquirrelGod 2:99b1cb0d9f5e 60 a low-power state until one of a number of events occurs.
SquirrelGod 2:99b1cb0d9f5e 61 */
SquirrelGod 2:99b1cb0d9f5e 62 #define __WFE __wfe
SquirrelGod 2:99b1cb0d9f5e 63
SquirrelGod 2:99b1cb0d9f5e 64
SquirrelGod 2:99b1cb0d9f5e 65 /** \brief Send Event
SquirrelGod 2:99b1cb0d9f5e 66
SquirrelGod 2:99b1cb0d9f5e 67 Send Event is a hint instruction. It causes an event to be signaled to the CPU.
SquirrelGod 2:99b1cb0d9f5e 68 */
SquirrelGod 2:99b1cb0d9f5e 69 #define __SEV __sev
SquirrelGod 2:99b1cb0d9f5e 70
SquirrelGod 2:99b1cb0d9f5e 71
SquirrelGod 2:99b1cb0d9f5e 72 /** \brief Instruction Synchronization Barrier
SquirrelGod 2:99b1cb0d9f5e 73
SquirrelGod 2:99b1cb0d9f5e 74 Instruction Synchronization Barrier flushes the pipeline in the processor,
SquirrelGod 2:99b1cb0d9f5e 75 so that all instructions following the ISB are fetched from cache or
SquirrelGod 2:99b1cb0d9f5e 76 memory, after the instruction has been completed.
SquirrelGod 2:99b1cb0d9f5e 77 */
SquirrelGod 2:99b1cb0d9f5e 78 #define __ISB() __isb(0xF)
SquirrelGod 2:99b1cb0d9f5e 79
SquirrelGod 2:99b1cb0d9f5e 80
SquirrelGod 2:99b1cb0d9f5e 81 /** \brief Data Synchronization Barrier
SquirrelGod 2:99b1cb0d9f5e 82
SquirrelGod 2:99b1cb0d9f5e 83 This function acts as a special kind of Data Memory Barrier.
SquirrelGod 2:99b1cb0d9f5e 84 It completes when all explicit memory accesses before this instruction complete.
SquirrelGod 2:99b1cb0d9f5e 85 */
SquirrelGod 2:99b1cb0d9f5e 86 #define __DSB() __dsb(0xF)
SquirrelGod 2:99b1cb0d9f5e 87
SquirrelGod 2:99b1cb0d9f5e 88
SquirrelGod 2:99b1cb0d9f5e 89 /** \brief Data Memory Barrier
SquirrelGod 2:99b1cb0d9f5e 90
SquirrelGod 2:99b1cb0d9f5e 91 This function ensures the apparent order of the explicit memory operations before
SquirrelGod 2:99b1cb0d9f5e 92 and after the instruction, without ensuring their completion.
SquirrelGod 2:99b1cb0d9f5e 93 */
SquirrelGod 2:99b1cb0d9f5e 94 #define __DMB() __dmb(0xF)
SquirrelGod 2:99b1cb0d9f5e 95
SquirrelGod 2:99b1cb0d9f5e 96
SquirrelGod 2:99b1cb0d9f5e 97 /** \brief Reverse byte order (32 bit)
SquirrelGod 2:99b1cb0d9f5e 98
SquirrelGod 2:99b1cb0d9f5e 99 This function reverses the byte order in integer value.
SquirrelGod 2:99b1cb0d9f5e 100
SquirrelGod 2:99b1cb0d9f5e 101 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 102 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 103 */
SquirrelGod 2:99b1cb0d9f5e 104 #define __REV __rev
SquirrelGod 2:99b1cb0d9f5e 105
SquirrelGod 2:99b1cb0d9f5e 106
SquirrelGod 2:99b1cb0d9f5e 107 /** \brief Reverse byte order (16 bit)
SquirrelGod 2:99b1cb0d9f5e 108
SquirrelGod 2:99b1cb0d9f5e 109 This function reverses the byte order in two unsigned short values.
SquirrelGod 2:99b1cb0d9f5e 110
SquirrelGod 2:99b1cb0d9f5e 111 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 112 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 113 */
SquirrelGod 2:99b1cb0d9f5e 114 static __attribute__((section(".rev16_text"))) __INLINE __ASM uint32_t __REV16(uint32_t value)
SquirrelGod 2:99b1cb0d9f5e 115 {
SquirrelGod 2:99b1cb0d9f5e 116 rev16 r0, r0
SquirrelGod 2:99b1cb0d9f5e 117 bx lr
SquirrelGod 2:99b1cb0d9f5e 118 }
SquirrelGod 2:99b1cb0d9f5e 119
SquirrelGod 2:99b1cb0d9f5e 120
SquirrelGod 2:99b1cb0d9f5e 121 /** \brief Reverse byte order in signed short value
SquirrelGod 2:99b1cb0d9f5e 122
SquirrelGod 2:99b1cb0d9f5e 123 This function reverses the byte order in a signed short value with sign extension to integer.
SquirrelGod 2:99b1cb0d9f5e 124
SquirrelGod 2:99b1cb0d9f5e 125 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 126 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 127 */
SquirrelGod 2:99b1cb0d9f5e 128 static __attribute__((section(".revsh_text"))) __INLINE __ASM int32_t __REVSH(int32_t value)
SquirrelGod 2:99b1cb0d9f5e 129 {
SquirrelGod 2:99b1cb0d9f5e 130 revsh r0, r0
SquirrelGod 2:99b1cb0d9f5e 131 bx lr
SquirrelGod 2:99b1cb0d9f5e 132 }
SquirrelGod 2:99b1cb0d9f5e 133
SquirrelGod 2:99b1cb0d9f5e 134
SquirrelGod 2:99b1cb0d9f5e 135 #if (__CORTEX_M >= 0x03)
SquirrelGod 2:99b1cb0d9f5e 136
SquirrelGod 2:99b1cb0d9f5e 137 /** \brief Reverse bit order of value
SquirrelGod 2:99b1cb0d9f5e 138
SquirrelGod 2:99b1cb0d9f5e 139 This function reverses the bit order of the given value.
SquirrelGod 2:99b1cb0d9f5e 140
SquirrelGod 2:99b1cb0d9f5e 141 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 142 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 143 */
SquirrelGod 2:99b1cb0d9f5e 144 #define __RBIT __rbit
SquirrelGod 2:99b1cb0d9f5e 145
SquirrelGod 2:99b1cb0d9f5e 146
SquirrelGod 2:99b1cb0d9f5e 147 /** \brief LDR Exclusive (8 bit)
SquirrelGod 2:99b1cb0d9f5e 148
SquirrelGod 2:99b1cb0d9f5e 149 This function performs a exclusive LDR command for 8 bit value.
SquirrelGod 2:99b1cb0d9f5e 150
SquirrelGod 2:99b1cb0d9f5e 151 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 152 \return value of type uint8_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 153 */
SquirrelGod 2:99b1cb0d9f5e 154 #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr))
SquirrelGod 2:99b1cb0d9f5e 155
SquirrelGod 2:99b1cb0d9f5e 156
SquirrelGod 2:99b1cb0d9f5e 157 /** \brief LDR Exclusive (16 bit)
SquirrelGod 2:99b1cb0d9f5e 158
SquirrelGod 2:99b1cb0d9f5e 159 This function performs a exclusive LDR command for 16 bit values.
SquirrelGod 2:99b1cb0d9f5e 160
SquirrelGod 2:99b1cb0d9f5e 161 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 162 \return value of type uint16_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 163 */
SquirrelGod 2:99b1cb0d9f5e 164 #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr))
SquirrelGod 2:99b1cb0d9f5e 165
SquirrelGod 2:99b1cb0d9f5e 166
SquirrelGod 2:99b1cb0d9f5e 167 /** \brief LDR Exclusive (32 bit)
SquirrelGod 2:99b1cb0d9f5e 168
SquirrelGod 2:99b1cb0d9f5e 169 This function performs a exclusive LDR command for 32 bit values.
SquirrelGod 2:99b1cb0d9f5e 170
SquirrelGod 2:99b1cb0d9f5e 171 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 172 \return value of type uint32_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 173 */
SquirrelGod 2:99b1cb0d9f5e 174 #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr))
SquirrelGod 2:99b1cb0d9f5e 175
SquirrelGod 2:99b1cb0d9f5e 176
SquirrelGod 2:99b1cb0d9f5e 177 /** \brief STR Exclusive (8 bit)
SquirrelGod 2:99b1cb0d9f5e 178
SquirrelGod 2:99b1cb0d9f5e 179 This function performs a exclusive STR command for 8 bit values.
SquirrelGod 2:99b1cb0d9f5e 180
SquirrelGod 2:99b1cb0d9f5e 181 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 182 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 183 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 184 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 185 */
SquirrelGod 2:99b1cb0d9f5e 186 #define __STREXB(value, ptr) __strex(value, ptr)
SquirrelGod 2:99b1cb0d9f5e 187
SquirrelGod 2:99b1cb0d9f5e 188
SquirrelGod 2:99b1cb0d9f5e 189 /** \brief STR Exclusive (16 bit)
SquirrelGod 2:99b1cb0d9f5e 190
SquirrelGod 2:99b1cb0d9f5e 191 This function performs a exclusive STR command for 16 bit values.
SquirrelGod 2:99b1cb0d9f5e 192
SquirrelGod 2:99b1cb0d9f5e 193 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 194 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 195 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 196 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 197 */
SquirrelGod 2:99b1cb0d9f5e 198 #define __STREXH(value, ptr) __strex(value, ptr)
SquirrelGod 2:99b1cb0d9f5e 199
SquirrelGod 2:99b1cb0d9f5e 200
SquirrelGod 2:99b1cb0d9f5e 201 /** \brief STR Exclusive (32 bit)
SquirrelGod 2:99b1cb0d9f5e 202
SquirrelGod 2:99b1cb0d9f5e 203 This function performs a exclusive STR command for 32 bit values.
SquirrelGod 2:99b1cb0d9f5e 204
SquirrelGod 2:99b1cb0d9f5e 205 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 206 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 207 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 208 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 209 */
SquirrelGod 2:99b1cb0d9f5e 210 #define __STREXW(value, ptr) __strex(value, ptr)
SquirrelGod 2:99b1cb0d9f5e 211
SquirrelGod 2:99b1cb0d9f5e 212
SquirrelGod 2:99b1cb0d9f5e 213 /** \brief Remove the exclusive lock
SquirrelGod 2:99b1cb0d9f5e 214
SquirrelGod 2:99b1cb0d9f5e 215 This function removes the exclusive lock which is created by LDREX.
SquirrelGod 2:99b1cb0d9f5e 216
SquirrelGod 2:99b1cb0d9f5e 217 */
SquirrelGod 2:99b1cb0d9f5e 218 #define __CLREX __clrex
SquirrelGod 2:99b1cb0d9f5e 219
SquirrelGod 2:99b1cb0d9f5e 220
SquirrelGod 2:99b1cb0d9f5e 221 /** \brief Signed Saturate
SquirrelGod 2:99b1cb0d9f5e 222
SquirrelGod 2:99b1cb0d9f5e 223 This function saturates a signed value.
SquirrelGod 2:99b1cb0d9f5e 224
SquirrelGod 2:99b1cb0d9f5e 225 \param [in] value Value to be saturated
SquirrelGod 2:99b1cb0d9f5e 226 \param [in] sat Bit position to saturate to (1..32)
SquirrelGod 2:99b1cb0d9f5e 227 \return Saturated value
SquirrelGod 2:99b1cb0d9f5e 228 */
SquirrelGod 2:99b1cb0d9f5e 229 #define __SSAT __ssat
SquirrelGod 2:99b1cb0d9f5e 230
SquirrelGod 2:99b1cb0d9f5e 231
SquirrelGod 2:99b1cb0d9f5e 232 /** \brief Unsigned Saturate
SquirrelGod 2:99b1cb0d9f5e 233
SquirrelGod 2:99b1cb0d9f5e 234 This function saturates an unsigned value.
SquirrelGod 2:99b1cb0d9f5e 235
SquirrelGod 2:99b1cb0d9f5e 236 \param [in] value Value to be saturated
SquirrelGod 2:99b1cb0d9f5e 237 \param [in] sat Bit position to saturate to (0..31)
SquirrelGod 2:99b1cb0d9f5e 238 \return Saturated value
SquirrelGod 2:99b1cb0d9f5e 239 */
SquirrelGod 2:99b1cb0d9f5e 240 #define __USAT __usat
SquirrelGod 2:99b1cb0d9f5e 241
SquirrelGod 2:99b1cb0d9f5e 242
SquirrelGod 2:99b1cb0d9f5e 243 /** \brief Count leading zeros
SquirrelGod 2:99b1cb0d9f5e 244
SquirrelGod 2:99b1cb0d9f5e 245 This function counts the number of leading zeros of a data value.
SquirrelGod 2:99b1cb0d9f5e 246
SquirrelGod 2:99b1cb0d9f5e 247 \param [in] value Value to count the leading zeros
SquirrelGod 2:99b1cb0d9f5e 248 \return number of leading zeros in value
SquirrelGod 2:99b1cb0d9f5e 249 */
SquirrelGod 2:99b1cb0d9f5e 250 #define __CLZ __clz
SquirrelGod 2:99b1cb0d9f5e 251
SquirrelGod 2:99b1cb0d9f5e 252 #endif /* (__CORTEX_M >= 0x03) */
SquirrelGod 2:99b1cb0d9f5e 253
SquirrelGod 2:99b1cb0d9f5e 254
SquirrelGod 2:99b1cb0d9f5e 255
SquirrelGod 2:99b1cb0d9f5e 256 #elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
SquirrelGod 2:99b1cb0d9f5e 257 /* IAR iccarm specific functions */
SquirrelGod 2:99b1cb0d9f5e 258
SquirrelGod 2:99b1cb0d9f5e 259 #include <cmsis_iar.h>
SquirrelGod 2:99b1cb0d9f5e 260
SquirrelGod 2:99b1cb0d9f5e 261
SquirrelGod 2:99b1cb0d9f5e 262 #elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
SquirrelGod 2:99b1cb0d9f5e 263 /* GNU gcc specific functions */
SquirrelGod 2:99b1cb0d9f5e 264
SquirrelGod 2:99b1cb0d9f5e 265 /** \brief No Operation
SquirrelGod 2:99b1cb0d9f5e 266
SquirrelGod 2:99b1cb0d9f5e 267 No Operation does nothing. This instruction can be used for code alignment purposes.
SquirrelGod 2:99b1cb0d9f5e 268 */
SquirrelGod 2:99b1cb0d9f5e 269 __attribute__( ( always_inline ) ) static __INLINE void __NOP(void)
SquirrelGod 2:99b1cb0d9f5e 270 {
SquirrelGod 2:99b1cb0d9f5e 271 __ASM volatile ("nop");
SquirrelGod 2:99b1cb0d9f5e 272 }
SquirrelGod 2:99b1cb0d9f5e 273
SquirrelGod 2:99b1cb0d9f5e 274
SquirrelGod 2:99b1cb0d9f5e 275 /** \brief Wait For Interrupt
SquirrelGod 2:99b1cb0d9f5e 276
SquirrelGod 2:99b1cb0d9f5e 277 Wait For Interrupt is a hint instruction that suspends execution
SquirrelGod 2:99b1cb0d9f5e 278 until one of a number of events occurs.
SquirrelGod 2:99b1cb0d9f5e 279 */
SquirrelGod 2:99b1cb0d9f5e 280 __attribute__( ( always_inline ) ) static __INLINE void __WFI(void)
SquirrelGod 2:99b1cb0d9f5e 281 {
SquirrelGod 2:99b1cb0d9f5e 282 __ASM volatile ("wfi");
SquirrelGod 2:99b1cb0d9f5e 283 }
SquirrelGod 2:99b1cb0d9f5e 284
SquirrelGod 2:99b1cb0d9f5e 285
SquirrelGod 2:99b1cb0d9f5e 286 /** \brief Wait For Event
SquirrelGod 2:99b1cb0d9f5e 287
SquirrelGod 2:99b1cb0d9f5e 288 Wait For Event is a hint instruction that permits the processor to enter
SquirrelGod 2:99b1cb0d9f5e 289 a low-power state until one of a number of events occurs.
SquirrelGod 2:99b1cb0d9f5e 290 */
SquirrelGod 2:99b1cb0d9f5e 291 __attribute__( ( always_inline ) ) static __INLINE void __WFE(void)
SquirrelGod 2:99b1cb0d9f5e 292 {
SquirrelGod 2:99b1cb0d9f5e 293 __ASM volatile ("wfe");
SquirrelGod 2:99b1cb0d9f5e 294 }
SquirrelGod 2:99b1cb0d9f5e 295
SquirrelGod 2:99b1cb0d9f5e 296
SquirrelGod 2:99b1cb0d9f5e 297 /** \brief Send Event
SquirrelGod 2:99b1cb0d9f5e 298
SquirrelGod 2:99b1cb0d9f5e 299 Send Event is a hint instruction. It causes an event to be signaled to the CPU.
SquirrelGod 2:99b1cb0d9f5e 300 */
SquirrelGod 2:99b1cb0d9f5e 301 __attribute__( ( always_inline ) ) static __INLINE void __SEV(void)
SquirrelGod 2:99b1cb0d9f5e 302 {
SquirrelGod 2:99b1cb0d9f5e 303 __ASM volatile ("sev");
SquirrelGod 2:99b1cb0d9f5e 304 }
SquirrelGod 2:99b1cb0d9f5e 305
SquirrelGod 2:99b1cb0d9f5e 306
SquirrelGod 2:99b1cb0d9f5e 307 /** \brief Instruction Synchronization Barrier
SquirrelGod 2:99b1cb0d9f5e 308
SquirrelGod 2:99b1cb0d9f5e 309 Instruction Synchronization Barrier flushes the pipeline in the processor,
SquirrelGod 2:99b1cb0d9f5e 310 so that all instructions following the ISB are fetched from cache or
SquirrelGod 2:99b1cb0d9f5e 311 memory, after the instruction has been completed.
SquirrelGod 2:99b1cb0d9f5e 312 */
SquirrelGod 2:99b1cb0d9f5e 313 __attribute__( ( always_inline ) ) static __INLINE void __ISB(void)
SquirrelGod 2:99b1cb0d9f5e 314 {
SquirrelGod 2:99b1cb0d9f5e 315 __ASM volatile ("isb");
SquirrelGod 2:99b1cb0d9f5e 316 }
SquirrelGod 2:99b1cb0d9f5e 317
SquirrelGod 2:99b1cb0d9f5e 318
SquirrelGod 2:99b1cb0d9f5e 319 /** \brief Data Synchronization Barrier
SquirrelGod 2:99b1cb0d9f5e 320
SquirrelGod 2:99b1cb0d9f5e 321 This function acts as a special kind of Data Memory Barrier.
SquirrelGod 2:99b1cb0d9f5e 322 It completes when all explicit memory accesses before this instruction complete.
SquirrelGod 2:99b1cb0d9f5e 323 */
SquirrelGod 2:99b1cb0d9f5e 324 __attribute__( ( always_inline ) ) static __INLINE void __DSB(void)
SquirrelGod 2:99b1cb0d9f5e 325 {
SquirrelGod 2:99b1cb0d9f5e 326 __ASM volatile ("dsb");
SquirrelGod 2:99b1cb0d9f5e 327 }
SquirrelGod 2:99b1cb0d9f5e 328
SquirrelGod 2:99b1cb0d9f5e 329
SquirrelGod 2:99b1cb0d9f5e 330 /** \brief Data Memory Barrier
SquirrelGod 2:99b1cb0d9f5e 331
SquirrelGod 2:99b1cb0d9f5e 332 This function ensures the apparent order of the explicit memory operations before
SquirrelGod 2:99b1cb0d9f5e 333 and after the instruction, without ensuring their completion.
SquirrelGod 2:99b1cb0d9f5e 334 */
SquirrelGod 2:99b1cb0d9f5e 335 __attribute__( ( always_inline ) ) static __INLINE void __DMB(void)
SquirrelGod 2:99b1cb0d9f5e 336 {
SquirrelGod 2:99b1cb0d9f5e 337 __ASM volatile ("dmb");
SquirrelGod 2:99b1cb0d9f5e 338 }
SquirrelGod 2:99b1cb0d9f5e 339
SquirrelGod 2:99b1cb0d9f5e 340
SquirrelGod 2:99b1cb0d9f5e 341 /** \brief Reverse byte order (32 bit)
SquirrelGod 2:99b1cb0d9f5e 342
SquirrelGod 2:99b1cb0d9f5e 343 This function reverses the byte order in integer value.
SquirrelGod 2:99b1cb0d9f5e 344
SquirrelGod 2:99b1cb0d9f5e 345 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 346 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 347 */
SquirrelGod 2:99b1cb0d9f5e 348 __attribute__( ( always_inline ) ) static __INLINE uint32_t __REV(uint32_t value)
SquirrelGod 2:99b1cb0d9f5e 349 {
SquirrelGod 2:99b1cb0d9f5e 350 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 351
SquirrelGod 2:99b1cb0d9f5e 352 __ASM volatile ("rev %0, %1" : "=r" (result) : "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 353 return(result);
SquirrelGod 2:99b1cb0d9f5e 354 }
SquirrelGod 2:99b1cb0d9f5e 355
SquirrelGod 2:99b1cb0d9f5e 356
SquirrelGod 2:99b1cb0d9f5e 357 /** \brief Reverse byte order (16 bit)
SquirrelGod 2:99b1cb0d9f5e 358
SquirrelGod 2:99b1cb0d9f5e 359 This function reverses the byte order in two unsigned short values.
SquirrelGod 2:99b1cb0d9f5e 360
SquirrelGod 2:99b1cb0d9f5e 361 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 362 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 363 */
SquirrelGod 2:99b1cb0d9f5e 364 __attribute__( ( always_inline ) ) static __INLINE uint32_t __REV16(uint32_t value)
SquirrelGod 2:99b1cb0d9f5e 365 {
SquirrelGod 2:99b1cb0d9f5e 366 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 367
SquirrelGod 2:99b1cb0d9f5e 368 __ASM volatile ("rev16 %0, %1" : "=r" (result) : "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 369 return(result);
SquirrelGod 2:99b1cb0d9f5e 370 }
SquirrelGod 2:99b1cb0d9f5e 371
SquirrelGod 2:99b1cb0d9f5e 372
SquirrelGod 2:99b1cb0d9f5e 373 /** \brief Reverse byte order in signed short value
SquirrelGod 2:99b1cb0d9f5e 374
SquirrelGod 2:99b1cb0d9f5e 375 This function reverses the byte order in a signed short value with sign extension to integer.
SquirrelGod 2:99b1cb0d9f5e 376
SquirrelGod 2:99b1cb0d9f5e 377 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 378 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 379 */
SquirrelGod 2:99b1cb0d9f5e 380 __attribute__( ( always_inline ) ) static __INLINE int32_t __REVSH(int32_t value)
SquirrelGod 2:99b1cb0d9f5e 381 {
SquirrelGod 2:99b1cb0d9f5e 382 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 383
SquirrelGod 2:99b1cb0d9f5e 384 __ASM volatile ("revsh %0, %1" : "=r" (result) : "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 385 return(result);
SquirrelGod 2:99b1cb0d9f5e 386 }
SquirrelGod 2:99b1cb0d9f5e 387
SquirrelGod 2:99b1cb0d9f5e 388
SquirrelGod 2:99b1cb0d9f5e 389 #if (__CORTEX_M >= 0x03)
SquirrelGod 2:99b1cb0d9f5e 390
SquirrelGod 2:99b1cb0d9f5e 391 /** \brief Reverse bit order of value
SquirrelGod 2:99b1cb0d9f5e 392
SquirrelGod 2:99b1cb0d9f5e 393 This function reverses the bit order of the given value.
SquirrelGod 2:99b1cb0d9f5e 394
SquirrelGod 2:99b1cb0d9f5e 395 \param [in] value Value to reverse
SquirrelGod 2:99b1cb0d9f5e 396 \return Reversed value
SquirrelGod 2:99b1cb0d9f5e 397 */
SquirrelGod 2:99b1cb0d9f5e 398 __attribute__( ( always_inline ) ) static __INLINE uint32_t __RBIT(uint32_t value)
SquirrelGod 2:99b1cb0d9f5e 399 {
SquirrelGod 2:99b1cb0d9f5e 400 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 401
SquirrelGod 2:99b1cb0d9f5e 402 __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 403 return(result);
SquirrelGod 2:99b1cb0d9f5e 404 }
SquirrelGod 2:99b1cb0d9f5e 405
SquirrelGod 2:99b1cb0d9f5e 406
SquirrelGod 2:99b1cb0d9f5e 407 /** \brief LDR Exclusive (8 bit)
SquirrelGod 2:99b1cb0d9f5e 408
SquirrelGod 2:99b1cb0d9f5e 409 This function performs a exclusive LDR command for 8 bit value.
SquirrelGod 2:99b1cb0d9f5e 410
SquirrelGod 2:99b1cb0d9f5e 411 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 412 \return value of type uint8_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 413 */
SquirrelGod 2:99b1cb0d9f5e 414 __attribute__( ( always_inline ) ) static __INLINE uint8_t __LDREXB(volatile uint8_t *addr)
SquirrelGod 2:99b1cb0d9f5e 415 {
SquirrelGod 2:99b1cb0d9f5e 416 uint8_t result;
SquirrelGod 2:99b1cb0d9f5e 417
SquirrelGod 2:99b1cb0d9f5e 418 __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) );
SquirrelGod 2:99b1cb0d9f5e 419 return(result);
SquirrelGod 2:99b1cb0d9f5e 420 }
SquirrelGod 2:99b1cb0d9f5e 421
SquirrelGod 2:99b1cb0d9f5e 422
SquirrelGod 2:99b1cb0d9f5e 423 /** \brief LDR Exclusive (16 bit)
SquirrelGod 2:99b1cb0d9f5e 424
SquirrelGod 2:99b1cb0d9f5e 425 This function performs a exclusive LDR command for 16 bit values.
SquirrelGod 2:99b1cb0d9f5e 426
SquirrelGod 2:99b1cb0d9f5e 427 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 428 \return value of type uint16_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 429 */
SquirrelGod 2:99b1cb0d9f5e 430 __attribute__( ( always_inline ) ) static __INLINE uint16_t __LDREXH(volatile uint16_t *addr)
SquirrelGod 2:99b1cb0d9f5e 431 {
SquirrelGod 2:99b1cb0d9f5e 432 uint16_t result;
SquirrelGod 2:99b1cb0d9f5e 433
SquirrelGod 2:99b1cb0d9f5e 434 __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) );
SquirrelGod 2:99b1cb0d9f5e 435 return(result);
SquirrelGod 2:99b1cb0d9f5e 436 }
SquirrelGod 2:99b1cb0d9f5e 437
SquirrelGod 2:99b1cb0d9f5e 438
SquirrelGod 2:99b1cb0d9f5e 439 /** \brief LDR Exclusive (32 bit)
SquirrelGod 2:99b1cb0d9f5e 440
SquirrelGod 2:99b1cb0d9f5e 441 This function performs a exclusive LDR command for 32 bit values.
SquirrelGod 2:99b1cb0d9f5e 442
SquirrelGod 2:99b1cb0d9f5e 443 \param [in] ptr Pointer to data
SquirrelGod 2:99b1cb0d9f5e 444 \return value of type uint32_t at (*ptr)
SquirrelGod 2:99b1cb0d9f5e 445 */
SquirrelGod 2:99b1cb0d9f5e 446 __attribute__( ( always_inline ) ) static __INLINE uint32_t __LDREXW(volatile uint32_t *addr)
SquirrelGod 2:99b1cb0d9f5e 447 {
SquirrelGod 2:99b1cb0d9f5e 448 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 449
SquirrelGod 2:99b1cb0d9f5e 450 __ASM volatile ("ldrex %0, [%1]" : "=r" (result) : "r" (addr) );
SquirrelGod 2:99b1cb0d9f5e 451 return(result);
SquirrelGod 2:99b1cb0d9f5e 452 }
SquirrelGod 2:99b1cb0d9f5e 453
SquirrelGod 2:99b1cb0d9f5e 454
SquirrelGod 2:99b1cb0d9f5e 455 /** \brief STR Exclusive (8 bit)
SquirrelGod 2:99b1cb0d9f5e 456
SquirrelGod 2:99b1cb0d9f5e 457 This function performs a exclusive STR command for 8 bit values.
SquirrelGod 2:99b1cb0d9f5e 458
SquirrelGod 2:99b1cb0d9f5e 459 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 460 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 461 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 462 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 463 */
SquirrelGod 2:99b1cb0d9f5e 464 __attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr)
SquirrelGod 2:99b1cb0d9f5e 465 {
SquirrelGod 2:99b1cb0d9f5e 466 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 467
SquirrelGod 2:99b1cb0d9f5e 468 __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 469 return(result);
SquirrelGod 2:99b1cb0d9f5e 470 }
SquirrelGod 2:99b1cb0d9f5e 471
SquirrelGod 2:99b1cb0d9f5e 472
SquirrelGod 2:99b1cb0d9f5e 473 /** \brief STR Exclusive (16 bit)
SquirrelGod 2:99b1cb0d9f5e 474
SquirrelGod 2:99b1cb0d9f5e 475 This function performs a exclusive STR command for 16 bit values.
SquirrelGod 2:99b1cb0d9f5e 476
SquirrelGod 2:99b1cb0d9f5e 477 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 478 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 479 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 480 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 481 */
SquirrelGod 2:99b1cb0d9f5e 482 __attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr)
SquirrelGod 2:99b1cb0d9f5e 483 {
SquirrelGod 2:99b1cb0d9f5e 484 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 485
SquirrelGod 2:99b1cb0d9f5e 486 __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 487 return(result);
SquirrelGod 2:99b1cb0d9f5e 488 }
SquirrelGod 2:99b1cb0d9f5e 489
SquirrelGod 2:99b1cb0d9f5e 490
SquirrelGod 2:99b1cb0d9f5e 491 /** \brief STR Exclusive (32 bit)
SquirrelGod 2:99b1cb0d9f5e 492
SquirrelGod 2:99b1cb0d9f5e 493 This function performs a exclusive STR command for 32 bit values.
SquirrelGod 2:99b1cb0d9f5e 494
SquirrelGod 2:99b1cb0d9f5e 495 \param [in] value Value to store
SquirrelGod 2:99b1cb0d9f5e 496 \param [in] ptr Pointer to location
SquirrelGod 2:99b1cb0d9f5e 497 \return 0 Function succeeded
SquirrelGod 2:99b1cb0d9f5e 498 \return 1 Function failed
SquirrelGod 2:99b1cb0d9f5e 499 */
SquirrelGod 2:99b1cb0d9f5e 500 __attribute__( ( always_inline ) ) static __INLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr)
SquirrelGod 2:99b1cb0d9f5e 501 {
SquirrelGod 2:99b1cb0d9f5e 502 uint32_t result;
SquirrelGod 2:99b1cb0d9f5e 503
SquirrelGod 2:99b1cb0d9f5e 504 __ASM volatile ("strex %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 505 return(result);
SquirrelGod 2:99b1cb0d9f5e 506 }
SquirrelGod 2:99b1cb0d9f5e 507
SquirrelGod 2:99b1cb0d9f5e 508
SquirrelGod 2:99b1cb0d9f5e 509 /** \brief Remove the exclusive lock
SquirrelGod 2:99b1cb0d9f5e 510
SquirrelGod 2:99b1cb0d9f5e 511 This function removes the exclusive lock which is created by LDREX.
SquirrelGod 2:99b1cb0d9f5e 512
SquirrelGod 2:99b1cb0d9f5e 513 */
SquirrelGod 2:99b1cb0d9f5e 514 __attribute__( ( always_inline ) ) static __INLINE void __CLREX(void)
SquirrelGod 2:99b1cb0d9f5e 515 {
SquirrelGod 2:99b1cb0d9f5e 516 __ASM volatile ("clrex");
SquirrelGod 2:99b1cb0d9f5e 517 }
SquirrelGod 2:99b1cb0d9f5e 518
SquirrelGod 2:99b1cb0d9f5e 519
SquirrelGod 2:99b1cb0d9f5e 520 /** \brief Signed Saturate
SquirrelGod 2:99b1cb0d9f5e 521
SquirrelGod 2:99b1cb0d9f5e 522 This function saturates a signed value.
SquirrelGod 2:99b1cb0d9f5e 523
SquirrelGod 2:99b1cb0d9f5e 524 \param [in] value Value to be saturated
SquirrelGod 2:99b1cb0d9f5e 525 \param [in] sat Bit position to saturate to (1..32)
SquirrelGod 2:99b1cb0d9f5e 526 \return Saturated value
SquirrelGod 2:99b1cb0d9f5e 527 */
SquirrelGod 2:99b1cb0d9f5e 528 #define __SSAT(ARG1,ARG2) \
SquirrelGod 2:99b1cb0d9f5e 529 ({ \
SquirrelGod 2:99b1cb0d9f5e 530 uint32_t __RES, __ARG1 = (ARG1); \
SquirrelGod 2:99b1cb0d9f5e 531 __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
SquirrelGod 2:99b1cb0d9f5e 532 __RES; \
SquirrelGod 2:99b1cb0d9f5e 533 })
SquirrelGod 2:99b1cb0d9f5e 534
SquirrelGod 2:99b1cb0d9f5e 535
SquirrelGod 2:99b1cb0d9f5e 536 /** \brief Unsigned Saturate
SquirrelGod 2:99b1cb0d9f5e 537
SquirrelGod 2:99b1cb0d9f5e 538 This function saturates an unsigned value.
SquirrelGod 2:99b1cb0d9f5e 539
SquirrelGod 2:99b1cb0d9f5e 540 \param [in] value Value to be saturated
SquirrelGod 2:99b1cb0d9f5e 541 \param [in] sat Bit position to saturate to (0..31)
SquirrelGod 2:99b1cb0d9f5e 542 \return Saturated value
SquirrelGod 2:99b1cb0d9f5e 543 */
SquirrelGod 2:99b1cb0d9f5e 544 #define __USAT(ARG1,ARG2) \
SquirrelGod 2:99b1cb0d9f5e 545 ({ \
SquirrelGod 2:99b1cb0d9f5e 546 uint32_t __RES, __ARG1 = (ARG1); \
SquirrelGod 2:99b1cb0d9f5e 547 __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
SquirrelGod 2:99b1cb0d9f5e 548 __RES; \
SquirrelGod 2:99b1cb0d9f5e 549 })
SquirrelGod 2:99b1cb0d9f5e 550
SquirrelGod 2:99b1cb0d9f5e 551
SquirrelGod 2:99b1cb0d9f5e 552 /** \brief Count leading zeros
SquirrelGod 2:99b1cb0d9f5e 553
SquirrelGod 2:99b1cb0d9f5e 554 This function counts the number of leading zeros of a data value.
SquirrelGod 2:99b1cb0d9f5e 555
SquirrelGod 2:99b1cb0d9f5e 556 \param [in] value Value to count the leading zeros
SquirrelGod 2:99b1cb0d9f5e 557 \return number of leading zeros in value
SquirrelGod 2:99b1cb0d9f5e 558 */
SquirrelGod 2:99b1cb0d9f5e 559 __attribute__( ( always_inline ) ) static __INLINE uint8_t __CLZ(uint32_t value)
SquirrelGod 2:99b1cb0d9f5e 560 {
SquirrelGod 2:99b1cb0d9f5e 561 uint8_t result;
SquirrelGod 2:99b1cb0d9f5e 562
SquirrelGod 2:99b1cb0d9f5e 563 __ASM volatile ("clz %0, %1" : "=r" (result) : "r" (value) );
SquirrelGod 2:99b1cb0d9f5e 564 return(result);
SquirrelGod 2:99b1cb0d9f5e 565 }
SquirrelGod 2:99b1cb0d9f5e 566
SquirrelGod 2:99b1cb0d9f5e 567 #endif /* (__CORTEX_M >= 0x03) */
SquirrelGod 2:99b1cb0d9f5e 568
SquirrelGod 2:99b1cb0d9f5e 569
SquirrelGod 2:99b1cb0d9f5e 570
SquirrelGod 2:99b1cb0d9f5e 571
SquirrelGod 2:99b1cb0d9f5e 572 #elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
SquirrelGod 2:99b1cb0d9f5e 573 /* TASKING carm specific functions */
SquirrelGod 2:99b1cb0d9f5e 574
SquirrelGod 2:99b1cb0d9f5e 575 /*
SquirrelGod 2:99b1cb0d9f5e 576 * The CMSIS functions have been implemented as intrinsics in the compiler.
SquirrelGod 2:99b1cb0d9f5e 577 * Please use "carm -?i" to get an up to date list of all intrinsics,
SquirrelGod 2:99b1cb0d9f5e 578 * Including the CMSIS ones.
SquirrelGod 2:99b1cb0d9f5e 579 */
SquirrelGod 2:99b1cb0d9f5e 580
SquirrelGod 2:99b1cb0d9f5e 581 #endif
SquirrelGod 2:99b1cb0d9f5e 582
SquirrelGod 2:99b1cb0d9f5e 583 /*@}*/ /* end of group CMSIS_Core_InstructionInterface */
SquirrelGod 2:99b1cb0d9f5e 584
SquirrelGod 2:99b1cb0d9f5e 585 #endif /* __CORE_CMINSTR_H */