YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
core_cm3.h
Go to the documentation of this file.
1/**************************************************************************/
7/*
8 * Copyright (c) 2009-2023 Arm Limited. All rights reserved.
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 *
12 * Licensed under the Apache License, Version 2.0 (the License); you may
13 * not use this file except in compliance with the License.
14 * You may obtain a copy of the License at
15 *
16 * www.apache.org/licenses/LICENSE-2.0
17 *
18 * Unless required by applicable law or agreed to in writing, software
19 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
20 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21 * See the License for the specific language governing permissions and
22 * limitations under the License.
23 */
24
25#if defined ( __ICCARM__ )
26 #pragma system_include /* treat file as system include file for MISRA check */
27#elif defined (__clang__)
28 #pragma clang system_header /* treat file as system include file */
29#endif
30
31#ifndef __CORE_CM3_H_GENERIC
32#define __CORE_CM3_H_GENERIC
33
34#include <stdint.h>
35
36#ifdef __cplusplus
37 extern "C" {
38#endif
39
55/*******************************************************************************
56 * CMSIS definitions
57 ******************************************************************************/
63#include "cmsis_version.h"
64
65/* CMSIS CM3 definitions */
66#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN)
67#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB)
68#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \
69 __CM3_CMSIS_VERSION_SUB )
71#define __CORTEX_M (3U)
76#define __FPU_USED 0U
77
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)"
81 #endif
82
83#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
84 #if defined __ARM_FP
85 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
86 #endif
87
88#elif defined (__ti__)
89 #if defined __ARM_FP
90 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
91 #endif
92
93#elif defined ( __GNUC__ )
94 #if defined (__VFP_FP__) && !defined(__SOFTFP__)
95 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
96 #endif
97
98#elif defined ( __ICCARM__ )
99 #if defined __ARMVFP__
100 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
101 #endif
102
103#elif defined ( __TI_ARM__ )
104 #if defined __TI_VFP_SUPPORT__
105 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
106 #endif
107
108#elif defined ( __TASKING__ )
109 #if defined __FPU_VFP__
110 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
111 #endif
112
113#elif defined ( __CSMC__ )
114 #if ( __CSMC__ & 0x400U)
115 #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)"
116 #endif
117
118#endif
119
120#include "cmsis_compiler.h" /* CMSIS compiler specific defines */
121
122
123#ifdef __cplusplus
124}
125#endif
126
127#endif /* __CORE_CM3_H_GENERIC */
128
129#ifndef __CMSIS_GENERIC
130
131#ifndef __CORE_CM3_H_DEPENDANT
132#define __CORE_CM3_H_DEPENDANT
133
134#ifdef __cplusplus
135 extern "C" {
136#endif
137
138/* check device defines and use defaults */
139#if defined __CHECK_DEVICE_DEFINES
140 #ifndef __CM3_REV
141 #define __CM3_REV 0x0200U
142 #warning "__CM3_REV not defined in device header file; using default!"
143 #endif
144
145 #ifndef __MPU_PRESENT
146 #define __MPU_PRESENT 0U
147 #warning "__MPU_PRESENT not defined in device header file; using default!"
148 #endif
149
150 #ifndef __VTOR_PRESENT
151 #define __VTOR_PRESENT 1U
152 #warning "__VTOR_PRESENT not defined in device header file; using default!"
153 #endif
154
155 #ifndef __NVIC_PRIO_BITS
156 #define __NVIC_PRIO_BITS 3U
157 #warning "__NVIC_PRIO_BITS not defined in device header file; using default!"
158 #endif
159
160 #ifndef __Vendor_SysTickConfig
161 #define __Vendor_SysTickConfig 0U
162 #warning "__Vendor_SysTickConfig not defined in device header file; using default!"
163 #endif
164#endif
165
166/* IO definitions (access restrictions to peripheral registers) */
174#ifdef __cplusplus
175 #define __I volatile
176#else
177 #define __I volatile const
178#endif
179#define __O volatile
180#define __IO volatile
182/* following defines should be used for structure members */
183#define __IM volatile const
184#define __OM volatile
185#define __IOM volatile
191/*******************************************************************************
192 * Register Abstraction
193 Core Register contain:
194 - Core Register
195 - Core NVIC Register
196 - Core SCB Register
197 - Core SysTick Register
198 - Core Debug Register
199 - Core MPU Register
200 ******************************************************************************/
216typedef union
217{
218 struct
219 {
220 uint32_t _reserved0:27;
221 uint32_t Q:1;
222 uint32_t V:1;
223 uint32_t C:1;
224 uint32_t Z:1;
225 uint32_t N:1;
226 } b;
227 uint32_t w;
228} APSR_Type;
229
230/* APSR Register Definitions */
231#define APSR_N_Pos 31U
232#define APSR_N_Msk (1UL << APSR_N_Pos)
234#define APSR_Z_Pos 30U
235#define APSR_Z_Msk (1UL << APSR_Z_Pos)
237#define APSR_C_Pos 29U
238#define APSR_C_Msk (1UL << APSR_C_Pos)
240#define APSR_V_Pos 28U
241#define APSR_V_Msk (1UL << APSR_V_Pos)
243#define APSR_Q_Pos 27U
244#define APSR_Q_Msk (1UL << APSR_Q_Pos)
250typedef union
251{
252 struct
253 {
254 uint32_t ISR:9;
255 uint32_t _reserved0:23;
256 } b;
257 uint32_t w;
258} IPSR_Type;
259
260/* IPSR Register Definitions */
261#define IPSR_ISR_Pos 0U
262#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/)
268typedef union
269{
270 struct
271 {
272 uint32_t ISR:9;
273 uint32_t _reserved0:1;
274 uint32_t ICI_IT_1:6;
275 uint32_t _reserved1:8;
276 uint32_t T:1;
277 uint32_t ICI_IT_2:2;
278 uint32_t Q:1;
279 uint32_t V:1;
280 uint32_t C:1;
281 uint32_t Z:1;
282 uint32_t N:1;
283 } b;
284 uint32_t w;
285} xPSR_Type;
286
287/* xPSR Register Definitions */
288#define xPSR_N_Pos 31U
289#define xPSR_N_Msk (1UL << xPSR_N_Pos)
291#define xPSR_Z_Pos 30U
292#define xPSR_Z_Msk (1UL << xPSR_Z_Pos)
294#define xPSR_C_Pos 29U
295#define xPSR_C_Msk (1UL << xPSR_C_Pos)
297#define xPSR_V_Pos 28U
298#define xPSR_V_Msk (1UL << xPSR_V_Pos)
300#define xPSR_Q_Pos 27U
301#define xPSR_Q_Msk (1UL << xPSR_Q_Pos)
303#define xPSR_ICI_IT_2_Pos 25U
304#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos)
306#define xPSR_T_Pos 24U
307#define xPSR_T_Msk (1UL << xPSR_T_Pos)
309#define xPSR_ICI_IT_1_Pos 10U
310#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos)
312#define xPSR_ISR_Pos 0U
313#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/)
319typedef union
320{
321 struct
322 {
323 uint32_t nPRIV:1;
324 uint32_t SPSEL:1;
325 uint32_t _reserved1:30;
326 } b;
327 uint32_t w;
329
330/* CONTROL Register Definitions */
331#define CONTROL_SPSEL_Pos 1U
332#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos)
334#define CONTROL_nPRIV_Pos 0U
335#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/)
350typedef struct
351{
352 __IOM uint32_t ISER[8U];
353 uint32_t RESERVED0[24U];
354 __IOM uint32_t ICER[8U];
355 uint32_t RESERVED1[24U];
356 __IOM uint32_t ISPR[8U];
357 uint32_t RESERVED2[24U];
358 __IOM uint32_t ICPR[8U];
359 uint32_t RESERVED3[24U];
360 __IOM uint32_t IABR[8U];
361 uint32_t RESERVED4[56U];
362 __IOM uint8_t IP[240U];
363 uint32_t RESERVED5[644U];
364 __OM uint32_t STIR;
365} NVIC_Type;
366
367/* Software Triggered Interrupt Register Definitions */
368#define NVIC_STIR_INTID_Pos 0U
369#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/)
384typedef struct
385{
386 __IM uint32_t CPUID;
387 __IOM uint32_t ICSR;
388 __IOM uint32_t VTOR;
389 __IOM uint32_t AIRCR;
390 __IOM uint32_t SCR;
391 __IOM uint32_t CCR;
392 __IOM uint8_t SHP[12U];
393 __IOM uint32_t SHCSR;
394 __IOM uint32_t CFSR;
395 __IOM uint32_t HFSR;
396 __IOM uint32_t DFSR;
397 __IOM uint32_t MMFAR;
398 __IOM uint32_t BFAR;
399 __IOM uint32_t AFSR;
400 __IM uint32_t PFR[2U];
401 __IM uint32_t DFR;
402 __IM uint32_t ADR;
403 __IM uint32_t MMFR[4U];
404 __IM uint32_t ISAR[5U];
405 uint32_t RESERVED0[5U];
406 __IOM uint32_t CPACR;
407} SCB_Type;
408
409/* SCB CPUID Register Definitions */
410#define SCB_CPUID_IMPLEMENTER_Pos 24U
411#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos)
413#define SCB_CPUID_VARIANT_Pos 20U
414#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos)
416#define SCB_CPUID_ARCHITECTURE_Pos 16U
417#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos)
419#define SCB_CPUID_PARTNO_Pos 4U
420#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos)
422#define SCB_CPUID_REVISION_Pos 0U
423#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/)
425/* SCB Interrupt Control State Register Definitions */
426#define SCB_ICSR_NMIPENDSET_Pos 31U
427#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos)
429#define SCB_ICSR_PENDSVSET_Pos 28U
430#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos)
432#define SCB_ICSR_PENDSVCLR_Pos 27U
433#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos)
435#define SCB_ICSR_PENDSTSET_Pos 26U
436#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos)
438#define SCB_ICSR_PENDSTCLR_Pos 25U
439#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos)
441#define SCB_ICSR_ISRPREEMPT_Pos 23U
442#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos)
444#define SCB_ICSR_ISRPENDING_Pos 22U
445#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos)
447#define SCB_ICSR_VECTPENDING_Pos 12U
448#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos)
450#define SCB_ICSR_RETTOBASE_Pos 11U
451#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos)
453#define SCB_ICSR_VECTACTIVE_Pos 0U
454#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/)
456/* SCB Vector Table Offset Register Definitions */
457#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */
458#define SCB_VTOR_TBLBASE_Pos 29U
459#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos)
461#define SCB_VTOR_TBLOFF_Pos 7U
462#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos)
463#else
464#define SCB_VTOR_TBLOFF_Pos 7U
465#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos)
466#endif
467
468/* SCB Application Interrupt and Reset Control Register Definitions */
469#define SCB_AIRCR_VECTKEY_Pos 16U
470#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos)
472#define SCB_AIRCR_VECTKEYSTAT_Pos 16U
473#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos)
475#define SCB_AIRCR_ENDIANESS_Pos 15U
476#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos)
478#define SCB_AIRCR_PRIGROUP_Pos 8U
479#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos)
481#define SCB_AIRCR_SYSRESETREQ_Pos 2U
482#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos)
484#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U
485#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos)
487#define SCB_AIRCR_VECTRESET_Pos 0U
488#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/)
490/* SCB System Control Register Definitions */
491#define SCB_SCR_SEVONPEND_Pos 4U
492#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos)
494#define SCB_SCR_SLEEPDEEP_Pos 2U
495#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos)
497#define SCB_SCR_SLEEPONEXIT_Pos 1U
498#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos)
500/* SCB Configuration Control Register Definitions */
501#define SCB_CCR_STKALIGN_Pos 9U
502#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos)
504#define SCB_CCR_BFHFNMIGN_Pos 8U
505#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos)
507#define SCB_CCR_DIV_0_TRP_Pos 4U
508#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos)
510#define SCB_CCR_UNALIGN_TRP_Pos 3U
511#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos)
513#define SCB_CCR_USERSETMPEND_Pos 1U
514#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos)
516#define SCB_CCR_NONBASETHRDENA_Pos 0U
517#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/)
519/* SCB System Handler Control and State Register Definitions */
520#define SCB_SHCSR_USGFAULTENA_Pos 18U
521#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos)
523#define SCB_SHCSR_BUSFAULTENA_Pos 17U
524#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos)
526#define SCB_SHCSR_MEMFAULTENA_Pos 16U
527#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos)
529#define SCB_SHCSR_SVCALLPENDED_Pos 15U
530#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos)
532#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U
533#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos)
535#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U
536#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos)
538#define SCB_SHCSR_USGFAULTPENDED_Pos 12U
539#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos)
541#define SCB_SHCSR_SYSTICKACT_Pos 11U
542#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos)
544#define SCB_SHCSR_PENDSVACT_Pos 10U
545#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos)
547#define SCB_SHCSR_MONITORACT_Pos 8U
548#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos)
550#define SCB_SHCSR_SVCALLACT_Pos 7U
551#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos)
553#define SCB_SHCSR_USGFAULTACT_Pos 3U
554#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos)
556#define SCB_SHCSR_BUSFAULTACT_Pos 1U
557#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos)
559#define SCB_SHCSR_MEMFAULTACT_Pos 0U
560#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/)
562/* SCB Configurable Fault Status Register Definitions */
563#define SCB_CFSR_USGFAULTSR_Pos 16U
564#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos)
566#define SCB_CFSR_BUSFAULTSR_Pos 8U
567#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos)
569#define SCB_CFSR_MEMFAULTSR_Pos 0U
570#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/)
572/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */
573#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U)
574#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos)
576#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U)
577#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos)
579#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U)
580#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos)
582#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U)
583#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos)
585#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U)
586#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/)
588/* BusFault Status Register (part of SCB Configurable Fault Status Register) */
589#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U)
590#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos)
592#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U)
593#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos)
595#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U)
596#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos)
598#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U)
599#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos)
601#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U)
602#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos)
604#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U)
605#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos)
607/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */
608#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U)
609#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos)
611#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U)
612#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos)
614#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U)
615#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos)
617#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U)
618#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos)
620#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U)
621#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos)
623#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U)
624#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos)
626/* SCB Hard Fault Status Register Definitions */
627#define SCB_HFSR_DEBUGEVT_Pos 31U
628#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos)
630#define SCB_HFSR_FORCED_Pos 30U
631#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos)
633#define SCB_HFSR_VECTTBL_Pos 1U
634#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos)
636/* SCB Debug Fault Status Register Definitions */
637#define SCB_DFSR_EXTERNAL_Pos 4U
638#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos)
640#define SCB_DFSR_VCATCH_Pos 3U
641#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos)
643#define SCB_DFSR_DWTTRAP_Pos 2U
644#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos)
646#define SCB_DFSR_BKPT_Pos 1U
647#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos)
649#define SCB_DFSR_HALTED_Pos 0U
650#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/)
665typedef struct
666{
667 uint32_t RESERVED0[1U];
668 __IM uint32_t ICTR;
669#if defined (__CM3_REV) && (__CM3_REV >= 0x200U)
670 __IOM uint32_t ACTLR;
671#else
672 uint32_t RESERVED1[1U];
673#endif
675
676/* Interrupt Controller Type Register Definitions */
677#define SCnSCB_ICTR_INTLINESNUM_Pos 0U
678#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/)
680/* Auxiliary Control Register Definitions */
681#if defined (__CM3_REV) && (__CM3_REV >= 0x200U)
682#define SCnSCB_ACTLR_DISOOFP_Pos 9U
683#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos)
685#define SCnSCB_ACTLR_DISFPCA_Pos 8U
686#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos)
688#define SCnSCB_ACTLR_DISFOLD_Pos 2U
689#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos)
691#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U
692#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos)
694#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U
695#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/)
696#endif
697
711typedef struct
712{
713 __IOM uint32_t CTRL;
714 __IOM uint32_t LOAD;
715 __IOM uint32_t VAL;
716 __IM uint32_t CALIB;
718
719/* SysTick Control / Status Register Definitions */
720#define SysTick_CTRL_COUNTFLAG_Pos 16U
721#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos)
723#define SysTick_CTRL_CLKSOURCE_Pos 2U
724#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos)
726#define SysTick_CTRL_TICKINT_Pos 1U
727#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos)
729#define SysTick_CTRL_ENABLE_Pos 0U
730#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/)
732/* SysTick Reload Register Definitions */
733#define SysTick_LOAD_RELOAD_Pos 0U
734#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/)
736/* SysTick Current Register Definitions */
737#define SysTick_VAL_CURRENT_Pos 0U
738#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/)
740/* SysTick Calibration Register Definitions */
741#define SysTick_CALIB_NOREF_Pos 31U
742#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos)
744#define SysTick_CALIB_SKEW_Pos 30U
745#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos)
747#define SysTick_CALIB_TENMS_Pos 0U
748#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/)
763typedef struct
764{
765 __OM union
766 {
767 __OM uint8_t u8;
768 __OM uint16_t u16;
769 __OM uint32_t u32;
770 } PORT [32U];
771 uint32_t RESERVED0[864U];
772 __IOM uint32_t TER;
773 uint32_t RESERVED1[15U];
774 __IOM uint32_t TPR;
775 uint32_t RESERVED2[15U];
776 __IOM uint32_t TCR;
777 uint32_t RESERVED3[32U];
778 uint32_t RESERVED4[43U];
779 __OM uint32_t LAR;
780 __IM uint32_t LSR;
781 uint32_t RESERVED5[6U];
782 __IM uint32_t PID4;
783 __IM uint32_t PID5;
784 __IM uint32_t PID6;
785 __IM uint32_t PID7;
786 __IM uint32_t PID0;
787 __IM uint32_t PID1;
788 __IM uint32_t PID2;
789 __IM uint32_t PID3;
790 __IM uint32_t CID0;
791 __IM uint32_t CID1;
792 __IM uint32_t CID2;
793 __IM uint32_t CID3;
794} ITM_Type;
795
796/* ITM Trace Privilege Register Definitions */
797#define ITM_TPR_PRIVMASK_Pos 0U
798#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/)
800/* ITM Trace Control Register Definitions */
801#define ITM_TCR_BUSY_Pos 23U
802#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos)
804#define ITM_TCR_TRACEBUSID_Pos 16U
805#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos)
807#define ITM_TCR_GTSFREQ_Pos 10U
808#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos)
810#define ITM_TCR_TSPRESCALE_Pos 8U
811#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos)
813#define ITM_TCR_SWOENA_Pos 4U
814#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos)
816#define ITM_TCR_DWTENA_Pos 3U
817#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos)
819#define ITM_TCR_SYNCENA_Pos 2U
820#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos)
822#define ITM_TCR_TSENA_Pos 1U
823#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos)
825#define ITM_TCR_ITMENA_Pos 0U
826#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/)
828/* ITM Lock Status Register Definitions */
829#define ITM_LSR_BYTEACC_Pos 2U
830#define ITM_LSR_BYTEACC_Msk (1UL << ITM_LSR_BYTEACC_Pos)
832#define ITM_LSR_ACCESS_Pos 1U
833#define ITM_LSR_ACCESS_Msk (1UL << ITM_LSR_ACCESS_Pos)
835#define ITM_LSR_PRESENT_Pos 0U
836#define ITM_LSR_PRESENT_Msk (1UL /*<< ITM_LSR_PRESENT_Pos*/) /* end of group CMSIS_ITM */
839
840
851typedef struct
852{
853 __IOM uint32_t CTRL;
854 __IOM uint32_t CYCCNT;
855 __IOM uint32_t CPICNT;
856 __IOM uint32_t EXCCNT;
857 __IOM uint32_t SLEEPCNT;
858 __IOM uint32_t LSUCNT;
859 __IOM uint32_t FOLDCNT;
860 __IM uint32_t PCSR;
861 __IOM uint32_t COMP0;
862 __IOM uint32_t MASK0;
863 __IOM uint32_t FUNCTION0;
864 uint32_t RESERVED0[1U];
865 __IOM uint32_t COMP1;
866 __IOM uint32_t MASK1;
867 __IOM uint32_t FUNCTION1;
868 uint32_t RESERVED1[1U];
869 __IOM uint32_t COMP2;
870 __IOM uint32_t MASK2;
871 __IOM uint32_t FUNCTION2;
872 uint32_t RESERVED2[1U];
873 __IOM uint32_t COMP3;
874 __IOM uint32_t MASK3;
875 __IOM uint32_t FUNCTION3;
876} DWT_Type;
877
878/* DWT Control Register Definitions */
879#define DWT_CTRL_NUMCOMP_Pos 28U
880#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos)
882#define DWT_CTRL_NOTRCPKT_Pos 27U
883#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos)
885#define DWT_CTRL_NOEXTTRIG_Pos 26U
886#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos)
888#define DWT_CTRL_NOCYCCNT_Pos 25U
889#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos)
891#define DWT_CTRL_NOPRFCNT_Pos 24U
892#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos)
894#define DWT_CTRL_CYCEVTENA_Pos 22U
895#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos)
897#define DWT_CTRL_FOLDEVTENA_Pos 21U
898#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos)
900#define DWT_CTRL_LSUEVTENA_Pos 20U
901#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos)
903#define DWT_CTRL_SLEEPEVTENA_Pos 19U
904#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos)
906#define DWT_CTRL_EXCEVTENA_Pos 18U
907#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos)
909#define DWT_CTRL_CPIEVTENA_Pos 17U
910#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos)
912#define DWT_CTRL_EXCTRCENA_Pos 16U
913#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos)
915#define DWT_CTRL_PCSAMPLENA_Pos 12U
916#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos)
918#define DWT_CTRL_SYNCTAP_Pos 10U
919#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos)
921#define DWT_CTRL_CYCTAP_Pos 9U
922#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos)
924#define DWT_CTRL_POSTINIT_Pos 5U
925#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos)
927#define DWT_CTRL_POSTPRESET_Pos 1U
928#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos)
930#define DWT_CTRL_CYCCNTENA_Pos 0U
931#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/)
933/* DWT CPI Count Register Definitions */
934#define DWT_CPICNT_CPICNT_Pos 0U
935#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/)
937/* DWT Exception Overhead Count Register Definitions */
938#define DWT_EXCCNT_EXCCNT_Pos 0U
939#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/)
941/* DWT Sleep Count Register Definitions */
942#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U
943#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/)
945/* DWT LSU Count Register Definitions */
946#define DWT_LSUCNT_LSUCNT_Pos 0U
947#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/)
949/* DWT Folded-instruction Count Register Definitions */
950#define DWT_FOLDCNT_FOLDCNT_Pos 0U
951#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/)
953/* DWT Comparator Mask Register Definitions */
954#define DWT_MASK_MASK_Pos 0U
955#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/)
957/* DWT Comparator Function Register Definitions */
958#define DWT_FUNCTION_MATCHED_Pos 24U
959#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos)
961#define DWT_FUNCTION_DATAVADDR1_Pos 16U
962#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos)
964#define DWT_FUNCTION_DATAVADDR0_Pos 12U
965#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos)
967#define DWT_FUNCTION_DATAVSIZE_Pos 10U
968#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos)
970#define DWT_FUNCTION_LNK1ENA_Pos 9U
971#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos)
973#define DWT_FUNCTION_DATAVMATCH_Pos 8U
974#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos)
976#define DWT_FUNCTION_CYCMATCH_Pos 7U
977#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos)
979#define DWT_FUNCTION_EMITRANGE_Pos 5U
980#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos)
982#define DWT_FUNCTION_FUNCTION_Pos 0U
983#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /* end of group CMSIS_DWT */
986
987
998typedef struct
999{
1000 __IM uint32_t SSPSR;
1001 __IOM uint32_t CSPSR;
1002 uint32_t RESERVED0[2U];
1003 __IOM uint32_t ACPR;
1004 uint32_t RESERVED1[55U];
1005 __IOM uint32_t SPPR;
1006 uint32_t RESERVED2[131U];
1007 __IM uint32_t FFSR;
1008 __IOM uint32_t FFCR;
1009 __IM uint32_t FSCR;
1010 uint32_t RESERVED3[759U];
1011 __IM uint32_t TRIGGER;
1012 __IM uint32_t FIFO0;
1013 __IM uint32_t ITATBCTR2;
1014 uint32_t RESERVED4[1U];
1015 __IM uint32_t ITATBCTR0;
1016 __IM uint32_t FIFO1;
1017 __IOM uint32_t ITCTRL;
1018 uint32_t RESERVED5[39U];
1019 __IOM uint32_t CLAIMSET;
1020 __IOM uint32_t CLAIMCLR;
1021 uint32_t RESERVED7[8U];
1022 __IM uint32_t DEVID;
1023 __IM uint32_t DEVTYPE;
1024} TPI_Type;
1025
1026/* TPI Asynchronous Clock Prescaler Register Definitions */
1027#define TPI_ACPR_PRESCALER_Pos 0U
1028#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/)
1030/* TPI Selected Pin Protocol Register Definitions */
1031#define TPI_SPPR_TXMODE_Pos 0U
1032#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/)
1034/* TPI Formatter and Flush Status Register Definitions */
1035#define TPI_FFSR_FtNonStop_Pos 3U
1036#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos)
1038#define TPI_FFSR_TCPresent_Pos 2U
1039#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos)
1041#define TPI_FFSR_FtStopped_Pos 1U
1042#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos)
1044#define TPI_FFSR_FlInProg_Pos 0U
1045#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/)
1047/* TPI Formatter and Flush Control Register Definitions */
1048#define TPI_FFCR_TrigIn_Pos 8U
1049#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos)
1051#define TPI_FFCR_EnFCont_Pos 1U
1052#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos)
1054/* TPI TRIGGER Register Definitions */
1055#define TPI_TRIGGER_TRIGGER_Pos 0U
1056#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/)
1058/* TPI Integration ETM Data Register Definitions (FIFO0) */
1059#define TPI_FIFO0_ITM_ATVALID_Pos 29U
1060#define TPI_FIFO0_ITM_ATVALID_Msk (0x1UL << TPI_FIFO0_ITM_ATVALID_Pos)
1062#define TPI_FIFO0_ITM_bytecount_Pos 27U
1063#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos)
1065#define TPI_FIFO0_ETM_ATVALID_Pos 26U
1066#define TPI_FIFO0_ETM_ATVALID_Msk (0x1UL << TPI_FIFO0_ETM_ATVALID_Pos)
1068#define TPI_FIFO0_ETM_bytecount_Pos 24U
1069#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos)
1071#define TPI_FIFO0_ETM2_Pos 16U
1072#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos)
1074#define TPI_FIFO0_ETM1_Pos 8U
1075#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos)
1077#define TPI_FIFO0_ETM0_Pos 0U
1078#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/)
1080/* TPI ITATBCTR2 Register Definitions */
1081#define TPI_ITATBCTR2_ATREADY2_Pos 0U
1082#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/)
1084#define TPI_ITATBCTR2_ATREADY1_Pos 0U
1085#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/)
1087/* TPI Integration ITM Data Register Definitions (FIFO1) */
1088#define TPI_FIFO1_ITM_ATVALID_Pos 29U
1089#define TPI_FIFO1_ITM_ATVALID_Msk (0x1UL << TPI_FIFO1_ITM_ATVALID_Pos)
1091#define TPI_FIFO1_ITM_bytecount_Pos 27U
1092#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos)
1094#define TPI_FIFO1_ETM_ATVALID_Pos 26U
1095#define TPI_FIFO1_ETM_ATVALID_Msk (0x1UL << TPI_FIFO1_ETM_ATVALID_Pos)
1097#define TPI_FIFO1_ETM_bytecount_Pos 24U
1098#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos)
1100#define TPI_FIFO1_ITM2_Pos 16U
1101#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos)
1103#define TPI_FIFO1_ITM1_Pos 8U
1104#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos)
1106#define TPI_FIFO1_ITM0_Pos 0U
1107#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/)
1109/* TPI ITATBCTR0 Register Definitions */
1110#define TPI_ITATBCTR0_ATREADY2_Pos 0U
1111#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/)
1113#define TPI_ITATBCTR0_ATREADY1_Pos 0U
1114#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/)
1116/* TPI Integration Mode Control Register Definitions */
1117#define TPI_ITCTRL_Mode_Pos 0U
1118#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/)
1120/* TPI DEVID Register Definitions */
1121#define TPI_DEVID_NRZVALID_Pos 11U
1122#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos)
1124#define TPI_DEVID_MANCVALID_Pos 10U
1125#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos)
1127#define TPI_DEVID_PTINVALID_Pos 9U
1128#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos)
1130#define TPI_DEVID_MinBufSz_Pos 6U
1131#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos)
1133#define TPI_DEVID_AsynClkIn_Pos 5U
1134#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos)
1136#define TPI_DEVID_NrTraceInput_Pos 0U
1137#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/)
1139/* TPI DEVTYPE Register Definitions */
1140#define TPI_DEVTYPE_SubType_Pos 4U
1141#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/)
1143#define TPI_DEVTYPE_MajorType_Pos 0U
1144#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /* end of group CMSIS_TPI */
1147
1148
1149#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
1160typedef struct
1161{
1162 __IM uint32_t TYPE;
1163 __IOM uint32_t CTRL;
1164 __IOM uint32_t RNR;
1165 __IOM uint32_t RBAR;
1166 __IOM uint32_t RASR;
1167 __IOM uint32_t RBAR_A1;
1168 __IOM uint32_t RASR_A1;
1169 __IOM uint32_t RBAR_A2;
1170 __IOM uint32_t RASR_A2;
1171 __IOM uint32_t RBAR_A3;
1172 __IOM uint32_t RASR_A3;
1173} MPU_Type;
1174
1175#define MPU_TYPE_RALIASES 4U
1176
1177/* MPU Type Register Definitions */
1178#define MPU_TYPE_IREGION_Pos 16U
1179#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos)
1181#define MPU_TYPE_DREGION_Pos 8U
1182#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos)
1184#define MPU_TYPE_SEPARATE_Pos 0U
1185#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/)
1187/* MPU Control Register Definitions */
1188#define MPU_CTRL_PRIVDEFENA_Pos 2U
1189#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos)
1191#define MPU_CTRL_HFNMIENA_Pos 1U
1192#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos)
1194#define MPU_CTRL_ENABLE_Pos 0U
1195#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/)
1197/* MPU Region Number Register Definitions */
1198#define MPU_RNR_REGION_Pos 0U
1199#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/)
1201/* MPU Region Base Address Register Definitions */
1202#define MPU_RBAR_ADDR_Pos 5U
1203#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos)
1205#define MPU_RBAR_VALID_Pos 4U
1206#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos)
1208#define MPU_RBAR_REGION_Pos 0U
1209#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/)
1211/* MPU Region Attribute and Size Register Definitions */
1212#define MPU_RASR_ATTRS_Pos 16U
1213#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos)
1215#define MPU_RASR_XN_Pos 28U
1216#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos)
1218#define MPU_RASR_AP_Pos 24U
1219#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos)
1221#define MPU_RASR_TEX_Pos 19U
1222#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos)
1224#define MPU_RASR_S_Pos 18U
1225#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos)
1227#define MPU_RASR_C_Pos 17U
1228#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos)
1230#define MPU_RASR_B_Pos 16U
1231#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos)
1233#define MPU_RASR_SRD_Pos 8U
1234#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos)
1236#define MPU_RASR_SIZE_Pos 1U
1237#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos)
1239#define MPU_RASR_ENABLE_Pos 0U
1240#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/)
1243#endif
1244
1245
1256typedef struct
1257{
1258 __IOM uint32_t DHCSR;
1259 __OM uint32_t DCRSR;
1260 __IOM uint32_t DCRDR;
1261 __IOM uint32_t DEMCR;
1263
1264/* Debug Halting Control and Status Register Definitions */
1265#define CoreDebug_DHCSR_DBGKEY_Pos 16U
1266#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos)
1268#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U
1269#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos)
1271#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U
1272#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos)
1274#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U
1275#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos)
1277#define CoreDebug_DHCSR_S_SLEEP_Pos 18U
1278#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos)
1280#define CoreDebug_DHCSR_S_HALT_Pos 17U
1281#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos)
1283#define CoreDebug_DHCSR_S_REGRDY_Pos 16U
1284#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos)
1286#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U
1287#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos)
1289#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U
1290#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos)
1292#define CoreDebug_DHCSR_C_STEP_Pos 2U
1293#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos)
1295#define CoreDebug_DHCSR_C_HALT_Pos 1U
1296#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos)
1298#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U
1299#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/)
1301/* Debug Core Register Selector Register Definitions */
1302#define CoreDebug_DCRSR_REGWnR_Pos 16U
1303#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos)
1305#define CoreDebug_DCRSR_REGSEL_Pos 0U
1306#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/)
1308/* Debug Exception and Monitor Control Register Definitions */
1309#define CoreDebug_DEMCR_TRCENA_Pos 24U
1310#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos)
1312#define CoreDebug_DEMCR_MON_REQ_Pos 19U
1313#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos)
1315#define CoreDebug_DEMCR_MON_STEP_Pos 18U
1316#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos)
1318#define CoreDebug_DEMCR_MON_PEND_Pos 17U
1319#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos)
1321#define CoreDebug_DEMCR_MON_EN_Pos 16U
1322#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos)
1324#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U
1325#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos)
1327#define CoreDebug_DEMCR_VC_INTERR_Pos 9U
1328#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos)
1330#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U
1331#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos)
1333#define CoreDebug_DEMCR_VC_STATERR_Pos 7U
1334#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos)
1336#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U
1337#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos)
1339#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U
1340#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos)
1342#define CoreDebug_DEMCR_VC_MMERR_Pos 4U
1343#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos)
1345#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U
1346#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/)
1364#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk)
1365
1372#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos)
1373
1384/* Memory mapping of Core Hardware */
1385#define SCS_BASE (0xE000E000UL)
1386#define ITM_BASE (0xE0000000UL)
1387#define DWT_BASE (0xE0001000UL)
1388#define TPI_BASE (0xE0040000UL)
1389#define CoreDebug_BASE (0xE000EDF0UL)
1390#define SysTick_BASE (SCS_BASE + 0x0010UL)
1391#define NVIC_BASE (SCS_BASE + 0x0100UL)
1392#define SCB_BASE (SCS_BASE + 0x0D00UL)
1394#define SCnSCB ((SCnSCB_Type *) SCS_BASE )
1395#define SCB ((SCB_Type *) SCB_BASE )
1396#define SysTick ((SysTick_Type *) SysTick_BASE )
1397#define NVIC ((NVIC_Type *) NVIC_BASE )
1398#define ITM ((ITM_Type *) ITM_BASE )
1399#define DWT ((DWT_Type *) DWT_BASE )
1400#define TPI ((TPI_Type *) TPI_BASE )
1401#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE)
1403#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
1404 #define MPU_BASE (SCS_BASE + 0x0D90UL)
1405 #define MPU ((MPU_Type *) MPU_BASE )
1406#endif
1407
1418/* Capitalize ITM_TCR Register Definitions */
1419
1420/* ITM Trace Control Register Definitions */
1421#define ITM_TCR_TraceBusID_Pos (ITM_TCR_TRACEBUSID_Pos)
1422#define ITM_TCR_TraceBusID_Msk (ITM_TCR_TRACEBUSID_Msk)
1424#define ITM_TCR_TSPrescale_Pos (ITM_TCR_TSPRESCALE_Pos)
1425#define ITM_TCR_TSPrescale_Msk (ITM_TCR_TSPRESCALE_Msk)
1427/* ITM Lock Status Register Definitions */
1428#define ITM_LSR_ByteAcc_Pos (ITM_LSR_BYTEACC_Pos)
1429#define ITM_LSR_ByteAcc_Msk (ITM_LSR_BYTEACC_Msk)
1431#define ITM_LSR_Access_Pos (ITM_LSR_ACCESS_Pos)
1432#define ITM_LSR_Access_Msk (ITM_LSR_ACCESS_Msk)
1434#define ITM_LSR_Present_Pos (ITM_LSR_PRESENT_Pos)
1435#define ITM_LSR_Present_Msk (ITM_LSR_PRESENT_Msk)
1441/*******************************************************************************
1442 * Hardware Abstraction Layer
1443 Core Function Interface contains:
1444 - Core NVIC Functions
1445 - Core SysTick Functions
1446 - Core Debug Functions
1447 - Core Register Access Functions
1448 ******************************************************************************/
1455/* ########################## NVIC functions #################################### */
1463#ifdef CMSIS_NVIC_VIRTUAL
1464 #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
1465 #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
1466 #endif
1467 #include CMSIS_NVIC_VIRTUAL_HEADER_FILE
1468#else
1469 #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
1470 #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
1471 #define NVIC_EnableIRQ __NVIC_EnableIRQ
1472 #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ
1473 #define NVIC_DisableIRQ __NVIC_DisableIRQ
1474 #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ
1475 #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ
1476 #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ
1477 #define NVIC_GetActive __NVIC_GetActive
1478 #define NVIC_SetPriority __NVIC_SetPriority
1479 #define NVIC_GetPriority __NVIC_GetPriority
1480 #define NVIC_SystemReset __NVIC_SystemReset
1481#endif /* CMSIS_NVIC_VIRTUAL */
1482
1483#ifdef CMSIS_VECTAB_VIRTUAL
1484 #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
1485 #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
1486 #endif
1487 #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
1488#else
1489 #define NVIC_SetVector __NVIC_SetVector
1490 #define NVIC_GetVector __NVIC_GetVector
1491#endif /* (CMSIS_VECTAB_VIRTUAL) */
1492
1493#define NVIC_USER_IRQ_OFFSET 16
1494
1495
1496/* The following EXC_RETURN values are saved the LR on exception entry */
1497#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */
1498#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */
1499#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */
1500
1501
1511__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup)
1512{
1513 uint32_t reg_value;
1514 uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
1515
1516 reg_value = SCB->AIRCR; /* read old register configuration */
1517 reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */
1518 reg_value = (reg_value |
1519 ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
1520 (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */
1521 SCB->AIRCR = reg_value;
1522}
1523
1524
1530__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void)
1531{
1532 return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos));
1533}
1534
1535
1542__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn)
1543{
1544 if ((int32_t)(IRQn) >= 0)
1545 {
1546 __COMPILER_BARRIER();
1547 NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
1548 __COMPILER_BARRIER();
1549 }
1550}
1551
1552
1561__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn)
1562{
1563 if ((int32_t)(IRQn) >= 0)
1564 {
1565 return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
1566 }
1567 else
1568 {
1569 return(0U);
1570 }
1571}
1572
1573
1580__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn)
1581{
1582 if ((int32_t)(IRQn) >= 0)
1583 {
1584 NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
1585 __DSB();
1586 __ISB();
1587 }
1588}
1589
1590
1599__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn)
1600{
1601 if ((int32_t)(IRQn) >= 0)
1602 {
1603 return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
1604 }
1605 else
1606 {
1607 return(0U);
1608 }
1609}
1610
1611
1618__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn)
1619{
1620 if ((int32_t)(IRQn) >= 0)
1621 {
1622 NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
1623 }
1624}
1625
1626
1633__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn)
1634{
1635 if ((int32_t)(IRQn) >= 0)
1636 {
1637 NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL));
1638 }
1639}
1640
1641
1650__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)
1651{
1652 if ((int32_t)(IRQn) >= 0)
1653 {
1654 return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
1655 }
1656 else
1657 {
1658 return(0U);
1659 }
1660}
1661
1662
1672__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
1673{
1674 if ((int32_t)(IRQn) >= 0)
1675 {
1676 NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
1677 }
1678 else
1679 {
1680 SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL);
1681 }
1682}
1683
1684
1694__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn)
1695{
1696
1697 if ((int32_t)(IRQn) >= 0)
1698 {
1699 return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS)));
1700 }
1701 else
1702 {
1703 return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS)));
1704 }
1705}
1706
1707
1719__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority)
1720{
1721 uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
1722 uint32_t PreemptPriorityBits;
1723 uint32_t SubPriorityBits;
1724
1725 PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
1726 SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
1727
1728 return (
1729 ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) |
1730 ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL)))
1731 );
1732}
1733
1734
1746__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority)
1747{
1748 uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */
1749 uint32_t PreemptPriorityBits;
1750 uint32_t SubPriorityBits;
1751
1752 PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp);
1753 SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS));
1754
1755 *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL);
1756 *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL);
1757}
1758
1759
1769__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector)
1770{
1771 uint32_t *vectors = (uint32_t *)SCB->VTOR;
1772 vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector;
1773 /* ARM Application Note 321 states that the M3 does not require the architectural barrier */
1774}
1775
1776
1785__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
1786{
1787 uint32_t *vectors = (uint32_t *)SCB->VTOR;
1788 return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET];
1789}
1790
1791
1796__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void)
1797{
1798 __DSB(); /* Ensure all outstanding memory accesses included
1799 buffered write are completed before reset */
1800 SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |
1801 (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
1802 SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */
1803 __DSB(); /* Ensure completion of memory access */
1804
1805 for(;;) /* wait until reset */
1806 {
1807 __NOP();
1808 }
1809}
1810
1814/* ########################## MPU functions #################################### */
1815
1816#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U)
1817
1818#include "mpu_armv7.h"
1819
1820#endif
1821
1822
1823/* ########################## FPU functions #################################### */
1839__STATIC_INLINE uint32_t SCB_GetFPUType(void)
1840{
1841 return 0U; /* No FPU */
1842}
1843
1844
1849/* ################################## SysTick function ############################################ */
1857#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U)
1858
1870__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
1871{
1872 if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
1873 {
1874 return (1UL); /* Reload value impossible */
1875 }
1876
1877 SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */
1878 NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */
1879 SysTick->VAL = 0UL; /* Load the SysTick Counter Value */
1882 SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
1883 return (0UL); /* Function successful */
1884}
1885
1886#endif
1887
1892/* ##################################### Debug In/Output function ########################################### */
1900extern volatile int32_t ITM_RxBuffer;
1901#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U)
1912__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch)
1913{
1914 if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */
1915 ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */
1916 {
1917 while (ITM->PORT[0U].u32 == 0UL)
1918 {
1919 __NOP();
1920 }
1921 ITM->PORT[0U].u8 = (uint8_t)ch;
1922 }
1923 return (ch);
1924}
1925
1926
1933__STATIC_INLINE int32_t ITM_ReceiveChar (void)
1934{
1935 int32_t ch = -1; /* no character available */
1936
1938 {
1939 ch = ITM_RxBuffer;
1940 ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */
1941 }
1942
1943 return (ch);
1944}
1945
1946
1953__STATIC_INLINE int32_t ITM_CheckChar (void)
1954{
1955
1957 {
1958 return (0); /* no character available */
1959 }
1960 else
1961 {
1962 return (1); /* character available */
1963 }
1964}
1965
1971#ifdef __cplusplus
1972}
1973#endif
1974
1975#endif /* __CORE_CM3_H_DEPENDANT */
1976
1977#endif /* __CMSIS_GENERIC */
CMSIS compiler generic header file.
CMSIS Core(M) Version definitions.
#define SysTick_CTRL_ENABLE_Msk
Definition core_cm3.h:730
#define SysTick_LOAD_RELOAD_Msk
Definition core_cm3.h:734
#define ITM_TCR_ITMENA_Msk
Definition core_cm3.h:826
#define SCB_AIRCR_PRIGROUP_Msk
Definition core_cm3.h:479
#define SCB_AIRCR_VECTKEY_Msk
Definition core_cm3.h:470
#define SysTick_CTRL_TICKINT_Msk
Definition core_cm3.h:727
#define SysTick_CTRL_CLKSOURCE_Msk
Definition core_cm3.h:724
#define SCB_AIRCR_VECTKEY_Pos
Definition core_cm3.h:469
#define SCB
Definition core_cm3.h:1395
#define SCB_AIRCR_SYSRESETREQ_Msk
Definition core_cm3.h:482
#define ITM
Definition core_cm3.h:1398
#define NVIC
Definition core_cm3.h:1397
#define SCB_AIRCR_PRIGROUP_Pos
Definition core_cm3.h:478
#define SysTick
Definition core_cm3.h:1396
#define __ISB()
Instruction Synchronization Barrier.
#define __DSB()
Data 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.
__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn)
Get Active Interrupt.
__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 __NVIC_GetPriority(IRQn_Type IRQn)
Get Interrupt Priority.
#define __NVIC_GetPriorityGrouping()
Get Priority Grouping.
uint32_t N
Definition core_cm3.h:282
__IOM uint32_t MASK2
Definition core_cm3.h:870
__IM uint32_t FIFO1
Definition core_cm3.h:1016
volatile int32_t ITM_RxBuffer
uint32_t _reserved0
Definition core_cm3.h:220
uint32_t _reserved0
Definition core_cm3.h:273
uint32_t T
Definition core_cm3.h:276
__IOM uint32_t MASK3
Definition core_cm3.h:874
uint32_t Q
Definition core_cm3.h:278
__OM uint8_t u8
Definition core_cm3.h:767
uint32_t N
Definition core_cm3.h:225
uint32_t Z
Definition core_cm3.h:281
__OM uint16_t u16
Definition core_cm3.h:768
uint32_t V
Definition core_cm3.h:222
uint32_t V
Definition core_cm3.h:279
uint32_t C
Definition core_cm3.h:280
uint32_t Z
Definition core_cm3.h:224
__IOM uint32_t MASK0
Definition core_cm3.h:862
__IM uint32_t DFR
Definition core_cm3.h:401
uint32_t _reserved1
Definition core_cm3.h:325
__OM uint32_t u32
Definition core_cm3.h:769
uint32_t ISR
Definition core_cm3.h:254
__IM uint32_t FIFO0
Definition core_cm3.h:1012
uint32_t ICI_IT_1
Definition core_cm3.h:274
#define ITM_RXBUFFER_EMPTY
Definition core_cm3.h:1901
__IOM uint32_t MASK1
Definition core_cm3.h:866
__IM uint32_t ITATBCTR2
Definition core_cm3.h:1013
uint32_t Q
Definition core_cm3.h:221
__STATIC_INLINE int32_t ITM_ReceiveChar(void)
ITM Receive Character.
uint32_t _reserved0
Definition core_cm3.h:255
__STATIC_INLINE uint32_t ITM_SendChar(uint32_t ch)
ITM Send Character.
__IM uint32_t FSCR
Definition core_cm3.h:1009
uint32_t ISR
Definition core_cm3.h:272
uint32_t ICI_IT_2
Definition core_cm3.h:277
__STATIC_INLINE int32_t ITM_CheckChar(void)
ITM Check Character.
uint32_t _reserved1
Definition core_cm3.h:275
__IM uint32_t ADR
Definition core_cm3.h:402
uint32_t C
Definition core_cm3.h:223
Structure type to access the Core Debug Register (CoreDebug).
Structure type to access the Data Watchpoint and Trace Register (DWT).
Structure type to access the Instrumentation Trace Macrocell Register (ITM).
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 Control and ID Register not in the SCB.
Structure type to access the System Timer (SysTick).
Structure type to access the Trace Port Interface Register (TPI).
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).