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.

Committer:
Anna Bridge
Date:
Wed Jan 17 16:13:02 2018 +0000
Revision:
160:5571c4ff569f
Parent:
153:b484a57bc302
Child:
169:a7c7b631e539
mbed library. Release version 158

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 153:b484a57bc302 1 /**************************************************************************//**
AnnaBridge 153:b484a57bc302 2 * @file cmsis_armcc.h
AnnaBridge 153:b484a57bc302 3 * @brief CMSIS compiler ARMCC (ARM compiler V5) header file
AnnaBridge 153:b484a57bc302 4 * @version V5.0.2
AnnaBridge 153:b484a57bc302 5 * @date 13. February 2017
AnnaBridge 153:b484a57bc302 6 ******************************************************************************/
AnnaBridge 153:b484a57bc302 7 /*
AnnaBridge 153:b484a57bc302 8 * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
AnnaBridge 153:b484a57bc302 9 *
AnnaBridge 153:b484a57bc302 10 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 153:b484a57bc302 11 *
AnnaBridge 153:b484a57bc302 12 * Licensed under the Apache License, Version 2.0 (the License); you may
AnnaBridge 153:b484a57bc302 13 * not use this file except in compliance with the License.
AnnaBridge 153:b484a57bc302 14 * You may obtain a copy of the License at
AnnaBridge 153:b484a57bc302 15 *
AnnaBridge 153:b484a57bc302 16 * www.apache.org/licenses/LICENSE-2.0
AnnaBridge 153:b484a57bc302 17 *
AnnaBridge 153:b484a57bc302 18 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 153:b484a57bc302 19 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
AnnaBridge 153:b484a57bc302 20 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 153:b484a57bc302 21 * See the License for the specific language governing permissions and
AnnaBridge 153:b484a57bc302 22 * limitations under the License.
AnnaBridge 153:b484a57bc302 23 */
AnnaBridge 153:b484a57bc302 24
AnnaBridge 153:b484a57bc302 25 #ifndef __CMSIS_ARMCC_H
AnnaBridge 153:b484a57bc302 26 #define __CMSIS_ARMCC_H
AnnaBridge 153:b484a57bc302 27
AnnaBridge 153:b484a57bc302 28
AnnaBridge 153:b484a57bc302 29 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677)
AnnaBridge 153:b484a57bc302 30 #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
AnnaBridge 153:b484a57bc302 31 #endif
AnnaBridge 153:b484a57bc302 32
AnnaBridge 153:b484a57bc302 33 /* CMSIS compiler control architecture macros */
AnnaBridge 153:b484a57bc302 34 #if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \
AnnaBridge 153:b484a57bc302 35 (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) )
AnnaBridge 153:b484a57bc302 36 #define __ARM_ARCH_6M__ 1
AnnaBridge 153:b484a57bc302 37 #endif
AnnaBridge 153:b484a57bc302 38
AnnaBridge 153:b484a57bc302 39 #if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1))
AnnaBridge 153:b484a57bc302 40 #define __ARM_ARCH_7M__ 1
AnnaBridge 153:b484a57bc302 41 #endif
AnnaBridge 153:b484a57bc302 42
AnnaBridge 153:b484a57bc302 43 #if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1))
AnnaBridge 153:b484a57bc302 44 #define __ARM_ARCH_7EM__ 1
AnnaBridge 153:b484a57bc302 45 #endif
AnnaBridge 153:b484a57bc302 46
AnnaBridge 153:b484a57bc302 47 /* __ARM_ARCH_8M_BASE__ not applicable */
AnnaBridge 153:b484a57bc302 48 /* __ARM_ARCH_8M_MAIN__ not applicable */
AnnaBridge 153:b484a57bc302 49
AnnaBridge 153:b484a57bc302 50
AnnaBridge 153:b484a57bc302 51 /* CMSIS compiler specific defines */
AnnaBridge 153:b484a57bc302 52 #ifndef __ASM
AnnaBridge 153:b484a57bc302 53 #define __ASM __asm
AnnaBridge 153:b484a57bc302 54 #endif
AnnaBridge 153:b484a57bc302 55 #ifndef __INLINE
AnnaBridge 153:b484a57bc302 56 #define __INLINE __inline
AnnaBridge 153:b484a57bc302 57 #endif
AnnaBridge 153:b484a57bc302 58 #ifndef __STATIC_INLINE
AnnaBridge 153:b484a57bc302 59 #define __STATIC_INLINE static __inline
AnnaBridge 153:b484a57bc302 60 #endif
AnnaBridge 153:b484a57bc302 61 #ifndef __NO_RETURN
AnnaBridge 153:b484a57bc302 62 #define __NO_RETURN __declspec(noreturn)
AnnaBridge 153:b484a57bc302 63 #endif
AnnaBridge 153:b484a57bc302 64 #ifndef __USED
AnnaBridge 153:b484a57bc302 65 #define __USED __attribute__((used))
AnnaBridge 153:b484a57bc302 66 #endif
AnnaBridge 153:b484a57bc302 67 #ifndef __WEAK
AnnaBridge 153:b484a57bc302 68 #define __WEAK __attribute__((weak))
AnnaBridge 153:b484a57bc302 69 #endif
AnnaBridge 153:b484a57bc302 70 #ifndef __PACKED
AnnaBridge 153:b484a57bc302 71 #define __PACKED __attribute__((packed))
AnnaBridge 153:b484a57bc302 72 #endif
AnnaBridge 153:b484a57bc302 73 #ifndef __PACKED_STRUCT
AnnaBridge 153:b484a57bc302 74 #define __PACKED_STRUCT __packed struct
AnnaBridge 153:b484a57bc302 75 #endif
Anna Bridge 160:5571c4ff569f 76 #ifndef __PACKED_UNION
Anna Bridge 160:5571c4ff569f 77 #define __PACKED_UNION __packed union
Anna Bridge 160:5571c4ff569f 78 #endif
AnnaBridge 153:b484a57bc302 79 #ifndef __UNALIGNED_UINT32 /* deprecated */
AnnaBridge 153:b484a57bc302 80 #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x)))
AnnaBridge 153:b484a57bc302 81 #endif
AnnaBridge 153:b484a57bc302 82 #ifndef __UNALIGNED_UINT16_WRITE
AnnaBridge 153:b484a57bc302 83 #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val))
AnnaBridge 153:b484a57bc302 84 #endif
AnnaBridge 153:b484a57bc302 85 #ifndef __UNALIGNED_UINT16_READ
AnnaBridge 153:b484a57bc302 86 #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr)))
AnnaBridge 153:b484a57bc302 87 #endif
AnnaBridge 153:b484a57bc302 88 #ifndef __UNALIGNED_UINT32_WRITE
AnnaBridge 153:b484a57bc302 89 #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val))
AnnaBridge 153:b484a57bc302 90 #endif
AnnaBridge 153:b484a57bc302 91 #ifndef __UNALIGNED_UINT32_READ
AnnaBridge 153:b484a57bc302 92 #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr)))
AnnaBridge 153:b484a57bc302 93 #endif
AnnaBridge 153:b484a57bc302 94 #ifndef __ALIGNED
AnnaBridge 153:b484a57bc302 95 #define __ALIGNED(x) __attribute__((aligned(x)))
AnnaBridge 153:b484a57bc302 96 #endif
Anna Bridge 160:5571c4ff569f 97 #ifndef __RESTRICT
Anna Bridge 160:5571c4ff569f 98 #define __RESTRICT __restrict
Anna Bridge 160:5571c4ff569f 99 #endif
AnnaBridge 153:b484a57bc302 100
AnnaBridge 153:b484a57bc302 101 /* ########################### Core Function Access ########################### */
AnnaBridge 153:b484a57bc302 102 /** \ingroup CMSIS_Core_FunctionInterface
AnnaBridge 153:b484a57bc302 103 \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
AnnaBridge 153:b484a57bc302 104 @{
AnnaBridge 153:b484a57bc302 105 */
AnnaBridge 153:b484a57bc302 106
AnnaBridge 153:b484a57bc302 107 /**
AnnaBridge 153:b484a57bc302 108 \brief Enable IRQ Interrupts
AnnaBridge 153:b484a57bc302 109 \details Enables IRQ interrupts by clearing the I-bit in the CPSR.
AnnaBridge 153:b484a57bc302 110 Can only be executed in Privileged modes.
AnnaBridge 153:b484a57bc302 111 */
AnnaBridge 153:b484a57bc302 112 /* intrinsic void __enable_irq(); */
AnnaBridge 153:b484a57bc302 113
AnnaBridge 153:b484a57bc302 114
AnnaBridge 153:b484a57bc302 115 /**
AnnaBridge 153:b484a57bc302 116 \brief Disable IRQ Interrupts
AnnaBridge 153:b484a57bc302 117 \details Disables IRQ interrupts by setting the I-bit in the CPSR.
AnnaBridge 153:b484a57bc302 118 Can only be executed in Privileged modes.
AnnaBridge 153:b484a57bc302 119 */
AnnaBridge 153:b484a57bc302 120 /* intrinsic void __disable_irq(); */
AnnaBridge 153:b484a57bc302 121
AnnaBridge 153:b484a57bc302 122 /**
AnnaBridge 153:b484a57bc302 123 \brief Get Control Register
AnnaBridge 153:b484a57bc302 124 \details Returns the content of the Control Register.
AnnaBridge 153:b484a57bc302 125 \return Control Register value
AnnaBridge 153:b484a57bc302 126 */
AnnaBridge 153:b484a57bc302 127 __STATIC_INLINE uint32_t __get_CONTROL(void)
AnnaBridge 153:b484a57bc302 128 {
AnnaBridge 153:b484a57bc302 129 register uint32_t __regControl __ASM("control");
AnnaBridge 153:b484a57bc302 130 return(__regControl);
AnnaBridge 153:b484a57bc302 131 }
AnnaBridge 153:b484a57bc302 132
AnnaBridge 153:b484a57bc302 133
AnnaBridge 153:b484a57bc302 134 /**
AnnaBridge 153:b484a57bc302 135 \brief Set Control Register
AnnaBridge 153:b484a57bc302 136 \details Writes the given value to the Control Register.
AnnaBridge 153:b484a57bc302 137 \param [in] control Control Register value to set
AnnaBridge 153:b484a57bc302 138 */
AnnaBridge 153:b484a57bc302 139 __STATIC_INLINE void __set_CONTROL(uint32_t control)
AnnaBridge 153:b484a57bc302 140 {
AnnaBridge 153:b484a57bc302 141 register uint32_t __regControl __ASM("control");
AnnaBridge 153:b484a57bc302 142 __regControl = control;
AnnaBridge 153:b484a57bc302 143 }
AnnaBridge 153:b484a57bc302 144
AnnaBridge 153:b484a57bc302 145
AnnaBridge 153:b484a57bc302 146 /**
AnnaBridge 153:b484a57bc302 147 \brief Get IPSR Register
AnnaBridge 153:b484a57bc302 148 \details Returns the content of the IPSR Register.
AnnaBridge 153:b484a57bc302 149 \return IPSR Register value
AnnaBridge 153:b484a57bc302 150 */
AnnaBridge 153:b484a57bc302 151 __STATIC_INLINE uint32_t __get_IPSR(void)
AnnaBridge 153:b484a57bc302 152 {
AnnaBridge 153:b484a57bc302 153 register uint32_t __regIPSR __ASM("ipsr");
AnnaBridge 153:b484a57bc302 154 return(__regIPSR);
AnnaBridge 153:b484a57bc302 155 }
AnnaBridge 153:b484a57bc302 156
AnnaBridge 153:b484a57bc302 157
AnnaBridge 153:b484a57bc302 158 /**
AnnaBridge 153:b484a57bc302 159 \brief Get APSR Register
AnnaBridge 153:b484a57bc302 160 \details Returns the content of the APSR Register.
AnnaBridge 153:b484a57bc302 161 \return APSR Register value
AnnaBridge 153:b484a57bc302 162 */
AnnaBridge 153:b484a57bc302 163 __STATIC_INLINE uint32_t __get_APSR(void)
AnnaBridge 153:b484a57bc302 164 {
AnnaBridge 153:b484a57bc302 165 register uint32_t __regAPSR __ASM("apsr");
AnnaBridge 153:b484a57bc302 166 return(__regAPSR);
AnnaBridge 153:b484a57bc302 167 }
AnnaBridge 153:b484a57bc302 168
AnnaBridge 153:b484a57bc302 169
AnnaBridge 153:b484a57bc302 170 /**
AnnaBridge 153:b484a57bc302 171 \brief Get xPSR Register
AnnaBridge 153:b484a57bc302 172 \details Returns the content of the xPSR Register.
AnnaBridge 153:b484a57bc302 173 \return xPSR Register value
AnnaBridge 153:b484a57bc302 174 */
AnnaBridge 153:b484a57bc302 175 __STATIC_INLINE uint32_t __get_xPSR(void)
AnnaBridge 153:b484a57bc302 176 {
AnnaBridge 153:b484a57bc302 177 register uint32_t __regXPSR __ASM("xpsr");
AnnaBridge 153:b484a57bc302 178 return(__regXPSR);
AnnaBridge 153:b484a57bc302 179 }
AnnaBridge 153:b484a57bc302 180
AnnaBridge 153:b484a57bc302 181
AnnaBridge 153:b484a57bc302 182 /**
AnnaBridge 153:b484a57bc302 183 \brief Get Process Stack Pointer
AnnaBridge 153:b484a57bc302 184 \details Returns the current value of the Process Stack Pointer (PSP).
AnnaBridge 153:b484a57bc302 185 \return PSP Register value
AnnaBridge 153:b484a57bc302 186 */
AnnaBridge 153:b484a57bc302 187 __STATIC_INLINE uint32_t __get_PSP(void)
AnnaBridge 153:b484a57bc302 188 {
AnnaBridge 153:b484a57bc302 189 register uint32_t __regProcessStackPointer __ASM("psp");
AnnaBridge 153:b484a57bc302 190 return(__regProcessStackPointer);
AnnaBridge 153:b484a57bc302 191 }
AnnaBridge 153:b484a57bc302 192
AnnaBridge 153:b484a57bc302 193
AnnaBridge 153:b484a57bc302 194 /**
AnnaBridge 153:b484a57bc302 195 \brief Set Process Stack Pointer
AnnaBridge 153:b484a57bc302 196 \details Assigns the given value to the Process Stack Pointer (PSP).
AnnaBridge 153:b484a57bc302 197 \param [in] topOfProcStack Process Stack Pointer value to set
AnnaBridge 153:b484a57bc302 198 */
AnnaBridge 153:b484a57bc302 199 __STATIC_INLINE void __set_PSP(uint32_t topOfProcStack)
AnnaBridge 153:b484a57bc302 200 {
AnnaBridge 153:b484a57bc302 201 register uint32_t __regProcessStackPointer __ASM("psp");
AnnaBridge 153:b484a57bc302 202 __regProcessStackPointer = topOfProcStack;
AnnaBridge 153:b484a57bc302 203 }
AnnaBridge 153:b484a57bc302 204
AnnaBridge 153:b484a57bc302 205
AnnaBridge 153:b484a57bc302 206 /**
AnnaBridge 153:b484a57bc302 207 \brief Get Main Stack Pointer
AnnaBridge 153:b484a57bc302 208 \details Returns the current value of the Main Stack Pointer (MSP).
AnnaBridge 153:b484a57bc302 209 \return MSP Register value
AnnaBridge 153:b484a57bc302 210 */
AnnaBridge 153:b484a57bc302 211 __STATIC_INLINE uint32_t __get_MSP(void)
AnnaBridge 153:b484a57bc302 212 {
AnnaBridge 153:b484a57bc302 213 register uint32_t __regMainStackPointer __ASM("msp");
AnnaBridge 153:b484a57bc302 214 return(__regMainStackPointer);
AnnaBridge 153:b484a57bc302 215 }
AnnaBridge 153:b484a57bc302 216
AnnaBridge 153:b484a57bc302 217
AnnaBridge 153:b484a57bc302 218 /**
AnnaBridge 153:b484a57bc302 219 \brief Set Main Stack Pointer
AnnaBridge 153:b484a57bc302 220 \details Assigns the given value to the Main Stack Pointer (MSP).
AnnaBridge 153:b484a57bc302 221 \param [in] topOfMainStack Main Stack Pointer value to set
AnnaBridge 153:b484a57bc302 222 */
AnnaBridge 153:b484a57bc302 223 __STATIC_INLINE void __set_MSP(uint32_t topOfMainStack)
AnnaBridge 153:b484a57bc302 224 {
AnnaBridge 153:b484a57bc302 225 register uint32_t __regMainStackPointer __ASM("msp");
AnnaBridge 153:b484a57bc302 226 __regMainStackPointer = topOfMainStack;
AnnaBridge 153:b484a57bc302 227 }
AnnaBridge 153:b484a57bc302 228
AnnaBridge 153:b484a57bc302 229
AnnaBridge 153:b484a57bc302 230 /**
AnnaBridge 153:b484a57bc302 231 \brief Get Priority Mask
AnnaBridge 153:b484a57bc302 232 \details Returns the current state of the priority mask bit from the Priority Mask Register.
AnnaBridge 153:b484a57bc302 233 \return Priority Mask value
AnnaBridge 153:b484a57bc302 234 */
AnnaBridge 153:b484a57bc302 235 __STATIC_INLINE uint32_t __get_PRIMASK(void)
AnnaBridge 153:b484a57bc302 236 {
AnnaBridge 153:b484a57bc302 237 register uint32_t __regPriMask __ASM("primask");
AnnaBridge 153:b484a57bc302 238 return(__regPriMask);
AnnaBridge 153:b484a57bc302 239 }
AnnaBridge 153:b484a57bc302 240
AnnaBridge 153:b484a57bc302 241
AnnaBridge 153:b484a57bc302 242 /**
AnnaBridge 153:b484a57bc302 243 \brief Set Priority Mask
AnnaBridge 153:b484a57bc302 244 \details Assigns the given value to the Priority Mask Register.
AnnaBridge 153:b484a57bc302 245 \param [in] priMask Priority Mask
AnnaBridge 153:b484a57bc302 246 */
AnnaBridge 153:b484a57bc302 247 __STATIC_INLINE void __set_PRIMASK(uint32_t priMask)
AnnaBridge 153:b484a57bc302 248 {
AnnaBridge 153:b484a57bc302 249 register uint32_t __regPriMask __ASM("primask");
AnnaBridge 153:b484a57bc302 250 __regPriMask = (priMask);
AnnaBridge 153:b484a57bc302 251 }
AnnaBridge 153:b484a57bc302 252
AnnaBridge 153:b484a57bc302 253
AnnaBridge 153:b484a57bc302 254 #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
AnnaBridge 153:b484a57bc302 255 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) )
AnnaBridge 153:b484a57bc302 256
AnnaBridge 153:b484a57bc302 257 /**
AnnaBridge 153:b484a57bc302 258 \brief Enable FIQ
AnnaBridge 153:b484a57bc302 259 \details Enables FIQ interrupts by clearing the F-bit in the CPSR.
AnnaBridge 153:b484a57bc302 260 Can only be executed in Privileged modes.
AnnaBridge 153:b484a57bc302 261 */
AnnaBridge 153:b484a57bc302 262 #define __enable_fault_irq __enable_fiq
AnnaBridge 153:b484a57bc302 263
AnnaBridge 153:b484a57bc302 264
AnnaBridge 153:b484a57bc302 265 /**
AnnaBridge 153:b484a57bc302 266 \brief Disable FIQ
AnnaBridge 153:b484a57bc302 267 \details Disables FIQ interrupts by setting the F-bit in the CPSR.
AnnaBridge 153:b484a57bc302 268 Can only be executed in Privileged modes.
AnnaBridge 153:b484a57bc302 269 */
AnnaBridge 153:b484a57bc302 270 #define __disable_fault_irq __disable_fiq
AnnaBridge 153:b484a57bc302 271
AnnaBridge 153:b484a57bc302 272
AnnaBridge 153:b484a57bc302 273 /**
AnnaBridge 153:b484a57bc302 274 \brief Get Base Priority
AnnaBridge 153:b484a57bc302 275 \details Returns the current value of the Base Priority register.
AnnaBridge 153:b484a57bc302 276 \return Base Priority register value
AnnaBridge 153:b484a57bc302 277 */
AnnaBridge 153:b484a57bc302 278 __STATIC_INLINE uint32_t __get_BASEPRI(void)
AnnaBridge 153:b484a57bc302 279 {
AnnaBridge 153:b484a57bc302 280 register uint32_t __regBasePri __ASM("basepri");
AnnaBridge 153:b484a57bc302 281 return(__regBasePri);
AnnaBridge 153:b484a57bc302 282 }
AnnaBridge 153:b484a57bc302 283
AnnaBridge 153:b484a57bc302 284
AnnaBridge 153:b484a57bc302 285 /**
AnnaBridge 153:b484a57bc302 286 \brief Set Base Priority
AnnaBridge 153:b484a57bc302 287 \details Assigns the given value to the Base Priority register.
AnnaBridge 153:b484a57bc302 288 \param [in] basePri Base Priority value to set
AnnaBridge 153:b484a57bc302 289 */
AnnaBridge 153:b484a57bc302 290 __STATIC_INLINE void __set_BASEPRI(uint32_t basePri)
AnnaBridge 153:b484a57bc302 291 {
AnnaBridge 153:b484a57bc302 292 register uint32_t __regBasePri __ASM("basepri");
AnnaBridge 153:b484a57bc302 293 __regBasePri = (basePri & 0xFFU);
AnnaBridge 153:b484a57bc302 294 }
AnnaBridge 153:b484a57bc302 295
AnnaBridge 153:b484a57bc302 296
AnnaBridge 153:b484a57bc302 297 /**
AnnaBridge 153:b484a57bc302 298 \brief Set Base Priority with condition
AnnaBridge 153:b484a57bc302 299 \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled,
AnnaBridge 153:b484a57bc302 300 or the new value increases the BASEPRI priority level.
AnnaBridge 153:b484a57bc302 301 \param [in] basePri Base Priority value to set
AnnaBridge 153:b484a57bc302 302 */
AnnaBridge 153:b484a57bc302 303 __STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri)
AnnaBridge 153:b484a57bc302 304 {
AnnaBridge 153:b484a57bc302 305 register uint32_t __regBasePriMax __ASM("basepri_max");
AnnaBridge 153:b484a57bc302 306 __regBasePriMax = (basePri & 0xFFU);
AnnaBridge 153:b484a57bc302 307 }
AnnaBridge 153:b484a57bc302 308
AnnaBridge 153:b484a57bc302 309
AnnaBridge 153:b484a57bc302 310 /**
AnnaBridge 153:b484a57bc302 311 \brief Get Fault Mask
AnnaBridge 153:b484a57bc302 312 \details Returns the current value of the Fault Mask register.
AnnaBridge 153:b484a57bc302 313 \return Fault Mask register value
AnnaBridge 153:b484a57bc302 314 */
AnnaBridge 153:b484a57bc302 315 __STATIC_INLINE uint32_t __get_FAULTMASK(void)
AnnaBridge 153:b484a57bc302 316 {
AnnaBridge 153:b484a57bc302 317 register uint32_t __regFaultMask __ASM("faultmask");
AnnaBridge 153:b484a57bc302 318 return(__regFaultMask);
AnnaBridge 153:b484a57bc302 319 }
AnnaBridge 153:b484a57bc302 320
AnnaBridge 153:b484a57bc302 321
AnnaBridge 153:b484a57bc302 322 /**
AnnaBridge 153:b484a57bc302 323 \brief Set Fault Mask
AnnaBridge 153:b484a57bc302 324 \details Assigns the given value to the Fault Mask register.
AnnaBridge 153:b484a57bc302 325 \param [in] faultMask Fault Mask value to set
AnnaBridge 153:b484a57bc302 326 */
AnnaBridge 153:b484a57bc302 327 __STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask)
AnnaBridge 153:b484a57bc302 328 {
AnnaBridge 153:b484a57bc302 329 register uint32_t __regFaultMask __ASM("faultmask");
AnnaBridge 153:b484a57bc302 330 __regFaultMask = (faultMask & (uint32_t)1U);
AnnaBridge 153:b484a57bc302 331 }
AnnaBridge 153:b484a57bc302 332
AnnaBridge 153:b484a57bc302 333 #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
AnnaBridge 153:b484a57bc302 334 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */
AnnaBridge 153:b484a57bc302 335
AnnaBridge 153:b484a57bc302 336
AnnaBridge 153:b484a57bc302 337 #if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) )
AnnaBridge 153:b484a57bc302 338
AnnaBridge 153:b484a57bc302 339 /**
AnnaBridge 153:b484a57bc302 340 \brief Get FPSCR
AnnaBridge 153:b484a57bc302 341 \details Returns the current value of the Floating Point Status/Control register.
AnnaBridge 153:b484a57bc302 342 \return Floating Point Status/Control register value
AnnaBridge 153:b484a57bc302 343 */
AnnaBridge 153:b484a57bc302 344 __STATIC_INLINE uint32_t __get_FPSCR(void)
AnnaBridge 153:b484a57bc302 345 {
AnnaBridge 153:b484a57bc302 346 #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
AnnaBridge 153:b484a57bc302 347 (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
AnnaBridge 153:b484a57bc302 348 register uint32_t __regfpscr __ASM("fpscr");
AnnaBridge 153:b484a57bc302 349 return(__regfpscr);
AnnaBridge 153:b484a57bc302 350 #else
AnnaBridge 153:b484a57bc302 351 return(0U);
AnnaBridge 153:b484a57bc302 352 #endif
AnnaBridge 153:b484a57bc302 353 }
AnnaBridge 153:b484a57bc302 354
AnnaBridge 153:b484a57bc302 355
AnnaBridge 153:b484a57bc302 356 /**
AnnaBridge 153:b484a57bc302 357 \brief Set FPSCR
AnnaBridge 153:b484a57bc302 358 \details Assigns the given value to the Floating Point Status/Control register.
AnnaBridge 153:b484a57bc302 359 \param [in] fpscr Floating Point Status/Control value to set
AnnaBridge 153:b484a57bc302 360 */
AnnaBridge 153:b484a57bc302 361 __STATIC_INLINE void __set_FPSCR(uint32_t fpscr)
AnnaBridge 153:b484a57bc302 362 {
AnnaBridge 153:b484a57bc302 363 #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \
AnnaBridge 153:b484a57bc302 364 (defined (__FPU_USED ) && (__FPU_USED == 1U)) )
AnnaBridge 153:b484a57bc302 365 register uint32_t __regfpscr __ASM("fpscr");
AnnaBridge 153:b484a57bc302 366 __regfpscr = (fpscr);
AnnaBridge 153:b484a57bc302 367 #else
AnnaBridge 153:b484a57bc302 368 (void)fpscr;
AnnaBridge 153:b484a57bc302 369 #endif
AnnaBridge 153:b484a57bc302 370 }
AnnaBridge 153:b484a57bc302 371
AnnaBridge 153:b484a57bc302 372 #endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */
AnnaBridge 153:b484a57bc302 373
AnnaBridge 153:b484a57bc302 374
AnnaBridge 153:b484a57bc302 375
AnnaBridge 153:b484a57bc302 376 /*@} end of CMSIS_Core_RegAccFunctions */
AnnaBridge 153:b484a57bc302 377
AnnaBridge 153:b484a57bc302 378
AnnaBridge 153:b484a57bc302 379 /* ########################## Core Instruction Access ######################### */
AnnaBridge 153:b484a57bc302 380 /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface
AnnaBridge 153:b484a57bc302 381 Access to dedicated instructions
AnnaBridge 153:b484a57bc302 382 @{
AnnaBridge 153:b484a57bc302 383 */
AnnaBridge 153:b484a57bc302 384
AnnaBridge 153:b484a57bc302 385 /**
AnnaBridge 153:b484a57bc302 386 \brief No Operation
AnnaBridge 153:b484a57bc302 387 \details No Operation does nothing. This instruction can be used for code alignment purposes.
AnnaBridge 153:b484a57bc302 388 */
AnnaBridge 153:b484a57bc302 389 #define __NOP __nop
AnnaBridge 153:b484a57bc302 390
AnnaBridge 153:b484a57bc302 391
AnnaBridge 153:b484a57bc302 392 /**
AnnaBridge 153:b484a57bc302 393 \brief Wait For Interrupt
AnnaBridge 153:b484a57bc302 394 \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs.
AnnaBridge 153:b484a57bc302 395 */
AnnaBridge 153:b484a57bc302 396 #define __WFI __wfi
AnnaBridge 153:b484a57bc302 397
AnnaBridge 153:b484a57bc302 398
AnnaBridge 153:b484a57bc302 399 /**
AnnaBridge 153:b484a57bc302 400 \brief Wait For Event
AnnaBridge 153:b484a57bc302 401 \details Wait For Event is a hint instruction that permits the processor to enter
AnnaBridge 153:b484a57bc302 402 a low-power state until one of a number of events occurs.
AnnaBridge 153:b484a57bc302 403 */
AnnaBridge 153:b484a57bc302 404 #define __WFE __wfe
AnnaBridge 153:b484a57bc302 405
AnnaBridge 153:b484a57bc302 406
AnnaBridge 153:b484a57bc302 407 /**
AnnaBridge 153:b484a57bc302 408 \brief Send Event
AnnaBridge 153:b484a57bc302 409 \details Send Event is a hint instruction. It causes an event to be signaled to the CPU.
AnnaBridge 153:b484a57bc302 410 */
AnnaBridge 153:b484a57bc302 411 #define __SEV __sev
AnnaBridge 153:b484a57bc302 412
AnnaBridge 153:b484a57bc302 413
AnnaBridge 153:b484a57bc302 414 /**
AnnaBridge 153:b484a57bc302 415 \brief Instruction Synchronization Barrier
AnnaBridge 153:b484a57bc302 416 \details Instruction Synchronization Barrier flushes the pipeline in the processor,
AnnaBridge 153:b484a57bc302 417 so that all instructions following the ISB are fetched from cache or memory,
AnnaBridge 153:b484a57bc302 418 after the instruction has been completed.
AnnaBridge 153:b484a57bc302 419 */
AnnaBridge 153:b484a57bc302 420 #define __ISB() do {\
AnnaBridge 153:b484a57bc302 421 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 422 __isb(0xF);\
AnnaBridge 153:b484a57bc302 423 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 424 } while (0U)
AnnaBridge 153:b484a57bc302 425
AnnaBridge 153:b484a57bc302 426 /**
AnnaBridge 153:b484a57bc302 427 \brief Data Synchronization Barrier
AnnaBridge 153:b484a57bc302 428 \details Acts as a special kind of Data Memory Barrier.
AnnaBridge 153:b484a57bc302 429 It completes when all explicit memory accesses before this instruction complete.
AnnaBridge 153:b484a57bc302 430 */
AnnaBridge 153:b484a57bc302 431 #define __DSB() do {\
AnnaBridge 153:b484a57bc302 432 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 433 __dsb(0xF);\
AnnaBridge 153:b484a57bc302 434 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 435 } while (0U)
AnnaBridge 153:b484a57bc302 436
AnnaBridge 153:b484a57bc302 437 /**
AnnaBridge 153:b484a57bc302 438 \brief Data Memory Barrier
AnnaBridge 153:b484a57bc302 439 \details Ensures the apparent order of the explicit memory operations before
AnnaBridge 153:b484a57bc302 440 and after the instruction, without ensuring their completion.
AnnaBridge 153:b484a57bc302 441 */
AnnaBridge 153:b484a57bc302 442 #define __DMB() do {\
AnnaBridge 153:b484a57bc302 443 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 444 __dmb(0xF);\
AnnaBridge 153:b484a57bc302 445 __schedule_barrier();\
AnnaBridge 153:b484a57bc302 446 } while (0U)
AnnaBridge 153:b484a57bc302 447
AnnaBridge 153:b484a57bc302 448 /**
AnnaBridge 153:b484a57bc302 449 \brief Reverse byte order (32 bit)
AnnaBridge 153:b484a57bc302 450 \details Reverses the byte order in integer value.
AnnaBridge 153:b484a57bc302 451 \param [in] value Value to reverse
AnnaBridge 153:b484a57bc302 452 \return Reversed value
AnnaBridge 153:b484a57bc302 453 */
AnnaBridge 153:b484a57bc302 454 #define __REV __rev
AnnaBridge 153:b484a57bc302 455
AnnaBridge 153:b484a57bc302 456
AnnaBridge 153:b484a57bc302 457 /**
AnnaBridge 153:b484a57bc302 458 \brief Reverse byte order (16 bit)
AnnaBridge 153:b484a57bc302 459 \details Reverses the byte order in two unsigned short values.
AnnaBridge 153:b484a57bc302 460 \param [in] value Value to reverse
AnnaBridge 153:b484a57bc302 461 \return Reversed value
AnnaBridge 153:b484a57bc302 462 */
AnnaBridge 153:b484a57bc302 463 #ifndef __NO_EMBEDDED_ASM
Anna Bridge 160:5571c4ff569f 464 __attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint16_t __REV16(uint16_t value)
AnnaBridge 153:b484a57bc302 465 {
AnnaBridge 153:b484a57bc302 466 rev16 r0, r0
AnnaBridge 153:b484a57bc302 467 bx lr
AnnaBridge 153:b484a57bc302 468 }
AnnaBridge 153:b484a57bc302 469 #endif
AnnaBridge 153:b484a57bc302 470
AnnaBridge 153:b484a57bc302 471
AnnaBridge 153:b484a57bc302 472 /**
AnnaBridge 153:b484a57bc302 473 \brief Reverse byte order in signed short value
AnnaBridge 153:b484a57bc302 474 \details Reverses the byte order in a signed short value with sign extension to integer.
AnnaBridge 153:b484a57bc302 475 \param [in] value Value to reverse
AnnaBridge 153:b484a57bc302 476 \return Reversed value
AnnaBridge 153:b484a57bc302 477 */
AnnaBridge 153:b484a57bc302 478 #ifndef __NO_EMBEDDED_ASM
Anna Bridge 160:5571c4ff569f 479 __attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value)
AnnaBridge 153:b484a57bc302 480 {
AnnaBridge 153:b484a57bc302 481 revsh r0, r0
AnnaBridge 153:b484a57bc302 482 bx lr
AnnaBridge 153:b484a57bc302 483 }
AnnaBridge 153:b484a57bc302 484 #endif
AnnaBridge 153:b484a57bc302 485
AnnaBridge 153:b484a57bc302 486
AnnaBridge 153:b484a57bc302 487 /**
AnnaBridge 153:b484a57bc302 488 \brief Rotate Right in unsigned value (32 bit)
AnnaBridge 153:b484a57bc302 489 \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits.
AnnaBridge 153:b484a57bc302 490 \param [in] op1 Value to rotate
AnnaBridge 153:b484a57bc302 491 \param [in] op2 Number of Bits to rotate
AnnaBridge 153:b484a57bc302 492 \return Rotated value
AnnaBridge 153:b484a57bc302 493 */
AnnaBridge 153:b484a57bc302 494 #define __ROR __ror
AnnaBridge 153:b484a57bc302 495
AnnaBridge 153:b484a57bc302 496
AnnaBridge 153:b484a57bc302 497 /**
AnnaBridge 153:b484a57bc302 498 \brief Breakpoint
AnnaBridge 153:b484a57bc302 499 \details Causes the processor to enter Debug state.
AnnaBridge 153:b484a57bc302 500 Debug tools can use this to investigate system state when the instruction at a particular address is reached.
AnnaBridge 153:b484a57bc302 501 \param [in] value is ignored by the processor.
AnnaBridge 153:b484a57bc302 502 If required, a debugger can use it to store additional information about the breakpoint.
AnnaBridge 153:b484a57bc302 503 */
AnnaBridge 153:b484a57bc302 504 #define __BKPT(value) __breakpoint(value)
AnnaBridge 153:b484a57bc302 505
AnnaBridge 153:b484a57bc302 506
AnnaBridge 153:b484a57bc302 507 /**
AnnaBridge 153:b484a57bc302 508 \brief Reverse bit order of value
AnnaBridge 153:b484a57bc302 509 \details Reverses the bit order of the given value.
AnnaBridge 153:b484a57bc302 510 \param [in] value Value to reverse
AnnaBridge 153:b484a57bc302 511 \return Reversed value
AnnaBridge 153:b484a57bc302 512 */
AnnaBridge 153:b484a57bc302 513 #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
AnnaBridge 153:b484a57bc302 514 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) )
AnnaBridge 153:b484a57bc302 515 #define __RBIT __rbit
AnnaBridge 153:b484a57bc302 516 #else
AnnaBridge 153:b484a57bc302 517 __attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
AnnaBridge 153:b484a57bc302 518 {
AnnaBridge 153:b484a57bc302 519 uint32_t result;
Anna Bridge 160:5571c4ff569f 520 uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */
AnnaBridge 153:b484a57bc302 521
AnnaBridge 153:b484a57bc302 522 result = value; /* r will be reversed bits of v; first get LSB of v */
Anna Bridge 160:5571c4ff569f 523 for (value >>= 1U; value != 0U; value >>= 1U)
AnnaBridge 153:b484a57bc302 524 {
AnnaBridge 153:b484a57bc302 525 result <<= 1U;
AnnaBridge 153:b484a57bc302 526 result |= value & 1U;
AnnaBridge 153:b484a57bc302 527 s--;
AnnaBridge 153:b484a57bc302 528 }
AnnaBridge 153:b484a57bc302 529 result <<= s; /* shift when v's highest bits are zero */
Anna Bridge 160:5571c4ff569f 530 return result;
AnnaBridge 153:b484a57bc302 531 }
AnnaBridge 153:b484a57bc302 532 #endif
AnnaBridge 153:b484a57bc302 533
AnnaBridge 153:b484a57bc302 534
AnnaBridge 153:b484a57bc302 535 /**
AnnaBridge 153:b484a57bc302 536 \brief Count leading zeros
AnnaBridge 153:b484a57bc302 537 \details Counts the number of leading zeros of a data value.
AnnaBridge 153:b484a57bc302 538 \param [in] value Value to count the leading zeros
AnnaBridge 153:b484a57bc302 539 \return number of leading zeros in value
AnnaBridge 153:b484a57bc302 540 */
AnnaBridge 153:b484a57bc302 541 #define __CLZ __clz
AnnaBridge 153:b484a57bc302 542
AnnaBridge 153:b484a57bc302 543
AnnaBridge 153:b484a57bc302 544 #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
AnnaBridge 153:b484a57bc302 545 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) )
AnnaBridge 153:b484a57bc302 546
AnnaBridge 153:b484a57bc302 547 /**
AnnaBridge 153:b484a57bc302 548 \brief LDR Exclusive (8 bit)
AnnaBridge 153:b484a57bc302 549 \details Executes a exclusive LDR instruction for 8 bit value.
AnnaBridge 153:b484a57bc302 550 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 551 \return value of type uint8_t at (*ptr)
AnnaBridge 153:b484a57bc302 552 */
AnnaBridge 153:b484a57bc302 553 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 554 #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr))
AnnaBridge 153:b484a57bc302 555 #else
AnnaBridge 153:b484a57bc302 556 #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop")
AnnaBridge 153:b484a57bc302 557 #endif
AnnaBridge 153:b484a57bc302 558
AnnaBridge 153:b484a57bc302 559
AnnaBridge 153:b484a57bc302 560 /**
AnnaBridge 153:b484a57bc302 561 \brief LDR Exclusive (16 bit)
AnnaBridge 153:b484a57bc302 562 \details Executes a exclusive LDR instruction for 16 bit values.
AnnaBridge 153:b484a57bc302 563 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 564 \return value of type uint16_t at (*ptr)
AnnaBridge 153:b484a57bc302 565 */
AnnaBridge 153:b484a57bc302 566 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 567 #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr))
AnnaBridge 153:b484a57bc302 568 #else
AnnaBridge 153:b484a57bc302 569 #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop")
AnnaBridge 153:b484a57bc302 570 #endif
AnnaBridge 153:b484a57bc302 571
AnnaBridge 153:b484a57bc302 572
AnnaBridge 153:b484a57bc302 573 /**
AnnaBridge 153:b484a57bc302 574 \brief LDR Exclusive (32 bit)
AnnaBridge 153:b484a57bc302 575 \details Executes a exclusive LDR instruction for 32 bit values.
AnnaBridge 153:b484a57bc302 576 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 577 \return value of type uint32_t at (*ptr)
AnnaBridge 153:b484a57bc302 578 */
AnnaBridge 153:b484a57bc302 579 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 580 #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr))
AnnaBridge 153:b484a57bc302 581 #else
AnnaBridge 153:b484a57bc302 582 #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop")
AnnaBridge 153:b484a57bc302 583 #endif
AnnaBridge 153:b484a57bc302 584
AnnaBridge 153:b484a57bc302 585
AnnaBridge 153:b484a57bc302 586 /**
AnnaBridge 153:b484a57bc302 587 \brief STR Exclusive (8 bit)
AnnaBridge 153:b484a57bc302 588 \details Executes a exclusive STR instruction for 8 bit values.
AnnaBridge 153:b484a57bc302 589 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 590 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 591 \return 0 Function succeeded
AnnaBridge 153:b484a57bc302 592 \return 1 Function failed
AnnaBridge 153:b484a57bc302 593 */
AnnaBridge 153:b484a57bc302 594 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 595 #define __STREXB(value, ptr) __strex(value, ptr)
AnnaBridge 153:b484a57bc302 596 #else
AnnaBridge 153:b484a57bc302 597 #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop")
AnnaBridge 153:b484a57bc302 598 #endif
AnnaBridge 153:b484a57bc302 599
AnnaBridge 153:b484a57bc302 600
AnnaBridge 153:b484a57bc302 601 /**
AnnaBridge 153:b484a57bc302 602 \brief STR Exclusive (16 bit)
AnnaBridge 153:b484a57bc302 603 \details Executes a exclusive STR instruction for 16 bit values.
AnnaBridge 153:b484a57bc302 604 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 605 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 606 \return 0 Function succeeded
AnnaBridge 153:b484a57bc302 607 \return 1 Function failed
AnnaBridge 153:b484a57bc302 608 */
AnnaBridge 153:b484a57bc302 609 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 610 #define __STREXH(value, ptr) __strex(value, ptr)
AnnaBridge 153:b484a57bc302 611 #else
AnnaBridge 153:b484a57bc302 612 #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop")
AnnaBridge 153:b484a57bc302 613 #endif
AnnaBridge 153:b484a57bc302 614
AnnaBridge 153:b484a57bc302 615
AnnaBridge 153:b484a57bc302 616 /**
AnnaBridge 153:b484a57bc302 617 \brief STR Exclusive (32 bit)
AnnaBridge 153:b484a57bc302 618 \details Executes a exclusive STR instruction for 32 bit values.
AnnaBridge 153:b484a57bc302 619 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 620 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 621 \return 0 Function succeeded
AnnaBridge 153:b484a57bc302 622 \return 1 Function failed
AnnaBridge 153:b484a57bc302 623 */
AnnaBridge 153:b484a57bc302 624 #if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020)
AnnaBridge 153:b484a57bc302 625 #define __STREXW(value, ptr) __strex(value, ptr)
AnnaBridge 153:b484a57bc302 626 #else
AnnaBridge 153:b484a57bc302 627 #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop")
AnnaBridge 153:b484a57bc302 628 #endif
AnnaBridge 153:b484a57bc302 629
AnnaBridge 153:b484a57bc302 630
AnnaBridge 153:b484a57bc302 631 /**
AnnaBridge 153:b484a57bc302 632 \brief Remove the exclusive lock
AnnaBridge 153:b484a57bc302 633 \details Removes the exclusive lock which is created by LDREX.
AnnaBridge 153:b484a57bc302 634 */
AnnaBridge 153:b484a57bc302 635 #define __CLREX __clrex
AnnaBridge 153:b484a57bc302 636
AnnaBridge 153:b484a57bc302 637
AnnaBridge 153:b484a57bc302 638 /**
AnnaBridge 153:b484a57bc302 639 \brief Signed Saturate
AnnaBridge 153:b484a57bc302 640 \details Saturates a signed value.
AnnaBridge 153:b484a57bc302 641 \param [in] value Value to be saturated
AnnaBridge 153:b484a57bc302 642 \param [in] sat Bit position to saturate to (1..32)
AnnaBridge 153:b484a57bc302 643 \return Saturated value
AnnaBridge 153:b484a57bc302 644 */
AnnaBridge 153:b484a57bc302 645 #define __SSAT __ssat
AnnaBridge 153:b484a57bc302 646
AnnaBridge 153:b484a57bc302 647
AnnaBridge 153:b484a57bc302 648 /**
AnnaBridge 153:b484a57bc302 649 \brief Unsigned Saturate
AnnaBridge 153:b484a57bc302 650 \details Saturates an unsigned value.
AnnaBridge 153:b484a57bc302 651 \param [in] value Value to be saturated
AnnaBridge 153:b484a57bc302 652 \param [in] sat Bit position to saturate to (0..31)
AnnaBridge 153:b484a57bc302 653 \return Saturated value
AnnaBridge 153:b484a57bc302 654 */
AnnaBridge 153:b484a57bc302 655 #define __USAT __usat
AnnaBridge 153:b484a57bc302 656
AnnaBridge 153:b484a57bc302 657
AnnaBridge 153:b484a57bc302 658 /**
AnnaBridge 153:b484a57bc302 659 \brief Rotate Right with Extend (32 bit)
AnnaBridge 153:b484a57bc302 660 \details Moves each bit of a bitstring right by one bit.
AnnaBridge 153:b484a57bc302 661 The carry input is shifted in at the left end of the bitstring.
AnnaBridge 153:b484a57bc302 662 \param [in] value Value to rotate
AnnaBridge 153:b484a57bc302 663 \return Rotated value
AnnaBridge 153:b484a57bc302 664 */
AnnaBridge 153:b484a57bc302 665 #ifndef __NO_EMBEDDED_ASM
AnnaBridge 153:b484a57bc302 666 __attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value)
AnnaBridge 153:b484a57bc302 667 {
AnnaBridge 153:b484a57bc302 668 rrx r0, r0
AnnaBridge 153:b484a57bc302 669 bx lr
AnnaBridge 153:b484a57bc302 670 }
AnnaBridge 153:b484a57bc302 671 #endif
AnnaBridge 153:b484a57bc302 672
AnnaBridge 153:b484a57bc302 673
AnnaBridge 153:b484a57bc302 674 /**
AnnaBridge 153:b484a57bc302 675 \brief LDRT Unprivileged (8 bit)
AnnaBridge 153:b484a57bc302 676 \details Executes a Unprivileged LDRT instruction for 8 bit value.
AnnaBridge 153:b484a57bc302 677 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 678 \return value of type uint8_t at (*ptr)
AnnaBridge 153:b484a57bc302 679 */
AnnaBridge 153:b484a57bc302 680 #define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr))
AnnaBridge 153:b484a57bc302 681
AnnaBridge 153:b484a57bc302 682
AnnaBridge 153:b484a57bc302 683 /**
AnnaBridge 153:b484a57bc302 684 \brief LDRT Unprivileged (16 bit)
AnnaBridge 153:b484a57bc302 685 \details Executes a Unprivileged LDRT instruction for 16 bit values.
AnnaBridge 153:b484a57bc302 686 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 687 \return value of type uint16_t at (*ptr)
AnnaBridge 153:b484a57bc302 688 */
AnnaBridge 153:b484a57bc302 689 #define __LDRHT(ptr) ((uint16_t) __ldrt(ptr))
AnnaBridge 153:b484a57bc302 690
AnnaBridge 153:b484a57bc302 691
AnnaBridge 153:b484a57bc302 692 /**
AnnaBridge 153:b484a57bc302 693 \brief LDRT Unprivileged (32 bit)
AnnaBridge 153:b484a57bc302 694 \details Executes a Unprivileged LDRT instruction for 32 bit values.
AnnaBridge 153:b484a57bc302 695 \param [in] ptr Pointer to data
AnnaBridge 153:b484a57bc302 696 \return value of type uint32_t at (*ptr)
AnnaBridge 153:b484a57bc302 697 */
AnnaBridge 153:b484a57bc302 698 #define __LDRT(ptr) ((uint32_t ) __ldrt(ptr))
AnnaBridge 153:b484a57bc302 699
AnnaBridge 153:b484a57bc302 700
AnnaBridge 153:b484a57bc302 701 /**
AnnaBridge 153:b484a57bc302 702 \brief STRT Unprivileged (8 bit)
AnnaBridge 153:b484a57bc302 703 \details Executes a Unprivileged STRT instruction for 8 bit values.
AnnaBridge 153:b484a57bc302 704 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 705 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 706 */
AnnaBridge 153:b484a57bc302 707 #define __STRBT(value, ptr) __strt(value, ptr)
AnnaBridge 153:b484a57bc302 708
AnnaBridge 153:b484a57bc302 709
AnnaBridge 153:b484a57bc302 710 /**
AnnaBridge 153:b484a57bc302 711 \brief STRT Unprivileged (16 bit)
AnnaBridge 153:b484a57bc302 712 \details Executes a Unprivileged STRT instruction for 16 bit values.
AnnaBridge 153:b484a57bc302 713 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 714 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 715 */
AnnaBridge 153:b484a57bc302 716 #define __STRHT(value, ptr) __strt(value, ptr)
AnnaBridge 153:b484a57bc302 717
AnnaBridge 153:b484a57bc302 718
AnnaBridge 153:b484a57bc302 719 /**
AnnaBridge 153:b484a57bc302 720 \brief STRT Unprivileged (32 bit)
AnnaBridge 153:b484a57bc302 721 \details Executes a Unprivileged STRT instruction for 32 bit values.
AnnaBridge 153:b484a57bc302 722 \param [in] value Value to store
AnnaBridge 153:b484a57bc302 723 \param [in] ptr Pointer to location
AnnaBridge 153:b484a57bc302 724 */
AnnaBridge 153:b484a57bc302 725 #define __STRT(value, ptr) __strt(value, ptr)
AnnaBridge 153:b484a57bc302 726
Anna Bridge 160:5571c4ff569f 727 #else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
Anna Bridge 160:5571c4ff569f 728 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */
Anna Bridge 160:5571c4ff569f 729
Anna Bridge 160:5571c4ff569f 730 /**
Anna Bridge 160:5571c4ff569f 731 \brief Signed Saturate
Anna Bridge 160:5571c4ff569f 732 \details Saturates a signed value.
Anna Bridge 160:5571c4ff569f 733 \param [in] value Value to be saturated
Anna Bridge 160:5571c4ff569f 734 \param [in] sat Bit position to saturate to (1..32)
Anna Bridge 160:5571c4ff569f 735 \return Saturated value
Anna Bridge 160:5571c4ff569f 736 */
Anna Bridge 160:5571c4ff569f 737 __attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat)
Anna Bridge 160:5571c4ff569f 738 {
Anna Bridge 160:5571c4ff569f 739 if ((sat >= 1U) && (sat <= 32U)) {
Anna Bridge 160:5571c4ff569f 740 const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U);
Anna Bridge 160:5571c4ff569f 741 const int32_t min = -1 - max ;
Anna Bridge 160:5571c4ff569f 742 if (val > max) {
Anna Bridge 160:5571c4ff569f 743 return max;
Anna Bridge 160:5571c4ff569f 744 } else if (val < min) {
Anna Bridge 160:5571c4ff569f 745 return min;
Anna Bridge 160:5571c4ff569f 746 }
Anna Bridge 160:5571c4ff569f 747 }
Anna Bridge 160:5571c4ff569f 748 return val;
Anna Bridge 160:5571c4ff569f 749 }
Anna Bridge 160:5571c4ff569f 750
Anna Bridge 160:5571c4ff569f 751 /**
Anna Bridge 160:5571c4ff569f 752 \brief Unsigned Saturate
Anna Bridge 160:5571c4ff569f 753 \details Saturates an unsigned value.
Anna Bridge 160:5571c4ff569f 754 \param [in] value Value to be saturated
Anna Bridge 160:5571c4ff569f 755 \param [in] sat Bit position to saturate to (0..31)
Anna Bridge 160:5571c4ff569f 756 \return Saturated value
Anna Bridge 160:5571c4ff569f 757 */
Anna Bridge 160:5571c4ff569f 758 __attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat)
Anna Bridge 160:5571c4ff569f 759 {
Anna Bridge 160:5571c4ff569f 760 if (sat <= 31U) {
Anna Bridge 160:5571c4ff569f 761 const uint32_t max = ((1U << sat) - 1U);
Anna Bridge 160:5571c4ff569f 762 if (val > (int32_t)max) {
Anna Bridge 160:5571c4ff569f 763 return max;
Anna Bridge 160:5571c4ff569f 764 } else if (val < 0) {
Anna Bridge 160:5571c4ff569f 765 return 0U;
Anna Bridge 160:5571c4ff569f 766 }
Anna Bridge 160:5571c4ff569f 767 }
Anna Bridge 160:5571c4ff569f 768 return (uint32_t)val;
Anna Bridge 160:5571c4ff569f 769 }
Anna Bridge 160:5571c4ff569f 770
AnnaBridge 153:b484a57bc302 771 #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \
AnnaBridge 153:b484a57bc302 772 (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */
AnnaBridge 153:b484a57bc302 773
AnnaBridge 153:b484a57bc302 774 /*@}*/ /* end of group CMSIS_Core_InstructionInterface */
AnnaBridge 153:b484a57bc302 775
AnnaBridge 153:b484a57bc302 776
AnnaBridge 153:b484a57bc302 777 /* ################### Compiler specific Intrinsics ########################### */
AnnaBridge 153:b484a57bc302 778 /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
AnnaBridge 153:b484a57bc302 779 Access to dedicated SIMD instructions
AnnaBridge 153:b484a57bc302 780 @{
AnnaBridge 153:b484a57bc302 781 */
AnnaBridge 153:b484a57bc302 782
AnnaBridge 153:b484a57bc302 783 #if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) )
AnnaBridge 153:b484a57bc302 784
AnnaBridge 153:b484a57bc302 785 #define __SADD8 __sadd8
AnnaBridge 153:b484a57bc302 786 #define __QADD8 __qadd8
AnnaBridge 153:b484a57bc302 787 #define __SHADD8 __shadd8
AnnaBridge 153:b484a57bc302 788 #define __UADD8 __uadd8
AnnaBridge 153:b484a57bc302 789 #define __UQADD8 __uqadd8
AnnaBridge 153:b484a57bc302 790 #define __UHADD8 __uhadd8
AnnaBridge 153:b484a57bc302 791 #define __SSUB8 __ssub8
AnnaBridge 153:b484a57bc302 792 #define __QSUB8 __qsub8
AnnaBridge 153:b484a57bc302 793 #define __SHSUB8 __shsub8
AnnaBridge 153:b484a57bc302 794 #define __USUB8 __usub8
AnnaBridge 153:b484a57bc302 795 #define __UQSUB8 __uqsub8
AnnaBridge 153:b484a57bc302 796 #define __UHSUB8 __uhsub8
AnnaBridge 153:b484a57bc302 797 #define __SADD16 __sadd16
AnnaBridge 153:b484a57bc302 798 #define __QADD16 __qadd16
AnnaBridge 153:b484a57bc302 799 #define __SHADD16 __shadd16
AnnaBridge 153:b484a57bc302 800 #define __UADD16 __uadd16
AnnaBridge 153:b484a57bc302 801 #define __UQADD16 __uqadd16
AnnaBridge 153:b484a57bc302 802 #define __UHADD16 __uhadd16
AnnaBridge 153:b484a57bc302 803 #define __SSUB16 __ssub16
AnnaBridge 153:b484a57bc302 804 #define __QSUB16 __qsub16
AnnaBridge 153:b484a57bc302 805 #define __SHSUB16 __shsub16
AnnaBridge 153:b484a57bc302 806 #define __USUB16 __usub16
AnnaBridge 153:b484a57bc302 807 #define __UQSUB16 __uqsub16
AnnaBridge 153:b484a57bc302 808 #define __UHSUB16 __uhsub16
AnnaBridge 153:b484a57bc302 809 #define __SASX __sasx
AnnaBridge 153:b484a57bc302 810 #define __QASX __qasx
AnnaBridge 153:b484a57bc302 811 #define __SHASX __shasx
AnnaBridge 153:b484a57bc302 812 #define __UASX __uasx
AnnaBridge 153:b484a57bc302 813 #define __UQASX __uqasx
AnnaBridge 153:b484a57bc302 814 #define __UHASX __uhasx
AnnaBridge 153:b484a57bc302 815 #define __SSAX __ssax
AnnaBridge 153:b484a57bc302 816 #define __QSAX __qsax
AnnaBridge 153:b484a57bc302 817 #define __SHSAX __shsax
AnnaBridge 153:b484a57bc302 818 #define __USAX __usax
AnnaBridge 153:b484a57bc302 819 #define __UQSAX __uqsax
AnnaBridge 153:b484a57bc302 820 #define __UHSAX __uhsax
AnnaBridge 153:b484a57bc302 821 #define __USAD8 __usad8
AnnaBridge 153:b484a57bc302 822 #define __USADA8 __usada8
AnnaBridge 153:b484a57bc302 823 #define __SSAT16 __ssat16
AnnaBridge 153:b484a57bc302 824 #define __USAT16 __usat16
AnnaBridge 153:b484a57bc302 825 #define __UXTB16 __uxtb16
AnnaBridge 153:b484a57bc302 826 #define __UXTAB16 __uxtab16
AnnaBridge 153:b484a57bc302 827 #define __SXTB16 __sxtb16
AnnaBridge 153:b484a57bc302 828 #define __SXTAB16 __sxtab16
AnnaBridge 153:b484a57bc302 829 #define __SMUAD __smuad
AnnaBridge 153:b484a57bc302 830 #define __SMUADX __smuadx
AnnaBridge 153:b484a57bc302 831 #define __SMLAD __smlad
AnnaBridge 153:b484a57bc302 832 #define __SMLADX __smladx
AnnaBridge 153:b484a57bc302 833 #define __SMLALD __smlald
AnnaBridge 153:b484a57bc302 834 #define __SMLALDX __smlaldx
AnnaBridge 153:b484a57bc302 835 #define __SMUSD __smusd
AnnaBridge 153:b484a57bc302 836 #define __SMUSDX __smusdx
AnnaBridge 153:b484a57bc302 837 #define __SMLSD __smlsd
AnnaBridge 153:b484a57bc302 838 #define __SMLSDX __smlsdx
AnnaBridge 153:b484a57bc302 839 #define __SMLSLD __smlsld
AnnaBridge 153:b484a57bc302 840 #define __SMLSLDX __smlsldx
AnnaBridge 153:b484a57bc302 841 #define __SEL __sel
AnnaBridge 153:b484a57bc302 842 #define __QADD __qadd
AnnaBridge 153:b484a57bc302 843 #define __QSUB __qsub
AnnaBridge 153:b484a57bc302 844
AnnaBridge 153:b484a57bc302 845 #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
AnnaBridge 153:b484a57bc302 846 ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
AnnaBridge 153:b484a57bc302 847
AnnaBridge 153:b484a57bc302 848 #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \
AnnaBridge 153:b484a57bc302 849 ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) )
AnnaBridge 153:b484a57bc302 850
AnnaBridge 153:b484a57bc302 851 #define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \
AnnaBridge 153:b484a57bc302 852 ((int64_t)(ARG3) << 32U) ) >> 32U))
AnnaBridge 153:b484a57bc302 853
AnnaBridge 153:b484a57bc302 854 #endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */
AnnaBridge 153:b484a57bc302 855 /*@} end of group CMSIS_SIMD_intrinsics */
AnnaBridge 153:b484a57bc302 856
AnnaBridge 153:b484a57bc302 857
AnnaBridge 153:b484a57bc302 858 #endif /* __CMSIS_ARMCC_H */