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