blinking
[rapper.git] / bitbucket_lpc1768 / CMSIS / core_cm3.h
1 /**************************************************************************//**\r
2  * @file     core_cm3.h\r
3  * @brief    CMSIS Cortex-M3 Core Peripheral Access Layer Header File\r
4  * @version  V1.30\r
5  * @date     30. October 2009\r
6  *\r
7  * @note\r
8  * Copyright (C) 2009 ARM Limited. All rights reserved.\r
9  *\r
10  * @par\r
11  * ARM Limited (ARM) is supplying this software for use with Cortex-M\r
12  * processor based microcontrollers.  This file can be freely distributed\r
13  * within development tools that are supporting such ARM based processors.\r
14  *\r
15  * @par\r
16  * THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
17  * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
19  * ARM SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
20  * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
21  *\r
22  ******************************************************************************/\r
23 \r
24 #ifndef __CM3_CORE_H__\r
25 #define __CM3_CORE_H__\r
26 \r
27 /** @addtogroup CMSIS_CM3_core_LintCinfiguration CMSIS CM3 Core Lint Configuration\r
28  *\r
29  * List of Lint messages which will be suppressed and not shown:\r
30  *   - Error 10: \n\r
31  *     register uint32_t __regBasePri         __asm("basepri"); \n\r
32  *     Error 10: Expecting ';'\r
33  * .\r
34  *   - Error 530: \n\r
35  *     return(__regBasePri); \n\r
36  *     Warning 530: Symbol '__regBasePri' (line 264) not initialized\r
37  * .\r
38  *   - Error 550: \n\r
39  *     __regBasePri = (basePri & 0x1ff); \n\r
40  *     Warning 550: Symbol '__regBasePri' (line 271) not accessed\r
41  * .\r
42  *   - Error 754: \n\r
43  *     uint32_t RESERVED0[24]; \n\r
44  *     Info 754: local structure member '<some, not used in the HAL>' (line 109, file ./cm3_core.h) not referenced\r
45  * .\r
46  *   - Error 750: \n\r
47  *     #define __CM3_CORE_H__ \n\r
48  *     Info 750: local macro '__CM3_CORE_H__' (line 43, file./cm3_core.h) not referenced\r
49  * .\r
50  *   - Error 528: \n\r
51  *     static __INLINE void NVIC_DisableIRQ(uint32_t IRQn) \n\r
52  *     Warning 528: Symbol 'NVIC_DisableIRQ(unsigned int)' (line 419, file ./cm3_core.h) not referenced\r
53  * .\r
54  *   - Error 751: \n\r
55  *     } InterruptType_Type; \n\r
56  *     Info 751: local typedef 'InterruptType_Type' (line 170, file ./cm3_core.h) not referenced\r
57  * .\r
58  * Note:  To re-enable a Message, insert a space before 'lint' *\r
59  *\r
60  */\r
61 \r
62 /*lint -save */\r
63 /*lint -e10  */\r
64 /*lint -e530 */\r
65 /*lint -e550 */\r
66 /*lint -e754 */\r
67 /*lint -e750 */\r
68 /*lint -e528 */\r
69 /*lint -e751 */\r
70 \r
71 \r
72 /** @addtogroup CMSIS_CM3_core_definitions CM3 Core Definitions\r
73   This file defines all structures and symbols for CMSIS core:\r
74     - CMSIS version number\r
75     - Cortex-M core registers and bitfields\r
76     - Cortex-M core peripheral base address\r
77   @{\r
78  */\r
79 \r
80 #ifdef __cplusplus\r
81  extern "C" {\r
82 #endif\r
83 \r
84 #define __CM3_CMSIS_VERSION_MAIN  (0x01)                                                       /*!< [31:16] CMSIS HAL main version */\r
85 #define __CM3_CMSIS_VERSION_SUB   (0x30)                                                       /*!< [15:0]  CMSIS HAL sub version  */\r
86 #define __CM3_CMSIS_VERSION       ((__CM3_CMSIS_VERSION_MAIN << 16) | __CM3_CMSIS_VERSION_SUB) /*!< CMSIS HAL version number       */\r
87 \r
88 #define __CORTEX_M                (0x03)                                                       /*!< Cortex core                    */\r
89 \r
90 #include <stdint.h>                           /* Include standard types */\r
91 \r
92 #if defined (__ICCARM__)\r
93   #include <intrinsics.h>                     /* IAR Intrinsics   */\r
94 #endif\r
95 \r
96 \r
97 #ifndef __NVIC_PRIO_BITS\r
98   #define __NVIC_PRIO_BITS    4               /*!< standard definition for NVIC Priority Bits */\r
99 #endif\r
100 \r
101 \r
102 \r
103 \r
104 /**\r
105  * IO definitions\r
106  *\r
107  * define access restrictions to peripheral registers\r
108  */\r
109 \r
110 #ifdef __cplusplus\r
111   #define     __I     volatile                /*!< defines 'read only' permissions      */\r
112 #else\r
113   #define     __I     volatile const          /*!< defines 'read only' permissions      */\r
114 #endif\r
115 #define     __O     volatile                  /*!< defines 'write only' permissions     */\r
116 #define     __IO    volatile                  /*!< defines 'read / write' permissions   */\r
117 \r
118 \r
119 \r
120 /*******************************************************************************\r
121  *                 Register Abstraction\r
122  ******************************************************************************/\r
123 /** @addtogroup CMSIS_CM3_core_register CMSIS CM3 Core Register\r
124  @{\r
125 */\r
126 \r
127 \r
128 /** @addtogroup CMSIS_CM3_NVIC CMSIS CM3 NVIC\r
129   memory mapped structure for Nested Vectored Interrupt Controller (NVIC)\r
130   @{\r
131  */\r
132 typedef struct\r
133 {\r
134   __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */\r
135        uint32_t RESERVED0[24];\r
136   __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */\r
137        uint32_t RSERVED1[24];\r
138   __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */\r
139        uint32_t RESERVED2[24];\r
140   __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */\r
141        uint32_t RESERVED3[24];\r
142   __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */\r
143        uint32_t RESERVED4[56];\r
144   __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */\r
145        uint32_t RESERVED5[644];\r
146   __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */\r
147 }  NVIC_Type;\r
148 /*@}*/ /* end of group CMSIS_CM3_NVIC */\r
149 \r
150 \r
151 /** @addtogroup CMSIS_CM3_SCB CMSIS CM3 SCB\r
152   memory mapped structure for System Control Block (SCB)\r
153   @{\r
154  */\r
155 typedef struct\r
156 {\r
157   __I  uint32_t CPUID;                        /*!< Offset: 0x00  CPU ID Base Register                                  */\r
158   __IO uint32_t ICSR;                         /*!< Offset: 0x04  Interrupt Control State Register                      */\r
159   __IO uint32_t VTOR;                         /*!< Offset: 0x08  Vector Table Offset Register                          */\r
160   __IO uint32_t AIRCR;                        /*!< Offset: 0x0C  Application Interrupt / Reset Control Register        */\r
161   __IO uint32_t SCR;                          /*!< Offset: 0x10  System Control Register                               */\r
162   __IO uint32_t CCR;                          /*!< Offset: 0x14  Configuration Control Register                        */\r
163   __IO uint8_t  SHP[12];                      /*!< Offset: 0x18  System Handlers Priority Registers (4-7, 8-11, 12-15) */\r
164   __IO uint32_t SHCSR;                        /*!< Offset: 0x24  System Handler Control and State Register             */\r
165   __IO uint32_t CFSR;                         /*!< Offset: 0x28  Configurable Fault Status Register                    */\r
166   __IO uint32_t HFSR;                         /*!< Offset: 0x2C  Hard Fault Status Register                            */\r
167   __IO uint32_t DFSR;                         /*!< Offset: 0x30  Debug Fault Status Register                           */\r
168   __IO uint32_t MMFAR;                        /*!< Offset: 0x34  Mem Manage Address Register                           */\r
169   __IO uint32_t BFAR;                         /*!< Offset: 0x38  Bus Fault Address Register                            */\r
170   __IO uint32_t AFSR;                         /*!< Offset: 0x3C  Auxiliary Fault Status Register                       */\r
171   __I  uint32_t PFR[2];                       /*!< Offset: 0x40  Processor Feature Register                            */\r
172   __I  uint32_t DFR;                          /*!< Offset: 0x48  Debug Feature Register                                */\r
173   __I  uint32_t ADR;                          /*!< Offset: 0x4C  Auxiliary Feature Register                            */\r
174   __I  uint32_t MMFR[4];                      /*!< Offset: 0x50  Memory Model Feature Register                         */\r
175   __I  uint32_t ISAR[5];                      /*!< Offset: 0x60  ISA Feature Register                                  */\r
176 } SCB_Type;\r
177 \r
178 /* SCB CPUID Register Definitions */\r
179 #define SCB_CPUID_IMPLEMENTER_Pos          24                                             /*!< SCB CPUID: IMPLEMENTER Position */\r
180 #define SCB_CPUID_IMPLEMENTER_Msk          (0xFFul << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */\r
181 \r
182 #define SCB_CPUID_VARIANT_Pos              20                                             /*!< SCB CPUID: VARIANT Position */\r
183 #define SCB_CPUID_VARIANT_Msk              (0xFul << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */\r
184 \r
185 #define SCB_CPUID_PARTNO_Pos                4                                             /*!< SCB CPUID: PARTNO Position */\r
186 #define SCB_CPUID_PARTNO_Msk               (0xFFFul << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */\r
187 \r
188 #define SCB_CPUID_REVISION_Pos              0                                             /*!< SCB CPUID: REVISION Position */\r
189 #define SCB_CPUID_REVISION_Msk             (0xFul << SCB_CPUID_REVISION_Pos)              /*!< SCB CPUID: REVISION Mask */\r
190 \r
191 /* SCB Interrupt Control State Register Definitions */\r
192 #define SCB_ICSR_NMIPENDSET_Pos            31                                             /*!< SCB ICSR: NMIPENDSET Position */\r
193 #define SCB_ICSR_NMIPENDSET_Msk            (1ul << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */\r
194 \r
195 #define SCB_ICSR_PENDSVSET_Pos             28                                             /*!< SCB ICSR: PENDSVSET Position */\r
196 #define SCB_ICSR_PENDSVSET_Msk             (1ul << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */\r
197 \r
198 #define SCB_ICSR_PENDSVCLR_Pos             27                                             /*!< SCB ICSR: PENDSVCLR Position */\r
199 #define SCB_ICSR_PENDSVCLR_Msk             (1ul << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */\r
200 \r
201 #define SCB_ICSR_PENDSTSET_Pos             26                                             /*!< SCB ICSR: PENDSTSET Position */\r
202 #define SCB_ICSR_PENDSTSET_Msk             (1ul << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */\r
203 \r
204 #define SCB_ICSR_PENDSTCLR_Pos             25                                             /*!< SCB ICSR: PENDSTCLR Position */\r
205 #define SCB_ICSR_PENDSTCLR_Msk             (1ul << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */\r
206 \r
207 #define SCB_ICSR_ISRPREEMPT_Pos            23                                             /*!< SCB ICSR: ISRPREEMPT Position */\r
208 #define SCB_ICSR_ISRPREEMPT_Msk            (1ul << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */\r
209 \r
210 #define SCB_ICSR_ISRPENDING_Pos            22                                             /*!< SCB ICSR: ISRPENDING Position */\r
211 #define SCB_ICSR_ISRPENDING_Msk            (1ul << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */\r
212 \r
213 #define SCB_ICSR_VECTPENDING_Pos           12                                             /*!< SCB ICSR: VECTPENDING Position */\r
214 #define SCB_ICSR_VECTPENDING_Msk           (0x1FFul << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */\r
215 \r
216 #define SCB_ICSR_RETTOBASE_Pos             11                                             /*!< SCB ICSR: RETTOBASE Position */\r
217 #define SCB_ICSR_RETTOBASE_Msk             (1ul << SCB_ICSR_RETTOBASE_Pos)                /*!< SCB ICSR: RETTOBASE Mask */\r
218 \r
219 #define SCB_ICSR_VECTACTIVE_Pos             0                                             /*!< SCB ICSR: VECTACTIVE Position */\r
220 #define SCB_ICSR_VECTACTIVE_Msk            (0x1FFul << SCB_ICSR_VECTACTIVE_Pos)           /*!< SCB ICSR: VECTACTIVE Mask */\r
221 \r
222 /* SCB Interrupt Control State Register Definitions */\r
223 #define SCB_VTOR_TBLBASE_Pos               29                                             /*!< SCB VTOR: TBLBASE Position */\r
224 #define SCB_VTOR_TBLBASE_Msk               (0x1FFul << SCB_VTOR_TBLBASE_Pos)              /*!< SCB VTOR: TBLBASE Mask */\r
225 \r
226 #define SCB_VTOR_TBLOFF_Pos                 7                                             /*!< SCB VTOR: TBLOFF Position */\r
227 #define SCB_VTOR_TBLOFF_Msk                (0x3FFFFFul << SCB_VTOR_TBLOFF_Pos)            /*!< SCB VTOR: TBLOFF Mask */\r
228 \r
229 /* SCB Application Interrupt and Reset Control Register Definitions */\r
230 #define SCB_AIRCR_VECTKEY_Pos              16                                             /*!< SCB AIRCR: VECTKEY Position */\r
231 #define SCB_AIRCR_VECTKEY_Msk              (0xFFFFul << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */\r
232 \r
233 #define SCB_AIRCR_VECTKEYSTAT_Pos          16                                             /*!< SCB AIRCR: VECTKEYSTAT Position */\r
234 #define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFul << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */\r
235 \r
236 #define SCB_AIRCR_ENDIANESS_Pos            15                                             /*!< SCB AIRCR: ENDIANESS Position */\r
237 #define SCB_AIRCR_ENDIANESS_Msk            (1ul << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */\r
238 \r
239 #define SCB_AIRCR_PRIGROUP_Pos              8                                             /*!< SCB AIRCR: PRIGROUP Position */\r
240 #define SCB_AIRCR_PRIGROUP_Msk             (7ul << SCB_AIRCR_PRIGROUP_Pos)                /*!< SCB AIRCR: PRIGROUP Mask */\r
241 \r
242 #define SCB_AIRCR_SYSRESETREQ_Pos           2                                             /*!< SCB AIRCR: SYSRESETREQ Position */\r
243 #define SCB_AIRCR_SYSRESETREQ_Msk          (1ul << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */\r
244 \r
245 #define SCB_AIRCR_VECTCLRACTIVE_Pos         1                                             /*!< SCB AIRCR: VECTCLRACTIVE Position */\r
246 #define SCB_AIRCR_VECTCLRACTIVE_Msk        (1ul << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */\r
247 \r
248 #define SCB_AIRCR_VECTRESET_Pos             0                                             /*!< SCB AIRCR: VECTRESET Position */\r
249 #define SCB_AIRCR_VECTRESET_Msk            (1ul << SCB_AIRCR_VECTRESET_Pos)               /*!< SCB AIRCR: VECTRESET Mask */\r
250 \r
251 /* SCB System Control Register Definitions */\r
252 #define SCB_SCR_SEVONPEND_Pos               4                                             /*!< SCB SCR: SEVONPEND Position */\r
253 #define SCB_SCR_SEVONPEND_Msk              (1ul << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */\r
254 \r
255 #define SCB_SCR_SLEEPDEEP_Pos               2                                             /*!< SCB SCR: SLEEPDEEP Position */\r
256 #define SCB_SCR_SLEEPDEEP_Msk              (1ul << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */\r
257 \r
258 #define SCB_SCR_SLEEPONEXIT_Pos             1                                             /*!< SCB SCR: SLEEPONEXIT Position */\r
259 #define SCB_SCR_SLEEPONEXIT_Msk            (1ul << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */\r
260 \r
261 /* SCB Configuration Control Register Definitions */\r
262 #define SCB_CCR_STKALIGN_Pos                9                                             /*!< SCB CCR: STKALIGN Position */\r
263 #define SCB_CCR_STKALIGN_Msk               (1ul << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */\r
264 \r
265 #define SCB_CCR_BFHFNMIGN_Pos               8                                             /*!< SCB CCR: BFHFNMIGN Position */\r
266 #define SCB_CCR_BFHFNMIGN_Msk              (1ul << SCB_CCR_BFHFNMIGN_Pos)                 /*!< SCB CCR: BFHFNMIGN Mask */\r
267 \r
268 #define SCB_CCR_DIV_0_TRP_Pos               4                                             /*!< SCB CCR: DIV_0_TRP Position */\r
269 #define SCB_CCR_DIV_0_TRP_Msk              (1ul << SCB_CCR_DIV_0_TRP_Pos)                 /*!< SCB CCR: DIV_0_TRP Mask */\r
270 \r
271 #define SCB_CCR_UNALIGN_TRP_Pos             3                                             /*!< SCB CCR: UNALIGN_TRP Position */\r
272 #define SCB_CCR_UNALIGN_TRP_Msk            (1ul << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */\r
273 \r
274 #define SCB_CCR_USERSETMPEND_Pos            1                                             /*!< SCB CCR: USERSETMPEND Position */\r
275 #define SCB_CCR_USERSETMPEND_Msk           (1ul << SCB_CCR_USERSETMPEND_Pos)              /*!< SCB CCR: USERSETMPEND Mask */\r
276 \r
277 #define SCB_CCR_NONBASETHRDENA_Pos          0                                             /*!< SCB CCR: NONBASETHRDENA Position */\r
278 #define SCB_CCR_NONBASETHRDENA_Msk         (1ul << SCB_CCR_NONBASETHRDENA_Pos)            /*!< SCB CCR: NONBASETHRDENA Mask */\r
279 \r
280 /* SCB System Handler Control and State Register Definitions */\r
281 #define SCB_SHCSR_USGFAULTENA_Pos          18                                             /*!< SCB SHCSR: USGFAULTENA Position */\r
282 #define SCB_SHCSR_USGFAULTENA_Msk          (1ul << SCB_SHCSR_USGFAULTENA_Pos)             /*!< SCB SHCSR: USGFAULTENA Mask */\r
283 \r
284 #define SCB_SHCSR_BUSFAULTENA_Pos          17                                             /*!< SCB SHCSR: BUSFAULTENA Position */\r
285 #define SCB_SHCSR_BUSFAULTENA_Msk          (1ul << SCB_SHCSR_BUSFAULTENA_Pos)             /*!< SCB SHCSR: BUSFAULTENA Mask */\r
286 \r
287 #define SCB_SHCSR_MEMFAULTENA_Pos          16                                             /*!< SCB SHCSR: MEMFAULTENA Position */\r
288 #define SCB_SHCSR_MEMFAULTENA_Msk          (1ul << SCB_SHCSR_MEMFAULTENA_Pos)             /*!< SCB SHCSR: MEMFAULTENA Mask */\r
289 \r
290 #define SCB_SHCSR_SVCALLPENDED_Pos         15                                             /*!< SCB SHCSR: SVCALLPENDED Position */\r
291 #define SCB_SHCSR_SVCALLPENDED_Msk         (1ul << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */\r
292 \r
293 #define SCB_SHCSR_BUSFAULTPENDED_Pos       14                                             /*!< SCB SHCSR: BUSFAULTPENDED Position */\r
294 #define SCB_SHCSR_BUSFAULTPENDED_Msk       (1ul << SCB_SHCSR_BUSFAULTPENDED_Pos)          /*!< SCB SHCSR: BUSFAULTPENDED Mask */\r
295 \r
296 #define SCB_SHCSR_MEMFAULTPENDED_Pos       13                                             /*!< SCB SHCSR: MEMFAULTPENDED Position */\r
297 #define SCB_SHCSR_MEMFAULTPENDED_Msk       (1ul << SCB_SHCSR_MEMFAULTPENDED_Pos)          /*!< SCB SHCSR: MEMFAULTPENDED Mask */\r
298 \r
299 #define SCB_SHCSR_USGFAULTPENDED_Pos       12                                             /*!< SCB SHCSR: USGFAULTPENDED Position */\r
300 #define SCB_SHCSR_USGFAULTPENDED_Msk       (1ul << SCB_SHCSR_USGFAULTPENDED_Pos)          /*!< SCB SHCSR: USGFAULTPENDED Mask */\r
301 \r
302 #define SCB_SHCSR_SYSTICKACT_Pos           11                                             /*!< SCB SHCSR: SYSTICKACT Position */\r
303 #define SCB_SHCSR_SYSTICKACT_Msk           (1ul << SCB_SHCSR_SYSTICKACT_Pos)              /*!< SCB SHCSR: SYSTICKACT Mask */\r
304 \r
305 #define SCB_SHCSR_PENDSVACT_Pos            10                                             /*!< SCB SHCSR: PENDSVACT Position */\r
306 #define SCB_SHCSR_PENDSVACT_Msk            (1ul << SCB_SHCSR_PENDSVACT_Pos)               /*!< SCB SHCSR: PENDSVACT Mask */\r
307 \r
308 #define SCB_SHCSR_MONITORACT_Pos            8                                             /*!< SCB SHCSR: MONITORACT Position */\r
309 #define SCB_SHCSR_MONITORACT_Msk           (1ul << SCB_SHCSR_MONITORACT_Pos)              /*!< SCB SHCSR: MONITORACT Mask */\r
310 \r
311 #define SCB_SHCSR_SVCALLACT_Pos             7                                             /*!< SCB SHCSR: SVCALLACT Position */\r
312 #define SCB_SHCSR_SVCALLACT_Msk            (1ul << SCB_SHCSR_SVCALLACT_Pos)               /*!< SCB SHCSR: SVCALLACT Mask */\r
313 \r
314 #define SCB_SHCSR_USGFAULTACT_Pos           3                                             /*!< SCB SHCSR: USGFAULTACT Position */\r
315 #define SCB_SHCSR_USGFAULTACT_Msk          (1ul << SCB_SHCSR_USGFAULTACT_Pos)             /*!< SCB SHCSR: USGFAULTACT Mask */\r
316 \r
317 #define SCB_SHCSR_BUSFAULTACT_Pos           1                                             /*!< SCB SHCSR: BUSFAULTACT Position */\r
318 #define SCB_SHCSR_BUSFAULTACT_Msk          (1ul << SCB_SHCSR_BUSFAULTACT_Pos)             /*!< SCB SHCSR: BUSFAULTACT Mask */\r
319 \r
320 #define SCB_SHCSR_MEMFAULTACT_Pos           0                                             /*!< SCB SHCSR: MEMFAULTACT Position */\r
321 #define SCB_SHCSR_MEMFAULTACT_Msk          (1ul << SCB_SHCSR_MEMFAULTACT_Pos)             /*!< SCB SHCSR: MEMFAULTACT Mask */\r
322 \r
323 /* SCB Configurable Fault Status Registers Definitions */\r
324 #define SCB_CFSR_USGFAULTSR_Pos            16                                             /*!< SCB CFSR: Usage Fault Status Register Position */\r
325 #define SCB_CFSR_USGFAULTSR_Msk            (0xFFFFul << SCB_CFSR_USGFAULTSR_Pos)          /*!< SCB CFSR: Usage Fault Status Register Mask */\r
326 \r
327 #define SCB_CFSR_BUSFAULTSR_Pos             8                                             /*!< SCB CFSR: Bus Fault Status Register Position */\r
328 #define SCB_CFSR_BUSFAULTSR_Msk            (0xFFul << SCB_CFSR_BUSFAULTSR_Pos)            /*!< SCB CFSR: Bus Fault Status Register Mask */\r
329 \r
330 #define SCB_CFSR_MEMFAULTSR_Pos             0                                             /*!< SCB CFSR: Memory Manage Fault Status Register Position */\r
331 #define SCB_CFSR_MEMFAULTSR_Msk            (0xFFul << SCB_CFSR_MEMFAULTSR_Pos)            /*!< SCB CFSR: Memory Manage Fault Status Register Mask */\r
332 \r
333 /* SCB Hard Fault Status Registers Definitions */\r
334 #define SCB_HFSR_DEBUGEVT_Pos              31                                             /*!< SCB HFSR: DEBUGEVT Position */\r
335 #define SCB_HFSR_DEBUGEVT_Msk              (1ul << SCB_HFSR_DEBUGEVT_Pos)                 /*!< SCB HFSR: DEBUGEVT Mask */\r
336 \r
337 #define SCB_HFSR_FORCED_Pos                30                                             /*!< SCB HFSR: FORCED Position */\r
338 #define SCB_HFSR_FORCED_Msk                (1ul << SCB_HFSR_FORCED_Pos)                   /*!< SCB HFSR: FORCED Mask */\r
339 \r
340 #define SCB_HFSR_VECTTBL_Pos                1                                             /*!< SCB HFSR: VECTTBL Position */\r
341 #define SCB_HFSR_VECTTBL_Msk               (1ul << SCB_HFSR_VECTTBL_Pos)                  /*!< SCB HFSR: VECTTBL Mask */\r
342 \r
343 /* SCB Debug Fault Status Register Definitions */\r
344 #define SCB_DFSR_EXTERNAL_Pos               4                                             /*!< SCB DFSR: EXTERNAL Position */\r
345 #define SCB_DFSR_EXTERNAL_Msk              (1ul << SCB_DFSR_EXTERNAL_Pos)                 /*!< SCB DFSR: EXTERNAL Mask */\r
346 \r
347 #define SCB_DFSR_VCATCH_Pos                 3                                             /*!< SCB DFSR: VCATCH Position */\r
348 #define SCB_DFSR_VCATCH_Msk                (1ul << SCB_DFSR_VCATCH_Pos)                   /*!< SCB DFSR: VCATCH Mask */\r
349 \r
350 #define SCB_DFSR_DWTTRAP_Pos                2                                             /*!< SCB DFSR: DWTTRAP Position */\r
351 #define SCB_DFSR_DWTTRAP_Msk               (1ul << SCB_DFSR_DWTTRAP_Pos)                  /*!< SCB DFSR: DWTTRAP Mask */\r
352 \r
353 #define SCB_DFSR_BKPT_Pos                   1                                             /*!< SCB DFSR: BKPT Position */\r
354 #define SCB_DFSR_BKPT_Msk                  (1ul << SCB_DFSR_BKPT_Pos)                     /*!< SCB DFSR: BKPT Mask */\r
355 \r
356 #define SCB_DFSR_HALTED_Pos                 0                                             /*!< SCB DFSR: HALTED Position */\r
357 #define SCB_DFSR_HALTED_Msk                (1ul << SCB_DFSR_HALTED_Pos)                   /*!< SCB DFSR: HALTED Mask */\r
358 /*@}*/ /* end of group CMSIS_CM3_SCB */\r
359 \r
360 \r
361 /** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick\r
362   memory mapped structure for SysTick\r
363   @{\r
364  */\r
365 typedef struct\r
366 {\r
367   __IO uint32_t CTRL;                         /*!< Offset: 0x00  SysTick Control and Status Register */\r
368   __IO uint32_t LOAD;                         /*!< Offset: 0x04  SysTick Reload Value Register       */\r
369   __IO uint32_t VAL;                          /*!< Offset: 0x08  SysTick Current Value Register      */\r
370   __I  uint32_t CALIB;                        /*!< Offset: 0x0C  SysTick Calibration Register        */\r
371 } SysTick_Type;\r
372 \r
373 /* SysTick Control / Status Register Definitions */\r
374 #define SysTick_CTRL_COUNTFLAG_Pos         16                                             /*!< SysTick CTRL: COUNTFLAG Position */\r
375 #define SysTick_CTRL_COUNTFLAG_Msk         (1ul << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */\r
376 \r
377 #define SysTick_CTRL_CLKSOURCE_Pos          2                                             /*!< SysTick CTRL: CLKSOURCE Position */\r
378 #define SysTick_CTRL_CLKSOURCE_Msk         (1ul << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */\r
379 \r
380 #define SysTick_CTRL_TICKINT_Pos            1                                             /*!< SysTick CTRL: TICKINT Position */\r
381 #define SysTick_CTRL_TICKINT_Msk           (1ul << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */\r
382 \r
383 #define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */\r
384 #define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask */\r
385 \r
386 /* SysTick Reload Register Definitions */\r
387 #define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */\r
388 #define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)        /*!< SysTick LOAD: RELOAD Mask */\r
389 \r
390 /* SysTick Current Register Definitions */\r
391 #define SysTick_VAL_CURRENT_Pos             0                                             /*!< SysTick VAL: CURRENT Position */\r
392 #define SysTick_VAL_CURRENT_Msk            (0xFFFFFFul << SysTick_VAL_CURRENT_Pos)        /*!< SysTick VAL: CURRENT Mask */\r
393 \r
394 /* SysTick Calibration Register Definitions */\r
395 #define SysTick_CALIB_NOREF_Pos            31                                             /*!< SysTick CALIB: NOREF Position */\r
396 #define SysTick_CALIB_NOREF_Msk            (1ul << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */\r
397 \r
398 #define SysTick_CALIB_SKEW_Pos             30                                             /*!< SysTick CALIB: SKEW Position */\r
399 #define SysTick_CALIB_SKEW_Msk             (1ul << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */\r
400 \r
401 #define SysTick_CALIB_TENMS_Pos             0                                             /*!< SysTick CALIB: TENMS Position */\r
402 #define SysTick_CALIB_TENMS_Msk            (0xFFFFFFul << SysTick_VAL_CURRENT_Pos)        /*!< SysTick CALIB: TENMS Mask */\r
403 /*@}*/ /* end of group CMSIS_CM3_SysTick */\r
404 \r
405 \r
406 /** @addtogroup CMSIS_CM3_ITM CMSIS CM3 ITM\r
407   memory mapped structure for Instrumentation Trace Macrocell (ITM)\r
408   @{\r
409  */\r
410 typedef struct\r
411 {\r
412   __O  union\r
413   {\r
414     __O  uint8_t    u8;                       /*!< Offset:       ITM Stimulus Port 8-bit                   */\r
415     __O  uint16_t   u16;                      /*!< Offset:       ITM Stimulus Port 16-bit                  */\r
416     __O  uint32_t   u32;                      /*!< Offset:       ITM Stimulus Port 32-bit                  */\r
417   }  PORT [32];                               /*!< Offset: 0x00  ITM Stimulus Port Registers               */\r
418        uint32_t RESERVED0[864];\r
419   __IO uint32_t TER;                          /*!< Offset:       ITM Trace Enable Register                 */\r
420        uint32_t RESERVED1[15];\r
421   __IO uint32_t TPR;                          /*!< Offset:       ITM Trace Privilege Register              */\r
422        uint32_t RESERVED2[15];\r
423   __IO uint32_t TCR;                          /*!< Offset:       ITM Trace Control Register                */\r
424        uint32_t RESERVED3[29];\r
425   __IO uint32_t IWR;                          /*!< Offset:       ITM Integration Write Register            */\r
426   __IO uint32_t IRR;                          /*!< Offset:       ITM Integration Read Register             */\r
427   __IO uint32_t IMCR;                         /*!< Offset:       ITM Integration Mode Control Register     */\r
428        uint32_t RESERVED4[43];\r
429   __IO uint32_t LAR;                          /*!< Offset:       ITM Lock Access Register                  */\r
430   __IO uint32_t LSR;                          /*!< Offset:       ITM Lock Status Register                  */\r
431        uint32_t RESERVED5[6];\r
432   __I  uint32_t PID4;                         /*!< Offset:       ITM Peripheral Identification Register #4 */\r
433   __I  uint32_t PID5;                         /*!< Offset:       ITM Peripheral Identification Register #5 */\r
434   __I  uint32_t PID6;                         /*!< Offset:       ITM Peripheral Identification Register #6 */\r
435   __I  uint32_t PID7;                         /*!< Offset:       ITM Peripheral Identification Register #7 */\r
436   __I  uint32_t PID0;                         /*!< Offset:       ITM Peripheral Identification Register #0 */\r
437   __I  uint32_t PID1;                         /*!< Offset:       ITM Peripheral Identification Register #1 */\r
438   __I  uint32_t PID2;                         /*!< Offset:       ITM Peripheral Identification Register #2 */\r
439   __I  uint32_t PID3;                         /*!< Offset:       ITM Peripheral Identification Register #3 */\r
440   __I  uint32_t CID0;                         /*!< Offset:       ITM Component  Identification Register #0 */\r
441   __I  uint32_t CID1;                         /*!< Offset:       ITM Component  Identification Register #1 */\r
442   __I  uint32_t CID2;                         /*!< Offset:       ITM Component  Identification Register #2 */\r
443   __I  uint32_t CID3;                         /*!< Offset:       ITM Component  Identification Register #3 */\r
444 } ITM_Type;\r
445 \r
446 /* ITM Trace Privilege Register Definitions */\r
447 #define ITM_TPR_PRIVMASK_Pos                0                                             /*!< ITM TPR: PRIVMASK Position */\r
448 #define ITM_TPR_PRIVMASK_Msk               (0xFul << ITM_TPR_PRIVMASK_Pos)                /*!< ITM TPR: PRIVMASK Mask */\r
449 \r
450 /* ITM Trace Control Register Definitions */\r
451 #define ITM_TCR_BUSY_Pos                   23                                             /*!< ITM TCR: BUSY Position */\r
452 #define ITM_TCR_BUSY_Msk                   (1ul << ITM_TCR_BUSY_Pos)                      /*!< ITM TCR: BUSY Mask */\r
453 \r
454 #define ITM_TCR_ATBID_Pos                  16                                             /*!< ITM TCR: ATBID Position */\r
455 #define ITM_TCR_ATBID_Msk                  (0x7Ful << ITM_TCR_ATBID_Pos)                  /*!< ITM TCR: ATBID Mask */\r
456 \r
457 #define ITM_TCR_TSPrescale_Pos              8                                             /*!< ITM TCR: TSPrescale Position */\r
458 #define ITM_TCR_TSPrescale_Msk             (3ul << ITM_TCR_TSPrescale_Pos)                /*!< ITM TCR: TSPrescale Mask */\r
459 \r
460 #define ITM_TCR_SWOENA_Pos                  4                                             /*!< ITM TCR: SWOENA Position */\r
461 #define ITM_TCR_SWOENA_Msk                 (1ul << ITM_TCR_SWOENA_Pos)                    /*!< ITM TCR: SWOENA Mask */\r
462 \r
463 #define ITM_TCR_DWTENA_Pos                  3                                             /*!< ITM TCR: DWTENA Position */\r
464 #define ITM_TCR_DWTENA_Msk                 (1ul << ITM_TCR_DWTENA_Pos)                    /*!< ITM TCR: DWTENA Mask */\r
465 \r
466 #define ITM_TCR_SYNCENA_Pos                 2                                             /*!< ITM TCR: SYNCENA Position */\r
467 #define ITM_TCR_SYNCENA_Msk                (1ul << ITM_TCR_SYNCENA_Pos)                   /*!< ITM TCR: SYNCENA Mask */\r
468 \r
469 #define ITM_TCR_TSENA_Pos                   1                                             /*!< ITM TCR: TSENA Position */\r
470 #define ITM_TCR_TSENA_Msk                  (1ul << ITM_TCR_TSENA_Pos)                     /*!< ITM TCR: TSENA Mask */\r
471 \r
472 #define ITM_TCR_ITMENA_Pos                  0                                             /*!< ITM TCR: ITM Enable bit Position */\r
473 #define ITM_TCR_ITMENA_Msk                 (1ul << ITM_TCR_ITMENA_Pos)                    /*!< ITM TCR: ITM Enable bit Mask */\r
474 \r
475 /* ITM Integration Write Register Definitions */\r
476 #define ITM_IWR_ATVALIDM_Pos                0                                             /*!< ITM IWR: ATVALIDM Position */\r
477 #define ITM_IWR_ATVALIDM_Msk               (1ul << ITM_IWR_ATVALIDM_Pos)                  /*!< ITM IWR: ATVALIDM Mask */\r
478 \r
479 /* ITM Integration Read Register Definitions */\r
480 #define ITM_IRR_ATREADYM_Pos                0                                             /*!< ITM IRR: ATREADYM Position */\r
481 #define ITM_IRR_ATREADYM_Msk               (1ul << ITM_IRR_ATREADYM_Pos)                  /*!< ITM IRR: ATREADYM Mask */\r
482 \r
483 /* ITM Integration Mode Control Register Definitions */\r
484 #define ITM_IMCR_INTEGRATION_Pos            0                                             /*!< ITM IMCR: INTEGRATION Position */\r
485 #define ITM_IMCR_INTEGRATION_Msk           (1ul << ITM_IMCR_INTEGRATION_Pos)              /*!< ITM IMCR: INTEGRATION Mask */\r
486 \r
487 /* ITM Lock Status Register Definitions */\r
488 #define ITM_LSR_ByteAcc_Pos                 2                                             /*!< ITM LSR: ByteAcc Position */\r
489 #define ITM_LSR_ByteAcc_Msk                (1ul << ITM_LSR_ByteAcc_Pos)                   /*!< ITM LSR: ByteAcc Mask */\r
490 \r
491 #define ITM_LSR_Access_Pos                  1                                             /*!< ITM LSR: Access Position */\r
492 #define ITM_LSR_Access_Msk                 (1ul << ITM_LSR_Access_Pos)                    /*!< ITM LSR: Access Mask */\r
493 \r
494 #define ITM_LSR_Present_Pos                 0                                             /*!< ITM LSR: Present Position */\r
495 #define ITM_LSR_Present_Msk                (1ul << ITM_LSR_Present_Pos)                   /*!< ITM LSR: Present Mask */\r
496 /*@}*/ /* end of group CMSIS_CM3_ITM */\r
497 \r
498 \r
499 /** @addtogroup CMSIS_CM3_InterruptType CMSIS CM3 Interrupt Type\r
500   memory mapped structure for Interrupt Type\r
501   @{\r
502  */\r
503 typedef struct\r
504 {\r
505        uint32_t RESERVED0;\r
506   __I  uint32_t ICTR;                         /*!< Offset: 0x04  Interrupt Control Type Register */\r
507 #if ((defined __CM3_REV) && (__CM3_REV >= 0x200))\r
508   __IO uint32_t ACTLR;                        /*!< Offset: 0x08  Auxiliary Control Register      */\r
509 #else\r
510        uint32_t RESERVED1;\r
511 #endif\r
512 } InterruptType_Type;\r
513 \r
514 /* Interrupt Controller Type Register Definitions */\r
515 #define InterruptType_ICTR_INTLINESNUM_Pos  0                                             /*!< InterruptType ICTR: INTLINESNUM Position */\r
516 #define InterruptType_ICTR_INTLINESNUM_Msk (0x1Ful << InterruptType_ICTR_INTLINESNUM_Pos) /*!< InterruptType ICTR: INTLINESNUM Mask */\r
517 \r
518 /* Auxiliary Control Register Definitions */\r
519 #define InterruptType_ACTLR_DISFOLD_Pos     2                                             /*!< InterruptType ACTLR: DISFOLD Position */\r
520 #define InterruptType_ACTLR_DISFOLD_Msk    (1ul << InterruptType_ACTLR_DISFOLD_Pos)       /*!< InterruptType ACTLR: DISFOLD Mask */\r
521 \r
522 #define InterruptType_ACTLR_DISDEFWBUF_Pos  1                                             /*!< InterruptType ACTLR: DISDEFWBUF Position */\r
523 #define InterruptType_ACTLR_DISDEFWBUF_Msk (1ul << InterruptType_ACTLR_DISDEFWBUF_Pos)    /*!< InterruptType ACTLR: DISDEFWBUF Mask */\r
524 \r
525 #define InterruptType_ACTLR_DISMCYCINT_Pos  0                                             /*!< InterruptType ACTLR: DISMCYCINT Position */\r
526 #define InterruptType_ACTLR_DISMCYCINT_Msk (1ul << InterruptType_ACTLR_DISMCYCINT_Pos)    /*!< InterruptType ACTLR: DISMCYCINT Mask */\r
527 /*@}*/ /* end of group CMSIS_CM3_InterruptType */\r
528 \r
529 \r
530 #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)\r
531 /** @addtogroup CMSIS_CM3_MPU CMSIS CM3 MPU\r
532   memory mapped structure for Memory Protection Unit (MPU)\r
533   @{\r
534  */\r
535 typedef struct\r
536 {\r
537   __I  uint32_t TYPE;                         /*!< Offset: 0x00  MPU Type Register                              */\r
538   __IO uint32_t CTRL;                         /*!< Offset: 0x04  MPU Control Register                           */\r
539   __IO uint32_t RNR;                          /*!< Offset: 0x08  MPU Region RNRber Register                     */\r
540   __IO uint32_t RBAR;                         /*!< Offset: 0x0C  MPU Region Base Address Register               */\r
541   __IO uint32_t RASR;                         /*!< Offset: 0x10  MPU Region Attribute and Size Register         */\r
542   __IO uint32_t RBAR_A1;                      /*!< Offset: 0x14  MPU Alias 1 Region Base Address Register       */\r
543   __IO uint32_t RASR_A1;                      /*!< Offset: 0x18  MPU Alias 1 Region Attribute and Size Register */\r
544   __IO uint32_t RBAR_A2;                      /*!< Offset: 0x1C  MPU Alias 2 Region Base Address Register       */\r
545   __IO uint32_t RASR_A2;                      /*!< Offset: 0x20  MPU Alias 2 Region Attribute and Size Register */\r
546   __IO uint32_t RBAR_A3;                      /*!< Offset: 0x24  MPU Alias 3 Region Base Address Register       */\r
547   __IO uint32_t RASR_A3;                      /*!< Offset: 0x28  MPU Alias 3 Region Attribute and Size Register */\r
548 } MPU_Type;\r
549 \r
550 /* MPU Type Register */\r
551 #define MPU_TYPE_IREGION_Pos               16                                             /*!< MPU TYPE: IREGION Position */\r
552 #define MPU_TYPE_IREGION_Msk               (0xFFul << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */\r
553 \r
554 #define MPU_TYPE_DREGION_Pos                8                                             /*!< MPU TYPE: DREGION Position */\r
555 #define MPU_TYPE_DREGION_Msk               (0xFFul << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */\r
556 \r
557 #define MPU_TYPE_SEPARATE_Pos               0                                             /*!< MPU TYPE: SEPARATE Position */\r
558 #define MPU_TYPE_SEPARATE_Msk              (1ul << MPU_TYPE_SEPARATE_Pos)                 /*!< MPU TYPE: SEPARATE Mask */\r
559 \r
560 /* MPU Control Register */\r
561 #define MPU_CTRL_PRIVDEFENA_Pos             2                                             /*!< MPU CTRL: PRIVDEFENA Position */\r
562 #define MPU_CTRL_PRIVDEFENA_Msk            (1ul << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */\r
563 \r
564 #define MPU_CTRL_HFNMIENA_Pos               1                                             /*!< MPU CTRL: HFNMIENA Position */\r
565 #define MPU_CTRL_HFNMIENA_Msk              (1ul << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */\r
566 \r
567 #define MPU_CTRL_ENABLE_Pos                 0                                             /*!< MPU CTRL: ENABLE Position */\r
568 #define MPU_CTRL_ENABLE_Msk                (1ul << MPU_CTRL_ENABLE_Pos)                   /*!< MPU CTRL: ENABLE Mask */\r
569 \r
570 /* MPU Region Number Register */\r
571 #define MPU_RNR_REGION_Pos                  0                                             /*!< MPU RNR: REGION Position */\r
572 #define MPU_RNR_REGION_Msk                 (0xFFul << MPU_RNR_REGION_Pos)                 /*!< MPU RNR: REGION Mask */\r
573 \r
574 /* MPU Region Base Address Register */\r
575 #define MPU_RBAR_ADDR_Pos                   5                                             /*!< MPU RBAR: ADDR Position */\r
576 #define MPU_RBAR_ADDR_Msk                  (0x7FFFFFFul << MPU_RBAR_ADDR_Pos)             /*!< MPU RBAR: ADDR Mask */\r
577 \r
578 #define MPU_RBAR_VALID_Pos                  4                                             /*!< MPU RBAR: VALID Position */\r
579 #define MPU_RBAR_VALID_Msk                 (1ul << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */\r
580 \r
581 #define MPU_RBAR_REGION_Pos                 0                                             /*!< MPU RBAR: REGION Position */\r
582 #define MPU_RBAR_REGION_Msk                (0xFul << MPU_RBAR_REGION_Pos)                 /*!< MPU RBAR: REGION Mask */\r
583 \r
584 /* MPU Region Attribute and Size Register */\r
585 #define MPU_RASR_XN_Pos                    28                                             /*!< MPU RASR: XN Position */\r
586 #define MPU_RASR_XN_Msk                    (1ul << MPU_RASR_XN_Pos)                       /*!< MPU RASR: XN Mask */\r
587 \r
588 #define MPU_RASR_AP_Pos                    24                                             /*!< MPU RASR: AP Position */\r
589 #define MPU_RASR_AP_Msk                    (7ul << MPU_RASR_AP_Pos)                       /*!< MPU RASR: AP Mask */\r
590 \r
591 #define MPU_RASR_TEX_Pos                   19                                             /*!< MPU RASR: TEX Position */\r
592 #define MPU_RASR_TEX_Msk                   (7ul << MPU_RASR_TEX_Pos)                      /*!< MPU RASR: TEX Mask */\r
593 \r
594 #define MPU_RASR_S_Pos                     18                                             /*!< MPU RASR: Shareable bit Position */\r
595 #define MPU_RASR_S_Msk                     (1ul << MPU_RASR_S_Pos)                        /*!< MPU RASR: Shareable bit Mask */\r
596 \r
597 #define MPU_RASR_C_Pos                     17                                             /*!< MPU RASR: Cacheable bit Position */\r
598 #define MPU_RASR_C_Msk                     (1ul << MPU_RASR_C_Pos)                        /*!< MPU RASR: Cacheable bit Mask */\r
599 \r
600 #define MPU_RASR_B_Pos                     16                                             /*!< MPU RASR: Bufferable bit Position */\r
601 #define MPU_RASR_B_Msk                     (1ul << MPU_RASR_B_Pos)                        /*!< MPU RASR: Bufferable bit Mask */\r
602 \r
603 #define MPU_RASR_SRD_Pos                    8                                             /*!< MPU RASR: Sub-Region Disable Position */\r
604 #define MPU_RASR_SRD_Msk                   (0xFFul << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */\r
605 \r
606 #define MPU_RASR_SIZE_Pos                   1                                             /*!< MPU RASR: Region Size Field Position */\r
607 #define MPU_RASR_SIZE_Msk                  (0x1Ful << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */\r
608 \r
609 #define MPU_RASR_ENA_Pos                     0                                            /*!< MPU RASR: Region enable bit Position */\r
610 #define MPU_RASR_ENA_Msk                    (0x1Ful << MPU_RASR_ENA_Pos)                  /*!< MPU RASR: Region enable bit Disable Mask */\r
611 \r
612 /*@}*/ /* end of group CMSIS_CM3_MPU */\r
613 #endif\r
614 \r
615 \r
616 /** @addtogroup CMSIS_CM3_CoreDebug CMSIS CM3 Core Debug\r
617   memory mapped structure for Core Debug Register\r
618   @{\r
619  */\r
620 typedef struct\r
621 {\r
622   __IO uint32_t DHCSR;                        /*!< Offset: 0x00  Debug Halting Control and Status Register    */\r
623   __O  uint32_t DCRSR;                        /*!< Offset: 0x04  Debug Core Register Selector Register        */\r
624   __IO uint32_t DCRDR;                        /*!< Offset: 0x08  Debug Core Register Data Register            */\r
625   __IO uint32_t DEMCR;                        /*!< Offset: 0x0C  Debug Exception and Monitor Control Register */\r
626 } CoreDebug_Type;\r
627 \r
628 /* Debug Halting Control and Status Register */\r
629 #define CoreDebug_DHCSR_DBGKEY_Pos         16                                             /*!< CoreDebug DHCSR: DBGKEY Position */\r
630 #define CoreDebug_DHCSR_DBGKEY_Msk         (0xFFFFul << CoreDebug_DHCSR_DBGKEY_Pos)       /*!< CoreDebug DHCSR: DBGKEY Mask */\r
631 \r
632 #define CoreDebug_DHCSR_S_RESET_ST_Pos     25                                             /*!< CoreDebug DHCSR: S_RESET_ST Position */\r
633 #define CoreDebug_DHCSR_S_RESET_ST_Msk     (1ul << CoreDebug_DHCSR_S_RESET_ST_Pos)        /*!< CoreDebug DHCSR: S_RESET_ST Mask */\r
634 \r
635 #define CoreDebug_DHCSR_S_RETIRE_ST_Pos    24                                             /*!< CoreDebug DHCSR: S_RETIRE_ST Position */\r
636 #define CoreDebug_DHCSR_S_RETIRE_ST_Msk    (1ul << CoreDebug_DHCSR_S_RETIRE_ST_Pos)       /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */\r
637 \r
638 #define CoreDebug_DHCSR_S_LOCKUP_Pos       19                                             /*!< CoreDebug DHCSR: S_LOCKUP Position */\r
639 #define CoreDebug_DHCSR_S_LOCKUP_Msk       (1ul << CoreDebug_DHCSR_S_LOCKUP_Pos)          /*!< CoreDebug DHCSR: S_LOCKUP Mask */\r
640 \r
641 #define CoreDebug_DHCSR_S_SLEEP_Pos        18                                             /*!< CoreDebug DHCSR: S_SLEEP Position */\r
642 #define CoreDebug_DHCSR_S_SLEEP_Msk        (1ul << CoreDebug_DHCSR_S_SLEEP_Pos)           /*!< CoreDebug DHCSR: S_SLEEP Mask */\r
643 \r
644 #define CoreDebug_DHCSR_S_HALT_Pos         17                                             /*!< CoreDebug DHCSR: S_HALT Position */\r
645 #define CoreDebug_DHCSR_S_HALT_Msk         (1ul << CoreDebug_DHCSR_S_HALT_Pos)            /*!< CoreDebug DHCSR: S_HALT Mask */\r
646 \r
647 #define CoreDebug_DHCSR_S_REGRDY_Pos       16                                             /*!< CoreDebug DHCSR: S_REGRDY Position */\r
648 #define CoreDebug_DHCSR_S_REGRDY_Msk       (1ul << CoreDebug_DHCSR_S_REGRDY_Pos)          /*!< CoreDebug DHCSR: S_REGRDY Mask */\r
649 \r
650 #define CoreDebug_DHCSR_C_SNAPSTALL_Pos     5                                             /*!< CoreDebug DHCSR: C_SNAPSTALL Position */\r
651 #define CoreDebug_DHCSR_C_SNAPSTALL_Msk    (1ul << CoreDebug_DHCSR_C_SNAPSTALL_Pos)       /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */\r
652 \r
653 #define CoreDebug_DHCSR_C_MASKINTS_Pos      3                                             /*!< CoreDebug DHCSR: C_MASKINTS Position */\r
654 #define CoreDebug_DHCSR_C_MASKINTS_Msk     (1ul << CoreDebug_DHCSR_C_MASKINTS_Pos)        /*!< CoreDebug DHCSR: C_MASKINTS Mask */\r
655 \r
656 #define CoreDebug_DHCSR_C_STEP_Pos          2                                             /*!< CoreDebug DHCSR: C_STEP Position */\r
657 #define CoreDebug_DHCSR_C_STEP_Msk         (1ul << CoreDebug_DHCSR_C_STEP_Pos)            /*!< CoreDebug DHCSR: C_STEP Mask */\r
658 \r
659 #define CoreDebug_DHCSR_C_HALT_Pos          1                                             /*!< CoreDebug DHCSR: C_HALT Position */\r
660 #define CoreDebug_DHCSR_C_HALT_Msk         (1ul << CoreDebug_DHCSR_C_HALT_Pos)            /*!< CoreDebug DHCSR: C_HALT Mask */\r
661 \r
662 #define CoreDebug_DHCSR_C_DEBUGEN_Pos       0                                             /*!< CoreDebug DHCSR: C_DEBUGEN Position */\r
663 #define CoreDebug_DHCSR_C_DEBUGEN_Msk      (1ul << CoreDebug_DHCSR_C_DEBUGEN_Pos)         /*!< CoreDebug DHCSR: C_DEBUGEN Mask */\r
664 \r
665 /* Debug Core Register Selector Register */\r
666 #define CoreDebug_DCRSR_REGWnR_Pos         16                                             /*!< CoreDebug DCRSR: REGWnR Position */\r
667 #define CoreDebug_DCRSR_REGWnR_Msk         (1ul << CoreDebug_DCRSR_REGWnR_Pos)            /*!< CoreDebug DCRSR: REGWnR Mask */\r
668 \r
669 #define CoreDebug_DCRSR_REGSEL_Pos          0                                             /*!< CoreDebug DCRSR: REGSEL Position */\r
670 #define CoreDebug_DCRSR_REGSEL_Msk         (0x1Ful << CoreDebug_DCRSR_REGSEL_Pos)         /*!< CoreDebug DCRSR: REGSEL Mask */\r
671 \r
672 /* Debug Exception and Monitor Control Register */\r
673 #define CoreDebug_DEMCR_TRCENA_Pos         24                                             /*!< CoreDebug DEMCR: TRCENA Position */\r
674 #define CoreDebug_DEMCR_TRCENA_Msk         (1ul << CoreDebug_DEMCR_TRCENA_Pos)            /*!< CoreDebug DEMCR: TRCENA Mask */\r
675 \r
676 #define CoreDebug_DEMCR_MON_REQ_Pos        19                                             /*!< CoreDebug DEMCR: MON_REQ Position */\r
677 #define CoreDebug_DEMCR_MON_REQ_Msk        (1ul << CoreDebug_DEMCR_MON_REQ_Pos)           /*!< CoreDebug DEMCR: MON_REQ Mask */\r
678 \r
679 #define CoreDebug_DEMCR_MON_STEP_Pos       18                                             /*!< CoreDebug DEMCR: MON_STEP Position */\r
680 #define CoreDebug_DEMCR_MON_STEP_Msk       (1ul << CoreDebug_DEMCR_MON_STEP_Pos)          /*!< CoreDebug DEMCR: MON_STEP Mask */\r
681 \r
682 #define CoreDebug_DEMCR_MON_PEND_Pos       17                                             /*!< CoreDebug DEMCR: MON_PEND Position */\r
683 #define CoreDebug_DEMCR_MON_PEND_Msk       (1ul << CoreDebug_DEMCR_MON_PEND_Pos)          /*!< CoreDebug DEMCR: MON_PEND Mask */\r
684 \r
685 #define CoreDebug_DEMCR_MON_EN_Pos         16                                             /*!< CoreDebug DEMCR: MON_EN Position */\r
686 #define CoreDebug_DEMCR_MON_EN_Msk         (1ul << CoreDebug_DEMCR_MON_EN_Pos)            /*!< CoreDebug DEMCR: MON_EN Mask */\r
687 \r
688 #define CoreDebug_DEMCR_VC_HARDERR_Pos     10                                             /*!< CoreDebug DEMCR: VC_HARDERR Position */\r
689 #define CoreDebug_DEMCR_VC_HARDERR_Msk     (1ul << CoreDebug_DEMCR_VC_HARDERR_Pos)        /*!< CoreDebug DEMCR: VC_HARDERR Mask */\r
690 \r
691 #define CoreDebug_DEMCR_VC_INTERR_Pos       9                                             /*!< CoreDebug DEMCR: VC_INTERR Position */\r
692 #define CoreDebug_DEMCR_VC_INTERR_Msk      (1ul << CoreDebug_DEMCR_VC_INTERR_Pos)         /*!< CoreDebug DEMCR: VC_INTERR Mask */\r
693 \r
694 #define CoreDebug_DEMCR_VC_BUSERR_Pos       8                                             /*!< CoreDebug DEMCR: VC_BUSERR Position */\r
695 #define CoreDebug_DEMCR_VC_BUSERR_Msk      (1ul << CoreDebug_DEMCR_VC_BUSERR_Pos)         /*!< CoreDebug DEMCR: VC_BUSERR Mask */\r
696 \r
697 #define CoreDebug_DEMCR_VC_STATERR_Pos      7                                             /*!< CoreDebug DEMCR: VC_STATERR Position */\r
698 #define CoreDebug_DEMCR_VC_STATERR_Msk     (1ul << CoreDebug_DEMCR_VC_STATERR_Pos)        /*!< CoreDebug DEMCR: VC_STATERR Mask */\r
699 \r
700 #define CoreDebug_DEMCR_VC_CHKERR_Pos       6                                             /*!< CoreDebug DEMCR: VC_CHKERR Position */\r
701 #define CoreDebug_DEMCR_VC_CHKERR_Msk      (1ul << CoreDebug_DEMCR_VC_CHKERR_Pos)         /*!< CoreDebug DEMCR: VC_CHKERR Mask */\r
702 \r
703 #define CoreDebug_DEMCR_VC_NOCPERR_Pos      5                                             /*!< CoreDebug DEMCR: VC_NOCPERR Position */\r
704 #define CoreDebug_DEMCR_VC_NOCPERR_Msk     (1ul << CoreDebug_DEMCR_VC_NOCPERR_Pos)        /*!< CoreDebug DEMCR: VC_NOCPERR Mask */\r
705 \r
706 #define CoreDebug_DEMCR_VC_MMERR_Pos        4                                             /*!< CoreDebug DEMCR: VC_MMERR Position */\r
707 #define CoreDebug_DEMCR_VC_MMERR_Msk       (1ul << CoreDebug_DEMCR_VC_MMERR_Pos)          /*!< CoreDebug DEMCR: VC_MMERR Mask */\r
708 \r
709 #define CoreDebug_DEMCR_VC_CORERESET_Pos    0                                             /*!< CoreDebug DEMCR: VC_CORERESET Position */\r
710 #define CoreDebug_DEMCR_VC_CORERESET_Msk   (1ul << CoreDebug_DEMCR_VC_CORERESET_Pos)      /*!< CoreDebug DEMCR: VC_CORERESET Mask */\r
711 /*@}*/ /* end of group CMSIS_CM3_CoreDebug */\r
712 \r
713 \r
714 /* Memory mapping of Cortex-M3 Hardware */\r
715 #define SCS_BASE            (0xE000E000)                              /*!< System Control Space Base Address */\r
716 #define ITM_BASE            (0xE0000000)                              /*!< ITM Base Address                  */\r
717 #define CoreDebug_BASE      (0xE000EDF0)                              /*!< Core Debug Base Address           */\r
718 #define SysTick_BASE        (SCS_BASE +  0x0010)                      /*!< SysTick Base Address              */\r
719 #define NVIC_BASE           (SCS_BASE +  0x0100)                      /*!< NVIC Base Address                 */\r
720 #define SCB_BASE            (SCS_BASE +  0x0D00)                      /*!< System Control Block Base Address */\r
721 \r
722 #define InterruptType       ((InterruptType_Type *) SCS_BASE)         /*!< Interrupt Type Register           */\r
723 #define SCB                 ((SCB_Type *)           SCB_BASE)         /*!< SCB configuration struct          */\r
724 #define SysTick             ((SysTick_Type *)       SysTick_BASE)     /*!< SysTick configuration struct      */\r
725 #define NVIC                ((NVIC_Type *)          NVIC_BASE)        /*!< NVIC configuration struct         */\r
726 #define ITM                 ((ITM_Type *)           ITM_BASE)         /*!< ITM configuration struct          */\r
727 #define CoreDebug           ((CoreDebug_Type *)     CoreDebug_BASE)   /*!< Core Debug configuration struct   */\r
728 \r
729 #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1)\r
730   #define MPU_BASE          (SCS_BASE +  0x0D90)                      /*!< Memory Protection Unit            */\r
731   #define MPU               ((MPU_Type*)            MPU_BASE)         /*!< Memory Protection Unit            */\r
732 #endif\r
733 \r
734 /*@}*/ /* end of group CMSIS_CM3_core_register */\r
735 \r
736 \r
737 /*******************************************************************************\r
738  *                Hardware Abstraction Layer\r
739  ******************************************************************************/\r
740 \r
741 #if defined ( __CC_ARM   )\r
742   #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler          */\r
743   #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler       */\r
744 \r
745 #elif defined ( __ICCARM__ )\r
746   #define __ASM           __asm                                       /*!< asm keyword for IAR Compiler          */\r
747   #define __INLINE        inline                                      /*!< inline keyword for IAR Compiler. Only avaiable in High optimization mode! */\r
748 \r
749 #elif defined   (  __GNUC__  )\r
750   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler          */\r
751   #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler       */\r
752 \r
753 #elif defined   (  __TASKING__  )\r
754   #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler      */\r
755   #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler   */\r
756 \r
757 #endif\r
758 \r
759 \r
760 /* ###################  Compiler specific Intrinsics  ########################### */\r
761 \r
762 #if defined ( __CC_ARM   ) /*------------------RealView Compiler -----------------*/\r
763 /* ARM armcc specific functions */\r
764 \r
765 #define __enable_fault_irq                __enable_fiq\r
766 #define __disable_fault_irq               __disable_fiq\r
767 \r
768 #define __NOP                             __nop\r
769 #define __WFI                             __wfi\r
770 #define __WFE                             __wfe\r
771 #define __SEV                             __sev\r
772 #define __ISB()                           __isb(0)\r
773 #define __DSB()                           __dsb(0)\r
774 #define __DMB()                           __dmb(0)\r
775 #define __REV                             __rev\r
776 #define __RBIT                            __rbit\r
777 #define __LDREXB(ptr)                     ((unsigned char ) __ldrex(ptr))\r
778 #define __LDREXH(ptr)                     ((unsigned short) __ldrex(ptr))\r
779 #define __LDREXW(ptr)                     ((unsigned int  ) __ldrex(ptr))\r
780 #define __STREXB(value, ptr)              __strex(value, ptr)\r
781 #define __STREXH(value, ptr)              __strex(value, ptr)\r
782 #define __STREXW(value, ptr)              __strex(value, ptr)\r
783 \r
784 \r
785 /* intrinsic unsigned long long __ldrexd(volatile void *ptr) */\r
786 /* intrinsic int __strexd(unsigned long long val, volatile void *ptr) */\r
787 /* intrinsic void __enable_irq();     */\r
788 /* intrinsic void __disable_irq();    */\r
789 \r
790 \r
791 /**\r
792  * @brief  Return the Process Stack Pointer\r
793  *\r
794  * @return ProcessStackPointer\r
795  *\r
796  * Return the actual process stack pointer\r
797  */\r
798 extern uint32_t __get_PSP(void);\r
799 \r
800 /**\r
801  * @brief  Set the Process Stack Pointer\r
802  *\r
803  * @param  topOfProcStack  Process Stack Pointer\r
804  *\r
805  * Assign the value ProcessStackPointer to the MSP\r
806  * (process stack pointer) Cortex processor register\r
807  */\r
808 extern void __set_PSP(uint32_t topOfProcStack);\r
809 \r
810 /**\r
811  * @brief  Return the Main Stack Pointer\r
812  *\r
813  * @return Main Stack Pointer\r
814  *\r
815  * Return the current value of the MSP (main stack pointer)\r
816  * Cortex processor register\r
817  */\r
818 extern uint32_t __get_MSP(void);\r
819 \r
820 /**\r
821  * @brief  Set the Main Stack Pointer\r
822  *\r
823  * @param  topOfMainStack  Main Stack Pointer\r
824  *\r
825  * Assign the value mainStackPointer to the MSP\r
826  * (main stack pointer) Cortex processor register\r
827  */\r
828 extern void __set_MSP(uint32_t topOfMainStack);\r
829 \r
830 /**\r
831  * @brief  Reverse byte order in unsigned short value\r
832  *\r
833  * @param   value  value to reverse\r
834  * @return         reversed value\r
835  *\r
836  * Reverse byte order in unsigned short value\r
837  */\r
838 extern uint32_t __REV16(uint16_t value);\r
839 \r
840 /**\r
841  * @brief  Reverse byte order in signed short value with sign extension to integer\r
842  *\r
843  * @param   value  value to reverse\r
844  * @return         reversed value\r
845  *\r
846  * Reverse byte order in signed short value with sign extension to integer\r
847  */\r
848 extern int32_t __REVSH(int16_t value);\r
849 \r
850 \r
851 #if (__ARMCC_VERSION < 400000)\r
852 \r
853 /**\r
854  * @brief  Remove the exclusive lock created by ldrex\r
855  *\r
856  * Removes the exclusive lock which is created by ldrex.\r
857  */\r
858 extern void __CLREX(void);\r
859 \r
860 /**\r
861  * @brief  Return the Base Priority value\r
862  *\r
863  * @return BasePriority\r
864  *\r
865  * Return the content of the base priority register\r
866  */\r
867 extern uint32_t __get_BASEPRI(void);\r
868 \r
869 /**\r
870  * @brief  Set the Base Priority value\r
871  *\r
872  * @param  basePri  BasePriority\r
873  *\r
874  * Set the base priority register\r
875  */\r
876 extern void __set_BASEPRI(uint32_t basePri);\r
877 \r
878 /**\r
879  * @brief  Return the Priority Mask value\r
880  *\r
881  * @return PriMask\r
882  *\r
883  * Return state of the priority mask bit from the priority mask register\r
884  */\r
885 extern uint32_t __get_PRIMASK(void);\r
886 \r
887 /**\r
888  * @brief  Set the Priority Mask value\r
889  *\r
890  * @param   priMask  PriMask\r
891  *\r
892  * Set the priority mask bit in the priority mask register\r
893  */\r
894 extern void __set_PRIMASK(uint32_t priMask);\r
895 \r
896 /**\r
897  * @brief  Return the Fault Mask value\r
898  *\r
899  * @return FaultMask\r
900  *\r
901  * Return the content of the fault mask register\r
902  */\r
903 extern uint32_t __get_FAULTMASK(void);\r
904 \r
905 /**\r
906  * @brief  Set the Fault Mask value\r
907  *\r
908  * @param  faultMask faultMask value\r
909  *\r
910  * Set the fault mask register\r
911  */\r
912 extern void __set_FAULTMASK(uint32_t faultMask);\r
913 \r
914 /**\r
915  * @brief  Return the Control Register value\r
916  *\r
917  * @return Control value\r
918  *\r
919  * Return the content of the control register\r
920  */\r
921 extern uint32_t __get_CONTROL(void);\r
922 \r
923 /**\r
924  * @brief  Set the Control Register value\r
925  *\r
926  * @param  control  Control value\r
927  *\r
928  * Set the control register\r
929  */\r
930 extern void __set_CONTROL(uint32_t control);\r
931 \r
932 #else  /* (__ARMCC_VERSION >= 400000)  */\r
933 \r
934 /**\r
935  * @brief  Remove the exclusive lock created by ldrex\r
936  *\r
937  * Removes the exclusive lock which is created by ldrex.\r
938  */\r
939 #define __CLREX                           __clrex\r
940 \r
941 /**\r
942  * @brief  Return the Base Priority value\r
943  *\r
944  * @return BasePriority\r
945  *\r
946  * Return the content of the base priority register\r
947  */\r
948 static __INLINE uint32_t  __get_BASEPRI(void)\r
949 {\r
950   register uint32_t __regBasePri         __ASM("basepri");\r
951   return(__regBasePri);\r
952 }\r
953 \r
954 /**\r
955  * @brief  Set the Base Priority value\r
956  *\r
957  * @param  basePri  BasePriority\r
958  *\r
959  * Set the base priority register\r
960  */\r
961 static __INLINE void __set_BASEPRI(uint32_t basePri)\r
962 {\r
963   register uint32_t __regBasePri         __ASM("basepri");\r
964   __regBasePri = (basePri & 0xff);\r
965 }\r
966 \r
967 /**\r
968  * @brief  Return the Priority Mask value\r
969  *\r
970  * @return PriMask\r
971  *\r
972  * Return state of the priority mask bit from the priority mask register\r
973  */\r
974 static __INLINE uint32_t __get_PRIMASK(void)\r
975 {\r
976   register uint32_t __regPriMask         __ASM("primask");\r
977   return(__regPriMask);\r
978 }\r
979 \r
980 /**\r
981  * @brief  Set the Priority Mask value\r
982  *\r
983  * @param  priMask  PriMask\r
984  *\r
985  * Set the priority mask bit in the priority mask register\r
986  */\r
987 static __INLINE void __set_PRIMASK(uint32_t priMask)\r
988 {\r
989   register uint32_t __regPriMask         __ASM("primask");\r
990   __regPriMask = (priMask);\r
991 }\r
992 \r
993 /**\r
994  * @brief  Return the Fault Mask value\r
995  *\r
996  * @return FaultMask\r
997  *\r
998  * Return the content of the fault mask register\r
999  */\r
1000 static __INLINE uint32_t __get_FAULTMASK(void)\r
1001 {\r
1002   register uint32_t __regFaultMask       __ASM("faultmask");\r
1003   return(__regFaultMask);\r
1004 }\r
1005 \r
1006 /**\r
1007  * @brief  Set the Fault Mask value\r
1008  *\r
1009  * @param  faultMask  faultMask value\r
1010  *\r
1011  * Set the fault mask register\r
1012  */\r
1013 static __INLINE void __set_FAULTMASK(uint32_t faultMask)\r
1014 {\r
1015   register uint32_t __regFaultMask       __ASM("faultmask");\r
1016   __regFaultMask = (faultMask & 1);\r
1017 }\r
1018 \r
1019 /**\r
1020  * @brief  Return the Control Register value\r
1021  *\r
1022  * @return Control value\r
1023  *\r
1024  * Return the content of the control register\r
1025  */\r
1026 static __INLINE uint32_t __get_CONTROL(void)\r
1027 {\r
1028   register uint32_t __regControl         __ASM("control");\r
1029   return(__regControl);\r
1030 }\r
1031 \r
1032 /**\r
1033  * @brief  Set the Control Register value\r
1034  *\r
1035  * @param  control  Control value\r
1036  *\r
1037  * Set the control register\r
1038  */\r
1039 static __INLINE void __set_CONTROL(uint32_t control)\r
1040 {\r
1041   register uint32_t __regControl         __ASM("control");\r
1042   __regControl = control;\r
1043 }\r
1044 \r
1045 #endif /* __ARMCC_VERSION  */\r
1046 \r
1047 \r
1048 \r
1049 #elif (defined (__ICCARM__)) /*------------------ ICC Compiler -------------------*/\r
1050 /* IAR iccarm specific functions */\r
1051 \r
1052 #define __enable_irq                              __enable_interrupt        /*!< global Interrupt enable */\r
1053 #define __disable_irq                             __disable_interrupt       /*!< global Interrupt disable */\r
1054 \r
1055 static __INLINE void __enable_fault_irq()         { __ASM ("cpsie f"); }\r
1056 static __INLINE void __disable_fault_irq()        { __ASM ("cpsid f"); }\r
1057 \r
1058 #define __NOP                                     __no_operation            /*!< no operation intrinsic in IAR Compiler */\r
1059 static __INLINE  void __WFI()                     { __ASM ("wfi"); }\r
1060 static __INLINE  void __WFE()                     { __ASM ("wfe"); }\r
1061 static __INLINE  void __SEV()                     { __ASM ("sev"); }\r
1062 static __INLINE  void __CLREX()                   { __ASM ("clrex"); }\r
1063 \r
1064 /* intrinsic void __ISB(void)                                     */\r
1065 /* intrinsic void __DSB(void)                                     */\r
1066 /* intrinsic void __DMB(void)                                     */\r
1067 /* intrinsic void __set_PRIMASK();                                */\r
1068 /* intrinsic void __get_PRIMASK();                                */\r
1069 /* intrinsic void __set_FAULTMASK();                              */\r
1070 /* intrinsic void __get_FAULTMASK();                              */\r
1071 /* intrinsic uint32_t __REV(uint32_t value);                      */\r
1072 /* intrinsic uint32_t __REVSH(uint32_t value);                    */\r
1073 /* intrinsic unsigned long __STREX(unsigned long, unsigned long); */\r
1074 /* intrinsic unsigned long __LDREX(unsigned long *);              */\r
1075 \r
1076 \r
1077 /**\r
1078  * @brief  Return the Process Stack Pointer\r
1079  *\r
1080  * @return ProcessStackPointer\r
1081  *\r
1082  * Return the actual process stack pointer\r
1083  */\r
1084 extern uint32_t __get_PSP(void);\r
1085 \r
1086 /**\r
1087  * @brief  Set the Process Stack Pointer\r
1088  *\r
1089  * @param  topOfProcStack  Process Stack Pointer\r
1090  *\r
1091  * Assign the value ProcessStackPointer to the MSP\r
1092  * (process stack pointer) Cortex processor register\r
1093  */\r
1094 extern void __set_PSP(uint32_t topOfProcStack);\r
1095 \r
1096 /**\r
1097  * @brief  Return the Main Stack Pointer\r
1098  *\r
1099  * @return Main Stack Pointer\r
1100  *\r
1101  * Return the current value of the MSP (main stack pointer)\r
1102  * Cortex processor register\r
1103  */\r
1104 extern uint32_t __get_MSP(void);\r
1105 \r
1106 /**\r
1107  * @brief  Set the Main Stack Pointer\r
1108  *\r
1109  * @param  topOfMainStack  Main Stack Pointer\r
1110  *\r
1111  * Assign the value mainStackPointer to the MSP\r
1112  * (main stack pointer) Cortex processor register\r
1113  */\r
1114 extern void __set_MSP(uint32_t topOfMainStack);\r
1115 \r
1116 /**\r
1117  * @brief  Reverse byte order in unsigned short value\r
1118  *\r
1119  * @param  value  value to reverse\r
1120  * @return        reversed value\r
1121  *\r
1122  * Reverse byte order in unsigned short value\r
1123  */\r
1124 extern uint32_t __REV16(uint16_t value);\r
1125 \r
1126 /**\r
1127  * @brief  Reverse bit order of value\r
1128  *\r
1129  * @param  value  value to reverse\r
1130  * @return        reversed value\r
1131  *\r
1132  * Reverse bit order of value\r
1133  */\r
1134 extern uint32_t __RBIT(uint32_t value);\r
1135 \r
1136 /**\r
1137  * @brief  LDR Exclusive (8 bit)\r
1138  *\r
1139  * @param  *addr  address pointer\r
1140  * @return        value of (*address)\r
1141  *\r
1142  * Exclusive LDR command for 8 bit values)\r
1143  */\r
1144 extern uint8_t __LDREXB(uint8_t *addr);\r
1145 \r
1146 /**\r
1147  * @brief  LDR Exclusive (16 bit)\r
1148  *\r
1149  * @param  *addr  address pointer\r
1150  * @return        value of (*address)\r
1151  *\r
1152  * Exclusive LDR command for 16 bit values\r
1153  */\r
1154 extern uint16_t __LDREXH(uint16_t *addr);\r
1155 \r
1156 /**\r
1157  * @brief  LDR Exclusive (32 bit)\r
1158  *\r
1159  * @param  *addr  address pointer\r
1160  * @return        value of (*address)\r
1161  *\r
1162  * Exclusive LDR command for 32 bit values\r
1163  */\r
1164 extern uint32_t __LDREXW(uint32_t *addr);\r
1165 \r
1166 /**\r
1167  * @brief  STR Exclusive (8 bit)\r
1168  *\r
1169  * @param  value  value to store\r
1170  * @param  *addr  address pointer\r
1171  * @return        successful / failed\r
1172  *\r
1173  * Exclusive STR command for 8 bit values\r
1174  */\r
1175 extern uint32_t __STREXB(uint8_t value, uint8_t *addr);\r
1176 \r
1177 /**\r
1178  * @brief  STR Exclusive (16 bit)\r
1179  *\r
1180  * @param  value  value to store\r
1181  * @param  *addr  address pointer\r
1182  * @return        successful / failed\r
1183  *\r
1184  * Exclusive STR command for 16 bit values\r
1185  */\r
1186 extern uint32_t __STREXH(uint16_t value, uint16_t *addr);\r
1187 \r
1188 /**\r
1189  * @brief  STR Exclusive (32 bit)\r
1190  *\r
1191  * @param  value  value to store\r
1192  * @param  *addr  address pointer\r
1193  * @return        successful / failed\r
1194  *\r
1195  * Exclusive STR command for 32 bit values\r
1196  */\r
1197 extern uint32_t __STREXW(uint32_t value, uint32_t *addr);\r
1198 \r
1199 \r
1200 \r
1201 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/\r
1202 /* GNU gcc specific functions */\r
1203 \r
1204 static __INLINE void __enable_irq()               { __ASM volatile ("cpsie i"); }\r
1205 static __INLINE void __disable_irq()              { __ASM volatile ("cpsid i"); }\r
1206 \r
1207 static __INLINE void __enable_fault_irq()         { __ASM volatile ("cpsie f"); }\r
1208 static __INLINE void __disable_fault_irq()        { __ASM volatile ("cpsid f"); }\r
1209 \r
1210 static __INLINE void __NOP()                      { __ASM volatile ("nop"); }\r
1211 static __INLINE void __WFI()                      { __ASM volatile ("wfi"); }\r
1212 static __INLINE void __WFE()                      { __ASM volatile ("wfe"); }\r
1213 static __INLINE void __SEV()                      { __ASM volatile ("sev"); }\r
1214 static __INLINE void __ISB()                      { __ASM volatile ("isb"); }\r
1215 static __INLINE void __DSB()                      { __ASM volatile ("dsb"); }\r
1216 static __INLINE void __DMB()                      { __ASM volatile ("dmb"); }\r
1217 static __INLINE void __CLREX()                    { __ASM volatile ("clrex"); }\r
1218 \r
1219 \r
1220 /**\r
1221  * @brief  Return the Process Stack Pointer\r
1222  *\r
1223  * @return ProcessStackPointer\r
1224  *\r
1225  * Return the actual process stack pointer\r
1226  */\r
1227 extern uint32_t __get_PSP(void);\r
1228 \r
1229 /**\r
1230  * @brief  Set the Process Stack Pointer\r
1231  *\r
1232  * @param  topOfProcStack  Process Stack Pointer\r
1233  *\r
1234  * Assign the value ProcessStackPointer to the MSP\r
1235  * (process stack pointer) Cortex processor register\r
1236  */\r
1237 extern void __set_PSP(uint32_t topOfProcStack);\r
1238 \r
1239 /**\r
1240  * @brief  Return the Main Stack Pointer\r
1241  *\r
1242  * @return Main Stack Pointer\r
1243  *\r
1244  * Return the current value of the MSP (main stack pointer)\r
1245  * Cortex processor register\r
1246  */\r
1247 extern uint32_t __get_MSP(void);\r
1248 \r
1249 /**\r
1250  * @brief  Set the Main Stack Pointer\r
1251  *\r
1252  * @param  topOfMainStack  Main Stack Pointer\r
1253  *\r
1254  * Assign the value mainStackPointer to the MSP\r
1255  * (main stack pointer) Cortex processor register\r
1256  */\r
1257 extern void __set_MSP(uint32_t topOfMainStack);\r
1258 \r
1259 /**\r
1260  * @brief  Return the Base Priority value\r
1261  *\r
1262  * @return BasePriority\r
1263  *\r
1264  * Return the content of the base priority register\r
1265  */\r
1266 extern uint32_t __get_BASEPRI(void);\r
1267 \r
1268 /**\r
1269  * @brief  Set the Base Priority value\r
1270  *\r
1271  * @param  basePri  BasePriority\r
1272  *\r
1273  * Set the base priority register\r
1274  */\r
1275 extern void __set_BASEPRI(uint32_t basePri);\r
1276 \r
1277 /**\r
1278  * @brief  Return the Priority Mask value\r
1279  *\r
1280  * @return PriMask\r
1281  *\r
1282  * Return state of the priority mask bit from the priority mask register\r
1283  */\r
1284 extern uint32_t  __get_PRIMASK(void);\r
1285 \r
1286 /**\r
1287  * @brief  Set the Priority Mask value\r
1288  *\r
1289  * @param  priMask  PriMask\r
1290  *\r
1291  * Set the priority mask bit in the priority mask register\r
1292  */\r
1293 extern void __set_PRIMASK(uint32_t priMask);\r
1294 \r
1295 /**\r
1296  * @brief  Return the Fault Mask value\r
1297  *\r
1298  * @return FaultMask\r
1299  *\r
1300  * Return the content of the fault mask register\r
1301  */\r
1302 extern uint32_t __get_FAULTMASK(void);\r
1303 \r
1304 /**\r
1305  * @brief  Set the Fault Mask value\r
1306  *\r
1307  * @param  faultMask  faultMask value\r
1308  *\r
1309  * Set the fault mask register\r
1310  */\r
1311 extern void __set_FAULTMASK(uint32_t faultMask);\r
1312 \r
1313 /**\r
1314  * @brief  Return the Control Register value\r
1315 *\r
1316 *  @return Control value\r
1317  *\r
1318  * Return the content of the control register\r
1319  */\r
1320 extern uint32_t __get_CONTROL(void);\r
1321 \r
1322 /**\r
1323  * @brief  Set the Control Register value\r
1324  *\r
1325  * @param  control  Control value\r
1326  *\r
1327  * Set the control register\r
1328  */\r
1329 extern void __set_CONTROL(uint32_t control);\r
1330 \r
1331 /**\r
1332  * @brief  Reverse byte order in integer value\r
1333  *\r
1334  * @param  value  value to reverse\r
1335  * @return        reversed value\r
1336  *\r
1337  * Reverse byte order in integer value\r
1338  */\r
1339 extern uint32_t __REV(uint32_t value);\r
1340 \r
1341 /**\r
1342  * @brief  Reverse byte order in unsigned short value\r
1343  *\r
1344  * @param  value  value to reverse\r
1345  * @return        reversed value\r
1346  *\r
1347  * Reverse byte order in unsigned short value\r
1348  */\r
1349 extern uint32_t __REV16(uint16_t value);\r
1350 \r
1351 /**\r
1352  * @brief  Reverse byte order in signed short value with sign extension to integer\r
1353  *\r
1354  * @param  value  value to reverse\r
1355  * @return        reversed value\r
1356  *\r
1357  * Reverse byte order in signed short value with sign extension to integer\r
1358  */\r
1359 extern int32_t __REVSH(int16_t value);\r
1360 \r
1361 /**\r
1362  * @brief  Reverse bit order of value\r
1363  *\r
1364  * @param  value  value to reverse\r
1365  * @return        reversed value\r
1366  *\r
1367  * Reverse bit order of value\r
1368  */\r
1369 extern uint32_t __RBIT(uint32_t value);\r
1370 \r
1371 /**\r
1372  * @brief  LDR Exclusive (8 bit)\r
1373  *\r
1374  * @param  *addr  address pointer\r
1375  * @return        value of (*address)\r
1376  *\r
1377  * Exclusive LDR command for 8 bit value\r
1378  */\r
1379 extern uint8_t __LDREXB(uint8_t *addr);\r
1380 \r
1381 /**\r
1382  * @brief  LDR Exclusive (16 bit)\r
1383  *\r
1384  * @param  *addr  address pointer\r
1385  * @return        value of (*address)\r
1386  *\r
1387  * Exclusive LDR command for 16 bit values\r
1388  */\r
1389 extern uint16_t __LDREXH(uint16_t *addr);\r
1390 \r
1391 /**\r
1392  * @brief  LDR Exclusive (32 bit)\r
1393  *\r
1394  * @param  *addr  address pointer\r
1395  * @return        value of (*address)\r
1396  *\r
1397  * Exclusive LDR command for 32 bit values\r
1398  */\r
1399 extern uint32_t __LDREXW(uint32_t *addr);\r
1400 \r
1401 /**\r
1402  * @brief  STR Exclusive (8 bit)\r
1403  *\r
1404  * @param  value  value to store\r
1405  * @param  *addr  address pointer\r
1406  * @return        successful / failed\r
1407  *\r
1408  * Exclusive STR command for 8 bit values\r
1409  */\r
1410 extern uint32_t __STREXB(uint8_t value, uint8_t *addr);\r
1411 \r
1412 /**\r
1413  * @brief  STR Exclusive (16 bit)\r
1414  *\r
1415  * @param  value  value to store\r
1416  * @param  *addr  address pointer\r
1417  * @return        successful / failed\r
1418  *\r
1419  * Exclusive STR command for 16 bit values\r
1420  */\r
1421 extern uint32_t __STREXH(uint16_t value, uint16_t *addr);\r
1422 \r
1423 /**\r
1424  * @brief  STR Exclusive (32 bit)\r
1425  *\r
1426  * @param  value  value to store\r
1427  * @param  *addr  address pointer\r
1428  * @return        successful / failed\r
1429  *\r
1430  * Exclusive STR command for 32 bit values\r
1431  */\r
1432 extern uint32_t __STREXW(uint32_t value, uint32_t *addr);\r
1433 \r
1434 \r
1435 #elif (defined (__TASKING__)) /*------------------ TASKING Compiler ---------------------*/\r
1436 /* TASKING carm specific functions */\r
1437 \r
1438 /*\r
1439  * The CMSIS functions have been implemented as intrinsics in the compiler.\r
1440  * Please use "carm -?i" to get an up to date list of all instrinsics,\r
1441  * Including the CMSIS ones.\r
1442  */\r
1443 \r
1444 #endif\r
1445 \r
1446 \r
1447 /** @addtogroup CMSIS_CM3_Core_FunctionInterface CMSIS CM3 Core Function Interface\r
1448   Core  Function Interface containing:\r
1449   - Core NVIC Functions\r
1450   - Core SysTick Functions\r
1451   - Core Reset Functions\r
1452 */\r
1453 /*@{*/\r
1454 \r
1455 /* ##########################   NVIC functions  #################################### */\r
1456 \r
1457 /**\r
1458  * @brief  Set the Priority Grouping in NVIC Interrupt Controller\r
1459  *\r
1460  * @param  PriorityGroup is priority grouping field\r
1461  *\r
1462  * Set the priority grouping field using the required unlock sequence.\r
1463  * The parameter priority_grouping is assigned to the field\r
1464  * SCB->AIRCR [10:8] PRIGROUP field. Only values from 0..7 are used.\r
1465  * In case of a conflict between priority grouping and available\r
1466  * priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set.\r
1467  */\r
1468 static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)\r
1469 {\r
1470   uint32_t reg_value;\r
1471   uint32_t PriorityGroupTmp = (PriorityGroup & 0x07);                         /* only values 0..7 are used          */\r
1472 \r
1473   reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */\r
1474   reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk);             /* clear bits to change               */\r
1475   reg_value  =  (reg_value                       |\r
1476                 (0x5FA << SCB_AIRCR_VECTKEY_Pos) |\r
1477                 (PriorityGroupTmp << 8));                                     /* Insert write key and priorty group */\r
1478   SCB->AIRCR =  reg_value;\r
1479 }\r
1480 \r
1481 /**\r
1482  * @brief  Get the Priority Grouping from NVIC Interrupt Controller\r
1483  *\r
1484  * @return priority grouping field\r
1485  *\r
1486  * Get the priority grouping from NVIC Interrupt Controller.\r
1487  * priority grouping is SCB->AIRCR [10:8] PRIGROUP field.\r
1488  */\r
1489 static __INLINE uint32_t NVIC_GetPriorityGrouping(void)\r
1490 {\r
1491   return ((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos);   /* read priority grouping field */\r
1492 }\r
1493 \r
1494 /**\r
1495  * @brief  Enable Interrupt in NVIC Interrupt Controller\r
1496  *\r
1497  * @param  IRQn   The positive number of the external interrupt to enable\r
1498  *\r
1499  * Enable a device specific interupt in the NVIC interrupt controller.\r
1500  * The interrupt number cannot be a negative value.\r
1501  */\r
1502 static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)\r
1503 {\r
1504   NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */\r
1505 }\r
1506 \r
1507 /**\r
1508  * @brief  Disable the interrupt line for external interrupt specified\r
1509  *\r
1510  * @param  IRQn   The positive number of the external interrupt to disable\r
1511  *\r
1512  * Disable a device specific interupt in the NVIC interrupt controller.\r
1513  * The interrupt number cannot be a negative value.\r
1514  */\r
1515 static __INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)\r
1516 {\r
1517   NVIC->ICER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* disable interrupt */\r
1518 }\r
1519 \r
1520 /**\r
1521  * @brief  Read the interrupt pending bit for a device specific interrupt source\r
1522  *\r
1523  * @param  IRQn    The number of the device specifc interrupt\r
1524  * @return         1 = interrupt pending, 0 = interrupt not pending\r
1525  *\r
1526  * Read the pending register in NVIC and return 1 if its status is pending,\r
1527  * otherwise it returns 0\r
1528  */\r
1529 static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)\r
1530 {\r
1531   return((uint32_t) ((NVIC->ISPR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if pending else 0 */\r
1532 }\r
1533 \r
1534 /**\r
1535  * @brief  Set the pending bit for an external interrupt\r
1536  *\r
1537  * @param  IRQn    The number of the interrupt for set pending\r
1538  *\r
1539  * Set the pending bit for the specified interrupt.\r
1540  * The interrupt number cannot be a negative value.\r
1541  */\r
1542 static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)\r
1543 {\r
1544   NVIC->ISPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* set interrupt pending */\r
1545 }\r
1546 \r
1547 /**\r
1548  * @brief  Clear the pending bit for an external interrupt\r
1549  *\r
1550  * @param  IRQn    The number of the interrupt for clear pending\r
1551  *\r
1552  * Clear the pending bit for the specified interrupt.\r
1553  * The interrupt number cannot be a negative value.\r
1554  */\r
1555 static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)\r
1556 {\r
1557   NVIC->ICPR[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* Clear pending interrupt */\r
1558 }\r
1559 \r
1560 /**\r
1561  * @brief  Read the active bit for an external interrupt\r
1562  *\r
1563  * @param  IRQn    The number of the interrupt for read active bit\r
1564  * @return         1 = interrupt active, 0 = interrupt not active\r
1565  *\r
1566  * Read the active register in NVIC and returns 1 if its status is active,\r
1567  * otherwise it returns 0.\r
1568  */\r
1569 static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn)\r
1570 {\r
1571   return((uint32_t)((NVIC->IABR[(uint32_t)(IRQn) >> 5] & (1 << ((uint32_t)(IRQn) & 0x1F)))?1:0)); /* Return 1 if active else 0 */\r
1572 }\r
1573 \r
1574 /**\r
1575  * @brief  Set the priority for an interrupt\r
1576  *\r
1577  * @param  IRQn      The number of the interrupt for set priority\r
1578  * @param  priority  The priority to set\r
1579  *\r
1580  * Set the priority for the specified interrupt. The interrupt\r
1581  * number can be positive to specify an external (device specific)\r
1582  * interrupt, or negative to specify an internal (core) interrupt.\r
1583  *\r
1584  * Note: The priority cannot be set for every core interrupt.\r
1585  */\r
1586 static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)\r
1587 {\r
1588   if(IRQn < 0) {\r
1589     SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff); } /* set Priority for Cortex-M3 System Interrupts */\r
1590   else {\r
1591     NVIC->IP[(uint32_t)(IRQn)] = ((priority << (8 - __NVIC_PRIO_BITS)) & 0xff);    }        /* set Priority for device specific Interrupts  */\r
1592 }\r
1593 \r
1594 /**\r
1595  * @brief  Read the priority for an interrupt\r
1596  *\r
1597  * @param  IRQn      The number of the interrupt for get priority\r
1598  * @return           The priority for the interrupt\r
1599  *\r
1600  * Read the priority for the specified interrupt. The interrupt\r
1601  * number can be positive to specify an external (device specific)\r
1602  * interrupt, or negative to specify an internal (core) interrupt.\r
1603  *\r
1604  * The returned priority value is automatically aligned to the implemented\r
1605  * priority bits of the microcontroller.\r
1606  *\r
1607  * Note: The priority cannot be set for every core interrupt.\r
1608  */\r
1609 static __INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)\r
1610 {\r
1611 \r
1612   if(IRQn < 0) {\r
1613     return((uint32_t)(SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] >> (8 - __NVIC_PRIO_BITS)));  } /* get priority for Cortex-M3 system interrupts */\r
1614   else {\r
1615     return((uint32_t)(NVIC->IP[(uint32_t)(IRQn)]           >> (8 - __NVIC_PRIO_BITS)));  } /* get priority for device specific interrupts  */\r
1616 }\r
1617 \r
1618 \r
1619 /**\r
1620  * @brief  Encode the priority for an interrupt\r
1621  *\r
1622  * @param  PriorityGroup    The used priority group\r
1623  * @param  PreemptPriority  The preemptive priority value (starting from 0)\r
1624  * @param  SubPriority      The sub priority value (starting from 0)\r
1625  * @return                  The encoded priority for the interrupt\r
1626  *\r
1627  * Encode the priority for an interrupt with the given priority group,\r
1628  * preemptive priority value and sub priority value.\r
1629  * In case of a conflict between priority grouping and available\r
1630  * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.\r
1631  *\r
1632  * The returned priority value can be used for NVIC_SetPriority(...) function\r
1633  */\r
1634 static __INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)\r
1635 {\r
1636   uint32_t PriorityGroupTmp = (PriorityGroup & 0x07);          /* only values 0..7 are used          */\r
1637   uint32_t PreemptPriorityBits;\r
1638   uint32_t SubPriorityBits;\r
1639 \r
1640   PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;\r
1641   SubPriorityBits     = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;\r
1642 \r
1643   return (\r
1644            ((PreemptPriority & ((1 << (PreemptPriorityBits)) - 1)) << SubPriorityBits) |\r
1645            ((SubPriority     & ((1 << (SubPriorityBits    )) - 1)))\r
1646          );\r
1647 }\r
1648 \r
1649 \r
1650 /**\r
1651  * @brief  Decode the priority of an interrupt\r
1652  *\r
1653  * @param  Priority           The priority for the interrupt\r
1654  * @param  PriorityGroup      The used priority group\r
1655  * @param  pPreemptPriority   The preemptive priority value (starting from 0)\r
1656  * @param  pSubPriority       The sub priority value (starting from 0)\r
1657  *\r
1658  * Decode an interrupt priority value with the given priority group to\r
1659  * preemptive priority value and sub priority value.\r
1660  * In case of a conflict between priority grouping and available\r
1661  * priority bits (__NVIC_PRIO_BITS) the samllest possible priority group is set.\r
1662  *\r
1663  * The priority value can be retrieved with NVIC_GetPriority(...) function\r
1664  */\r
1665 static __INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* pPreemptPriority, uint32_t* pSubPriority)\r
1666 {\r
1667   uint32_t PriorityGroupTmp = (PriorityGroup & 0x07);          /* only values 0..7 are used          */\r
1668   uint32_t PreemptPriorityBits;\r
1669   uint32_t SubPriorityBits;\r
1670 \r
1671   PreemptPriorityBits = ((7 - PriorityGroupTmp) > __NVIC_PRIO_BITS) ? __NVIC_PRIO_BITS : 7 - PriorityGroupTmp;\r
1672   SubPriorityBits     = ((PriorityGroupTmp + __NVIC_PRIO_BITS) < 7) ? 0 : PriorityGroupTmp - 7 + __NVIC_PRIO_BITS;\r
1673 \r
1674   *pPreemptPriority = (Priority >> SubPriorityBits) & ((1 << (PreemptPriorityBits)) - 1);\r
1675   *pSubPriority     = (Priority                   ) & ((1 << (SubPriorityBits    )) - 1);\r
1676 }\r
1677 \r
1678 \r
1679 \r
1680 /* ##################################    SysTick function  ############################################ */\r
1681 \r
1682 #if (!defined (__Vendor_SysTickConfig)) || (__Vendor_SysTickConfig == 0)\r
1683 \r
1684 /**\r
1685  * @brief  Initialize and start the SysTick counter and its interrupt.\r
1686  *\r
1687  * @param   ticks   number of ticks between two interrupts\r
1688  * @return  1 = failed, 0 = successful\r
1689  *\r
1690  * Initialise the system tick timer and its interrupt and start the\r
1691  * system tick timer / counter in free running mode to generate\r
1692  * periodical interrupts.\r
1693  */\r
1694 static __INLINE uint32_t SysTick_Config(uint32_t ticks)\r
1695 {\r
1696   if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */\r
1697 \r
1698   SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */\r
1699   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */\r
1700   SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */\r
1701   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |\r
1702                    SysTick_CTRL_TICKINT_Msk   |\r
1703                    SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */\r
1704   return (0);                                                  /* Function successful */\r
1705 }\r
1706 \r
1707 #endif\r
1708 \r
1709 \r
1710 \r
1711 \r
1712 /* ##################################    Reset function  ############################################ */\r
1713 \r
1714 /**\r
1715  * @brief  Initiate a system reset request.\r
1716  *\r
1717  * Initiate a system reset request to reset the MCU\r
1718  */\r
1719 static __INLINE void NVIC_SystemReset(void)\r
1720 {\r
1721   SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)      |\r
1722                  (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |\r
1723                  SCB_AIRCR_SYSRESETREQ_Msk);                   /* Keep priority group unchanged */\r
1724   __DSB();                                                     /* Ensure completion of memory access */\r
1725   while(1);                                                    /* wait until reset */\r
1726 }\r
1727 \r
1728 /*@}*/ /* end of group CMSIS_CM3_Core_FunctionInterface */\r
1729 \r
1730 \r
1731 \r
1732 /* ##################################### Debug In/Output function ########################################### */\r
1733 \r
1734 /** @addtogroup CMSIS_CM3_CoreDebugInterface CMSIS CM3 Core Debug Interface\r
1735   Core Debug Interface containing:\r
1736   - Core Debug Receive / Transmit Functions\r
1737   - Core Debug Defines\r
1738   - Core Debug Variables\r
1739 */\r
1740 /*@{*/\r
1741 \r
1742 extern volatile int ITM_RxBuffer;                    /*!< variable to receive characters                             */\r
1743 #define             ITM_RXBUFFER_EMPTY    0x5AA55AA5 /*!< value identifying ITM_RxBuffer is ready for next character */\r
1744 \r
1745 \r
1746 /**\r
1747  * @brief  Outputs a character via the ITM channel 0\r
1748  *\r
1749  * @param  ch   character to output\r
1750  * @return      character to output\r
1751  *\r
1752  * The function outputs a character via the ITM channel 0.\r
1753  * The function returns when no debugger is connected that has booked the output.\r
1754  * It is blocking when a debugger is connected, but the previous character send is not transmitted.\r
1755  */\r
1756 static __INLINE uint32_t ITM_SendChar (uint32_t ch)\r
1757 {\r
1758   if ((CoreDebug->DEMCR & CoreDebug_DEMCR_TRCENA_Msk)  &&      /* Trace enabled */\r
1759       (ITM->TCR & ITM_TCR_ITMENA_Msk)                  &&      /* ITM enabled */\r
1760       (ITM->TER & (1ul << 0)        )                    )     /* ITM Port #0 enabled */\r
1761   {\r
1762     while (ITM->PORT[0].u32 == 0);\r
1763     ITM->PORT[0].u8 = (uint8_t) ch;\r
1764   }\r
1765   return (ch);\r
1766 }\r
1767 \r
1768 \r
1769 /**\r
1770  * @brief  Inputs a character via variable ITM_RxBuffer\r
1771  *\r
1772  * @return      received character, -1 = no character received\r
1773  *\r
1774  * The function inputs a character via variable ITM_RxBuffer.\r
1775  * The function returns when no debugger is connected that has booked the output.\r
1776  * It is blocking when a debugger is connected, but the previous character send is not transmitted.\r
1777  */\r
1778 static __INLINE int ITM_ReceiveChar (void) {\r
1779   int ch = -1;                               /* no character available */\r
1780 \r
1781   if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) {\r
1782     ch = ITM_RxBuffer;\r
1783     ITM_RxBuffer = ITM_RXBUFFER_EMPTY;       /* ready for next character */\r
1784   }\r
1785 \r
1786   return (ch);\r
1787 }\r
1788 \r
1789 \r
1790 /**\r
1791  * @brief  Check if a character via variable ITM_RxBuffer is available\r
1792  *\r
1793  * @return      1 = character available, 0 = no character available\r
1794  *\r
1795  * The function checks  variable ITM_RxBuffer whether a character is available or not.\r
1796  * The function returns '1' if a character is available and '0' if no character is available.\r
1797  */\r
1798 static __INLINE int ITM_CheckChar (void) {\r
1799 \r
1800   if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) {\r
1801     return (0);                                 /* no character available */\r
1802   } else {\r
1803     return (1);                                 /*    character available */\r
1804   }\r
1805 }\r
1806 \r
1807 /*@}*/ /* end of group CMSIS_CM3_core_DebugInterface */\r
1808 \r
1809 \r
1810 #ifdef __cplusplus\r
1811 }\r
1812 #endif\r
1813 \r
1814 /*@}*/ /* end of group CMSIS_CM3_core_definitions */\r
1815 \r
1816 #endif /* __CM3_CORE_H__ */\r
1817 \r
1818 /*lint -restore */\r