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