From ee560a054dbce39893d14a2160bc803ac5b3980d Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 17 Jan 2024 06:50:33 +0000 Subject: [PATCH 01/41] improve the support for EventRecorder --- perf_counter.c | 24 +++++++++++++++++++++--- perf_counter.h | 25 ++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index 31bc2e8..7dc7abb 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -1,5 +1,5 @@ /**************************************************************************** -* Copyright 2022 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -180,8 +180,13 @@ volatile static int32_t s_nSystemUS = 0; volatile static int64_t s_lSystemClockCounts = 0; +PERF_NOINIT +volatile static int64_t s_lNoInitTimestamp; + /*============================ PROTOTYPES ====================================*/ +static int64_t get_no_init_timestamp(void); + /*============================ IMPLEMENTATION ================================*/ /*============================ INCLUDES ======================================*/ @@ -210,6 +215,7 @@ void user_code_insert_to_systick_handler(void) { uint32_t wLoad = SysTick->LOAD + 1; s_lSystemClockCounts += wLoad; + s_lNoInitTimestamp += wLoad; // update system ms counter do { @@ -313,7 +319,7 @@ void before_cycle_counter_reconfiguration(void) } s_lSystemClockCounts = get_system_ticks(); /* get the final cycle counter value */ - + s_lNoInitTimestamp = get_no_init_timestamp(); SysTick->LOAD = 0UL; SysTick->VAL = 0UL; /* clear the Current Value Register */ } @@ -390,6 +396,17 @@ int64_t get_system_ticks(void) return lTemp; } +static int64_t get_no_init_timestamp(void) +{ + int64_t lTemp = 0; + + __IRQ_SAFE { + lTemp = check_systick() + s_lNoInitTimestamp; + } + + return lTemp; +} + /*! \note the prototype of this clock() is different from the one defined in *! time.h. As clock_t is usually defined as unsigned int, it is *! not big enough in Cortex-M system to hold a time-stamp. clock() @@ -497,6 +514,7 @@ bool __perfc_is_time_out(int64_t lPeriod, int64_t *plTimestamp, bool bAutoReload uint32_t EventRecorderTimerSetup (void) { /* doing nothing at all */ + s_lNoInitTimestamp = 0; return 1; } @@ -511,7 +529,7 @@ uint32_t EventRecorderTimerGetFreq (void) /// \return timer count (32-bit) uint32_t EventRecorderTimerGetCount (void) { - return get_system_ticks(); + return get_no_init_timestamp(); } diff --git a/perf_counter.h b/perf_counter.h index 5d8eb0a..51469b1 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -1,5 +1,5 @@ /**************************************************************************** -* Copyright 2022 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -35,9 +35,9 @@ extern "C" { */ #define __PERF_COUNTER_VER_MAJOR__ 2 #define __PERF_COUNTER_VER_MINOR__ 2 -#define __PERF_COUNTER_VER_REVISE__ 4 +#define __PERF_COUNTER_VER_REVISE__ 5 -#define __PERF_COUNTER_VER_STR__ "" +#define __PERF_COUNTER_VER_STR__ "dev" #define __PER_COUNTER_VER__ (__PERF_COUNTER_VER_MAJOR__ * 10000ul \ +__PERF_COUNTER_VER_MINOR__ * 100ul \ @@ -134,6 +134,25 @@ extern "C" { # define UNUSED_PARAM(__VAR) (void)(__VAR) #endif +/*! + * \brief an attribute for static variables that no initialisation is required + * in the C startup process. + */ +#ifndef PERF_NOINIT +# if defined(__IS_COMPILER_ARM_COMPILER_5__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"),zero_init)) +# elif defined(__IS_COMPILER_ARM_COMPILER_6__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"))) +# elif defined(__IS_COMPILER_IAR__) +# define PERF_NOINIT __no_init +# elif (defined(__IS_COMPILER_GCC__) || defined(__IS_COMPILER_LLVM__)) && !defined(__APPLE__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"))) +# else +# define PERF_NOINIT +# endif +#endif + + #undef __CONNECT2 #undef __CONNECT3 #undef __CONNECT4 From 2604ef394bba0eb2fb073395cb89963392d50744 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 17 Jan 2024 07:05:27 +0000 Subject: [PATCH 02/41] add a global variable to observe Coremark score --- benchmark/coremark_port/core_main.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/benchmark/coremark_port/core_main.c b/benchmark/coremark_port/core_main.c index db5cd54..6b58136 100644 --- a/benchmark/coremark_port/core_main.c +++ b/benchmark/coremark_port/core_main.c @@ -104,6 +104,9 @@ char *mem_name[3] = { "Static", "Heap", "Stack" }; */ +__attribute__((used)) +volatile float fCoremarkScore = 0.0f; + #if MAIN_HAS_NOARGC MAIN_RETURN_TYPE coremark_main(void) @@ -409,6 +412,8 @@ for (i = 0; i < MULTITHREAD; i++) double dfResult = (double)((double)1000000 * (double)default_num_contexts*results[0].iterations / (double)total_time); + fCoremarkScore = (float)dfResult; + ee_printf( "CoreMark 1.0 : %f / %s %s", dfResult, COMPILER_VERSION, From 6232e88af438232b079044ddd55ecf1497512878 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 17 Jan 2024 07:35:59 +0000 Subject: [PATCH 03/41] Update core_main.c --- benchmark/coremark_port/core_main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/coremark_port/core_main.c b/benchmark/coremark_port/core_main.c index 6b58136..d8711fc 100644 --- a/benchmark/coremark_port/core_main.c +++ b/benchmark/coremark_port/core_main.c @@ -105,7 +105,7 @@ char *mem_name[3] = { "Static", "Heap", "Stack" }; */ __attribute__((used)) -volatile float fCoremarkScore = 0.0f; +volatile double dfCoremarkScore = 0.0f; #if MAIN_HAS_NOARGC MAIN_RETURN_TYPE @@ -412,7 +412,7 @@ for (i = 0; i < MULTITHREAD; i++) double dfResult = (double)((double)1000000 * (double)default_num_contexts*results[0].iterations / (double)total_time); - fCoremarkScore = (float)dfResult; + dfCoremarkScore = dfResult; ee_printf( "CoreMark 1.0 : %f / %s %s", dfResult, From 2d266becb3999a4ae6faee3dfe8407588f9dec9d Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 17 Jan 2024 09:04:20 +0000 Subject: [PATCH 04/41] reverse change --- perf_counter.c | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index 7dc7abb..1136930 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -180,12 +180,7 @@ volatile static int32_t s_nSystemUS = 0; volatile static int64_t s_lSystemClockCounts = 0; -PERF_NOINIT -volatile static int64_t s_lNoInitTimestamp; - - /*============================ PROTOTYPES ====================================*/ -static int64_t get_no_init_timestamp(void); /*============================ IMPLEMENTATION ================================*/ /*============================ INCLUDES ======================================*/ @@ -215,7 +210,6 @@ void user_code_insert_to_systick_handler(void) { uint32_t wLoad = SysTick->LOAD + 1; s_lSystemClockCounts += wLoad; - s_lNoInitTimestamp += wLoad; // update system ms counter do { @@ -319,7 +313,7 @@ void before_cycle_counter_reconfiguration(void) } s_lSystemClockCounts = get_system_ticks(); /* get the final cycle counter value */ - s_lNoInitTimestamp = get_no_init_timestamp(); + SysTick->LOAD = 0UL; SysTick->VAL = 0UL; /* clear the Current Value Register */ } @@ -396,17 +390,6 @@ int64_t get_system_ticks(void) return lTemp; } -static int64_t get_no_init_timestamp(void) -{ - int64_t lTemp = 0; - - __IRQ_SAFE { - lTemp = check_systick() + s_lNoInitTimestamp; - } - - return lTemp; -} - /*! \note the prototype of this clock() is different from the one defined in *! time.h. As clock_t is usually defined as unsigned int, it is *! not big enough in Cortex-M system to hold a time-stamp. clock() @@ -514,7 +497,6 @@ bool __perfc_is_time_out(int64_t lPeriod, int64_t *plTimestamp, bool bAutoReload uint32_t EventRecorderTimerSetup (void) { /* doing nothing at all */ - s_lNoInitTimestamp = 0; return 1; } @@ -529,7 +511,7 @@ uint32_t EventRecorderTimerGetFreq (void) /// \return timer count (32-bit) uint32_t EventRecorderTimerGetCount (void) { - return get_no_init_timestamp(); + return get_system_ticks(); } From 4d6f01ddd73bae7054ed30a7fdf4d29fb4360613 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Thu, 18 Jan 2024 18:20:21 +0000 Subject: [PATCH 05/41] Delete cmsis-pack/GorgonMeducer.perf_counter.1.9.10.pack --- .../GorgonMeducer.perf_counter.1.9.10.pack | Bin 551245 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cmsis-pack/GorgonMeducer.perf_counter.1.9.10.pack diff --git a/cmsis-pack/GorgonMeducer.perf_counter.1.9.10.pack b/cmsis-pack/GorgonMeducer.perf_counter.1.9.10.pack deleted file mode 100644 index 9c2aa65bfff651bf94266614a5d360eadf5bb4fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551245 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 From 4c6334ee4f6d35fc5a8e51655ab6c2fc016047f1 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 16:59:01 +0000 Subject: [PATCH 06/41] minor update --- perf_counter.c | 1 - perf_counter.h | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/perf_counter.c b/perf_counter.c index 1136930..1f59275 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -181,7 +181,6 @@ volatile static int32_t s_nSystemUS = 0; volatile static int64_t s_lSystemClockCounts = 0; /*============================ PROTOTYPES ====================================*/ - /*============================ IMPLEMENTATION ================================*/ /*============================ INCLUDES ======================================*/ diff --git a/perf_counter.h b/perf_counter.h index 51469b1..f13f926 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -134,6 +134,14 @@ extern "C" { # define UNUSED_PARAM(__VAR) (void)(__VAR) #endif +#ifndef MIN +# define MIN(__a, __b) ((__a) <= (__b) ? (__a) : (__b)) +#endif + +#ifndef MAX +# define MAX(__a, __b) ((__a) >= (__b) ? (__a) : (__b)) +#endif + /*! * \brief an attribute for static variables that no initialisation is required * in the C startup process. From f76481ba41bd3223578224f6f400ba6424946f7a Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 18:49:43 +0000 Subject: [PATCH 07/41] introduce porting layer --- GorgonMeducer.perf_counter.pdsc | 32 ++- example/RTE/Device/ARMCM0/ARMCM0_ac6.sct | 80 +++++++ example/RTE/Device/ARMCM0/startup_ARMCM0.c | 146 ++++++++++++ example/example.uvmpw | 3 +- example/example.uvoptx | 34 ++- example/example.uvprojx | 82 +++++-- example/gcc_example.uvoptx | 24 ++ example/gcc_example.uvprojx | 20 ++ gen_pack.sh | 3 + lib/libperf_counter_gcc.a | Bin 7816 -> 10118 bytes lib/perf_counter.h | 80 ++++--- lib/perf_counter.lib | Bin 20882 -> 25254 bytes perf_counter.c | 244 ++++++--------------- perf_counter.h | 49 ++--- perfc_port_default.c | 222 +++++++++++++++++++ perfc_port_default.h | 53 +++++ template/perfc_port_user.c | 105 +++++++++ template/perfc_port_user.h | 53 +++++ 18 files changed, 975 insertions(+), 255 deletions(-) create mode 100644 example/RTE/Device/ARMCM0/ARMCM0_ac6.sct create mode 100644 example/RTE/Device/ARMCM0/startup_ARMCM0.c create mode 100644 perfc_port_default.c create mode 100644 perfc_port_default.h create mode 100644 template/perfc_port_user.c create mode 100644 template/perfc_port_user.h diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index 3141cdc..86d6920 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -257,7 +257,7 @@ --> - + A dedicated performance counter for Cortex-M systick. @@ -275,11 +275,12 @@ #define __PERF_COUNTER_CFG_USE_SYSTICK_WRAPPER__ 1 - + A dedicated performance counter for Cortex-M systick. + @@ -295,17 +296,34 @@ - + A dedicated performance counter for Cortex-M systick. + #define __PERF_COUNTER__ 1 + + + A user define system timer + + + + + + + +#define __PERFC_USE_USER_CUSTOM_PORTING__ 1 +#define __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ 1 +#define __PERFC_CFG_PORTING_INCLUDE__ "perfc_port_user.h" + + + @@ -331,7 +349,7 @@ - + A Patch for RTX5 @@ -343,7 +361,7 @@ - + A Patch for FreeRTOS @@ -366,7 +384,7 @@ extern void __freertos_evr_on_task_switched_in(void *ptTCB, unsigned int uxTopPr - + A Patch for RT-Thread @@ -384,7 +402,7 @@ extern void __rt_thread_scheduler_hook(struct rt_thread *from, struct rt_thread - + A Patch for ThreadX diff --git a/example/RTE/Device/ARMCM0/ARMCM0_ac6.sct b/example/RTE/Device/ARMCM0/ARMCM0_ac6.sct new file mode 100644 index 0000000..5300b01 --- /dev/null +++ b/example/RTE/Device/ARMCM0/ARMCM0_ac6.sct @@ -0,0 +1,80 @@ +#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc +; command above MUST be in first line (no comment above!) + +/* +;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- +*/ + +/*--------------------- Flash Configuration ---------------------------------- +; Flash Configuration +; Flash Base Address <0x0-0xFFFFFFFF:8> +; Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __ROM_BASE 0x00000000 +#define __ROM_SIZE 0x00080000 + +/*--------------------- Embedded RAM Configuration --------------------------- +; RAM Configuration +; RAM Base Address <0x0-0xFFFFFFFF:8> +; RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __RAM_BASE 0x20000000 +#define __RAM_SIZE 0x00040000 + +/*--------------------- Stack / Heap Configuration --------------------------- +; Stack / Heap Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + *----------------------------------------------------------------------------*/ +#define __STACK_SIZE 0x00000200 +#define __HEAP_SIZE 0x00000C00 + +/* +;------------- <<< end of configuration section >>> --------------------------- +*/ + + +/*---------------------------------------------------------------------------- + User Stack & Heap boundary definition + *----------------------------------------------------------------------------*/ +#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ +#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ + + +/*---------------------------------------------------------------------------- + Scatter File Definitions definition + *----------------------------------------------------------------------------*/ +#define __RO_BASE __ROM_BASE +#define __RO_SIZE __ROM_SIZE + +#define __RW_BASE __RAM_BASE +#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) + + +LR_ROM __RO_BASE __RO_SIZE { ; load region size_region + ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + + RW_NOINIT __RW_BASE UNINIT __RW_SIZE { + *(.bss.noinit) + } + + RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + *(+RW +ZI) + } + +#if __HEAP_SIZE > 0 + ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap + } +#endif + + ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack + } +} diff --git a/example/RTE/Device/ARMCM0/startup_ARMCM0.c b/example/RTE/Device/ARMCM0/startup_ARMCM0.c new file mode 100644 index 0000000..fb32110 --- /dev/null +++ b/example/RTE/Device/ARMCM0/startup_ARMCM0.c @@ -0,0 +1,146 @@ +/****************************************************************************** + * @file startup_ARMCM0.c + * @brief CMSIS-Core(M) Device Startup File for a Cortex-M0 Device + * @version V2.0.3 + * @date 31. March 2020 + ******************************************************************************/ +/* + * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined (ARMCM0) + #include "ARMCM0.h" +#else + #error device not specified! +#endif + +/*---------------------------------------------------------------------------- + External References + *----------------------------------------------------------------------------*/ +extern uint32_t __INITIAL_SP; + +extern __NO_RETURN void __PROGRAM_START(void); + +/*---------------------------------------------------------------------------- + Internal References + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler (void); + void Default_Handler(void); + +/*---------------------------------------------------------------------------- + Exception / Interrupt Handler + *----------------------------------------------------------------------------*/ +/* Exceptions */ +void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void HardFault_Handler (void) __attribute__ ((weak)); +void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + +void Interrupt0_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt1_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt2_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt3_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt4_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt5_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt6_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt7_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt8_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); +void Interrupt9_Handler (void) __attribute__ ((weak, alias("Default_Handler"))); + + +/*---------------------------------------------------------------------------- + Exception / Interrupt Vector table + *----------------------------------------------------------------------------*/ + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" +#endif + +extern const VECTOR_TABLE_Type __VECTOR_TABLE[48]; + const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = { + (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* -14 NMI Handler */ + HardFault_Handler, /* -13 Hard Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* -5 SVCall Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + PendSV_Handler, /* -2 PendSV Handler */ + SysTick_Handler, /* -1 SysTick Handler */ + + /* Interrupts */ + Interrupt0_Handler, /* 0 Interrupt 0 */ + Interrupt1_Handler, /* 1 Interrupt 1 */ + Interrupt2_Handler, /* 2 Interrupt 2 */ + Interrupt3_Handler, /* 3 Interrupt 3 */ + Interrupt4_Handler, /* 4 Interrupt 4 */ + Interrupt5_Handler, /* 5 Interrupt 5 */ + Interrupt6_Handler, /* 6 Interrupt 6 */ + Interrupt7_Handler, /* 7 Interrupt 7 */ + Interrupt8_Handler, /* 8 Interrupt 8 */ + Interrupt9_Handler /* 9 Interrupt 9 */ + /* Interrupts 10..31 are left out */ +}; + +#if defined ( __GNUC__ ) +#pragma GCC diagnostic pop +#endif + +/*---------------------------------------------------------------------------- + Reset Handler called on controller reset + *----------------------------------------------------------------------------*/ +__NO_RETURN void Reset_Handler(void) +{ + SystemInit(); /* CMSIS System Initialization */ + __PROGRAM_START(); /* Enter PreMain (C library entry point) */ +} + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmissing-noreturn" +#endif + +/*---------------------------------------------------------------------------- + Hard Fault Handler + *----------------------------------------------------------------------------*/ +void HardFault_Handler(void) +{ + while(1); +} + +/*---------------------------------------------------------------------------- + Default Handler for Exceptions / Interrupts + *----------------------------------------------------------------------------*/ +void Default_Handler(void) +{ + while(1); +} + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop +#endif + diff --git a/example/example.uvmpw b/example/example.uvmpw index 3cb8598..56eb5bd 100644 --- a/example/example.uvmpw +++ b/example/example.uvmpw @@ -5,7 +5,7 @@

### uVision Project, (C) Keil Software
- WorkSpace + Y:\Work\git\perf_counter\example\example.uvmpw .\example.uvprojx @@ -15,7 +15,6 @@ .\gcc_example.uvprojx - 1 diff --git a/example/example.uvoptx b/example/example.uvoptx index 4e58ca8..9ab8e4b 100644 --- a/example/example.uvoptx +++ b/example/example.uvoptx @@ -75,7 +75,7 @@ 1 0 - 0 + 1 7 @@ -130,7 +130,7 @@ 0 DbgFM - -I -S"System Generator:FVP_MPS2_Cortex_M0_MDK" -L"armcortexm0ct" -O4102 -C0 -MC".\FVP\MPS2_Cortex-M\FVP_MPS2_Cortex-M0_MDK.exe" -MF -PF -MA + -I -S"System Generator:cpu_core" -L"armcortexm0ct" -O4102 -C0 -MC".\VHT\VHT_MPS2_Cortex-M0.exe" -MF -PF -MA 0 @@ -195,7 +195,7 @@ C:\Users\gabriel\AppData\Local\Arm\Packs\Keil\ARM_Compiler\1.7.2\EventRecorder.scvd - Keil.ARM_Compiler.1.7.2 + Keil::ARM_Compiler@1.7.2 1 @@ -204,7 +204,7 @@ 0 1 - 0 + 1 0 0 0 @@ -297,7 +297,7 @@ 1 0 - 1 + 0 7 @@ -777,6 +777,30 @@ 0 0 + + 2 + 8 + 1 + 0 + 0 + 0 + ..\perfc_port_default.c + perfc_port_default.c + 0 + 0 + + + 2 + 9 + 5 + 0 + 0 + 0 + ..\perfc_port_default.h + perfc_port_default.h + 0 + 0 + diff --git a/example/example.uvprojx b/example/example.uvprojx index bfde3e3..5a21f56 100644 --- a/example/example.uvprojx +++ b/example/example.uvprojx @@ -10,7 +10,7 @@ example_arm_compiler_6 0x4 ARM-ADS - 6210000::V6.21::.\ArmCompilerforEmbedded6.21 + 6210000::V6.21::ARMCLANG 1 @@ -513,6 +513,16 @@ 4 ..\lib\perf_counter.lib + + perfc_port_default.c + 1 + ..\perfc_port_default.c + + + perfc_port_default.h + 5 + ..\perfc_port_default.h + @@ -533,14 +543,14 @@ library 0x4 ARM-ADS - 6190000::V6.19::ARMCLANG + 6210000::V6.21::ARMCLANG 1 ARMCM0 ARM - ARM.CMSIS.5.9.0 - http://www.keil.com/pack/ + ARM.Cortex_DFP.1.0.0 + https://www.keil.com/pack/ IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0") CLOCK(12000000) ESEL ELITTLE @@ -860,7 +870,7 @@ 0 0 - + -Wno-undef @@ -1035,6 +1045,16 @@ + + perfc_port_default.c + 1 + ..\perfc_port_default.c + + + perfc_port_default.h + 5 + ..\perfc_port_default.h + @@ -1696,6 +1716,16 @@ 4 ..\lib\perf_counter.lib + + perfc_port_default.c + 1 + ..\perfc_port_default.c + + + perfc_port_default.h + 5 + ..\perfc_port_default.h + @@ -1757,17 +1787,27 @@ - + + + + + + + + + + + + + - - @@ -1798,20 +1838,36 @@ + + RTE\Device\ARMCM0\ARMCM0_ac6.sct + + + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.c + + + + + + + RTE\Device\ARMCM0\startup_ARMCM0.s - - - + RTE\Device\ARMCM0\system_ARMCM0.c - - + + diff --git a/example/gcc_example.uvoptx b/example/gcc_example.uvoptx index 6aff661..9c7c0b3 100644 --- a/example/gcc_example.uvoptx +++ b/example/gcc_example.uvoptx @@ -561,6 +561,30 @@ 0 0 + + 3 + 10 + 1 + 0 + 0 + 0 + ..\perfc_port_default.c + perfc_port_default.c + 0 + 0 + + + 3 + 11 + 5 + 0 + 0 + 0 + ..\perfc_port_default.h + perfc_port_default.h + 0 + 0 + diff --git a/example/gcc_example.uvprojx b/example/gcc_example.uvprojx index 5ef3c7e..acf8ed4 100644 --- a/example/gcc_example.uvprojx +++ b/example/gcc_example.uvprojx @@ -403,6 +403,16 @@ 4 ..\lib\libperf_counter_gcc.a + + perfc_port_default.c + 1 + ..\perfc_port_default.c + + + perfc_port_default.h + 5 + ..\perfc_port_default.h + @@ -852,6 +862,16 @@ + + perfc_port_default.c + 1 + ..\perfc_port_default.c + + + perfc_port_default.h + 5 + ..\perfc_port_default.h + diff --git a/gen_pack.sh b/gen_pack.sh index 4646060..102e884 100755 --- a/gen_pack.sh +++ b/gen_pack.sh @@ -33,6 +33,7 @@ DEFAULT_ARGS=(-c "v") documents os lib + template " # Specify file names to be added to pack base directory @@ -42,6 +43,8 @@ DEFAULT_ARGS=(-c "v") LICENSE perf_counter.c perf_counter.h + perfc_port_default.c + perfc_port_default.h README.md systick_wrapper_gcc.S systick_wrapper_gnu.s diff --git a/lib/libperf_counter_gcc.a b/lib/libperf_counter_gcc.a index fcf4f5a915f1076396044f20e9e6877e05f99a6e..e786c50e3df654c6e055e2ec859e90f39df6e19e 100644 GIT binary patch literal 10118 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 delta 3183 zcmb`Je{56N701tev0s8?2PaNqV<5cP`C&pxV^Wg9*ybOUEHN}yAR45wT$32RN1epW zk4c+WIi*mAmOo4`lgPAH9a&q%AMH98R&8WTfAJSp<5D!rT9K~pGS+sjL{(@t;hke& zPj6NK+pcuqxu5$z_niCVy=y<#J@xI>s$}bywzkdfTm0>++N@GBK2>!~dyZ9=Spc9G zz!cBbqN4!+d)@y32y(tc{#F6+Hv5Y=-J4wlJ{bR%xnV_qb!|LueN!$p@qn#La-Z+F ztts&4wXdz*-`w2V+N!FXH@CI&f0})f(+*rXfcf66@j(gLpfIvm`?)shR=Rq$9!a^{ zrm99>)2Hd$q-$UBoc@viM5yo`DSaelx^^~tGkWxveJU}3R==r#xlAGKjX0&Xn!VEp zl?@LbpxWoMo^4`4sCr9PM3RnY>l1@T{oQ4_| z?#@#*8GKqXD4=U4VI>WxrI|8UB-p?nVjnNhg#LkNk_s(fgGOc1sNGnWYTjLz)I^6A zacPN;+>Cfld6T@bgZGrb(`H?KRD%sG7W=eRNJ)pZJ_ZfuGC0F6`L$^z_j?LVH^On@-2-=XJjNkphfjz)!*FIvT;-MCV!K^d3~0e{Aw9> zG`Hgo;2Vv_W6`nLdj3`AcllQ5-lPvB%b2hlttzt61nk%*Emv|nUTgnh(o=a9<1ZVS z^hE zU>bFiuUplhEGqc#u~q|*M^E!GFHP5MS`lMDTHmVr45L8J++-xCgp zNEL+wj3Lis%_sONwo7q#c|L|5LoPyJO7H~o5OSm78RQuQKZ~3%c0369J$Af?4&`D% z8u@KxRq#j1UmA2XwrzM?d3_!7M&$g2T96+>rURl0;Y|w1kgbAgvL}(V6HcPTBzDY* z0kq{b+g~F4#DEu&^M!WgMda5E`d^SgL3W`=2|q(NV|G<=A!@bARf5+chmp&WlQf_m zJ9@DrARJnee}>#7xCi+ad0FK{{ndyd06lTWLgY{fKq(Y$Dv{y zcYt4AyPTRTpwkY)l`Vh{vdJ_m9WMV?(=kQ@i&YlwMNe-SNRa z`cQ0aJUWzs{{CnzdQk7@H>$e*d6>`#^&i1RVlX-$>rcc+5A_d>Obn05Mj@9WJTe*! z$43Sp;%DSt=eMcDa`Jwhr6mA>fAF$)3ayOGI6)Ryaar(n(ziqQ>md6%aTtB@-62ai zpo~APYsk{-$zq%?((eQK0of4#?u-5uaS-3mQ`Eo!FACujaTma6qW_MtbQe-!D_IQe zMoWI%$>R8(!tN&>{TNyFJ0$w2$OiD*5&fsg7U0+MJ0V;Y!a`QSl~X@{)Ncv?fEW{g zE*LNg=|yNMp^F%GpWpy-ICqiK&P)q_lI%W!b7b`g@mD|ymxS;IS?t$v_T+epY#3iI zeBsE_#YZcP6QlkU(f^F#KM1xeIX`p-O9x-7`K@eMri(qwwo-s4iC?Vs$lDdZR9h!K zzzgf@@p(^Oy}ZW3_tw=(`*{+f#=+0l)tMQF>f%@GyykP*YUDRodTrORmBLD2eSojD VuU0f0-joHr+3t}W9XwHA`EO=ES`7dI diff --git a/lib/perf_counter.h b/lib/perf_counter.h index 5d8eb0a..075fd12 100644 --- a/lib/perf_counter.h +++ b/lib/perf_counter.h @@ -1,5 +1,5 @@ /**************************************************************************** -* Copyright 2022 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * @@ -22,7 +22,12 @@ #include #include #include -#include "cmsis_compiler.h" + +#ifndef __PERFC_CFG_PORTING_INCLUDE__ +# include "perfc_port_default.h" +#else +# include __PERFC_CFG_PORTING_INCLUDE__ +#endif #ifdef __cplusplus extern "C" { @@ -34,10 +39,10 @@ extern "C" { * @{ */ #define __PERF_COUNTER_VER_MAJOR__ 2 -#define __PERF_COUNTER_VER_MINOR__ 2 -#define __PERF_COUNTER_VER_REVISE__ 4 +#define __PERF_COUNTER_VER_MINOR__ 3 +#define __PERF_COUNTER_VER_REVISE__ 0 -#define __PERF_COUNTER_VER_STR__ "" +#define __PERF_COUNTER_VER_STR__ "dev" #define __PER_COUNTER_VER__ (__PERF_COUNTER_VER_MAJOR__ * 10000ul \ +__PERF_COUNTER_VER_MINOR__ * 100ul \ @@ -134,6 +139,33 @@ extern "C" { # define UNUSED_PARAM(__VAR) (void)(__VAR) #endif +#ifndef MIN +# define MIN(__a, __b) ((__a) <= (__b) ? (__a) : (__b)) +#endif + +#ifndef MAX +# define MAX(__a, __b) ((__a) >= (__b) ? (__a) : (__b)) +#endif + +/*! + * \brief an attribute for static variables that no initialisation is required + * in the C startup process. + */ +#ifndef PERF_NOINIT +# if defined(__IS_COMPILER_ARM_COMPILER_5__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"),zero_init)) +# elif defined(__IS_COMPILER_ARM_COMPILER_6__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"))) +# elif defined(__IS_COMPILER_IAR__) +# define PERF_NOINIT __no_init +# elif (defined(__IS_COMPILER_GCC__) || defined(__IS_COMPILER_LLVM__)) && !defined(__APPLE__) +# define PERF_NOINIT __attribute__(( section( ".bss.noinit"))) +# else +# define PERF_NOINIT +# endif +#endif + + #undef __CONNECT2 #undef __CONNECT3 #undef __CONNECT4 @@ -265,20 +297,16 @@ extern "C" { #ifndef safe_atom_code # define safe_atom_code() \ - using( uint32_t SAFE_NAME(temp) = \ - ({ uint32_t SAFE_NAME(temp2)=__get_PRIMASK(); \ - __disable_irq(); \ - SAFE_NAME(temp2);}), \ - __set_PRIMASK(SAFE_NAME(temp))) + using( perfc_global_interrupt_status_t SAFE_NAME(temp) = \ + perfc_port_disable_global_interrupt(), \ + perfc_port_resume_global_interrupt(SAFE_NAME(temp))) #endif #ifndef __IRQ_SAFE # define __IRQ_SAFE \ - using( uint32_t SAFE_NAME(temp) = \ - ({ uint32_t SAFE_NAME(temp2)=__get_PRIMASK(); \ - __disable_irq(); \ - SAFE_NAME(temp2);}), \ - __set_PRIMASK(SAFE_NAME(temp))) + using( perfc_global_interrupt_status_t SAFE_NAME(temp) = \ + perfc_port_disable_global_interrupt(), \ + perfc_port_resume_global_interrupt(SAFE_NAME(temp))) #endif #ifndef __perf_counter_printf__ @@ -555,7 +583,6 @@ extern volatile int32_t g_nOffset; /*============================ PROTOTYPES ====================================*/ - /*! * \addtogroup gBasicTicks 1.1 Ticks APIs * \ingroup gBasic @@ -601,7 +628,7 @@ extern int64_t clock(void); /*! * \brief try to set a start pointer for the performance counter */ -__STATIC_INLINE +static inline void start_cycle_counter(void) { g_lLastTimeStamp = get_system_ticks(); @@ -612,7 +639,7 @@ void start_cycle_counter(void) * \note you can have multiple stop_cycle_counter following one start point * \return int32_t the elapsed cycle count */ -__STATIC_INLINE +static inline int64_t stop_cycle_counter(void) { int64_t lTemp = (get_system_ticks() - g_lLastTimeStamp); @@ -634,29 +661,29 @@ int64_t stop_cycle_counter(void) /*! * \brief get the elapsed milliseconds since perf_counter is initialised - * \return int32_t the elapsed milliseconds + * \return uint32_t the elapsed milliseconds */ -extern int32_t get_system_ms(void); +extern uint32_t get_system_ms(void); /*! * \brief get the elapsed microsecond since perf_counter is initialised - * \return int32_t the elapsed microsecond + * \return uint32_t the elapsed microsecond */ -extern int32_t get_system_us(void); +extern uint32_t get_system_us(void); /*! * \brief delay specified time in microsecond - * \param[in] nUs time in microsecond + * \param[in] wUs time in microsecond */ -extern void delay_us(int32_t nUs); +extern void delay_us(uint32_t wUs); /*! * \brief delay specified time in millisecond - * \param[in] nMs time in millisecond + * \param[in] wMs time in millisecond */ -extern void delay_ms(int32_t nMs); +extern void delay_ms(uint32_t nMs); /*! * \brief convert ticks of a reference timer to millisecond @@ -943,5 +970,4 @@ void coremark_main(void); #ifdef __cplusplus } #endif - #endif diff --git a/lib/perf_counter.lib b/lib/perf_counter.lib index dcbd9125fa77c234ff08492a7a049d6dfc1bb9c7..73258dfb62ebb87652ac311a4e6736f623593af3 100644 GIT binary patch literal 25254 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 J3N702zW^0=bj1Jw diff --git a/perf_counter.c b/perf_counter.c index 1f59275..096119f 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -48,114 +48,12 @@ # define PERF_CNT_DELAY_US_COMPENSATION 90 #endif - -/* IO definitions (access restrictions to peripheral registers) */ -#ifdef __cplusplus - #define __I volatile /*!< Defines 'read only' permissions */ -#else - #define __I volatile const /*!< Defines 'read only' permissions */ -#endif -#define __O volatile /*!< Defines 'write only' permissions */ -#define __IO volatile /*!< Defines 'read / write' permissions */ - -/* following defines should be used for structure members */ -#define __IM volatile const /*! Defines 'read only' structure member permissions */ -#define __OM volatile /*! Defines 'write only' structure member permissions */ -#define __IOM volatile /*! Defines 'read / write' structure member permissions */ - -/* Memory mapping of Core Hardware */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - -#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ - -/* SysTick Control / Status Register Definitions */ -#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ -#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ - -#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ -#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ - -#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ -#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ - -#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ -#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ - -/* SysTick Reload Register Definitions */ -#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ -#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ - -/* SysTick Current Register Definitions */ -#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ -#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ - -/* SysTick Calibration Register Definitions */ -#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ -#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ - -#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ -#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ - -#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ -#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ - -/*@} end of group CMSIS_SysTick */ - -#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ -#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ - -#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ -#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ - - #define MAGIC_WORD_AGENT_LIST_VALID 0x8492A53C #define MAGIC_WORD_CANARY 0xDEADBEEF /*============================ MACROFIED FUNCTIONS ===========================*/ /*============================ TYPES =========================================*/ -/*! - \brief Structure type to access the System Timer (SysTick). - */ -typedef struct -{ - __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ - __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ - __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ - __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ -} SysTick_Type; - -/*! - \brief Structure type to access the System Control Block (SCB). - */ -typedef struct -{ - __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ - __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ - __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ - __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ - __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ - __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ - __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ - __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ - __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ - __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ - __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ - __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ - __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ - __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ - __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ - __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ - __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ - __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ - uint32_t RESERVED0[5U]; - __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ -} SCB_Type; - struct __task_cycle_info_t { task_cycle_info_t tInfo; //!< cycle information int64_t lLastTimeStamp; //!< previous timestamp @@ -165,65 +63,61 @@ struct __task_cycle_info_t { /*============================ GLOBAL VARIABLES ==============================*/ -extern uint32_t SystemCoreClock; - /*============================ LOCAL VARIABLES ===============================*/ volatile int64_t g_lLastTimeStamp = 0; volatile static int64_t s_lOldTimestamp; volatile int32_t g_nOffset = 0; -volatile static int32_t s_nUSUnit = 1; -volatile static int32_t s_nMSUnit = 1; -volatile static int32_t s_nMSResidule = 0; -volatile static int32_t s_nUSResidule = 0; -volatile static int32_t s_nSystemMS = 0; -volatile static int32_t s_nSystemUS = 0; +volatile static uint32_t s_wUSUnit = 1; +volatile static uint32_t s_wMSUnit = 1; +volatile static uint32_t s_wMSResidule = 0; +volatile static uint32_t s_wUSResidule = 0; +volatile static uint32_t s_wSystemMS = 0; +volatile static uint32_t s_wSystemUS = 0; volatile static int64_t s_lSystemClockCounts = 0; /*============================ PROTOTYPES ====================================*/ -/*============================ IMPLEMENTATION ================================*/ -/*============================ INCLUDES ======================================*/ -__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) -{ - if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) - { - return (1UL); /* Reload value impossible */ - } +/* low level interface for porting */ +extern +uint32_t perfc_port_get_system_freq(void); +extern +uint32_t perfc_port_get_system_timer_top(void); +extern +bool perfc_port_is_system_timer_ovf_pending(void); +extern +void perfc_port_init_system_timer(void); +extern +uint32_t perfc_port_get_system_timer_elapsed(void); +extern +void perfc_port_clear_system_timer_ovf_pending(void); +extern +void perfc_port_stop_system_timer_counting(void); +extern +void perfc_port_clear_system_timer_counter(void); - //__IRQ_SAFE { - SysTick->CTRL = 0; - - SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ - //NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - //SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; - //} - return (0UL); /* Function successful */ -} +/*============================ IMPLEMENTATION ================================*/ +/*============================ INCLUDES ======================================*/ void user_code_insert_to_systick_handler(void) { - uint32_t wLoad = SysTick->LOAD + 1; + uint32_t wLoad = perfc_port_get_system_timer_top() + 1; s_lSystemClockCounts += wLoad; // update system ms counter do { - s_nMSResidule += wLoad; - int32_t nMS = s_nMSResidule / s_nMSUnit; - s_nMSResidule -= nMS * s_nMSUnit; - s_nSystemMS += nMS; + s_wMSResidule += wLoad; + uint32_t wMS = s_wMSResidule / s_wMSUnit; + s_wMSResidule -= wMS * s_wMSUnit; + s_wSystemMS += wMS; } while(0); // update system us counter do { - s_nUSResidule += wLoad; - int32_t nUS = s_nUSResidule / s_nUSUnit; - s_nUSResidule -= nUS * s_nUSUnit; - s_nSystemUS += nUS; + s_wUSResidule += wLoad; + uint32_t wUS = s_wUSResidule / s_wUSUnit; + s_wUSResidule -= wUS * s_wUSUnit; + s_wSystemUS += wUS; } while(0); } @@ -236,8 +130,9 @@ void __perf_os_patch_init(void) void update_perf_counter(void) { - s_nUSUnit = SystemCoreClock / 1000000ul; - s_nMSUnit = SystemCoreClock / 1000ul; + uint32_t wSystemFrequency = perfc_port_get_system_freq(); + s_wUSUnit = wSystemFrequency / 1000000ul; + s_wMSUnit = wSystemFrequency / 1000ul; __IRQ_SAFE { g_lLastTimeStamp = get_system_ticks(); @@ -245,20 +140,19 @@ void update_perf_counter(void) } } - void init_cycle_counter(bool bIsSysTickOccupied) { __IRQ_SAFE { if (!bIsSysTickOccupied) { - SysTick_Config(0x01000000); // use the longest period + perfc_port_init_system_timer(); // use the longest period } - SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; + perfc_port_clear_system_timer_ovf_pending(); } update_perf_counter(); s_lSystemClockCounts = 0; // reset system cycle counter - s_nSystemMS = 0; // reset system millisecond counter - s_nSystemUS = 0; // reset system microsecond counter + s_wSystemMS = 0; // reset system millisecond counter + s_wSystemUS = 0; // reset system microsecond counter __perf_os_patch_init(); } @@ -267,9 +161,10 @@ void init_cycle_counter(bool bIsSysTickOccupied) * hence SysTick-LOAD and (SCB->ICSR & SCB_ICSR_PENDSTSET_Msk) * won't change. */ -__STATIC_INLINE int32_t check_systick(void) +__STATIC_INLINE uint32_t check_systick(void) { - int32_t nTemp = (int32_t)SysTick->LOAD - (int32_t)SysTick->VAL; + uint32_t wLoad = perfc_port_get_system_timer_top() + 1; + uint32_t wTemp = perfc_port_get_system_timer_elapsed(); /* Since we cannot stop counting temporarily, there are several * conditions which we should take into consideration: @@ -291,35 +186,32 @@ __STATIC_INLINE int32_t check_systick(void) * equals to) PERF_CNT_COMPENSATION_THRESHOLD. * The following code implements an equivalent logic. */ - if (SCB->ICSR & SCB_ICSR_PENDSTSET_Msk){ - if (((int32_t)SysTick->LOAD - nTemp) >= PERF_CNT_COMPENSATION_THRESHOLD) { - nTemp += SysTick->LOAD + 1; + if (perfc_port_is_system_timer_ovf_pending()){ + if ((wLoad - wTemp) >= PERF_CNT_COMPENSATION_THRESHOLD) { + wTemp += wLoad; } } - return nTemp; + return wTemp; } void before_cycle_counter_reconfiguration(void) { __IRQ_SAFE { - SysTick->CTRL = 0; /* disable SysTick first */ + perfc_port_stop_system_timer_counting(); - if (SCB->ICSR & SCB_ICSR_PENDSTSET_Msk) { /* pending SysTick exception */ - SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; /* clear pending bit */ + if (perfc_port_is_system_timer_ovf_pending()) { + perfc_port_clear_system_timer_ovf_pending(); /* clear pending bit */ user_code_insert_to_systick_handler(); /* manually handle exception */ } s_lSystemClockCounts = get_system_ticks(); /* get the final cycle counter value */ - SysTick->LOAD = 0UL; - SysTick->VAL = 0UL; /* clear the Current Value Register */ + perfc_port_clear_system_timer_counter(); } } - - __attribute__((constructor)) void __perf_counter_init(void) { @@ -327,9 +219,9 @@ void __perf_counter_init(void) } -void delay_us(int32_t nUs) +void delay_us(uint32_t wUs) { - int64_t lUs = (int64_t)nUs * (int64_t)s_nUSUnit; + int64_t lUs = (int64_t)wUs * (int64_t)s_wUSUnit; int32_t iCompensate = g_nOffset > PERF_CNT_DELAY_US_COMPENSATION ? g_nOffset : PERF_CNT_DELAY_US_COMPENSATION; @@ -345,9 +237,9 @@ void delay_us(int32_t nUs) } -void delay_ms(int32_t nMs) +void delay_ms(uint32_t wMs) { - int64_t lUs = (int64_t)nMs * (int64_t)s_nMSUnit; + int64_t lUs = (int64_t)wMs * (int64_t)s_wMSUnit; int32_t iCompensate = g_nOffset > PERF_CNT_DELAY_US_COMPENSATION ? g_nOffset : PERF_CNT_DELAY_US_COMPENSATION; @@ -419,47 +311,47 @@ int64_t clock(void) return get_system_ticks(); } -int32_t get_system_ms(void) +uint32_t get_system_ms(void) { - int32_t nTemp = 0; + uint32_t nTemp = 0; __IRQ_SAFE { - nTemp = s_nSystemMS + (check_systick() + s_nMSResidule) / s_nMSUnit; + nTemp = s_wSystemMS + (check_systick() + s_wMSResidule) / s_wMSUnit; } return nTemp; } -int32_t get_system_us(void) +uint32_t get_system_us(void) { - int32_t nTemp = 0; + uint32_t wTemp = 0; __IRQ_SAFE { - nTemp = s_nSystemUS + (check_systick() + s_nUSResidule) / s_nUSUnit; + wTemp = s_wSystemUS + (check_systick() + s_wUSResidule) / s_wUSUnit; } - return nTemp; + return wTemp; } int64_t perfc_convert_ticks_to_ms(int64_t lTick) { - return lTick / (int64_t)s_nMSUnit; + return lTick / (int64_t)s_wMSUnit; } int64_t perfc_convert_ms_to_ticks(uint32_t wMS) { - int64_t lResult = (int64_t)s_nMSUnit * (int64_t)wMS; + int64_t lResult = (int64_t)s_wMSUnit * (int64_t)wMS; return lResult ? lResult : 1; } int64_t perfc_convert_ticks_to_us(int64_t lTick) { - return lTick / (int64_t)s_nUSUnit; + return lTick / (int64_t)s_wUSUnit; } int64_t perfc_convert_us_to_ticks(uint32_t wMS) { - int64_t lResult = (int64_t)s_nUSUnit * (int64_t)wMS; + int64_t lResult = (int64_t)s_wUSUnit * (int64_t)wMS; return lResult ? lResult : 1; } @@ -503,7 +395,7 @@ uint32_t EventRecorderTimerSetup (void) /// \return timer frequency in Hz uint32_t EventRecorderTimerGetFreq (void) { - return SystemCoreClock; + return perfc_port_get_system_freq(); } /// Get timer count. diff --git a/perf_counter.h b/perf_counter.h index f13f926..075fd12 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -22,7 +22,12 @@ #include #include #include -#include "cmsis_compiler.h" + +#ifndef __PERFC_CFG_PORTING_INCLUDE__ +# include "perfc_port_default.h" +#else +# include __PERFC_CFG_PORTING_INCLUDE__ +#endif #ifdef __cplusplus extern "C" { @@ -34,8 +39,8 @@ extern "C" { * @{ */ #define __PERF_COUNTER_VER_MAJOR__ 2 -#define __PERF_COUNTER_VER_MINOR__ 2 -#define __PERF_COUNTER_VER_REVISE__ 5 +#define __PERF_COUNTER_VER_MINOR__ 3 +#define __PERF_COUNTER_VER_REVISE__ 0 #define __PERF_COUNTER_VER_STR__ "dev" @@ -292,20 +297,16 @@ extern "C" { #ifndef safe_atom_code # define safe_atom_code() \ - using( uint32_t SAFE_NAME(temp) = \ - ({ uint32_t SAFE_NAME(temp2)=__get_PRIMASK(); \ - __disable_irq(); \ - SAFE_NAME(temp2);}), \ - __set_PRIMASK(SAFE_NAME(temp))) + using( perfc_global_interrupt_status_t SAFE_NAME(temp) = \ + perfc_port_disable_global_interrupt(), \ + perfc_port_resume_global_interrupt(SAFE_NAME(temp))) #endif #ifndef __IRQ_SAFE # define __IRQ_SAFE \ - using( uint32_t SAFE_NAME(temp) = \ - ({ uint32_t SAFE_NAME(temp2)=__get_PRIMASK(); \ - __disable_irq(); \ - SAFE_NAME(temp2);}), \ - __set_PRIMASK(SAFE_NAME(temp))) + using( perfc_global_interrupt_status_t SAFE_NAME(temp) = \ + perfc_port_disable_global_interrupt(), \ + perfc_port_resume_global_interrupt(SAFE_NAME(temp))) #endif #ifndef __perf_counter_printf__ @@ -582,7 +583,6 @@ extern volatile int32_t g_nOffset; /*============================ PROTOTYPES ====================================*/ - /*! * \addtogroup gBasicTicks 1.1 Ticks APIs * \ingroup gBasic @@ -628,7 +628,7 @@ extern int64_t clock(void); /*! * \brief try to set a start pointer for the performance counter */ -__STATIC_INLINE +static inline void start_cycle_counter(void) { g_lLastTimeStamp = get_system_ticks(); @@ -639,7 +639,7 @@ void start_cycle_counter(void) * \note you can have multiple stop_cycle_counter following one start point * \return int32_t the elapsed cycle count */ -__STATIC_INLINE +static inline int64_t stop_cycle_counter(void) { int64_t lTemp = (get_system_ticks() - g_lLastTimeStamp); @@ -661,29 +661,29 @@ int64_t stop_cycle_counter(void) /*! * \brief get the elapsed milliseconds since perf_counter is initialised - * \return int32_t the elapsed milliseconds + * \return uint32_t the elapsed milliseconds */ -extern int32_t get_system_ms(void); +extern uint32_t get_system_ms(void); /*! * \brief get the elapsed microsecond since perf_counter is initialised - * \return int32_t the elapsed microsecond + * \return uint32_t the elapsed microsecond */ -extern int32_t get_system_us(void); +extern uint32_t get_system_us(void); /*! * \brief delay specified time in microsecond - * \param[in] nUs time in microsecond + * \param[in] wUs time in microsecond */ -extern void delay_us(int32_t nUs); +extern void delay_us(uint32_t wUs); /*! * \brief delay specified time in millisecond - * \param[in] nMs time in millisecond + * \param[in] wMs time in millisecond */ -extern void delay_ms(int32_t nMs); +extern void delay_ms(uint32_t nMs); /*! * \brief convert ticks of a reference timer to millisecond @@ -970,5 +970,4 @@ void coremark_main(void); #ifdef __cplusplus } #endif - #endif diff --git a/perfc_port_default.c b/perfc_port_default.c new file mode 100644 index 0000000..647df38 --- /dev/null +++ b/perfc_port_default.c @@ -0,0 +1,222 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ +#undef __PERF_COUNT_PLATFORM_SPECIFIC_HEADER__ + +#include +#include +#include +#include "cmsis_compiler.h" + +#define __IMPLEMENT_PERF_COUNTER +#include "perf_counter.h" + +#if defined(__IS_COMPILER_GCC__) +# pragma GCC diagnostic ignored "-Wattributes" +#endif + +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wreserved-identifier" +# pragma clang diagnostic ignored "-Wconditional-uninitialized" +# pragma clang diagnostic ignored "-Wcast-align" +# pragma clang diagnostic ignored "-Wmissing-prototypes" +#endif + + +/*============================ MACROS ========================================*/ + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#ifndef __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ +# define __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ 0 +#endif + +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ + +/*! + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/*! + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + + + +/*============================ GLOBAL VARIABLES ==============================*/ +extern uint32_t SystemCoreClock; + +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/*============================ IMPLEMENTATION ================================*/ +/*============================ INCLUDES ======================================*/ + +#if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ +__WEAK +void perfc_port_init_system_timer(void) +{ + __IRQ_SAFE { + SysTick->CTRL = 0; + + SysTick->LOAD = SysTick_LOAD_RELOAD_Msk; /* set reload register */ + //NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + //SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; + } +} + +__WEAK +uint32_t perfc_port_get_system_freq(void) +{ + return SystemCoreClock; +} + +__WEAK +bool perfc_port_is_system_timer_ovf_pending(void) +{ + return SCB->ICSR & SCB_ICSR_PENDSTSET_Msk; +} + +__WEAK +uint32_t perfc_port_get_system_timer_top(void) +{ + return SysTick->LOAD; +} + +__WEAK +uint32_t perfc_port_get_system_timer_elapsed(void) +{ + return (uint32_t)SysTick->LOAD - (uint32_t)SysTick->VAL; +} + +__WEAK +void perfc_port_clear_system_timer_ovf_pending(void) +{ + SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; +} + +__WEAK +void perfc_port_stop_system_timer_counting(void) +{ + SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; +} + +__WEAK +void perfc_port_clear_system_timer_counter(void) +{ + SysTick->VAL = 0UL; +} + +#endif + + diff --git a/perfc_port_default.h b/perfc_port_default.h new file mode 100644 index 0000000..e7fedac --- /dev/null +++ b/perfc_port_default.h @@ -0,0 +1,53 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ + +#ifndef __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ +# define __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ 0 +#endif + +#if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ + +#include "cmsis_compiler.h" + +/*============================ MACROS ========================================*/ +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ +typedef uint32_t perfc_global_interrupt_status_t; + +/*============================ GLOBAL VARIABLES ==============================*/ +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/*============================ IMPLEMENTATION ================================*/ + +__STATIC_INLINE +perfc_global_interrupt_status_t perfc_port_disable_global_interrupt(void) +{ + perfc_global_interrupt_status_t tStatus = __get_PRIMASK(); + __disable_irq(); + + return tStatus; +} + +__STATIC_INLINE +void perfc_port_resume_global_interrupt(perfc_global_interrupt_status_t tStatus) +{ + __set_PRIMASK(tStatus); +} + +#endif diff --git a/template/perfc_port_user.c b/template/perfc_port_user.c new file mode 100644 index 0000000..d47ce73 --- /dev/null +++ b/template/perfc_port_user.c @@ -0,0 +1,105 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ +#undef __PERF_COUNT_PLATFORM_SPECIFIC_HEADER__ + +#include +#include +#include + +#define __IMPLEMENT_PERF_COUNTER +#include "perf_counter.h" + +#if defined(__IS_COMPILER_GCC__) +# pragma GCC diagnostic ignored "-Wattributes" +#endif + +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wreserved-identifier" +# pragma clang diagnostic ignored "-Wconditional-uninitialized" +# pragma clang diagnostic ignored "-Wcast-align" +# pragma clang diagnostic ignored "-Wmissing-prototypes" +#endif + + +/*============================ MACROS ========================================*/ +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ +/*============================ GLOBAL VARIABLES ==============================*/ +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/*============================ IMPLEMENTATION ================================*/ +/*============================ INCLUDES ======================================*/ + +#if __PERFC_USE_USER_CUSTOM_PORTING__ + +void perfc_port_init_system_timer(void) +{ + __IRQ_SAFE { + /* Configure the system timer count with the longest possible period + * clear counter + * Clear overflow pending flag + * Enable interrupt if required + * start counting + */ + } +} + +uint32_t perfc_port_get_system_freq(void) +{ + /* return the system timer frequency */ + return 0; +} + +bool perfc_port_is_system_timer_ovf_pending(void) +{ + /* whether the system timer overflow is pending */ + return false; +} + +uint32_t perfc_port_get_system_timer_top(void) +{ + /* the top value of the counting */ + return 0; +} + +uint32_t perfc_port_get_system_timer_elapsed(void) +{ + /* the elapsed count number since last overflow */ + return 0; +} + +void perfc_port_clear_system_timer_ovf_pending(void) +{ + /* clear the overflow pending flag */ +} + +void perfc_port_stop_system_timer_counting(void) +{ + /* stop the system timer */ +} + +void perfc_port_clear_system_timer_counter(void) +{ + /* clear the system timer counter */ +} + +#endif + + diff --git a/template/perfc_port_user.h b/template/perfc_port_user.h new file mode 100644 index 0000000..5cc8477 --- /dev/null +++ b/template/perfc_port_user.h @@ -0,0 +1,53 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ + +#if __PERFC_USE_USER_CUSTOM_PORTING__ + +/*============================ MACROS ========================================*/ +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ +typedef uint32_t perfc_global_interrupt_status_t; + +/*============================ GLOBAL VARIABLES ==============================*/ +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/*============================ IMPLEMENTATION ================================*/ + +static +inline +perfc_global_interrupt_status_t perfc_port_disable_global_interrupt(void) +{ + perfc_global_interrupt_status_t tStatus; + + /* get global interrupt status */ + /* disable global interrupt */ + /* return the status */ + + return tStatus; + +} + +static +inline +void perfc_port_resume_global_interrupt(perfc_global_interrupt_status_t tStatus) +{ + /* resume the stored global interrupt status */ +} + +#endif \ No newline at end of file From e0c63f85165ca8cab737317946d73922e5862c2e Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 18:51:17 +0000 Subject: [PATCH 08/41] Update GorgonMeducer.perf_counter.pdsc --- GorgonMeducer.perf_counter.pdsc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index 86d6920..d8b672e 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -313,7 +313,7 @@ A user define system timer - + From b507d983a196d235b7196dfa106aeab6ce07bb2b Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 19:01:29 +0000 Subject: [PATCH 09/41] remove the library deploy mode --- GorgonMeducer.perf_counter.pdsc | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index d8b672e..a010887 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -257,24 +257,6 @@ --> - - A dedicated performance counter for Cortex-M systick. - - - - - - - -#define __PERF_COUNTER__ 1 - - - - - -#define __PERF_COUNTER_CFG_USE_SYSTICK_WRAPPER__ 1 - - A dedicated performance counter for Cortex-M systick. From 5abef7ed71f794cefdcc69f5ada5d978d78a5f0e Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 19:01:43 +0000 Subject: [PATCH 10/41] Update systick_wrapper_gnu.s --- systick_wrapper_gnu.s | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/systick_wrapper_gnu.s b/systick_wrapper_gnu.s index ee2dbca..54182ce 100644 --- a/systick_wrapper_gnu.s +++ b/systick_wrapper_gnu.s @@ -15,18 +15,17 @@ ;* * ;****************************************************************************/ - - .syntax unified - .arch armv6-m - +#if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ + .syntax unified + .arch armv6-m .eabi_attribute Tag_ABI_align_preserved, 1 .text .thumb .thumb_func - .align 2 - .globl $Sub$$SysTick_Handler - .type $Sub$$SysTick_Handler, %function + .align 2 + .globl $Sub$$SysTick_Handler + .type $Sub$$SysTick_Handler, %function $Sub$$SysTick_Handler: push {r4, r5} @@ -38,10 +37,10 @@ $Sub$$SysTick_Handler: pop {r4, r5} ldr R0, =$Super$$SysTick_Handler bx R0 - - .globl __ensure_systick_wrapper - .type __ensure_systick_wrapper, %function + .globl __ensure_systick_wrapper + .type __ensure_systick_wrapper, %function __ensure_systick_wrapper: bx lr +#endif \ No newline at end of file From fbfad9ac9c4e9b94b9c3393ba0328b2485aaeb0a Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 20 Jan 2024 19:03:22 +0000 Subject: [PATCH 11/41] Update systick_wrapper_gcc.S --- systick_wrapper_gcc.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/systick_wrapper_gcc.S b/systick_wrapper_gcc.S index 382aebc..2d13da1 100644 --- a/systick_wrapper_gcc.S +++ b/systick_wrapper_gcc.S @@ -15,6 +15,7 @@ ;* * ;****************************************************************************/ +#if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ .syntax unified .arch armv6-m @@ -42,3 +43,4 @@ __wrap_SysTick_Handler: __ensure_systick_wrapper: bx lr +#endif \ No newline at end of file From e964738dad401b8b50a46c6e8e428ddfbc3b8689 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Mon, 22 Jan 2024 13:48:48 +0000 Subject: [PATCH 12/41] improve resolution --- GorgonMeducer.perf_counter.pdsc | 4 +- perf_counter.c | 71 +++++++++++++++++---------------- perf_counter.h | 10 ++--- perfc_port_default.c | 12 ++++-- template/perfc_port_user.c | 10 +++-- 5 files changed, 58 insertions(+), 49 deletions(-) diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index a010887..54b5c00 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -294,8 +294,8 @@ A user define system timer - - + + diff --git a/perf_counter.c b/perf_counter.c index 096119f..0cb180d 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -71,8 +71,8 @@ volatile static uint32_t s_wUSUnit = 1; volatile static uint32_t s_wMSUnit = 1; volatile static uint32_t s_wMSResidule = 0; volatile static uint32_t s_wUSResidule = 0; -volatile static uint32_t s_wSystemMS = 0; -volatile static uint32_t s_wSystemUS = 0; +volatile static int64_t s_lSystemMS = 0; +volatile static int64_t s_lSystemUS = 0; volatile static int64_t s_lSystemClockCounts = 0; @@ -82,13 +82,13 @@ volatile static int64_t s_lSystemClockCounts = 0; extern uint32_t perfc_port_get_system_freq(void); extern -uint32_t perfc_port_get_system_timer_top(void); +int64_t perfc_port_get_system_timer_top(void); extern bool perfc_port_is_system_timer_ovf_pending(void); extern -void perfc_port_init_system_timer(void); +void perfc_port_init_system_timer(bool bTimerOccupied); extern -uint32_t perfc_port_get_system_timer_elapsed(void); +int64_t perfc_port_get_system_timer_elapsed(void); extern void perfc_port_clear_system_timer_ovf_pending(void); extern @@ -101,23 +101,28 @@ void perfc_port_clear_system_timer_counter(void); void user_code_insert_to_systick_handler(void) { - uint32_t wLoad = perfc_port_get_system_timer_top() + 1; - s_lSystemClockCounts += wLoad; + int64_t lLoad = perfc_port_get_system_timer_top() + 1; + s_lSystemClockCounts += lLoad; // update system ms counter do { - s_wMSResidule += wLoad; - uint32_t wMS = s_wMSResidule / s_wMSUnit; - s_wMSResidule -= wMS * s_wMSUnit; - s_wSystemMS += wMS; + int64_t lTemp = s_wMSResidule + lLoad; + + int64_t lMS = lTemp / s_wMSUnit; + s_lSystemMS += lMS; + s_wMSResidule = (uint32_t)((int64_t)lTemp - (int64_t)lMS * s_wMSUnit); + } while(0); // update system us counter do { - s_wUSResidule += wLoad; - uint32_t wUS = s_wUSResidule / s_wUSUnit; - s_wUSResidule -= wUS * s_wUSUnit; - s_wSystemUS += wUS; + int64_t lTemp = s_wUSResidule + lLoad; + + int64_t lUS = lTemp / s_wUSUnit; + s_lSystemUS += lUS; + + s_wUSResidule = (uint32_t)((int64_t)lTemp - (int64_t)lUS * s_wUSUnit); + } while(0); } @@ -143,16 +148,14 @@ void update_perf_counter(void) void init_cycle_counter(bool bIsSysTickOccupied) { __IRQ_SAFE { - if (!bIsSysTickOccupied) { - perfc_port_init_system_timer(); // use the longest period - } + perfc_port_init_system_timer(bIsSysTickOccupied); // use the longest period perfc_port_clear_system_timer_ovf_pending(); } update_perf_counter(); s_lSystemClockCounts = 0; // reset system cycle counter - s_wSystemMS = 0; // reset system millisecond counter - s_wSystemUS = 0; // reset system microsecond counter + s_lSystemMS = 0; // reset system millisecond counter + s_lSystemUS = 0; // reset system microsecond counter __perf_os_patch_init(); } @@ -161,10 +164,10 @@ void init_cycle_counter(bool bIsSysTickOccupied) * hence SysTick-LOAD and (SCB->ICSR & SCB_ICSR_PENDSTSET_Msk) * won't change. */ -__STATIC_INLINE uint32_t check_systick(void) +__STATIC_INLINE int64_t check_systick(void) { - uint32_t wLoad = perfc_port_get_system_timer_top() + 1; - uint32_t wTemp = perfc_port_get_system_timer_elapsed(); + int64_t lLoad = perfc_port_get_system_timer_top() + 1; + int64_t lTemp = perfc_port_get_system_timer_elapsed(); /* Since we cannot stop counting temporarily, there are several * conditions which we should take into consideration: @@ -187,12 +190,12 @@ __STATIC_INLINE uint32_t check_systick(void) * The following code implements an equivalent logic. */ if (perfc_port_is_system_timer_ovf_pending()){ - if ((wLoad - wTemp) >= PERF_CNT_COMPENSATION_THRESHOLD) { - wTemp += wLoad; + if ((lLoad - lTemp) >= PERF_CNT_COMPENSATION_THRESHOLD) { + lTemp += lLoad; } } - return wTemp; + return lTemp; } void before_cycle_counter_reconfiguration(void) @@ -311,26 +314,26 @@ int64_t clock(void) return get_system_ticks(); } -uint32_t get_system_ms(void) +int64_t get_system_ms(void) { - uint32_t nTemp = 0; + int64_t lTemp = 0; __IRQ_SAFE { - nTemp = s_wSystemMS + (check_systick() + s_wMSResidule) / s_wMSUnit; + lTemp = s_lSystemMS + ((check_systick() + (int64_t)s_wMSResidule) / s_wMSUnit); } - return nTemp; + return lTemp; } -uint32_t get_system_us(void) +int64_t get_system_us(void) { - uint32_t wTemp = 0; + int64_t lTemp = 0; __IRQ_SAFE { - wTemp = s_wSystemUS + (check_systick() + s_wUSResidule) / s_wUSUnit; + lTemp = s_lSystemUS + ((check_systick() + (int64_t)s_wUSResidule) / s_wUSUnit); } - return wTemp; + return lTemp; } int64_t perfc_convert_ticks_to_ms(int64_t lTick) diff --git a/perf_counter.h b/perf_counter.h index 075fd12..8b5ae26 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -661,17 +661,15 @@ int64_t stop_cycle_counter(void) /*! * \brief get the elapsed milliseconds since perf_counter is initialised - * \return uint32_t the elapsed milliseconds + * \return int64_t the elapsed milliseconds */ -extern uint32_t get_system_ms(void); +extern int64_t get_system_ms(void); /*! * \brief get the elapsed microsecond since perf_counter is initialised - * \return uint32_t the elapsed microsecond + * \return int64_t the elapsed microsecond */ -extern uint32_t get_system_us(void); - - +extern int64_t get_system_us(void); /*! * \brief delay specified time in microsecond diff --git a/perfc_port_default.c b/perfc_port_default.c index 647df38..374af83 100644 --- a/perfc_port_default.c +++ b/perfc_port_default.c @@ -160,8 +160,12 @@ extern uint32_t SystemCoreClock; #if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ __WEAK -void perfc_port_init_system_timer(void) +void perfc_port_init_system_timer(bool bTimerOccupied) { + if (bTimerOccupied) { + return ; + } + __IRQ_SAFE { SysTick->CTRL = 0; @@ -188,15 +192,15 @@ bool perfc_port_is_system_timer_ovf_pending(void) } __WEAK -uint32_t perfc_port_get_system_timer_top(void) +int64_t perfc_port_get_system_timer_top(void) { return SysTick->LOAD; } __WEAK -uint32_t perfc_port_get_system_timer_elapsed(void) +int64_t perfc_port_get_system_timer_elapsed(void) { - return (uint32_t)SysTick->LOAD - (uint32_t)SysTick->VAL; + return (int64_t)SysTick->LOAD - (uint32_t)SysTick->VAL; } __WEAK diff --git a/template/perfc_port_user.c b/template/perfc_port_user.c index d47ce73..5f4a64a 100644 --- a/template/perfc_port_user.c +++ b/template/perfc_port_user.c @@ -49,8 +49,12 @@ #if __PERFC_USE_USER_CUSTOM_PORTING__ -void perfc_port_init_system_timer(void) +void perfc_port_init_system_timer(bool bIsTimeOccupied) { + if (bIsTimeOccupied) { + return ; + } + __IRQ_SAFE { /* Configure the system timer count with the longest possible period * clear counter @@ -73,13 +77,13 @@ bool perfc_port_is_system_timer_ovf_pending(void) return false; } -uint32_t perfc_port_get_system_timer_top(void) +int64_t perfc_port_get_system_timer_top(void) { /* the top value of the counting */ return 0; } -uint32_t perfc_port_get_system_timer_elapsed(void) +int64_t perfc_port_get_system_timer_elapsed(void) { /* the elapsed count number since last overflow */ return 0; From de7e5067b95a7ba87a238758f327c288721a6969 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Mon, 22 Jan 2024 15:07:07 +0000 Subject: [PATCH 13/41] minor update --- GorgonMeducer.perf_counter.pdsc | 4 ++++ systick_wrapper_gnu.s | 7 +++++++ template/perfc_port_user.c | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index 54b5c00..842b0f9 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -297,6 +297,10 @@ + + +#define __RTE_PERFC_PORTING_USER_DEFINED__ 1 + diff --git a/systick_wrapper_gnu.s b/systick_wrapper_gnu.s index 54182ce..b2e0ac6 100644 --- a/systick_wrapper_gnu.s +++ b/systick_wrapper_gnu.s @@ -14,6 +14,11 @@ ;* limitations under the License. * ;* * ;****************************************************************************/ +#if defined(_RTE_) +# include "RTE_Components.h" +#endif + +#if !defined(__RTE_PERFC_PORTING_USER_DEFINED__) #if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ .syntax unified @@ -43,4 +48,6 @@ $Sub$$SysTick_Handler: __ensure_systick_wrapper: bx lr +#endif + #endif \ No newline at end of file diff --git a/template/perfc_port_user.c b/template/perfc_port_user.c index 5f4a64a..8111c85 100644 --- a/template/perfc_port_user.c +++ b/template/perfc_port_user.c @@ -44,6 +44,24 @@ /*============================ GLOBAL VARIABLES ==============================*/ /*============================ LOCAL VARIABLES ===============================*/ /*============================ PROTOTYPES ====================================*/ +/* low level interface for porting */ +extern +uint32_t perfc_port_get_system_freq(void); +extern +int64_t perfc_port_get_system_timer_top(void); +extern +bool perfc_port_is_system_timer_ovf_pending(void); +extern +void perfc_port_init_system_timer(bool bTimerOccupied); +extern +int64_t perfc_port_get_system_timer_elapsed(void); +extern +void perfc_port_clear_system_timer_ovf_pending(void); +extern +void perfc_port_stop_system_timer_counting(void); +extern +void perfc_port_clear_system_timer_counter(void); + /*============================ IMPLEMENTATION ================================*/ /*============================ INCLUDES ======================================*/ From f1b948a16cf36133f2c054972ab3db0d658c6ee2 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Mon, 22 Jan 2024 17:19:57 +0000 Subject: [PATCH 14/41] add PMU --- GorgonMeducer.perf_counter.pdsc | 35 +- perf_counter.c | 19 +- perf_counter.h | 4 +- perfc_port_pmu.c | 941 ++++++++++++++++++++++++++++++++ perfc_port_pmu.h | 49 ++ systick_wrapper_gnu.s | 2 +- 6 files changed, 1038 insertions(+), 12 deletions(-) create mode 100644 perfc_port_pmu.c create mode 100644 perfc_port_pmu.h diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index 842b0f9..b671636 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -174,7 +174,18 @@ Require Perf_Counter Core - + + + Require Perf_Counter Core + + + + + + + + + Compile Cortex-M Processors with GNU Tools for Arm Embedded Processors. @@ -291,7 +302,7 @@ - + A user define system timer @@ -311,6 +322,26 @@ + + Using the Performande Monitor Unit + + + + + + +#define __RTE_PERFC_PORTING_PMU__ 1 + + + + +#define __PERFC_USE_PMU_PORTING__ 1 +#define __PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ 1 +#define __PERFC_CFG_PORTING_INCLUDE__ "perfc_port_pmu.h" + + + + Coremark diff --git a/perf_counter.c b/perf_counter.c index 0cb180d..afca69e 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -73,6 +73,7 @@ volatile static uint32_t s_wMSResidule = 0; volatile static uint32_t s_wUSResidule = 0; volatile static int64_t s_lSystemMS = 0; volatile static int64_t s_lSystemUS = 0; +volatile static int64_t s_lEventRecorderOffset = 0; volatile static int64_t s_lSystemClockCounts = 0; @@ -239,22 +240,25 @@ void delay_us(uint32_t wUs) while(get_system_ticks() < lUs); } - +volatile int64_t observer; void delay_ms(uint32_t wMs) { - int64_t lUs = (int64_t)wMs * (int64_t)s_wMSUnit; + int64_t lMs = (int64_t)wMs * (int64_t)s_wMSUnit; int32_t iCompensate = g_nOffset > PERF_CNT_DELAY_US_COMPENSATION ? g_nOffset : PERF_CNT_DELAY_US_COMPENSATION; - if (lUs <= iCompensate) { + if (lMs <= iCompensate) { return ; } - lUs -= iCompensate; + lMs -= iCompensate; - lUs += get_system_ticks(); - while(get_system_ticks() < lUs); + lMs += get_system_ticks(); + do { + observer = get_system_ticks(); + } while(observer < lMs); + //while(get_system_ticks() < lUs); } __attribute__((noinline)) @@ -391,6 +395,7 @@ bool __perfc_is_time_out(int64_t lPeriod, int64_t *plTimestamp, bool bAutoReload uint32_t EventRecorderTimerSetup (void) { /* doing nothing at all */ + s_lEventRecorderOffset = get_system_ticks(); return 1; } @@ -405,7 +410,7 @@ uint32_t EventRecorderTimerGetFreq (void) /// \return timer count (32-bit) uint32_t EventRecorderTimerGetCount (void) { - return get_system_ticks(); + return get_system_ticks() - s_lEventRecorderOffset; } diff --git a/perf_counter.h b/perf_counter.h index 8b5ae26..82d410d 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -359,8 +359,8 @@ __asm(".global __ensure_systick_wrapper\n\t"); __perf_counter_printf__( \ "--------------------------------------------\r\n"); \ __perf_counter_printf__( \ - __STR " total cycle count: %ld [%016lx]\r\n", \ - (long)_, (long)_); \ + __STR " total cycle count: %lld [%016llx]\r\n", \ + _, _); \ } else { \ __VA_ARGS__ \ }; \ diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c new file mode 100644 index 0000000..3e9b803 --- /dev/null +++ b/perfc_port_pmu.c @@ -0,0 +1,941 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ +#undef __PERF_COUNT_PLATFORM_SPECIFIC_HEADER__ + +#include +#include +#include + +#define __IMPLEMENT_PERF_COUNTER +#include "perf_counter.h" + +#if defined(__IS_COMPILER_GCC__) +# pragma GCC diagnostic ignored "-Wattributes" +#endif + +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wreserved-identifier" +# pragma clang diagnostic ignored "-Wconditional-uninitialized" +# pragma clang diagnostic ignored "-Wcast-align" +# pragma clang diagnostic ignored "-Wmissing-prototypes" +#endif + + +/*============================ MACROS ========================================*/ + + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +#define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ +#define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + +/** \brief PMU Event Counter Registers (0-30) Definitions */ +#define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ +#define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ + +/** \brief PMU Event Type and Filter Registers (0-30) Definitions */ +#define PMU_EVTYPER_EVENTTOCNT_Pos 0U /*!< PMU EVTYPER: Event to Count Position */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ + +/** \brief PMU Count Enable Set Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENSET: Event Counter 0 Enable Set Position */ +#define PMU_CNTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENSET_CNT0_ENABLE_Pos*/) /*!< PMU CNTENSET: Event Counter 0 Enable Set Mask */ + +#define PMU_CNTENSET_CNT1_ENABLE_Pos 1U /*!< PMU CNTENSET: Event Counter 1 Enable Set Position */ +#define PMU_CNTENSET_CNT1_ENABLE_Msk (1UL << PMU_CNTENSET_CNT1_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 1 Enable Set Mask */ + +#define PMU_CNTENSET_CNT2_ENABLE_Pos 2U /*!< PMU CNTENSET: Event Counter 2 Enable Set Position */ +#define PMU_CNTENSET_CNT2_ENABLE_Msk (1UL << PMU_CNTENSET_CNT2_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 2 Enable Set Mask */ + +#define PMU_CNTENSET_CNT3_ENABLE_Pos 3U /*!< PMU CNTENSET: Event Counter 3 Enable Set Position */ +#define PMU_CNTENSET_CNT3_ENABLE_Msk (1UL << PMU_CNTENSET_CNT3_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 3 Enable Set Mask */ + +#define PMU_CNTENSET_CNT4_ENABLE_Pos 4U /*!< PMU CNTENSET: Event Counter 4 Enable Set Position */ +#define PMU_CNTENSET_CNT4_ENABLE_Msk (1UL << PMU_CNTENSET_CNT4_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 4 Enable Set Mask */ + +#define PMU_CNTENSET_CNT5_ENABLE_Pos 5U /*!< PMU CNTENSET: Event Counter 5 Enable Set Position */ +#define PMU_CNTENSET_CNT5_ENABLE_Msk (1UL << PMU_CNTENSET_CNT5_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 5 Enable Set Mask */ + +#define PMU_CNTENSET_CNT6_ENABLE_Pos 6U /*!< PMU CNTENSET: Event Counter 6 Enable Set Position */ +#define PMU_CNTENSET_CNT6_ENABLE_Msk (1UL << PMU_CNTENSET_CNT6_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 6 Enable Set Mask */ + +#define PMU_CNTENSET_CNT7_ENABLE_Pos 7U /*!< PMU CNTENSET: Event Counter 7 Enable Set Position */ +#define PMU_CNTENSET_CNT7_ENABLE_Msk (1UL << PMU_CNTENSET_CNT7_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 7 Enable Set Mask */ + +#define PMU_CNTENSET_CNT8_ENABLE_Pos 8U /*!< PMU CNTENSET: Event Counter 8 Enable Set Position */ +#define PMU_CNTENSET_CNT8_ENABLE_Msk (1UL << PMU_CNTENSET_CNT8_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 8 Enable Set Mask */ + +#define PMU_CNTENSET_CNT9_ENABLE_Pos 9U /*!< PMU CNTENSET: Event Counter 9 Enable Set Position */ +#define PMU_CNTENSET_CNT9_ENABLE_Msk (1UL << PMU_CNTENSET_CNT9_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 9 Enable Set Mask */ + +#define PMU_CNTENSET_CNT10_ENABLE_Pos 10U /*!< PMU CNTENSET: Event Counter 10 Enable Set Position */ +#define PMU_CNTENSET_CNT10_ENABLE_Msk (1UL << PMU_CNTENSET_CNT10_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 10 Enable Set Mask */ + +#define PMU_CNTENSET_CNT11_ENABLE_Pos 11U /*!< PMU CNTENSET: Event Counter 11 Enable Set Position */ +#define PMU_CNTENSET_CNT11_ENABLE_Msk (1UL << PMU_CNTENSET_CNT11_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 11 Enable Set Mask */ + +#define PMU_CNTENSET_CNT12_ENABLE_Pos 12U /*!< PMU CNTENSET: Event Counter 12 Enable Set Position */ +#define PMU_CNTENSET_CNT12_ENABLE_Msk (1UL << PMU_CNTENSET_CNT12_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 12 Enable Set Mask */ + +#define PMU_CNTENSET_CNT13_ENABLE_Pos 13U /*!< PMU CNTENSET: Event Counter 13 Enable Set Position */ +#define PMU_CNTENSET_CNT13_ENABLE_Msk (1UL << PMU_CNTENSET_CNT13_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 13 Enable Set Mask */ + +#define PMU_CNTENSET_CNT14_ENABLE_Pos 14U /*!< PMU CNTENSET: Event Counter 14 Enable Set Position */ +#define PMU_CNTENSET_CNT14_ENABLE_Msk (1UL << PMU_CNTENSET_CNT14_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 14 Enable Set Mask */ + +#define PMU_CNTENSET_CNT15_ENABLE_Pos 15U /*!< PMU CNTENSET: Event Counter 15 Enable Set Position */ +#define PMU_CNTENSET_CNT15_ENABLE_Msk (1UL << PMU_CNTENSET_CNT15_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 15 Enable Set Mask */ + +#define PMU_CNTENSET_CNT16_ENABLE_Pos 16U /*!< PMU CNTENSET: Event Counter 16 Enable Set Position */ +#define PMU_CNTENSET_CNT16_ENABLE_Msk (1UL << PMU_CNTENSET_CNT16_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 16 Enable Set Mask */ + +#define PMU_CNTENSET_CNT17_ENABLE_Pos 17U /*!< PMU CNTENSET: Event Counter 17 Enable Set Position */ +#define PMU_CNTENSET_CNT17_ENABLE_Msk (1UL << PMU_CNTENSET_CNT17_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 17 Enable Set Mask */ + +#define PMU_CNTENSET_CNT18_ENABLE_Pos 18U /*!< PMU CNTENSET: Event Counter 18 Enable Set Position */ +#define PMU_CNTENSET_CNT18_ENABLE_Msk (1UL << PMU_CNTENSET_CNT18_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 18 Enable Set Mask */ + +#define PMU_CNTENSET_CNT19_ENABLE_Pos 19U /*!< PMU CNTENSET: Event Counter 19 Enable Set Position */ +#define PMU_CNTENSET_CNT19_ENABLE_Msk (1UL << PMU_CNTENSET_CNT19_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 19 Enable Set Mask */ + +#define PMU_CNTENSET_CNT20_ENABLE_Pos 20U /*!< PMU CNTENSET: Event Counter 20 Enable Set Position */ +#define PMU_CNTENSET_CNT20_ENABLE_Msk (1UL << PMU_CNTENSET_CNT20_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 20 Enable Set Mask */ + +#define PMU_CNTENSET_CNT21_ENABLE_Pos 21U /*!< PMU CNTENSET: Event Counter 21 Enable Set Position */ +#define PMU_CNTENSET_CNT21_ENABLE_Msk (1UL << PMU_CNTENSET_CNT21_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 21 Enable Set Mask */ + +#define PMU_CNTENSET_CNT22_ENABLE_Pos 22U /*!< PMU CNTENSET: Event Counter 22 Enable Set Position */ +#define PMU_CNTENSET_CNT22_ENABLE_Msk (1UL << PMU_CNTENSET_CNT22_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 22 Enable Set Mask */ + +#define PMU_CNTENSET_CNT23_ENABLE_Pos 23U /*!< PMU CNTENSET: Event Counter 23 Enable Set Position */ +#define PMU_CNTENSET_CNT23_ENABLE_Msk (1UL << PMU_CNTENSET_CNT23_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 23 Enable Set Mask */ + +#define PMU_CNTENSET_CNT24_ENABLE_Pos 24U /*!< PMU CNTENSET: Event Counter 24 Enable Set Position */ +#define PMU_CNTENSET_CNT24_ENABLE_Msk (1UL << PMU_CNTENSET_CNT24_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 24 Enable Set Mask */ + +#define PMU_CNTENSET_CNT25_ENABLE_Pos 25U /*!< PMU CNTENSET: Event Counter 25 Enable Set Position */ +#define PMU_CNTENSET_CNT25_ENABLE_Msk (1UL << PMU_CNTENSET_CNT25_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 25 Enable Set Mask */ + +#define PMU_CNTENSET_CNT26_ENABLE_Pos 26U /*!< PMU CNTENSET: Event Counter 26 Enable Set Position */ +#define PMU_CNTENSET_CNT26_ENABLE_Msk (1UL << PMU_CNTENSET_CNT26_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 26 Enable Set Mask */ + +#define PMU_CNTENSET_CNT27_ENABLE_Pos 27U /*!< PMU CNTENSET: Event Counter 27 Enable Set Position */ +#define PMU_CNTENSET_CNT27_ENABLE_Msk (1UL << PMU_CNTENSET_CNT27_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 27 Enable Set Mask */ + +#define PMU_CNTENSET_CNT28_ENABLE_Pos 28U /*!< PMU CNTENSET: Event Counter 28 Enable Set Position */ +#define PMU_CNTENSET_CNT28_ENABLE_Msk (1UL << PMU_CNTENSET_CNT28_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 28 Enable Set Mask */ + +#define PMU_CNTENSET_CNT29_ENABLE_Pos 29U /*!< PMU CNTENSET: Event Counter 29 Enable Set Position */ +#define PMU_CNTENSET_CNT29_ENABLE_Msk (1UL << PMU_CNTENSET_CNT29_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 29 Enable Set Mask */ + +#define PMU_CNTENSET_CNT30_ENABLE_Pos 30U /*!< PMU CNTENSET: Event Counter 30 Enable Set Position */ +#define PMU_CNTENSET_CNT30_ENABLE_Msk (1UL << PMU_CNTENSET_CNT30_ENABLE_Pos) /*!< PMU CNTENSET: Event Counter 30 Enable Set Mask */ + +#define PMU_CNTENSET_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENSET: Cycle Counter Enable Set Position */ +#define PMU_CNTENSET_CCNTR_ENABLE_Msk (1UL << PMU_CNTENSET_CCNTR_ENABLE_Pos) /*!< PMU CNTENSET: Cycle Counter Enable Set Mask */ + +/** \brief PMU Count Enable Clear Register Definitions */ +#define PMU_CNTENSET_CNT0_ENABLE_Pos 0U /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Position */ +#define PMU_CNTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_CNTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU CNTENCLR: Event Counter 0 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU CNTENCLR: Event Counter 1 Enable Clear Position */ +#define PMU_CNTENCLR_CNT1_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT1_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 1 Enable Clear */ + +#define PMU_CNTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Position */ +#define PMU_CNTENCLR_CNT2_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT2_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 2 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Position */ +#define PMU_CNTENCLR_CNT3_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT3_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 3 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Position */ +#define PMU_CNTENCLR_CNT4_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT4_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 4 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Position */ +#define PMU_CNTENCLR_CNT5_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT5_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 5 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Position */ +#define PMU_CNTENCLR_CNT6_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT6_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 6 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Position */ +#define PMU_CNTENCLR_CNT7_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT7_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 7 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Position */ +#define PMU_CNTENCLR_CNT8_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT8_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 8 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Position */ +#define PMU_CNTENCLR_CNT9_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT9_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 9 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Position */ +#define PMU_CNTENCLR_CNT10_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT10_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 10 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Position */ +#define PMU_CNTENCLR_CNT11_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT11_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 11 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Position */ +#define PMU_CNTENCLR_CNT12_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT12_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 12 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Position */ +#define PMU_CNTENCLR_CNT13_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT13_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 13 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Position */ +#define PMU_CNTENCLR_CNT14_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT14_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 14 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Position */ +#define PMU_CNTENCLR_CNT15_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT15_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 15 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Position */ +#define PMU_CNTENCLR_CNT16_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT16_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 16 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Position */ +#define PMU_CNTENCLR_CNT17_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT17_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 17 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Position */ +#define PMU_CNTENCLR_CNT18_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT18_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 18 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Position */ +#define PMU_CNTENCLR_CNT19_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT19_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 19 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Position */ +#define PMU_CNTENCLR_CNT20_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT20_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 20 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Position */ +#define PMU_CNTENCLR_CNT21_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT21_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 21 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Position */ +#define PMU_CNTENCLR_CNT22_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT22_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 22 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Position */ +#define PMU_CNTENCLR_CNT23_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT23_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 23 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Position */ +#define PMU_CNTENCLR_CNT24_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT24_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 24 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Position */ +#define PMU_CNTENCLR_CNT25_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT25_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 25 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Position */ +#define PMU_CNTENCLR_CNT26_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT26_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 26 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Position */ +#define PMU_CNTENCLR_CNT27_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT27_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 27 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Position */ +#define PMU_CNTENCLR_CNT28_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT28_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 28 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Position */ +#define PMU_CNTENCLR_CNT29_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT29_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 29 Enable Clear Mask */ + +#define PMU_CNTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Position */ +#define PMU_CNTENCLR_CNT30_ENABLE_Msk (1UL << PMU_CNTENCLR_CNT30_ENABLE_Pos) /*!< PMU CNTENCLR: Event Counter 30 Enable Clear Mask */ + +#define PMU_CNTENCLR_CCNTR_ENABLE_Pos 31U /*!< PMU CNTENCLR: Cycle Counter Enable Clear Position */ +#define PMU_CNTENCLR_CCNTR_ENABLE_Msk (1UL << PMU_CNTENCLR_CCNTR_ENABLE_Pos) /*!< PMU CNTENCLR: Cycle Counter Enable Clear Mask */ + +/** \brief PMU Interrupt Enable Set Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENSET_CNT0_ENABLE_Pos*/) /*!< PMU INTENSET: Event Counter 0 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT1_ENABLE_Pos 1U /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT1_ENABLE_Msk (1UL << PMU_INTENSET_CNT1_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 1 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT2_ENABLE_Pos 2U /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT2_ENABLE_Msk (1UL << PMU_INTENSET_CNT2_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 2 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT3_ENABLE_Pos 3U /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT3_ENABLE_Msk (1UL << PMU_INTENSET_CNT3_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 3 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT4_ENABLE_Pos 4U /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT4_ENABLE_Msk (1UL << PMU_INTENSET_CNT4_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 4 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT5_ENABLE_Pos 5U /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT5_ENABLE_Msk (1UL << PMU_INTENSET_CNT5_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 5 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT6_ENABLE_Pos 6U /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT6_ENABLE_Msk (1UL << PMU_INTENSET_CNT6_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 6 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT7_ENABLE_Pos 7U /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT7_ENABLE_Msk (1UL << PMU_INTENSET_CNT7_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 7 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT8_ENABLE_Pos 8U /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT8_ENABLE_Msk (1UL << PMU_INTENSET_CNT8_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 8 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT9_ENABLE_Pos 9U /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT9_ENABLE_Msk (1UL << PMU_INTENSET_CNT9_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 9 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT10_ENABLE_Pos 10U /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT10_ENABLE_Msk (1UL << PMU_INTENSET_CNT10_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 10 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT11_ENABLE_Pos 11U /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT11_ENABLE_Msk (1UL << PMU_INTENSET_CNT11_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 11 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT12_ENABLE_Pos 12U /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT12_ENABLE_Msk (1UL << PMU_INTENSET_CNT12_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 12 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT13_ENABLE_Pos 13U /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT13_ENABLE_Msk (1UL << PMU_INTENSET_CNT13_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 13 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT14_ENABLE_Pos 14U /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT14_ENABLE_Msk (1UL << PMU_INTENSET_CNT14_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 14 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT15_ENABLE_Pos 15U /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT15_ENABLE_Msk (1UL << PMU_INTENSET_CNT15_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 15 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT16_ENABLE_Pos 16U /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT16_ENABLE_Msk (1UL << PMU_INTENSET_CNT16_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 16 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT17_ENABLE_Pos 17U /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT17_ENABLE_Msk (1UL << PMU_INTENSET_CNT17_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 17 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT18_ENABLE_Pos 18U /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT18_ENABLE_Msk (1UL << PMU_INTENSET_CNT18_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 18 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT19_ENABLE_Pos 19U /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT19_ENABLE_Msk (1UL << PMU_INTENSET_CNT19_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 19 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT20_ENABLE_Pos 20U /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT20_ENABLE_Msk (1UL << PMU_INTENSET_CNT20_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 20 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT21_ENABLE_Pos 21U /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT21_ENABLE_Msk (1UL << PMU_INTENSET_CNT21_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 21 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT22_ENABLE_Pos 22U /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT22_ENABLE_Msk (1UL << PMU_INTENSET_CNT22_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 22 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT23_ENABLE_Pos 23U /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT23_ENABLE_Msk (1UL << PMU_INTENSET_CNT23_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 23 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT24_ENABLE_Pos 24U /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT24_ENABLE_Msk (1UL << PMU_INTENSET_CNT24_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 24 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT25_ENABLE_Pos 25U /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT25_ENABLE_Msk (1UL << PMU_INTENSET_CNT25_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 25 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT26_ENABLE_Pos 26U /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT26_ENABLE_Msk (1UL << PMU_INTENSET_CNT26_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 26 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT27_ENABLE_Pos 27U /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT27_ENABLE_Msk (1UL << PMU_INTENSET_CNT27_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 27 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT28_ENABLE_Pos 28U /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT28_ENABLE_Msk (1UL << PMU_INTENSET_CNT28_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 28 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT29_ENABLE_Pos 29U /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT29_ENABLE_Msk (1UL << PMU_INTENSET_CNT29_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 29 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CNT30_ENABLE_Pos 30U /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Position */ +#define PMU_INTENSET_CNT30_ENABLE_Msk (1UL << PMU_INTENSET_CNT30_ENABLE_Pos) /*!< PMU INTENSET: Event Counter 30 Interrupt Enable Set Mask */ + +#define PMU_INTENSET_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Position */ +#define PMU_INTENSET_CCYCNT_ENABLE_Msk (1UL << PMU_INTENSET_CYCCNT_ENABLE_Pos) /*!< PMU INTENSET: Cycle Counter Interrupt Enable Set Mask */ + +/** \brief PMU Interrupt Enable Clear Register Definitions */ +#define PMU_INTENSET_CNT0_ENABLE_Pos 0U /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT0_ENABLE_Msk (1UL /*<< PMU_INTENCLR_CNT0_ENABLE_Pos*/) /*!< PMU INTENCLR: Event Counter 0 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT1_ENABLE_Pos 1U /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT1_ENABLE_Msk (1UL << PMU_INTENCLR_CNT1_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 1 Interrupt Enable Clear */ + +#define PMU_INTENCLR_CNT2_ENABLE_Pos 2U /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT2_ENABLE_Msk (1UL << PMU_INTENCLR_CNT2_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 2 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT3_ENABLE_Pos 3U /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT3_ENABLE_Msk (1UL << PMU_INTENCLR_CNT3_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 3 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT4_ENABLE_Pos 4U /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT4_ENABLE_Msk (1UL << PMU_INTENCLR_CNT4_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 4 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT5_ENABLE_Pos 5U /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT5_ENABLE_Msk (1UL << PMU_INTENCLR_CNT5_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 5 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT6_ENABLE_Pos 6U /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT6_ENABLE_Msk (1UL << PMU_INTENCLR_CNT6_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 6 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT7_ENABLE_Pos 7U /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT7_ENABLE_Msk (1UL << PMU_INTENCLR_CNT7_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 7 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT8_ENABLE_Pos 8U /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT8_ENABLE_Msk (1UL << PMU_INTENCLR_CNT8_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 8 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT9_ENABLE_Pos 9U /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT9_ENABLE_Msk (1UL << PMU_INTENCLR_CNT9_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 9 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT10_ENABLE_Pos 10U /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT10_ENABLE_Msk (1UL << PMU_INTENCLR_CNT10_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 10 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT11_ENABLE_Pos 11U /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT11_ENABLE_Msk (1UL << PMU_INTENCLR_CNT11_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 11 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT12_ENABLE_Pos 12U /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT12_ENABLE_Msk (1UL << PMU_INTENCLR_CNT12_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 12 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT13_ENABLE_Pos 13U /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT13_ENABLE_Msk (1UL << PMU_INTENCLR_CNT13_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 13 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT14_ENABLE_Pos 14U /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT14_ENABLE_Msk (1UL << PMU_INTENCLR_CNT14_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 14 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT15_ENABLE_Pos 15U /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT15_ENABLE_Msk (1UL << PMU_INTENCLR_CNT15_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 15 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT16_ENABLE_Pos 16U /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT16_ENABLE_Msk (1UL << PMU_INTENCLR_CNT16_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 16 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT17_ENABLE_Pos 17U /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT17_ENABLE_Msk (1UL << PMU_INTENCLR_CNT17_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 17 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT18_ENABLE_Pos 18U /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT18_ENABLE_Msk (1UL << PMU_INTENCLR_CNT18_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 18 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT19_ENABLE_Pos 19U /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT19_ENABLE_Msk (1UL << PMU_INTENCLR_CNT19_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 19 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT20_ENABLE_Pos 20U /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT20_ENABLE_Msk (1UL << PMU_INTENCLR_CNT20_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 20 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT21_ENABLE_Pos 21U /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT21_ENABLE_Msk (1UL << PMU_INTENCLR_CNT21_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 21 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT22_ENABLE_Pos 22U /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT22_ENABLE_Msk (1UL << PMU_INTENCLR_CNT22_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 22 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT23_ENABLE_Pos 23U /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT23_ENABLE_Msk (1UL << PMU_INTENCLR_CNT23_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 23 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT24_ENABLE_Pos 24U /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT24_ENABLE_Msk (1UL << PMU_INTENCLR_CNT24_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 24 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT25_ENABLE_Pos 25U /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT25_ENABLE_Msk (1UL << PMU_INTENCLR_CNT25_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 25 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT26_ENABLE_Pos 26U /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT26_ENABLE_Msk (1UL << PMU_INTENCLR_CNT26_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 26 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT27_ENABLE_Pos 27U /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT27_ENABLE_Msk (1UL << PMU_INTENCLR_CNT27_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 27 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT28_ENABLE_Pos 28U /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT28_ENABLE_Msk (1UL << PMU_INTENCLR_CNT28_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 28 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT29_ENABLE_Pos 29U /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT29_ENABLE_Msk (1UL << PMU_INTENCLR_CNT29_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 29 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CNT30_ENABLE_Pos 30U /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CNT30_ENABLE_Msk (1UL << PMU_INTENCLR_CNT30_ENABLE_Pos) /*!< PMU INTENCLR: Event Counter 30 Interrupt Enable Clear Mask */ + +#define PMU_INTENCLR_CYCCNT_ENABLE_Pos 31U /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Position */ +#define PMU_INTENCLR_CYCCNT_ENABLE_Msk (1UL << PMU_INTENCLR_CYCCNT_ENABLE_Pos) /*!< PMU INTENCLR: Cycle Counter Interrupt Enable Clear Mask */ + +/** \brief PMU Overflow Flag Status Set Register Definitions */ +#define PMU_OVSSET_CNT0_STATUS_Pos 0U /*!< PMU OVSSET: Event Counter 0 Overflow Set Position */ +#define PMU_OVSSET_CNT0_STATUS_Msk (1UL /*<< PMU_OVSSET_CNT0_STATUS_Pos*/) /*!< PMU OVSSET: Event Counter 0 Overflow Set Mask */ + +#define PMU_OVSSET_CNT1_STATUS_Pos 1U /*!< PMU OVSSET: Event Counter 1 Overflow Set Position */ +#define PMU_OVSSET_CNT1_STATUS_Msk (1UL << PMU_OVSSET_CNT1_STATUS_Pos) /*!< PMU OVSSET: Event Counter 1 Overflow Set Mask */ + +#define PMU_OVSSET_CNT2_STATUS_Pos 2U /*!< PMU OVSSET: Event Counter 2 Overflow Set Position */ +#define PMU_OVSSET_CNT2_STATUS_Msk (1UL << PMU_OVSSET_CNT2_STATUS_Pos) /*!< PMU OVSSET: Event Counter 2 Overflow Set Mask */ + +#define PMU_OVSSET_CNT3_STATUS_Pos 3U /*!< PMU OVSSET: Event Counter 3 Overflow Set Position */ +#define PMU_OVSSET_CNT3_STATUS_Msk (1UL << PMU_OVSSET_CNT3_STATUS_Pos) /*!< PMU OVSSET: Event Counter 3 Overflow Set Mask */ + +#define PMU_OVSSET_CNT4_STATUS_Pos 4U /*!< PMU OVSSET: Event Counter 4 Overflow Set Position */ +#define PMU_OVSSET_CNT4_STATUS_Msk (1UL << PMU_OVSSET_CNT4_STATUS_Pos) /*!< PMU OVSSET: Event Counter 4 Overflow Set Mask */ + +#define PMU_OVSSET_CNT5_STATUS_Pos 5U /*!< PMU OVSSET: Event Counter 5 Overflow Set Position */ +#define PMU_OVSSET_CNT5_STATUS_Msk (1UL << PMU_OVSSET_CNT5_STATUS_Pos) /*!< PMU OVSSET: Event Counter 5 Overflow Set Mask */ + +#define PMU_OVSSET_CNT6_STATUS_Pos 6U /*!< PMU OVSSET: Event Counter 6 Overflow Set Position */ +#define PMU_OVSSET_CNT6_STATUS_Msk (1UL << PMU_OVSSET_CNT6_STATUS_Pos) /*!< PMU OVSSET: Event Counter 6 Overflow Set Mask */ + +#define PMU_OVSSET_CNT7_STATUS_Pos 7U /*!< PMU OVSSET: Event Counter 7 Overflow Set Position */ +#define PMU_OVSSET_CNT7_STATUS_Msk (1UL << PMU_OVSSET_CNT7_STATUS_Pos) /*!< PMU OVSSET: Event Counter 7 Overflow Set Mask */ + +#define PMU_OVSSET_CNT8_STATUS_Pos 8U /*!< PMU OVSSET: Event Counter 8 Overflow Set Position */ +#define PMU_OVSSET_CNT8_STATUS_Msk (1UL << PMU_OVSSET_CNT8_STATUS_Pos) /*!< PMU OVSSET: Event Counter 8 Overflow Set Mask */ + +#define PMU_OVSSET_CNT9_STATUS_Pos 9U /*!< PMU OVSSET: Event Counter 9 Overflow Set Position */ +#define PMU_OVSSET_CNT9_STATUS_Msk (1UL << PMU_OVSSET_CNT9_STATUS_Pos) /*!< PMU OVSSET: Event Counter 9 Overflow Set Mask */ + +#define PMU_OVSSET_CNT10_STATUS_Pos 10U /*!< PMU OVSSET: Event Counter 10 Overflow Set Position */ +#define PMU_OVSSET_CNT10_STATUS_Msk (1UL << PMU_OVSSET_CNT10_STATUS_Pos) /*!< PMU OVSSET: Event Counter 10 Overflow Set Mask */ + +#define PMU_OVSSET_CNT11_STATUS_Pos 11U /*!< PMU OVSSET: Event Counter 11 Overflow Set Position */ +#define PMU_OVSSET_CNT11_STATUS_Msk (1UL << PMU_OVSSET_CNT11_STATUS_Pos) /*!< PMU OVSSET: Event Counter 11 Overflow Set Mask */ + +#define PMU_OVSSET_CNT12_STATUS_Pos 12U /*!< PMU OVSSET: Event Counter 12 Overflow Set Position */ +#define PMU_OVSSET_CNT12_STATUS_Msk (1UL << PMU_OVSSET_CNT12_STATUS_Pos) /*!< PMU OVSSET: Event Counter 12 Overflow Set Mask */ + +#define PMU_OVSSET_CNT13_STATUS_Pos 13U /*!< PMU OVSSET: Event Counter 13 Overflow Set Position */ +#define PMU_OVSSET_CNT13_STATUS_Msk (1UL << PMU_OVSSET_CNT13_STATUS_Pos) /*!< PMU OVSSET: Event Counter 13 Overflow Set Mask */ + +#define PMU_OVSSET_CNT14_STATUS_Pos 14U /*!< PMU OVSSET: Event Counter 14 Overflow Set Position */ +#define PMU_OVSSET_CNT14_STATUS_Msk (1UL << PMU_OVSSET_CNT14_STATUS_Pos) /*!< PMU OVSSET: Event Counter 14 Overflow Set Mask */ + +#define PMU_OVSSET_CNT15_STATUS_Pos 15U /*!< PMU OVSSET: Event Counter 15 Overflow Set Position */ +#define PMU_OVSSET_CNT15_STATUS_Msk (1UL << PMU_OVSSET_CNT15_STATUS_Pos) /*!< PMU OVSSET: Event Counter 15 Overflow Set Mask */ + +#define PMU_OVSSET_CNT16_STATUS_Pos 16U /*!< PMU OVSSET: Event Counter 16 Overflow Set Position */ +#define PMU_OVSSET_CNT16_STATUS_Msk (1UL << PMU_OVSSET_CNT16_STATUS_Pos) /*!< PMU OVSSET: Event Counter 16 Overflow Set Mask */ + +#define PMU_OVSSET_CNT17_STATUS_Pos 17U /*!< PMU OVSSET: Event Counter 17 Overflow Set Position */ +#define PMU_OVSSET_CNT17_STATUS_Msk (1UL << PMU_OVSSET_CNT17_STATUS_Pos) /*!< PMU OVSSET: Event Counter 17 Overflow Set Mask */ + +#define PMU_OVSSET_CNT18_STATUS_Pos 18U /*!< PMU OVSSET: Event Counter 18 Overflow Set Position */ +#define PMU_OVSSET_CNT18_STATUS_Msk (1UL << PMU_OVSSET_CNT18_STATUS_Pos) /*!< PMU OVSSET: Event Counter 18 Overflow Set Mask */ + +#define PMU_OVSSET_CNT19_STATUS_Pos 19U /*!< PMU OVSSET: Event Counter 19 Overflow Set Position */ +#define PMU_OVSSET_CNT19_STATUS_Msk (1UL << PMU_OVSSET_CNT19_STATUS_Pos) /*!< PMU OVSSET: Event Counter 19 Overflow Set Mask */ + +#define PMU_OVSSET_CNT20_STATUS_Pos 20U /*!< PMU OVSSET: Event Counter 20 Overflow Set Position */ +#define PMU_OVSSET_CNT20_STATUS_Msk (1UL << PMU_OVSSET_CNT20_STATUS_Pos) /*!< PMU OVSSET: Event Counter 20 Overflow Set Mask */ + +#define PMU_OVSSET_CNT21_STATUS_Pos 21U /*!< PMU OVSSET: Event Counter 21 Overflow Set Position */ +#define PMU_OVSSET_CNT21_STATUS_Msk (1UL << PMU_OVSSET_CNT21_STATUS_Pos) /*!< PMU OVSSET: Event Counter 21 Overflow Set Mask */ + +#define PMU_OVSSET_CNT22_STATUS_Pos 22U /*!< PMU OVSSET: Event Counter 22 Overflow Set Position */ +#define PMU_OVSSET_CNT22_STATUS_Msk (1UL << PMU_OVSSET_CNT22_STATUS_Pos) /*!< PMU OVSSET: Event Counter 22 Overflow Set Mask */ + +#define PMU_OVSSET_CNT23_STATUS_Pos 23U /*!< PMU OVSSET: Event Counter 23 Overflow Set Position */ +#define PMU_OVSSET_CNT23_STATUS_Msk (1UL << PMU_OVSSET_CNT23_STATUS_Pos) /*!< PMU OVSSET: Event Counter 23 Overflow Set Mask */ + +#define PMU_OVSSET_CNT24_STATUS_Pos 24U /*!< PMU OVSSET: Event Counter 24 Overflow Set Position */ +#define PMU_OVSSET_CNT24_STATUS_Msk (1UL << PMU_OVSSET_CNT24_STATUS_Pos) /*!< PMU OVSSET: Event Counter 24 Overflow Set Mask */ + +#define PMU_OVSSET_CNT25_STATUS_Pos 25U /*!< PMU OVSSET: Event Counter 25 Overflow Set Position */ +#define PMU_OVSSET_CNT25_STATUS_Msk (1UL << PMU_OVSSET_CNT25_STATUS_Pos) /*!< PMU OVSSET: Event Counter 25 Overflow Set Mask */ + +#define PMU_OVSSET_CNT26_STATUS_Pos 26U /*!< PMU OVSSET: Event Counter 26 Overflow Set Position */ +#define PMU_OVSSET_CNT26_STATUS_Msk (1UL << PMU_OVSSET_CNT26_STATUS_Pos) /*!< PMU OVSSET: Event Counter 26 Overflow Set Mask */ + +#define PMU_OVSSET_CNT27_STATUS_Pos 27U /*!< PMU OVSSET: Event Counter 27 Overflow Set Position */ +#define PMU_OVSSET_CNT27_STATUS_Msk (1UL << PMU_OVSSET_CNT27_STATUS_Pos) /*!< PMU OVSSET: Event Counter 27 Overflow Set Mask */ + +#define PMU_OVSSET_CNT28_STATUS_Pos 28U /*!< PMU OVSSET: Event Counter 28 Overflow Set Position */ +#define PMU_OVSSET_CNT28_STATUS_Msk (1UL << PMU_OVSSET_CNT28_STATUS_Pos) /*!< PMU OVSSET: Event Counter 28 Overflow Set Mask */ + +#define PMU_OVSSET_CNT29_STATUS_Pos 29U /*!< PMU OVSSET: Event Counter 29 Overflow Set Position */ +#define PMU_OVSSET_CNT29_STATUS_Msk (1UL << PMU_OVSSET_CNT29_STATUS_Pos) /*!< PMU OVSSET: Event Counter 29 Overflow Set Mask */ + +#define PMU_OVSSET_CNT30_STATUS_Pos 30U /*!< PMU OVSSET: Event Counter 30 Overflow Set Position */ +#define PMU_OVSSET_CNT30_STATUS_Msk (1UL << PMU_OVSSET_CNT30_STATUS_Pos) /*!< PMU OVSSET: Event Counter 30 Overflow Set Mask */ + +#define PMU_OVSSET_CYCCNT_STATUS_Pos 31U /*!< PMU OVSSET: Cycle Counter Overflow Set Position */ +#define PMU_OVSSET_CYCCNT_STATUS_Msk (1UL << PMU_OVSSET_CYCCNT_STATUS_Pos) /*!< PMU OVSSET: Cycle Counter Overflow Set Mask */ + +/** \brief PMU Overflow Flag Status Clear Register Definitions */ +#define PMU_OVSCLR_CNT0_STATUS_Pos 0U /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Position */ +#define PMU_OVSCLR_CNT0_STATUS_Msk (1UL /*<< PMU_OVSCLR_CNT0_STATUS_Pos*/) /*!< PMU OVSCLR: Event Counter 0 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT1_STATUS_Pos 1U /*!< PMU OVSCLR: Event Counter 1 Overflow Clear Position */ +#define PMU_OVSCLR_CNT1_STATUS_Msk (1UL << PMU_OVSCLR_CNT1_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 1 Overflow Clear */ + +#define PMU_OVSCLR_CNT2_STATUS_Pos 2U /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Position */ +#define PMU_OVSCLR_CNT2_STATUS_Msk (1UL << PMU_OVSCLR_CNT2_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 2 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT3_STATUS_Pos 3U /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Position */ +#define PMU_OVSCLR_CNT3_STATUS_Msk (1UL << PMU_OVSCLR_CNT3_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 3 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT4_STATUS_Pos 4U /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Position */ +#define PMU_OVSCLR_CNT4_STATUS_Msk (1UL << PMU_OVSCLR_CNT4_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 4 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT5_STATUS_Pos 5U /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Position */ +#define PMU_OVSCLR_CNT5_STATUS_Msk (1UL << PMU_OVSCLR_CNT5_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 5 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT6_STATUS_Pos 6U /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Position */ +#define PMU_OVSCLR_CNT6_STATUS_Msk (1UL << PMU_OVSCLR_CNT6_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 6 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT7_STATUS_Pos 7U /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Position */ +#define PMU_OVSCLR_CNT7_STATUS_Msk (1UL << PMU_OVSCLR_CNT7_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 7 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT8_STATUS_Pos 8U /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Position */ +#define PMU_OVSCLR_CNT8_STATUS_Msk (1UL << PMU_OVSCLR_CNT8_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 8 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT9_STATUS_Pos 9U /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Position */ +#define PMU_OVSCLR_CNT9_STATUS_Msk (1UL << PMU_OVSCLR_CNT9_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 9 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT10_STATUS_Pos 10U /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Position */ +#define PMU_OVSCLR_CNT10_STATUS_Msk (1UL << PMU_OVSCLR_CNT10_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 10 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT11_STATUS_Pos 11U /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Position */ +#define PMU_OVSCLR_CNT11_STATUS_Msk (1UL << PMU_OVSCLR_CNT11_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 11 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT12_STATUS_Pos 12U /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Position */ +#define PMU_OVSCLR_CNT12_STATUS_Msk (1UL << PMU_OVSCLR_CNT12_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 12 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT13_STATUS_Pos 13U /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Position */ +#define PMU_OVSCLR_CNT13_STATUS_Msk (1UL << PMU_OVSCLR_CNT13_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 13 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT14_STATUS_Pos 14U /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Position */ +#define PMU_OVSCLR_CNT14_STATUS_Msk (1UL << PMU_OVSCLR_CNT14_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 14 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT15_STATUS_Pos 15U /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Position */ +#define PMU_OVSCLR_CNT15_STATUS_Msk (1UL << PMU_OVSCLR_CNT15_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 15 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT16_STATUS_Pos 16U /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Position */ +#define PMU_OVSCLR_CNT16_STATUS_Msk (1UL << PMU_OVSCLR_CNT16_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 16 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT17_STATUS_Pos 17U /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Position */ +#define PMU_OVSCLR_CNT17_STATUS_Msk (1UL << PMU_OVSCLR_CNT17_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 17 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT18_STATUS_Pos 18U /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Position */ +#define PMU_OVSCLR_CNT18_STATUS_Msk (1UL << PMU_OVSCLR_CNT18_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 18 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT19_STATUS_Pos 19U /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Position */ +#define PMU_OVSCLR_CNT19_STATUS_Msk (1UL << PMU_OVSCLR_CNT19_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 19 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT20_STATUS_Pos 20U /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Position */ +#define PMU_OVSCLR_CNT20_STATUS_Msk (1UL << PMU_OVSCLR_CNT20_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 20 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT21_STATUS_Pos 21U /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Position */ +#define PMU_OVSCLR_CNT21_STATUS_Msk (1UL << PMU_OVSCLR_CNT21_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 21 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT22_STATUS_Pos 22U /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Position */ +#define PMU_OVSCLR_CNT22_STATUS_Msk (1UL << PMU_OVSCLR_CNT22_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 22 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT23_STATUS_Pos 23U /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Position */ +#define PMU_OVSCLR_CNT23_STATUS_Msk (1UL << PMU_OVSCLR_CNT23_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 23 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT24_STATUS_Pos 24U /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Position */ +#define PMU_OVSCLR_CNT24_STATUS_Msk (1UL << PMU_OVSCLR_CNT24_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 24 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT25_STATUS_Pos 25U /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Position */ +#define PMU_OVSCLR_CNT25_STATUS_Msk (1UL << PMU_OVSCLR_CNT25_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 25 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT26_STATUS_Pos 26U /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Position */ +#define PMU_OVSCLR_CNT26_STATUS_Msk (1UL << PMU_OVSCLR_CNT26_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 26 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT27_STATUS_Pos 27U /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Position */ +#define PMU_OVSCLR_CNT27_STATUS_Msk (1UL << PMU_OVSCLR_CNT27_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 27 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT28_STATUS_Pos 28U /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Position */ +#define PMU_OVSCLR_CNT28_STATUS_Msk (1UL << PMU_OVSCLR_CNT28_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 28 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT29_STATUS_Pos 29U /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Position */ +#define PMU_OVSCLR_CNT29_STATUS_Msk (1UL << PMU_OVSCLR_CNT29_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 29 Overflow Clear Mask */ + +#define PMU_OVSCLR_CNT30_STATUS_Pos 30U /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Position */ +#define PMU_OVSCLR_CNT30_STATUS_Msk (1UL << PMU_OVSCLR_CNT30_STATUS_Pos) /*!< PMU OVSCLR: Event Counter 30 Overflow Clear Mask */ + +#define PMU_OVSCLR_CYCCNT_STATUS_Pos 31U /*!< PMU OVSCLR: Cycle Counter Overflow Clear Position */ +#define PMU_OVSCLR_CYCCNT_STATUS_Msk (1UL << PMU_OVSCLR_CYCCNT_STATUS_Pos) /*!< PMU OVSCLR: Cycle Counter Overflow Clear Mask */ + +/** \brief PMU Software Increment Counter */ +#define PMU_SWINC_CNT0_Pos 0U /*!< PMU SWINC: Event Counter 0 Software Increment Position */ +#define PMU_SWINC_CNT0_Msk (1UL /*<< PMU_SWINC_CNT0_Pos */) /*!< PMU SWINC: Event Counter 0 Software Increment Mask */ + +#define PMU_SWINC_CNT1_Pos 1U /*!< PMU SWINC: Event Counter 1 Software Increment Position */ +#define PMU_SWINC_CNT1_Msk (1UL << PMU_SWINC_CNT1_Pos) /*!< PMU SWINC: Event Counter 1 Software Increment Mask */ + +#define PMU_SWINC_CNT2_Pos 2U /*!< PMU SWINC: Event Counter 2 Software Increment Position */ +#define PMU_SWINC_CNT2_Msk (1UL << PMU_SWINC_CNT2_Pos) /*!< PMU SWINC: Event Counter 2 Software Increment Mask */ + +#define PMU_SWINC_CNT3_Pos 3U /*!< PMU SWINC: Event Counter 3 Software Increment Position */ +#define PMU_SWINC_CNT3_Msk (1UL << PMU_SWINC_CNT3_Pos) /*!< PMU SWINC: Event Counter 3 Software Increment Mask */ + +#define PMU_SWINC_CNT4_Pos 4U /*!< PMU SWINC: Event Counter 4 Software Increment Position */ +#define PMU_SWINC_CNT4_Msk (1UL << PMU_SWINC_CNT4_Pos) /*!< PMU SWINC: Event Counter 4 Software Increment Mask */ + +#define PMU_SWINC_CNT5_Pos 5U /*!< PMU SWINC: Event Counter 5 Software Increment Position */ +#define PMU_SWINC_CNT5_Msk (1UL << PMU_SWINC_CNT5_Pos) /*!< PMU SWINC: Event Counter 5 Software Increment Mask */ + +#define PMU_SWINC_CNT6_Pos 6U /*!< PMU SWINC: Event Counter 6 Software Increment Position */ +#define PMU_SWINC_CNT6_Msk (1UL << PMU_SWINC_CNT6_Pos) /*!< PMU SWINC: Event Counter 6 Software Increment Mask */ + +#define PMU_SWINC_CNT7_Pos 7U /*!< PMU SWINC: Event Counter 7 Software Increment Position */ +#define PMU_SWINC_CNT7_Msk (1UL << PMU_SWINC_CNT7_Pos) /*!< PMU SWINC: Event Counter 7 Software Increment Mask */ + +#define PMU_SWINC_CNT8_Pos 8U /*!< PMU SWINC: Event Counter 8 Software Increment Position */ +#define PMU_SWINC_CNT8_Msk (1UL << PMU_SWINC_CNT8_Pos) /*!< PMU SWINC: Event Counter 8 Software Increment Mask */ + +#define PMU_SWINC_CNT9_Pos 9U /*!< PMU SWINC: Event Counter 9 Software Increment Position */ +#define PMU_SWINC_CNT9_Msk (1UL << PMU_SWINC_CNT9_Pos) /*!< PMU SWINC: Event Counter 9 Software Increment Mask */ + +#define PMU_SWINC_CNT10_Pos 10U /*!< PMU SWINC: Event Counter 10 Software Increment Position */ +#define PMU_SWINC_CNT10_Msk (1UL << PMU_SWINC_CNT10_Pos) /*!< PMU SWINC: Event Counter 10 Software Increment Mask */ + +#define PMU_SWINC_CNT11_Pos 11U /*!< PMU SWINC: Event Counter 11 Software Increment Position */ +#define PMU_SWINC_CNT11_Msk (1UL << PMU_SWINC_CNT11_Pos) /*!< PMU SWINC: Event Counter 11 Software Increment Mask */ + +#define PMU_SWINC_CNT12_Pos 12U /*!< PMU SWINC: Event Counter 12 Software Increment Position */ +#define PMU_SWINC_CNT12_Msk (1UL << PMU_SWINC_CNT12_Pos) /*!< PMU SWINC: Event Counter 12 Software Increment Mask */ + +#define PMU_SWINC_CNT13_Pos 13U /*!< PMU SWINC: Event Counter 13 Software Increment Position */ +#define PMU_SWINC_CNT13_Msk (1UL << PMU_SWINC_CNT13_Pos) /*!< PMU SWINC: Event Counter 13 Software Increment Mask */ + +#define PMU_SWINC_CNT14_Pos 14U /*!< PMU SWINC: Event Counter 14 Software Increment Position */ +#define PMU_SWINC_CNT14_Msk (1UL << PMU_SWINC_CNT14_Pos) /*!< PMU SWINC: Event Counter 14 Software Increment Mask */ + +#define PMU_SWINC_CNT15_Pos 15U /*!< PMU SWINC: Event Counter 15 Software Increment Position */ +#define PMU_SWINC_CNT15_Msk (1UL << PMU_SWINC_CNT15_Pos) /*!< PMU SWINC: Event Counter 15 Software Increment Mask */ + +#define PMU_SWINC_CNT16_Pos 16U /*!< PMU SWINC: Event Counter 16 Software Increment Position */ +#define PMU_SWINC_CNT16_Msk (1UL << PMU_SWINC_CNT16_Pos) /*!< PMU SWINC: Event Counter 16 Software Increment Mask */ + +#define PMU_SWINC_CNT17_Pos 17U /*!< PMU SWINC: Event Counter 17 Software Increment Position */ +#define PMU_SWINC_CNT17_Msk (1UL << PMU_SWINC_CNT17_Pos) /*!< PMU SWINC: Event Counter 17 Software Increment Mask */ + +#define PMU_SWINC_CNT18_Pos 18U /*!< PMU SWINC: Event Counter 18 Software Increment Position */ +#define PMU_SWINC_CNT18_Msk (1UL << PMU_SWINC_CNT18_Pos) /*!< PMU SWINC: Event Counter 18 Software Increment Mask */ + +#define PMU_SWINC_CNT19_Pos 19U /*!< PMU SWINC: Event Counter 19 Software Increment Position */ +#define PMU_SWINC_CNT19_Msk (1UL << PMU_SWINC_CNT19_Pos) /*!< PMU SWINC: Event Counter 19 Software Increment Mask */ + +#define PMU_SWINC_CNT20_Pos 20U /*!< PMU SWINC: Event Counter 20 Software Increment Position */ +#define PMU_SWINC_CNT20_Msk (1UL << PMU_SWINC_CNT20_Pos) /*!< PMU SWINC: Event Counter 20 Software Increment Mask */ + +#define PMU_SWINC_CNT21_Pos 21U /*!< PMU SWINC: Event Counter 21 Software Increment Position */ +#define PMU_SWINC_CNT21_Msk (1UL << PMU_SWINC_CNT21_Pos) /*!< PMU SWINC: Event Counter 21 Software Increment Mask */ + +#define PMU_SWINC_CNT22_Pos 22U /*!< PMU SWINC: Event Counter 22 Software Increment Position */ +#define PMU_SWINC_CNT22_Msk (1UL << PMU_SWINC_CNT22_Pos) /*!< PMU SWINC: Event Counter 22 Software Increment Mask */ + +#define PMU_SWINC_CNT23_Pos 23U /*!< PMU SWINC: Event Counter 23 Software Increment Position */ +#define PMU_SWINC_CNT23_Msk (1UL << PMU_SWINC_CNT23_Pos) /*!< PMU SWINC: Event Counter 23 Software Increment Mask */ + +#define PMU_SWINC_CNT24_Pos 24U /*!< PMU SWINC: Event Counter 24 Software Increment Position */ +#define PMU_SWINC_CNT24_Msk (1UL << PMU_SWINC_CNT24_Pos) /*!< PMU SWINC: Event Counter 24 Software Increment Mask */ + +#define PMU_SWINC_CNT25_Pos 25U /*!< PMU SWINC: Event Counter 25 Software Increment Position */ +#define PMU_SWINC_CNT25_Msk (1UL << PMU_SWINC_CNT25_Pos) /*!< PMU SWINC: Event Counter 25 Software Increment Mask */ + +#define PMU_SWINC_CNT26_Pos 26U /*!< PMU SWINC: Event Counter 26 Software Increment Position */ +#define PMU_SWINC_CNT26_Msk (1UL << PMU_SWINC_CNT26_Pos) /*!< PMU SWINC: Event Counter 26 Software Increment Mask */ + +#define PMU_SWINC_CNT27_Pos 27U /*!< PMU SWINC: Event Counter 27 Software Increment Position */ +#define PMU_SWINC_CNT27_Msk (1UL << PMU_SWINC_CNT27_Pos) /*!< PMU SWINC: Event Counter 27 Software Increment Mask */ + +#define PMU_SWINC_CNT28_Pos 28U /*!< PMU SWINC: Event Counter 28 Software Increment Position */ +#define PMU_SWINC_CNT28_Msk (1UL << PMU_SWINC_CNT28_Pos) /*!< PMU SWINC: Event Counter 28 Software Increment Mask */ + +#define PMU_SWINC_CNT29_Pos 29U /*!< PMU SWINC: Event Counter 29 Software Increment Position */ +#define PMU_SWINC_CNT29_Msk (1UL << PMU_SWINC_CNT29_Pos) /*!< PMU SWINC: Event Counter 29 Software Increment Mask */ + +#define PMU_SWINC_CNT30_Pos 30U /*!< PMU SWINC: Event Counter 30 Software Increment Position */ +#define PMU_SWINC_CNT30_Msk (1UL << PMU_SWINC_CNT30_Pos) /*!< PMU SWINC: Event Counter 30 Software Increment Mask */ + +/** \brief PMU Control Register Definitions */ +#define PMU_CTRL_ENABLE_Pos 0U /*!< PMU CTRL: ENABLE Position */ +#define PMU_CTRL_ENABLE_Msk (1UL /*<< PMU_CTRL_ENABLE_Pos*/) /*!< PMU CTRL: ENABLE Mask */ + +#define PMU_CTRL_EVENTCNT_RESET_Pos 1U /*!< PMU CTRL: Event Counter Reset Position */ +#define PMU_CTRL_EVENTCNT_RESET_Msk (1UL << PMU_CTRL_EVENTCNT_RESET_Pos) /*!< PMU CTRL: Event Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_RESET_Pos 2U /*!< PMU CTRL: Cycle Counter Reset Position */ +#define PMU_CTRL_CYCCNT_RESET_Msk (1UL << PMU_CTRL_CYCCNT_RESET_Pos) /*!< PMU CTRL: Cycle Counter Reset Mask */ + +#define PMU_CTRL_CYCCNT_DISABLE_Pos 5U /*!< PMU CTRL: Disable Cycle Counter Position */ +#define PMU_CTRL_CYCCNT_DISABLE_Msk (1UL << PMU_CTRL_CYCCNT_DISABLE_Pos) /*!< PMU CTRL: Disable Cycle Counter Mask */ + +#define PMU_CTRL_FRZ_ON_OV_Pos 9U /*!< PMU CTRL: Freeze-on-overflow Position */ +#define PMU_CTRL_FRZ_ON_OV_Msk (1UL << PMU_CTRL_FRZ_ON_OVERFLOW_Pos) /*!< PMU CTRL: Freeze-on-overflow Mask */ + +#define PMU_CTRL_TRACE_ON_OV_Pos 11U /*!< PMU CTRL: Trace-on-overflow Position */ +#define PMU_CTRL_TRACE_ON_OV_Msk (1UL << PMU_CTRL_TRACE_ON_OVERFLOW_Pos) /*!< PMU CTRL: Trace-on-overflow Mask */ + +/** \brief PMU Type Register Definitions */ +#define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ +#define PMU_TYPE_NUM_CNTS_Msk (0xFFUL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ + +#define PMU_TYPE_SIZE_CNTS_Pos 8U /*!< PMU TYPE: Size of Counters Position */ +#define PMU_TYPE_SIZE_CNTS_Msk (0x3FUL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ + +#define PMU_TYPE_CYCCNT_PRESENT_Pos 14U /*!< PMU TYPE: Cycle Counter Present Position */ +#define PMU_TYPE_CYCCNT_PRESENT_Msk (1UL << PMU_TYPE_CYCCNT_PRESENT_Pos) /*!< PMU TYPE: Cycle Counter Present Mask */ + +#define PMU_TYPE_FRZ_OV_SUPPORT_Pos 21U /*!< PMU TYPE: Freeze-on-overflow Support Position */ +#define PMU_TYPE_FRZ_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Freeze-on-overflow Support Mask */ + +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Pos 23U /*!< PMU TYPE: Trace-on-overflow Support Position */ +#define PMU_TYPE_TRACE_ON_OV_SUPPORT_Msk (1UL << PMU_TYPE_FRZ_OV_SUPPORT_Pos) /*!< PMU TYPE: Trace-on-overflow Support Mask */ + +/** \brief PMU Authentication Status Register Definitions */ +#define PMU_AUTHSTATUS_NSID_Pos 0U /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSID_Msk (0x3UL /*<< PMU_AUTHSTATUS_NSID_Pos*/) /*!< PMU AUTHSTATUS: Non-secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSNID_Pos 2U /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSNID_Msk (0x3UL << PMU_AUTHSTATUS_NSNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SID_Pos 4U /*!< PMU AUTHSTATUS: Secure Invasive Debug Position */ +#define PMU_AUTHSTATUS_SID_Msk (0x3UL << PMU_AUTHSTATUS_SID_Pos) /*!< PMU AUTHSTATUS: Secure Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SNID_Pos 6U /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SNID_Msk (0x3UL << PMU_AUTHSTATUS_SNID_Pos) /*!< PMU AUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUID_Pos 16U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUID_Msk (0x3UL << PMU_AUTHSTATUS_NSUID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_NSUNID_Pos 18U /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_NSUNID_Msk (0x3UL << PMU_AUTHSTATUS_NSUNID_Pos) /*!< PMU AUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUID_Pos 20U /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Position */ +#define PMU_AUTHSTATUS_SUID_Msk (0x3UL << PMU_AUTHSTATUS_SUID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Invasive Debug Mask */ + +#define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ +#define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ + +/*@} end of group CMSIS_PMU */ + +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[31]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[31]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/*============================ GLOBAL VARIABLES ==============================*/ +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/* low level interface for porting */ +extern +uint32_t perfc_port_get_system_freq(void); +extern +int64_t perfc_port_get_system_timer_top(void); +extern +bool perfc_port_is_system_timer_ovf_pending(void); +extern +void perfc_port_init_system_timer(bool bTimerOccupied); +extern +int64_t perfc_port_get_system_timer_elapsed(void); +extern +void perfc_port_clear_system_timer_ovf_pending(void); +extern +void perfc_port_stop_system_timer_counting(void); +extern +void perfc_port_clear_system_timer_counter(void); + +/*============================ INCLUDES ======================================*/ + +#include "m-profile/armv8m_pmu.h" + +/*============================ IMPLEMENTATION ================================*/ + + +#if __PERFC_USE_PMU_PORTING__ + +void perfc_port_init_system_timer(bool bIsTimeOccupied) +{ + UNUSED_PARAM(bIsTimeOccupied); + + __IRQ_SAFE { + ARM_PMU_Disable(); + + perfc_port_stop_system_timer_counting(); + perfc_port_clear_system_timer_counter(); + perfc_port_clear_system_timer_ovf_pending(); + + ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); + ARM_PMU_Enable(); + } +} + +uint32_t perfc_port_get_system_freq(void) +{ + extern uint32_t SystemCoreClock; + + /* return the system timer frequency */ + return SystemCoreClock; +} + +bool perfc_port_is_system_timer_ovf_pending(void) +{ + /* whether the system timer overflow is pending */ + return PMU->OVSSET & PMU_OVSSET_CYCCNT_STATUS_Msk; +} + +int64_t perfc_port_get_system_timer_top(void) +{ + /* the top value of the counting */ + return 0xFFFFFFFF; +} + +int64_t perfc_port_get_system_timer_elapsed(void) +{ + return (int64_t)PMU->CCNTR;//ARM_PMU_Get_CCNTR(); +} + +void perfc_port_clear_system_timer_ovf_pending(void) +{ + ARM_PMU_Set_CNTR_OVS(PMU_OVSCLR_CYCCNT_STATUS_Msk); +} + +void perfc_port_stop_system_timer_counting(void) +{ + /* stop the system timer */ + ARM_PMU_CNTR_Disable(PMU_CNTENCLR_CCNTR_ENABLE_Msk); +} + +void perfc_port_clear_system_timer_counter(void) +{ + /* clear the system timer counter */ + ARM_PMU_CYCCNT_Reset(); +} + +#endif + + diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h new file mode 100644 index 0000000..6a69700 --- /dev/null +++ b/perfc_port_pmu.h @@ -0,0 +1,49 @@ +/**************************************************************************** +* Copyright 2024 Gorgon Meducer (Email:embedded_zhuoran@hotmail.com) * +* * +* Licensed under the Apache License, Version 2.0 (the "License"); * +* you may not use this file except in compliance with the License. * +* You may obtain a copy of the License at * +* * +* http://www.apache.org/licenses/LICENSE-2.0 * +* * +* Unless required by applicable law or agreed to in writing, software * +* distributed under the License is distributed on an "AS IS" BASIS, * +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * +* See the License for the specific language governing permissions and * +* limitations under the License. * +* * +****************************************************************************/ + +/*============================ INCLUDES ======================================*/ + +#if __PERFC_USE_PMU_PORTING__ + +#include "cmsis_compiler.h" + +/*============================ MACROS ========================================*/ +/*============================ MACROFIED FUNCTIONS ===========================*/ +/*============================ TYPES =========================================*/ +typedef uint32_t perfc_global_interrupt_status_t; + +/*============================ GLOBAL VARIABLES ==============================*/ +/*============================ LOCAL VARIABLES ===============================*/ +/*============================ PROTOTYPES ====================================*/ +/*============================ IMPLEMENTATION ================================*/ + +__STATIC_INLINE +perfc_global_interrupt_status_t perfc_port_disable_global_interrupt(void) +{ + perfc_global_interrupt_status_t tStatus = __get_PRIMASK(); + __disable_irq(); + + return tStatus; +} + +__STATIC_INLINE +void perfc_port_resume_global_interrupt(perfc_global_interrupt_status_t tStatus) +{ + __set_PRIMASK(tStatus); +} + +#endif \ No newline at end of file diff --git a/systick_wrapper_gnu.s b/systick_wrapper_gnu.s index b2e0ac6..516118a 100644 --- a/systick_wrapper_gnu.s +++ b/systick_wrapper_gnu.s @@ -18,7 +18,7 @@ # include "RTE_Components.h" #endif -#if !defined(__RTE_PERFC_PORTING_USER_DEFINED__) +#if !defined(__RTE_PERFC_PORTING_USER_DEFINED__) && !defined(__PERFC_USE_PMU_PORTING__) #if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ .syntax unified From 61ba7b76dab426fd042cbfa6d05e39e4b1e18f4d Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Mon, 22 Jan 2024 17:35:18 +0000 Subject: [PATCH 15/41] Update gen_pack.sh --- gen_pack.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gen_pack.sh b/gen_pack.sh index 102e884..4d477da 100755 --- a/gen_pack.sh +++ b/gen_pack.sh @@ -45,6 +45,8 @@ DEFAULT_ARGS=(-c "v") perf_counter.h perfc_port_default.c perfc_port_default.h + perfc_port_pmu.c + perfc_port_pmu.h README.md systick_wrapper_gcc.S systick_wrapper_gnu.s From 1e5377cdd12bd6f3e2f3646ee1b3781a7b6ec899 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Mon, 22 Jan 2024 17:58:21 +0000 Subject: [PATCH 16/41] minor fix --- perf_counter.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index afca69e..422e76d 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -255,10 +255,7 @@ void delay_ms(uint32_t wMs) lMs -= iCompensate; lMs += get_system_ticks(); - do { - observer = get_system_ticks(); - } while(observer < lMs); - //while(get_system_ticks() < lUs); + while(get_system_ticks() < lMs); } __attribute__((noinline)) From 1dbdf7a380ab86cc5e2563b8848685d3466debb1 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Tue, 23 Jan 2024 15:38:35 +0000 Subject: [PATCH 17/41] no need to output int64_t in format string. --- perf_counter.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/perf_counter.h b/perf_counter.h index 82d410d..8b5ae26 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -359,8 +359,8 @@ __asm(".global __ensure_systick_wrapper\n\t"); __perf_counter_printf__( \ "--------------------------------------------\r\n"); \ __perf_counter_printf__( \ - __STR " total cycle count: %lld [%016llx]\r\n", \ - _, _); \ + __STR " total cycle count: %ld [%016lx]\r\n", \ + (long)_, (long)_); \ } else { \ __VA_ARGS__ \ }; \ From 1fb9c8a1ed1b1643773d024f486a5df155d6a5d3 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 24 Jan 2024 09:35:41 +0000 Subject: [PATCH 18/41] rename perfc_port_get_system_freq() to perfc_port_get_system_timer_freq() --- perf_counter.c | 10 ++++------ perfc_port_default.c | 2 +- perfc_port_pmu.c | 4 ++-- template/perfc_port_user.c | 4 ++-- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index 422e76d..8b2bd8f 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -73,7 +73,6 @@ volatile static uint32_t s_wMSResidule = 0; volatile static uint32_t s_wUSResidule = 0; volatile static int64_t s_lSystemMS = 0; volatile static int64_t s_lSystemUS = 0; -volatile static int64_t s_lEventRecorderOffset = 0; volatile static int64_t s_lSystemClockCounts = 0; @@ -81,7 +80,7 @@ volatile static int64_t s_lSystemClockCounts = 0; /* low level interface for porting */ extern -uint32_t perfc_port_get_system_freq(void); +uint32_t perfc_port_get_system_timer_freq(void); extern int64_t perfc_port_get_system_timer_top(void); extern @@ -136,7 +135,7 @@ void __perf_os_patch_init(void) void update_perf_counter(void) { - uint32_t wSystemFrequency = perfc_port_get_system_freq(); + uint32_t wSystemFrequency = perfc_port_get_system_timer_freq(); s_wUSUnit = wSystemFrequency / 1000000ul; s_wMSUnit = wSystemFrequency / 1000ul; @@ -392,7 +391,6 @@ bool __perfc_is_time_out(int64_t lPeriod, int64_t *plTimestamp, bool bAutoReload uint32_t EventRecorderTimerSetup (void) { /* doing nothing at all */ - s_lEventRecorderOffset = get_system_ticks(); return 1; } @@ -400,14 +398,14 @@ uint32_t EventRecorderTimerSetup (void) /// \return timer frequency in Hz uint32_t EventRecorderTimerGetFreq (void) { - return perfc_port_get_system_freq(); + return perfc_port_get_system_timer_freq(); } /// Get timer count. /// \return timer count (32-bit) uint32_t EventRecorderTimerGetCount (void) { - return get_system_ticks() - s_lEventRecorderOffset; + return get_system_ticks(); } diff --git a/perfc_port_default.c b/perfc_port_default.c index 374af83..a1d8df4 100644 --- a/perfc_port_default.c +++ b/perfc_port_default.c @@ -180,7 +180,7 @@ void perfc_port_init_system_timer(bool bTimerOccupied) } __WEAK -uint32_t perfc_port_get_system_freq(void) +uint32_t perfc_port_get_system_timer_freq(void) { return SystemCoreClock; } diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 3e9b803..f7cd1a6 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -853,7 +853,7 @@ typedef struct /*============================ PROTOTYPES ====================================*/ /* low level interface for porting */ extern -uint32_t perfc_port_get_system_freq(void); +uint32_t perfc_port_get_system_timer_freq(void); extern int64_t perfc_port_get_system_timer_top(void); extern @@ -894,7 +894,7 @@ void perfc_port_init_system_timer(bool bIsTimeOccupied) } } -uint32_t perfc_port_get_system_freq(void) +uint32_t perfc_port_get_system_timer_freq(void) { extern uint32_t SystemCoreClock; diff --git a/template/perfc_port_user.c b/template/perfc_port_user.c index 8111c85..55d5397 100644 --- a/template/perfc_port_user.c +++ b/template/perfc_port_user.c @@ -46,7 +46,7 @@ /*============================ PROTOTYPES ====================================*/ /* low level interface for porting */ extern -uint32_t perfc_port_get_system_freq(void); +uint32_t perfc_port_get_system_timer_freq(void); extern int64_t perfc_port_get_system_timer_top(void); extern @@ -83,7 +83,7 @@ void perfc_port_init_system_timer(bool bIsTimeOccupied) } } -uint32_t perfc_port_get_system_freq(void) +uint32_t perfc_port_get_system_timer_freq(void) { /* return the system timer frequency */ return 0; From 72e5eb9e1b5ab40a8dca85af280f4b3a7ae912b9 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 24 Jan 2024 09:35:46 +0000 Subject: [PATCH 19/41] Update README.md --- README.md | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 96d8985..da056e8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# perf_counter (v2.2.4) +# perf_counter (v2.3.0-dev) A dedicated performance counter for Cortex-M Systick. It shares the SysTick with users' original SysTick function(s) without interfering with it. This library will bring new functionalities, such as performance counter,` delay_us` and `clock()` service defined in `time.h`. ### Features: @@ -12,8 +12,13 @@ A dedicated performance counter for Cortex-M Systick. It shares the SysTick with - **Easy to use** - Helper macros: `__cycleof__()` , `__super_loop_monitor__()` etc. - Helper functions: `start_cycle_counter()`, `stop_cycle_counter()` etc. -- **Support ALL Cortex-M processors** - - Including **Cortex-M85** and Star-MC1 +- Enable a broader processor architecture support + - **Support ALL Cortex-M processors** + - SysTick + - **[new]**Performance Monitor Unit (PMU) + + - **[new]**Easy to port to different architectures with a porting template + - **Provide Free Services** - Do **NOT** interfer with existing SysTick based applications - **Support ALL arm compilers** @@ -26,13 +31,12 @@ A dedicated performance counter for Cortex-M Systick. It shares the SysTick with - **CMSIS-Pack is available** - **RT-Thread package is avaialble** - **Time based services** - - `delay_us()` and `delay_ms()` + - **[new]**`delay_us()` and `delay_ms()` with **64bit return value**. - Provides Timestamp services via `get_system_ticks()`, `get_system_us` and `get_system_ms()`. - **Support both RTOS and bare-metal environments** - Support SysTick Reconfiguration - Support changing System Frequency - - **[new]** Support stack-overflow detection in RTOS environment via `perfc_check_task_stack_canary_safe()` - + - Support stack-overflow detection in RTOS environment via `perfc_check_task_stack_canary_safe()` - **Utilities for C language enhancement** - Macros to detect compilers, e.g. `__IS_COMPILER_ARM_COMPILER_6__`, `__IS_COMPILER_LLVM__` etc. - Macro to create atomicity for specified code block, i.e. `__IRQ_SAFE{...}` @@ -250,7 +254,10 @@ git clone https://github.com/GorgonMeducer/perf_counter.git ``` 2. Add including path for `perf_counter` folder -3. Add `perf_counter.c` to your compilation +3. Add `perf_counter.c` to your compilation. + +> **NOTE**: Please do **NOT** add any assembly source files of this `perf_counter` library to your compilation, i.e. `systick_wrapper_gcc.S`, `systick_wrapper_gnu.s` or `systick_wrapper_ual.s`. + 4. Include `perf_counter.h` in corresponding c source file: ```c From 142a2415b97d05583d5fa336ae4624560801d444 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 14:04:03 +0000 Subject: [PATCH 20/41] update porting prototype --- perf_counter.c | 9 ++++++--- perf_counter.h | 6 +++++- perfc_port_default.c | 36 ++++++++++++++++++++---------------- perfc_port_pmu.c | 10 ++++++++-- template/perfc_port_user.c | 33 +++++++++++++++++++-------------- 5 files changed, 58 insertions(+), 36 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index 8b2bd8f..341cc7f 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -86,7 +86,7 @@ int64_t perfc_port_get_system_timer_top(void); extern bool perfc_port_is_system_timer_ovf_pending(void); extern -void perfc_port_init_system_timer(bool bTimerOccupied); +bool perfc_port_init_system_timer(bool bTimerOccupied); extern int64_t perfc_port_get_system_timer_elapsed(void); extern @@ -145,10 +145,11 @@ void update_perf_counter(void) } } -void init_cycle_counter(bool bIsSysTickOccupied) +bool init_cycle_counter(bool bIsSysTickOccupied) { + bool bResult = false; __IRQ_SAFE { - perfc_port_init_system_timer(bIsSysTickOccupied); // use the longest period + bResult = perfc_port_init_system_timer(bIsSysTickOccupied); // use the longest period perfc_port_clear_system_timer_ovf_pending(); } @@ -158,6 +159,8 @@ void init_cycle_counter(bool bIsSysTickOccupied) s_lSystemUS = 0; // reset system microsecond counter __perf_os_patch_init(); + + return bResult; } /*! \note this function should only be called when irq is disabled diff --git a/perf_counter.h b/perf_counter.h index 8b5ae26..2b55680 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -900,8 +900,12 @@ extern int64_t __stop_task_cycle_counter(task_cycle_info_t *ptInfo); * * \param[in] bIsSysTickOccupied A boolean value which indicates whether SysTick * is already used by user application. + * + * \return false Failed to initialize the timer counter, as the timer is not + * available or IO error. + * \return true initialization is successful. */ -extern void init_cycle_counter(bool bIsSysTickOccupied); +extern bool init_cycle_counter(bool bIsSysTickOccupied); /*! diff --git a/perfc_port_default.c b/perfc_port_default.c index a1d8df4..db13451 100644 --- a/perfc_port_default.c +++ b/perfc_port_default.c @@ -160,23 +160,27 @@ extern uint32_t SystemCoreClock; #if !__PERFC_CFG_DISABLE_DEFAULT_SYSTICK_PORTING__ __WEAK -void perfc_port_init_system_timer(bool bTimerOccupied) +bool perfc_port_init_system_timer(bool bTimerOccupied) { - if (bTimerOccupied) { - return ; - } - - __IRQ_SAFE { - SysTick->CTRL = 0; - - SysTick->LOAD = SysTick_LOAD_RELOAD_Msk; /* set reload register */ - //NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ - SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ - SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | - SysTick_CTRL_TICKINT_Msk | - SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ - //SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; - } + do { + if (bTimerOccupied) { + break; + } + + __IRQ_SAFE { + SysTick->CTRL = 0; + + SysTick->LOAD = SysTick_LOAD_RELOAD_Msk; /* set reload register */ + //NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + //SCB->ICSR = SCB_ICSR_PENDSTCLR_Msk; + } + } while(0); + + retun true; } __WEAK diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index f7cd1a6..d980515 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -859,7 +859,7 @@ int64_t perfc_port_get_system_timer_top(void); extern bool perfc_port_is_system_timer_ovf_pending(void); extern -void perfc_port_init_system_timer(bool bTimerOccupied); +bool perfc_port_init_system_timer(bool bTimerOccupied); extern int64_t perfc_port_get_system_timer_elapsed(void); extern @@ -878,10 +878,14 @@ void perfc_port_clear_system_timer_counter(void); #if __PERFC_USE_PMU_PORTING__ -void perfc_port_init_system_timer(bool bIsTimeOccupied) +bool perfc_port_init_system_timer(bool bIsTimeOccupied) { UNUSED_PARAM(bIsTimeOccupied); + if (!(PMU->TYPE & PMU_TYPE_CYCCNT_PRESENT_Msk)) { + return false; + } + __IRQ_SAFE { ARM_PMU_Disable(); @@ -892,6 +896,8 @@ void perfc_port_init_system_timer(bool bIsTimeOccupied) ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); ARM_PMU_Enable(); } + + return true; } uint32_t perfc_port_get_system_timer_freq(void) diff --git a/template/perfc_port_user.c b/template/perfc_port_user.c index 55d5397..a44f5fb 100644 --- a/template/perfc_port_user.c +++ b/template/perfc_port_user.c @@ -52,7 +52,7 @@ int64_t perfc_port_get_system_timer_top(void); extern bool perfc_port_is_system_timer_ovf_pending(void); extern -void perfc_port_init_system_timer(bool bTimerOccupied); +bool perfc_port_init_system_timer(bool bTimerOccupied); extern int64_t perfc_port_get_system_timer_elapsed(void); extern @@ -67,20 +67,25 @@ void perfc_port_clear_system_timer_counter(void); #if __PERFC_USE_USER_CUSTOM_PORTING__ -void perfc_port_init_system_timer(bool bIsTimeOccupied) +bool perfc_port_init_system_timer(bool bIsTimeOccupied) { - if (bIsTimeOccupied) { - return ; - } - - __IRQ_SAFE { - /* Configure the system timer count with the longest possible period - * clear counter - * Clear overflow pending flag - * Enable interrupt if required - * start counting - */ - } + bool bResult = true; + do { + if (bIsTimeOccupied) { + break; + } + + __IRQ_SAFE { + /* Configure the system timer count with the longest possible period + * clear counter + * Clear overflow pending flag + * Enable interrupt if required + * start counting + */ + } + } while(0); + + return true; } uint32_t perfc_port_get_system_timer_freq(void) From 9b8a258ad809d51347a65b5889df2e974f4d412c Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 14:07:42 +0000 Subject: [PATCH 21/41] Update perf_counter.h --- perf_counter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf_counter.h b/perf_counter.h index 2b55680..da5ea7a 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -359,7 +359,7 @@ __asm(".global __ensure_systick_wrapper\n\t"); __perf_counter_printf__( \ "--------------------------------------------\r\n"); \ __perf_counter_printf__( \ - __STR " total cycle count: %ld [%016lx]\r\n", \ + __STR " total cycle count: %ld [%08lx]\r\n", \ (long)_, (long)_); \ } else { \ __VA_ARGS__ \ From c3ca73072fd1b598a7b2138c7a688e5a17e2ee24 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 14:43:56 +0000 Subject: [PATCH 22/41] Update perfc_port_pmu.c --- perfc_port_pmu.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index d980515..33f6145 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -877,6 +877,13 @@ void perfc_port_clear_system_timer_counter(void); #if __PERFC_USE_PMU_PORTING__ + +__USED +void DebugMon_Handler(void) +{ + +} + bool perfc_port_init_system_timer(bool bIsTimeOccupied) { @@ -892,6 +899,9 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) perfc_port_stop_system_timer_counting(); perfc_port_clear_system_timer_counter(); perfc_port_clear_system_timer_ovf_pending(); + + /* enable interrupt */ + PMU->INTENSET = PMU_INTENSET_CCYCNT_ENABLE_Msk; ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); ARM_PMU_Enable(); From c743567e60b5dde21aa18ada395deb7786f1efc2 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 16:00:35 +0000 Subject: [PATCH 23/41] add debug monitor exception handler --- perfc_port_pmu.c | 258 ++++++++++++++++++++++++++++++++++++++++++++--- perfc_port_pmu.h | 2 + 2 files changed, 247 insertions(+), 13 deletions(-) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 33f6145..5ac4b86 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -55,16 +55,6 @@ #define __OM volatile /*! Defines 'write only' structure member permissions */ #define __IOM volatile /*! Defines 'read / write' structure member permissions */ -/** - \ingroup CMSIS_core_register - \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) - \brief Type definitions for the Performance Monitoring Unit (PMU) - @{ - */ - -#define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ -#define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ - /** \brief PMU Event Counter Registers (0-30) Definitions */ #define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ #define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ @@ -809,7 +799,184 @@ #define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ #define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ -/*@} end of group CMSIS_PMU */ + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ +#define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ +#define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ /*============================ MACROFIED FUNCTIONS ===========================*/ /*============================ TYPES =========================================*/ @@ -848,6 +1015,48 @@ typedef struct __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ } PMU_Type; +/** + \brief Structure type to access the Debug Control Block Registers (DCB). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/*! + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + /*============================ GLOBAL VARIABLES ==============================*/ /*============================ LOCAL VARIABLES ===============================*/ /*============================ PROTOTYPES ====================================*/ @@ -881,9 +1090,21 @@ void perfc_port_clear_system_timer_counter(void); __USED void DebugMon_Handler(void) { - + perfc_port_pmu_insert_debug_monitor_handler(); } +void perfc_port_pmu_insert_debug_monitor_handler(void) +{ + if (!(SCB->DFSR & SCB_DFSR_PMU_Msk)) { + return ; + } + + if (perfc_port_is_system_timer_ovf_pending()) { + perfc_port_clear_system_timer_ovf_pending(); + + user_code_insert_to_systick_handler(); + } +} bool perfc_port_init_system_timer(bool bIsTimeOccupied) { @@ -897,11 +1118,22 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) ARM_PMU_Disable(); perfc_port_stop_system_timer_counting(); + + /* disable PMU Cycle Counter interrupt */ + PMU->INTENCLR = PMU_INTENCLR_CYCCNT_ENABLE_Msk; + + perfc_port_clear_system_timer_counter(); perfc_port_clear_system_timer_ovf_pending(); - /* enable interrupt */ + DCB->DEMCR |= DCB_DEMCR_UMON_EN_Msk | + DCB_DEMCR_SDME_Msk | + DCB_DEMCR_MON_EN_Msk ; + + /* enable PMU Cycle Counter interrupt */ PMU->INTENSET = PMU_INTENSET_CCYCNT_ENABLE_Msk; + + ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); ARM_PMU_Enable(); diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h index 6a69700..8592c31 100644 --- a/perfc_port_pmu.h +++ b/perfc_port_pmu.h @@ -29,6 +29,8 @@ typedef uint32_t perfc_global_interrupt_status_t; /*============================ GLOBAL VARIABLES ==============================*/ /*============================ LOCAL VARIABLES ===============================*/ /*============================ PROTOTYPES ====================================*/ +extern +void perfc_port_pmu_insert_debug_monitor_handler(void); /*============================ IMPLEMENTATION ================================*/ __STATIC_INLINE From 322de17755923af53b8ba95021988d71e2135e55 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 16:09:58 +0000 Subject: [PATCH 24/41] rename user_code_insert_to_systick_handler as perfc_port_insert_to_system_timer_insert_ovf_handler --- README.md | 4 ++-- perf_counter.c | 2 +- perf_counter.h | 8 ++++++-- perfc_port_pmu.c | 6 +++--- perfc_port_pmu.h | 2 +- systick_wrapper_gcc.S | 2 +- systick_wrapper_gnu.s | 2 +- systick_wrapper_ual.s | 4 ++-- 8 files changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index da056e8..0c9c6d5 100644 --- a/README.md +++ b/README.md @@ -266,13 +266,13 @@ git clone https://github.com/GorgonMeducer/perf_counter.git 5. Make sure your system contains the CMSIS (with a version 5.7.0 or above) as `perf_counter.h` includes `cmsis_compiler.h`. -6. Call the function `user_code_insert_to_systick_handler()` in your `SysTick_Handler()` +6. Call the function `perfc_port_insert_to_system_timer_insert_ovf_handler()` in your `SysTick_Handler()` ```c void SysTick_Handler(void) { ... - user_code_insert_to_systick_handler(); + perfc_port_insert_to_system_timer_insert_ovf_handler(); ... } ``` diff --git a/perf_counter.c b/perf_counter.c index 341cc7f..504d430 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -99,7 +99,7 @@ void perfc_port_clear_system_timer_counter(void); /*============================ IMPLEMENTATION ================================*/ /*============================ INCLUDES ======================================*/ -void user_code_insert_to_systick_handler(void) +void perfc_port_insert_to_system_timer_insert_ovf_handler(void) { int64_t lLoad = perfc_port_get_system_timer_top() + 1; s_lSystemClockCounts += lLoad; diff --git a/perf_counter.h b/perf_counter.h index da5ea7a..6904ec0 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -313,6 +313,10 @@ extern "C" { # define __perf_counter_printf__ printf #endif +/* deprecated macro for backward compatibility */ +#define user_code_insert_to_systick_handler \ + perfc_port_insert_to_system_timer_insert_ovf_handler + #if __PLOOC_VA_NUM_ARGS() != 0 #warning Please enable GNU extensions, it is required by __cycleof__() and \ __super_loop_monitor__() @@ -909,7 +913,7 @@ extern bool init_cycle_counter(bool bIsSysTickOccupied); /*! - * \brief a system timer handler inserted to the SysTick_Handler + * \brief a system timer overflow handler * * \note - if you are using a compiler other than armcc or armclang, e.g. iar, * arm gcc etc, the systick_wrapper_ual.o doesn't work with the linker @@ -922,7 +926,7 @@ extern bool init_cycle_counter(bool bIsSysTickOccupied); * you do NOT have to insert this function into your SysTick_Handler, * the systick_wrapper_ual.s will do the work for you. */ -extern void user_code_insert_to_systick_handler(void); +extern void perfc_port_insert_to_system_timer_insert_ovf_handler(void); /*! * \brief update perf_counter as SystemCoreClock has been updated. diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 5ac4b86..31897c3 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -1090,10 +1090,10 @@ void perfc_port_clear_system_timer_counter(void); __USED void DebugMon_Handler(void) { - perfc_port_pmu_insert_debug_monitor_handler(); + perfc_port_pmu_insert_to_debug_monitor_handler(); } -void perfc_port_pmu_insert_debug_monitor_handler(void) +void perfc_port_pmu_insert_to_debug_monitor_handler(void) { if (!(SCB->DFSR & SCB_DFSR_PMU_Msk)) { return ; @@ -1102,7 +1102,7 @@ void perfc_port_pmu_insert_debug_monitor_handler(void) if (perfc_port_is_system_timer_ovf_pending()) { perfc_port_clear_system_timer_ovf_pending(); - user_code_insert_to_systick_handler(); + perfc_port_insert_to_system_timer_insert_ovf_handler(); } } diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h index 8592c31..91694d2 100644 --- a/perfc_port_pmu.h +++ b/perfc_port_pmu.h @@ -30,7 +30,7 @@ typedef uint32_t perfc_global_interrupt_status_t; /*============================ LOCAL VARIABLES ===============================*/ /*============================ PROTOTYPES ====================================*/ extern -void perfc_port_pmu_insert_debug_monitor_handler(void); +void perfc_port_pmu_insert_to_debug_monitor_handler(void); /*============================ IMPLEMENTATION ================================*/ __STATIC_INLINE diff --git a/systick_wrapper_gcc.S b/systick_wrapper_gcc.S index 2d13da1..822d321 100644 --- a/systick_wrapper_gcc.S +++ b/systick_wrapper_gcc.S @@ -29,7 +29,7 @@ __wrap_SysTick_Handler: push {r4, r5} push {r4, lr} - ldr R0, =user_code_insert_to_systick_handler + ldr R0, =perfc_port_insert_to_system_timer_insert_ovf_handler blx R0 pop {r4, r5} mov lr, r5 diff --git a/systick_wrapper_gnu.s b/systick_wrapper_gnu.s index 516118a..f7be081 100644 --- a/systick_wrapper_gnu.s +++ b/systick_wrapper_gnu.s @@ -35,7 +35,7 @@ $Sub$$SysTick_Handler: push {r4, r5} push {r4, lr} - ldr R0, =user_code_insert_to_systick_handler + ldr R0, =perfc_port_insert_to_system_timer_insert_ovf_handler blx R0 pop {r4, r5} mov lr, r5 diff --git a/systick_wrapper_ual.s b/systick_wrapper_ual.s index 9e7b64a..63878cc 100644 --- a/systick_wrapper_ual.s +++ b/systick_wrapper_ual.s @@ -22,11 +22,11 @@ |$Sub$$SysTick_Handler| PROC EXPORT |$Sub$$SysTick_Handler| - IMPORT user_code_insert_to_systick_handler + IMPORT perfc_port_insert_to_system_timer_insert_ovf_handler IMPORT |$Super$$SysTick_Handler| push {r4, r5} push {r4, lr} - LDR R0, =user_code_insert_to_systick_handler + LDR R0, =perfc_port_insert_to_system_timer_insert_ovf_handler BLX R0 pop {r4, r5} mov lr, r5 From 098438934660c1d405fad335310a6c450adf99b7 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Sat, 27 Jan 2024 16:21:49 +0000 Subject: [PATCH 25/41] Update perfc_port_default.c --- perfc_port_default.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perfc_port_default.c b/perfc_port_default.c index db13451..1b05652 100644 --- a/perfc_port_default.c +++ b/perfc_port_default.c @@ -180,7 +180,7 @@ bool perfc_port_init_system_timer(bool bTimerOccupied) } } while(0); - retun true; + return true; } __WEAK From 7855ca7850dd039370d75172cae83a08db9d00fe Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Thu, 1 Feb 2024 15:20:48 +0000 Subject: [PATCH 26/41] support RTE --- perf_counter.c | 1 - perfc_port_pmu.c | 176 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 163 insertions(+), 14 deletions(-) diff --git a/perf_counter.c b/perf_counter.c index 504d430..5a4ccb8 100644 --- a/perf_counter.c +++ b/perf_counter.c @@ -242,7 +242,6 @@ void delay_us(uint32_t wUs) while(get_system_ticks() < lUs); } -volatile int64_t observer; void delay_ms(uint32_t wMs) { int64_t lMs = (int64_t)wMs * (int64_t)s_wMSUnit; diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 31897c3..bedb250 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -37,9 +37,18 @@ # pragma clang diagnostic ignored "-Wmissing-prototypes" #endif +#if defined(_RTE_) +# include "RTE_Components.h" +#endif + + + /*============================ MACROS ========================================*/ +#if defined(CMSIS_device_header) +# include CMSIS_device_header +#else /* IO definitions (access restrictions to peripheral registers) */ #ifdef __cplusplus @@ -966,6 +975,145 @@ #define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ #define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/** + * \brief PMU Events + * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. + * */ + +#define ARM_PMU_SW_INCR 0x0000 /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */ +#define ARM_PMU_L1I_CACHE_REFILL 0x0001 /*!< L1 I-Cache refill */ +#define ARM_PMU_L1D_CACHE_REFILL 0x0003 /*!< L1 D-Cache refill */ +#define ARM_PMU_L1D_CACHE 0x0004 /*!< L1 D-Cache access */ +#define ARM_PMU_LD_RETIRED 0x0006 /*!< Memory-reading instruction architecturally executed and condition code check pass */ +#define ARM_PMU_ST_RETIRED 0x0007 /*!< Memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_INST_RETIRED 0x0008 /*!< Instruction architecturally executed */ +#define ARM_PMU_EXC_TAKEN 0x0009 /*!< Exception entry */ +#define ARM_PMU_EXC_RETURN 0x000A /*!< Exception return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_PC_WRITE_RETIRED 0x000C /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */ +#define ARM_PMU_BR_IMMED_RETIRED 0x000D /*!< Immediate branch architecturally executed */ +#define ARM_PMU_BR_RETURN_RETIRED 0x000E /*!< Function return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BR_MIS_PRED 0x0010 /*!< Mispredicted or not predicted branch speculatively executed */ +#define ARM_PMU_CPU_CYCLES 0x0011 /*!< Cycle */ +#define ARM_PMU_BR_PRED 0x0012 /*!< Predictable branch speculatively executed */ +#define ARM_PMU_MEM_ACCESS 0x0013 /*!< Data memory access */ +#define ARM_PMU_L1I_CACHE 0x0014 /*!< Level 1 instruction cache access */ +#define ARM_PMU_L1D_CACHE_WB 0x0015 /*!< Level 1 data cache write-back */ +#define ARM_PMU_L2D_CACHE 0x0016 /*!< Level 2 data cache access */ +#define ARM_PMU_L2D_CACHE_REFILL 0x0017 /*!< Level 2 data cache refill */ +#define ARM_PMU_L2D_CACHE_WB 0x0018 /*!< Level 2 data cache write-back */ +#define ARM_PMU_BUS_ACCESS 0x0019 /*!< Bus access */ +#define ARM_PMU_MEMORY_ERROR 0x001A /*!< Local memory error */ +#define ARM_PMU_INST_SPEC 0x001B /*!< Instruction speculatively executed */ +#define ARM_PMU_BUS_CYCLES 0x001D /*!< Bus cycles */ +#define ARM_PMU_CHAIN 0x001E /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */ +#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F /*!< Level 1 data cache allocation without refill */ +#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020 /*!< Level 2 data cache allocation without refill */ +#define ARM_PMU_BR_RETIRED 0x0021 /*!< Branch instruction architecturally executed */ +#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022 /*!< Mispredicted branch instruction architecturally executed */ +#define ARM_PMU_STALL_FRONTEND 0x0023 /*!< No operation issued because of the frontend */ +#define ARM_PMU_STALL_BACKEND 0x0024 /*!< No operation issued because of the backend */ +#define ARM_PMU_L2I_CACHE 0x0027 /*!< Level 2 instruction cache access */ +#define ARM_PMU_L2I_CACHE_REFILL 0x0028 /*!< Level 2 instruction cache refill */ +#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029 /*!< Level 3 data cache allocation without refill */ +#define ARM_PMU_L3D_CACHE_REFILL 0x002A /*!< Level 3 data cache refill */ +#define ARM_PMU_L3D_CACHE 0x002B /*!< Level 3 data cache access */ +#define ARM_PMU_L3D_CACHE_WB 0x002C /*!< Level 3 data cache write-back */ +#define ARM_PMU_LL_CACHE_RD 0x0036 /*!< Last level data cache read */ +#define ARM_PMU_LL_CACHE_MISS_RD 0x0037 /*!< Last level data cache read miss */ +#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039 /*!< Level 1 data cache read miss */ +#define ARM_PMU_OP_COMPLETE 0x003A /*!< Operation retired */ +#define ARM_PMU_OP_SPEC 0x003B /*!< Operation speculatively executed */ +#define ARM_PMU_STALL 0x003C /*!< Stall cycle for instruction or operation not sent for execution */ +#define ARM_PMU_STALL_OP_BACKEND 0x003D /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */ +#define ARM_PMU_STALL_OP_FRONTEND 0x003E /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */ +#define ARM_PMU_STALL_OP 0x003F /*!< Instruction or operation slots not occupied each cycle */ +#define ARM_PMU_L1D_CACHE_RD 0x0040 /*!< Level 1 data cache read */ +#define ARM_PMU_LE_RETIRED 0x0100 /*!< Loop end instruction executed */ +#define ARM_PMU_LE_SPEC 0x0101 /*!< Loop end instruction speculatively executed */ +#define ARM_PMU_BF_RETIRED 0x0104 /*!< Branch future instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BF_SPEC 0x0105 /*!< Branch future instruction speculatively executed and condition code check pass */ +#define ARM_PMU_LE_CANCEL 0x0108 /*!< Loop end instruction not taken */ +#define ARM_PMU_BF_CANCEL 0x0109 /*!< Branch future instruction not taken */ +#define ARM_PMU_SE_CALL_S 0x0114 /*!< Call to secure function, resulting in Security state change */ +#define ARM_PMU_SE_CALL_NS 0x0115 /*!< Call to non-secure function, resulting in Security state change */ +#define ARM_PMU_DWT_CMPMATCH0 0x0118 /*!< DWT comparator 0 match */ +#define ARM_PMU_DWT_CMPMATCH1 0x0119 /*!< DWT comparator 1 match */ +#define ARM_PMU_DWT_CMPMATCH2 0x011A /*!< DWT comparator 2 match */ +#define ARM_PMU_DWT_CMPMATCH3 0x011B /*!< DWT comparator 3 match */ +#define ARM_PMU_MVE_INST_RETIRED 0x0200 /*!< MVE instruction architecturally executed */ +#define ARM_PMU_MVE_INST_SPEC 0x0201 /*!< MVE instruction speculatively executed */ +#define ARM_PMU_MVE_FP_RETIRED 0x0204 /*!< MVE floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SPEC 0x0205 /*!< MVE floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208 /*!< MVE half-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_HP_SPEC 0x0209 /*!< MVE half-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C /*!< MVE single-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SP_SPEC 0x020D /*!< MVE single-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214 /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215 /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_INT_RETIRED 0x0224 /*!< MVE integer instruction architecturally executed */ +#define ARM_PMU_MVE_INT_SPEC 0x0225 /*!< MVE integer instruction speculatively executed */ +#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228 /*!< MVE multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229 /*!< MVE multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_RETIRED 0x0238 /*!< MVE load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_SPEC 0x0239 /*!< MVE load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_RETIRED 0x023C /*!< MVE load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_SPEC 0x023D /*!< MVE load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_RETIRED 0x0240 /*!< MVE store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_SPEC 0x0241 /*!< MVE store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244 /*!< MVE contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245 /*!< MVE contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248 /*!< MVE contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249 /*!< MVE contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C /*!< MVE contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D /*!< MVE contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250 /*!< MVE non-contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251 /*!< MVE non-contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254 /*!< MVE non-contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255 /*!< MVE non-contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258 /*!< MVE non-contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259 /*!< MVE non-contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C /*!< MVE memory instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D /*!< MVE memory instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260 /*!< MVE memory load instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261 /*!< MVE memory load instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261 /*!< MVE memory store instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265 /*!< MVE memory store instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C /*!< MVE unaligned memory load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D /*!< MVE unaligned memory load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290 /*!< MVE unaligned load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291 /*!< MVE unaligned load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294 /*!< MVE unaligned store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295 /*!< MVE unaligned store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298 /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299 /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0 /*!< MVE vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1 /*!< MVE vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4 /*!< MVE floating-point vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5 /*!< MVE floating-point vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8 /*!< MVE integer vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9 /*!< MVE integer vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_PRED 0x02B8 /*!< Cycles where one or more predicated beats architecturally executed */ +#define ARM_PMU_MVE_STALL 0x02CC /*!< Stall cycles caused by an MVE instruction */ +#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD /*!< Stall cycles caused by an MVE instruction because of resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0 /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */ +#define ARM_PMU_MVE_STALL_BREAK 0x02D3 /*!< Stall cycles caused by an MVE chain break */ +#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4 /*!< Stall cycles caused by MVE register dependency */ +#define ARM_PMU_ITCM_ACCESS 0x4007 /*!< Instruction TCM access */ +#define ARM_PMU_DTCM_ACCESS 0x4008 /*!< Data TCM access */ +#define ARM_PMU_TRCEXTOUT0 0x4010 /*!< ETM external output 0 */ +#define ARM_PMU_TRCEXTOUT1 0x4011 /*!< ETM external output 1 */ +#define ARM_PMU_TRCEXTOUT2 0x4012 /*!< ETM external output 2 */ +#define ARM_PMU_TRCEXTOUT3 0x4013 /*!< ETM external output 3 */ +#define ARM_PMU_CTI_TRIGOUT4 0x4018 /*!< Cross-trigger Interface output trigger 4 */ +#define ARM_PMU_CTI_TRIGOUT5 0x4019 /*!< Cross-trigger Interface output trigger 5 */ +#define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ +#define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ + + /** \brief SCB Debug Fault Status Register Definitions */ #define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ #define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ @@ -978,9 +1126,13 @@ #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#endif + + /*============================ MACROFIED FUNCTIONS ===========================*/ /*============================ TYPES =========================================*/ +#if !defined(CMSIS_device_header) /** \brief Structure type to access the Performance Monitoring Unit (PMU). */ @@ -1056,6 +1208,7 @@ typedef struct uint32_t RESERVED0[5U]; __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ } SCB_Type; +#endif /*============================ GLOBAL VARIABLES ==============================*/ /*============================ LOCAL VARIABLES ===============================*/ @@ -1079,9 +1232,6 @@ extern void perfc_port_clear_system_timer_counter(void); /*============================ INCLUDES ======================================*/ - -#include "m-profile/armv8m_pmu.h" - /*============================ IMPLEMENTATION ================================*/ @@ -1115,16 +1265,18 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) } __IRQ_SAFE { - ARM_PMU_Disable(); + PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; perfc_port_stop_system_timer_counting(); /* disable PMU Cycle Counter interrupt */ PMU->INTENCLR = PMU_INTENCLR_CYCCNT_ENABLE_Msk; - - + perfc_port_clear_system_timer_counter(); perfc_port_clear_system_timer_ovf_pending(); + + /* reset all event counter */ + PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; DCB->DEMCR |= DCB_DEMCR_UMON_EN_Msk | DCB_DEMCR_SDME_Msk | @@ -1132,11 +1284,9 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) /* enable PMU Cycle Counter interrupt */ PMU->INTENSET = PMU_INTENSET_CCYCNT_ENABLE_Msk; - - - ARM_PMU_CNTR_Enable(PMU_CNTENSET_CCNTR_ENABLE_Msk); - ARM_PMU_Enable(); + PMU->CNTENSET = PMU_CNTENSET_CCNTR_ENABLE_Msk; + PMU->CTRL |= PMU_CTRL_ENABLE_Msk; } return true; @@ -1169,19 +1319,19 @@ int64_t perfc_port_get_system_timer_elapsed(void) void perfc_port_clear_system_timer_ovf_pending(void) { - ARM_PMU_Set_CNTR_OVS(PMU_OVSCLR_CYCCNT_STATUS_Msk); + PMU->OVSCLR = PMU_OVSCLR_CYCCNT_STATUS_Msk; } void perfc_port_stop_system_timer_counting(void) { /* stop the system timer */ - ARM_PMU_CNTR_Disable(PMU_CNTENCLR_CCNTR_ENABLE_Msk); + PMU->CNTENCLR = PMU_CNTENCLR_CCNTR_ENABLE_Msk; } void perfc_port_clear_system_timer_counter(void) { /* clear the system timer counter */ - ARM_PMU_CYCCNT_Reset(); + PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk; } #endif From de78403efe3106142bfc81ce9223391774085012 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Thu, 1 Feb 2024 17:29:14 +0000 Subject: [PATCH 27/41] add events for intructions executed, memory access and L1 DCache Refill. --- perfc_port_pmu.c | 217 ++++++++++++++++++++++++++++++++++++++++++++++- perfc_port_pmu.h | 13 +++ 2 files changed, 228 insertions(+), 2 deletions(-) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index bedb250..6b92b9a 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -50,6 +50,10 @@ # include CMSIS_device_header #else +#ifndef __PMU_NUM_EVENTCNT +# define __PMU_NUM_EVENTCNT 8 +#endif + /* IO definitions (access restrictions to peripheral registers) */ #ifdef __cplusplus #define __I volatile /*!< Defines 'read only' permissions */ @@ -1128,7 +1132,6 @@ #endif - /*============================ MACROFIED FUNCTIONS ===========================*/ /*============================ TYPES =========================================*/ @@ -1210,8 +1213,23 @@ typedef struct } SCB_Type; #endif +enum { + PMU_CNT_INSTRUCTION = 0, + PMU_CNT_MEM_ACCESS = 1, + PMU_CNT_L1_DCACHE_REFILL = 2, +}; + /*============================ GLOBAL VARIABLES ==============================*/ /*============================ LOCAL VARIABLES ===============================*/ + +#if __PMU_NUM_EVENTCNT >= 6 +# define __COUNTER_NUM__ (3 + (__PMU_NUM_EVENTCNT - 6)) +#else +# define __COUNTER_NUM__ (__PMU_NUM_EVENTCNT >> 1) +#endif + +static volatile uint64_t s_dwEventCounter[__COUNTER_NUM__] = {0}; + /*============================ PROTOTYPES ====================================*/ /* low level interface for porting */ extern @@ -1254,6 +1272,60 @@ void perfc_port_pmu_insert_to_debug_monitor_handler(void) perfc_port_insert_to_system_timer_insert_ovf_handler(); } + + /* get number of counters */ + uint_fast8_t chCounter = PMU->TYPE & PMU_TYPE_NUM_CNTS_Msk; + chCounter = MIN(chCounter, __PMU_NUM_EVENTCNT); + + do { + /* handle counter 1 */ + if (chCounter < 2) { + break ; + } + if (PMU->OVSCLR & PMU_OVSCLR_CNT1_STATUS_Msk) { + PMU->OVSCLR = PMU_OVSCLR_CNT1_STATUS_Msk; + + s_dwEventCounter[PMU_CNT_INSTRUCTION] += (uint64_t)0x100000000; + } + + + /* handle counter 3 */ + if (chCounter < 4) { + break ; + } + if (PMU->OVSCLR & PMU_OVSCLR_CNT3_STATUS_Msk) { + PMU->OVSCLR = PMU_OVSCLR_CNT3_STATUS_Msk; + + s_dwEventCounter[PMU_CNT_MEM_ACCESS] += (uint64_t)0x100000000; + } + + + /* handle counter 5 */ + if (chCounter < 6) { + break ; + } + if (PMU->OVSCLR & PMU_OVSCLR_CNT5_STATUS_Msk) { + PMU->OVSCLR = PMU_OVSCLR_CNT5_STATUS_Msk; + + s_dwEventCounter[PMU_CNT_L1_DCACHE_REFILL] += (uint64_t)0x100000000; + } + + if (chCounter > 6) { + uint64_t dwCounterLoad + = (uint64_t)1 << ((PMU->TYPE & PMU_TYPE_SIZE_CNTS_Msk) >> PMU_TYPE_SIZE_CNTS_Pos); + + for (int_fast8_t n = 6; n < chCounter; n++) { + uint32_t wMask = (1<OVSSET & wMask) { + /* counter overflow is detected */ + PMU->OVSCLR = wMask; /* clear Overflow Flag */ + + /* update corresponding counter */ + s_dwEventCounter[n - 3] += dwCounterLoad; + } + } + } + } while(0); } bool perfc_port_init_system_timer(bool bIsTimeOccupied) @@ -1277,7 +1349,76 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) /* reset all event counter */ PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; - + + /* configure event counter */ + do { + uint_fast8_t chCounter = PMU->TYPE & PMU_TYPE_NUM_CNTS_Msk; + chCounter = MIN(chCounter, __PMU_NUM_EVENTCNT); + + if (chCounter >= 2) { + /* 32 bit counter for instruction architecturally executed */ + PMU->EVTYPER[0] = ARM_PMU_INST_RETIRED; + PMU->EVTYPER[1] = ARM_PMU_CHAIN; + + /* clear counter 0/1 overflow flag */ + PMU->OVSCLR = PMU_OVSCLR_CNT0_STATUS_Msk + | PMU_OVSCLR_CNT1_STATUS_Msk; + + /* enable counter 1 interrupt */ + PMU->INTENSET = PMU_INTENSET_CNT1_ENABLE_Msk; + + /* enable counter 0/1 */ + PMU->CNTENSET = PMU_CNTENSET_CNT0_ENABLE_Msk + | PMU_CNTENSET_CNT1_ENABLE_Msk; + } + + if (chCounter >= 4) { + /* 32bit counter for all Data memory Accesses */ + PMU->EVTYPER[2] = ARM_PMU_MEM_ACCESS; + PMU->EVTYPER[3] = ARM_PMU_CHAIN; + + /* clear counter 2/3 overflow flag */ + PMU->OVSCLR = PMU_OVSCLR_CNT2_STATUS_Msk + | PMU_OVSCLR_CNT3_STATUS_Msk; + + /* enable counter 3 interrupt */ + PMU->INTENSET = PMU_INTENSET_CNT3_ENABLE_Msk; + + /* enable counter 2/3 */ + PMU->CNTENSET = PMU_CNTENSET_CNT2_ENABLE_Msk + | PMU_CNTENSET_CNT3_ENABLE_Msk; + } + + if (chCounter >= 6) { + /* 32bit counter for all Data memory Accesses */ + PMU->EVTYPER[4] = ARM_PMU_L1D_CACHE_REFILL; + PMU->EVTYPER[5] = ARM_PMU_CHAIN; + + /* clear counter 4/5 overflow flag */ + PMU->OVSCLR = PMU_OVSCLR_CNT4_STATUS_Msk + | PMU_OVSCLR_CNT5_STATUS_Msk; + + /* enable counter 5 interrupt */ + PMU->INTENSET = PMU_INTENSET_CNT5_ENABLE_Msk; + + /* enable counter 4/5 */ + PMU->CNTENSET = PMU_CNTENSET_CNT4_ENABLE_Msk + | PMU_CNTENSET_CNT5_ENABLE_Msk; + + } + + if (chCounter > 6) { + for (int_fast8_t n = 6; n < chCounter; n++) { + uint32_t wMask = (1<OVSCLR = wMask; /* clear overflow flag */ + PMU->INTENSET = wMask; /* enable interrupt */ + PMU->CNTENSET = wMask; /* enable counter */ + } + } + + } while(0); + DCB->DEMCR |= DCB_DEMCR_UMON_EN_Msk | DCB_DEMCR_SDME_Msk | DCB_DEMCR_MON_EN_Msk ; @@ -1292,6 +1433,78 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) return true; } +uint64_t perfc_pmu_get_instruction_count(void) +{ + uint32_t wHigh16, wLow16; + uint64_t dwResult; + bool bIsOverflow = false; + __IRQ_SAFE { + do { + wHigh16 = PMU->EVCNTR[1]; + wLow16 = PMU->EVCNTR[0]; + } while(wHigh16 < PMU->EVCNTR[1]); + dwResult = s_dwEventCounter[PMU_CNT_INSTRUCTION]; + bIsOverflow = (0 != (PMU->OVSCLR & PMU_OVSCLR_CNT1_STATUS_Msk)); + } + + dwResult += wLow16 | (wHigh16 << 16); + + if (bIsOverflow) { + dwResult += (uint64_t)1<<32; + } + + return dwResult; +} + +uint64_t perfc_pmu_get_memory_access_count(void) +{ + uint32_t wHigh16, wLow16; + uint64_t dwResult; + bool bIsOverflow = false; + + __IRQ_SAFE { + do { + wHigh16 = PMU->EVCNTR[3]; + wLow16 = PMU->EVCNTR[2]; + } while(wHigh16 < PMU->EVCNTR[3]); + dwResult = s_dwEventCounter[PMU_CNT_MEM_ACCESS]; + bIsOverflow = (0 != (PMU->OVSCLR & PMU_OVSCLR_CNT3_STATUS_Msk)); + } + + dwResult += wLow16 | (wHigh16 << 16); + + if (bIsOverflow) { + dwResult += (uint64_t)1<<32; + } + + return dwResult; +} + + +uint64_t perfc_pmu_get_L1_dcache_refill_count(void) +{ + uint32_t wHigh16, wLow16; + uint64_t dwResult; + bool bIsOverflow = false; + + __IRQ_SAFE { + do { + wHigh16 = PMU->EVCNTR[5]; + wLow16 = PMU->EVCNTR[4]; + } while(wHigh16 < PMU->EVCNTR[5]); + dwResult = s_dwEventCounter[PMU_CNT_L1_DCACHE_REFILL]; + bIsOverflow = (0 != (PMU->OVSCLR & PMU_OVSCLR_CNT5_STATUS_Msk)); + } + + dwResult += wLow16 | (wHigh16 << 16); + + if (bIsOverflow) { + dwResult += (uint64_t)1<<32; + } + + return dwResult; +} + uint32_t perfc_port_get_system_timer_freq(void) { extern uint32_t SystemCoreClock; diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h index 91694d2..fbb47d1 100644 --- a/perfc_port_pmu.h +++ b/perfc_port_pmu.h @@ -31,6 +31,16 @@ typedef uint32_t perfc_global_interrupt_status_t; /*============================ PROTOTYPES ====================================*/ extern void perfc_port_pmu_insert_to_debug_monitor_handler(void); + +extern +uint64_t perfc_pmu_get_instruction_count(void); + +extern +uint64_t perfc_pmu_get_memory_access_count(void); + +extern +uint64_t perfc_pmu_get_L1_dcache_refill_count(void); + /*============================ IMPLEMENTATION ================================*/ __STATIC_INLINE @@ -48,4 +58,7 @@ void perfc_port_resume_global_interrupt(perfc_global_interrupt_status_t tStatus) __set_PRIMASK(tStatus); } + + + #endif \ No newline at end of file From 1d15a6c43112265fb066732ad57484ac9c7e83d5 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Thu, 1 Feb 2024 18:34:00 +0000 Subject: [PATCH 28/41] Update perfc_port_pmu.c --- perfc_port_pmu.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 6b92b9a..cb2dacd 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -42,8 +42,6 @@ #endif - - /*============================ MACROS ========================================*/ #if defined(CMSIS_device_header) @@ -1311,8 +1309,6 @@ void perfc_port_pmu_insert_to_debug_monitor_handler(void) } if (chCounter > 6) { - uint64_t dwCounterLoad - = (uint64_t)1 << ((PMU->TYPE & PMU_TYPE_SIZE_CNTS_Msk) >> PMU_TYPE_SIZE_CNTS_Pos); for (int_fast8_t n = 6; n < chCounter; n++) { uint32_t wMask = (1<OVSCLR = wMask; /* clear Overflow Flag */ /* update corresponding counter */ - s_dwEventCounter[n - 3] += dwCounterLoad; + s_dwEventCounter[n - 3] += 0x10000; } } } From 4d7cadceccc52db20433f79aa395e857ba29a71b Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Thu, 22 Feb 2024 09:36:41 +0000 Subject: [PATCH 29/41] minor update --- os/perf_os_patch_rtx5.c | 2 +- perfc_port_pmu.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/os/perf_os_patch_rtx5.c b/os/perf_os_patch_rtx5.c index 24132c7..ce16b1e 100644 --- a/os/perf_os_patch_rtx5.c +++ b/os/perf_os_patch_rtx5.c @@ -76,7 +76,7 @@ void EvrRtxThreadSwitched (osThreadId_t thread_id) { __on_context_switch((osRtxThread_t *)thread_id); -#if defined(RTE_Compiler_EventRecorder) +#if defined(RTE_Compiler_EventRecorder) || defined(RTE_CMSIS_View_EventRecorder) # define EvtRtxThreadSwitched \ EventID(EventLevelOp, EvtRtxThreadNo, 0x19U) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index cb2dacd..a5aa542 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -1417,6 +1417,7 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) DCB->DEMCR |= DCB_DEMCR_UMON_EN_Msk | DCB_DEMCR_SDME_Msk | + DCB_DEMCR_TRCENA_Msk | DCB_DEMCR_MON_EN_Msk ; /* enable PMU Cycle Counter interrupt */ From 8dec9ab04b154bd92ace908a9095e78e3f019257 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 18:45:55 +0000 Subject: [PATCH 30/41] disable DWT --- perfc_port_pmu.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index a5aa542..73e3c1e 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -1310,7 +1310,7 @@ void perfc_port_pmu_insert_to_debug_monitor_handler(void) if (chCounter > 6) { - for (int_fast8_t n = 6; n < chCounter; n++) { + for (uint_fast8_t n = 6; n < chCounter; n++) { uint32_t wMask = (1<OVSSET & wMask) { /* counter overflow is detected */ @@ -1333,8 +1333,9 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) } __IRQ_SAFE { + PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; - + perfc_port_stop_system_timer_counting(); /* disable PMU Cycle Counter interrupt */ @@ -1404,7 +1405,7 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) } if (chCounter > 6) { - for (int_fast8_t n = 6; n < chCounter; n++) { + for (uint_fast8_t n = 6; n < chCounter; n++) { uint32_t wMask = (1<OVSCLR = wMask; /* clear overflow flag */ @@ -1419,12 +1420,15 @@ bool perfc_port_init_system_timer(bool bIsTimeOccupied) DCB_DEMCR_SDME_Msk | DCB_DEMCR_TRCENA_Msk | DCB_DEMCR_MON_EN_Msk ; - + /* enable PMU Cycle Counter interrupt */ PMU->INTENSET = PMU_INTENSET_CCYCNT_ENABLE_Msk; PMU->CNTENSET = PMU_CNTENSET_CCNTR_ENABLE_Msk; PMU->CTRL |= PMU_CTRL_ENABLE_Msk; + + /* force to disable DWT */ + DWT->CTRL = 0; } return true; @@ -1450,6 +1454,9 @@ uint64_t perfc_pmu_get_instruction_count(void) dwResult += (uint64_t)1<<32; } + /* force to disable DWT */ + DWT->CTRL = 0; + return dwResult; } @@ -1474,6 +1481,9 @@ uint64_t perfc_pmu_get_memory_access_count(void) dwResult += (uint64_t)1<<32; } + /* force to disable DWT */ + DWT->CTRL = 0; + return dwResult; } @@ -1499,6 +1509,9 @@ uint64_t perfc_pmu_get_L1_dcache_refill_count(void) dwResult += (uint64_t)1<<32; } + /* force to disable DWT */ + DWT->CTRL = 0; + return dwResult; } From 43719596213e9006bc346269c943696b0e49fecf Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 19:16:54 +0000 Subject: [PATCH 31/41] suppress warnings --- benchmark/coremark_port/core_main.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/benchmark/coremark_port/core_main.c b/benchmark/coremark_port/core_main.c index d8711fc..2adb3d0 100644 --- a/benchmark/coremark_port/core_main.c +++ b/benchmark/coremark_port/core_main.c @@ -22,6 +22,15 @@ Original Author: Shay Gal-on */ #include "coremark.h" +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wreserved-identifier" +# pragma clang diagnostic ignored "-Wconditional-uninitialized" +# pragma clang diagnostic ignored "-Wsign-conversion" +# pragma clang diagnostic ignored "-Wimplicit-int-conversion" +#endif + + /* Function: iterate Run the benchmark for a specified number of iterations. From 901d161b07a7daf5256d10d8feb6a86a2986aa86 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 19:17:08 +0000 Subject: [PATCH 32/41] improve portability --- perfc_port_pmu.c | 633 +++++++++++++++++++++++++++++++---------------- 1 file changed, 420 insertions(+), 213 deletions(-) diff --git a/perfc_port_pmu.c b/perfc_port_pmu.c index 73e3c1e..685e1db 100644 --- a/perfc_port_pmu.c +++ b/perfc_port_pmu.c @@ -66,6 +66,366 @@ #define __OM volatile /*! Defines 'write only' structure member permissions */ #define __IOM volatile /*! Defines 'read / write' structure member permissions */ +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#endif + + +#if !defined(__PMU_PRESENT) || (0 == __PMU_PRESENT) /** \brief PMU Event Counter Registers (0-30) Definitions */ #define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ #define PMU_EVCNTR_CNT_Msk (0xFFFFUL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ @@ -810,174 +1170,6 @@ #define PMU_AUTHSTATUS_SUNID_Pos 22U /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Position */ #define PMU_AUTHSTATUS_SUNID_Msk (0x3UL << PMU_AUTHSTATUS_SUNID_Pos) /*!< PMU AUTHSTATUS: Secure Unprivileged Non-invasive Debug Mask */ - -/** \brief DCB Debug Halting Control and Status Register Definitions */ -#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ -#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ - -#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ -#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ - -#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ -#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ - -#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ -#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ - -#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ -#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ - -#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ -#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ - -#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ -#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ - -#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ -#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ - -#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ -#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ - -#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ -#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ - -#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ -#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ - -#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ -#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ - -#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ -#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ - -#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ -#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ - -#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ -#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ - -#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ -#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ - -#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ -#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ - -#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ -#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ - -/** \brief DCB Debug Core Register Selector Register Definitions */ -#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ -#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ - -#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ -#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ - -/** \brief DCB Debug Core Register Data Register Definitions */ -#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ -#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ - -/** \brief DCB Debug Exception and Monitor Control Register Definitions */ -#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ -#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ - -#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ -#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ - -#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ -#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ - -#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ -#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ - -#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ -#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ - -#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ -#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ - -#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ -#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ - -#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ -#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ - -#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ -#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ - -#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ -#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ - -#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ -#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ - -#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ -#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ - -#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ -#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ - -#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ -#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ - -#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ -#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ - -#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ -#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ - -#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ -#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ - -/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ -#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ -#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ - -#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ -#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ - -#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ -#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ - -#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ -#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ - -/** \brief DCB Debug Authentication Control Register Definitions */ -#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ -#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ - -#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ -#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ - -#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ -#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ - -#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ -#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ - -#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ -#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ - -#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ -#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ - -#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ -#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ - -/** \brief DCB Debug Security Control and Status Register Definitions */ -#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ -#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ - -#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ -#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ - -#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ -#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ - -#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ -#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ - - /** * \brief PMU Events * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. @@ -1115,59 +1307,35 @@ #define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ #define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ +#endif -/** \brief SCB Debug Fault Status Register Definitions */ -#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ -#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ -#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ -#define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ -#define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ -#define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ -#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ -#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ -#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#ifndef PMU +# define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ +# define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ +#endif + +#ifndef DCB +# define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ +# define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ +#endif + +#ifndef SCB +# define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +# define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ +# define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#endif +#ifndef DWT +# define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +# define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ #endif + /*============================ MACROFIED FUNCTIONS ===========================*/ /*============================ TYPES =========================================*/ #if !defined(CMSIS_device_header) -/** - \brief Structure type to access the Performance Monitoring Unit (PMU). - */ -typedef struct -{ - __IOM uint32_t EVCNTR[31]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ - __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ - uint32_t RESERVED1[224]; - __IOM uint32_t EVTYPER[31]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ - __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ - uint32_t RESERVED3[480]; - __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ - uint32_t RESERVED4[7]; - __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ - uint32_t RESERVED5[7]; - __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ - uint32_t RESERVED6[7]; - __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ - uint32_t RESERVED7[7]; - __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ - uint32_t RESERVED8[7]; - __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ - uint32_t RESERVED9[7]; - __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ - uint32_t RESERVED10[79]; - __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ - __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ - uint32_t RESERVED11[108]; - __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ - __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ - uint32_t RESERVED12[3]; - __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ -} PMU_Type; - /** \brief Structure type to access the Debug Control Block Registers (DCB). */ @@ -1211,6 +1379,42 @@ typedef struct } SCB_Type; #endif +#if !defined(__PMU_PRESENT) || (0 == __PMU_PRESENT) +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[31]; /*!< Offset: 0x0 (R/W) Event Counter Registers */ + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[31]; /*!< Offset: 0x400 (R/W) Event Type and Filter Registers */ + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; +#endif + enum { PMU_CNT_INSTRUCTION = 0, PMU_CNT_MEM_ACCESS = 1, @@ -1222,10 +1426,13 @@ enum { #if __PMU_NUM_EVENTCNT >= 6 # define __COUNTER_NUM__ (3 + (__PMU_NUM_EVENTCNT - 6)) -#else +#elif __PMU_NUM_EVENTCNT > 2 # define __COUNTER_NUM__ (__PMU_NUM_EVENTCNT >> 1) +#else +# define __COUNTER_NUM__ (5) #endif + static volatile uint64_t s_dwEventCounter[__COUNTER_NUM__] = {0}; /*============================ PROTOTYPES ====================================*/ From 90c90747b88b2eea8ca60be9b0b68f9d0d57215d Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 20:02:30 +0000 Subject: [PATCH 33/41] add __cpu_perf__ --- perf_counter.h | 6 ++++-- perfc_port_pmu.h | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/perf_counter.h b/perf_counter.h index 6904ec0..a3801b1 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -380,14 +380,14 @@ __asm(".global __ensure_systick_wrapper\n\t"); E.g. \code while (1) { - __cpu_time__(100) { + __cpu_usage__(100) { delay_us(5000); } delay_us(5000); } \endcode */ -#define __cpu_time__(__CNT, ...) \ +#define __cpu_usage__(__CNT, ...) \ static int64_t SAFE_NAME(s_lTimestamp) = 0, SAFE_NAME(s_lTotal) = 0; \ static uint32_t s_wLoopCounter = (__CNT); \ using(float __usage__ = 0, ({ \ @@ -412,6 +412,8 @@ __asm(".global __ensure_systick_wrapper\n\t"); ({SAFE_NAME(s_lTotal) += stop_task_cycle_counter(); \ s_wLoopCounter--;})) +#define __cpu_time__ __cpu_usage__ + /*! * \addtogroup gBasicTimerService 1.2 Timer Service * \ingroup gBasic diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h index fbb47d1..0ce7b68 100644 --- a/perfc_port_pmu.h +++ b/perfc_port_pmu.h @@ -23,6 +23,43 @@ /*============================ MACROS ========================================*/ /*============================ MACROFIED FUNCTIONS ===========================*/ +#define __cpu_perf__(__str, ...) \ + using( \ + struct { \ + uint64_t dwNoInstr; \ + int64_t lCycles; \ + uint32_t wCalib; \ + float fCPI; \ + } __PERF_INFO__ = {0}, \ + ({ \ + __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count(); \ + __PERF_INFO__.wCalib = perfc_pmu_get_instruction_count() \ + - __PERF_INFO__.dwNoInstr; \ + __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count(); \ + }), \ + ({ \ + __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count() \ + - __PERF_INFO__.dwNoInstr \ + - __PERF_INFO__.wCalib; \ + __PERF_INFO__.fCPI = (float)( (double)__PERF_INFO__.lCycles \ + / (double)__PERF_INFO__.dwNoInstr); \ + if (__PLOOC_VA_NUM_ARGS(__VA_ARGS__) == 0) { \ + printf( "\r\n" \ + "[Report for " __str "]\r\n" \ + "-----------------------------------------\r\n" \ + "Instruction executed: %lld\r\n" \ + "Cycle Used: %lld\r\n" \ + "Cycles per Instructions: %3.3f \r\n", \ + __PERF_INFO__.dwNoInstr, \ + __PERF_INFO__.lCycles, \ + __PERF_INFO__.fCPI); \ + } else { \ + __VA_ARGS__ \ + } \ + })) \ + __cycleof__("", { __PERF_INFO__.lCycles = __cycle_count__; }) + + /*============================ TYPES =========================================*/ typedef uint32_t perfc_global_interrupt_status_t; From db1d3a1e296ab51c0ac9e75b97cf9ed15777aa66 Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 20:27:29 +0000 Subject: [PATCH 34/41] add cache miss rate calculation --- perfc_port_pmu.h | 43 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/perfc_port_pmu.h b/perfc_port_pmu.h index 0ce7b68..741d320 100644 --- a/perfc_port_pmu.h +++ b/perfc_port_pmu.h @@ -27,20 +27,43 @@ using( \ struct { \ uint64_t dwNoInstr; \ + uint64_t dwNoMemAccess; \ + uint64_t dwNoCacheMiss; \ + uint64_t dwNoL1DCacheRefill; \ int64_t lCycles; \ - uint32_t wCalib; \ + uint32_t wInstrCalib; \ + uint32_t wMemAccessCalib; \ float fCPI; \ + float fDCacheMissRate; \ } __PERF_INFO__ = {0}, \ ({ \ __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count(); \ - __PERF_INFO__.wCalib = perfc_pmu_get_instruction_count() \ + __PERF_INFO__.dwNoMemAccess = perfc_pmu_get_memory_access_count(); \ + __PERF_INFO__.wInstrCalib = perfc_pmu_get_instruction_count() \ - __PERF_INFO__.dwNoInstr; \ + __PERF_INFO__.wMemAccessCalib = perfc_pmu_get_memory_access_count() \ + - __PERF_INFO__.dwNoMemAccess; \ + __PERF_INFO__.dwNoL1DCacheRefill \ + = perfc_pmu_get_L1_dcache_refill_count(); \ __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count(); \ + __PERF_INFO__.dwNoMemAccess = perfc_pmu_get_memory_access_count(); \ }), \ ({ \ __PERF_INFO__.dwNoInstr = perfc_pmu_get_instruction_count() \ - - __PERF_INFO__.dwNoInstr \ - - __PERF_INFO__.wCalib; \ + - __PERF_INFO__.dwNoInstr \ + - __PERF_INFO__.wInstrCalib; \ + __PERF_INFO__.dwNoMemAccess = perfc_pmu_get_memory_access_count() \ + - __PERF_INFO__.dwNoMemAccess \ + - __PERF_INFO__.wMemAccessCalib; \ + __PERF_INFO__.dwNoL1DCacheRefill \ + = perfc_pmu_get_L1_dcache_refill_count() \ + - __PERF_INFO__.dwNoL1DCacheRefill; \ + \ + __PERF_INFO__.fDCacheMissRate \ + = (float)( (double)__PERF_INFO__.dwNoL1DCacheRefill \ + / (double)__PERF_INFO__.dwNoMemAccess) \ + * 100.0f; \ + \ __PERF_INFO__.fCPI = (float)( (double)__PERF_INFO__.lCycles \ / (double)__PERF_INFO__.dwNoInstr); \ if (__PLOOC_VA_NUM_ARGS(__VA_ARGS__) == 0) { \ @@ -49,10 +72,18 @@ "-----------------------------------------\r\n" \ "Instruction executed: %lld\r\n" \ "Cycle Used: %lld\r\n" \ - "Cycles per Instructions: %3.3f \r\n", \ + "Cycles per Instructions: %3.3f \r\n\r\n" \ + "Memory Access Count: %lld\r\n" \ + "L1 DCache Refill Count: %lld\r\n" \ + "L1 DCache Miss Rate: %3.4f %% \r\n" \ + , \ __PERF_INFO__.dwNoInstr, \ __PERF_INFO__.lCycles, \ - __PERF_INFO__.fCPI); \ + __PERF_INFO__.fCPI, \ + __PERF_INFO__.dwNoMemAccess, \ + __PERF_INFO__.dwNoL1DCacheRefill, \ + __PERF_INFO__.fDCacheMissRate \ + ); \ } else { \ __VA_ARGS__ \ } \ From c213ffd46de7779d5575eece6337551a3f11993a Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 20:33:15 +0000 Subject: [PATCH 35/41] Update perf_counter.h --- perf_counter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf_counter.h b/perf_counter.h index a3801b1..0487041 100644 --- a/perf_counter.h +++ b/perf_counter.h @@ -42,7 +42,7 @@ extern "C" { #define __PERF_COUNTER_VER_MINOR__ 3 #define __PERF_COUNTER_VER_REVISE__ 0 -#define __PERF_COUNTER_VER_STR__ "dev" +#define __PERF_COUNTER_VER_STR__ "" #define __PER_COUNTER_VER__ (__PERF_COUNTER_VER_MAJOR__ * 10000ul \ +__PERF_COUNTER_VER_MINOR__ * 100ul \ From 15d26f61d84ea36c45995394d0e0830b6ad1956f Mon Sep 17 00:00:00 2001 From: Gabriel Wang Date: Wed, 28 Feb 2024 20:37:58 +0000 Subject: [PATCH 36/41] remove lib folder --- GorgonMeducer.perf_counter.pdsc | 10 +- gen_pack.sh | 1 - lib/LICENSE | 201 ------- lib/libperf_counter_gcc.a | Bin 10118 -> 0 bytes lib/perf_counter.h | 973 -------------------------------- lib/perf_counter.lib | Bin 25254 -> 0 bytes lib/perf_os_patch_freertos.c | 240 -------- lib/perf_os_patch_rt_thread.c | 112 ---- lib/perf_os_patch_rtx5.c | 99 ---- lib/perf_os_patch_threadx.c | 128 ----- 10 files changed, 5 insertions(+), 1759 deletions(-) delete mode 100644 lib/LICENSE delete mode 100644 lib/libperf_counter_gcc.a delete mode 100644 lib/perf_counter.h delete mode 100644 lib/perf_counter.lib delete mode 100644 lib/perf_os_patch_freertos.c delete mode 100644 lib/perf_os_patch_rt_thread.c delete mode 100644 lib/perf_os_patch_rtx5.c delete mode 100644 lib/perf_os_patch_threadx.c diff --git a/GorgonMeducer.perf_counter.pdsc b/GorgonMeducer.perf_counter.pdsc index b671636..5c5d9b2 100644 --- a/GorgonMeducer.perf_counter.pdsc +++ b/GorgonMeducer.perf_counter.pdsc @@ -6,7 +6,7 @@ A dedicated performance counter for the Cortex-M Systick. It shares the SysTick with users' original SysTick function without interfering with it. This library will bring new functionalities, such as performance counter, APIs for delay, clock() defined in time.h etc. https://raw.githubusercontent.com/GorgonMeducer/perf_counter/CMSIS-Pack/cmsis-pack/ https://github.com/GorgonMeducer/perf_counter/issues - lib/LICENSE + LICENSE