Subversion Repositories DashDisplay

Rev

Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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