Programme d'utilisation servomotors MX12 V1

Committer:
R66Y
Date:
Fri May 19 14:32:14 2017 +0000
Revision:
0:80df663dd15e
programme pour utiliser les servomoteurs MX12.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
R66Y 0:80df663dd15e 1 /**************************************************************************//**
R66Y 0:80df663dd15e 2 * @file core_cmFunc.h
R66Y 0:80df663dd15e 3 * @brief CMSIS Cortex-M Core Function Access Header File
R66Y 0:80df663dd15e 4 * @version V3.00
R66Y 0:80df663dd15e 5 * @date 09. December 2011
R66Y 0:80df663dd15e 6 *
R66Y 0:80df663dd15e 7 * @note
R66Y 0:80df663dd15e 8 * Copyright (C) 2009-2011 ARM Limited. All rights reserved.
R66Y 0:80df663dd15e 9 *
R66Y 0:80df663dd15e 10 * @par
R66Y 0:80df663dd15e 11 * ARM Limited (ARM) is supplying this software for use with Cortex-M
R66Y 0:80df663dd15e 12 * processor based microcontrollers. This file can be freely distributed
R66Y 0:80df663dd15e 13 * within development tools that are supporting such ARM based processors.
R66Y 0:80df663dd15e 14 *
R66Y 0:80df663dd15e 15 * @par
R66Y 0:80df663dd15e 16 * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
R66Y 0:80df663dd15e 17 * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
R66Y 0:80df663dd15e 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
R66Y 0:80df663dd15e 19 * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
R66Y 0:80df663dd15e 20 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
R66Y 0:80df663dd15e 21 *
R66Y 0:80df663dd15e 22 ******************************************************************************/
R66Y 0:80df663dd15e 23
R66Y 0:80df663dd15e 24 #ifndef __CORE_CMFUNC_H
R66Y 0:80df663dd15e 25 #define __CORE_CMFUNC_H
R66Y 0:80df663dd15e 26
R66Y 0:80df663dd15e 27
R66Y 0:80df663dd15e 28 /* ########################### Core Function Access ########################### */
R66Y 0:80df663dd15e 29 /** \ingroup CMSIS_Core_FunctionInterface
R66Y 0:80df663dd15e 30 \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions
R66Y 0:80df663dd15e 31 @{
R66Y 0:80df663dd15e 32 */
R66Y 0:80df663dd15e 33
R66Y 0:80df663dd15e 34 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
R66Y 0:80df663dd15e 35 /* ARM armcc specific functions */
R66Y 0:80df663dd15e 36
R66Y 0:80df663dd15e 37 #if (__ARMCC_VERSION < 400677)
R66Y 0:80df663dd15e 38 #error "Please use ARM Compiler Toolchain V4.0.677 or later!"
R66Y 0:80df663dd15e 39 #endif
R66Y 0:80df663dd15e 40
R66Y 0:80df663dd15e 41 /* intrinsic void __enable_irq(); */
R66Y 0:80df663dd15e 42 /* intrinsic void __disable_irq(); */
R66Y 0:80df663dd15e 43
R66Y 0:80df663dd15e 44 /** \brief Get Control Register
R66Y 0:80df663dd15e 45
R66Y 0:80df663dd15e 46 This function returns the content of the Control Register.
R66Y 0:80df663dd15e 47
R66Y 0:80df663dd15e 48 \return Control Register value
R66Y 0:80df663dd15e 49 */
R66Y 0:80df663dd15e 50 static __INLINE uint32_t __get_CONTROL(void)
R66Y 0:80df663dd15e 51 {
R66Y 0:80df663dd15e 52 register uint32_t __regControl __ASM("control");
R66Y 0:80df663dd15e 53 return(__regControl);
R66Y 0:80df663dd15e 54 }
R66Y 0:80df663dd15e 55
R66Y 0:80df663dd15e 56
R66Y 0:80df663dd15e 57 /** \brief Set Control Register
R66Y 0:80df663dd15e 58
R66Y 0:80df663dd15e 59 This function writes the given value to the Control Register.
R66Y 0:80df663dd15e 60
R66Y 0:80df663dd15e 61 \param [in] control Control Register value to set
R66Y 0:80df663dd15e 62 */
R66Y 0:80df663dd15e 63 static __INLINE void __set_CONTROL(uint32_t control)
R66Y 0:80df663dd15e 64 {
R66Y 0:80df663dd15e 65 register uint32_t __regControl __ASM("control");
R66Y 0:80df663dd15e 66 __regControl = control;
R66Y 0:80df663dd15e 67 }
R66Y 0:80df663dd15e 68
R66Y 0:80df663dd15e 69
R66Y 0:80df663dd15e 70 /** \brief Get IPSR Register
R66Y 0:80df663dd15e 71
R66Y 0:80df663dd15e 72 This function returns the content of the IPSR Register.
R66Y 0:80df663dd15e 73
R66Y 0:80df663dd15e 74 \return IPSR Register value
R66Y 0:80df663dd15e 75 */
R66Y 0:80df663dd15e 76 static __INLINE uint32_t __get_IPSR(void)
R66Y 0:80df663dd15e 77 {
R66Y 0:80df663dd15e 78 register uint32_t __regIPSR __ASM("ipsr");
R66Y 0:80df663dd15e 79 return(__regIPSR);
R66Y 0:80df663dd15e 80 }
R66Y 0:80df663dd15e 81
R66Y 0:80df663dd15e 82
R66Y 0:80df663dd15e 83 /** \brief Get APSR Register
R66Y 0:80df663dd15e 84
R66Y 0:80df663dd15e 85 This function returns the content of the APSR Register.
R66Y 0:80df663dd15e 86
R66Y 0:80df663dd15e 87 \return APSR Register value
R66Y 0:80df663dd15e 88 */
R66Y 0:80df663dd15e 89 static __INLINE uint32_t __get_APSR(void)
R66Y 0:80df663dd15e 90 {
R66Y 0:80df663dd15e 91 register uint32_t __regAPSR __ASM("apsr");
R66Y 0:80df663dd15e 92 return(__regAPSR);
R66Y 0:80df663dd15e 93 }
R66Y 0:80df663dd15e 94
R66Y 0:80df663dd15e 95
R66Y 0:80df663dd15e 96 /** \brief Get xPSR Register
R66Y 0:80df663dd15e 97
R66Y 0:80df663dd15e 98 This function returns the content of the xPSR Register.
R66Y 0:80df663dd15e 99
R66Y 0:80df663dd15e 100 \return xPSR Register value
R66Y 0:80df663dd15e 101 */
R66Y 0:80df663dd15e 102 static __INLINE uint32_t __get_xPSR(void)
R66Y 0:80df663dd15e 103 {
R66Y 0:80df663dd15e 104 register uint32_t __regXPSR __ASM("xpsr");
R66Y 0:80df663dd15e 105 return(__regXPSR);
R66Y 0:80df663dd15e 106 }
R66Y 0:80df663dd15e 107
R66Y 0:80df663dd15e 108
R66Y 0:80df663dd15e 109 /** \brief Get Process Stack Pointer
R66Y 0:80df663dd15e 110
R66Y 0:80df663dd15e 111 This function returns the current value of the Process Stack Pointer (PSP).
R66Y 0:80df663dd15e 112
R66Y 0:80df663dd15e 113 \return PSP Register value
R66Y 0:80df663dd15e 114 */
R66Y 0:80df663dd15e 115 static __INLINE uint32_t __get_PSP(void)
R66Y 0:80df663dd15e 116 {
R66Y 0:80df663dd15e 117 register uint32_t __regProcessStackPointer __ASM("psp");
R66Y 0:80df663dd15e 118 return(__regProcessStackPointer);
R66Y 0:80df663dd15e 119 }
R66Y 0:80df663dd15e 120
R66Y 0:80df663dd15e 121
R66Y 0:80df663dd15e 122 /** \brief Set Process Stack Pointer
R66Y 0:80df663dd15e 123
R66Y 0:80df663dd15e 124 This function assigns the given value to the Process Stack Pointer (PSP).
R66Y 0:80df663dd15e 125
R66Y 0:80df663dd15e 126 \param [in] topOfProcStack Process Stack Pointer value to set
R66Y 0:80df663dd15e 127 */
R66Y 0:80df663dd15e 128 static __INLINE void __set_PSP(uint32_t topOfProcStack)
R66Y 0:80df663dd15e 129 {
R66Y 0:80df663dd15e 130 register uint32_t __regProcessStackPointer __ASM("psp");
R66Y 0:80df663dd15e 131 __regProcessStackPointer = topOfProcStack;
R66Y 0:80df663dd15e 132 }
R66Y 0:80df663dd15e 133
R66Y 0:80df663dd15e 134
R66Y 0:80df663dd15e 135 /** \brief Get Main Stack Pointer
R66Y 0:80df663dd15e 136
R66Y 0:80df663dd15e 137 This function returns the current value of the Main Stack Pointer (MSP).
R66Y 0:80df663dd15e 138
R66Y 0:80df663dd15e 139 \return MSP Register value
R66Y 0:80df663dd15e 140 */
R66Y 0:80df663dd15e 141 static __INLINE uint32_t __get_MSP(void)
R66Y 0:80df663dd15e 142 {
R66Y 0:80df663dd15e 143 register uint32_t __regMainStackPointer __ASM("msp");
R66Y 0:80df663dd15e 144 return(__regMainStackPointer);
R66Y 0:80df663dd15e 145 }
R66Y 0:80df663dd15e 146
R66Y 0:80df663dd15e 147
R66Y 0:80df663dd15e 148 /** \brief Set Main Stack Pointer
R66Y 0:80df663dd15e 149
R66Y 0:80df663dd15e 150 This function assigns the given value to the Main Stack Pointer (MSP).
R66Y 0:80df663dd15e 151
R66Y 0:80df663dd15e 152 \param [in] topOfMainStack Main Stack Pointer value to set
R66Y 0:80df663dd15e 153 */
R66Y 0:80df663dd15e 154 static __INLINE void __set_MSP(uint32_t topOfMainStack)
R66Y 0:80df663dd15e 155 {
R66Y 0:80df663dd15e 156 register uint32_t __regMainStackPointer __ASM("msp");
R66Y 0:80df663dd15e 157 __regMainStackPointer = topOfMainStack;
R66Y 0:80df663dd15e 158 }
R66Y 0:80df663dd15e 159
R66Y 0:80df663dd15e 160
R66Y 0:80df663dd15e 161 /** \brief Get Priority Mask
R66Y 0:80df663dd15e 162
R66Y 0:80df663dd15e 163 This function returns the current state of the priority mask bit from the Priority Mask Register.
R66Y 0:80df663dd15e 164
R66Y 0:80df663dd15e 165 \return Priority Mask value
R66Y 0:80df663dd15e 166 */
R66Y 0:80df663dd15e 167 static __INLINE uint32_t __get_PRIMASK(void)
R66Y 0:80df663dd15e 168 {
R66Y 0:80df663dd15e 169 register uint32_t __regPriMask __ASM("primask");
R66Y 0:80df663dd15e 170 return(__regPriMask);
R66Y 0:80df663dd15e 171 }
R66Y 0:80df663dd15e 172
R66Y 0:80df663dd15e 173
R66Y 0:80df663dd15e 174 /** \brief Set Priority Mask
R66Y 0:80df663dd15e 175
R66Y 0:80df663dd15e 176 This function assigns the given value to the Priority Mask Register.
R66Y 0:80df663dd15e 177
R66Y 0:80df663dd15e 178 \param [in] priMask Priority Mask
R66Y 0:80df663dd15e 179 */
R66Y 0:80df663dd15e 180 static __INLINE void __set_PRIMASK(uint32_t priMask)
R66Y 0:80df663dd15e 181 {
R66Y 0:80df663dd15e 182 register uint32_t __regPriMask __ASM("primask");
R66Y 0:80df663dd15e 183 __regPriMask = (priMask);
R66Y 0:80df663dd15e 184 }
R66Y 0:80df663dd15e 185
R66Y 0:80df663dd15e 186
R66Y 0:80df663dd15e 187 #if (__CORTEX_M >= 0x03)
R66Y 0:80df663dd15e 188
R66Y 0:80df663dd15e 189 /** \brief Enable FIQ
R66Y 0:80df663dd15e 190
R66Y 0:80df663dd15e 191 This function enables FIQ interrupts by clearing the F-bit in the CPSR.
R66Y 0:80df663dd15e 192 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 193 */
R66Y 0:80df663dd15e 194 #define __enable_fault_irq __enable_fiq
R66Y 0:80df663dd15e 195
R66Y 0:80df663dd15e 196
R66Y 0:80df663dd15e 197 /** \brief Disable FIQ
R66Y 0:80df663dd15e 198
R66Y 0:80df663dd15e 199 This function disables FIQ interrupts by setting the F-bit in the CPSR.
R66Y 0:80df663dd15e 200 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 201 */
R66Y 0:80df663dd15e 202 #define __disable_fault_irq __disable_fiq
R66Y 0:80df663dd15e 203
R66Y 0:80df663dd15e 204
R66Y 0:80df663dd15e 205 /** \brief Get Base Priority
R66Y 0:80df663dd15e 206
R66Y 0:80df663dd15e 207 This function returns the current value of the Base Priority register.
R66Y 0:80df663dd15e 208
R66Y 0:80df663dd15e 209 \return Base Priority register value
R66Y 0:80df663dd15e 210 */
R66Y 0:80df663dd15e 211 static __INLINE uint32_t __get_BASEPRI(void)
R66Y 0:80df663dd15e 212 {
R66Y 0:80df663dd15e 213 register uint32_t __regBasePri __ASM("basepri");
R66Y 0:80df663dd15e 214 return(__regBasePri);
R66Y 0:80df663dd15e 215 }
R66Y 0:80df663dd15e 216
R66Y 0:80df663dd15e 217
R66Y 0:80df663dd15e 218 /** \brief Set Base Priority
R66Y 0:80df663dd15e 219
R66Y 0:80df663dd15e 220 This function assigns the given value to the Base Priority register.
R66Y 0:80df663dd15e 221
R66Y 0:80df663dd15e 222 \param [in] basePri Base Priority value to set
R66Y 0:80df663dd15e 223 */
R66Y 0:80df663dd15e 224 static __INLINE void __set_BASEPRI(uint32_t basePri)
R66Y 0:80df663dd15e 225 {
R66Y 0:80df663dd15e 226 register uint32_t __regBasePri __ASM("basepri");
R66Y 0:80df663dd15e 227 __regBasePri = (basePri & 0xff);
R66Y 0:80df663dd15e 228 }
R66Y 0:80df663dd15e 229
R66Y 0:80df663dd15e 230
R66Y 0:80df663dd15e 231 /** \brief Get Fault Mask
R66Y 0:80df663dd15e 232
R66Y 0:80df663dd15e 233 This function returns the current value of the Fault Mask register.
R66Y 0:80df663dd15e 234
R66Y 0:80df663dd15e 235 \return Fault Mask register value
R66Y 0:80df663dd15e 236 */
R66Y 0:80df663dd15e 237 static __INLINE uint32_t __get_FAULTMASK(void)
R66Y 0:80df663dd15e 238 {
R66Y 0:80df663dd15e 239 register uint32_t __regFaultMask __ASM("faultmask");
R66Y 0:80df663dd15e 240 return(__regFaultMask);
R66Y 0:80df663dd15e 241 }
R66Y 0:80df663dd15e 242
R66Y 0:80df663dd15e 243
R66Y 0:80df663dd15e 244 /** \brief Set Fault Mask
R66Y 0:80df663dd15e 245
R66Y 0:80df663dd15e 246 This function assigns the given value to the Fault Mask register.
R66Y 0:80df663dd15e 247
R66Y 0:80df663dd15e 248 \param [in] faultMask Fault Mask value to set
R66Y 0:80df663dd15e 249 */
R66Y 0:80df663dd15e 250 static __INLINE void __set_FAULTMASK(uint32_t faultMask)
R66Y 0:80df663dd15e 251 {
R66Y 0:80df663dd15e 252 register uint32_t __regFaultMask __ASM("faultmask");
R66Y 0:80df663dd15e 253 __regFaultMask = (faultMask & (uint32_t)1);
R66Y 0:80df663dd15e 254 }
R66Y 0:80df663dd15e 255
R66Y 0:80df663dd15e 256 #endif /* (__CORTEX_M >= 0x03) */
R66Y 0:80df663dd15e 257
R66Y 0:80df663dd15e 258
R66Y 0:80df663dd15e 259 #if (__CORTEX_M == 0x04)
R66Y 0:80df663dd15e 260
R66Y 0:80df663dd15e 261 /** \brief Get FPSCR
R66Y 0:80df663dd15e 262
R66Y 0:80df663dd15e 263 This function returns the current value of the Floating Point Status/Control register.
R66Y 0:80df663dd15e 264
R66Y 0:80df663dd15e 265 \return Floating Point Status/Control register value
R66Y 0:80df663dd15e 266 */
R66Y 0:80df663dd15e 267 static __INLINE uint32_t __get_FPSCR(void)
R66Y 0:80df663dd15e 268 {
R66Y 0:80df663dd15e 269 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
R66Y 0:80df663dd15e 270 register uint32_t __regfpscr __ASM("fpscr");
R66Y 0:80df663dd15e 271 return(__regfpscr);
R66Y 0:80df663dd15e 272 #else
R66Y 0:80df663dd15e 273 return(0);
R66Y 0:80df663dd15e 274 #endif
R66Y 0:80df663dd15e 275 }
R66Y 0:80df663dd15e 276
R66Y 0:80df663dd15e 277
R66Y 0:80df663dd15e 278 /** \brief Set FPSCR
R66Y 0:80df663dd15e 279
R66Y 0:80df663dd15e 280 This function assigns the given value to the Floating Point Status/Control register.
R66Y 0:80df663dd15e 281
R66Y 0:80df663dd15e 282 \param [in] fpscr Floating Point Status/Control value to set
R66Y 0:80df663dd15e 283 */
R66Y 0:80df663dd15e 284 static __INLINE void __set_FPSCR(uint32_t fpscr)
R66Y 0:80df663dd15e 285 {
R66Y 0:80df663dd15e 286 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
R66Y 0:80df663dd15e 287 register uint32_t __regfpscr __ASM("fpscr");
R66Y 0:80df663dd15e 288 __regfpscr = (fpscr);
R66Y 0:80df663dd15e 289 #endif
R66Y 0:80df663dd15e 290 }
R66Y 0:80df663dd15e 291
R66Y 0:80df663dd15e 292 #endif /* (__CORTEX_M == 0x04) */
R66Y 0:80df663dd15e 293
R66Y 0:80df663dd15e 294
R66Y 0:80df663dd15e 295 #elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
R66Y 0:80df663dd15e 296 /* IAR iccarm specific functions */
R66Y 0:80df663dd15e 297
R66Y 0:80df663dd15e 298 #include <cmsis_iar.h>
R66Y 0:80df663dd15e 299
R66Y 0:80df663dd15e 300 #elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
R66Y 0:80df663dd15e 301 /* GNU gcc specific functions */
R66Y 0:80df663dd15e 302
R66Y 0:80df663dd15e 303 /** \brief Enable IRQ Interrupts
R66Y 0:80df663dd15e 304
R66Y 0:80df663dd15e 305 This function enables IRQ interrupts by clearing the I-bit in the CPSR.
R66Y 0:80df663dd15e 306 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 307 */
R66Y 0:80df663dd15e 308 __attribute__( ( always_inline ) ) static __INLINE void __enable_irq(void)
R66Y 0:80df663dd15e 309 {
R66Y 0:80df663dd15e 310 __ASM volatile ("cpsie i");
R66Y 0:80df663dd15e 311 }
R66Y 0:80df663dd15e 312
R66Y 0:80df663dd15e 313
R66Y 0:80df663dd15e 314 /** \brief Disable IRQ Interrupts
R66Y 0:80df663dd15e 315
R66Y 0:80df663dd15e 316 This function disables IRQ interrupts by setting the I-bit in the CPSR.
R66Y 0:80df663dd15e 317 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 318 */
R66Y 0:80df663dd15e 319 __attribute__( ( always_inline ) ) static __INLINE void __disable_irq(void)
R66Y 0:80df663dd15e 320 {
R66Y 0:80df663dd15e 321 __ASM volatile ("cpsid i");
R66Y 0:80df663dd15e 322 }
R66Y 0:80df663dd15e 323
R66Y 0:80df663dd15e 324
R66Y 0:80df663dd15e 325 /** \brief Get Control Register
R66Y 0:80df663dd15e 326
R66Y 0:80df663dd15e 327 This function returns the content of the Control Register.
R66Y 0:80df663dd15e 328
R66Y 0:80df663dd15e 329 \return Control Register value
R66Y 0:80df663dd15e 330 */
R66Y 0:80df663dd15e 331 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_CONTROL(void)
R66Y 0:80df663dd15e 332 {
R66Y 0:80df663dd15e 333 uint32_t result;
R66Y 0:80df663dd15e 334
R66Y 0:80df663dd15e 335 __ASM volatile ("MRS %0, control" : "=r" (result) );
R66Y 0:80df663dd15e 336 return(result);
R66Y 0:80df663dd15e 337 }
R66Y 0:80df663dd15e 338
R66Y 0:80df663dd15e 339
R66Y 0:80df663dd15e 340 /** \brief Set Control Register
R66Y 0:80df663dd15e 341
R66Y 0:80df663dd15e 342 This function writes the given value to the Control Register.
R66Y 0:80df663dd15e 343
R66Y 0:80df663dd15e 344 \param [in] control Control Register value to set
R66Y 0:80df663dd15e 345 */
R66Y 0:80df663dd15e 346 __attribute__( ( always_inline ) ) static __INLINE void __set_CONTROL(uint32_t control)
R66Y 0:80df663dd15e 347 {
R66Y 0:80df663dd15e 348 __ASM volatile ("MSR control, %0" : : "r" (control) );
R66Y 0:80df663dd15e 349 }
R66Y 0:80df663dd15e 350
R66Y 0:80df663dd15e 351
R66Y 0:80df663dd15e 352 /** \brief Get IPSR Register
R66Y 0:80df663dd15e 353
R66Y 0:80df663dd15e 354 This function returns the content of the IPSR Register.
R66Y 0:80df663dd15e 355
R66Y 0:80df663dd15e 356 \return IPSR Register value
R66Y 0:80df663dd15e 357 */
R66Y 0:80df663dd15e 358 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_IPSR(void)
R66Y 0:80df663dd15e 359 {
R66Y 0:80df663dd15e 360 uint32_t result;
R66Y 0:80df663dd15e 361
R66Y 0:80df663dd15e 362 __ASM volatile ("MRS %0, ipsr" : "=r" (result) );
R66Y 0:80df663dd15e 363 return(result);
R66Y 0:80df663dd15e 364 }
R66Y 0:80df663dd15e 365
R66Y 0:80df663dd15e 366
R66Y 0:80df663dd15e 367 /** \brief Get APSR Register
R66Y 0:80df663dd15e 368
R66Y 0:80df663dd15e 369 This function returns the content of the APSR Register.
R66Y 0:80df663dd15e 370
R66Y 0:80df663dd15e 371 \return APSR Register value
R66Y 0:80df663dd15e 372 */
R66Y 0:80df663dd15e 373 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_APSR(void)
R66Y 0:80df663dd15e 374 {
R66Y 0:80df663dd15e 375 uint32_t result;
R66Y 0:80df663dd15e 376
R66Y 0:80df663dd15e 377 __ASM volatile ("MRS %0, apsr" : "=r" (result) );
R66Y 0:80df663dd15e 378 return(result);
R66Y 0:80df663dd15e 379 }
R66Y 0:80df663dd15e 380
R66Y 0:80df663dd15e 381
R66Y 0:80df663dd15e 382 /** \brief Get xPSR Register
R66Y 0:80df663dd15e 383
R66Y 0:80df663dd15e 384 This function returns the content of the xPSR Register.
R66Y 0:80df663dd15e 385
R66Y 0:80df663dd15e 386 \return xPSR Register value
R66Y 0:80df663dd15e 387 */
R66Y 0:80df663dd15e 388 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_xPSR(void)
R66Y 0:80df663dd15e 389 {
R66Y 0:80df663dd15e 390 uint32_t result;
R66Y 0:80df663dd15e 391
R66Y 0:80df663dd15e 392 __ASM volatile ("MRS %0, xpsr" : "=r" (result) );
R66Y 0:80df663dd15e 393 return(result);
R66Y 0:80df663dd15e 394 }
R66Y 0:80df663dd15e 395
R66Y 0:80df663dd15e 396
R66Y 0:80df663dd15e 397 /** \brief Get Process Stack Pointer
R66Y 0:80df663dd15e 398
R66Y 0:80df663dd15e 399 This function returns the current value of the Process Stack Pointer (PSP).
R66Y 0:80df663dd15e 400
R66Y 0:80df663dd15e 401 \return PSP Register value
R66Y 0:80df663dd15e 402 */
R66Y 0:80df663dd15e 403 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PSP(void)
R66Y 0:80df663dd15e 404 {
R66Y 0:80df663dd15e 405 register uint32_t result;
R66Y 0:80df663dd15e 406
R66Y 0:80df663dd15e 407 __ASM volatile ("MRS %0, psp\n" : "=r" (result) );
R66Y 0:80df663dd15e 408 return(result);
R66Y 0:80df663dd15e 409 }
R66Y 0:80df663dd15e 410
R66Y 0:80df663dd15e 411
R66Y 0:80df663dd15e 412 /** \brief Set Process Stack Pointer
R66Y 0:80df663dd15e 413
R66Y 0:80df663dd15e 414 This function assigns the given value to the Process Stack Pointer (PSP).
R66Y 0:80df663dd15e 415
R66Y 0:80df663dd15e 416 \param [in] topOfProcStack Process Stack Pointer value to set
R66Y 0:80df663dd15e 417 */
R66Y 0:80df663dd15e 418 __attribute__( ( always_inline ) ) static __INLINE void __set_PSP(uint32_t topOfProcStack)
R66Y 0:80df663dd15e 419 {
R66Y 0:80df663dd15e 420 __ASM volatile ("MSR psp, %0\n" : : "r" (topOfProcStack) );
R66Y 0:80df663dd15e 421 }
R66Y 0:80df663dd15e 422
R66Y 0:80df663dd15e 423
R66Y 0:80df663dd15e 424 /** \brief Get Main Stack Pointer
R66Y 0:80df663dd15e 425
R66Y 0:80df663dd15e 426 This function returns the current value of the Main Stack Pointer (MSP).
R66Y 0:80df663dd15e 427
R66Y 0:80df663dd15e 428 \return MSP Register value
R66Y 0:80df663dd15e 429 */
R66Y 0:80df663dd15e 430 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_MSP(void)
R66Y 0:80df663dd15e 431 {
R66Y 0:80df663dd15e 432 register uint32_t result;
R66Y 0:80df663dd15e 433
R66Y 0:80df663dd15e 434 __ASM volatile ("MRS %0, msp\n" : "=r" (result) );
R66Y 0:80df663dd15e 435 return(result);
R66Y 0:80df663dd15e 436 }
R66Y 0:80df663dd15e 437
R66Y 0:80df663dd15e 438
R66Y 0:80df663dd15e 439 /** \brief Set Main Stack Pointer
R66Y 0:80df663dd15e 440
R66Y 0:80df663dd15e 441 This function assigns the given value to the Main Stack Pointer (MSP).
R66Y 0:80df663dd15e 442
R66Y 0:80df663dd15e 443 \param [in] topOfMainStack Main Stack Pointer value to set
R66Y 0:80df663dd15e 444 */
R66Y 0:80df663dd15e 445 __attribute__( ( always_inline ) ) static __INLINE void __set_MSP(uint32_t topOfMainStack)
R66Y 0:80df663dd15e 446 {
R66Y 0:80df663dd15e 447 __ASM volatile ("MSR msp, %0\n" : : "r" (topOfMainStack) );
R66Y 0:80df663dd15e 448 }
R66Y 0:80df663dd15e 449
R66Y 0:80df663dd15e 450
R66Y 0:80df663dd15e 451 /** \brief Get Priority Mask
R66Y 0:80df663dd15e 452
R66Y 0:80df663dd15e 453 This function returns the current state of the priority mask bit from the Priority Mask Register.
R66Y 0:80df663dd15e 454
R66Y 0:80df663dd15e 455 \return Priority Mask value
R66Y 0:80df663dd15e 456 */
R66Y 0:80df663dd15e 457 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_PRIMASK(void)
R66Y 0:80df663dd15e 458 {
R66Y 0:80df663dd15e 459 uint32_t result;
R66Y 0:80df663dd15e 460
R66Y 0:80df663dd15e 461 __ASM volatile ("MRS %0, primask" : "=r" (result) );
R66Y 0:80df663dd15e 462 return(result);
R66Y 0:80df663dd15e 463 }
R66Y 0:80df663dd15e 464
R66Y 0:80df663dd15e 465
R66Y 0:80df663dd15e 466 /** \brief Set Priority Mask
R66Y 0:80df663dd15e 467
R66Y 0:80df663dd15e 468 This function assigns the given value to the Priority Mask Register.
R66Y 0:80df663dd15e 469
R66Y 0:80df663dd15e 470 \param [in] priMask Priority Mask
R66Y 0:80df663dd15e 471 */
R66Y 0:80df663dd15e 472 __attribute__( ( always_inline ) ) static __INLINE void __set_PRIMASK(uint32_t priMask)
R66Y 0:80df663dd15e 473 {
R66Y 0:80df663dd15e 474 __ASM volatile ("MSR primask, %0" : : "r" (priMask) );
R66Y 0:80df663dd15e 475 }
R66Y 0:80df663dd15e 476
R66Y 0:80df663dd15e 477
R66Y 0:80df663dd15e 478 #if (__CORTEX_M >= 0x03)
R66Y 0:80df663dd15e 479
R66Y 0:80df663dd15e 480 /** \brief Enable FIQ
R66Y 0:80df663dd15e 481
R66Y 0:80df663dd15e 482 This function enables FIQ interrupts by clearing the F-bit in the CPSR.
R66Y 0:80df663dd15e 483 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 484 */
R66Y 0:80df663dd15e 485 __attribute__( ( always_inline ) ) static __INLINE void __enable_fault_irq(void)
R66Y 0:80df663dd15e 486 {
R66Y 0:80df663dd15e 487 __ASM volatile ("cpsie f");
R66Y 0:80df663dd15e 488 }
R66Y 0:80df663dd15e 489
R66Y 0:80df663dd15e 490
R66Y 0:80df663dd15e 491 /** \brief Disable FIQ
R66Y 0:80df663dd15e 492
R66Y 0:80df663dd15e 493 This function disables FIQ interrupts by setting the F-bit in the CPSR.
R66Y 0:80df663dd15e 494 Can only be executed in Privileged modes.
R66Y 0:80df663dd15e 495 */
R66Y 0:80df663dd15e 496 __attribute__( ( always_inline ) ) static __INLINE void __disable_fault_irq(void)
R66Y 0:80df663dd15e 497 {
R66Y 0:80df663dd15e 498 __ASM volatile ("cpsid f");
R66Y 0:80df663dd15e 499 }
R66Y 0:80df663dd15e 500
R66Y 0:80df663dd15e 501
R66Y 0:80df663dd15e 502 /** \brief Get Base Priority
R66Y 0:80df663dd15e 503
R66Y 0:80df663dd15e 504 This function returns the current value of the Base Priority register.
R66Y 0:80df663dd15e 505
R66Y 0:80df663dd15e 506 \return Base Priority register value
R66Y 0:80df663dd15e 507 */
R66Y 0:80df663dd15e 508 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_BASEPRI(void)
R66Y 0:80df663dd15e 509 {
R66Y 0:80df663dd15e 510 uint32_t result;
R66Y 0:80df663dd15e 511
R66Y 0:80df663dd15e 512 __ASM volatile ("MRS %0, basepri_max" : "=r" (result) );
R66Y 0:80df663dd15e 513 return(result);
R66Y 0:80df663dd15e 514 }
R66Y 0:80df663dd15e 515
R66Y 0:80df663dd15e 516
R66Y 0:80df663dd15e 517 /** \brief Set Base Priority
R66Y 0:80df663dd15e 518
R66Y 0:80df663dd15e 519 This function assigns the given value to the Base Priority register.
R66Y 0:80df663dd15e 520
R66Y 0:80df663dd15e 521 \param [in] basePri Base Priority value to set
R66Y 0:80df663dd15e 522 */
R66Y 0:80df663dd15e 523 __attribute__( ( always_inline ) ) static __INLINE void __set_BASEPRI(uint32_t value)
R66Y 0:80df663dd15e 524 {
R66Y 0:80df663dd15e 525 __ASM volatile ("MSR basepri, %0" : : "r" (value) );
R66Y 0:80df663dd15e 526 }
R66Y 0:80df663dd15e 527
R66Y 0:80df663dd15e 528
R66Y 0:80df663dd15e 529 /** \brief Get Fault Mask
R66Y 0:80df663dd15e 530
R66Y 0:80df663dd15e 531 This function returns the current value of the Fault Mask register.
R66Y 0:80df663dd15e 532
R66Y 0:80df663dd15e 533 \return Fault Mask register value
R66Y 0:80df663dd15e 534 */
R66Y 0:80df663dd15e 535 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FAULTMASK(void)
R66Y 0:80df663dd15e 536 {
R66Y 0:80df663dd15e 537 uint32_t result;
R66Y 0:80df663dd15e 538
R66Y 0:80df663dd15e 539 __ASM volatile ("MRS %0, faultmask" : "=r" (result) );
R66Y 0:80df663dd15e 540 return(result);
R66Y 0:80df663dd15e 541 }
R66Y 0:80df663dd15e 542
R66Y 0:80df663dd15e 543
R66Y 0:80df663dd15e 544 /** \brief Set Fault Mask
R66Y 0:80df663dd15e 545
R66Y 0:80df663dd15e 546 This function assigns the given value to the Fault Mask register.
R66Y 0:80df663dd15e 547
R66Y 0:80df663dd15e 548 \param [in] faultMask Fault Mask value to set
R66Y 0:80df663dd15e 549 */
R66Y 0:80df663dd15e 550 __attribute__( ( always_inline ) ) static __INLINE void __set_FAULTMASK(uint32_t faultMask)
R66Y 0:80df663dd15e 551 {
R66Y 0:80df663dd15e 552 __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) );
R66Y 0:80df663dd15e 553 }
R66Y 0:80df663dd15e 554
R66Y 0:80df663dd15e 555 #endif /* (__CORTEX_M >= 0x03) */
R66Y 0:80df663dd15e 556
R66Y 0:80df663dd15e 557
R66Y 0:80df663dd15e 558 #if (__CORTEX_M == 0x04)
R66Y 0:80df663dd15e 559
R66Y 0:80df663dd15e 560 /** \brief Get FPSCR
R66Y 0:80df663dd15e 561
R66Y 0:80df663dd15e 562 This function returns the current value of the Floating Point Status/Control register.
R66Y 0:80df663dd15e 563
R66Y 0:80df663dd15e 564 \return Floating Point Status/Control register value
R66Y 0:80df663dd15e 565 */
R66Y 0:80df663dd15e 566 __attribute__( ( always_inline ) ) static __INLINE uint32_t __get_FPSCR(void)
R66Y 0:80df663dd15e 567 {
R66Y 0:80df663dd15e 568 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
R66Y 0:80df663dd15e 569 uint32_t result;
R66Y 0:80df663dd15e 570
R66Y 0:80df663dd15e 571 __ASM volatile ("VMRS %0, fpscr" : "=r" (result) );
R66Y 0:80df663dd15e 572 return(result);
R66Y 0:80df663dd15e 573 #else
R66Y 0:80df663dd15e 574 return(0);
R66Y 0:80df663dd15e 575 #endif
R66Y 0:80df663dd15e 576 }
R66Y 0:80df663dd15e 577
R66Y 0:80df663dd15e 578
R66Y 0:80df663dd15e 579 /** \brief Set FPSCR
R66Y 0:80df663dd15e 580
R66Y 0:80df663dd15e 581 This function assigns the given value to the Floating Point Status/Control register.
R66Y 0:80df663dd15e 582
R66Y 0:80df663dd15e 583 \param [in] fpscr Floating Point Status/Control value to set
R66Y 0:80df663dd15e 584 */
R66Y 0:80df663dd15e 585 __attribute__( ( always_inline ) ) static __INLINE void __set_FPSCR(uint32_t fpscr)
R66Y 0:80df663dd15e 586 {
R66Y 0:80df663dd15e 587 #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
R66Y 0:80df663dd15e 588 __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) );
R66Y 0:80df663dd15e 589 #endif
R66Y 0:80df663dd15e 590 }
R66Y 0:80df663dd15e 591
R66Y 0:80df663dd15e 592 #endif /* (__CORTEX_M == 0x04) */
R66Y 0:80df663dd15e 593
R66Y 0:80df663dd15e 594
R66Y 0:80df663dd15e 595 #elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
R66Y 0:80df663dd15e 596 /* TASKING carm specific functions */
R66Y 0:80df663dd15e 597
R66Y 0:80df663dd15e 598 /*
R66Y 0:80df663dd15e 599 * The CMSIS functions have been implemented as intrinsics in the compiler.
R66Y 0:80df663dd15e 600 * Please use "carm -?i" to get an up to date list of all instrinsics,
R66Y 0:80df663dd15e 601 * Including the CMSIS ones.
R66Y 0:80df663dd15e 602 */
R66Y 0:80df663dd15e 603
R66Y 0:80df663dd15e 604 #endif
R66Y 0:80df663dd15e 605
R66Y 0:80df663dd15e 606 /*@} end of CMSIS_Core_RegAccFunctions */
R66Y 0:80df663dd15e 607
R66Y 0:80df663dd15e 608
R66Y 0:80df663dd15e 609 #endif /* __CORE_CMFUNC_H */