xref: /nrf52832-nimble/nordic/cmsis/include/core_sc000.h (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1*150812a8SEvalZero /**************************************************************************//**
2*150812a8SEvalZero  * @file     core_sc000.h
3*150812a8SEvalZero  * @brief    CMSIS SC000 Core Peripheral Access Layer Header File
4*150812a8SEvalZero  * @version  V4.30
5*150812a8SEvalZero  * @date     20. October 2015
6*150812a8SEvalZero  ******************************************************************************/
7*150812a8SEvalZero /* Copyright (c) 2009 - 2015 ARM LIMITED
8*150812a8SEvalZero 
9*150812a8SEvalZero    All rights reserved.
10*150812a8SEvalZero    Redistribution and use in source and binary forms, with or without
11*150812a8SEvalZero    modification, are permitted provided that the following conditions are met:
12*150812a8SEvalZero    - Redistributions of source code must retain the above copyright
13*150812a8SEvalZero      notice, this list of conditions and the following disclaimer.
14*150812a8SEvalZero    - Redistributions in binary form must reproduce the above copyright
15*150812a8SEvalZero      notice, this list of conditions and the following disclaimer in the
16*150812a8SEvalZero      documentation and/or other materials provided with the distribution.
17*150812a8SEvalZero    - Neither the name of ARM nor the names of its contributors may be used
18*150812a8SEvalZero      to endorse or promote products derived from this software without
19*150812a8SEvalZero      specific prior written permission.
20*150812a8SEvalZero    *
21*150812a8SEvalZero    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22*150812a8SEvalZero    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23*150812a8SEvalZero    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24*150812a8SEvalZero    ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
25*150812a8SEvalZero    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26*150812a8SEvalZero    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27*150812a8SEvalZero    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28*150812a8SEvalZero    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29*150812a8SEvalZero    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30*150812a8SEvalZero    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31*150812a8SEvalZero    POSSIBILITY OF SUCH DAMAGE.
32*150812a8SEvalZero    ---------------------------------------------------------------------------*/
33*150812a8SEvalZero 
34*150812a8SEvalZero 
35*150812a8SEvalZero #if   defined ( __ICCARM__ )
36*150812a8SEvalZero  #pragma system_include         /* treat file as system include file for MISRA check */
37*150812a8SEvalZero #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
38*150812a8SEvalZero   #pragma clang system_header   /* treat file as system include file */
39*150812a8SEvalZero #endif
40*150812a8SEvalZero 
41*150812a8SEvalZero #ifndef __CORE_SC000_H_GENERIC
42*150812a8SEvalZero #define __CORE_SC000_H_GENERIC
43*150812a8SEvalZero 
44*150812a8SEvalZero #include <stdint.h>
45*150812a8SEvalZero 
46*150812a8SEvalZero #ifdef __cplusplus
47*150812a8SEvalZero  extern "C" {
48*150812a8SEvalZero #endif
49*150812a8SEvalZero 
50*150812a8SEvalZero /**
51*150812a8SEvalZero   \page CMSIS_MISRA_Exceptions  MISRA-C:2004 Compliance Exceptions
52*150812a8SEvalZero   CMSIS violates the following MISRA-C:2004 rules:
53*150812a8SEvalZero 
54*150812a8SEvalZero    \li Required Rule 8.5, object/function definition in header file.<br>
55*150812a8SEvalZero      Function definitions in header files are used to allow 'inlining'.
56*150812a8SEvalZero 
57*150812a8SEvalZero    \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.<br>
58*150812a8SEvalZero      Unions are used for effective representation of core registers.
59*150812a8SEvalZero 
60*150812a8SEvalZero    \li Advisory Rule 19.7, Function-like macro defined.<br>
61*150812a8SEvalZero      Function-like macros are used to allow more efficient code.
62*150812a8SEvalZero  */
63*150812a8SEvalZero 
64*150812a8SEvalZero 
65*150812a8SEvalZero /*******************************************************************************
66*150812a8SEvalZero  *                 CMSIS definitions
67*150812a8SEvalZero  ******************************************************************************/
68*150812a8SEvalZero /**
69*150812a8SEvalZero   \ingroup SC000
70*150812a8SEvalZero   @{
71*150812a8SEvalZero  */
72*150812a8SEvalZero 
73*150812a8SEvalZero /*  CMSIS SC000 definitions */
74*150812a8SEvalZero #define __SC000_CMSIS_VERSION_MAIN  (0x04U)                                    /*!< [31:16] CMSIS HAL main version */
75*150812a8SEvalZero #define __SC000_CMSIS_VERSION_SUB   (0x1EU)                                    /*!< [15:0]  CMSIS HAL sub version */
76*150812a8SEvalZero #define __SC000_CMSIS_VERSION       ((__SC000_CMSIS_VERSION_MAIN << 16U) | \
77*150812a8SEvalZero                                       __SC000_CMSIS_VERSION_SUB           )    /*!< CMSIS HAL version number */
78*150812a8SEvalZero 
79*150812a8SEvalZero #define __CORTEX_SC                 (000U)                                     /*!< Cortex secure core */
80*150812a8SEvalZero 
81*150812a8SEvalZero 
82*150812a8SEvalZero #if   defined ( __CC_ARM )
83*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler */
84*150812a8SEvalZero   #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler */
85*150812a8SEvalZero   #define __STATIC_INLINE  static __inline
86*150812a8SEvalZero 
87*150812a8SEvalZero #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
88*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for ARM Compiler */
89*150812a8SEvalZero   #define __INLINE         __inline                                   /*!< inline keyword for ARM Compiler */
90*150812a8SEvalZero   #define __STATIC_INLINE  static __inline
91*150812a8SEvalZero 
92*150812a8SEvalZero #elif defined ( __GNUC__ )
93*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for GNU Compiler */
94*150812a8SEvalZero   #define __INLINE         inline                                     /*!< inline keyword for GNU Compiler */
95*150812a8SEvalZero   #define __STATIC_INLINE  static inline
96*150812a8SEvalZero 
97*150812a8SEvalZero #elif defined ( __ICCARM__ )
98*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for IAR Compiler */
99*150812a8SEvalZero   #define __INLINE         inline                                     /*!< inline keyword for IAR Compiler. Only available in High optimization mode! */
100*150812a8SEvalZero   #define __STATIC_INLINE  static inline
101*150812a8SEvalZero 
102*150812a8SEvalZero #elif defined ( __TMS470__ )
103*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for TI CCS Compiler */
104*150812a8SEvalZero   #define __STATIC_INLINE  static inline
105*150812a8SEvalZero 
106*150812a8SEvalZero #elif defined ( __TASKING__ )
107*150812a8SEvalZero   #define __ASM            __asm                                      /*!< asm keyword for TASKING Compiler */
108*150812a8SEvalZero   #define __INLINE         inline                                     /*!< inline keyword for TASKING Compiler */
109*150812a8SEvalZero   #define __STATIC_INLINE  static inline
110*150812a8SEvalZero 
111*150812a8SEvalZero #elif defined ( __CSMC__ )
112*150812a8SEvalZero   #define __packed
113*150812a8SEvalZero   #define __ASM            _asm                                      /*!< asm keyword for COSMIC Compiler */
114*150812a8SEvalZero   #define __INLINE         inline                                    /*!< inline keyword for COSMIC Compiler. Use -pc99 on compile line */
115*150812a8SEvalZero   #define __STATIC_INLINE  static inline
116*150812a8SEvalZero 
117*150812a8SEvalZero #else
118*150812a8SEvalZero   #error Unknown compiler
119*150812a8SEvalZero #endif
120*150812a8SEvalZero 
121*150812a8SEvalZero /** __FPU_USED indicates whether an FPU is used or not.
122*150812a8SEvalZero     This core does not support an FPU at all
123*150812a8SEvalZero */
124*150812a8SEvalZero #define __FPU_USED       0U
125*150812a8SEvalZero 
126*150812a8SEvalZero #if defined ( __CC_ARM )
127*150812a8SEvalZero   #if defined __TARGET_FPU_VFP
128*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
129*150812a8SEvalZero   #endif
130*150812a8SEvalZero 
131*150812a8SEvalZero #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
132*150812a8SEvalZero   #if defined __ARM_PCS_VFP
133*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
134*150812a8SEvalZero   #endif
135*150812a8SEvalZero 
136*150812a8SEvalZero #elif defined ( __GNUC__ )
137*150812a8SEvalZero   #if defined (__VFP_FP__) && !defined(__SOFTFP__)
138*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
139*150812a8SEvalZero   #endif
140*150812a8SEvalZero 
141*150812a8SEvalZero #elif defined ( __ICCARM__ )
142*150812a8SEvalZero   #if defined __ARMVFP__
143*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
144*150812a8SEvalZero   #endif
145*150812a8SEvalZero 
146*150812a8SEvalZero #elif defined ( __TMS470__ )
147*150812a8SEvalZero   #if defined __TI_VFP_SUPPORT__
148*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
149*150812a8SEvalZero   #endif
150*150812a8SEvalZero 
151*150812a8SEvalZero #elif defined ( __TASKING__ )
152*150812a8SEvalZero   #if defined __FPU_VFP__
153*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
154*150812a8SEvalZero   #endif
155*150812a8SEvalZero 
156*150812a8SEvalZero #elif defined ( __CSMC__ )
157*150812a8SEvalZero   #if ( __CSMC__ & 0x400U)
158*150812a8SEvalZero     #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
159*150812a8SEvalZero   #endif
160*150812a8SEvalZero 
161*150812a8SEvalZero #endif
162*150812a8SEvalZero 
163*150812a8SEvalZero #include "core_cmInstr.h"                /* Core Instruction Access */
164*150812a8SEvalZero #include "core_cmFunc.h"                 /* Core Function Access */
165*150812a8SEvalZero 
166*150812a8SEvalZero #ifdef __cplusplus
167*150812a8SEvalZero }
168*150812a8SEvalZero #endif
169*150812a8SEvalZero 
170*150812a8SEvalZero #endif /* __CORE_SC000_H_GENERIC */
171*150812a8SEvalZero 
172*150812a8SEvalZero #ifndef __CMSIS_GENERIC
173*150812a8SEvalZero 
174*150812a8SEvalZero #ifndef __CORE_SC000_H_DEPENDANT
175*150812a8SEvalZero #define __CORE_SC000_H_DEPENDANT
176*150812a8SEvalZero 
177*150812a8SEvalZero #ifdef __cplusplus
178*150812a8SEvalZero  extern "C" {
179*150812a8SEvalZero #endif
180*150812a8SEvalZero 
181*150812a8SEvalZero /* check device defines and use defaults */
182*150812a8SEvalZero #if defined __CHECK_DEVICE_DEFINES
183*150812a8SEvalZero   #ifndef __SC000_REV
184*150812a8SEvalZero     #define __SC000_REV             0x0000U
185*150812a8SEvalZero     #warning "__SC000_REV not defined in device header file; using default!"
186*150812a8SEvalZero   #endif
187*150812a8SEvalZero 
188*150812a8SEvalZero   #ifndef __MPU_PRESENT
189*150812a8SEvalZero     #define __MPU_PRESENT             0U
190*150812a8SEvalZero     #warning "__MPU_PRESENT not defined in device header file; using default!"
191*150812a8SEvalZero   #endif
192*150812a8SEvalZero 
193*150812a8SEvalZero   #ifndef __NVIC_PRIO_BITS
194*150812a8SEvalZero     #define __NVIC_PRIO_BITS          2U
195*150812a8SEvalZero     #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
196*150812a8SEvalZero   #endif
197*150812a8SEvalZero 
198*150812a8SEvalZero   #ifndef __Vendor_SysTickConfig
199*150812a8SEvalZero     #define __Vendor_SysTickConfig    0U
200*150812a8SEvalZero     #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
201*150812a8SEvalZero   #endif
202*150812a8SEvalZero #endif
203*150812a8SEvalZero 
204*150812a8SEvalZero /* IO definitions (access restrictions to peripheral registers) */
205*150812a8SEvalZero /**
206*150812a8SEvalZero     \defgroup CMSIS_glob_defs CMSIS Global Defines
207*150812a8SEvalZero 
208*150812a8SEvalZero     <strong>IO Type Qualifiers</strong> are used
209*150812a8SEvalZero     \li to specify the access to peripheral variables.
210*150812a8SEvalZero     \li for automatic generation of peripheral register debug information.
211*150812a8SEvalZero */
212*150812a8SEvalZero #ifdef __cplusplus
213*150812a8SEvalZero   #define   __I     volatile             /*!< Defines 'read only' permissions */
214*150812a8SEvalZero #else
215*150812a8SEvalZero   #define   __I     volatile const       /*!< Defines 'read only' permissions */
216*150812a8SEvalZero #endif
217*150812a8SEvalZero #define     __O     volatile             /*!< Defines 'write only' permissions */
218*150812a8SEvalZero #define     __IO    volatile             /*!< Defines 'read / write' permissions */
219*150812a8SEvalZero 
220*150812a8SEvalZero /* following defines should be used for structure members */
221*150812a8SEvalZero #define     __IM     volatile const      /*! Defines 'read only' structure member permissions */
222*150812a8SEvalZero #define     __OM     volatile            /*! Defines 'write only' structure member permissions */
223*150812a8SEvalZero #define     __IOM    volatile            /*! Defines 'read / write' structure member permissions */
224*150812a8SEvalZero 
225*150812a8SEvalZero /*@} end of group SC000 */
226*150812a8SEvalZero 
227*150812a8SEvalZero 
228*150812a8SEvalZero 
229*150812a8SEvalZero /*******************************************************************************
230*150812a8SEvalZero  *                 Register Abstraction
231*150812a8SEvalZero   Core Register contain:
232*150812a8SEvalZero   - Core Register
233*150812a8SEvalZero   - Core NVIC Register
234*150812a8SEvalZero   - Core SCB Register
235*150812a8SEvalZero   - Core SysTick Register
236*150812a8SEvalZero   - Core MPU Register
237*150812a8SEvalZero  ******************************************************************************/
238*150812a8SEvalZero /**
239*150812a8SEvalZero   \defgroup CMSIS_core_register Defines and Type Definitions
240*150812a8SEvalZero   \brief Type definitions and defines for Cortex-M processor based devices.
241*150812a8SEvalZero */
242*150812a8SEvalZero 
243*150812a8SEvalZero /**
244*150812a8SEvalZero   \ingroup    CMSIS_core_register
245*150812a8SEvalZero   \defgroup   CMSIS_CORE  Status and Control Registers
246*150812a8SEvalZero   \brief      Core Register type definitions.
247*150812a8SEvalZero   @{
248*150812a8SEvalZero  */
249*150812a8SEvalZero 
250*150812a8SEvalZero /**
251*150812a8SEvalZero   \brief  Union type to access the Application Program Status Register (APSR).
252*150812a8SEvalZero  */
253*150812a8SEvalZero typedef union
254*150812a8SEvalZero {
255*150812a8SEvalZero   struct
256*150812a8SEvalZero   {
257*150812a8SEvalZero     uint32_t _reserved0:28;              /*!< bit:  0..27  Reserved */
258*150812a8SEvalZero     uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
259*150812a8SEvalZero     uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
260*150812a8SEvalZero     uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
261*150812a8SEvalZero     uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
262*150812a8SEvalZero   } b;                                   /*!< Structure used for bit  access */
263*150812a8SEvalZero   uint32_t w;                            /*!< Type      used for word access */
264*150812a8SEvalZero } APSR_Type;
265*150812a8SEvalZero 
266*150812a8SEvalZero /* APSR Register Definitions */
267*150812a8SEvalZero #define APSR_N_Pos                         31U                                            /*!< APSR: N Position */
268*150812a8SEvalZero #define APSR_N_Msk                         (1UL << APSR_N_Pos)                            /*!< APSR: N Mask */
269*150812a8SEvalZero 
270*150812a8SEvalZero #define APSR_Z_Pos                         30U                                            /*!< APSR: Z Position */
271*150812a8SEvalZero #define APSR_Z_Msk                         (1UL << APSR_Z_Pos)                            /*!< APSR: Z Mask */
272*150812a8SEvalZero 
273*150812a8SEvalZero #define APSR_C_Pos                         29U                                            /*!< APSR: C Position */
274*150812a8SEvalZero #define APSR_C_Msk                         (1UL << APSR_C_Pos)                            /*!< APSR: C Mask */
275*150812a8SEvalZero 
276*150812a8SEvalZero #define APSR_V_Pos                         28U                                            /*!< APSR: V Position */
277*150812a8SEvalZero #define APSR_V_Msk                         (1UL << APSR_V_Pos)                            /*!< APSR: V Mask */
278*150812a8SEvalZero 
279*150812a8SEvalZero 
280*150812a8SEvalZero /**
281*150812a8SEvalZero   \brief  Union type to access the Interrupt Program Status Register (IPSR).
282*150812a8SEvalZero  */
283*150812a8SEvalZero typedef union
284*150812a8SEvalZero {
285*150812a8SEvalZero   struct
286*150812a8SEvalZero   {
287*150812a8SEvalZero     uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
288*150812a8SEvalZero     uint32_t _reserved0:23;              /*!< bit:  9..31  Reserved */
289*150812a8SEvalZero   } b;                                   /*!< Structure used for bit  access */
290*150812a8SEvalZero   uint32_t w;                            /*!< Type      used for word access */
291*150812a8SEvalZero } IPSR_Type;
292*150812a8SEvalZero 
293*150812a8SEvalZero /* IPSR Register Definitions */
294*150812a8SEvalZero #define IPSR_ISR_Pos                        0U                                            /*!< IPSR: ISR Position */
295*150812a8SEvalZero #define IPSR_ISR_Msk                       (0x1FFUL /*<< IPSR_ISR_Pos*/)                  /*!< IPSR: ISR Mask */
296*150812a8SEvalZero 
297*150812a8SEvalZero 
298*150812a8SEvalZero /**
299*150812a8SEvalZero   \brief  Union type to access the Special-Purpose Program Status Registers (xPSR).
300*150812a8SEvalZero  */
301*150812a8SEvalZero typedef union
302*150812a8SEvalZero {
303*150812a8SEvalZero   struct
304*150812a8SEvalZero   {
305*150812a8SEvalZero     uint32_t ISR:9;                      /*!< bit:  0.. 8  Exception number */
306*150812a8SEvalZero     uint32_t _reserved0:15;              /*!< bit:  9..23  Reserved */
307*150812a8SEvalZero     uint32_t T:1;                        /*!< bit:     24  Thumb bit        (read 0) */
308*150812a8SEvalZero     uint32_t _reserved1:3;               /*!< bit: 25..27  Reserved */
309*150812a8SEvalZero     uint32_t V:1;                        /*!< bit:     28  Overflow condition code flag */
310*150812a8SEvalZero     uint32_t C:1;                        /*!< bit:     29  Carry condition code flag */
311*150812a8SEvalZero     uint32_t Z:1;                        /*!< bit:     30  Zero condition code flag */
312*150812a8SEvalZero     uint32_t N:1;                        /*!< bit:     31  Negative condition code flag */
313*150812a8SEvalZero   } b;                                   /*!< Structure used for bit  access */
314*150812a8SEvalZero   uint32_t w;                            /*!< Type      used for word access */
315*150812a8SEvalZero } xPSR_Type;
316*150812a8SEvalZero 
317*150812a8SEvalZero /* xPSR Register Definitions */
318*150812a8SEvalZero #define xPSR_N_Pos                         31U                                            /*!< xPSR: N Position */
319*150812a8SEvalZero #define xPSR_N_Msk                         (1UL << xPSR_N_Pos)                            /*!< xPSR: N Mask */
320*150812a8SEvalZero 
321*150812a8SEvalZero #define xPSR_Z_Pos                         30U                                            /*!< xPSR: Z Position */
322*150812a8SEvalZero #define xPSR_Z_Msk                         (1UL << xPSR_Z_Pos)                            /*!< xPSR: Z Mask */
323*150812a8SEvalZero 
324*150812a8SEvalZero #define xPSR_C_Pos                         29U                                            /*!< xPSR: C Position */
325*150812a8SEvalZero #define xPSR_C_Msk                         (1UL << xPSR_C_Pos)                            /*!< xPSR: C Mask */
326*150812a8SEvalZero 
327*150812a8SEvalZero #define xPSR_V_Pos                         28U                                            /*!< xPSR: V Position */
328*150812a8SEvalZero #define xPSR_V_Msk                         (1UL << xPSR_V_Pos)                            /*!< xPSR: V Mask */
329*150812a8SEvalZero 
330*150812a8SEvalZero #define xPSR_T_Pos                         24U                                            /*!< xPSR: T Position */
331*150812a8SEvalZero #define xPSR_T_Msk                         (1UL << xPSR_T_Pos)                            /*!< xPSR: T Mask */
332*150812a8SEvalZero 
333*150812a8SEvalZero #define xPSR_ISR_Pos                        0U                                            /*!< xPSR: ISR Position */
334*150812a8SEvalZero #define xPSR_ISR_Msk                       (0x1FFUL /*<< xPSR_ISR_Pos*/)                  /*!< xPSR: ISR Mask */
335*150812a8SEvalZero 
336*150812a8SEvalZero 
337*150812a8SEvalZero /**
338*150812a8SEvalZero   \brief  Union type to access the Control Registers (CONTROL).
339*150812a8SEvalZero  */
340*150812a8SEvalZero typedef union
341*150812a8SEvalZero {
342*150812a8SEvalZero   struct
343*150812a8SEvalZero   {
344*150812a8SEvalZero     uint32_t _reserved0:1;               /*!< bit:      0  Reserved */
345*150812a8SEvalZero     uint32_t SPSEL:1;                    /*!< bit:      1  Stack to be used */
346*150812a8SEvalZero     uint32_t _reserved1:30;              /*!< bit:  2..31  Reserved */
347*150812a8SEvalZero   } b;                                   /*!< Structure used for bit  access */
348*150812a8SEvalZero   uint32_t w;                            /*!< Type      used for word access */
349*150812a8SEvalZero } CONTROL_Type;
350*150812a8SEvalZero 
351*150812a8SEvalZero /* CONTROL Register Definitions */
352*150812a8SEvalZero #define CONTROL_SPSEL_Pos                   1U                                            /*!< CONTROL: SPSEL Position */
353*150812a8SEvalZero #define CONTROL_SPSEL_Msk                  (1UL << CONTROL_SPSEL_Pos)                     /*!< CONTROL: SPSEL Mask */
354*150812a8SEvalZero 
355*150812a8SEvalZero /*@} end of group CMSIS_CORE */
356*150812a8SEvalZero 
357*150812a8SEvalZero 
358*150812a8SEvalZero /**
359*150812a8SEvalZero   \ingroup    CMSIS_core_register
360*150812a8SEvalZero   \defgroup   CMSIS_NVIC  Nested Vectored Interrupt Controller (NVIC)
361*150812a8SEvalZero   \brief      Type definitions for the NVIC Registers
362*150812a8SEvalZero   @{
363*150812a8SEvalZero  */
364*150812a8SEvalZero 
365*150812a8SEvalZero /**
366*150812a8SEvalZero   \brief  Structure type to access the Nested Vectored Interrupt Controller (NVIC).
367*150812a8SEvalZero  */
368*150812a8SEvalZero typedef struct
369*150812a8SEvalZero {
370*150812a8SEvalZero   __IOM uint32_t ISER[1U];               /*!< Offset: 0x000 (R/W)  Interrupt Set Enable Register */
371*150812a8SEvalZero         uint32_t RESERVED0[31U];
372*150812a8SEvalZero   __IOM uint32_t ICER[1U];               /*!< Offset: 0x080 (R/W)  Interrupt Clear Enable Register */
373*150812a8SEvalZero         uint32_t RSERVED1[31U];
374*150812a8SEvalZero   __IOM uint32_t ISPR[1U];               /*!< Offset: 0x100 (R/W)  Interrupt Set Pending Register */
375*150812a8SEvalZero         uint32_t RESERVED2[31U];
376*150812a8SEvalZero   __IOM uint32_t ICPR[1U];               /*!< Offset: 0x180 (R/W)  Interrupt Clear Pending Register */
377*150812a8SEvalZero         uint32_t RESERVED3[31U];
378*150812a8SEvalZero         uint32_t RESERVED4[64U];
379*150812a8SEvalZero   __IOM uint32_t IP[8U];                 /*!< Offset: 0x300 (R/W)  Interrupt Priority Register */
380*150812a8SEvalZero }  NVIC_Type;
381*150812a8SEvalZero 
382*150812a8SEvalZero /*@} end of group CMSIS_NVIC */
383*150812a8SEvalZero 
384*150812a8SEvalZero 
385*150812a8SEvalZero /**
386*150812a8SEvalZero   \ingroup  CMSIS_core_register
387*150812a8SEvalZero   \defgroup CMSIS_SCB     System Control Block (SCB)
388*150812a8SEvalZero   \brief    Type definitions for the System Control Block Registers
389*150812a8SEvalZero   @{
390*150812a8SEvalZero  */
391*150812a8SEvalZero 
392*150812a8SEvalZero /**
393*150812a8SEvalZero   \brief  Structure type to access the System Control Block (SCB).
394*150812a8SEvalZero  */
395*150812a8SEvalZero typedef struct
396*150812a8SEvalZero {
397*150812a8SEvalZero   __IM  uint32_t CPUID;                  /*!< Offset: 0x000 (R/ )  CPUID Base Register */
398*150812a8SEvalZero   __IOM uint32_t ICSR;                   /*!< Offset: 0x004 (R/W)  Interrupt Control and State Register */
399*150812a8SEvalZero   __IOM uint32_t VTOR;                   /*!< Offset: 0x008 (R/W)  Vector Table Offset Register */
400*150812a8SEvalZero   __IOM uint32_t AIRCR;                  /*!< Offset: 0x00C (R/W)  Application Interrupt and Reset Control Register */
401*150812a8SEvalZero   __IOM uint32_t SCR;                    /*!< Offset: 0x010 (R/W)  System Control Register */
402*150812a8SEvalZero   __IOM uint32_t CCR;                    /*!< Offset: 0x014 (R/W)  Configuration Control Register */
403*150812a8SEvalZero         uint32_t RESERVED0[1U];
404*150812a8SEvalZero   __IOM uint32_t SHP[2U];                /*!< Offset: 0x01C (R/W)  System Handlers Priority Registers. [0] is RESERVED */
405*150812a8SEvalZero   __IOM uint32_t SHCSR;                  /*!< Offset: 0x024 (R/W)  System Handler Control and State Register */
406*150812a8SEvalZero         uint32_t RESERVED1[154U];
407*150812a8SEvalZero   __IOM uint32_t SFCR;                   /*!< Offset: 0x290 (R/W)  Security Features Control Register */
408*150812a8SEvalZero } SCB_Type;
409*150812a8SEvalZero 
410*150812a8SEvalZero /* SCB CPUID Register Definitions */
411*150812a8SEvalZero #define SCB_CPUID_IMPLEMENTER_Pos          24U                                            /*!< SCB CPUID: IMPLEMENTER Position */
412*150812a8SEvalZero #define SCB_CPUID_IMPLEMENTER_Msk          (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)          /*!< SCB CPUID: IMPLEMENTER Mask */
413*150812a8SEvalZero 
414*150812a8SEvalZero #define SCB_CPUID_VARIANT_Pos              20U                                            /*!< SCB CPUID: VARIANT Position */
415*150812a8SEvalZero #define SCB_CPUID_VARIANT_Msk              (0xFUL << SCB_CPUID_VARIANT_Pos)               /*!< SCB CPUID: VARIANT Mask */
416*150812a8SEvalZero 
417*150812a8SEvalZero #define SCB_CPUID_ARCHITECTURE_Pos         16U                                            /*!< SCB CPUID: ARCHITECTURE Position */
418*150812a8SEvalZero #define SCB_CPUID_ARCHITECTURE_Msk         (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)          /*!< SCB CPUID: ARCHITECTURE Mask */
419*150812a8SEvalZero 
420*150812a8SEvalZero #define SCB_CPUID_PARTNO_Pos                4U                                            /*!< SCB CPUID: PARTNO Position */
421*150812a8SEvalZero #define SCB_CPUID_PARTNO_Msk               (0xFFFUL << SCB_CPUID_PARTNO_Pos)              /*!< SCB CPUID: PARTNO Mask */
422*150812a8SEvalZero 
423*150812a8SEvalZero #define SCB_CPUID_REVISION_Pos              0U                                            /*!< SCB CPUID: REVISION Position */
424*150812a8SEvalZero #define SCB_CPUID_REVISION_Msk             (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)          /*!< SCB CPUID: REVISION Mask */
425*150812a8SEvalZero 
426*150812a8SEvalZero /* SCB Interrupt Control State Register Definitions */
427*150812a8SEvalZero #define SCB_ICSR_NMIPENDSET_Pos            31U                                            /*!< SCB ICSR: NMIPENDSET Position */
428*150812a8SEvalZero #define SCB_ICSR_NMIPENDSET_Msk            (1UL << SCB_ICSR_NMIPENDSET_Pos)               /*!< SCB ICSR: NMIPENDSET Mask */
429*150812a8SEvalZero 
430*150812a8SEvalZero #define SCB_ICSR_PENDSVSET_Pos             28U                                            /*!< SCB ICSR: PENDSVSET Position */
431*150812a8SEvalZero #define SCB_ICSR_PENDSVSET_Msk             (1UL << SCB_ICSR_PENDSVSET_Pos)                /*!< SCB ICSR: PENDSVSET Mask */
432*150812a8SEvalZero 
433*150812a8SEvalZero #define SCB_ICSR_PENDSVCLR_Pos             27U                                            /*!< SCB ICSR: PENDSVCLR Position */
434*150812a8SEvalZero #define SCB_ICSR_PENDSVCLR_Msk             (1UL << SCB_ICSR_PENDSVCLR_Pos)                /*!< SCB ICSR: PENDSVCLR Mask */
435*150812a8SEvalZero 
436*150812a8SEvalZero #define SCB_ICSR_PENDSTSET_Pos             26U                                            /*!< SCB ICSR: PENDSTSET Position */
437*150812a8SEvalZero #define SCB_ICSR_PENDSTSET_Msk             (1UL << SCB_ICSR_PENDSTSET_Pos)                /*!< SCB ICSR: PENDSTSET Mask */
438*150812a8SEvalZero 
439*150812a8SEvalZero #define SCB_ICSR_PENDSTCLR_Pos             25U                                            /*!< SCB ICSR: PENDSTCLR Position */
440*150812a8SEvalZero #define SCB_ICSR_PENDSTCLR_Msk             (1UL << SCB_ICSR_PENDSTCLR_Pos)                /*!< SCB ICSR: PENDSTCLR Mask */
441*150812a8SEvalZero 
442*150812a8SEvalZero #define SCB_ICSR_ISRPREEMPT_Pos            23U                                            /*!< SCB ICSR: ISRPREEMPT Position */
443*150812a8SEvalZero #define SCB_ICSR_ISRPREEMPT_Msk            (1UL << SCB_ICSR_ISRPREEMPT_Pos)               /*!< SCB ICSR: ISRPREEMPT Mask */
444*150812a8SEvalZero 
445*150812a8SEvalZero #define SCB_ICSR_ISRPENDING_Pos            22U                                            /*!< SCB ICSR: ISRPENDING Position */
446*150812a8SEvalZero #define SCB_ICSR_ISRPENDING_Msk            (1UL << SCB_ICSR_ISRPENDING_Pos)               /*!< SCB ICSR: ISRPENDING Mask */
447*150812a8SEvalZero 
448*150812a8SEvalZero #define SCB_ICSR_VECTPENDING_Pos           12U                                            /*!< SCB ICSR: VECTPENDING Position */
449*150812a8SEvalZero #define SCB_ICSR_VECTPENDING_Msk           (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)          /*!< SCB ICSR: VECTPENDING Mask */
450*150812a8SEvalZero 
451*150812a8SEvalZero #define SCB_ICSR_VECTACTIVE_Pos             0U                                            /*!< SCB ICSR: VECTACTIVE Position */
452*150812a8SEvalZero #define SCB_ICSR_VECTACTIVE_Msk            (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)       /*!< SCB ICSR: VECTACTIVE Mask */
453*150812a8SEvalZero 
454*150812a8SEvalZero /* SCB Interrupt Control State Register Definitions */
455*150812a8SEvalZero #define SCB_VTOR_TBLOFF_Pos                 7U                                            /*!< SCB VTOR: TBLOFF Position */
456*150812a8SEvalZero #define SCB_VTOR_TBLOFF_Msk                (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)           /*!< SCB VTOR: TBLOFF Mask */
457*150812a8SEvalZero 
458*150812a8SEvalZero /* SCB Application Interrupt and Reset Control Register Definitions */
459*150812a8SEvalZero #define SCB_AIRCR_VECTKEY_Pos              16U                                            /*!< SCB AIRCR: VECTKEY Position */
460*150812a8SEvalZero #define SCB_AIRCR_VECTKEY_Msk              (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)            /*!< SCB AIRCR: VECTKEY Mask */
461*150812a8SEvalZero 
462*150812a8SEvalZero #define SCB_AIRCR_VECTKEYSTAT_Pos          16U                                            /*!< SCB AIRCR: VECTKEYSTAT Position */
463*150812a8SEvalZero #define SCB_AIRCR_VECTKEYSTAT_Msk          (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)        /*!< SCB AIRCR: VECTKEYSTAT Mask */
464*150812a8SEvalZero 
465*150812a8SEvalZero #define SCB_AIRCR_ENDIANESS_Pos            15U                                            /*!< SCB AIRCR: ENDIANESS Position */
466*150812a8SEvalZero #define SCB_AIRCR_ENDIANESS_Msk            (1UL << SCB_AIRCR_ENDIANESS_Pos)               /*!< SCB AIRCR: ENDIANESS Mask */
467*150812a8SEvalZero 
468*150812a8SEvalZero #define SCB_AIRCR_SYSRESETREQ_Pos           2U                                            /*!< SCB AIRCR: SYSRESETREQ Position */
469*150812a8SEvalZero #define SCB_AIRCR_SYSRESETREQ_Msk          (1UL << SCB_AIRCR_SYSRESETREQ_Pos)             /*!< SCB AIRCR: SYSRESETREQ Mask */
470*150812a8SEvalZero 
471*150812a8SEvalZero #define SCB_AIRCR_VECTCLRACTIVE_Pos         1U                                            /*!< SCB AIRCR: VECTCLRACTIVE Position */
472*150812a8SEvalZero #define SCB_AIRCR_VECTCLRACTIVE_Msk        (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)           /*!< SCB AIRCR: VECTCLRACTIVE Mask */
473*150812a8SEvalZero 
474*150812a8SEvalZero /* SCB System Control Register Definitions */
475*150812a8SEvalZero #define SCB_SCR_SEVONPEND_Pos               4U                                            /*!< SCB SCR: SEVONPEND Position */
476*150812a8SEvalZero #define SCB_SCR_SEVONPEND_Msk              (1UL << SCB_SCR_SEVONPEND_Pos)                 /*!< SCB SCR: SEVONPEND Mask */
477*150812a8SEvalZero 
478*150812a8SEvalZero #define SCB_SCR_SLEEPDEEP_Pos               2U                                            /*!< SCB SCR: SLEEPDEEP Position */
479*150812a8SEvalZero #define SCB_SCR_SLEEPDEEP_Msk              (1UL << SCB_SCR_SLEEPDEEP_Pos)                 /*!< SCB SCR: SLEEPDEEP Mask */
480*150812a8SEvalZero 
481*150812a8SEvalZero #define SCB_SCR_SLEEPONEXIT_Pos             1U                                            /*!< SCB SCR: SLEEPONEXIT Position */
482*150812a8SEvalZero #define SCB_SCR_SLEEPONEXIT_Msk            (1UL << SCB_SCR_SLEEPONEXIT_Pos)               /*!< SCB SCR: SLEEPONEXIT Mask */
483*150812a8SEvalZero 
484*150812a8SEvalZero /* SCB Configuration Control Register Definitions */
485*150812a8SEvalZero #define SCB_CCR_STKALIGN_Pos                9U                                            /*!< SCB CCR: STKALIGN Position */
486*150812a8SEvalZero #define SCB_CCR_STKALIGN_Msk               (1UL << SCB_CCR_STKALIGN_Pos)                  /*!< SCB CCR: STKALIGN Mask */
487*150812a8SEvalZero 
488*150812a8SEvalZero #define SCB_CCR_UNALIGN_TRP_Pos             3U                                            /*!< SCB CCR: UNALIGN_TRP Position */
489*150812a8SEvalZero #define SCB_CCR_UNALIGN_TRP_Msk            (1UL << SCB_CCR_UNALIGN_TRP_Pos)               /*!< SCB CCR: UNALIGN_TRP Mask */
490*150812a8SEvalZero 
491*150812a8SEvalZero /* SCB System Handler Control and State Register Definitions */
492*150812a8SEvalZero #define SCB_SHCSR_SVCALLPENDED_Pos         15U                                            /*!< SCB SHCSR: SVCALLPENDED Position */
493*150812a8SEvalZero #define SCB_SHCSR_SVCALLPENDED_Msk         (1UL << SCB_SHCSR_SVCALLPENDED_Pos)            /*!< SCB SHCSR: SVCALLPENDED Mask */
494*150812a8SEvalZero 
495*150812a8SEvalZero /*@} end of group CMSIS_SCB */
496*150812a8SEvalZero 
497*150812a8SEvalZero 
498*150812a8SEvalZero /**
499*150812a8SEvalZero   \ingroup  CMSIS_core_register
500*150812a8SEvalZero   \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB)
501*150812a8SEvalZero   \brief    Type definitions for the System Control and ID Register not in the SCB
502*150812a8SEvalZero   @{
503*150812a8SEvalZero  */
504*150812a8SEvalZero 
505*150812a8SEvalZero /**
506*150812a8SEvalZero   \brief  Structure type to access the System Control and ID Register not in the SCB.
507*150812a8SEvalZero  */
508*150812a8SEvalZero typedef struct
509*150812a8SEvalZero {
510*150812a8SEvalZero         uint32_t RESERVED0[2U];
511*150812a8SEvalZero   __IOM uint32_t ACTLR;                  /*!< Offset: 0x008 (R/W)  Auxiliary Control Register */
512*150812a8SEvalZero } SCnSCB_Type;
513*150812a8SEvalZero 
514*150812a8SEvalZero /* Auxiliary Control Register Definitions */
515*150812a8SEvalZero #define SCnSCB_ACTLR_DISMCYCINT_Pos         0U                                         /*!< ACTLR: DISMCYCINT Position */
516*150812a8SEvalZero #define SCnSCB_ACTLR_DISMCYCINT_Msk        (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)    /*!< ACTLR: DISMCYCINT Mask */
517*150812a8SEvalZero 
518*150812a8SEvalZero /*@} end of group CMSIS_SCnotSCB */
519*150812a8SEvalZero 
520*150812a8SEvalZero 
521*150812a8SEvalZero /**
522*150812a8SEvalZero   \ingroup  CMSIS_core_register
523*150812a8SEvalZero   \defgroup CMSIS_SysTick     System Tick Timer (SysTick)
524*150812a8SEvalZero   \brief    Type definitions for the System Timer Registers.
525*150812a8SEvalZero   @{
526*150812a8SEvalZero  */
527*150812a8SEvalZero 
528*150812a8SEvalZero /**
529*150812a8SEvalZero   \brief  Structure type to access the System Timer (SysTick).
530*150812a8SEvalZero  */
531*150812a8SEvalZero typedef struct
532*150812a8SEvalZero {
533*150812a8SEvalZero   __IOM uint32_t CTRL;                   /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */
534*150812a8SEvalZero   __IOM uint32_t LOAD;                   /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */
535*150812a8SEvalZero   __IOM uint32_t VAL;                    /*!< Offset: 0x008 (R/W)  SysTick Current Value Register */
536*150812a8SEvalZero   __IM  uint32_t CALIB;                  /*!< Offset: 0x00C (R/ )  SysTick Calibration Register */
537*150812a8SEvalZero } SysTick_Type;
538*150812a8SEvalZero 
539*150812a8SEvalZero /* SysTick Control / Status Register Definitions */
540*150812a8SEvalZero #define SysTick_CTRL_COUNTFLAG_Pos         16U                                            /*!< SysTick CTRL: COUNTFLAG Position */
541*150812a8SEvalZero #define SysTick_CTRL_COUNTFLAG_Msk         (1UL << SysTick_CTRL_COUNTFLAG_Pos)            /*!< SysTick CTRL: COUNTFLAG Mask */
542*150812a8SEvalZero 
543*150812a8SEvalZero #define SysTick_CTRL_CLKSOURCE_Pos          2U                                            /*!< SysTick CTRL: CLKSOURCE Position */
544*150812a8SEvalZero #define SysTick_CTRL_CLKSOURCE_Msk         (1UL << SysTick_CTRL_CLKSOURCE_Pos)            /*!< SysTick CTRL: CLKSOURCE Mask */
545*150812a8SEvalZero 
546*150812a8SEvalZero #define SysTick_CTRL_TICKINT_Pos            1U                                            /*!< SysTick CTRL: TICKINT Position */
547*150812a8SEvalZero #define SysTick_CTRL_TICKINT_Msk           (1UL << SysTick_CTRL_TICKINT_Pos)              /*!< SysTick CTRL: TICKINT Mask */
548*150812a8SEvalZero 
549*150812a8SEvalZero #define SysTick_CTRL_ENABLE_Pos             0U                                            /*!< SysTick CTRL: ENABLE Position */
550*150812a8SEvalZero #define SysTick_CTRL_ENABLE_Msk            (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)           /*!< SysTick CTRL: ENABLE Mask */
551*150812a8SEvalZero 
552*150812a8SEvalZero /* SysTick Reload Register Definitions */
553*150812a8SEvalZero #define SysTick_LOAD_RELOAD_Pos             0U                                            /*!< SysTick LOAD: RELOAD Position */
554*150812a8SEvalZero #define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)    /*!< SysTick LOAD: RELOAD Mask */
555*150812a8SEvalZero 
556*150812a8SEvalZero /* SysTick Current Register Definitions */
557*150812a8SEvalZero #define SysTick_VAL_CURRENT_Pos             0U                                            /*!< SysTick VAL: CURRENT Position */
558*150812a8SEvalZero #define SysTick_VAL_CURRENT_Msk            (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)    /*!< SysTick VAL: CURRENT Mask */
559*150812a8SEvalZero 
560*150812a8SEvalZero /* SysTick Calibration Register Definitions */
561*150812a8SEvalZero #define SysTick_CALIB_NOREF_Pos            31U                                            /*!< SysTick CALIB: NOREF Position */
562*150812a8SEvalZero #define SysTick_CALIB_NOREF_Msk            (1UL << SysTick_CALIB_NOREF_Pos)               /*!< SysTick CALIB: NOREF Mask */
563*150812a8SEvalZero 
564*150812a8SEvalZero #define SysTick_CALIB_SKEW_Pos             30U                                            /*!< SysTick CALIB: SKEW Position */
565*150812a8SEvalZero #define SysTick_CALIB_SKEW_Msk             (1UL << SysTick_CALIB_SKEW_Pos)                /*!< SysTick CALIB: SKEW Mask */
566*150812a8SEvalZero 
567*150812a8SEvalZero #define SysTick_CALIB_TENMS_Pos             0U                                            /*!< SysTick CALIB: TENMS Position */
568*150812a8SEvalZero #define SysTick_CALIB_TENMS_Msk            (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)    /*!< SysTick CALIB: TENMS Mask */
569*150812a8SEvalZero 
570*150812a8SEvalZero /*@} end of group CMSIS_SysTick */
571*150812a8SEvalZero 
572*150812a8SEvalZero #if (__MPU_PRESENT == 1U)
573*150812a8SEvalZero /**
574*150812a8SEvalZero   \ingroup  CMSIS_core_register
575*150812a8SEvalZero   \defgroup CMSIS_MPU     Memory Protection Unit (MPU)
576*150812a8SEvalZero   \brief    Type definitions for the Memory Protection Unit (MPU)
577*150812a8SEvalZero   @{
578*150812a8SEvalZero  */
579*150812a8SEvalZero 
580*150812a8SEvalZero /**
581*150812a8SEvalZero   \brief  Structure type to access the Memory Protection Unit (MPU).
582*150812a8SEvalZero  */
583*150812a8SEvalZero typedef struct
584*150812a8SEvalZero {
585*150812a8SEvalZero   __IM  uint32_t TYPE;                   /*!< Offset: 0x000 (R/ )  MPU Type Register */
586*150812a8SEvalZero   __IOM uint32_t CTRL;                   /*!< Offset: 0x004 (R/W)  MPU Control Register */
587*150812a8SEvalZero   __IOM uint32_t RNR;                    /*!< Offset: 0x008 (R/W)  MPU Region RNRber Register */
588*150812a8SEvalZero   __IOM uint32_t RBAR;                   /*!< Offset: 0x00C (R/W)  MPU Region Base Address Register */
589*150812a8SEvalZero   __IOM uint32_t RASR;                   /*!< Offset: 0x010 (R/W)  MPU Region Attribute and Size Register */
590*150812a8SEvalZero } MPU_Type;
591*150812a8SEvalZero 
592*150812a8SEvalZero /* MPU Type Register Definitions */
593*150812a8SEvalZero #define MPU_TYPE_IREGION_Pos               16U                                            /*!< MPU TYPE: IREGION Position */
594*150812a8SEvalZero #define MPU_TYPE_IREGION_Msk               (0xFFUL << MPU_TYPE_IREGION_Pos)               /*!< MPU TYPE: IREGION Mask */
595*150812a8SEvalZero 
596*150812a8SEvalZero #define MPU_TYPE_DREGION_Pos                8U                                            /*!< MPU TYPE: DREGION Position */
597*150812a8SEvalZero #define MPU_TYPE_DREGION_Msk               (0xFFUL << MPU_TYPE_DREGION_Pos)               /*!< MPU TYPE: DREGION Mask */
598*150812a8SEvalZero 
599*150812a8SEvalZero #define MPU_TYPE_SEPARATE_Pos               0U                                            /*!< MPU TYPE: SEPARATE Position */
600*150812a8SEvalZero #define MPU_TYPE_SEPARATE_Msk              (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)             /*!< MPU TYPE: SEPARATE Mask */
601*150812a8SEvalZero 
602*150812a8SEvalZero /* MPU Control Register Definitions */
603*150812a8SEvalZero #define MPU_CTRL_PRIVDEFENA_Pos             2U                                            /*!< MPU CTRL: PRIVDEFENA Position */
604*150812a8SEvalZero #define MPU_CTRL_PRIVDEFENA_Msk            (1UL << MPU_CTRL_PRIVDEFENA_Pos)               /*!< MPU CTRL: PRIVDEFENA Mask */
605*150812a8SEvalZero 
606*150812a8SEvalZero #define MPU_CTRL_HFNMIENA_Pos               1U                                            /*!< MPU CTRL: HFNMIENA Position */
607*150812a8SEvalZero #define MPU_CTRL_HFNMIENA_Msk              (1UL << MPU_CTRL_HFNMIENA_Pos)                 /*!< MPU CTRL: HFNMIENA Mask */
608*150812a8SEvalZero 
609*150812a8SEvalZero #define MPU_CTRL_ENABLE_Pos                 0U                                            /*!< MPU CTRL: ENABLE Position */
610*150812a8SEvalZero #define MPU_CTRL_ENABLE_Msk                (1UL /*<< MPU_CTRL_ENABLE_Pos*/)               /*!< MPU CTRL: ENABLE Mask */
611*150812a8SEvalZero 
612*150812a8SEvalZero /* MPU Region Number Register Definitions */
613*150812a8SEvalZero #define MPU_RNR_REGION_Pos                  0U                                            /*!< MPU RNR: REGION Position */
614*150812a8SEvalZero #define MPU_RNR_REGION_Msk                 (0xFFUL /*<< MPU_RNR_REGION_Pos*/)             /*!< MPU RNR: REGION Mask */
615*150812a8SEvalZero 
616*150812a8SEvalZero /* MPU Region Base Address Register Definitions */
617*150812a8SEvalZero #define MPU_RBAR_ADDR_Pos                   8U                                            /*!< MPU RBAR: ADDR Position */
618*150812a8SEvalZero #define MPU_RBAR_ADDR_Msk                  (0xFFFFFFUL << MPU_RBAR_ADDR_Pos)              /*!< MPU RBAR: ADDR Mask */
619*150812a8SEvalZero 
620*150812a8SEvalZero #define MPU_RBAR_VALID_Pos                  4U                                            /*!< MPU RBAR: VALID Position */
621*150812a8SEvalZero #define MPU_RBAR_VALID_Msk                 (1UL << MPU_RBAR_VALID_Pos)                    /*!< MPU RBAR: VALID Mask */
622*150812a8SEvalZero 
623*150812a8SEvalZero #define MPU_RBAR_REGION_Pos                 0U                                            /*!< MPU RBAR: REGION Position */
624*150812a8SEvalZero #define MPU_RBAR_REGION_Msk                (0xFUL /*<< MPU_RBAR_REGION_Pos*/)             /*!< MPU RBAR: REGION Mask */
625*150812a8SEvalZero 
626*150812a8SEvalZero /* MPU Region Attribute and Size Register Definitions */
627*150812a8SEvalZero #define MPU_RASR_ATTRS_Pos                 16U                                            /*!< MPU RASR: MPU Region Attribute field Position */
628*150812a8SEvalZero #define MPU_RASR_ATTRS_Msk                 (0xFFFFUL << MPU_RASR_ATTRS_Pos)               /*!< MPU RASR: MPU Region Attribute field Mask */
629*150812a8SEvalZero 
630*150812a8SEvalZero #define MPU_RASR_XN_Pos                    28U                                            /*!< MPU RASR: ATTRS.XN Position */
631*150812a8SEvalZero #define MPU_RASR_XN_Msk                    (1UL << MPU_RASR_XN_Pos)                       /*!< MPU RASR: ATTRS.XN Mask */
632*150812a8SEvalZero 
633*150812a8SEvalZero #define MPU_RASR_AP_Pos                    24U                                            /*!< MPU RASR: ATTRS.AP Position */
634*150812a8SEvalZero #define MPU_RASR_AP_Msk                    (0x7UL << MPU_RASR_AP_Pos)                     /*!< MPU RASR: ATTRS.AP Mask */
635*150812a8SEvalZero 
636*150812a8SEvalZero #define MPU_RASR_TEX_Pos                   19U                                            /*!< MPU RASR: ATTRS.TEX Position */
637*150812a8SEvalZero #define MPU_RASR_TEX_Msk                   (0x7UL << MPU_RASR_TEX_Pos)                    /*!< MPU RASR: ATTRS.TEX Mask */
638*150812a8SEvalZero 
639*150812a8SEvalZero #define MPU_RASR_S_Pos                     18U                                            /*!< MPU RASR: ATTRS.S Position */
640*150812a8SEvalZero #define MPU_RASR_S_Msk                     (1UL << MPU_RASR_S_Pos)                        /*!< MPU RASR: ATTRS.S Mask */
641*150812a8SEvalZero 
642*150812a8SEvalZero #define MPU_RASR_C_Pos                     17U                                            /*!< MPU RASR: ATTRS.C Position */
643*150812a8SEvalZero #define MPU_RASR_C_Msk                     (1UL << MPU_RASR_C_Pos)                        /*!< MPU RASR: ATTRS.C Mask */
644*150812a8SEvalZero 
645*150812a8SEvalZero #define MPU_RASR_B_Pos                     16U                                            /*!< MPU RASR: ATTRS.B Position */
646*150812a8SEvalZero #define MPU_RASR_B_Msk                     (1UL << MPU_RASR_B_Pos)                        /*!< MPU RASR: ATTRS.B Mask */
647*150812a8SEvalZero 
648*150812a8SEvalZero #define MPU_RASR_SRD_Pos                    8U                                            /*!< MPU RASR: Sub-Region Disable Position */
649*150812a8SEvalZero #define MPU_RASR_SRD_Msk                   (0xFFUL << MPU_RASR_SRD_Pos)                   /*!< MPU RASR: Sub-Region Disable Mask */
650*150812a8SEvalZero 
651*150812a8SEvalZero #define MPU_RASR_SIZE_Pos                   1U                                            /*!< MPU RASR: Region Size Field Position */
652*150812a8SEvalZero #define MPU_RASR_SIZE_Msk                  (0x1FUL << MPU_RASR_SIZE_Pos)                  /*!< MPU RASR: Region Size Field Mask */
653*150812a8SEvalZero 
654*150812a8SEvalZero #define MPU_RASR_ENABLE_Pos                 0U                                            /*!< MPU RASR: Region enable bit Position */
655*150812a8SEvalZero #define MPU_RASR_ENABLE_Msk                (1UL /*<< MPU_RASR_ENABLE_Pos*/)               /*!< MPU RASR: Region enable bit Disable Mask */
656*150812a8SEvalZero 
657*150812a8SEvalZero /*@} end of group CMSIS_MPU */
658*150812a8SEvalZero #endif
659*150812a8SEvalZero 
660*150812a8SEvalZero 
661*150812a8SEvalZero /**
662*150812a8SEvalZero   \ingroup  CMSIS_core_register
663*150812a8SEvalZero   \defgroup CMSIS_CoreDebug       Core Debug Registers (CoreDebug)
664*150812a8SEvalZero   \brief    SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor.
665*150812a8SEvalZero             Therefore they are not covered by the SC000 header file.
666*150812a8SEvalZero   @{
667*150812a8SEvalZero  */
668*150812a8SEvalZero /*@} end of group CMSIS_CoreDebug */
669*150812a8SEvalZero 
670*150812a8SEvalZero 
671*150812a8SEvalZero /**
672*150812a8SEvalZero   \ingroup    CMSIS_core_register
673*150812a8SEvalZero   \defgroup   CMSIS_core_bitfield     Core register bit field macros
674*150812a8SEvalZero   \brief      Macros for use with bit field definitions (xxx_Pos, xxx_Msk).
675*150812a8SEvalZero   @{
676*150812a8SEvalZero  */
677*150812a8SEvalZero 
678*150812a8SEvalZero /**
679*150812a8SEvalZero   \brief   Mask and shift a bit field value for use in a register bit range.
680*150812a8SEvalZero   \param[in] field  Name of the register bit field.
681*150812a8SEvalZero   \param[in] value  Value of the bit field.
682*150812a8SEvalZero   \return           Masked and shifted value.
683*150812a8SEvalZero */
684*150812a8SEvalZero #define _VAL2FLD(field, value)    ((value << field ## _Pos) & field ## _Msk)
685*150812a8SEvalZero 
686*150812a8SEvalZero /**
687*150812a8SEvalZero   \brief     Mask and shift a register value to extract a bit filed value.
688*150812a8SEvalZero   \param[in] field  Name of the register bit field.
689*150812a8SEvalZero   \param[in] value  Value of register.
690*150812a8SEvalZero   \return           Masked and shifted bit field value.
691*150812a8SEvalZero */
692*150812a8SEvalZero #define _FLD2VAL(field, value)    ((value & field ## _Msk) >> field ## _Pos)
693*150812a8SEvalZero 
694*150812a8SEvalZero /*@} end of group CMSIS_core_bitfield */
695*150812a8SEvalZero 
696*150812a8SEvalZero 
697*150812a8SEvalZero /**
698*150812a8SEvalZero   \ingroup    CMSIS_core_register
699*150812a8SEvalZero   \defgroup   CMSIS_core_base     Core Definitions
700*150812a8SEvalZero   \brief      Definitions for base addresses, unions, and structures.
701*150812a8SEvalZero   @{
702*150812a8SEvalZero  */
703*150812a8SEvalZero 
704*150812a8SEvalZero /* Memory mapping of SC000 Hardware */
705*150812a8SEvalZero #define SCS_BASE            (0xE000E000UL)                            /*!< System Control Space Base Address */
706*150812a8SEvalZero #define SysTick_BASE        (SCS_BASE +  0x0010UL)                    /*!< SysTick Base Address */
707*150812a8SEvalZero #define NVIC_BASE           (SCS_BASE +  0x0100UL)                    /*!< NVIC Base Address */
708*150812a8SEvalZero #define SCB_BASE            (SCS_BASE +  0x0D00UL)                    /*!< System Control Block Base Address */
709*150812a8SEvalZero 
710*150812a8SEvalZero #define SCnSCB              ((SCnSCB_Type    *)     SCS_BASE      )   /*!< System control Register not in SCB */
711*150812a8SEvalZero #define SCB                 ((SCB_Type       *)     SCB_BASE      )   /*!< SCB configuration struct */
712*150812a8SEvalZero #define SysTick             ((SysTick_Type   *)     SysTick_BASE  )   /*!< SysTick configuration struct */
713*150812a8SEvalZero #define NVIC                ((NVIC_Type      *)     NVIC_BASE     )   /*!< NVIC configuration struct */
714*150812a8SEvalZero 
715*150812a8SEvalZero #if (__MPU_PRESENT == 1U)
716*150812a8SEvalZero   #define MPU_BASE          (SCS_BASE +  0x0D90UL)                    /*!< Memory Protection Unit */
717*150812a8SEvalZero   #define MPU               ((MPU_Type       *)     MPU_BASE      )   /*!< Memory Protection Unit */
718*150812a8SEvalZero #endif
719*150812a8SEvalZero 
720*150812a8SEvalZero /*@} */
721*150812a8SEvalZero 
722*150812a8SEvalZero 
723*150812a8SEvalZero 
724*150812a8SEvalZero /*******************************************************************************
725*150812a8SEvalZero  *                Hardware Abstraction Layer
726*150812a8SEvalZero   Core Function Interface contains:
727*150812a8SEvalZero   - Core NVIC Functions
728*150812a8SEvalZero   - Core SysTick Functions
729*150812a8SEvalZero   - Core Register Access Functions
730*150812a8SEvalZero  ******************************************************************************/
731*150812a8SEvalZero /**
732*150812a8SEvalZero   \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference
733*150812a8SEvalZero */
734*150812a8SEvalZero 
735*150812a8SEvalZero 
736*150812a8SEvalZero 
737*150812a8SEvalZero /* ##########################   NVIC functions  #################################### */
738*150812a8SEvalZero /**
739*150812a8SEvalZero   \ingroup  CMSIS_Core_FunctionInterface
740*150812a8SEvalZero   \defgroup CMSIS_Core_NVICFunctions NVIC Functions
741*150812a8SEvalZero   \brief    Functions that manage interrupts and exceptions via the NVIC.
742*150812a8SEvalZero   @{
743*150812a8SEvalZero  */
744*150812a8SEvalZero 
745*150812a8SEvalZero /* Interrupt Priorities are WORD accessible only under ARMv6M                   */
746*150812a8SEvalZero /* The following MACROS handle generation of the register offset and byte masks */
747*150812a8SEvalZero #define _BIT_SHIFT(IRQn)         (  ((((uint32_t)(int32_t)(IRQn))         )      &  0x03UL) * 8UL)
748*150812a8SEvalZero #define _SHP_IDX(IRQn)           ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >>    2UL)      )
749*150812a8SEvalZero #define _IP_IDX(IRQn)            (   (((uint32_t)(int32_t)(IRQn))                >>    2UL)      )
750*150812a8SEvalZero 
751*150812a8SEvalZero 
752*150812a8SEvalZero /**
753*150812a8SEvalZero   \brief   Enable External Interrupt
754*150812a8SEvalZero   \details Enables a device-specific interrupt in the NVIC interrupt controller.
755*150812a8SEvalZero   \param [in]      IRQn  External interrupt number. Value cannot be negative.
756*150812a8SEvalZero  */
NVIC_EnableIRQ(IRQn_Type IRQn)757*150812a8SEvalZero __STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
758*150812a8SEvalZero {
759*150812a8SEvalZero   NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
760*150812a8SEvalZero }
761*150812a8SEvalZero 
762*150812a8SEvalZero 
763*150812a8SEvalZero /**
764*150812a8SEvalZero   \brief   Disable External Interrupt
765*150812a8SEvalZero   \details Disables a device-specific interrupt in the NVIC interrupt controller.
766*150812a8SEvalZero   \param [in]      IRQn  External interrupt number. Value cannot be negative.
767*150812a8SEvalZero  */
NVIC_DisableIRQ(IRQn_Type IRQn)768*150812a8SEvalZero __STATIC_INLINE void NVIC_DisableIRQ(IRQn_Type IRQn)
769*150812a8SEvalZero {
770*150812a8SEvalZero   NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
771*150812a8SEvalZero }
772*150812a8SEvalZero 
773*150812a8SEvalZero 
774*150812a8SEvalZero /**
775*150812a8SEvalZero   \brief   Get Pending Interrupt
776*150812a8SEvalZero   \details Reads the pending register in the NVIC and returns the pending bit for the specified interrupt.
777*150812a8SEvalZero   \param [in]      IRQn  Interrupt number.
778*150812a8SEvalZero   \return             0  Interrupt status is not pending.
779*150812a8SEvalZero   \return             1  Interrupt status is pending.
780*150812a8SEvalZero  */
NVIC_GetPendingIRQ(IRQn_Type IRQn)781*150812a8SEvalZero __STATIC_INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn)
782*150812a8SEvalZero {
783*150812a8SEvalZero   return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
784*150812a8SEvalZero }
785*150812a8SEvalZero 
786*150812a8SEvalZero 
787*150812a8SEvalZero /**
788*150812a8SEvalZero   \brief   Set Pending Interrupt
789*150812a8SEvalZero   \details Sets the pending bit of an external interrupt.
790*150812a8SEvalZero   \param [in]      IRQn  Interrupt number. Value cannot be negative.
791*150812a8SEvalZero  */
NVIC_SetPendingIRQ(IRQn_Type IRQn)792*150812a8SEvalZero __STATIC_INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn)
793*150812a8SEvalZero {
794*150812a8SEvalZero   NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
795*150812a8SEvalZero }
796*150812a8SEvalZero 
797*150812a8SEvalZero 
798*150812a8SEvalZero /**
799*150812a8SEvalZero   \brief   Clear Pending Interrupt
800*150812a8SEvalZero   \details Clears the pending bit of an external interrupt.
801*150812a8SEvalZero   \param [in]      IRQn  External interrupt number. Value cannot be negative.
802*150812a8SEvalZero  */
NVIC_ClearPendingIRQ(IRQn_Type IRQn)803*150812a8SEvalZero __STATIC_INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn)
804*150812a8SEvalZero {
805*150812a8SEvalZero   NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL));
806*150812a8SEvalZero }
807*150812a8SEvalZero 
808*150812a8SEvalZero 
809*150812a8SEvalZero /**
810*150812a8SEvalZero   \brief   Set Interrupt Priority
811*150812a8SEvalZero   \details Sets the priority of an interrupt.
812*150812a8SEvalZero   \note    The priority cannot be set for every core interrupt.
813*150812a8SEvalZero   \param [in]      IRQn  Interrupt number.
814*150812a8SEvalZero   \param [in]  priority  Priority to set.
815*150812a8SEvalZero  */
NVIC_SetPriority(IRQn_Type IRQn,uint32_t priority)816*150812a8SEvalZero __STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
817*150812a8SEvalZero {
818*150812a8SEvalZero   if ((int32_t)(IRQn) < 0)
819*150812a8SEvalZero   {
820*150812a8SEvalZero     SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
821*150812a8SEvalZero        (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
822*150812a8SEvalZero   }
823*150812a8SEvalZero   else
824*150812a8SEvalZero   {
825*150812a8SEvalZero     NVIC->IP[_IP_IDX(IRQn)]  = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]  & ~(0xFFUL << _BIT_SHIFT(IRQn))) |
826*150812a8SEvalZero        (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn)));
827*150812a8SEvalZero   }
828*150812a8SEvalZero }
829*150812a8SEvalZero 
830*150812a8SEvalZero 
831*150812a8SEvalZero /**
832*150812a8SEvalZero   \brief   Get Interrupt Priority
833*150812a8SEvalZero   \details Reads the priority of an interrupt.
834*150812a8SEvalZero            The interrupt number can be positive to specify an external (device specific) interrupt,
835*150812a8SEvalZero            or negative to specify an internal (core) interrupt.
836*150812a8SEvalZero   \param [in]   IRQn  Interrupt number.
837*150812a8SEvalZero   \return             Interrupt Priority.
838*150812a8SEvalZero                       Value is aligned automatically to the implemented priority bits of the microcontroller.
839*150812a8SEvalZero  */
NVIC_GetPriority(IRQn_Type IRQn)840*150812a8SEvalZero __STATIC_INLINE uint32_t NVIC_GetPriority(IRQn_Type IRQn)
841*150812a8SEvalZero {
842*150812a8SEvalZero 
843*150812a8SEvalZero   if ((int32_t)(IRQn) < 0)
844*150812a8SEvalZero   {
845*150812a8SEvalZero     return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
846*150812a8SEvalZero   }
847*150812a8SEvalZero   else
848*150812a8SEvalZero   {
849*150812a8SEvalZero     return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS)));
850*150812a8SEvalZero   }
851*150812a8SEvalZero }
852*150812a8SEvalZero 
853*150812a8SEvalZero 
854*150812a8SEvalZero /**
855*150812a8SEvalZero   \brief   System Reset
856*150812a8SEvalZero   \details Initiates a system reset request to reset the MCU.
857*150812a8SEvalZero  */
NVIC_SystemReset(void)858*150812a8SEvalZero __STATIC_INLINE void NVIC_SystemReset(void)
859*150812a8SEvalZero {
860*150812a8SEvalZero   __DSB();                                                          /* Ensure all outstanding memory accesses included
861*150812a8SEvalZero                                                                        buffered write are completed before reset */
862*150812a8SEvalZero   SCB->AIRCR  = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
863*150812a8SEvalZero                  SCB_AIRCR_SYSRESETREQ_Msk);
864*150812a8SEvalZero   __DSB();                                                          /* Ensure completion of memory access */
865*150812a8SEvalZero 
866*150812a8SEvalZero   for (;;)                                                           /* wait until reset */
867*150812a8SEvalZero   {
868*150812a8SEvalZero     __NOP();
869*150812a8SEvalZero   }
870*150812a8SEvalZero }
871*150812a8SEvalZero 
872*150812a8SEvalZero /*@} end of CMSIS_Core_NVICFunctions */
873*150812a8SEvalZero 
874*150812a8SEvalZero 
875*150812a8SEvalZero 
876*150812a8SEvalZero /* ##################################    SysTick function  ############################################ */
877*150812a8SEvalZero /**
878*150812a8SEvalZero   \ingroup  CMSIS_Core_FunctionInterface
879*150812a8SEvalZero   \defgroup CMSIS_Core_SysTickFunctions SysTick Functions
880*150812a8SEvalZero   \brief    Functions that configure the System.
881*150812a8SEvalZero   @{
882*150812a8SEvalZero  */
883*150812a8SEvalZero 
884*150812a8SEvalZero #if (__Vendor_SysTickConfig == 0U)
885*150812a8SEvalZero 
886*150812a8SEvalZero /**
887*150812a8SEvalZero   \brief   System Tick Configuration
888*150812a8SEvalZero   \details Initializes the System Timer and its interrupt, and starts the System Tick Timer.
889*150812a8SEvalZero            Counter is in free running mode to generate periodic interrupts.
890*150812a8SEvalZero   \param [in]  ticks  Number of ticks between two interrupts.
891*150812a8SEvalZero   \return          0  Function succeeded.
892*150812a8SEvalZero   \return          1  Function failed.
893*150812a8SEvalZero   \note    When the variable <b>__Vendor_SysTickConfig</b> is set to 1, then the
894*150812a8SEvalZero            function <b>SysTick_Config</b> is not included. In this case, the file <b><i>device</i>.h</b>
895*150812a8SEvalZero            must contain a vendor-specific implementation of this function.
896*150812a8SEvalZero  */
SysTick_Config(uint32_t ticks)897*150812a8SEvalZero __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
898*150812a8SEvalZero {
899*150812a8SEvalZero   if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
900*150812a8SEvalZero   {
901*150812a8SEvalZero     return (1UL);                                                   /* Reload value impossible */
902*150812a8SEvalZero   }
903*150812a8SEvalZero 
904*150812a8SEvalZero   SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */
905*150812a8SEvalZero   NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
906*150812a8SEvalZero   SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */
907*150812a8SEvalZero   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
908*150812a8SEvalZero                    SysTick_CTRL_TICKINT_Msk   |
909*150812a8SEvalZero                    SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */
910*150812a8SEvalZero   return (0UL);                                                     /* Function successful */
911*150812a8SEvalZero }
912*150812a8SEvalZero 
913*150812a8SEvalZero #endif
914*150812a8SEvalZero 
915*150812a8SEvalZero /*@} end of CMSIS_Core_SysTickFunctions */
916*150812a8SEvalZero 
917*150812a8SEvalZero 
918*150812a8SEvalZero 
919*150812a8SEvalZero 
920*150812a8SEvalZero #ifdef __cplusplus
921*150812a8SEvalZero }
922*150812a8SEvalZero #endif
923*150812a8SEvalZero 
924*150812a8SEvalZero #endif /* __CORE_SC000_H_DEPENDANT */
925*150812a8SEvalZero 
926*150812a8SEvalZero #endif /* __CMSIS_GENERIC */
927