25#if defined ( __ICCARM__ )
26 #pragma system_include
27#elif defined (__clang__)
28 #pragma clang system_header
31#ifndef __CORE_CM0_H_GENERIC
32#define __CORE_CM0_H_GENERIC
66#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)
67#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB)
68#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \
69 __CM0_CMSIS_VERSION_SUB )
71#define __CORTEX_M (0U)
78#if defined ( __CC_ARM )
79 #if defined __TARGET_FPU_VFP
80 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
83#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
85 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
88#elif defined ( __GNUC__ )
89 #if defined (__VFP_FP__) && !defined(__SOFTFP__)
90 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
93#elif defined ( __ICCARM__ )
94 #if defined __ARMVFP__
95 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
98#elif defined ( __TI_ARM__ )
99 #if defined __TI_VFP_SUPPORT__
100 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
103#elif defined ( __TASKING__ )
104 #if defined __FPU_VFP__
105 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
108#elif defined ( __CSMC__ )
109 #if ( __CSMC__ & 0x400U)
110 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
124#ifndef __CMSIS_GENERIC
126#ifndef __CORE_CM0_H_DEPENDANT
127#define __CORE_CM0_H_DEPENDANT
134#if defined __CHECK_DEVICE_DEFINES
136 #define __CM0_REV 0x0000U
137 #warning "__CM0_REV not defined in device header file; using default!"
140 #ifndef __NVIC_PRIO_BITS
141 #define __NVIC_PRIO_BITS 2U
142 #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
145 #ifndef __Vendor_SysTickConfig
146 #define __Vendor_SysTickConfig 0U
147 #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
162 #define __I volatile const
168#define __IM volatile const
170#define __IOM volatile
213#define APSR_N_Pos 31U
214#define APSR_N_Msk (1UL << APSR_N_Pos)
216#define APSR_Z_Pos 30U
217#define APSR_Z_Msk (1UL << APSR_Z_Pos)
219#define APSR_C_Pos 29U
220#define APSR_C_Msk (1UL << APSR_C_Pos)
222#define APSR_V_Pos 28U
223#define APSR_V_Msk (1UL << APSR_V_Pos)
240#define IPSR_ISR_Pos 0U
241#define IPSR_ISR_Msk (0x1FFUL )
264#define xPSR_N_Pos 31U
265#define xPSR_N_Msk (1UL << xPSR_N_Pos)
267#define xPSR_Z_Pos 30U
268#define xPSR_Z_Msk (1UL << xPSR_Z_Pos)
270#define xPSR_C_Pos 29U
271#define xPSR_C_Msk (1UL << xPSR_C_Pos)
273#define xPSR_V_Pos 28U
274#define xPSR_V_Msk (1UL << xPSR_V_Pos)
276#define xPSR_T_Pos 24U
277#define xPSR_T_Msk (1UL << xPSR_T_Pos)
279#define xPSR_ISR_Pos 0U
280#define xPSR_ISR_Msk (0x1FFUL )
298#define CONTROL_SPSEL_Pos 1U
299#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos)
316 __IOM uint32_t ISER[1U];
317 uint32_t RESERVED0[31U];
318 __IOM uint32_t ICER[1U];
346 __IOM uint32_t AIRCR;
355#define SCB_CPUID_IMPLEMENTER_Pos 24U
356#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)
358#define SCB_CPUID_VARIANT_Pos 20U
359#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos)
361#define SCB_CPUID_ARCHITECTURE_Pos 16U
362#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)
364#define SCB_CPUID_PARTNO_Pos 4U
365#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos)
367#define SCB_CPUID_REVISION_Pos 0U
368#define SCB_CPUID_REVISION_Msk (0xFUL )
371#define SCB_ICSR_NMIPENDSET_Pos 31U
372#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos)
374#define SCB_ICSR_PENDSVSET_Pos 28U
375#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos)
377#define SCB_ICSR_PENDSVCLR_Pos 27U
378#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos)
380#define SCB_ICSR_PENDSTSET_Pos 26U
381#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos)
383#define SCB_ICSR_PENDSTCLR_Pos 25U
384#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos)
386#define SCB_ICSR_ISRPREEMPT_Pos 23U
387#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos)
389#define SCB_ICSR_ISRPENDING_Pos 22U
390#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos)
392#define SCB_ICSR_VECTPENDING_Pos 12U
393#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)
395#define SCB_ICSR_VECTACTIVE_Pos 0U
396#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL )
399#define SCB_AIRCR_VECTKEY_Pos 16U
400#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)
402#define SCB_AIRCR_VECTKEYSTAT_Pos 16U
403#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)
405#define SCB_AIRCR_ENDIANESS_Pos 15U
406#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos)
408#define SCB_AIRCR_SYSRESETREQ_Pos 2U
409#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos)
411#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U
412#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)
415#define SCB_SCR_SEVONPEND_Pos 4U
416#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos)
418#define SCB_SCR_SLEEPDEEP_Pos 2U
419#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos)
421#define SCB_SCR_SLEEPONEXIT_Pos 1U
422#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos)
425#define SCB_CCR_STKALIGN_Pos 9U
426#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos)
428#define SCB_CCR_UNALIGN_TRP_Pos 3U
429#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos)
432#define SCB_SHCSR_SVCALLPENDED_Pos 15U
433#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos)
457#define SysTick_CTRL_COUNTFLAG_Pos 16U
458#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos)
460#define SysTick_CTRL_CLKSOURCE_Pos 2U
461#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos)
463#define SysTick_CTRL_TICKINT_Pos 1U
464#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos)
466#define SysTick_CTRL_ENABLE_Pos 0U
467#define SysTick_CTRL_ENABLE_Msk (1UL )
470#define SysTick_LOAD_RELOAD_Pos 0U
471#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL )
474#define SysTick_VAL_CURRENT_Pos 0U
475#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL )
478#define SysTick_CALIB_NOREF_Pos 31U
479#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos)
481#define SysTick_CALIB_SKEW_Pos 30U
482#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos)
484#define SysTick_CALIB_TENMS_Pos 0U
485#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL )
513#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
521#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
534#define SCS_BASE (0xE000E000UL)
535#define SysTick_BASE (SCS_BASE + 0x0010UL)
536#define NVIC_BASE (SCS_BASE + 0x0100UL)
537#define SCB_BASE (SCS_BASE + 0x0D00UL)
539#define SCB ((SCB_Type *) SCB_BASE )
540#define SysTick ((SysTick_Type *) SysTick_BASE )
541#define NVIC ((NVIC_Type *) NVIC_BASE )
569#ifdef CMSIS_NVIC_VIRTUAL
570 #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
571 #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
573 #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
575 #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
576 #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
577 #define NVIC_EnableIRQ __NVIC_EnableIRQ
578 #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ
579 #define NVIC_DisableIRQ __NVIC_DisableIRQ
580 #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
581 #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
582 #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
584 #define NVIC_SetPriority __NVIC_SetPriority
585 #define NVIC_GetPriority __NVIC_GetPriority
586 #define NVIC_SystemReset __NVIC_SystemReset
589#ifdef CMSIS_VECTAB_VIRTUAL
590 #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
591 #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
593 #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
595 #define NVIC_SetVector __NVIC_SetVector
596 #define NVIC_GetVector __NVIC_GetVector
599#define NVIC_USER_IRQ_OFFSET 16
603#define EXC_RETURN_HANDLER (0xFFFFFFF1UL)
604#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL)
605#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL)
610#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL)
611#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) )
612#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) )
614#define __NVIC_SetPriorityGrouping(X) (void)(X)
615#define __NVIC_GetPriorityGrouping() (0U)
625 if ((int32_t)(IRQn) >= 0)
628 NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
644 if ((int32_t)(IRQn) >= 0)
646 return((uint32_t)(((
NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
663 if ((int32_t)(IRQn) >= 0)
665 NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
682 if ((int32_t)(IRQn) >= 0)
684 return((uint32_t)(((
NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
701 if ((int32_t)(IRQn) >= 0)
703 NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
716 if ((int32_t)(IRQn) >= 0)
718 NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
734 if ((int32_t)(IRQn) >= 0)
759 if ((int32_t)(IRQn) >= 0)
783 uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);
784 uint32_t PreemptPriorityBits;
785 uint32_t SubPriorityBits;
788 SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(
__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(
__NVIC_PRIO_BITS));
791 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
792 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
810 uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL);
811 uint32_t PreemptPriorityBits;
812 uint32_t SubPriorityBits;
815 SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(
__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(
__NVIC_PRIO_BITS));
817 *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
818 *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL);
835 *(vectors + (int32_t)IRQn) = vector;
851 return *(vectors + (int32_t)IRQn);
910#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
930 SysTick->LOAD = (uint32_t)(ticks - 1UL);
#define __COMPILER_BARRIER()
CMSIS compiler generic header file.
CMSIS Core(M) Version definitions.
#define SysTick_CTRL_ENABLE_Msk
SysTick CTRL: ENABLE Mask.
#define SysTick_LOAD_RELOAD_Msk
SysTick LOAD: RELOAD Mask.
#define SysTick_CTRL_TICKINT_Msk
SysTick CTRL: TICKINT Mask.
#define SysTick_CTRL_CLKSOURCE_Msk
SysTick CTRL: CLKSOURCE Mask.
#define SCB_AIRCR_VECTKEY_Pos
SCB AIRCR: VECTKEY Position.
#define SCB
SCB configuration struct.
#define SCB_AIRCR_SYSRESETREQ_Msk
SCB AIRCR: SYSRESETREQ Mask.
#define NVIC
NVIC configuration struct.
#define SysTick
SysTick configuration struct.
#define __DSB()
Data Synchronization Barrier.
#define __ISB()
Instruction Synchronization Barrier.
#define __NOP
No Operation.
__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
System Reset.
__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
Set Interrupt Vector.
__STATIC_INLINE void NVIC_DecodePriority(uint32_t Priority, uint32_t PriorityGroup, uint32_t *const pPreemptPriority, uint32_t *const pSubPriority)
Decode Priority.
__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
Get Interrupt Vector.
__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
Set Interrupt Priority.
__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
Clear Pending Interrupt.
__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
Get Pending Interrupt.
__STATIC_INLINE uint32_t SCB_GetFPUType(void)
get FPU type
__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
Enable Interrupt.
#define NVIC_USER_IRQ_OFFSET
__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
Set Pending Interrupt.
__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
Get Interrupt Enable status.
__STATIC_INLINE uint32_t NVIC_EncodePriority(uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
Encode Priority.
__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
Disable Interrupt.
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
System Tick Configuration.
__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
Get Interrupt Priority.
uint32_t _reserved1
bit: 2..31 Reserved
uint32_t _reserved0
bit: 0..27 Reserved
uint32_t V
bit: 28 Overflow condition code flag
uint32_t C
bit: 29 Carry condition code flag
uint32_t SPSEL
bit: 1 Stack to be used
uint32_t T
bit: 24 Thumb bit (read 0)
uint32_t _reserved1
bit: 25..27 Reserved
__IOM uint32_t IP[8U]
Offset: 0x300 (R/W) Interrupt Priority Register.
__IOM uint32_t SHP[2U]
Offset: 0x01C (R/W) System Handlers Priority Registers.
uint32_t _reserved0
bit: 9..31 Reserved
uint32_t N
bit: 31 Negative condition code flag
uint32_t N
bit: 31 Negative condition code flag
uint32_t _reserved0
bit: 9..23 Reserved
uint32_t C
bit: 29 Carry condition code flag
uint32_t Z
bit: 30 Zero condition code flag
uint32_t Z
bit: 30 Zero condition code flag
uint32_t V
bit: 28 Overflow condition code flag
uint32_t _reserved0
bit: 0 Reserved
__IOM uint32_t ISPR[16U]
Offset: 0x100 (R/W) Interrupt Set Pending Register.
__IOM uint32_t SHCSR
Offset: 0x024 (R/W) System Handler Control and State Register.
__IOM uint32_t ICPR[16U]
Offset: 0x180 (R/W) Interrupt Clear Pending Register.
#define __NVIC_PRIO_BITS
CM7 uses 4 Bits for the Priority Levels.
IRQn_Type
STM32H7XX Interrupt Number Definition, according to the selected device in Library_configuration_sect...
@ SysTick_IRQn
15 Cortex-M System Tick Interrupt
*brief create JSON pointer *sa reference_tokens const string_t const string_t & b
Structure type to access the Nested Vectored Interrupt Controller (NVIC).
Structure type to access the System Control Block (SCB).
Structure type to access the System Timer (SysTick).
Union type to access the Application Program Status Register (APSR).
Union type to access the Control Registers (CONTROL).
Union type to access the Interrupt Program Status Register (IPSR).
Union type to access the Special-Purpose Program Status Registers (xPSR).