From a632e34d7b52fab0f72fafa5a7cfcf1fb5f81161 Mon Sep 17 00:00:00 2001 From: HDR Date: Mon, 18 Sep 2023 13:47:48 +0200 Subject: [PATCH] Attempt to fix 1.08 not compiling properly - This commit attempts to fix an issue where 1.08 won't compile properly --- .../CMSIS/Core/Include/cachel1_armv7.h | 28 +- .../CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h | 803 +- .../CMSIS/Core/Include/cmsis_armclang.h | 1656 +-- .../CMSIS/Core/Include/cmsis_armclang_ltm.h | 1615 +-- .../CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h | 1868 +-- .../CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h | 46 +- .../CMSIS/Core/Include/cmsis_version.h | 8 +- .../CMSIS/Core/Include/core_armv81mml.h | 85 +- .../CMSIS/Core/Include/core_armv8mml.h | 41 +- .../CMSIS_5/CMSIS/Core/Include/core_cm3.h | 18 +- .../CMSIS_5/CMSIS/Core/Include/core_cm33.h | 41 +- .../CMSIS_5/CMSIS/Core/Include/core_cm35p.h | 43 +- .../CMSIS_5/CMSIS/Core/Include/core_cm4.h | 18 +- .../CMSIS_5/CMSIS/Core/Include/core_cm55.h | 668 +- .../CMSIS_5/CMSIS/Core/Include/core_cm7.h | 36 +- .../CMSIS_5/CMSIS/Core/Include/core_cm85.h | 4672 +++++++ .../CMSIS_5/CMSIS/Core/Include/core_sc300.h | 16 +- .../CMSIS_5/CMSIS/Core/Include/core_starmc1.h | 3592 ++++++ .../CMSIS_5/CMSIS/Core/Include/mpu_armv7.h | 10 +- .../CMSIS_5/CMSIS/Core/Include/mpu_armv8.h | 8 +- .../CMSIS_5/CMSIS/Core/Include/pac_armv81.h | 206 + .../CMSIS_5/CMSIS/Core/Include/pmu_armv8.h | 6 +- .../CMSIS/Core/Template/ARMv8-M/main_s.c | 58 + .../CMSIS/Core/Template/ARMv8-M/tz_context.c | 200 + .../Samples/GD32F10x_Samples.emProject | 27 + .../Samples/GD32F10x_Samples.emSession | 46 + CartReaderApp/GD32F10x/Samples/systick.cpp | 39 + .../GD32F10x/Scripts/GD32F10x_Flash.icf | 147 + .../GD32F10x/Scripts/GD32F10x_Target.js | 2 +- .../GD32F10x/Source/GD32F10x_Startup.s | 24 +- .../GD32F10x/Source/gd32f10x_cl_Vectors.s | 291 + .../GD32F10x/Source/gd32f10x_hd_Vectors.s | 2 +- .../GD32F10x/Source/gd32f10x_md_Vectors.s | 272 + .../GD32F10x/Source/gd32f10x_xd_Vectors.s | 283 + CartReaderApp/GD32F10x/Source/main.cpp | 48 + CartReaderApp/GD32F10x/Source/start.s | 60 + .../GD32F10x/XML/GD32F101C4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101C6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101C8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101CB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101R4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101R6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101R8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101RK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101T4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101T6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101T8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101TB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101V8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101VK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F101ZK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103C4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103C6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103C8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103CB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103R4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103R6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103R8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103RK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103T4_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103T6_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103T8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103TB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103V8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103VK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZI_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F103ZK_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105R8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105RG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105V8_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105VG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105ZC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105ZD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105ZE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105ZF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F105ZG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107RG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VB_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107VG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107ZC_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107ZD_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107ZE_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107ZF_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F107ZG_MemoryMap.xml | 5 + .../GD32F10x/XML/GD32F10x_CL_Registers.xml | 10221 ++++++++++++++++ .../GD32F10x/XML/GD32F10x_HD_Registers.xml | 7280 +++++++++++ .../GD32F10x/XML/GD32F10x_MD_Registers.xml | 6300 ++++++++++ .../GD32F10x/XML/GD32F10x_XD_Registers.xml | 7652 ++++++++++++ .../GD32F10x/XML/project_templates.xml | 166 + .../GD32F10x/XML/property_groups.xml | 2019 +++ CartReaderApp/GDCartReader.emProject | 2 +- .../Obj/GDCartReader/Common-3bab6b7c.o.tmp | 0 .../Obj/GDCartReader/Common-fe735770.o.tmp | 0 .../Output/Debug/Obj/GDCartReader/Common.d | 45 + .../Output/Debug/Obj/GDCartReader/Common.o | Bin 0 -> 148664 bytes .../Output/Debug/Obj/GDCartReader/Display.d | 45 + .../Output/Debug/Obj/GDCartReader/Display.o | Bin 0 -> 158748 bytes .../Output/Debug/Obj/GDCartReader/GB.d | 50 + .../Output/Debug/Obj/GDCartReader/GB.o | Bin 0 -> 203312 bytes .../Output/Debug/Obj/GDCartReader/GBA.d | 49 + .../Output/Debug/Obj/GDCartReader/GBA.o | Bin 0 -> 227516 bytes .../Output/Debug/Obj/GDCartReader/GBM.d | 49 + .../Output/Debug/Obj/GDCartReader/GBM.o | Bin 0 -> 166012 bytes .../Debug/Obj/GDCartReader/GD32F10x_Startup.d | 2 + .../Debug/Obj/GDCartReader/GD32F10x_Startup.o | Bin 0 -> 2200 bytes .../Debug/Obj/GDCartReader/GDCartReader.ind | 28 + .../Output/Debug/Obj/GDCartReader/Operate.d | 47 + .../Output/Debug/Obj/GDCartReader/Operate.o | Bin 0 -> 154316 bytes .../Obj/GDCartReader/SEGGER_THUMB_Startup.d | 2 + .../Obj/GDCartReader/SEGGER_THUMB_Startup.o | Bin 0 -> 1804 bytes .../Output/Debug/Obj/GDCartReader/diskio.d | 46 + .../Output/Debug/Obj/GDCartReader/diskio.o | Bin 0 -> 157168 bytes .../Output/Debug/Obj/GDCartReader/ff.d | 14 + .../Output/Debug/Obj/GDCartReader/ff.o | Bin 0 -> 100496 bytes .../Output/Debug/Obj/GDCartReader/ffsystem.d | 11 + .../Output/Debug/Obj/GDCartReader/ffsystem.o | Bin 0 -> 22996 bytes .../Output/Debug/Obj/GDCartReader/ffunicode.d | 11 + .../Output/Debug/Obj/GDCartReader/ffunicode.o | Bin 0 -> 27740 bytes .../Debug/Obj/GDCartReader/flashparam.d | 41 + .../Debug/Obj/GDCartReader/flashparam.o | Bin 0 -> 137352 bytes .../Debug/Obj/GDCartReader/gd32f10x_dma.d | 36 + .../Debug/Obj/GDCartReader/gd32f10x_dma.o | Bin 0 -> 152228 bytes .../Debug/Obj/GDCartReader/gd32f10x_fmc.d | 36 + .../Debug/Obj/GDCartReader/gd32f10x_fmc.o | Bin 0 -> 154596 bytes .../Debug/Obj/GDCartReader/gd32f10x_gpio.d | 36 + .../Debug/Obj/GDCartReader/gd32f10x_gpio.o | Bin 0 -> 147184 bytes .../Obj/GDCartReader/gd32f10x_hd_Vectors.d | 2 + .../Obj/GDCartReader/gd32f10x_hd_Vectors.o | Bin 0 -> 15832 bytes .../Debug/Obj/GDCartReader/gd32f10x_i2c.d | 36 + .../Debug/Obj/GDCartReader/gd32f10x_i2c.o | Bin 0 -> 154760 bytes .../Debug/Obj/GDCartReader/gd32f10x_rcu.d | 36 + .../Debug/Obj/GDCartReader/gd32f10x_rcu.o | Bin 0 -> 159688 bytes .../Debug/Obj/GDCartReader/gd32f10x_sdio.d | 37 + .../Debug/Obj/GDCartReader/gd32f10x_sdio.o | Bin 0 -> 160860 bytes .../Output/Debug/Obj/GDCartReader/main.d | 51 + .../Output/Debug/Obj/GDCartReader/main.o | Bin 0 -> 171136 bytes .../Output/Debug/Obj/GDCartReader/sdcard.d | 40 + .../Output/Debug/Obj/GDCartReader/sdcard.o | Bin 0 -> 199560 bytes .../Debug/Obj/GDCartReader/system_gd32f10x.d | 36 + .../Debug/Obj/GDCartReader/system_gd32f10x.o | Bin 0 -> 138996 bytes 198 files changed, 48818 insertions(+), 3121 deletions(-) create mode 100644 CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm85.h create mode 100644 CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_starmc1.h create mode 100644 CartReaderApp/CMSIS_5/CMSIS/Core/Include/pac_armv81.h create mode 100644 CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/main_s.c create mode 100644 CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/tz_context.c create mode 100644 CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emProject create mode 100644 CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emSession create mode 100644 CartReaderApp/GD32F10x/Samples/systick.cpp create mode 100644 CartReaderApp/GD32F10x/Scripts/GD32F10x_Flash.icf create mode 100644 CartReaderApp/GD32F10x/Source/gd32f10x_cl_Vectors.s create mode 100644 CartReaderApp/GD32F10x/Source/gd32f10x_md_Vectors.s create mode 100644 CartReaderApp/GD32F10x/Source/gd32f10x_xd_Vectors.s create mode 100644 CartReaderApp/GD32F10x/Source/main.cpp create mode 100644 CartReaderApp/GD32F10x/Source/start.s create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101C4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101C6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101C8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101CB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101R4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101R6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101R8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101RK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101T4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101T6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101T8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101TB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101V8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101VK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F101ZK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103C4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103C6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103C8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103CB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103R4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103R6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103R8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103RK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103T4_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103T6_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103T8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103TB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103V8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103VK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZI_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F103ZK_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105R8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105RG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105V8_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105VG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105ZC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105ZD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105ZE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105ZF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F105ZG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107RG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VB_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107VG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107ZC_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107ZD_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107ZE_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107ZF_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F107ZG_MemoryMap.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F10x_CL_Registers.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F10x_HD_Registers.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F10x_MD_Registers.xml create mode 100644 CartReaderApp/GD32F10x/XML/GD32F10x_XD_Registers.xml create mode 100644 CartReaderApp/GD32F10x/XML/project_templates.xml create mode 100644 CartReaderApp/GD32F10x/XML/property_groups.xml create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Common-3bab6b7c.o.tmp create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Common-fe735770.o.tmp create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Common.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Common.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Display.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Display.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GB.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GB.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GBA.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GBA.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GBM.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GBM.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GD32F10x_Startup.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GD32F10x_Startup.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/GDCartReader.ind create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/SEGGER_THUMB_Startup.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/SEGGER_THUMB_Startup.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ff.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ff.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ffsystem.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ffsystem.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/flashparam.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/flashparam.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_dma.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_dma.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_fmc.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_fmc.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_gpio.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_gpio.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_i2c.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_i2c.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_rcu.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_rcu.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_sdio.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_sdio.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/main.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/main.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/sdcard.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/sdcard.o create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.d create mode 100644 CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.o diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h index d2c3e22..abebc95 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cachel1_armv7.h @@ -1,11 +1,11 @@ /****************************************************************************** * @file cachel1_armv7.h * @brief CMSIS Level 1 Cache API for Armv7-M and later - * @version V1.0.0 - * @date 03. March 2020 + * @version V1.0.1 + * @date 19. April 2021 ******************************************************************************/ /* - * Copyright (c) 2020 Arm Limited. All rights reserved. + * Copyright (c) 2020-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -48,7 +48,7 @@ #ifndef __SCB_ICACHE_LINE_SIZE #define __SCB_ICACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ -#endif +#endif /** \brief Enable I-Cache @@ -112,7 +112,7 @@ __STATIC_FORCEINLINE void SCB_InvalidateICache (void) \param[in] addr address \param[in] isize size of memory block (in number of bytes) */ -__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize) +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (volatile void *addr, int32_t isize) { #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) if ( isize > 0 ) { @@ -325,13 +325,13 @@ __STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) \param[in] addr address \param[in] dsize size of memory block (in number of bytes) */ -__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) { #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { + if ( dsize > 0 ) { int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - + __DSB(); do { @@ -355,13 +355,13 @@ __STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsiz \param[in] addr address \param[in] dsize size of memory block (in number of bytes) */ -__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (volatile void *addr, int32_t dsize) { #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { + if ( dsize > 0 ) { int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - + __DSB(); do { @@ -385,13 +385,13 @@ __STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize \param[in] addr address (aligned to 32-byte boundary) \param[in] dsize size of memory block (in number of bytes) */ -__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (volatile void *addr, int32_t dsize) { #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) - if ( dsize > 0 ) { + if ( dsize > 0 ) { int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; - + __DSB(); do { diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h index 237ff6e..a955d47 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armcc.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file cmsis_armcc.h * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file - * @version V5.2.1 - * @date 26. March 2020 + * @version V5.3.2 + * @date 27. May 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -63,9 +63,9 @@ #ifndef __STATIC_INLINE #define __STATIC_INLINE static __inline #endif -#ifndef __STATIC_FORCEINLINE +#ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE static __forceinline -#endif +#endif #ifndef __NO_RETURN #define __NO_RETURN __declspec(noreturn) #endif @@ -129,280 +129,7 @@ #ifndef __VECTOR_TABLE_ATTRIBUTE #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) -#endif - -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ - -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __enable_irq(); */ - - -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -/* intrinsic void __disable_irq(); */ - -/** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value - */ -__STATIC_INLINE uint32_t __get_CONTROL(void) -{ - register uint32_t __regControl __ASM("control"); - return(__regControl); -} - - -/** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set - */ -__STATIC_INLINE void __set_CONTROL(uint32_t control) -{ - register uint32_t __regControl __ASM("control"); - __regControl = control; -} - - -/** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value - */ -__STATIC_INLINE uint32_t __get_IPSR(void) -{ - register uint32_t __regIPSR __ASM("ipsr"); - return(__regIPSR); -} - - -/** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value - */ -__STATIC_INLINE uint32_t __get_APSR(void) -{ - register uint32_t __regAPSR __ASM("apsr"); - return(__regAPSR); -} - - -/** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value - */ -__STATIC_INLINE uint32_t __get_xPSR(void) -{ - register uint32_t __regXPSR __ASM("xpsr"); - return(__regXPSR); -} - - -/** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value - */ -__STATIC_INLINE uint32_t __get_PSP(void) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - return(__regProcessStackPointer); -} - - -/** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set - */ -__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) -{ - register uint32_t __regProcessStackPointer __ASM("psp"); - __regProcessStackPointer = topOfProcStack; -} - - -/** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value - */ -__STATIC_INLINE uint32_t __get_MSP(void) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - return(__regMainStackPointer); -} - - -/** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) -{ - register uint32_t __regMainStackPointer __ASM("msp"); - __regMainStackPointer = topOfMainStack; -} - - -/** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value - */ -__STATIC_INLINE uint32_t __get_PRIMASK(void) -{ - register uint32_t __regPriMask __ASM("primask"); - return(__regPriMask); -} - - -/** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask - */ -__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) -{ - register uint32_t __regPriMask __ASM("primask"); - __regPriMask = (priMask); -} - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) - -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq - - -/** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value - */ -__STATIC_INLINE uint32_t __get_BASEPRI(void) -{ - register uint32_t __regBasePri __ASM("basepri"); - return(__regBasePri); -} - - -/** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set - */ -__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) -{ - register uint32_t __regBasePri __ASM("basepri"); - __regBasePri = (basePri & 0xFFU); -} - - -/** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set - */ -__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) -{ - register uint32_t __regBasePriMax __ASM("basepri_max"); - __regBasePriMax = (basePri & 0xFFU); -} - - -/** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value - */ -__STATIC_INLINE uint32_t __get_FAULTMASK(void) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - return(__regFaultMask); -} - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) -{ - register uint32_t __regFaultMask __ASM("faultmask"); - __regFaultMask = (faultMask & (uint32_t)1U); -} - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ - - -/** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value - */ -__STATIC_INLINE uint32_t __get_FPSCR(void) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - return(__regfpscr); -#else - return(0U); -#endif -} - - -/** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set - */ -__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) -{ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) - register uint32_t __regfpscr __ASM("fpscr"); - __regfpscr = (fpscr); -#else - (void)fpscr; -#endif -} - - -/*@} end of CMSIS_Core_RegAccFunctions */ - +#endif /* ########################## Core Instruction Access ######################### */ /** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface @@ -461,7 +188,7 @@ __STATIC_INLINE void __set_FPSCR(uint32_t fpscr) */ #define __DMB() __dmb(0xF) - + /** \brief Reverse byte order (32 bit) \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. @@ -616,187 +343,461 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) /** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; + __ISB(); +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __STREXH(value, ptr) __strex(value, ptr) -#else - #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") -#endif +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} /** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) - #define __STREXW(value, ptr) __strex(value, ptr) -#else - #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") -#endif +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} /** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value */ -#define __CLREX __clrex +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set */ -#define __SSAT __ssat +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value */ -#define __USAT __usat +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} /** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask */ -#ifndef __NO_EMBEDDED_ASM -__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) { - rrx r0, r0 - bx lr + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); } -#endif +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + /** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) +#define __enable_fault_irq __enable_fiq /** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) +#define __disable_fault_irq __disable_fiq /** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value */ -#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} /** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set */ -#define __STRBT(value, ptr) __strt(value, ptr) +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xFFU); +} /** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set */ -#define __STRHT(value, ptr) __strt(value, ptr) +__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + register uint32_t __regBasePriMax __ASM("basepri_max"); + __regBasePriMax = (basePri & 0xFFU); +} /** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value */ -#define __STRT(value, ptr) __strt(value, ptr) +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1U); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value */ -__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +__STATIC_INLINE uint32_t __get_FPSCR(void) { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0U); +#endif } + /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set */ -__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#else + (void)fpscr; +#endif } -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ +/*@} end of CMSIS_Core_RegAccFunctions */ /* ################### Compiler specific Intrinsics ########################### */ @@ -878,6 +879,8 @@ __attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + #endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ /*@} end of group CMSIS_SIMD_intrinsics */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h index 90de9db..6911417 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file cmsis_armclang.h * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V5.3.1 - * @date 26. March 2020 + * @version V5.4.3 + * @date 27. May 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -29,10 +29,6 @@ #pragma clang system_header /* treat file as system include file */ -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - /* CMSIS compiler specific defines */ #ifndef __ASM #define __ASM __asm @@ -136,451 +132,438 @@ #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) #endif -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions @{ - */ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif /** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. */ -/* intrinsic void __enable_irq(); see arm_compat.h */ - +#define __NOP __builtin_arm_nop /** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ -/* intrinsic void __disable_irq(); see arm_compat.h */ +#define __WFI __builtin_arm_wfi /** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} +#define __WFE __builtin_arm_wfe -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; +#define __SEV __builtin_arm_sev - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF) /** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} +#define __DSB() __builtin_arm_dsb(0xF) -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); -} -#endif +#define __DMB() __builtin_arm_dmb(0xF) /** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} +#define __REV(value) __builtin_bswap32(value) /** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} +#define __REV16(value) __ROR(__REV(value), 16) /** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); -} +#define __REVSH(value) (int16_t)__builtin_bswap16(value) /** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { - uint32_t result; - - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) -{ - uint32_t result; +#define __BKPT(value) __ASM volatile ("bkpt "#value) - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); -} -#endif +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit /** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) + /** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif +#define __LDREXB (uint8_t)__builtin_arm_ldrex /** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} +#define __LDREXH (uint16_t)__builtin_arm_ldrex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - uint32_t result; +#define __LDREXW (uint32_t)__builtin_arm_ldrex - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); -} -#endif + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex /** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} +#define __STREXH (uint32_t)__builtin_arm_strex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif +#define __STREXW (uint32_t)__builtin_arm_strex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif +#define __SSAT __builtin_arm_ssat /** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} +#define __USAT __builtin_arm_usat -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } -#endif /** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - + uint32_t result; -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ } -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ /** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { uint32_t result; - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { uint32_t result; - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); return(result); } -#endif /** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } -#endif /** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; } - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value - */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); -} -#endif - - -/** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set - */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) -{ - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); -} - - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; } -#endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ @@ -593,631 +576,615 @@ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) /** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); } -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); } -#endif /** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} +#define __LDAEXH (uint16_t)__builtin_arm_ldaex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif +#define __STLEXB (uint32_t)__builtin_arm_stlex -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)0U) -#endif +#define __STLEXH (uint32_t)__builtin_arm_stlex + /** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) -#endif +#define __STLEX (uint32_t)__builtin_arm_stlex +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ -/*@} end of CMSIS_Core_RegAccFunctions */ +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions @{ -*/ + */ -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_REG(r) "+r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} +#endif + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} #endif + /** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value */ -#define __NOP __builtin_arm_nop +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value */ -#define __WFI __builtin_arm_wfi +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set */ -#define __WFE __builtin_arm_wfe +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set */ -#define __SEV __builtin_arm_sev +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif /** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value */ -#define __ISB() __builtin_arm_isb(0xF) +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + /** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value */ -#define __DSB() __builtin_arm_dsb(0xF) +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} /** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value */ -#define __DMB() __builtin_arm_dmb(0xF) +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} /** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value */ -#define __REV(value) __builtin_bswap32(value) +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value */ -#define __REV16(value) __ROR(__REV(value), 16) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } +#endif /** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value */ -#define __RBIT __builtin_arm_rbit +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + /** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set */ -#define __LDREXB (uint8_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value */ -#define __LDREXH (uint16_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} /** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set */ -#define __LDREXW (uint32_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif /** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value */ -#define __STREXB (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value */ -#define __STREXH (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask */ -#define __STREXW (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask */ -#define __CLREX __builtin_arm_clrex - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __SSAT __builtin_arm_ssat +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __USAT __builtin_arm_usat +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} /** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t result; - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); /* Add explicit type cast here */ + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { - uint32_t result; - - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); /* Add explicit type cast here */ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } +#endif /** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); } +#endif -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value - */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } +#endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ @@ -1228,152 +1195,219 @@ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) - + /** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif } - +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif } +#endif /** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDAEXB (uint8_t)__builtin_arm_ldaex - + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. -/** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ -#define __LDAEXH (uint16_t)__builtin_arm_ldaex +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDAEX (uint32_t)__builtin_arm_ldaex - + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. -/** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set */ -#define __STLEXB (uint32_t)__builtin_arm_stlex +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__ ) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) ) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ + (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ /** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value */ -#define __STLEXH (uint32_t)__builtin_arm_stlex - +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif /** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set */ -#define __STLEX (uint32_t)__builtin_arm_stlex +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) || \ - (defined (__ARM_ARCH_8_1M_MAIN__) && (__ARM_ARCH_8_1M_MAIN__ == 1)) ) */ -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ +/*@} end of CMSIS_Core_RegAccFunctions */ /* ################### Compiler specific Intrinsics ########################### */ @@ -1452,6 +1486,8 @@ __STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { int32_t result; diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h index 0e5c734..1e255d5 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_armclang_ltm.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file cmsis_armclang_ltm.h * @brief CMSIS compiler armclang (Arm Compiler 6) header file - * @version V1.3.0 - * @date 26. March 2020 + * @version V1.5.3 + * @date 27. May 2021 ******************************************************************************/ /* - * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * Copyright (c) 2018-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -29,10 +29,6 @@ #pragma clang system_header /* treat file as system include file */ -#ifndef __ARM_COMPAT_H -#include /* Compatibility header for Arm Compiler 5 intrinsics */ -#endif - /* CMSIS compiler specific defines */ #ifndef __ASM #define __ASM __asm @@ -136,1070 +132,1047 @@ #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) #endif +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL Image$$STACKSEAL$$ZI$$Base +#endif -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. */ +#define __NOP __builtin_arm_nop /** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ -/* intrinsic void __enable_irq(); see arm_compat.h */ +#define __WFI __builtin_arm_wfi /** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. */ -/* intrinsic void __disable_irq(); see arm_compat.h */ +#define __WFE __builtin_arm_wfe /** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} +#define __SEV __builtin_arm_sev -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; +#define __ISB() __builtin_arm_isb(0xF) - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF) /** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} +#define __DMB() __builtin_arm_dmb(0xF) -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) -{ - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); -} -#endif +#define __REV(value) __builtin_bswap32(value) /** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); -} +#define __REV16(value) __ROR(__REV(value), 16) /** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); -} +#define __REVSH(value) (int16_t)__builtin_bswap16(value) /** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { - uint32_t result; - - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); } /** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) -{ - uint32_t result; +#define __BKPT(value) __ASM volatile ("bkpt "#value) - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); -} +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { - uint32_t result; - - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); } -#endif +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); -} +#define __LDREXB (uint8_t)__builtin_arm_ldrex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif +#define __LDREXH (uint16_t)__builtin_arm_ldrex /** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); -} +#define __LDREXW (uint32_t)__builtin_arm_ldrex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); -} -#endif +#define __STREXB (uint32_t)__builtin_arm_strex /** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} +#define __STREXH (uint32_t)__builtin_arm_strex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} -#endif +#define __STREXW (uint32_t)__builtin_arm_strex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) -{ - uint32_t result; +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); -} +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) -{ - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); -} -#endif +#define __SSAT __builtin_arm_ssat /** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); -} +#define __USAT __builtin_arm_usat -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } -#endif /** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); -} - + uint32_t result; -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask - */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) -{ - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ } -#endif - - -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) -/** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ - - -/** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. - */ -#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ /** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { uint32_t result; - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); - return(result); + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { uint32_t result; - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); return(result); } -#endif /** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } -#endif /** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; } - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; } -#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); -} -#endif - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + uint32_t result; + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} -#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); } -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif -} +#define __LDAEXB (uint8_t)__builtin_arm_ldaex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif -} -#endif +#define __LDAEXH (uint16_t)__builtin_arm_ldaex /** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif -} +#define __STLEXB (uint32_t)__builtin_arm_stlex -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) -{ -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif -} -#endif +#define __STLEX (uint32_t)__builtin_arm_stlex #endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + /** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr -#else -#define __get_FPSCR() ((uint32_t)0U) +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} #endif + /** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. */ -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#define __set_FPSCR __builtin_arm_set_fpscr -#else -#define __set_FPSCR(x) ((void)(x)) +#ifndef __ARM_COMPAT_H +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} #endif -/*@} end of CMSIS_Core_RegAccFunctions */ - +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions - @{ -*/ + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value */ -#define __NOP __builtin_arm_nop +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; -/** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. - */ -#define __WFI __builtin_arm_wfi + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set */ -#define __WFE __builtin_arm_wfe +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set */ -#define __SEV __builtin_arm_sev +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif /** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value */ -#define __ISB() __builtin_arm_isb(0xF) +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + /** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value */ -#define __DSB() __builtin_arm_dsb(0xF) +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} /** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value */ -#define __DMB() __builtin_arm_dmb(0xF) +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} /** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value */ -#define __REV(value) __builtin_bswap32(value) +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value */ -#define __REV16(value) __ROR(__REV(value), 16) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set */ -#define __REVSH(value) (int16_t)__builtin_bswap16(value) +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } +#endif /** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value */ -#define __RBIT __builtin_arm_rbit +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + /** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM Compiler 6.10 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set */ -#define __LDREXB (uint8_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value */ -#define __LDREXH (uint16_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} /** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set */ -#define __LDREXW (uint32_t)__builtin_arm_ldrex +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif /** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value */ -#define __STREXB (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value */ -#define __STREXH (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask */ -#define __STREXW (uint32_t)__builtin_arm_strex +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask */ -#define __CLREX __builtin_arm_clrex - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __SSAT __builtin_arm_ssat +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __USAT __builtin_arm_usat +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} /** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { uint32_t result; - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint8_t) result); /* Add explicit type cast here */ + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { - uint32_t result; - - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); - return ((uint16_t) result); /* Add explicit type cast here */ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } +#endif /** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); } +#endif -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } +#endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ @@ -1208,150 +1181,210 @@ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + /** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif } - +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif } +#endif /** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -#define __LDAEXB (uint8_t)__builtin_arm_ldaex - + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. -/** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ -#define __LDAEXH (uint16_t)__builtin_arm_ldaex +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) - */ -#define __LDAEX (uint32_t)__builtin_arm_ldaex - + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. -/** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set */ -#define __STLEXB (uint32_t)__builtin_arm_stlex +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value */ -#define __STLEXH (uint32_t)__builtin_arm_stlex - +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif /** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set */ -#define __STLEX (uint32_t)__builtin_arm_stlex +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ +/*@} end of CMSIS_Core_RegAccFunctions */ /* ################### Compiler specific Intrinsics ########################### */ @@ -1878,6 +1911,8 @@ __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { int32_t result; diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h index a2778f5..67bda4e 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_gcc.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file cmsis_gcc.h * @brief CMSIS compiler GCC header file - * @version V5.3.0 - * @date 26. March 2020 + * @version V5.4.1 + * @date 27. May 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -46,9 +46,9 @@ #ifndef __STATIC_INLINE #define __STATIC_INLINE static inline #endif -#ifndef __STATIC_FORCEINLINE +#ifndef __STATIC_FORCEINLINE #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline -#endif +#endif #ifndef __NO_RETURN #define __NO_RETURN __attribute__((__noreturn__)) #endif @@ -126,23 +126,23 @@ \details This default implementations initialized all data and additional bss sections relying on .copy.table and .zero.table specified properly in the used linker script. - + */ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) { extern void _start(void) __NO_RETURN; - + typedef struct { uint32_t const* src; uint32_t* dest; uint32_t wlen; } __copy_table_t; - + typedef struct { uint32_t* dest; uint32_t wlen; } __zero_table_t; - + extern const __copy_table_t __copy_table_start__; extern const __copy_table_t __copy_table_end__; extern const __zero_table_t __zero_table_start__; @@ -153,16 +153,16 @@ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) pTable->dest[i] = pTable->src[i]; } } - + for (__zero_table_t const* pTable = &__zero_table_start__; pTable < &__zero_table_end__; ++pTable) { for(uint32_t i=0u; iwlen; ++i) { pTable->dest[i] = 0u; } } - + _start(); } - + #define __PROGRAM_START __cmsis_start #endif @@ -182,462 +182,569 @@ __STATIC_FORCEINLINE __NO_RETURN void __cmsis_start(void) #define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) #endif -/* ########################### Core Function Access ########################### */ -/** \ingroup CMSIS_Core_FunctionInterface - \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions - @{ - */ +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL __StackSeal +#endif -/** - \brief Enable IRQ Interrupts - \details Enables IRQ interrupts by clearing the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __enable_irq(void) -{ - __ASM volatile ("cpsie i" : : : "memory"); -} +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif -/** - \brief Disable IRQ Interrupts - \details Disables IRQ interrupts by setting the I-bit in the CPSR. - Can only be executed in Privileged modes. - */ -__STATIC_FORCEINLINE void __disable_irq(void) -{ - __ASM volatile ("cpsid i" : : : "memory"); +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; } +#endif + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif /** - \brief Get Control Register - \details Returns the content of the Control Register. - \return Control Register value + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. */ -__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) -{ - uint32_t result; +#define __NOP() __ASM volatile ("nop") - __ASM volatile ("MRS %0, control" : "=r" (result) ); - return(result); -} +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi":::"memory") -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Control Register (non-secure) - \details Returns the content of the non-secure Control Register when in secure mode. - \return non-secure Control Register value + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. */ -__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) -{ - uint32_t result; - - __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); - return(result); -} -#endif +#define __WFE() __ASM volatile ("wfe":::"memory") /** - \brief Set Control Register - \details Writes the given value to the Control Register. - \param [in] control Control Register value to set + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. */ -__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) -{ - __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); -} +#define __SEV() __ASM volatile ("sev") -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Control Register (non-secure) - \details Writes the given value to the non-secure Control Register when in secure state. - \param [in] control Control Register value to set + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. */ -__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +__STATIC_FORCEINLINE void __ISB(void) { - __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ASM volatile ("isb 0xF":::"memory"); } -#endif /** - \brief Get IPSR Register - \details Returns the content of the IPSR Register. - \return IPSR Register value + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. */ -__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +__STATIC_FORCEINLINE void __DSB(void) { - uint32_t result; - - __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); - return(result); + __ASM volatile ("dsb 0xF":::"memory"); } /** - \brief Get APSR Register - \details Returns the content of the APSR Register. - \return APSR Register value + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. */ -__STATIC_FORCEINLINE uint32_t __get_APSR(void) +__STATIC_FORCEINLINE void __DMB(void) { - uint32_t result; - - __ASM volatile ("MRS %0, apsr" : "=r" (result) ); - return(result); + __ASM volatile ("dmb 0xF":::"memory"); } /** - \brief Get xPSR Register - \details Returns the content of the xPSR Register. - \return xPSR Register value + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) { +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else uint32_t result; - __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); - return(result); + __ASM ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif } /** - \brief Get Process Stack Pointer - \details Returns the current value of the Process Stack Pointer (PSP). - \return PSP Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_PSP(void) +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) { uint32_t result; - __ASM volatile ("MRS %0, psp" : "=r" (result) ); - return(result); + __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Process Stack Pointer (non-secure) - \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. - \return PSP Register value + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) { - uint32_t result; +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_t result; - __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); - return(result); -} + __ASM ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; #endif +} /** - \brief Set Process Stack Pointer - \details Assigns the given value to the Process Stack Pointer (PSP). - \param [in] topOfProcStack Process Stack Pointer value to set + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value */ -__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) { - __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Process Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. - \param [in] topOfProcStack Process Stack Pointer value to set + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. */ -__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) -{ - __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); -} -#endif +#define __BKPT(value) __ASM volatile ("bkpt "#value) /** - \brief Get Main Stack Pointer - \details Returns the current value of the Main Stack Pointer (MSP). - \return MSP Register value + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value */ -__STATIC_FORCEINLINE uint32_t __get_MSP(void) +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) { uint32_t result; - __ASM volatile ("MRS %0, msp" : "=r" (result) ); - return(result); +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer (non-secure) - \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. - \return MSP Register value + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) { - uint32_t result; - - __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); - return(result); + /* Even though __builtin_clz produces a CLZ instruction on ARM, formally + __builtin_clz(0) is undefined behaviour, so handle this case specially. + This guarantees ARM-compatible results if happening to compile on a non-ARM + target, and ensures the compiler doesn't decide to activate any + optimisations using the logic "value was passed to __builtin_clz, so it + is non-zero". + ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a + single CLZ instruction. + */ + if (value == 0U) + { + return 32U; + } + return __builtin_clz(value); } -#endif +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) /** - \brief Set Main Stack Pointer - \details Assigns the given value to the Main Stack Pointer (MSP). - \param [in] topOfMainStack Main Stack Pointer value to set + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) { - __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); -} - + uint32_t result; -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Set Main Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. - \param [in] topOfMainStack Main Stack Pointer value to set - */ -__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) -{ - __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); -} +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); #endif + return ((uint8_t) result); /* Add explicit type cast here */ +} -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Stack Pointer (non-secure) - \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. - \return SP Register value + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) { - uint32_t result; + uint32_t result; - __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); - return(result); +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ } /** - \brief Set Stack Pointer (non-secure) - \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. - \param [in] topOfStack Stack Pointer value to set + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) { - __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); } -#endif /** - \brief Get Priority Mask - \details Returns the current state of the priority mask bit from the Priority Mask Register. - \return Priority Mask value + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) { - uint32_t result; + uint32_t result; - __ASM volatile ("MRS %0, primask" : "=r" (result) ); - return(result); + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Priority Mask (non-secure) - \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. - \return Priority Mask value + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) { - uint32_t result; + uint32_t result; - __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); - return(result); + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); } -#endif /** - \brief Set Priority Mask - \details Assigns the given value to the Priority Mask Register. - \param [in] priMask Priority Mask + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) { - __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Priority Mask (non-secure) - \details Assigns the given value to the non-secure Priority Mask Register when in secure state. - \param [in] priMask Priority Mask + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. */ -__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +__STATIC_FORCEINLINE void __CLREX(void) { - __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); + __ASM volatile ("clrex" ::: "memory"); } -#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** - \brief Enable FIQ - \details Enables FIQ interrupts by clearing the F-bit in the CPSR. - Can only be executed in Privileged modes. + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE void __enable_fault_irq(void) -{ - __ASM volatile ("cpsie f" : : : "memory"); -} +#define __SSAT(ARG1, ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) /** - \brief Disable FIQ - \details Disables FIQ interrupts by setting the F-bit in the CPSR. - Can only be executed in Privileged modes. + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE void __disable_fault_irq(void) -{ - __ASM volatile ("cpsid f" : : : "memory"); -} +#define __USAT(ARG1, ARG2) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ + __RES; \ + }) /** - \brief Get Base Priority - \details Returns the current value of the Base Priority register. - \return Base Priority register value + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value */ -__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) { uint32_t result; - __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); return(result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Base Priority (non-secure) - \details Returns the current value of the non-secure Base Priority register when in secure state. - \return Base Priority register value + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) { - uint32_t result; + uint32_t result; - __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); - return(result); -} +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); #endif + return ((uint8_t) result); /* Add explicit type cast here */ +} /** - \brief Set Base Priority - \details Assigns the given value to the Base Priority register. - \param [in] basePri Base Priority value to set + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) { - __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Base Priority (non-secure) - \details Assigns the given value to the non-secure Base Priority register when in secure state. - \param [in] basePri Base Priority value to set + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) { - __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); } -#endif /** - \brief Set Base Priority with condition - \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, - or the new value increases the BASEPRI priority level. - \param [in] basePri Base Priority value to set + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) { - __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } /** - \brief Get Fault Mask - \details Returns the current value of the Fault Mask register. - \return Fault Mask register value + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) { - uint32_t result; - - __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); - return(result); + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Fault Mask (non-secure) - \details Returns the current value of the non-secure Fault Mask register when in secure state. - \return Fault Mask register value + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) { - uint32_t result; - - __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); - return(result); + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); } -#endif +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** - \brief Set Fault Mask - \details Assigns the given value to the Fault Mask register. - \param [in] faultMask Fault Mask value to set + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value */ -__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) { - __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; } - -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Fault Mask (non-secure) - \details Assigns the given value to the non-secure Fault Mask register when in secure state. - \param [in] faultMask Fault Mask value to set + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value */ -__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) { - __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; } -#endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ @@ -646,780 +753,646 @@ __STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) - /** - \brief Get Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). - \return PSPLIM Register value + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim" : "=r" (result) ); - return result; -#endif + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); } -#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) -/** - \brief Get Process Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \return PSPLIM Register value +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) */ -__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); - return result; -#endif + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); } -#endif /** - \brief Set Process Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); -#endif + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Process Stack Pointer (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. - - \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. - \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure PSPLIM is RAZ/WI - (void)ProcStackPtrLimit; -#else - __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); -#endif + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Get Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always in non-secure - mode. - - \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). - \return MSPLIM Register value + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim" : "=r" (result) ); - return result; -#endif + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Get Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence zero is returned always. - - \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. - \return MSPLIM Register value + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location */ -__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - return 0U; -#else - uint32_t result; - __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); - return result; -#endif + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); } -#endif /** - \brief Set Main Stack Pointer Limit - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored in non-secure - mode. - - \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). - \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) */ -__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ - (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); -#endif + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t) result); } -#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Set Main Stack Pointer Limit (non-secure) - Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure - Stack Pointer Limit register hence the write is silently ignored. + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; - \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. - \param [in] MainStackPtrLimit Main Stack Pointer value to set + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) */ -__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) { -#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) - // without main extensions, the non-secure MSPLIM is RAZ/WI - (void)MainStackPtrLimit; -#else - __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); -#endif + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return(result); } -#endif -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); +} /** - \brief Get FPSCR - \details Returns the current value of the Floating Point Status/Control register. - \return Floating Point Status/Control register value + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) { -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_get_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - return __builtin_arm_get_fpscr(); -#else - uint32_t result; + uint32_t result; - __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); - return(result); -#endif -#else - return(0U); -#endif + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); } /** - \brief Set FPSCR - \details Assigns the given value to the Floating Point Status/Control register. - \param [in] fpscr Floating Point Status/Control value to set + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed */ -__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) { -#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ - (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) -#if __has_builtin(__builtin_arm_set_fpscr) -// Re-enable using built-in when GCC has been fixed -// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) - /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ - __builtin_arm_set_fpscr(fpscr); -#else - __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); -#endif -#else - (void)fpscr; -#endif + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return(result); } +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ -/*@} end of CMSIS_Core_RegAccFunctions */ +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ -/* ########################## Core Instruction Access ######################### */ -/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface - Access to dedicated instructions +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions @{ -*/ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} -/* Define macros for porting to both thumb1 and thumb2. - * For thumb1, use low register (r0-r7), specified by constraint "l" - * Otherwise, use general registers, specified by constraint "r" */ -#if defined (__thumb__) && !defined (__thumb2__) -#define __CMSIS_GCC_OUT_REG(r) "=l" (r) -#define __CMSIS_GCC_RW_REG(r) "+l" (r) -#define __CMSIS_GCC_USE_REG(r) "l" (r) -#else -#define __CMSIS_GCC_OUT_REG(r) "=r" (r) -#define __CMSIS_GCC_RW_REG(r) "+r" (r) -#define __CMSIS_GCC_USE_REG(r) "r" (r) -#endif /** - \brief No Operation - \details No Operation does nothing. This instruction can be used for code alignment purposes. + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. */ -#define __NOP() __ASM volatile ("nop") +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + /** - \brief Wait For Interrupt - \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value */ -#define __WFI() __ASM volatile ("wfi":::"memory") +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Wait For Event - \details Wait For Event is a hint instruction that permits the processor to enter - a low-power state until one of a number of events occurs. + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value */ -#define __WFE() __ASM volatile ("wfe":::"memory") +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif /** - \brief Send Event - \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set */ -#define __SEV() __ASM volatile ("sev") +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Instruction Synchronization Barrier - \details Instruction Synchronization Barrier flushes the pipeline in the processor, - so that all instructions following the ISB are fetched from cache or memory, - after the instruction has been completed. + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set */ -__STATIC_FORCEINLINE void __ISB(void) +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) { - __ASM volatile ("isb 0xF":::"memory"); + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); } +#endif /** - \brief Data Synchronization Barrier - \details Acts as a special kind of Data Memory Barrier. - It completes when all explicit memory accesses before this instruction complete. + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value */ -__STATIC_FORCEINLINE void __DSB(void) +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) { - __ASM volatile ("dsb 0xF":::"memory"); + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); } /** - \brief Data Memory Barrier - \details Ensures the apparent order of the explicit memory operations before - and after the instruction, without ensuring their completion. + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value */ -__STATIC_FORCEINLINE void __DMB(void) +__STATIC_FORCEINLINE uint32_t __get_APSR(void) { - __ASM volatile ("dmb 0xF":::"memory"); + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); } /** - \brief Reverse byte order (32 bit) - \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. - \param [in] value Value to reverse - \return Reversed value + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value */ -__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) { -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) - return __builtin_bswap32(value); -#else uint32_t result; - __ASM ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -#endif + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. - \param [in] value Value to reverse - \return Reversed value + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value */ -__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) { uint32_t result; - __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief Reverse byte order (16 bit) - \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. - \param [in] value Value to reverse - \return Reversed value + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set */ -__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) { -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - return (int16_t)__builtin_bswap16(value); -#else - int16_t result; - - __ASM ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); - return result; -#endif + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) { - op2 %= 32U; - if (op2 == 0U) - { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); } +#endif /** - \brief Breakpoint - \details Causes the processor to enter Debug state. - Debug tools can use this to investigate system state when the instruction at a particular address is reached. - \param [in] value is ignored by the processor. - If required, a debugger can use it to store additional information about the breakpoint. + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value */ -#define __BKPT(value) __ASM volatile ("bkpt "#value) +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Reverse bit order of value - \details Reverses the bit order of the given value. - \param [in] value Value to reverse - \return Reversed value + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value */ -__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) { uint32_t result; -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) - __ASM ("rbit %0, %1" : "=r" (result) : "r" (value) ); -#else - uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ - - result = value; /* r will be reversed bits of v; first get LSB of v */ - for (value >>= 1U; value != 0U; value >>= 1U) - { - result <<= 1U; - result |= value & 1U; - s--; - } - result <<= s; /* shift when v's highest bits are zero */ -#endif - return result; + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief Count leading zeros - \details Counts the number of leading zeros of a data value. - \param [in] value Value to count the leading zeros - \return number of leading zeros in value + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set */ -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t value) +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) { - /* Even though __builtin_clz produces a CLZ instruction on ARM, formally - __builtin_clz(0) is undefined behaviour, so handle this case specially. - This guarantees ARM-compatible results if happening to compile on a non-ARM - target, and ensures the compiler doesn't decide to activate any - optimisations using the logic "value was passed to __builtin_clz, so it - is non-zero". - ARM GCC 7.3 and possibly earlier will optimise this test away, leaving a - single CLZ instruction. - */ - if (value == 0U) - { - return 32U; - } - return __builtin_clz(value); + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); } -#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (8 bit) - \details Executes a exclusive LDR instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set */ -__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) { - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return ((uint8_t) result); /* Add explicit type cast here */ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); } +#endif +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDR Exclusive (16 bit) - \details Executes a exclusive LDR instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value */ -__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) { - uint32_t result; + uint32_t result; -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); -#endif - return ((uint16_t) result); /* Add explicit type cast here */ + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); } /** - \brief LDR Exclusive (32 bit) - \details Executes a exclusive LDR instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set */ -__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) { - uint32_t result; - - __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); - return(result); + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); } +#endif /** - \brief STR Exclusive (8 bit) - \details Executes a exclusive STR instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value */ -__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) { - uint32_t result; + uint32_t result; - __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); - return(result); + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STR Exclusive (16 bit) - \details Executes a exclusive STR instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value */ -__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) { - uint32_t result; + uint32_t result; - __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); - return(result); + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief STR Exclusive (32 bit) - \details Executes a exclusive STR instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask */ -__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) { - uint32_t result; - - __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); - return(result); + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Remove the exclusive lock - \details Removes the exclusive lock which is created by LDREX. + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask */ -__STATIC_FORCEINLINE void __CLREX(void) +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) { - __ASM volatile ("clrex" ::: "memory"); + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); } - -#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ +#endif #if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (1..32) - \return Saturated value + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __SSAT(ARG1, ARG2) \ -__extension__ \ -({ \ - int32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] ARG1 Value to be saturated - \param [in] ARG2 Bit position to saturate to (0..31) - \return Saturated value + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. */ -#define __USAT(ARG1, ARG2) \ - __extension__ \ -({ \ - uint32_t __RES, __ARG1 = (ARG1); \ - __ASM volatile ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ - __RES; \ - }) +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} /** - \brief Rotate Right with Extend (32 bit) - \details Moves each bit of a bitstring right by one bit. - The carry input is shifted in at the left end of the bitstring. - \param [in] value Value to rotate - \return Rotated value + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) { uint32_t result; - __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (8 bit) - \details Executes a Unprivileged LDRT instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value */ -__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) { - uint32_t result; + uint32_t result; -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); -#endif - return ((uint8_t) result); /* Add explicit type cast here */ + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); } +#endif /** - \brief LDRT Unprivileged (16 bit) - \details Executes a Unprivileged LDRT instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) { - uint32_t result; - -#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) - __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); -#else - /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not - accepted by assembler. So has to use following less efficient pattern. - */ - __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); -#endif - return ((uint16_t) result); /* Add explicit type cast here */ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief LDRT Unprivileged (32 bit) - \details Executes a Unprivileged LDRT instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) { - uint32_t result; - - __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); - return(result); + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); } +#endif /** - \brief STRT Unprivileged (8 bit) - \details Executes a Unprivileged STRT instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set */ -__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) { - __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); } /** - \brief STRT Unprivileged (16 bit) - \details Executes a Unprivileged STRT instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) { - __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief STRT Unprivileged (32 bit) - \details Executes a Unprivileged STRT instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value */ -__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) { - __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); } +#endif -#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ - (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ - (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ /** - \brief Signed Saturate - \details Saturates a signed value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (1..32) - \return Saturated value + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set */ -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) { - if ((sat >= 1U) && (sat <= 32U)) - { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max ; - if (val > max) - { - return max; - } - else if (val < min) - { - return min; - } - } - return val; + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); } + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Unsigned Saturate - \details Saturates an unsigned value. - \param [in] value Value to be saturated - \param [in] sat Bit position to saturate to (0..31) - \return Saturated value + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set */ -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) { - if (sat <= 31U) - { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) - { - return max; - } - else if (val < 0) - { - return 0U; - } - } - return (uint32_t)val; + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); } +#endif #endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ @@ -1428,186 +1401,235 @@ __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) -/** - \brief Load-Acquire (8 bit) - \details Executes a LDAB instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) - */ -__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); -} - /** - \brief Load-Acquire (16 bit) - \details Executes a LDAH instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) - */ -__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) -{ - uint32_t result; - - __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); -} - + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. -/** - \brief Load-Acquire (32 bit) - \details Executes a LDA instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value */ -__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) { - uint32_t result; - - __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif } - +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (8 bit) - \details Executes a STLB instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value */ -__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) { - __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Store-Release (16 bit) - \details Executes a STLH instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) { - __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release (32 bit) - \details Executes a STL instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) { - __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif } +#endif /** - \brief Load-Acquire Exclusive (8 bit) - \details Executes a LDAB exclusive instruction for 8 bit value. - \param [in] ptr Pointer to data - \return value of type uint8_t at (*ptr) + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value */ -__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) { - uint32_t result; - - __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint8_t) result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Load-Acquire Exclusive (16 bit) - \details Executes a LDAH exclusive instruction for 16 bit values. - \param [in] ptr Pointer to data - \return value of type uint16_t at (*ptr) + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value */ -__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) { - uint32_t result; - - __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return ((uint16_t) result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif } +#endif /** - \brief Load-Acquire Exclusive (32 bit) - \details Executes a LDA exclusive instruction for 32 bit values. - \param [in] ptr Pointer to data - \return value of type uint32_t at (*ptr) + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set */ -__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) { - uint32_t result; - - __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); - return(result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif } +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) /** - \brief Store-Release Exclusive (8 bit) - \details Executes a STLB exclusive instruction for 8 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set */ -__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) { - uint32_t result; - - __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif } +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ /** - \brief Store-Release Exclusive (16 bit) - \details Executes a STLH exclusive instruction for 16 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value */ -__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) { - uint32_t result; +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; - __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif } /** - \brief Store-Release Exclusive (32 bit) - \details Executes a STL exclusive instruction for 32 bit values. - \param [in] value Value to store - \param [in] ptr Pointer to location - \return 0 Function succeeded - \return 1 Function failed + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set */ -__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) { - uint32_t result; - - __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); - return(result); +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif } -#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ - (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ -/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ +/*@} end of CMSIS_Core_RegAccFunctions */ /* ################### Compiler specific Intrinsics ########################### */ @@ -1925,6 +1947,7 @@ __STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) } #define __SSAT16(ARG1, ARG2) \ +__extension__ \ ({ \ int32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ @@ -1932,6 +1955,7 @@ __STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) }) #define __USAT16(ARG1, ARG2) \ +__extension__ \ ({ \ uint32_t __RES, __ARG1 = (ARG1); \ __ASM volatile ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) : "cc" ); \ @@ -1965,9 +1989,11 @@ __STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) __STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) { uint32_t result; - - __ASM ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); - + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { + __ASM volatile ("sxtb16 %0, %1, ROR %2" : "=r" (result) : "r" (op1), "i" (rotate) ); + } else { + result = __SXTB16(__ROR(op1, rotate)) ; + } return result; } @@ -1979,6 +2005,18 @@ __STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) return(result); } +__STATIC_FORCEINLINE uint32_t __SXTAB16_RORn(uint32_t op1, uint32_t op2, uint32_t rotate) +{ + uint32_t result; + if (__builtin_constant_p(rotate) && ((rotate == 8U) || (rotate == 16U) || (rotate == 24U))) { + __ASM volatile ("sxtab16 %0, %1, %2, ROR %3" : "=r" (result) : "r" (op1) , "r" (op2) , "i" (rotate)); + } else { + result = __SXTAB16(op1, __ROR(op2, rotate)); + } + return result; +} + + __STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) { uint32_t result; @@ -2135,8 +2173,9 @@ __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) return(result); } -#if 0 + #define __PKHBT(ARG1,ARG2,ARG3) \ +__extension__ \ ({ \ uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ @@ -2144,6 +2183,7 @@ __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) }) #define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ ({ \ uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ if (ARG3 == 0) \ @@ -2152,13 +2192,7 @@ __STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ __RES; \ }) -#endif - -#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ - ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) -#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ - ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) __STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) { diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h index 7eeffca..65b824b 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_iccarm.h @@ -1,14 +1,14 @@ /**************************************************************************//** * @file cmsis_iccarm.h * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file - * @version V5.2.0 - * @date 28. January 2020 + * @version V5.3.0 + * @date 14. April 2021 ******************************************************************************/ //------------------------------------------------------------------------------ // -// Copyright (c) 2017-2019 IAR Systems -// Copyright (c) 2017-2019 Arm Limited. All rights reserved. +// Copyright (c) 2017-2021 IAR Systems +// Copyright (c) 2017-2021 Arm Limited. All rights reserved. // // SPDX-License-Identifier: Apache-2.0 // @@ -238,6 +238,7 @@ __packed struct __iar_u32 { uint32_t v; }; #endif #endif +#undef __WEAK /* undo the definition from DLib_Defaults.h */ #ifndef __WEAK #if __ICCARM_V8 #define __WEAK __attribute__((weak)) @@ -266,6 +267,24 @@ __packed struct __iar_u32 { uint32_t v; }; #define __VECTOR_TABLE_ATTRIBUTE @".intvec" #endif +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#ifndef __STACK_SEAL +#define __STACK_SEAL STACKSEAL$$Base +#endif + +#ifndef __TZ_STACK_SEAL_SIZE +#define __TZ_STACK_SEAL_SIZE 8U +#endif + +#ifndef __TZ_STACK_SEAL_VALUE +#define __TZ_STACK_SEAL_VALUE 0xFEF5EDA5FEF5EDA5ULL +#endif + +__STATIC_FORCEINLINE void __TZ_set_STACKSEAL_S (uint32_t* stackTop) { + *((uint64_t *)stackTop) = __TZ_STACK_SEAL_VALUE; +} +#endif + #ifndef __ICCARM_INTRINSICS_VERSION__ #define __ICCARM_INTRINSICS_VERSION__ 0 #endif @@ -336,7 +355,13 @@ __packed struct __iar_u32 { uint32_t v; }; #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) - #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) + +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __arm_wsr("CONTROL", control); + __iar_builtin_ISB(); +} + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) @@ -358,7 +383,13 @@ __packed struct __iar_u32 { uint32_t v; }; #endif #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) - #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) + +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __arm_wsr("CONTROL_NS", control); + __iar_builtin_ISB(); +} + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) @@ -680,6 +711,7 @@ __packed struct __iar_u32 { uint32_t v; }; __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) { __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + __iar_builtin_ISB(); } __IAR_FT uint32_t __TZ_get_PSP_NS(void) @@ -965,4 +997,6 @@ __packed struct __iar_u32 { uint32_t v; }; #define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + #endif /* __CMSIS_ICCARM_H__ */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_version.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_version.h index 2f048e4..8b4765f 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_version.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/cmsis_version.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file cmsis_version.h * @brief CMSIS Core(M) Version definitions - * @version V5.0.4 - * @date 23. July 2019 + * @version V5.0.5 + * @date 02. February 2022 ******************************************************************************/ /* - * Copyright (c) 2009-2019 ARM Limited. All rights reserved. + * Copyright (c) 2009-2022 ARM Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -33,7 +33,7 @@ /* CMSIS Version definitions */ #define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ -#define __CM_CMSIS_VERSION_SUB ( 4U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION_SUB ( 6U) /*!< [15:0] CMSIS Core(M) sub version */ #define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ #endif diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h index 1ad19e2..94128a1 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv81mml.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_armv81mml.h * @brief CMSIS Armv8.1-M Mainline Core Peripheral Access Layer Header File - * @version V1.3.1 - * @date 27. March 2020 + * @version V1.4.2 + * @date 13. October 2021 ******************************************************************************/ /* - * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * Copyright (c) 2018-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -210,14 +210,14 @@ #define __FPU_PRESENT 0U #warning "__FPU_PRESENT not defined in device header file; using default!" #endif - + #if __FPU_PRESENT != 0U #ifndef __FPU_DP #define __FPU_DP 0U #warning "__FPU_DP not defined in device header file; using default!" #endif #endif - + #ifndef __MPU_PRESENT #define __MPU_PRESENT 0U #warning "__MPU_PRESENT not defined in device header file; using default!" @@ -232,7 +232,7 @@ #define __DCACHE_PRESENT 0U #warning "__DCACHE_PRESENT not defined in device header file; using default!" #endif - + #ifndef __PMU_PRESENT #define __PMU_PRESENT 0U #warning "__PMU_PRESENT not defined in device header file; using default!" @@ -261,7 +261,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -526,7 +526,7 @@ typedef struct __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ @@ -535,7 +535,10 @@ typedef struct __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ uint32_t RESERVED4[14U]; @@ -766,22 +769,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -1490,15 +1493,14 @@ typedef struct uint32_t RESERVED11[108]; __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ - uint32_t RESERVED12[4]; + uint32_t RESERVED12[3]; __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ uint32_t RESERVED13[3]; __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ - __IOM uint32_t PIDR1; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 1 */ - __IOM uint32_t PIDR2; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 2 */ - __IOM uint32_t PIDR3; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 3 */ - uint32_t RESERVED14[3]; + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ @@ -1508,12 +1510,12 @@ typedef struct /** \brief PMU Event Counter Registers (0-30) Definitions */ #define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ -#define PMU_EVCNTR_CNT_Msk (16UL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ +#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 (16UL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ /** \brief PMU Count Enable Set Register Definitions */ @@ -2221,10 +2223,10 @@ typedef struct /** \brief PMU Type Register Definitions */ #define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ -#define PMU_TYPE_NUM_CNTS_Msk (8UL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ +#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 (6UL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ +#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 */ @@ -2235,6 +2237,32 @@ typedef struct #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 */ #endif @@ -3132,6 +3160,15 @@ typedef struct /*@} */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + /******************************************************************************* * Hardware Abstraction Layer diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h index 71f000b..c119fbf 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_armv8mml.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_armv8mml.h * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File - * @version V5.2.0 - * @date 27. March 2020 + * @version V5.2.3 + * @date 13. October 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -254,7 +254,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -519,7 +519,7 @@ typedef struct __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ @@ -528,7 +528,10 @@ typedef struct __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ uint32_t RESERVED4[15U]; __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ @@ -545,6 +548,7 @@ typedef struct __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ } SCB_Type; /* SCB CPUID Register Definitions */ @@ -745,22 +749,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -2181,6 +2185,15 @@ typedef struct /*@} */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + /******************************************************************************* * Hardware Abstraction Layer @@ -2939,7 +2952,7 @@ __STATIC_INLINE void TZ_SAU_Disable(void) @{ */ - + /** \brief Set Debug Authentication Control Register \details writes to Debug Authentication Control register. @@ -3006,7 +3019,7 @@ __STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) @{ */ - + /** \brief Get Debug Authentication Status Register \details Reads Debug Authentication Status register. diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm3.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm3.h index 24453a8..74fb87e 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm3.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm3.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_cm3.h * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File - * @version V5.1.1 - * @date 27. March 2020 + * @version V5.1.2 + * @date 04. June 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -146,7 +146,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -565,19 +565,19 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm33.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm33.h index 13359be..18a2e6f 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm33.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm33.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_cm33.h * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File - * @version V5.2.0 - * @date 27. March 2020 + * @version V5.2.3 + * @date 13. October 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -254,7 +254,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -519,7 +519,7 @@ typedef struct __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ @@ -528,7 +528,10 @@ typedef struct __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ uint32_t RESERVED4[15U]; __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ @@ -545,6 +548,7 @@ typedef struct __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ } SCB_Type; /* SCB CPUID Register Definitions */ @@ -745,22 +749,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -2256,6 +2260,15 @@ typedef struct /*@} */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + /******************************************************************************* * Hardware Abstraction Layer @@ -3007,7 +3020,7 @@ __STATIC_INLINE void TZ_SAU_Disable(void) @{ */ - + /** \brief Set Debug Authentication Control Register \details writes to Debug Authentication Control register. @@ -3074,7 +3087,7 @@ __STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) @{ */ - + /** \brief Get Debug Authentication Status Register \details Reads Debug Authentication Status register. diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm35p.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm35p.h index 6a5f6ad..3843d95 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm35p.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm35p.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_cm35p.h * @brief CMSIS Cortex-M35P Core Peripheral Access Layer Header File - * @version V1.1.0 - * @date 27. March 2020 + * @version V1.1.3 + * @date 13. October 2021 ******************************************************************************/ /* - * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * Copyright (c) 2018-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -249,12 +249,12 @@ #define __DSP_PRESENT 0U #warning "__DSP_PRESENT not defined in device header file; using default!" #endif - + #ifndef __VTOR_PRESENT #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -519,7 +519,7 @@ typedef struct __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ @@ -528,7 +528,10 @@ typedef struct __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ uint32_t RESERVED4[15U]; __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ @@ -545,6 +548,7 @@ typedef struct __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ } SCB_Type; /* SCB CPUID Register Definitions */ @@ -745,22 +749,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -2256,6 +2260,15 @@ typedef struct /*@} */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ +/*@} */ + /******************************************************************************* * Hardware Abstraction Layer @@ -3007,7 +3020,7 @@ __STATIC_INLINE void TZ_SAU_Disable(void) @{ */ - + /** \brief Set Debug Authentication Control Register \details writes to Debug Authentication Control register. @@ -3074,7 +3087,7 @@ __STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) @{ */ - + /** \brief Get Debug Authentication Status Register \details Reads Debug Authentication Status register. diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm4.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm4.h index 4e0e886..e21cd14 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm4.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm4.h @@ -1,8 +1,8 @@ /**************************************************************************//** * @file core_cm4.h * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File - * @version V5.1.1 - * @date 27. March 2020 + * @version V5.1.2 + * @date 04. June 2021 ******************************************************************************/ /* * Copyright (c) 2009-2020 Arm Limited. All rights reserved. @@ -198,7 +198,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -623,22 +623,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm55.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm55.h index 6efaa3f..faa30ce 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm55.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm55.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_cm55.h * @brief CMSIS Cortex-M55 Core Peripheral Access Layer Header File - * @version V1.0.0 - * @date 27. March 2020 + * @version V1.2.4 + * @date 21. April 2022 ******************************************************************************/ /* - * Copyright (c) 2018-2020 Arm Limited. All rights reserved. + * Copyright (c) 2018-2022 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -58,7 +58,7 @@ * CMSIS definitions ******************************************************************************/ /** - \ingroup Cortex_CM55 + \ingroup Cortex_M55 @{ */ @@ -210,7 +210,7 @@ #define __FPU_PRESENT 0U #warning "__FPU_PRESENT not defined in device header file; using default!" #endif - + #if __FPU_PRESENT != 0U #ifndef __FPU_DP #define __FPU_DP 0U @@ -232,12 +232,12 @@ #define __DCACHE_PRESENT 0U #warning "__DCACHE_PRESENT not defined in device header file; using default!" #endif - + #ifndef __VTOR_PRESENT #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __PMU_PRESENT #define __PMU_PRESENT 0U #warning "__PMU_PRESENT not defined in device header file; using default!" @@ -303,9 +303,11 @@ Core Register contain: - Core Register - Core NVIC Register + - Core EWIC Register - Core SCB Register - Core SysTick Register - Core Debug Register + - Core PMU Register - Core MPU Register - Core SAU Register - Core FPU Register @@ -526,7 +528,7 @@ typedef struct __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ - __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ @@ -535,7 +537,10 @@ typedef struct __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ - uint32_t RESERVED3[92U]; + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ uint32_t RESERVED4[14U]; @@ -766,22 +771,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -987,13 +992,13 @@ typedef struct /** \ingroup CMSIS_core_register - \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) - \brief Type definitions for the System Control and ID Register not in the SCB + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register @{ */ /** - \brief Structure type to access the System Control and ID Register not in the SCB. + \brief Structure type to access the Implementation Control Block (ICB). */ typedef struct { @@ -1001,13 +1006,56 @@ typedef struct __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ -} SCnSCB_Type; +} ICB_Type; + +/* Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define ICB_ACTLR_DISDI_Msk (3UL << ICB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define ICB_ACTLR_DISOLAP_Pos 7U /*!< ACTLR: DISOLAP Position */ +#define ICB_ACTLR_DISOLAP_Msk (1UL << ICB_ACTLR_DISOLAP_Pos) /*!< ACTLR: DISOLAP Mask */ + +#define ICB_ACTLR_DISOLAPS_Pos 6U /*!< ACTLR: DISOLAPS Position */ +#define ICB_ACTLR_DISOLAPS_Msk (1UL << ICB_ACTLR_DISOLAPS_Pos) /*!< ACTLR: DISOLAPS Mask */ + +#define ICB_ACTLR_DISLOBR_Pos 5U /*!< ACTLR: DISLOBR Position */ +#define ICB_ACTLR_DISLOBR_Msk (1UL << ICB_ACTLR_DISLOBR_Pos) /*!< ACTLR: DISLOBR Mask */ + +#define ICB_ACTLR_DISLO_Pos 4U /*!< ACTLR: DISLO Position */ +#define ICB_ACTLR_DISLO_Msk (1UL << ICB_ACTLR_DISLO_Pos) /*!< ACTLR: DISLO Mask */ + +#define ICB_ACTLR_DISLOLEP_Pos 3U /*!< ACTLR: DISLOLEP Position */ +#define ICB_ACTLR_DISLOLEP_Msk (1UL << ICB_ACTLR_DISLOLEP_Pos) /*!< ACTLR: DISLOLEP Mask */ + +#define ICB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define ICB_ACTLR_DISFOLD_Msk (1UL << ICB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ /* Interrupt Controller Type Register Definitions */ -#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ -#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ -/*@} end of group CMSIS_SCnotSCB */ +/*@} end of group CMSIS_ICB */ /** @@ -1349,6 +1397,456 @@ typedef struct /*@}*/ /* end of group CMSIS_DWT */ +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/* MEMSYSCTL Memory System Control Register (MSCR) Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (0x1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (0x1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (0x1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (0x1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (0x1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (0x1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/* MEMSYSCTL Prefetcher Control Register (PFCR) Register Definitions */ +#define MEMSYSCTL_PFCR_MAX_OS_Pos 7U /*!< MEMSYSCTL PFCR: MAX_OS Position */ +#define MEMSYSCTL_PFCR_MAX_OS_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_OS_Pos) /*!< MEMSYSCTL PFCR: MAX_OS Mask */ + +#define MEMSYSCTL_PFCR_MAX_LA_Pos 4U /*!< MEMSYSCTL PFCR: MAX_LA Position */ +#define MEMSYSCTL_PFCR_MAX_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MAX_LA_Pos) /*!< MEMSYSCTL PFCR: MAX_LA Mask */ + +#define MEMSYSCTL_PFCR_MIN_LA_Pos 1U /*!< MEMSYSCTL PFCR: MIN_LA Position */ +#define MEMSYSCTL_PFCR_MIN_LA_Msk (0x7UL << MEMSYSCTL_PFCR_MIN_LA_Pos) /*!< MEMSYSCTL PFCR: MIN_LA Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (0x1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/* MEMSYSCTL ITCM Control Register (ITCMCR) Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/* MEMSYSCTL DTCM Control Register (DTCMCR) Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/* MEMSYSCTL P-AHB Control Register (PAHBCR) Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (0x1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/* MEMSYSCTL ITGU Control Register (ITGU_CTRL) Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL ITGU Configuration Register (ITGU_CFG) Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/* MEMSYSCTL DTGU Control Registers (DTGU_CTRL) Register Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL DTGU Configuration Register (DTGU_CFG) Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/* PWRMODCTL Core Power Domain Low Power State (CPDLPSTATE) Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/* PWRMODCTL Debug Power Domain Low Power State (DPDLPSTATE) Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/W) Event Mask A Register */ + __IM uint32_t EVENTMASK[15]; /*!< Offset: 0x084 (R/W) Event Mask Register */ +} EWIC_Type; + +/* EWIC External Wakeup Interrupt Controller (EVENTSPR) Register Definitions */ +#define EWIC_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC EVENTSPR: EDBGREQ Position */ +#define EWIC_EVENTSPR_EDBGREQ_Msk (0x1UL << EWIC_EVENTSPR_EDBGREQ_Pos) /*!< EWIC EVENTSPR: EDBGREQ Mask */ + +#define EWIC_EVENTSPR_NMI_Pos 1U /*!< EWIC EVENTSPR: NMI Position */ +#define EWIC_EVENTSPR_NMI_Msk (0x1UL << EWIC_EVENTSPR_NMI_Pos) /*!< EWIC EVENTSPR: NMI Mask */ + +#define EWIC_EVENTSPR_EVENT_Pos 0U /*!< EWIC EVENTSPR: EVENT Position */ +#define EWIC_EVENTSPR_EVENT_Msk (0x1UL /*<< EWIC_EVENTSPR_EVENT_Pos*/) /*!< EWIC EVENTSPR: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASKA) Register Definitions */ +#define EWIC_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC EVENTMASKA: EDBGREQ Position */ +#define EWIC_EVENTMASKA_EDBGREQ_Msk (0x1UL << EWIC_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_EVENTMASKA_NMI_Pos 1U /*!< EWIC EVENTMASKA: NMI Position */ +#define EWIC_EVENTMASKA_NMI_Msk (0x1UL << EWIC_EVENTMASKA_NMI_Pos) /*!< EWIC EVENTMASKA: NMI Mask */ + +#define EWIC_EVENTMASKA_EVENT_Pos 0U /*!< EWIC EVENTMASKA: EVENT Position */ +#define EWIC_EVENTMASKA_EVENT_Msk (0x1UL /*<< EWIC_EVENTMASKA_EVENT_Pos*/) /*!< EWIC EVENTMASKA: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASK) Register Definitions */ +#define EWIC_EVENTMASK_IRQ_Pos 0U /*!< EWIC EVENTMASKA: IRQ Position */ +#define EWIC_EVENTMASK_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EVENTMASKA_IRQ_Pos*/) /*!< EWIC EVENTMASKA: IRQ Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/* ERRBNK Instruction Cache Error Bank Register 0 (IEBR0) Register Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (0x1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (0x1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (0x1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/* ERRBNK Instruction Cache Error Bank Register 1 (IEBR1) Register Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (0x1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (0x1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (0x1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 0 (DEBR0) Register Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (0x1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (0x1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (0x1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (0x1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 1 (DEBR1) Register Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (0x1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (0x1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (0x1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (0x1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 0 (TEBR0) Register Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (0x1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (0x1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x3UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (0x1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (0x1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 1 (TEBR1) Register Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (0x1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (0x1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x3UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (0x1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (0x1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/* PRCCFGINF Processor Configuration Information Selection Register (CFGINFOSEL) Definitions */ + +/* PRCCFGINF Processor Configuration Information Read Data Register (CFGINFORD) Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup STL_Type Software Test Library Observation Registers + \brief Type definitions for the Software Test Library Observation Registerss (STL) + @{ + */ + +/** + \brief Structure type to access the Software Test Library Observation Registerss (STL). + */ +typedef struct +{ + __IM uint32_t STLNVICPENDOR; /*!< Offset: 0x000 (R/ ) NVIC Pending Priority Tree Register */ + __IM uint32_t STLNVICACTVOR; /*!< Offset: 0x004 (R/ ) NVIC Active Priority Tree Register */ + uint32_t RESERVED0[2U]; + __OM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sanple Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLD0MPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register 0 */ + __IM uint32_t STLD1MPUOR; /*!< Offset: 0x01C (R/ ) MPU Memory Attributes Register 1 */ + +} STL_Type; + +/* STL Software Test Library Observation Register (STLNVICPENDOR) Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (0x1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (0x1UL << STL_STLNVICPENDOR_TARGET_Pos) /*!< STL STLNVICPENDOR: TARGET Mask */ + +#define STL_STLNVICPENDOR_PRIORITY_Pos 9U /*!< STL STLNVICPENDOR: PRIORITY Position */ +#define STL_STLNVICPENDOR_PRIORITY_Msk (0xFFUL << STL_STLNVICPENDOR_PRIORITY_Pos) /*!< STL STLNVICPENDOR: PRIORITY Mask */ + +#define STL_STLNVICPENDOR_INTNUM_Pos 0U /*!< STL STLNVICPENDOR: INTNUM Position */ +#define STL_STLNVICPENDOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICPENDOR_INTNUM_Pos*/) /*!< STL STLNVICPENDOR: INTNUM Mask */ + +/* STL Software Test Library Observation Register (STLNVICACTVOR) Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (0x1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (0x1UL << STL_STLNVICACTVOR_TARGET_Pos) /*!< STL STLNVICACTVOR: TARGET Mask */ + +#define STL_STLNVICACTVOR_PRIORITY_Pos 9U /*!< STL STLNVICACTVOR: PRIORITY Position */ +#define STL_STLNVICACTVOR_PRIORITY_Msk (0xFFUL << STL_STLNVICACTVOR_PRIORITY_Pos) /*!< STL STLNVICACTVOR: PRIORITY Mask */ + +#define STL_STLNVICACTVOR_INTNUM_Pos 0U /*!< STL STLNVICACTVOR: INTNUM Position */ +#define STL_STLNVICACTVOR_INTNUM_Msk (0x1FFUL /*<< STL_STLNVICACTVOR_INTNUM_Pos*/) /*!< STL STLNVICACTVOR: INTNUM Mask */ + +/* STL Software Test Library Observation Register (STLIDMPUSR) Definitions */ +#define STL_STLIDMPUSR_ADDR_Pos 5U /*!< STL STLIDMPUSR: ADDR Position */ +#define STL_STLIDMPUSR_ADDR_Msk (0x7FFFFFFUL << STL_STLIDMPUSR_ADDR_Pos) /*!< STL STLIDMPUSR: ADDR Mask */ + +#define STL_STLIDMPUSR_INSTR_Pos 2U /*!< STL STLIDMPUSR: INSTR Position */ +#define STL_STLIDMPUSR_INSTR_Msk (0x1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (0x1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/* STL Software Test Library Observation Register (STLIMPUOR) Definitions */ +#define STL_STLIMPUOR_HITREGION_Pos 9U /*!< STL STLIMPUOR: HITREGION Position */ +#define STL_STLIMPUOR_HITREGION_Msk (0xFFUL << STL_STLIMPUOR_HITREGION_Pos) /*!< STL STLIMPUOR: HITREGION Mask */ + +#define STL_STLIMPUOR_ATTR_Pos 0U /*!< STL STLIMPUOR: ATTR Position */ +#define STL_STLIMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLIMPUOR_ATTR_Pos*/) /*!< STL STLIMPUOR: ATTR Mask */ + +/* STL Software Test Library Observation Register (STLD0MPUOR) Definitions */ +#define STL_STLD0MPUOR_HITREGION_Pos 9U /*!< STL STLD0MPUOR: HITREGION Position */ +#define STL_STLD0MPUOR_HITREGION_Msk (0xFFUL << STL_STLD0MPUOR_HITREGION_Pos) /*!< STL STLD0MPUOR: HITREGION Mask */ + +#define STL_STLD0MPUOR_ATTR_Pos 0U /*!< STL STLD0MPUOR: ATTR Position */ +#define STL_STLD0MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD0MPUOR_ATTR_Pos*/) /*!< STL STLD0MPUOR: ATTR Mask */ + +/* STL Software Test Library Observation Register (STLD1MPUOR) Definitions */ +#define STL_STLD1MPUOR_HITREGION_Pos 9U /*!< STL STLD1MPUOR: HITREGION Position */ +#define STL_STLD1MPUOR_HITREGION_Msk (0xFFUL << STL_STLD1MPUOR_HITREGION_Pos) /*!< STL STLD1MPUOR: HITREGION Mask */ + +#define STL_STLD1MPUOR_ATTR_Pos 0U /*!< STL STLD1MPUOR: ATTR Position */ +#define STL_STLD1MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD1MPUOR_ATTR_Pos*/) /*!< STL STLD1MPUOR: ATTR Mask */ + +/*@}*/ /* end of group STL_Type */ + + /** \ingroup CMSIS_core_register \defgroup CMSIS_TPI Trace Port Interface (TPI) @@ -1490,15 +1988,14 @@ typedef struct uint32_t RESERVED11[108]; __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ - uint32_t RESERVED12[4]; + uint32_t RESERVED12[3]; __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ uint32_t RESERVED13[3]; __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ - __IOM uint32_t PIDR1; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 1 */ - __IOM uint32_t PIDR2; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 2 */ - __IOM uint32_t PIDR3; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 3 */ - uint32_t RESERVED14[3]; + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ @@ -1508,12 +2005,12 @@ typedef struct /** \brief PMU Event Counter Registers (0-30) Definitions */ #define PMU_EVCNTR_CNT_Pos 0U /*!< PMU EVCNTR: Counter Position */ -#define PMU_EVCNTR_CNT_Msk (16UL /*<< PMU_EVCNTRx_CNT_Pos*/) /*!< PMU EVCNTR: Counter Mask */ +#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 (16UL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ +#define PMU_EVTYPER_EVENTTOCNT_Msk (0xFFFFUL /*<< EVTYPERx_EVENTTOCNT_Pos*/) /*!< PMU EVTYPER: Event to Count Mask */ /** \brief PMU Count Enable Set Register Definitions */ @@ -2221,10 +2718,10 @@ typedef struct /** \brief PMU Type Register Definitions */ #define PMU_TYPE_NUM_CNTS_Pos 0U /*!< PMU TYPE: Number of Counters Position */ -#define PMU_TYPE_NUM_CNTS_Msk (8UL /*<< PMU_TYPE_NUM_CNTS_Pos*/) /*!< PMU TYPE: Number of Counters Mask */ +#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 (6UL << PMU_TYPE_SIZE_CNTS_Pos) /*!< PMU TYPE: Size of Counters Mask */ +#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 */ @@ -2235,6 +2732,33 @@ typedef struct #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 */ #endif @@ -3066,6 +3590,12 @@ typedef struct #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ @@ -3074,13 +3604,19 @@ typedef struct #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ - #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define STL ((STL_Type *) STL_BASE ) /*!< Software Test Library configuration struct */ #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ @@ -3112,7 +3648,7 @@ typedef struct #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ - #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ @@ -3132,6 +3668,69 @@ typedef struct /*@} */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ +#define ID_ADR (ID_AFR) /*!< SCB Auxiliary Feature Register */ + +/* 'SCnSCB' is deprecated and replaced by 'ICB' */ +typedef ICB_Type SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISCRITAXIRUW_Pos (ICB_ACTLR_DISCRITAXIRUW_Pos) +#define SCnSCB_ACTLR_DISCRITAXIRUW_Msk (ICB_ACTLR_DISCRITAXIRUW_Msk) + +#define SCnSCB_ACTLR_DISDI_Pos (ICB_ACTLR_DISDI_Pos) +#define SCnSCB_ACTLR_DISDI_Msk (ICB_ACTLR_DISDI_Msk) + +#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos (ICB_ACTLR_DISCRITAXIRUR_Pos) +#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (ICB_ACTLR_DISCRITAXIRUR_Msk) + +#define SCnSCB_ACTLR_EVENTBUSEN_Pos (ICB_ACTLR_EVENTBUSEN_Pos) +#define SCnSCB_ACTLR_EVENTBUSEN_Msk (ICB_ACTLR_EVENTBUSEN_Msk) + +#define SCnSCB_ACTLR_EVENTBUSEN_S_Pos (ICB_ACTLR_EVENTBUSEN_S_Pos) +#define SCnSCB_ACTLR_EVENTBUSEN_S_Msk (ICB_ACTLR_EVENTBUSEN_S_Msk) + +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos (ICB_ACTLR_DISITMATBFLUSH_Pos) +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (ICB_ACTLR_DISITMATBFLUSH_Msk) + +#define SCnSCB_ACTLR_DISNWAMODE_Pos (ICB_ACTLR_DISNWAMODE_Pos) +#define SCnSCB_ACTLR_DISNWAMODE_Msk (ICB_ACTLR_DISNWAMODE_Msk) + +#define SCnSCB_ACTLR_FPEXCODIS_Pos (ICB_ACTLR_FPEXCODIS_Pos) +#define SCnSCB_ACTLR_FPEXCODIS_Msk (ICB_ACTLR_FPEXCODIS_Msk) + +#define SCnSCB_ACTLR_DISOLAP_Pos (ICB_ACTLR_DISOLAP_Pos) +#define SCnSCB_ACTLR_DISOLAP_Msk (ICB_ACTLR_DISOLAP_Msk) + +#define SCnSCB_ACTLR_DISOLAPS_Pos (ICB_ACTLR_DISOLAPS_Pos) +#define SCnSCB_ACTLR_DISOLAPS_Msk (ICB_ACTLR_DISOLAPS_Msk) + +#define SCnSCB_ACTLR_DISLOBR_Pos (ICB_ACTLR_DISLOBR_Pos) +#define SCnSCB_ACTLR_DISLOBR_Msk (ICB_ACTLR_DISLOBR_Msk) + +#define SCnSCB_ACTLR_DISLO_Pos (ICB_ACTLR_DISLO_Pos) +#define SCnSCB_ACTLR_DISLO_Msk (ICB_ACTLR_DISLO_Msk) + +#define SCnSCB_ACTLR_DISLOLEP_Pos (ICB_ACTLR_DISLOLEP_Pos) +#define SCnSCB_ACTLR_DISLOLEP_Msk (ICB_ACTLR_DISLOLEP_Msk) + +#define SCnSCB_ACTLR_DISFOLD_Pos (ICB_ACTLR_DISFOLD_Pos) +#define SCnSCB_ACTLR_DISFOLD_Msk (ICB_ACTLR_DISFOLD_Msk) + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos (ICB_ICTR_INTLINESNUM_Pos) +#define SCnSCB_ICTR_INTLINESNUM_Msk (ICB_ICTR_INTLINESNUM_Msk) + +#define SCnSCB (ICB) +#define SCnSCB_NS (ICB_NS) + +/*@} */ + /******************************************************************************* * Hardware Abstraction Layer @@ -3825,6 +4424,9 @@ __STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) #define ARMCM55_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ #define ARMCM55_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ #define ARMCM55_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM55_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access to the P-AHB write interface */ +#define ARMCM55_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM55_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ #define ARMCM55_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ #define ARMCM55_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm7.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm7.h index e1c31c2..010506e 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm7.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm7.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_cm7.h * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File - * @version V5.1.2 - * @date 27. March 2020 + * @version V5.1.6 + * @date 04. June 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -213,7 +213,7 @@ #define __VTOR_PRESENT 1U #warning "__VTOR_PRESENT not defined in device header file; using default!" #endif - + #ifndef __NVIC_PRIO_BITS #define __NVIC_PRIO_BITS 3U #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" @@ -501,7 +501,8 @@ typedef struct __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ - uint32_t RESERVED7[6U]; + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ + uint32_t RESERVED7[5U]; __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ @@ -676,22 +677,22 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ #define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ @@ -875,21 +876,24 @@ typedef struct #define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ #define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ -#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ -#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ +#define SCB_CACR_ECCEN_Pos 1U /*!< \deprecated SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< \deprecated SCB CACR: ECCEN Mask */ + +#define SCB_CACR_ECCDIS_Pos 1U /*!< SCB CACR: ECCDIS Position */ +#define SCB_CACR_ECCDIS_Msk (1UL << SCB_CACR_ECCDIS_Pos) /*!< SCB CACR: ECCDIS Mask */ #define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ #define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ /* AHBS Control Register Definitions */ #define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ -#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBSCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ #define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ -#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBSCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ #define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ -#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBSCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ /* Auxiliary Bus Fault Status Register Definitions */ #define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm85.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm85.h new file mode 100644 index 0000000..6046311 --- /dev/null +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_cm85.h @@ -0,0 +1,4672 @@ +/**************************************************************************//** + * @file core_cm85.h + * @brief CMSIS Cortex-M85 Core Peripheral Access Layer Header File + * @version V1.0.4 + * @date 21. April 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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 ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_CM85_H_GENERIC +#define __CORE_CM85_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M85 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM85 definitions */ + +#define __CORTEX_M (85U) /*!< Cortex-M Core */ + +#if defined ( __CC_ARM ) + #error Legacy Arm Compiler does not support Armv8.1-M target architecture. +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_FP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM85_H_DEPENDANT +#define __CORE_CM85_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM85_REV + #define __CM85_REV 0x0001U + #warning "__CM85_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #if __FPU_PRESENT != 0U + #ifndef __FPU_DP + #define __FPU_DP 0U + #warning "__FPU_DP not defined in device header file; using default!" + #endif + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 1U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __PMU_PRESENT + #define __PMU_PRESENT 0U + #warning "__PMU_PRESENT not defined in device header file; using default!" + #endif + + #if __PMU_PRESENT != 0U + #ifndef __PMU_NUM_EVENTCNT + #define __PMU_NUM_EVENTCNT 8U + #warning "__PMU_NUM_EVENTCNT not defined in device header file; using default!" + #elif (__PMU_NUM_EVENTCNT > 8 || __PMU_NUM_EVENTCNT < 2) + #error "__PMU_NUM_EVENTCNT is out of range in device header file!" */ + #endif + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#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 */ + +/*@} end of group Cortex_M85 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core PMU Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:1; /*!< bit: 20 Reserved */ + uint32_t B:1; /*!< bit: 21 BTI active (read 0) */ + uint32_t _reserved2:2; /*!< bit: 22..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_B_Pos 21U /*!< xPSR: B Position */ +#define xPSR_B_Msk (1UL << xPSR_B_Pos) /*!< xPSR: B Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t BTI_EN:1; /*!< bit: 4 Privileged branch target identification enable */ + uint32_t UBTI_EN:1; /*!< bit: 5 Unprivileged branch target identification enable */ + uint32_t PAC_EN:1; /*!< bit: 6 Privileged pointer authentication enable */ + uint32_t UPAC_EN:1; /*!< bit: 7 Unprivileged pointer authentication enable */ + uint32_t _reserved1:24; /*!< bit: 8..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_UPAC_EN_Pos 7U /*!< CONTROL: UPAC_EN Position */ +#define CONTROL_UPAC_EN_Msk (1UL << CONTROL_UPAC_EN_Pos) /*!< CONTROL: UPAC_EN Mask */ + +#define CONTROL_PAC_EN_Pos 6U /*!< CONTROL: PAC_EN Position */ +#define CONTROL_PAC_EN_Msk (1UL << CONTROL_PAC_EN_Pos) /*!< CONTROL: PAC_EN Mask */ + +#define CONTROL_UBTI_EN_Pos 5U /*!< CONTROL: UBTI_EN Position */ +#define CONTROL_UBTI_EN_Msk (1UL << CONTROL_UBTI_EN_Pos) /*!< CONTROL: UBTI_EN Mask */ + +#define CONTROL_BTI_EN_Pos 4U /*!< CONTROL: BTI_EN Position */ +#define CONTROL_BTI_EN_Msk (1UL << CONTROL_BTI_EN_Pos) /*!< CONTROL: BTI_EN Mask */ + +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \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 SHPR[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 ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED7[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + __IOM uint32_t RFSR; /*!< Offset: 0x204 (R/W) RAS Fault Status Register */ + uint32_t RESERVED4[14U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR 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 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_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_IESB_Pos 5U /*!< SCB AIRCR: Implicit ESB Enable Position */ +#define SCB_AIRCR_IESB_Msk (1UL << SCB_AIRCR_IESB_Pos) /*!< SCB AIRCR: Implicit ESB Enable Mask */ + +#define SCB_AIRCR_DIT_Pos 4U /*!< SCB AIRCR: Data Independent Timing Position */ +#define SCB_AIRCR_DIT_Msk (1UL << SCB_AIRCR_DIT_Pos) /*!< SCB AIRCR: Data Independent Timing Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_TRD_Pos 20U /*!< SCB CCR: TRD Position */ +#define SCB_CCR_TRD_Msk (1UL << SCB_CCR_TRD_Pos) /*!< SCB CCR: TRD Mask */ + +#define SCB_CCR_LOB_Pos 19U /*!< SCB CCR: LOB Position */ +#define SCB_CCR_LOB_Msk (1UL << SCB_CCR_LOB_Pos) /*!< SCB CCR: LOB Mask */ + +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* 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 SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CP7_Pos 7U /*!< SCB NSACR: CP7 Position */ +#define SCB_NSACR_CP7_Msk (1UL << SCB_NSACR_CP7_Pos) /*!< SCB NSACR: CP7 Mask */ + +#define SCB_NSACR_CP6_Pos 6U /*!< SCB NSACR: CP6 Position */ +#define SCB_NSACR_CP6_Msk (1UL << SCB_NSACR_CP6_Pos) /*!< SCB NSACR: CP6 Mask */ + +#define SCB_NSACR_CP5_Pos 5U /*!< SCB NSACR: CP5 Position */ +#define SCB_NSACR_CP5_Msk (1UL << SCB_NSACR_CP5_Pos) /*!< SCB NSACR: CP5 Mask */ + +#define SCB_NSACR_CP4_Pos 4U /*!< SCB NSACR: CP4 Position */ +#define SCB_NSACR_CP4_Msk (1UL << SCB_NSACR_CP4_Pos) /*!< SCB NSACR: CP4 Mask */ + +#define SCB_NSACR_CP3_Pos 3U /*!< SCB NSACR: CP3 Position */ +#define SCB_NSACR_CP3_Msk (1UL << SCB_NSACR_CP3_Pos) /*!< SCB NSACR: CP3 Mask */ + +#define SCB_NSACR_CP2_Pos 2U /*!< SCB NSACR: CP2 Position */ +#define SCB_NSACR_CP2_Msk (1UL << SCB_NSACR_CP2_Pos) /*!< SCB NSACR: CP2 Mask */ + +#define SCB_NSACR_CP1_Pos 1U /*!< SCB NSACR: CP1 Position */ +#define SCB_NSACR_CP1_Msk (1UL << SCB_NSACR_CP1_Pos) /*!< SCB NSACR: CP1 Mask */ + +#define SCB_NSACR_CP0_Pos 0U /*!< SCB NSACR: CP0 Position */ +#define SCB_NSACR_CP0_Msk (1UL /*<< SCB_NSACR_CP0_Pos*/) /*!< SCB NSACR: CP0 Mask */ + +/* SCB Debug Feature Register 0 Definitions */ +#define SCB_ID_DFR_UDE_Pos 28U /*!< SCB ID_DFR: UDE Position */ +#define SCB_ID_DFR_UDE_Msk (0xFUL << SCB_ID_DFR_UDE_Pos) /*!< SCB ID_DFR: UDE Mask */ + +#define SCB_ID_DFR_MProfDbg_Pos 20U /*!< SCB ID_DFR: MProfDbg Position */ +#define SCB_ID_DFR_MProfDbg_Msk (0xFUL << SCB_ID_DFR_MProfDbg_Pos) /*!< SCB ID_DFR: MProfDbg Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB RAS Fault Status Register Definitions */ +#define SCB_RFSR_V_Pos 31U /*!< SCB RFSR: V Position */ +#define SCB_RFSR_V_Msk (1UL << SCB_RFSR_V_Pos) /*!< SCB RFSR: V Mask */ + +#define SCB_RFSR_IS_Pos 16U /*!< SCB RFSR: IS Position */ +#define SCB_RFSR_IS_Msk (0x7FFFUL << SCB_RFSR_IS_Pos) /*!< SCB RFSR: IS Mask */ + +#define SCB_RFSR_UET_Pos 0U /*!< SCB RFSR: UET Position */ +#define SCB_RFSR_UET_Msk (3UL /*<< SCB_RFSR_UET_Pos*/) /*!< SCB RFSR: UET Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ICB Implementation Control Block register (ICB) + \brief Type definitions for the Implementation Control Block Register + @{ + */ + +/** + \brief Structure type to access the Implementation Control Block (ICB). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} ICB_Type; + +/* Auxiliary Control Register Definitions */ +#define ICB_ACTLR_DISCRITAXIRUW_Pos 27U /*!< ACTLR: DISCRITAXIRUW Position */ +#define ICB_ACTLR_DISCRITAXIRUW_Msk (1UL << ICB_ACTLR_DISCRITAXIRUW_Pos) /*!< ACTLR: DISCRITAXIRUW Mask */ + +#define ICB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define ICB_ACTLR_DISCRITAXIRUR_Msk (1UL << ICB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define ICB_ACTLR_EVENTBUSEN_Pos 14U /*!< ACTLR: EVENTBUSEN Position */ +#define ICB_ACTLR_EVENTBUSEN_Msk (1UL << ICB_ACTLR_EVENTBUSEN_Pos) /*!< ACTLR: EVENTBUSEN Mask */ + +#define ICB_ACTLR_EVENTBUSEN_S_Pos 13U /*!< ACTLR: EVENTBUSEN_S Position */ +#define ICB_ACTLR_EVENTBUSEN_S_Msk (1UL << ICB_ACTLR_EVENTBUSEN_S_Pos) /*!< ACTLR: EVENTBUSEN_S Mask */ + +#define ICB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define ICB_ACTLR_DISITMATBFLUSH_Msk (1UL << ICB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define ICB_ACTLR_DISNWAMODE_Pos 11U /*!< ACTLR: DISNWAMODE Position */ +#define ICB_ACTLR_DISNWAMODE_Msk (1UL << ICB_ACTLR_DISNWAMODE_Pos) /*!< ACTLR: DISNWAMODE Mask */ + +#define ICB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define ICB_ACTLR_FPEXCODIS_Msk (1UL << ICB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +/* Interrupt Controller Type Register Definitions */ +#define ICB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define ICB_ICTR_INTLINESNUM_Msk (0xFUL /*<< ICB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_ICB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \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; + +/* 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 */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) ITM Device Type Register */ + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \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 */ + + +/** + \ingroup CMSIS_core_register + \defgroup MemSysCtl_Type Memory System Control Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Memory System Control Registers (MEMSYSCTL) + @{ + */ + +/** + \brief Structure type to access the Memory System Control Registers (MEMSYSCTL). + */ +typedef struct +{ + __IOM uint32_t MSCR; /*!< Offset: 0x000 (R/W) Memory System Control Register */ + __IOM uint32_t PFCR; /*!< Offset: 0x004 (R/W) Prefetcher Control Register */ + uint32_t RESERVED1[2U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x010 (R/W) ITCM Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x014 (R/W) DTCM Control Register */ + __IOM uint32_t PAHBCR; /*!< Offset: 0x018 (R/W) P-AHB Control Register */ + uint32_t RESERVED2[313U]; + __IOM uint32_t ITGU_CTRL; /*!< Offset: 0x500 (R/W) ITGU Control Register */ + __IOM uint32_t ITGU_CFG; /*!< Offset: 0x504 (R/W) ITGU Configuration Register */ + uint32_t RESERVED3[2U]; + __IOM uint32_t ITGU_LUT[16U]; /*!< Offset: 0x510 (R/W) ITGU Look Up Table Register */ + uint32_t RESERVED4[44U]; + __IOM uint32_t DTGU_CTRL; /*!< Offset: 0x600 (R/W) DTGU Control Registers */ + __IOM uint32_t DTGU_CFG; /*!< Offset: 0x604 (R/W) DTGU Configuration Register */ + uint32_t RESERVED5[2U]; + __IOM uint32_t DTGU_LUT[16U]; /*!< Offset: 0x610 (R/W) DTGU Look Up Table Register */ +} MemSysCtl_Type; + +/* MEMSYSCTL Memory System Control Register (MSCR) Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (0x1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (0x1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (0x1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (0x1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (0x1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (0x1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/* MEMSYSCTL Prefetcher Control Register (PFCR) Register Definitions */ +#define MEMSYSCTL_PFCR_DIS_NLP_Pos 7U /*!< MEMSYSCTL PFCR: DIS_NLP Position */ +#define MEMSYSCTL_PFCR_DIS_NLP_Msk (0x1UL << MEMSYSCTL_PFCR_DIS_NLP_Pos) /*!< MEMSYSCTL PFCR: DIS_NLP Mask */ + +#define MEMSYSCTL_PFCR_ENABLE_Pos 0U /*!< MEMSYSCTL PFCR: ENABLE Position */ +#define MEMSYSCTL_PFCR_ENABLE_Msk (0x1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/* MEMSYSCTL ITCM Control Register (ITCMCR) Register Definitions */ +#define MEMSYSCTL_ITCMCR_SZ_Pos 3U /*!< MEMSYSCTL ITCMCR: SZ Position */ +#define MEMSYSCTL_ITCMCR_SZ_Msk (0xFUL << MEMSYSCTL_ITCMCR_SZ_Pos) /*!< MEMSYSCTL ITCMCR: SZ Mask */ + +#define MEMSYSCTL_ITCMCR_EN_Pos 0U /*!< MEMSYSCTL ITCMCR: EN Position */ +#define MEMSYSCTL_ITCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/* MEMSYSCTL DTCM Control Register (DTCMCR) Register Definitions */ +#define MEMSYSCTL_DTCMCR_SZ_Pos 3U /*!< MEMSYSCTL DTCMCR: SZ Position */ +#define MEMSYSCTL_DTCMCR_SZ_Msk (0xFUL << MEMSYSCTL_DTCMCR_SZ_Pos) /*!< MEMSYSCTL DTCMCR: SZ Mask */ + +#define MEMSYSCTL_DTCMCR_EN_Pos 0U /*!< MEMSYSCTL DTCMCR: EN Position */ +#define MEMSYSCTL_DTCMCR_EN_Msk (0x1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/* MEMSYSCTL P-AHB Control Register (PAHBCR) Register Definitions */ +#define MEMSYSCTL_PAHBCR_SZ_Pos 1U /*!< MEMSYSCTL PAHBCR: SZ Position */ +#define MEMSYSCTL_PAHBCR_SZ_Msk (0x7UL << MEMSYSCTL_PAHBCR_SZ_Pos) /*!< MEMSYSCTL PAHBCR: SZ Mask */ + +#define MEMSYSCTL_PAHBCR_EN_Pos 0U /*!< MEMSYSCTL PAHBCR: EN Position */ +#define MEMSYSCTL_PAHBCR_EN_Msk (0x1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/* MEMSYSCTL ITGU Control Register (ITGU_CTRL) Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_ITGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL ITGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL ITGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_ITGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL ITGU Configuration Register (ITGU_CFG) Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_ITGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL ITGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_ITGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_ITGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL ITGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL ITGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_ITGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_ITGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL ITGU_CFG: BLKSZ Mask */ + +/* MEMSYSCTL DTGU Control Registers (DTGU_CTRL) Register Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (0x1UL << MEMSYSCTL_DTGU_CTRL_DEREN_Pos) /*!< MEMSYSCTL DTGU_CTRL: DEREN Mask */ + +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Pos 0U /*!< MEMSYSCTL DTGU_CTRL: DBFEN Position */ +#define MEMSYSCTL_DTGU_CTRL_DBFEN_Msk (0x1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/* MEMSYSCTL DTGU Configuration Register (DTGU_CFG) Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (0x1UL << MEMSYSCTL_DTGU_CFG_PRESENT_Pos) /*!< MEMSYSCTL DTGU_CFG: PRESENT Mask */ + +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos 8U /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Position */ +#define MEMSYSCTL_DTGU_CFG_NUMBLKS_Msk (0xFUL << MEMSYSCTL_DTGU_CFG_NUMBLKS_Pos) /*!< MEMSYSCTL DTGU_CFG: NUMBLKS Mask */ + +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Pos 0U /*!< MEMSYSCTL DTGU_CFG: BLKSZ Position */ +#define MEMSYSCTL_DTGU_CFG_BLKSZ_Msk (0xFUL /*<< MEMSYSCTL_DTGU_CFG_BLKSZ_Pos*/) /*!< MEMSYSCTL DTGU_CFG: BLKSZ Mask */ + + +/*@}*/ /* end of group MemSysCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PwrModCtl_Type Power Mode Control Registers + \brief Type definitions for the Power Mode Control Registers (PWRMODCTL) + @{ + */ + +/** + \brief Structure type to access the Power Mode Control Registers (PWRMODCTL). + */ +typedef struct +{ + __IOM uint32_t CPDLPSTATE; /*!< Offset: 0x000 (R/W) Core Power Domain Low Power State Register */ + __IOM uint32_t DPDLPSTATE; /*!< Offset: 0x004 (R/W) Debug Power Domain Low Power State Register */ +} PwrModCtl_Type; + +/* PWRMODCTL Core Power Domain Low Power State (CPDLPSTATE) Register Definitions */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos 8U /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_RLPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_RLPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: RLPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos 4U /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_ELPSTATE_Msk (0x3UL << PWRMODCTL_CPDLPSTATE_ELPSTATE_Pos) /*!< PWRMODCTL CPDLPSTATE: ELPSTATE Mask */ + +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/* PWRMODCTL Debug Power Domain Low Power State (DPDLPSTATE) Register Definitions */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos 0U /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Position */ +#define PWRMODCTL_DPDLPSTATE_DLPSTATE_Msk (0x3UL /*<< PWRMODCTL_DPDLPSTATE_DLPSTATE_Pos*/) /*!< PWRMODCTL DPDLPSTATE: DLPSTATE Mask */ + +/*@}*/ /* end of group PwrModCtl_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_Type External Wakeup Interrupt Controller Registers + \brief Type definitions for the External Wakeup Interrupt Controller Registers (EWIC) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller Registers (EWIC). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/W) Event Mask A Register */ + __IM uint32_t EVENTMASK[15]; /*!< Offset: 0x084 (R/W) Event Mask Register */ +} EWIC_Type; + +/* EWIC External Wakeup Interrupt Controller (EVENTSPR) Register Definitions */ +#define EWIC_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC EVENTSPR: EDBGREQ Position */ +#define EWIC_EVENTSPR_EDBGREQ_Msk (0x1UL << EWIC_EVENTSPR_EDBGREQ_Pos) /*!< EWIC EVENTSPR: EDBGREQ Mask */ + +#define EWIC_EVENTSPR_NMI_Pos 1U /*!< EWIC EVENTSPR: NMI Position */ +#define EWIC_EVENTSPR_NMI_Msk (0x1UL << EWIC_EVENTSPR_NMI_Pos) /*!< EWIC EVENTSPR: NMI Mask */ + +#define EWIC_EVENTSPR_EVENT_Pos 0U /*!< EWIC EVENTSPR: EVENT Position */ +#define EWIC_EVENTSPR_EVENT_Msk (0x1UL /*<< EWIC_EVENTSPR_EVENT_Pos*/) /*!< EWIC EVENTSPR: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASKA) Register Definitions */ +#define EWIC_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC EVENTMASKA: EDBGREQ Position */ +#define EWIC_EVENTMASKA_EDBGREQ_Msk (0x1UL << EWIC_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_EVENTMASKA_NMI_Pos 1U /*!< EWIC EVENTMASKA: NMI Position */ +#define EWIC_EVENTMASKA_NMI_Msk (0x1UL << EWIC_EVENTMASKA_NMI_Pos) /*!< EWIC EVENTMASKA: NMI Mask */ + +#define EWIC_EVENTMASKA_EVENT_Pos 0U /*!< EWIC EVENTMASKA: EVENT Position */ +#define EWIC_EVENTMASKA_EVENT_Msk (0x1UL /*<< EWIC_EVENTMASKA_EVENT_Pos*/) /*!< EWIC EVENTMASKA: EVENT Mask */ + +/* EWIC External Wakeup Interrupt Controller (EVENTMASK) Register Definitions */ +#define EWIC_EVENTMASK_IRQ_Pos 0U /*!< EWIC EVENTMASKA: IRQ Position */ +#define EWIC_EVENTMASK_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EVENTMASKA_IRQ_Pos*/) /*!< EWIC EVENTMASKA: IRQ Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup ErrBnk_Type Error Banking Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Error Banking Registers (ERRBNK) + @{ + */ + +/** + \brief Structure type to access the Error Banking Registers (ERRBNK). + */ +typedef struct +{ + __IOM uint32_t IEBR0; /*!< Offset: 0x000 (R/W) Instruction Cache Error Bank Register 0 */ + __IOM uint32_t IEBR1; /*!< Offset: 0x004 (R/W) Instruction Cache Error Bank Register 1 */ + uint32_t RESERVED0[2U]; + __IOM uint32_t DEBR0; /*!< Offset: 0x010 (R/W) Data Cache Error Bank Register 0 */ + __IOM uint32_t DEBR1; /*!< Offset: 0x014 (R/W) Data Cache Error Bank Register 1 */ + uint32_t RESERVED1[2U]; + __IOM uint32_t TEBR0; /*!< Offset: 0x020 (R/W) TCM Error Bank Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ +} ErrBnk_Type; + +/* ERRBNK Instruction Cache Error Bank Register 0 (IEBR0) Register Definitions */ +#define ERRBNK_IEBR0_SWDEF_Pos 30U /*!< ERRBNK IEBR0: SWDEF Position */ +#define ERRBNK_IEBR0_SWDEF_Msk (0x3UL << ERRBNK_IEBR0_SWDEF_Pos) /*!< ERRBNK IEBR0: SWDEF Mask */ + +#define ERRBNK_IEBR0_BANK_Pos 16U /*!< ERRBNK IEBR0: BANK Position */ +#define ERRBNK_IEBR0_BANK_Msk (0x1UL << ERRBNK_IEBR0_BANK_Pos) /*!< ERRBNK IEBR0: BANK Mask */ + +#define ERRBNK_IEBR0_LOCATION_Pos 2U /*!< ERRBNK IEBR0: LOCATION Position */ +#define ERRBNK_IEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR0_LOCATION_Pos) /*!< ERRBNK IEBR0: LOCATION Mask */ + +#define ERRBNK_IEBR0_LOCKED_Pos 1U /*!< ERRBNK IEBR0: LOCKED Position */ +#define ERRBNK_IEBR0_LOCKED_Msk (0x1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (0x1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/* ERRBNK Instruction Cache Error Bank Register 1 (IEBR1) Register Definitions */ +#define ERRBNK_IEBR1_SWDEF_Pos 30U /*!< ERRBNK IEBR1: SWDEF Position */ +#define ERRBNK_IEBR1_SWDEF_Msk (0x3UL << ERRBNK_IEBR1_SWDEF_Pos) /*!< ERRBNK IEBR1: SWDEF Mask */ + +#define ERRBNK_IEBR1_BANK_Pos 16U /*!< ERRBNK IEBR1: BANK Position */ +#define ERRBNK_IEBR1_BANK_Msk (0x1UL << ERRBNK_IEBR1_BANK_Pos) /*!< ERRBNK IEBR1: BANK Mask */ + +#define ERRBNK_IEBR1_LOCATION_Pos 2U /*!< ERRBNK IEBR1: LOCATION Position */ +#define ERRBNK_IEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_IEBR1_LOCATION_Pos) /*!< ERRBNK IEBR1: LOCATION Mask */ + +#define ERRBNK_IEBR1_LOCKED_Pos 1U /*!< ERRBNK IEBR1: LOCKED Position */ +#define ERRBNK_IEBR1_LOCKED_Msk (0x1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (0x1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 0 (DEBR0) Register Definitions */ +#define ERRBNK_DEBR0_SWDEF_Pos 30U /*!< ERRBNK DEBR0: SWDEF Position */ +#define ERRBNK_DEBR0_SWDEF_Msk (0x3UL << ERRBNK_DEBR0_SWDEF_Pos) /*!< ERRBNK DEBR0: SWDEF Mask */ + +#define ERRBNK_DEBR0_TYPE_Pos 17U /*!< ERRBNK DEBR0: TYPE Position */ +#define ERRBNK_DEBR0_TYPE_Msk (0x1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (0x1UL << ERRBNK_DEBR0_BANK_Pos) /*!< ERRBNK DEBR0: BANK Mask */ + +#define ERRBNK_DEBR0_LOCATION_Pos 2U /*!< ERRBNK DEBR0: LOCATION Position */ +#define ERRBNK_DEBR0_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR0_LOCATION_Pos) /*!< ERRBNK DEBR0: LOCATION Mask */ + +#define ERRBNK_DEBR0_LOCKED_Pos 1U /*!< ERRBNK DEBR0: LOCKED Position */ +#define ERRBNK_DEBR0_LOCKED_Msk (0x1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (0x1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/* ERRBNK Data Cache Error Bank Register 1 (DEBR1) Register Definitions */ +#define ERRBNK_DEBR1_SWDEF_Pos 30U /*!< ERRBNK DEBR1: SWDEF Position */ +#define ERRBNK_DEBR1_SWDEF_Msk (0x3UL << ERRBNK_DEBR1_SWDEF_Pos) /*!< ERRBNK DEBR1: SWDEF Mask */ + +#define ERRBNK_DEBR1_TYPE_Pos 17U /*!< ERRBNK DEBR1: TYPE Position */ +#define ERRBNK_DEBR1_TYPE_Msk (0x1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (0x1UL << ERRBNK_DEBR1_BANK_Pos) /*!< ERRBNK DEBR1: BANK Mask */ + +#define ERRBNK_DEBR1_LOCATION_Pos 2U /*!< ERRBNK DEBR1: LOCATION Position */ +#define ERRBNK_DEBR1_LOCATION_Msk (0x3FFFUL << ERRBNK_DEBR1_LOCATION_Pos) /*!< ERRBNK DEBR1: LOCATION Mask */ + +#define ERRBNK_DEBR1_LOCKED_Pos 1U /*!< ERRBNK DEBR1: LOCKED Position */ +#define ERRBNK_DEBR1_LOCKED_Msk (0x1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (0x1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 0 (TEBR0) Register Definitions */ +#define ERRBNK_TEBR0_SWDEF_Pos 30U /*!< ERRBNK TEBR0: SWDEF Position */ +#define ERRBNK_TEBR0_SWDEF_Msk (0x3UL << ERRBNK_TEBR0_SWDEF_Pos) /*!< ERRBNK TEBR0: SWDEF Mask */ + +#define ERRBNK_TEBR0_POISON_Pos 28U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (0x1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (0x1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x3UL << ERRBNK_TEBR0_BANK_Pos) /*!< ERRBNK TEBR0: BANK Mask */ + +#define ERRBNK_TEBR0_LOCATION_Pos 2U /*!< ERRBNK TEBR0: LOCATION Position */ +#define ERRBNK_TEBR0_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR0_LOCATION_Pos) /*!< ERRBNK TEBR0: LOCATION Mask */ + +#define ERRBNK_TEBR0_LOCKED_Pos 1U /*!< ERRBNK TEBR0: LOCKED Position */ +#define ERRBNK_TEBR0_LOCKED_Msk (0x1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (0x1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/* ERRBNK TCM Error Bank Register 1 (TEBR1) Register Definitions */ +#define ERRBNK_TEBR1_SWDEF_Pos 30U /*!< ERRBNK TEBR1: SWDEF Position */ +#define ERRBNK_TEBR1_SWDEF_Msk (0x3UL << ERRBNK_TEBR1_SWDEF_Pos) /*!< ERRBNK TEBR1: SWDEF Mask */ + +#define ERRBNK_TEBR1_POISON_Pos 28U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (0x1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (0x1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x3UL << ERRBNK_TEBR1_BANK_Pos) /*!< ERRBNK TEBR1: BANK Mask */ + +#define ERRBNK_TEBR1_LOCATION_Pos 2U /*!< ERRBNK TEBR1: LOCATION Position */ +#define ERRBNK_TEBR1_LOCATION_Msk (0x3FFFFFUL << ERRBNK_TEBR1_LOCATION_Pos) /*!< ERRBNK TEBR1: LOCATION Mask */ + +#define ERRBNK_TEBR1_LOCKED_Pos 1U /*!< ERRBNK TEBR1: LOCKED Position */ +#define ERRBNK_TEBR1_LOCKED_Msk (0x1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (0x1UL << /*ERRBNK_TEBR1_VALID_Pos*/) /*!< ERRBNK TEBR1: VALID Mask */ + +/*@}*/ /* end of group ErrBnk_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup PrcCfgInf_Type Processor Configuration Information Registers (IMPLEMENTATION DEFINED) + \brief Type definitions for the Processor Configuration Information Registerss (PRCCFGINF) + @{ + */ + +/** + \brief Structure type to access the Processor Configuration Information Registerss (PRCCFGINF). + */ +typedef struct +{ + __OM uint32_t CFGINFOSEL; /*!< Offset: 0x000 ( /W) Processor Configuration Information Selection Register */ + __IM uint32_t CFGINFORD; /*!< Offset: 0x004 (R/ ) Processor Configuration Information Read Data Register */ +} PrcCfgInf_Type; + +/* PRCCFGINF Processor Configuration Information Selection Register (CFGINFOSEL) Definitions */ + +/* PRCCFGINF Processor Configuration Information Read Data Register (CFGINFORD) Definitions */ + +/*@}*/ /* end of group PrcCfgInf_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFmt_Pos 0U /*!< TPI FFCR: EnFmt Position */ +#define TPI_FFCR_EnFmt_Msk (0x3UL << /*TPI_FFCR_EnFmt_Pos*/) /*!< TPI FFCR: EnFmt Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_PMU Performance Monitoring Unit (PMU) + \brief Type definitions for the Performance Monitoring Unit (PMU) + @{ + */ + +/** + \brief Structure type to access the Performance Monitoring Unit (PMU). + */ +typedef struct +{ + __IOM uint32_t EVCNTR[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x0 (R/W) PMU Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) PMU Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) PMU Event Type and Filter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED2[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCFILTR; /*!< Offset: 0x47C (R/W) PMU Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) PMU Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) PMU Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) PMU Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) PMU Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) PMU Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) PMU Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) PMU Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) PMU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) PMU Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) PMU Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) PMU Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) PMU Device Type Register */ + __IOM uint32_t PIDR4; /*!< Offset: 0xFD0 (R/W) PMU Peripheral Identification Register 4 */ + uint32_t RESERVED13[3]; + __IOM uint32_t PIDR0; /*!< Offset: 0xFE0 (R/W) PMU Peripheral Identification Register 0 */ + __IOM uint32_t PIDR1; /*!< Offset: 0xFE4 (R/W) PMU Peripheral Identification Register 1 */ + __IOM uint32_t PIDR2; /*!< Offset: 0xFE8 (R/W) PMU Peripheral Identification Register 2 */ + __IOM uint32_t PIDR3; /*!< Offset: 0xFEC (R/W) PMU Peripheral Identification Register 3 */ + __IOM uint32_t CIDR0; /*!< Offset: 0xFF0 (R/W) PMU Component Identification Register 0 */ + __IOM uint32_t CIDR1; /*!< Offset: 0xFF4 (R/W) PMU Component Identification Register 1 */ + __IOM uint32_t CIDR2; /*!< Offset: 0xFF8 (R/W) PMU Component Identification Register 2 */ + __IOM uint32_t CIDR3; /*!< Offset: 0xFFC (R/W) PMU Component Identification Register 3 */ +} PMU_Type; + +/** \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 */ +#endif + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_PXN_Pos 4U /*!< MPU RLAR: PXN Position */ +#define MPU_RLAR_PXN_Msk (1UL << MPU_RLAR_PXN_Pos) /*!< MPU RLAR: PXN Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +#define FPU_FPDSCR_FZ16_Pos 19U /*!< FPDSCR: FZ16 bit Position */ +#define FPU_FPDSCR_FZ16_Msk (1UL << FPU_FPDSCR_FZ16_Pos) /*!< FPDSCR: FZ16 bit Mask */ + +#define FPU_FPDSCR_LTPSIZE_Pos 16U /*!< FPDSCR: LTPSIZE bit Position */ +#define FPU_FPDSCR_LTPSIZE_Msk (7UL << FPU_FPDSCR_LTPSIZE_Pos) /*!< FPDSCR: LTPSIZE bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: FPRound bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: FPRound bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: FPSqrt bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: FPSqrt bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: FPDivide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: FPDP bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: FPDP bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: FPSP bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: FPSP bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMDReg bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMDReg bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: FMAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: FMAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FPHP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FPHP bits Mask */ + +#define FPU_MVFR1_FP16_Pos 20U /*!< MVFR1: FP16 bits Position */ +#define FPU_MVFR1_FP16_Msk (0xFUL << FPU_MVFR1_FP16_Pos) /*!< MVFR1: FP16 bits Mask */ + +#define FPU_MVFR1_MVE_Pos 8U /*!< MVFR1: MVE bits Position */ +#define FPU_MVFR1_MVE_Msk (0xFUL << FPU_MVFR1_MVE_Pos) /*!< MVFR1: MVE bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: FPDNaN bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: FPDNaN bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FPFtZ bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FPFtZ bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + +/* CoreDebug is deprecated. replaced by DCB (Debug Control Block) */ +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief \deprecated Structure type to access the Core Debug Register (CoreDebug). + */ +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 */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< \deprecated CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< \deprecated CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< \deprecated CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_FPD_Pos 23U /*!< \deprecated CoreDebug DHCSR: S_FPD Position */ +#define CoreDebug_DHCSR_S_FPD_Msk (1UL << CoreDebug_DHCSR_S_FPD_Pos) /*!< \deprecated CoreDebug DHCSR: S_FPD Mask */ + +#define CoreDebug_DHCSR_S_SUIDE_Pos 22U /*!< \deprecated CoreDebug DHCSR: S_SUIDE Position */ +#define CoreDebug_DHCSR_S_SUIDE_Msk (1UL << CoreDebug_DHCSR_S_SUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SUIDE Mask */ + +#define CoreDebug_DHCSR_S_NSUIDE_Pos 21U /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Position */ +#define CoreDebug_DHCSR_S_NSUIDE_Msk (1UL << CoreDebug_DHCSR_S_NSUIDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_NSUIDE Mask */ + +#define CoreDebug_DHCSR_S_SDE_Pos 20U /*!< \deprecated CoreDebug DHCSR: S_SDE Position */ +#define CoreDebug_DHCSR_S_SDE_Msk (1UL << CoreDebug_DHCSR_S_SDE_Pos) /*!< \deprecated CoreDebug DHCSR: S_SDE Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< \deprecated CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< \deprecated CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< \deprecated CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< \deprecated CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< \deprecated CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< \deprecated CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_PMOV_Pos 6U /*!< \deprecated CoreDebug DHCSR: C_PMOV Position */ +#define CoreDebug_DHCSR_C_PMOV_Msk (1UL << CoreDebug_DHCSR_C_PMOV_Pos) /*!< \deprecated CoreDebug DHCSR: C_PMOV Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< \deprecated CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< \deprecated CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< \deprecated CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< \deprecated CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< \deprecated CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< \deprecated CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< \deprecated CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< \deprecated CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< \deprecated CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< \deprecated CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< \deprecated CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< \deprecated CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< \deprecated CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< \deprecated CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< \deprecated CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< \deprecated CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< \deprecated CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< \deprecated CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< \deprecated CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< \deprecated CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< \deprecated CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< \deprecated CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< \deprecated CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< \deprecated CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_CLR_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: CLR_MON_PEND, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos 3U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Position */ +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_REQ_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_REQ, Mask */ + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos 1U /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Position */ +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk (1UL << CoreDebug_DSCEMCR_SET_MON_PEND_Pos) /*!< \deprecated CoreDebug DSCEMCR: SET_MON_PEND, Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos 10U /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos 9U /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Position */ +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk (1UL << CoreDebug_DAUTHCTRL_UIDAPEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: UIDAPEN, Mask */ + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos 8U /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Position */ +#define CoreDebug_DAUTHCTRL_FSDMA_Msk (1UL << CoreDebug_DAUTHCTRL_FSDMA_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: FSDMA, Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< \deprecated CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< \deprecated CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< \deprecated CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< \deprecated CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< \deprecated CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< \deprecated CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< \deprecated CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< \deprecated CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \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; + +/* DHCSR, 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << 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 */ + +/* DCRDR, 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 */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DSCEMCR, 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SUNID_Pos 22U /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUNID_Msk (0x3UL << DIB_DAUTHSTATUS_SUNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Non-invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SUID_Pos 20U /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_SUID_Msk (0x3UL << DIB_DAUTHSTATUS_SUID_Pos ) /*!< DIB DAUTHSTATUS: Secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_NSUNID_Pos 18U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Position */ +#define DIB_DAUTHSTATUS_NSUNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Non-invasive Debug Allo Mask */ + +#define DIB_DAUTHSTATUS_NSUID_Pos 16U /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Position */ +#define DIB_DAUTHSTATUS_NSUID_Msk (0x3UL << DIB_DAUTHSTATUS_NSUID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Unprivileged Invasive Debug Allowed Mask */ + +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define MEMSYSCTL_BASE (0xE001E000UL) /*!< Memory System Control Base Address */ + #define ERRBNK_BASE (0xE001E100UL) /*!< Error Banking Base Address */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< \deprecated Core Debug Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define ICB ((ICB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC ((EWIC_Type *) EWIC_BASE ) /*!< EWIC configuration struct */ + #define PRCCFGINF ((PrcCfgInf_Type *) PRCCFGINF_BASE ) /*!< Processor Configuration Information configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< \deprecated Core Debug configuration struct */ + #define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB configuration struct */ + #define DIB ((DIB_Type *) DIB_BASE ) /*!< DIB configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + #define PMU_BASE (0xE0003000UL) /*!< PMU Base Address */ + #define PMU ((PMU_Type *) PMU_BASE ) /*!< PMU configuration struct */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< \deprecated Core Debug Base Address (non-secure address space) */ + #define DCB_BASE_NS (0xE002EDF0UL) /*!< DCB Base Address (non-secure address space) */ + #define DIB_BASE_NS (0xE002EFB0UL) /*!< DIB Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define ICB_NS ((ICB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< \deprecated Core Debug configuration struct (non-secure address space) */ + #define DCB_NS ((DCB_Type *) DCB_BASE_NS ) /*!< DCB configuration struct (non-secure address space) */ + #define DIB_NS ((DIB_Type *) DIB_BASE_NS ) /*!< DIB configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_register_aliases Backwards Compatibility Aliases + \brief Register alias definitions for backwards compatibility. + @{ + */ + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000004UL) /* bit [2] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "pmu_armv8.h" + +/** + \brief Cortex-M85 PMU events + \note Architectural PMU events can be found in pmu_armv8.h +*/ + +#define ARMCM85_PMU_ECC_ERR 0xC000 /*!< One or more Error Correcting Code (ECC) errors detected */ +#define ARMCM85_PMU_ECC_ERR_MBIT 0xC001 /*!< One or more multi-bit ECC errors detected */ +#define ARMCM85_PMU_ECC_ERR_DCACHE 0xC010 /*!< One or more ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_ICACHE 0xC011 /*!< One or more ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DCACHE 0xC012 /*!< One or more multi-bit ECC errors in the data cache */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ICACHE 0xC013 /*!< One or more multi-bit ECC errors in the instruction cache */ +#define ARMCM85_PMU_ECC_ERR_DTCM 0xC020 /*!< One or more ECC errors in the Data Tightly Coupled Memory (DTCM) */ +#define ARMCM85_PMU_ECC_ERR_ITCM 0xC021 /*!< One or more ECC errors in the Instruction Tightly Coupled Memory (ITCM) */ +#define ARMCM85_PMU_ECC_ERR_MBIT_DTCM 0xC022 /*!< One or more multi-bit ECC errors in the DTCM */ +#define ARMCM85_PMU_ECC_ERR_MBIT_ITCM 0xC023 /*!< One or more multi-bit ECC errors in the ITCM */ +#define ARMCM85_PMU_PF_LINEFILL 0xC100 /*!< The prefetcher starts a line-fill */ +#define ARMCM85_PMU_PF_CANCEL 0xC101 /*!< The prefetcher stops prefetching */ +#define ARMCM85_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#define ARMCM85_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM85_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM85_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM85_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access on the P-AHB write interface */ +#define ARMCM85_PMU_AXI_WRITE_ACCESS 0xC302 /*!< Any beat access to M-AXI write interface */ +#define ARMCM85_PMU_AXI_READ_ACCESS 0xC303 /*!< Any beat access to M-AXI read interface */ +#define ARMCM85_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM85_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + +/* ########################## MVE functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_MveFunctions MVE Functions + \brief Function that provides MVE type. + @{ + */ + +/** + \brief get MVE type + \details returns the MVE type + \returns + - \b 0: No Vector Extension (MVE) + - \b 1: Integer Vector Extension (MVE-I) + - \b 2: Floating-point Vector Extension (MVE-F) + */ +__STATIC_INLINE uint32_t SCB_GetMVEType(void) +{ + const uint32_t mvfr1 = FPU->MVFR1; + if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x2U << FPU_MVFR1_MVE_Pos)) + { + return 2U; + } + else if ((mvfr1 & FPU_MVFR1_MVE_Msk) == (0x1U << FPU_MVFR1_MVE_Pos)) + { + return 1U; + } + else + { + return 0U; + } +} + + +/*@} end of CMSIS_Core_MveFunctions */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) +#include "cachel1_armv7.h" +#endif + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################### PAC Key functions ########################### */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) +#include "pac_armv81.h" +#endif + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + 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 */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM85_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_sc300.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_sc300.h index e8914ba..d666210 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_sc300.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_sc300.h @@ -1,11 +1,11 @@ /**************************************************************************//** * @file core_sc300.h * @brief CMSIS SC300 Core Peripheral Access Layer Header File - * @version V5.0.9 - * @date 27. March 2020 + * @version V5.0.10 + * @date 04. June 2021 ******************************************************************************/ /* - * Copyright (c) 2009-2020 Arm Limited. All rights reserved. + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -562,19 +562,19 @@ typedef struct #define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ /* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ -#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ #define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ -#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ #define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ -#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ #define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ -#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ #define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ -#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ #define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ /* BusFault Status Register (part of SCB Configurable Fault Status Register) */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_starmc1.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_starmc1.h new file mode 100644 index 0000000..d86c8d3 --- /dev/null +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/core_starmc1.h @@ -0,0 +1,3592 @@ +/**************************************************************************//** + * @file core_starmc1.h + * @brief CMSIS ArmChina STAR-MC1 Core Peripheral Access Layer Header File + * @version V1.0.2 + * @date 07. April 2022 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. + * Copyright (c) 2018-2022 Arm China. + * 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 ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic ignored "-Wpedantic" /* disable pedantic warning due to unnamed structs/unions */ +#endif + +#ifndef __CORE_STAR_H_GENERIC +#define __CORE_STAR_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup STAR-MC1 + @{ + */ + +#include "cmsis_version.h" + +/* Macro Define for STAR-MC1 */ +#define __STAR_MC (1U) /*!< STAR-MC Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_STAR_H_DEPENDANT +#define __CORE_STAR_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __STAR_REV + #define __STAR_REV 0x0000U + #warning "__STAR_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#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 */ + +/*@} end of group STAR-MC1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for STAR-MC1 processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \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 SHPR[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 ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED_ADD1[21U]; + __IOM uint32_t SFSR; /*!< Offset: 0x0E4 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x0E8 (R/W) Secure Fault Address Register */ + uint32_t RESERVED3[69U]; + __OM uint32_t STIR; /*!< Offset: F00-D00=0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ +} SCB_Type; + +typedef struct +{ + __IOM uint32_t CACR; /*!< Offset: 0x0 (R/W) L1 Cache Control Register */ + __IOM uint32_t ITCMCR; /*!< Offset: 0x10 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x14 (R/W) Data Tightly-Coupled Memory Control Registers */ +}EMSS_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR 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 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_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_CFSR_MEMFAULTSR_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_CFSR_MEMFAULTSR_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_CFSR_MEMFAULTSR_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +#define SCB_CLIDR_IC_Pos 0U /*!< SCB CLIDR: IC Position */ +#define SCB_CLIDR_IC_Msk (1UL << SCB_CLIDR_IC_Pos) /*!< SCB CLIDR: IC Mask */ + +#define SCB_CLIDR_DC_Pos 1U /*!< SCB CLIDR: DC Position */ +#define SCB_CLIDR_DC_Msk (1UL << SCB_CLIDR_DC_Pos) /*!< SCB CLIDR: DC Mask */ + + + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache line Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_LEVEL_Pos 1U /*!< SCB DCISW: Level Position */ +#define SCB_DCISW_LEVEL_Msk (7UL << SCB_DCISW_LEVEL_Pos) /*!< SCB DCISW: Level Mask */ + +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0xFFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean line by Set-way Register Definitions */ +#define SCB_DCCSW_LEVEL_Pos 1U /*!< SCB DCCSW: Level Position */ +#define SCB_DCCSW_LEVEL_Msk (7UL << SCB_DCCSW_LEVEL_Pos) /*!< SCB DCCSW: Level Mask */ + +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0xFFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_LEVEL_Pos 1U /*!< SCB DCCISW: Level Position */ +#define SCB_DCCISW_LEVEL_Msk (7UL << SCB_DCCISW_LEVEL_Pos) /*!< SCB DCCISW: Level Mask */ + +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0xFFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* ArmChina: Implementation Defined */ +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_DCCLEAN_Pos 16U /*!< SCB CACR: DCCLEAN Position */ +#define SCB_CACR_DCCLEAN_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCCLEAN Mask */ + +#define SCB_CACR_ICACTIVE_Pos 13U /*!< SCB CACR: ICACTIVE Position */ +#define SCB_CACR_ICACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: ICACTIVE Mask */ + +#define SCB_CACR_DCACTIVE_Pos 12U /*!< SCB CACR: DCACTIVE Position */ +#define SCB_CACR_DCACTIVE_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: DCACTIVE Mask */ + +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \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; + +/* 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 */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \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 */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and VFP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: FPMisc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: FPMisc bits Mask */ + +/*@} end of group CMSIS_FPU */ + + + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DCB Debug Control Block + \brief Type definitions for the Debug Control Block Registers + @{ + */ + +/** + \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 */ + uint32_t RESERVED0[1U]; + __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; + +/* DHCSR, 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/* DCRSR, Debug Core Register Select Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (0x1UL << 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 */ + +/* DCRDR, 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 */ + +/* DEMCR, Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/* DAUTHCTRL, Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/* DSCSR, 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 (0x1UL << 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 (0x1UL << 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 (0x1UL << 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 (0x1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} end of group CMSIS_DCB */ + + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DIB Debug Identification Block + \brief Type definitions for the Debug Identification Block Registers + @{ + */ + +/** + \brief Structure type to access the Debug Identification Block Registers (DIB). + */ +typedef struct +{ + __OM uint32_t DLAR; /*!< Offset: 0x000 ( /W) SCS Software Lock Access Register */ + __IM uint32_t DLSR; /*!< Offset: 0x004 (R/ ) SCS Software Lock Status Register */ + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + __IM uint32_t DDEVTYPE; /*!< Offset: 0x010 (R/ ) SCS Device Type Register */ +} DIB_Type; + +/* DLAR, SCS Software Lock Access Register Definitions */ +#define DIB_DLAR_KEY_Pos 0U /*!< DIB DLAR: KEY Position */ +#define DIB_DLAR_KEY_Msk (0xFFFFFFFFUL /*<< DIB_DLAR_KEY_Pos */) /*!< DIB DLAR: KEY Mask */ + +/* DLSR, SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (0x1UL << DIB_DLSR_nTT_Pos ) /*!< DIB DLSR: Not thirty-two bit Mask */ + +#define DIB_DLSR_SLK_Pos 1U /*!< DIB DLSR: Software Lock status Position */ +#define DIB_DLSR_SLK_Msk (0x1UL << DIB_DLSR_SLK_Pos ) /*!< DIB DLSR: Software Lock status Mask */ + +#define DIB_DLSR_SLI_Pos 0U /*!< DIB DLSR: Software Lock implemented Position */ +#define DIB_DLSR_SLI_Msk (0x1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/* DAUTHSTATUS, Debug Authentication Status Register Definitions */ +#define DIB_DAUTHSTATUS_SNID_Pos 6U /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_SNID_Msk (0x3UL << DIB_DAUTHSTATUS_SNID_Pos ) /*!< DIB DAUTHSTATUS: Secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_SID_Pos 4U /*!< DIB DAUTHSTATUS: Secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_SID_Msk (0x3UL << DIB_DAUTHSTATUS_SID_Pos ) /*!< DIB DAUTHSTATUS: Secure Invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSNID_Pos 2U /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSNID_Msk (0x3UL << DIB_DAUTHSTATUS_NSNID_Pos ) /*!< DIB DAUTHSTATUS: Non-secure Non-invasive Debug Mask */ + +#define DIB_DAUTHSTATUS_NSID_Pos 0U /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Position */ +#define DIB_DAUTHSTATUS_NSID_Msk (0x3UL /*<< DIB_DAUTHSTATUS_NSID_Pos*/) /*!< DIB DAUTHSTATUS: Non-secure Invasive Debug Mask */ + +/* DDEVARCH, SCS Device Architecture Register Definitions */ +#define DIB_DDEVARCH_ARCHITECT_Pos 21U /*!< DIB DDEVARCH: Architect Position */ +#define DIB_DDEVARCH_ARCHITECT_Msk (0x7FFUL << DIB_DDEVARCH_ARCHITECT_Pos ) /*!< DIB DDEVARCH: Architect Mask */ + +#define DIB_DDEVARCH_PRESENT_Pos 20U /*!< DIB DDEVARCH: DEVARCH Present Position */ +#define DIB_DDEVARCH_PRESENT_Msk (0x1FUL << DIB_DDEVARCH_PRESENT_Pos ) /*!< DIB DDEVARCH: DEVARCH Present Mask */ + +#define DIB_DDEVARCH_REVISION_Pos 16U /*!< DIB DDEVARCH: Revision Position */ +#define DIB_DDEVARCH_REVISION_Msk (0xFUL << DIB_DDEVARCH_REVISION_Pos ) /*!< DIB DDEVARCH: Revision Mask */ + +#define DIB_DDEVARCH_ARCHVER_Pos 12U /*!< DIB DDEVARCH: Architecture Version Position */ +#define DIB_DDEVARCH_ARCHVER_Msk (0xFUL << DIB_DDEVARCH_ARCHVER_Pos ) /*!< DIB DDEVARCH: Architecture Version Mask */ + +#define DIB_DDEVARCH_ARCHPART_Pos 0U /*!< DIB DDEVARCH: Architecture Part Position */ +#define DIB_DDEVARCH_ARCHPART_Msk (0xFFFUL /*<< DIB_DDEVARCH_ARCHPART_Pos*/) /*!< DIB DDEVARCH: Architecture Part Mask */ + +/* DDEVTYPE, SCS Device Type Register Definitions */ +#define DIB_DDEVTYPE_SUB_Pos 4U /*!< DIB DDEVTYPE: Sub-type Position */ +#define DIB_DDEVTYPE_SUB_Msk (0xFUL << DIB_DDEVTYPE_SUB_Pos ) /*!< DIB DDEVTYPE: Sub-type Mask */ + +#define DIB_DDEVTYPE_MAJOR_Pos 0U /*!< DIB DDEVTYPE: Major type Position */ +#define DIB_DDEVTYPE_MAJOR_Msk (0xFUL /*<< DIB_DDEVTYPE_MAJOR_Pos*/) /*!< DIB DDEVTYPE: Major type Mask */ + + +/*@} end of group CMSIS_DIB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define DCB_BASE (0xE000EDF0UL) /*!< DCB Base Address */ + #define DIB_BASE (0xE000EFB0UL) /*!< DIB Base Address */ + #define EMSS_BASE (0xE001E000UL) /*!AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + __COMPILER_BARRIER(); + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __COMPILER_BARRIER(); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + __DSB(); +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses including + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/** + \brief Software Reset + \details Initiates a system reset request to reset the CPU. + */ +__NO_RETURN __STATIC_INLINE void __SW_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses including + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_BFHFNMINS_Msk) | /* Keep BFHFNMINS unchanged. Use this Reset function in case your case need to keep it */ + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | /* Keep priority group unchanged */ + SCB_AIRCR_SYSRESETREQ_Msk ); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + +/* ################################## Debug Control function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DCBFunctions Debug Control Functions + \brief Functions that access the Debug Control Block. + @{ + */ + + +/** + \brief Set Debug Authentication Control Register + \details writes to Debug Authentication Control register. + \param [in] value value to be writen. + */ +__STATIC_INLINE void DCB_SetAuthCtrl(uint32_t value) +{ + __DSB(); + __ISB(); + DCB->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register + \details Reads Debug Authentication Control register. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t DCB_GetAuthCtrl(void) +{ + return (DCB->DAUTHCTRL); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Debug Authentication Control Register (non-secure) + \details writes to non-secure Debug Authentication Control register when in secure state. + \param [in] value value to be writen + */ +__STATIC_INLINE void TZ_DCB_SetAuthCtrl_NS(uint32_t value) +{ + __DSB(); + __ISB(); + DCB_NS->DAUTHCTRL = value; + __DSB(); + __ISB(); +} + + +/** + \brief Get Debug Authentication Control Register (non-secure) + \details Reads non-secure Debug Authentication Control register when in secure state. + \return Debug Authentication Control Register. + */ +__STATIC_INLINE uint32_t TZ_DCB_GetAuthCtrl_NS(void) +{ + return (DCB_NS->DAUTHCTRL); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + + + +/* ################################## Debug Identification function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_DIBFunctions Debug Identification Functions + \brief Functions that access the Debug Identification Block. + @{ + */ + + +/** + \brief Get Debug Authentication Status Register + \details Reads Debug Authentication Status register. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t DIB_GetAuthStatus(void) +{ + return (DIB->DAUTHSTATUS); +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Debug Authentication Status Register (non-secure) + \details Reads non-secure Debug Authentication Status register when in secure state. + \return Debug Authentication Status Register. + */ +__STATIC_INLINE uint32_t TZ_DIB_GetAuthStatus_NS(void) +{ + return (DIB_NS->DAUTHSTATUS); +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_DCBFunctions */ + + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + +#define __SCB_DCACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#define __SCB_ICACHE_LINE_SIZE 32U /*!< STAR-MC1 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if (SCB->CCR & SCB_CCR_IC_Msk) return; /* return if ICache is already enabled */ + + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief I-Cache Invalidate by address + \details Invalidates I-Cache for the given address. + I-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + I-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] isize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateICache_by_Addr (void *addr, int32_t isize) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + if ( isize > 0 ) { + int32_t op_size = isize + (((uint32_t)addr) & (__SCB_ICACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_ICACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->ICIMVAU = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_ICACHE_LINE_SIZE; + op_size -= __SCB_ICACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_FORCEINLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + if (SCB->CCR & SCB_CCR_DC_Msk) return; /* return if DCache is already enabled */ + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_FORCEINLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address. + D-Cache is invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are invalidated. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_InvalidateDCache_by_Addr (void *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + D-Cache is cleaned starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned. + \param[in] addr address + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + D-Cache is cleaned and invalidated starting from a 32 byte aligned address in 32 byte granularity. + D-Cache memory blocks which are part of given address + given size are cleaned and invalidated. + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_FORCEINLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + if ( dsize > 0 ) { + int32_t op_size = dsize + (((uint32_t)addr) & (__SCB_DCACHE_LINE_SIZE - 1U)); + uint32_t op_addr = (uint32_t)addr /* & ~(__SCB_DCACHE_LINE_SIZE - 1U) */; + + __DSB(); + + do { + SCB->DCCIMVAC = op_addr; /* register accepts only 32byte aligned values, only bits 31..5 are valid */ + op_addr += __SCB_DCACHE_LINE_SIZE; + op_size -= __SCB_DCACHE_LINE_SIZE; + } while ( op_size > 0 ); + + __DSB(); + __ISB(); + } + #endif +} + +/*@} end of CMSIS_Core_CacheFunctions */ +#endif + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + 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 */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_STAR_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h index 791a8da..d9eedf8 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv7.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file mpu_armv7.h * @brief CMSIS MPU API for Armv7-M MPU - * @version V5.1.1 - * @date 10. February 2020 + * @version V5.1.2 + * @date 25. May 2020 ******************************************************************************/ /* * Copyright (c) 2017-2020 Arm Limited. All rights reserved. @@ -223,7 +223,7 @@ __STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) /** Configure an MPU region. * \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. +* \param rasr Value for RASR register. */ __STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) { @@ -234,7 +234,7 @@ __STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) /** Configure the given MPU region. * \param rnr Region number to be configured. * \param rbar Value for RBAR register. -* \param rsar Value for RSAR register. +* \param rasr Value for RASR register. */ __STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) { @@ -243,7 +243,7 @@ __STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t r MPU->RASR = rasr; } -/** Memcopy with strictly ordered memory access, e.g. for register targets. +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_Load(). * \param dst Destination data is copied to. * \param src Source data is copied from. * \param len Amount of data words to be copied. diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h index ef44ad0..3de16ef 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/mpu_armv8.h @@ -1,11 +1,11 @@ /****************************************************************************** * @file mpu_armv8.h * @brief CMSIS MPU API for Armv8-M and Armv8.1-M MPU - * @version V5.1.2 - * @date 10. February 2020 + * @version V5.1.3 + * @date 03. February 2021 ******************************************************************************/ /* - * Copyright (c) 2017-2020 Arm Limited. All rights reserved. + * Copyright (c) 2017-2021 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * @@ -281,7 +281,7 @@ __STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t } #endif -/** Memcopy with strictly ordered memory access, e.g. for register targets. +/** Memcpy with strictly ordered memory access, e.g. used by code in ARM_MPU_LoadEx() * \param dst Destination data is copied to. * \param src Source data is copied from. * \param len Amount of data words to be copied. diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pac_armv81.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pac_armv81.h new file mode 100644 index 0000000..854b60a --- /dev/null +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pac_armv81.h @@ -0,0 +1,206 @@ +/****************************************************************************** + * @file pac_armv81.h + * @brief CMSIS PAC key functions for Armv8.1-M PAC extension + * @version V1.0.0 + * @date 23. March 2022 + ******************************************************************************/ +/* + * Copyright (c) 2022 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 ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef PAC_ARMV81_H +#define PAC_ARMV81_H + + +/* ################### PAC Key functions ########################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_PacKeyFunctions PAC Key functions + \brief Functions that access the PAC keys. + @{ + */ + +#if (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) + +/** + \brief read the PAC key used for privileged mode + \details Reads the PAC key stored in the PAC_KEY_P registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode + \details writes the given PAC key to the PAC_KEY_P registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_P (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode + \details Reads the PAC key stored in the PAC_KEY_U registers. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __get_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode + \details writes the given PAC key to the PAC_KEY_U registers. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __set_PAC_KEY_U (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) + +/** + \brief read the PAC key used for privileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_P registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_p_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_p_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_p_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_p_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for privileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_P registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_P_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_p_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_p_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_p_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_p_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief read the PAC key used for unprivileged mode (non-secure) + \details Reads the PAC key stored in the non-secure PAC_KEY_U registers when in secure mode. + \param [out] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_get_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "mrs r1, pac_key_u_0_ns\n" + "str r1,[%0,#0]\n" + "mrs r1, pac_key_u_1_ns\n" + "str r1,[%0,#4]\n" + "mrs r1, pac_key_u_2_ns\n" + "str r1,[%0,#8]\n" + "mrs r1, pac_key_u_3_ns\n" + "str r1,[%0,#12]\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +/** + \brief write the PAC key used for unprivileged mode (non-secure) + \details writes the given PAC key to the non-secure PAC_KEY_U registers when in secure mode. + \param [in] pPacKey 128bit PAC key + */ +__STATIC_FORCEINLINE void __TZ_set_PAC_KEY_U_NS (uint32_t* pPacKey) { + __ASM volatile ( + "ldr r1,[%0,#0]\n" + "msr pac_key_u_0_ns, r1\n" + "ldr r1,[%0,#4]\n" + "msr pac_key_u_1_ns, r1\n" + "ldr r1,[%0,#8]\n" + "msr pac_key_u_2_ns, r1\n" + "ldr r1,[%0,#12]\n" + "msr pac_key_u_3_ns, r1\n" + : : "r" (pPacKey) : "memory", "r1" + ); +} + +#endif /* (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) */ + +#endif /* (defined (__ARM_FEATURE_PAUTH) && (__ARM_FEATURE_PAUTH == 1)) */ + +/*@} end of CMSIS_Core_PacKeyFunctions */ + + +#endif /* PAC_ARMV81_H */ diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h index dbd39d2..f8f3d89 100644 --- a/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Include/pmu_armv8.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file pmu_armv8.h * @brief CMSIS PMU API for Armv8.1-M PMU - * @version V1.0.0 - * @date 24. March 2020 + * @version V1.0.1 + * @date 15. April 2020 ******************************************************************************/ /* * Copyright (c) 2020 Arm Limited. All rights reserved. @@ -274,7 +274,7 @@ __STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void) */ __STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num) { - return PMU->EVCNTR[num]; + return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num]; } /** diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/main_s.c b/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/main_s.c new file mode 100644 index 0000000..273607b --- /dev/null +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/main_s.c @@ -0,0 +1,58 @@ +/****************************************************************************** + * @file main_s.c + * @brief Code template for secure main function + * @version V1.1.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2013-2018 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. + */ + +/* Use CMSE intrinsics */ +#include + +#include "RTE_Components.h" +#include CMSIS_device_header + +/* TZ_START_NS: Start address of non-secure application */ +#ifndef TZ_START_NS +#define TZ_START_NS (0x200000U) +#endif + +/* typedef for non-secure callback functions */ +typedef void (*funcptr_void) (void) __attribute__((cmse_nonsecure_call)); + +/* Secure main() */ +int main(void) { + funcptr_void NonSecure_ResetHandler; + + /* Add user setup code for secure part here*/ + + /* Set non-secure main stack (MSP_NS) */ + __TZ_set_MSP_NS(*((uint32_t *)(TZ_START_NS))); + + /* Get non-secure reset handler */ + NonSecure_ResetHandler = (funcptr_void)(*((uint32_t *)((TZ_START_NS) + 4U))); + + /* Start non-secure state software application */ + NonSecure_ResetHandler(); + + /* Non-secure software does not return, this code is not executed */ + while (1) { + __NOP(); + } +} diff --git a/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/tz_context.c b/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/tz_context.c new file mode 100644 index 0000000..e2e8294 --- /dev/null +++ b/CartReaderApp/CMSIS_5/CMSIS/Core/Template/ARMv8-M/tz_context.c @@ -0,0 +1,200 @@ +/****************************************************************************** + * @file tz_context.c + * @brief Context Management for Armv8-M TrustZone - Sample implementation + * @version V1.1.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2016-2018 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. + */ + +#include "RTE_Components.h" +#include CMSIS_device_header +#include "tz_context.h" + +/// Number of process slots (threads may call secure library code) +#ifndef TZ_PROCESS_STACK_SLOTS +#define TZ_PROCESS_STACK_SLOTS 8U +#endif + +/// Stack size of the secure library code +#ifndef TZ_PROCESS_STACK_SIZE +#define TZ_PROCESS_STACK_SIZE 256U +#endif + +typedef struct { + uint32_t sp_top; // stack space top + uint32_t sp_limit; // stack space limit + uint32_t sp; // current stack pointer +} stack_info_t; + +static stack_info_t ProcessStackInfo [TZ_PROCESS_STACK_SLOTS]; +static uint64_t ProcessStackMemory[TZ_PROCESS_STACK_SLOTS][TZ_PROCESS_STACK_SIZE/8U]; +static uint32_t ProcessStackFreeSlot = 0xFFFFFFFFU; + + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +__attribute__((cmse_nonsecure_entry)) +uint32_t TZ_InitContextSystem_S (void) { + uint32_t n; + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + for (n = 0U; n < TZ_PROCESS_STACK_SLOTS; n++) { + ProcessStackInfo[n].sp = 0U; + ProcessStackInfo[n].sp_limit = (uint32_t)&ProcessStackMemory[n]; + ProcessStackInfo[n].sp_top = (uint32_t)&ProcessStackMemory[n] + TZ_PROCESS_STACK_SIZE; + *((uint32_t *)ProcessStackMemory[n]) = n + 1U; + } + *((uint32_t *)ProcessStackMemory[--n]) = 0xFFFFFFFFU; + + ProcessStackFreeSlot = 0U; + + // Default process stack pointer and stack limit + __set_PSPLIM((uint32_t)ProcessStackMemory); + __set_PSP ((uint32_t)ProcessStackMemory); + + // Privileged Thread Mode using PSP + __set_CONTROL(0x02U); + + return 1U; // Success +} + + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +__attribute__((cmse_nonsecure_entry)) +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module) { + uint32_t slot; + + (void)module; // Ignore (fixed Stack size) + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + if (ProcessStackFreeSlot == 0xFFFFFFFFU) { + return 0U; // No slot available + } + + slot = ProcessStackFreeSlot; + ProcessStackFreeSlot = *((uint32_t *)ProcessStackMemory[slot]); + + ProcessStackInfo[slot].sp = ProcessStackInfo[slot].sp_top; + + return (slot + 1U); +} + + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +__attribute__((cmse_nonsecure_entry)) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id) { + uint32_t slot; + + if (__get_IPSR() == 0U) { + return 0U; // Thread Mode + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + ProcessStackInfo[slot].sp = 0U; + + *((uint32_t *)ProcessStackMemory[slot]) = ProcessStackFreeSlot; + ProcessStackFreeSlot = slot; + + return 1U; // Success +} + + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +__attribute__((cmse_nonsecure_entry)) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id) { + uint32_t slot; + + if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { + return 0U; // Thread Mode or using Main Stack for threads + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + + // Setup process stack pointer and stack limit + __set_PSPLIM(ProcessStackInfo[slot].sp_limit); + __set_PSP (ProcessStackInfo[slot].sp); + + return 1U; // Success +} + + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +__attribute__((cmse_nonsecure_entry)) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id) { + uint32_t slot; + uint32_t sp; + + if ((__get_IPSR() == 0U) || ((__get_CONTROL() & 2U) == 0U)) { + return 0U; // Thread Mode or using Main Stack for threads + } + + if ((id == 0U) || (id > TZ_PROCESS_STACK_SLOTS)) { + return 0U; // Invalid ID + } + + slot = id - 1U; + + if (ProcessStackInfo[slot].sp == 0U) { + return 0U; // Inactive slot + } + + sp = __get_PSP(); + if ((sp < ProcessStackInfo[slot].sp_limit) || + (sp > ProcessStackInfo[slot].sp_top)) { + return 0U; // SP out of range + } + ProcessStackInfo[slot].sp = sp; + + // Default process stack pointer and stack limit + __set_PSPLIM((uint32_t)ProcessStackMemory); + __set_PSP ((uint32_t)ProcessStackMemory); + + return 1U; // Success +} diff --git a/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emProject b/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emProject new file mode 100644 index 0000000..565b9a9 --- /dev/null +++ b/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emProject @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emSession b/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emSession new file mode 100644 index 0000000..4dcd6a1 --- /dev/null +++ b/CartReaderApp/GD32F10x/Samples/GD32F10x_Samples.emSession @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/Samples/systick.cpp b/CartReaderApp/GD32F10x/Samples/systick.cpp new file mode 100644 index 0000000..973e2de --- /dev/null +++ b/CartReaderApp/GD32F10x/Samples/systick.cpp @@ -0,0 +1,39 @@ +// +// systick.cpp : GD32F10x SysTick timer interrupt example. +// + +#include +#include +#include + +static volatile int ticks = 0; + +extern "C" void SysTick_Handler(void) { + ticks++; +} + +static void delay(int n) { + unsigned endTicks = ticks + n; + while (ticks < endTicks); +} + +int main(void) { + // Make sure SystemCoreClock is up-to-date + SystemCoreClockUpdate(); + + // Enable SysTick timer interrupt + SysTick->LOAD = (SystemCoreClock / 1000) - 1; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; + + // Display tick count + while (ticks < 100000) { + printf("ticks = %d\n", ticks); + delay(1000); + } + + // Disable SysTick interrupt + SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; + + exit(EXIT_SUCCESS); +} diff --git a/CartReaderApp/GD32F10x/Scripts/GD32F10x_Flash.icf b/CartReaderApp/GD32F10x/Scripts/GD32F10x_Flash.icf new file mode 100644 index 0000000..40a1b32 --- /dev/null +++ b/CartReaderApp/GD32F10x/Scripts/GD32F10x_Flash.icf @@ -0,0 +1,147 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** +-------------------------- END-OF-HEADER ----------------------------- + +File : GD32F10x_Flash.icf +Purpose : GD32F10x linker script for application placement in Flash, + for use with the SEGGER Linker. +Maps : GD32F101C4, GD32F101C6, GD32F101C8, GD32F101CB, GD32F101R4, + GD32F101R6, GD32F101R8, GD32F101RB, GD32F101RC, GD32F101RD, + GD32F101RE, GD32F101RF, GD32F101RG, GD32F101RI, GD32F101RK, + GD32F101T4, GD32F101T6, GD32F101T8, GD32F101TB, GD32F101V8, + GD32F101VB, GD32F101VC, GD32F101VD, GD32F101VE, GD32F101VF, + GD32F101VG, GD32F101VI, GD32F101VK, GD32F101ZC, GD32F101ZD, + GD32F101ZE, GD32F101ZF, GD32F101ZG, GD32F101ZI, GD32F101ZK, + GD32F103C4, GD32F103C6, GD32F103C8, GD32F103CB, GD32F103R4, + GD32F103R6, GD32F103R8, GD32F103RB, GD32F103RC, GD32F103RD, + GD32F103RE, GD32F103RF, GD32F103RG, GD32F103RI, GD32F103RK, + GD32F103T4, GD32F103T6, GD32F103T8, GD32F103TB, GD32F103V8, + GD32F103VB, GD32F103VC, GD32F103VD, GD32F103VE, GD32F103VF, + GD32F103VG, GD32F103VI, GD32F103VK, GD32F103ZC, GD32F103ZD, + GD32F103ZE, GD32F103ZF, GD32F103ZG, GD32F103ZI, GD32F103ZK, + GD32F105R8, GD32F105RB, GD32F105RC, GD32F105RD, GD32F105RE, + GD32F105RF, GD32F105RG, GD32F105V8, GD32F105VB, GD32F105VC, + GD32F105VD, GD32F105VE, GD32F105VF, GD32F105VG, GD32F105ZC, + GD32F105ZD, GD32F105ZE, GD32F105ZF, GD32F105ZG, GD32F107RB, + GD32F107RC, GD32F107RD, GD32F107RE, GD32F107RF, GD32F107RG, + GD32F107VB, GD32F107VC, GD32F107VD, GD32F107VE, GD32F107VF, + GD32F107VG, GD32F107ZC, GD32F107ZD, GD32F107ZE, GD32F107ZF, + GD32F107ZG +Literature: + [1] SEGGER Linker User Guide (https://www.segger.com/doc/UM20005_Linker.html) + [2] SEGGER Linker Section Placement (https://wiki.segger.com/SEGGER_Linker_Script_Files) +*/ + +define memory with size = 4G; + +// +// Combined regions per memory type +// +define region FLASH = FLASH1; +define region RAM = RAM1; + +// +// Block definitions +// +define block vectors { section .vectors }; // Vector table section +define block vectors_ram { section .vectors_ram }; // Vector table section +define block ctors { section .ctors, section .ctors.*, block with alphabetical order { init_array } }; +define block dtors { section .dtors, section .dtors.*, block with reverse alphabetical order { fini_array } }; +define block exidx { section .ARM.exidx, section .ARM.exidx.* }; +define block tbss { section .tbss, section .tbss.* }; +define block tdata { section .tdata, section .tdata.* }; +define block tls with fixed order { block tbss, block tdata }; +define block tdata_load { copy of block tdata }; +define block heap with auto size = __HEAPSIZE__, alignment = 8, readwrite access { }; +define block stack with size = __STACKSIZE__, alignment = 8, readwrite access { }; + +// +// Explicit initialization settings for sections +// Packing options for initialize by copy: packing=auto/lzss/zpak/packbits +// +do not initialize { section .non_init, section .non_init.*, section .*.non_init, section .*.non_init.* }; +do not initialize { section .no_init, section .no_init.*, section .*.no_init, section .*.no_init.* }; // Legacy sections, kept for backwards compatibility +do not initialize { section .noinit, section .noinit.*, section .*.noinit, section .*.noinit.* }; // Legacy sections, used by some SDKs/HALs +do not initialize { block vectors_ram }; +initialize by copy with packing=auto { section .data, section .data.*, section .*.data, section .*.data.* }; // Static data sections +initialize by copy with packing=auto { section .fast, section .fast.*, section .*.fast, section .*.fast.* }; // "RAM Code" sections + +#define USES_ALLOC_FUNC \ + linked symbol malloc || linked symbol aligned_alloc || \ + linked symbol calloc || linked symbol realloc + +initialize by calling __SEGGER_init_heap if USES_ALLOC_FUNC { block heap }; // Init the heap if one is required +initialize by calling __SEGGER_init_ctors { block ctors }; // Call constructors for global objects which need to be constructed before reaching main (if any). Make sure this is done after setting up heap. + +//assert with warning "free() linked into application but there are no calls to an allocation function!" { +// linked symbol free => USES_ALLOC_FUNC +//}; + +assert with error "heap is too small!" { USES_ALLOC_FUNC => size of block heap >= 48 }; +assert with error "heap size not a multiple of 8!" { USES_ALLOC_FUNC => size of block heap % 8 == 0 }; +assert with error "heap not correctly aligned!" { USES_ALLOC_FUNC => start of block heap % 8 == 0 }; + +// +// Explicit placement in FLASHn +// +place in FLASH1 { section .FLASH1, section .FLASH1.* }; +// +// FLASH Placement +// +place at start of FLASH { block vectors }; // Vector table section +place in FLASH with minimum size order { block tdata_load, // Thread-local-storage load image + block exidx, // ARM exception unwinding block + block ctors, // Constructors block + block dtors, // Destructors block + readonly, // Catch-all for readonly data (e.g. .rodata, .srodata) + readexec // Catch-all for (readonly) executable code (e.g. .text) + }; + +// +// Explicit placement in RAMn +// +place in RAM1 { section .RAM1, section .RAM1.* }; +// +// RAM Placement +// +place at start of RAM { block vectors_ram }; +place in RAM { section .fast, section .fast.* }; // "ramfunc" section +place in RAM with auto order { block tls, // Thread-local-storage block + readwrite, // Catch-all for initialized/uninitialized data sections (e.g. .data, .noinit) + zeroinit // Catch-all for zero-initialized data sections (e.g. .bss) + }; +place in RAM { block heap }; // Heap reserved block +place at end of RAM { block stack }; // Stack reserved block at the end diff --git a/CartReaderApp/GD32F10x/Scripts/GD32F10x_Target.js b/CartReaderApp/GD32F10x/Scripts/GD32F10x_Target.js index 4d94c33..a5baeee 100644 --- a/CartReaderApp/GD32F10x/Scripts/GD32F10x_Target.js +++ b/CartReaderApp/GD32F10x/Scripts/GD32F10x_Target.js @@ -3,7 +3,7 @@ * The Embedded Experts * ********************************************************************** * * -* (c) 2014 - 2020 SEGGER Microcontroller GmbH * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * * * * www.segger.com Support: support@segger.com * * * diff --git a/CartReaderApp/GD32F10x/Source/GD32F10x_Startup.s b/CartReaderApp/GD32F10x/Source/GD32F10x_Startup.s index 951c534..3e8d6eb 100644 --- a/CartReaderApp/GD32F10x/Source/GD32F10x_Startup.s +++ b/CartReaderApp/GD32F10x/Source/GD32F10x_Startup.s @@ -3,7 +3,7 @@ * The Embedded Experts * ********************************************************************** * * -* (c) 2014 - 2020 SEGGER Microcontroller GmbH * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * * * * www.segger.com Support: support@segger.com * * * @@ -49,13 +49,6 @@ Additional information: SystemInit is usually supplied by the CMSIS files. This file declares a weak implementation as fallback. - __SUPPORT_RESET_HALT_AFTER_BTL - If != 0 (default) - Support J-Link's reset strategy Reset and Halt After Bootloader. - https://wiki.segger.com/Reset_and_Halt_After_Bootloader - If == 0, - Disable support for Reset and Halt After Bootloader. - __NO_SYSTEM_CLK_UPDATE If defined, SystemCoreClockUpdate is not automatically called. @@ -91,10 +84,6 @@ Additional information: .syntax unified -#ifndef __SUPPORT_RESET_HALT_AFTER_BTL - #define __SUPPORT_RESET_HALT_AFTER_BTL 1 -#endif - /********************************************************************* * * Global functions @@ -123,17 +112,6 @@ Additional information: .balign 2 .thumb_func Reset_Handler: -#if __SUPPORT_RESET_HALT_AFTER_BTL != 0 - // - // Perform a dummy read access from address 0x00000008 followed by two nop's - // This is needed to support J-Links reset strategy: Reset and Halt After Bootloader. - // https://wiki.segger.com/Reset_and_Halt_After_Bootloader - // - movs R0, #8 - ldr R0, [R0] - nop - nop -#endif #ifndef __NO_SYSTEM_INIT // // Call SystemInit diff --git a/CartReaderApp/GD32F10x/Source/gd32f10x_cl_Vectors.s b/CartReaderApp/GD32F10x/Source/gd32f10x_cl_Vectors.s new file mode 100644 index 0000000..70bc73c --- /dev/null +++ b/CartReaderApp/GD32F10x/Source/gd32f10x_cl_Vectors.s @@ -0,0 +1,291 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** + +-------------------------- END-OF-HEADER ----------------------------- + +File : gd32f10x_cl_Vectors.s +Purpose : Exception and interrupt vectors for gd32f10x_cl devices. + +Additional information: + Preprocessor Definitions + __NO_EXTERNAL_INTERRUPTS + If defined, + the vector table will contain only the internal exceptions + and interrupts. + __VECTORS_IN_RAM + If defined, + an area of RAM, large enough to store the vector table, + will be reserved. + + __OPTIMIZATION_SMALL + If defined, + all weak definitions of interrupt handlers will share the + same implementation. + If not defined, + all weak definitions of interrupt handlers will be defined + with their own implementation. +*/ + .syntax unified + +/********************************************************************* +* +* Macros +* +********************************************************************** +*/ + +// +// Directly place a vector (word) in the vector table +// +.macro VECTOR Name= + .section .vectors, "ax" + .code 16 + .word \Name +.endm + +// +// Declare an exception handler with a weak definition +// +.macro EXC_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +.endm + +// +// Declare an interrupt handler with a weak definition +// +.macro ISR_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // +#if defined(__OPTIMIZATION_SMALL) + .section .init, "ax" + .weak \Name + .thumb_set \Name,Dummy_Handler +#else + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +#endif +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED + .section .vectors, "ax" + .word 0 +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED_DUMMY + .section .vectors, "ax" + .word Dummy_Handler +.endm + +/********************************************************************* +* +* Externals +* +********************************************************************** +*/ + .extern __stack_end__ + .extern Reset_Handler + .extern HardFault_Handler + +/********************************************************************* +* +* Global functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* Setup of the vector table and weak definition of interrupt handlers +* +*/ + .section .vectors, "ax" + .code 16 + .balign 512 + .global _vectors +_vectors: + // + // Internal exceptions and interrupts + // + VECTOR __stack_end__ + VECTOR Reset_Handler + EXC_HANDLER NMI_Handler + VECTOR HardFault_Handler + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER SVC_Handler + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER PendSV_Handler + EXC_HANDLER SysTick_Handler + // + // External interrupts + // +#ifndef __NO_EXTERNAL_INTERRUPTS + ISR_HANDLER WWDGT_IRQHandler + ISR_HANDLER LVD_IRQHandler + ISR_HANDLER TAMPER_IRQHandler + ISR_HANDLER RTC_IRQHandler + ISR_HANDLER FMC_IRQHandler + ISR_HANDLER RCU_IRQHandler + ISR_HANDLER EXTI0_IRQHandler + ISR_HANDLER EXTI1_IRQHandler + ISR_HANDLER EXTI2_IRQHandler + ISR_HANDLER EXTI3_IRQHandler + ISR_HANDLER EXTI4_IRQHandler + ISR_HANDLER DMA0_Channel0_IRQHandler + ISR_HANDLER DMA0_Channel1_IRQHandler + ISR_HANDLER DMA0_Channel2_IRQHandler + ISR_HANDLER DMA0_Channel3_IRQHandler + ISR_HANDLER DMA0_Channel4_IRQHandler + ISR_HANDLER DMA0_Channel5_IRQHandler + ISR_HANDLER DMA0_Channel6_IRQHandler + ISR_HANDLER ADC0_1_IRQHandler + ISR_HANDLER CAN0_TX_IRQHandler + ISR_HANDLER CAN0_RX0_IRQHandler + ISR_HANDLER CAN0_RX1_IRQHandler + ISR_HANDLER CAN0_EWMC_IRQHandler + ISR_HANDLER EXTI5_9_IRQHandler + ISR_HANDLER TIMER0_BRK_IRQHandler + ISR_HANDLER TIMER0_UP_IRQHandler + ISR_HANDLER TIMER0_TRG_CMT_IRQHandler + ISR_HANDLER TIMER0_Channel_IRQHandler + ISR_HANDLER TIMER1_IRQHandler + ISR_HANDLER TIMER2_IRQHandler + ISR_HANDLER TIMER3_IRQHandler + ISR_HANDLER I2C0_EV_IRQHandler + ISR_HANDLER I2C0_ER_IRQHandler + ISR_HANDLER I2C1_EV_IRQHandler + ISR_HANDLER I2C1_ER_IRQHandler + ISR_HANDLER SPI0_IRQHandler + ISR_HANDLER SPI1_IRQHandler + ISR_HANDLER USART0_IRQHandler + ISR_HANDLER USART1_IRQHandler + ISR_HANDLER USART2_IRQHandler + ISR_HANDLER EXTI10_15_IRQHandler + ISR_HANDLER RTC_Alarm_IRQHandler + ISR_HANDLER USBFS_WKUP_IRQHandler + ISR_HANDLER TIMER7_BRK_IRQHandler + ISR_HANDLER TIMER7_UP_IRQHandler + ISR_HANDLER TIMER7_TRG_CMT_IRQHandler + ISR_HANDLER TIMER7_Channel_IRQHandler + ISR_RESERVED_DUMMY + ISR_HANDLER EXMC_IRQHandler + ISR_RESERVED_DUMMY + ISR_HANDLER TIMER4_IRQHandler + ISR_HANDLER SPI2_IRQHandler + ISR_HANDLER UART3_IRQHandler + ISR_HANDLER UART4_IRQHandler + ISR_HANDLER TIMER5_IRQHandler + ISR_HANDLER TIMER6_IRQHandler + ISR_HANDLER DMA1_Channel0_IRQHandler + ISR_HANDLER DMA1_Channel1_IRQHandler + ISR_HANDLER DMA1_Channel2_IRQHandler + ISR_HANDLER DMA1_Channel3_IRQHandler + ISR_HANDLER DMA1_Channel4_IRQHandler + ISR_HANDLER ENET_IRQHandler + ISR_HANDLER ENET_WKUP_IRQHandler + ISR_HANDLER CAN1_TX_IRQHandler + ISR_HANDLER CAN1_RX0_IRQHandler + ISR_HANDLER CAN1_RX1_IRQHandler + ISR_HANDLER CAN1_EWMC_IRQHandler + ISR_HANDLER USBFS_IRQHandler +#endif + // + .section .vectors, "ax" +_vectors_end: + +#ifdef __VECTORS_IN_RAM + // + // Reserve space with the size of the vector table + // in the designated RAM section. + // + .section .vectors_ram, "ax" + .balign 512 + .global _vectors_ram + +_vectors_ram: + .space _vectors_end - _vectors, 0 +#endif + +/********************************************************************* +* +* Dummy handler to be used for reserved interrupt vectors +* and weak implementation of interrupts. +* +*/ + .section .init.Dummy_Handler, "ax" + .thumb_func + .weak Dummy_Handler + .balign 2 +Dummy_Handler: + 1: b 1b // Endless loop + + +/*************************** End of file ****************************/ diff --git a/CartReaderApp/GD32F10x/Source/gd32f10x_hd_Vectors.s b/CartReaderApp/GD32F10x/Source/gd32f10x_hd_Vectors.s index 82d9e4d..55ebc57 100644 --- a/CartReaderApp/GD32F10x/Source/gd32f10x_hd_Vectors.s +++ b/CartReaderApp/GD32F10x/Source/gd32f10x_hd_Vectors.s @@ -3,7 +3,7 @@ * The Embedded Experts * ********************************************************************** * * -* (c) 2014 - 2020 SEGGER Microcontroller GmbH * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * * * * www.segger.com Support: support@segger.com * * * diff --git a/CartReaderApp/GD32F10x/Source/gd32f10x_md_Vectors.s b/CartReaderApp/GD32F10x/Source/gd32f10x_md_Vectors.s new file mode 100644 index 0000000..c04314c --- /dev/null +++ b/CartReaderApp/GD32F10x/Source/gd32f10x_md_Vectors.s @@ -0,0 +1,272 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** + +-------------------------- END-OF-HEADER ----------------------------- + +File : gd32f10x_md_Vectors.s +Purpose : Exception and interrupt vectors for gd32f10x_md devices. + +Additional information: + Preprocessor Definitions + __NO_EXTERNAL_INTERRUPTS + If defined, + the vector table will contain only the internal exceptions + and interrupts. + __VECTORS_IN_RAM + If defined, + an area of RAM, large enough to store the vector table, + will be reserved. + + __OPTIMIZATION_SMALL + If defined, + all weak definitions of interrupt handlers will share the + same implementation. + If not defined, + all weak definitions of interrupt handlers will be defined + with their own implementation. +*/ + .syntax unified + +/********************************************************************* +* +* Macros +* +********************************************************************** +*/ + +// +// Directly place a vector (word) in the vector table +// +.macro VECTOR Name= + .section .vectors, "ax" + .code 16 + .word \Name +.endm + +// +// Declare an exception handler with a weak definition +// +.macro EXC_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +.endm + +// +// Declare an interrupt handler with a weak definition +// +.macro ISR_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // +#if defined(__OPTIMIZATION_SMALL) + .section .init, "ax" + .weak \Name + .thumb_set \Name,Dummy_Handler +#else + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +#endif +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED + .section .vectors, "ax" + .word 0 +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED_DUMMY + .section .vectors, "ax" + .word Dummy_Handler +.endm + +/********************************************************************* +* +* Externals +* +********************************************************************** +*/ + .extern __stack_end__ + .extern Reset_Handler + .extern HardFault_Handler + +/********************************************************************* +* +* Global functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* Setup of the vector table and weak definition of interrupt handlers +* +*/ + .section .vectors, "ax" + .code 16 + .balign 256 + .global _vectors +_vectors: + // + // Internal exceptions and interrupts + // + VECTOR __stack_end__ + VECTOR Reset_Handler + EXC_HANDLER NMI_Handler + VECTOR HardFault_Handler + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER SVC_Handler + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER PendSV_Handler + EXC_HANDLER SysTick_Handler + // + // External interrupts + // +#ifndef __NO_EXTERNAL_INTERRUPTS + ISR_HANDLER WWDGT_IRQHandler + ISR_HANDLER LVD_IRQHandler + ISR_HANDLER TAMPER_IRQHandler + ISR_HANDLER RTC_IRQHandler + ISR_HANDLER FMC_IRQHandler + ISR_HANDLER RCU_IRQHandler + ISR_HANDLER EXTI0_IRQHandler + ISR_HANDLER EXTI1_IRQHandler + ISR_HANDLER EXTI2_IRQHandler + ISR_HANDLER EXTI3_IRQHandler + ISR_HANDLER EXTI4_IRQHandler + ISR_HANDLER DMA0_Channel0_IRQHandler + ISR_HANDLER DMA0_Channel1_IRQHandler + ISR_HANDLER DMA0_Channel2_IRQHandler + ISR_HANDLER DMA0_Channel3_IRQHandler + ISR_HANDLER DMA0_Channel4_IRQHandler + ISR_HANDLER DMA0_Channel5_IRQHandler + ISR_HANDLER DMA0_Channel6_IRQHandler + ISR_HANDLER ADC0_1_IRQHandler + ISR_HANDLER USBD_HP_CAN0_TX_IRQHandler + ISR_HANDLER USBD_LP_CAN0_RX0_IRQHandler + ISR_HANDLER CAN0_RX1_IRQHandler + ISR_HANDLER CAN0_EWMC_IRQHandler + ISR_HANDLER EXTI5_9_IRQHandler + ISR_HANDLER TIMER0_BRK_IRQHandler + ISR_HANDLER TIMER0_UP_IRQHandler + ISR_HANDLER TIMER0_TRG_CMT_IRQHandler + ISR_HANDLER TIMER0_Channel_IRQHandler + ISR_HANDLER TIMER1_IRQHandler + ISR_HANDLER TIMER2_IRQHandler + ISR_HANDLER TIMER3_IRQHandler + ISR_HANDLER I2C0_EV_IRQHandler + ISR_HANDLER I2C0_ER_IRQHandler + ISR_HANDLER I2C1_EV_IRQHandler + ISR_HANDLER I2C1_ER_IRQHandler + ISR_HANDLER SPI0_IRQHandler + ISR_HANDLER SPI1_IRQHandler + ISR_HANDLER USART0_IRQHandler + ISR_HANDLER USART1_IRQHandler + ISR_HANDLER USART2_IRQHandler + ISR_HANDLER EXTI10_15_IRQHandler + ISR_HANDLER RTC_Alarm_IRQHandler + ISR_HANDLER USBD_WKUP_IRQHandler + ISR_RESERVED_DUMMY + ISR_RESERVED_DUMMY + ISR_RESERVED_DUMMY + ISR_RESERVED_DUMMY + ISR_RESERVED_DUMMY + ISR_HANDLER EXMC_IRQHandler +#endif + // + .section .vectors, "ax" +_vectors_end: + +#ifdef __VECTORS_IN_RAM + // + // Reserve space with the size of the vector table + // in the designated RAM section. + // + .section .vectors_ram, "ax" + .balign 256 + .global _vectors_ram + +_vectors_ram: + .space _vectors_end - _vectors, 0 +#endif + +/********************************************************************* +* +* Dummy handler to be used for reserved interrupt vectors +* and weak implementation of interrupts. +* +*/ + .section .init.Dummy_Handler, "ax" + .thumb_func + .weak Dummy_Handler + .balign 2 +Dummy_Handler: + 1: b 1b // Endless loop + + +/*************************** End of file ****************************/ diff --git a/CartReaderApp/GD32F10x/Source/gd32f10x_xd_Vectors.s b/CartReaderApp/GD32F10x/Source/gd32f10x_xd_Vectors.s new file mode 100644 index 0000000..e9e5eb2 --- /dev/null +++ b/CartReaderApp/GD32F10x/Source/gd32f10x_xd_Vectors.s @@ -0,0 +1,283 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +********************************************************************** + +-------------------------- END-OF-HEADER ----------------------------- + +File : gd32f10x_xd_Vectors.s +Purpose : Exception and interrupt vectors for gd32f10x_xd devices. + +Additional information: + Preprocessor Definitions + __NO_EXTERNAL_INTERRUPTS + If defined, + the vector table will contain only the internal exceptions + and interrupts. + __VECTORS_IN_RAM + If defined, + an area of RAM, large enough to store the vector table, + will be reserved. + + __OPTIMIZATION_SMALL + If defined, + all weak definitions of interrupt handlers will share the + same implementation. + If not defined, + all weak definitions of interrupt handlers will be defined + with their own implementation. +*/ + .syntax unified + +/********************************************************************* +* +* Macros +* +********************************************************************** +*/ + +// +// Directly place a vector (word) in the vector table +// +.macro VECTOR Name= + .section .vectors, "ax" + .code 16 + .word \Name +.endm + +// +// Declare an exception handler with a weak definition +// +.macro EXC_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +.endm + +// +// Declare an interrupt handler with a weak definition +// +.macro ISR_HANDLER Name= + // + // Insert vector in vector table + // + .section .vectors, "ax" + .word \Name + // + // Insert dummy handler in init section + // +#if defined(__OPTIMIZATION_SMALL) + .section .init, "ax" + .weak \Name + .thumb_set \Name,Dummy_Handler +#else + .section .init.\Name, "ax" + .thumb_func + .weak \Name + .balign 2 +\Name: + 1: b 1b // Endless loop +#endif +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED + .section .vectors, "ax" + .word 0 +.endm + +// +// Place a reserved vector in vector table +// +.macro ISR_RESERVED_DUMMY + .section .vectors, "ax" + .word Dummy_Handler +.endm + +/********************************************************************* +* +* Externals +* +********************************************************************** +*/ + .extern __stack_end__ + .extern Reset_Handler + .extern HardFault_Handler + +/********************************************************************* +* +* Global functions +* +********************************************************************** +*/ + +/********************************************************************* +* +* Setup of the vector table and weak definition of interrupt handlers +* +*/ + .section .vectors, "ax" + .code 16 + .balign 256 + .global _vectors +_vectors: + // + // Internal exceptions and interrupts + // + VECTOR __stack_end__ + VECTOR Reset_Handler + EXC_HANDLER NMI_Handler + VECTOR HardFault_Handler + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER SVC_Handler + ISR_RESERVED + ISR_RESERVED + EXC_HANDLER PendSV_Handler + EXC_HANDLER SysTick_Handler + // + // External interrupts + // +#ifndef __NO_EXTERNAL_INTERRUPTS + ISR_HANDLER WWDGT_IRQHandler + ISR_HANDLER LVD_IRQHandler + ISR_HANDLER TAMPER_IRQHandler + ISR_HANDLER RTC_IRQHandler + ISR_HANDLER FMC_IRQHandler + ISR_HANDLER RCU_IRQHandler + ISR_HANDLER EXTI0_IRQHandler + ISR_HANDLER EXTI1_IRQHandler + ISR_HANDLER EXTI2_IRQHandler + ISR_HANDLER EXTI3_IRQHandler + ISR_HANDLER EXTI4_IRQHandler + ISR_HANDLER DMA0_Channel0_IRQHandler + ISR_HANDLER DMA0_Channel1_IRQHandler + ISR_HANDLER DMA0_Channel2_IRQHandler + ISR_HANDLER DMA0_Channel3_IRQHandler + ISR_HANDLER DMA0_Channel4_IRQHandler + ISR_HANDLER DMA0_Channel5_IRQHandler + ISR_HANDLER DMA0_Channel6_IRQHandler + ISR_HANDLER ADC0_1_IRQHandler + ISR_HANDLER USBD_HP_CAN0_TX_IRQHandler + ISR_HANDLER USBD_LP_CAN0_RX0_IRQHandler + ISR_HANDLER CAN0_RX1_IRQHandler + ISR_HANDLER CAN0_EWMC_IRQHandler + ISR_HANDLER EXTI5_9_IRQHandler + ISR_HANDLER TIMER0_BRK_TIMER8_IRQHandler + ISR_HANDLER TIMER0_UP_TIMER9_IRQHandler + ISR_HANDLER TIMER0_TRG_CMT_TIMER10_IRQHandler + ISR_HANDLER TIMER0_Channel_IRQHandler + ISR_HANDLER TIMER1_IRQHandler + ISR_HANDLER TIMER2_IRQHandler + ISR_HANDLER TIMER3_IRQHandler + ISR_HANDLER I2C0_EV_IRQHandler + ISR_HANDLER I2C0_ER_IRQHandler + ISR_HANDLER I2C1_EV_IRQHandler + ISR_HANDLER I2C1_ER_IRQHandler + ISR_HANDLER SPI0_IRQHandler + ISR_HANDLER SPI1_IRQHandler + ISR_HANDLER USART0_IRQHandler + ISR_HANDLER USART1_IRQHandler + ISR_HANDLER USART2_IRQHandler + ISR_HANDLER EXTI10_15_IRQHandler + ISR_HANDLER RTC_Alarm_IRQHandler + ISR_HANDLER USBD_WKUP_IRQHandler + ISR_HANDLER TIMER7_BRK_TIMER11_IRQHandler + ISR_HANDLER TIMER7_UP_TIMER12_IRQHandler + ISR_HANDLER TIMER7_TRG_CMT_TIMER13_IRQHandler + ISR_HANDLER TIMER7_Channel_IRQHandler + ISR_HANDLER ADC2_IRQHandler + ISR_HANDLER EXMC_IRQHandler + ISR_HANDLER SDIO_IRQHandler + ISR_HANDLER TIMER4_IRQHandler + ISR_HANDLER SPI2_IRQHandler + ISR_HANDLER UART3_IRQHandler + ISR_HANDLER UART4_IRQHandler + ISR_HANDLER TIMER5_IRQHandler + ISR_HANDLER TIMER6_IRQHandler + ISR_HANDLER DMA1_Channel0_IRQHandler + ISR_HANDLER DMA1_Channel1_IRQHandler + ISR_HANDLER DMA1_Channel2_IRQHandler + ISR_HANDLER DMA1_Channel3_4_IRQHandler +#endif + // + .section .vectors, "ax" +_vectors_end: + +#ifdef __VECTORS_IN_RAM + // + // Reserve space with the size of the vector table + // in the designated RAM section. + // + .section .vectors_ram, "ax" + .balign 256 + .global _vectors_ram + +_vectors_ram: + .space _vectors_end - _vectors, 0 +#endif + +/********************************************************************* +* +* Dummy handler to be used for reserved interrupt vectors +* and weak implementation of interrupts. +* +*/ + .section .init.Dummy_Handler, "ax" + .thumb_func + .weak Dummy_Handler + .balign 2 +Dummy_Handler: + 1: b 1b // Endless loop + + +/*************************** End of file ****************************/ diff --git a/CartReaderApp/GD32F10x/Source/main.cpp b/CartReaderApp/GD32F10x/Source/main.cpp new file mode 100644 index 0000000..fb6bf83 --- /dev/null +++ b/CartReaderApp/GD32F10x/Source/main.cpp @@ -0,0 +1,48 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +*********************************************************************/ + +#include +/********************************************************************* +* +* main +* +* Function description +* Defines entry point for an GD32F10x C/C++ application. +* +*/ +int main(void) { + return 0; +} diff --git a/CartReaderApp/GD32F10x/Source/start.s b/CartReaderApp/GD32F10x/Source/start.s new file mode 100644 index 0000000..1c9c17e --- /dev/null +++ b/CartReaderApp/GD32F10x/Source/start.s @@ -0,0 +1,60 @@ +/********************************************************************* +* SEGGER Microcontroller GmbH * +* The Embedded Experts * +********************************************************************** +* * +* (c) 2014 - 2022 SEGGER Microcontroller GmbH * +* * +* www.segger.com Support: support@segger.com * +* * +********************************************************************** +* * +* All rights reserved. * +* * +* Redistribution and use in source and binary forms, with or * +* without modification, are permitted provided that the following * +* condition is met: * +* * +* - Redistributions of source code must retain the above copyright * +* notice, this condition and the following disclaimer. * +* * +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * +* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, * +* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * +* DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR * +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * +* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * +* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * +* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * +* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * +* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * +* DAMAGE. * +* * +*********************************************************************/ + +/********************************************************************* +* +* _start +* +* Function description +* Defines entry point for an GD32F10x assembly code only +* application. +* +* Additional information +* Please note, as this is an assembly code only project, the C/C++ +* runtime library has not been initialised. So do not attempt to call +* any C/C++ library functions because they probably won't work. +*/ + + .syntax unified + .global _start + .text + + .thumb_func +_start: + ldr r0, =#0x12345678 +loop: + adds r0, r0, #1 + b loop diff --git a/CartReaderApp/GD32F10x/XML/GD32F101C4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101C4_MemoryMap.xml new file mode 100644 index 0000000..90e793e --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101C4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101C6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101C6_MemoryMap.xml new file mode 100644 index 0000000..7a83601 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101C6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101C8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101C8_MemoryMap.xml new file mode 100644 index 0000000..b1c1f66 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101C8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101CB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101CB_MemoryMap.xml new file mode 100644 index 0000000..27102ef --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101CB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101R4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101R4_MemoryMap.xml new file mode 100644 index 0000000..6014e06 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101R4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101R6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101R6_MemoryMap.xml new file mode 100644 index 0000000..36c3da3 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101R6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101R8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101R8_MemoryMap.xml new file mode 100644 index 0000000..8a9dac7 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101R8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RB_MemoryMap.xml new file mode 100644 index 0000000..f99c664 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RC_MemoryMap.xml new file mode 100644 index 0000000..02db2a0 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RD_MemoryMap.xml new file mode 100644 index 0000000..d994651 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RE_MemoryMap.xml new file mode 100644 index 0000000..003ca44 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RF_MemoryMap.xml new file mode 100644 index 0000000..66e18e2 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RG_MemoryMap.xml new file mode 100644 index 0000000..e36f139 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RI_MemoryMap.xml new file mode 100644 index 0000000..dbfcb39 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101RK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101RK_MemoryMap.xml new file mode 100644 index 0000000..575425e --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101RK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101T4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101T4_MemoryMap.xml new file mode 100644 index 0000000..2172d6f --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101T4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101T6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101T6_MemoryMap.xml new file mode 100644 index 0000000..8a25dd1 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101T6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101T8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101T8_MemoryMap.xml new file mode 100644 index 0000000..b1f37c1 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101T8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101TB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101TB_MemoryMap.xml new file mode 100644 index 0000000..3db4f0c --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101TB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101V8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101V8_MemoryMap.xml new file mode 100644 index 0000000..e67c13c --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101V8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VB_MemoryMap.xml new file mode 100644 index 0000000..8ed98fb --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VC_MemoryMap.xml new file mode 100644 index 0000000..ca256ff --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VD_MemoryMap.xml new file mode 100644 index 0000000..db41af1 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VE_MemoryMap.xml new file mode 100644 index 0000000..0ac5729 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VF_MemoryMap.xml new file mode 100644 index 0000000..a8ba640 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VG_MemoryMap.xml new file mode 100644 index 0000000..f65a931 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VI_MemoryMap.xml new file mode 100644 index 0000000..84acb8b --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101VK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101VK_MemoryMap.xml new file mode 100644 index 0000000..a6cd356 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101VK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZC_MemoryMap.xml new file mode 100644 index 0000000..f4c51e7 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZD_MemoryMap.xml new file mode 100644 index 0000000..20f6b7d --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZE_MemoryMap.xml new file mode 100644 index 0000000..8bdd2ca --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZF_MemoryMap.xml new file mode 100644 index 0000000..d3be982 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZG_MemoryMap.xml new file mode 100644 index 0000000..fd9d917 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZI_MemoryMap.xml new file mode 100644 index 0000000..ed819a9 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F101ZK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F101ZK_MemoryMap.xml new file mode 100644 index 0000000..95f3c34 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F101ZK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103C4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103C4_MemoryMap.xml new file mode 100644 index 0000000..fda75c7 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103C4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103C6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103C6_MemoryMap.xml new file mode 100644 index 0000000..ab6d3f1 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103C6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103C8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103C8_MemoryMap.xml new file mode 100644 index 0000000..3494e9d --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103C8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103CB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103CB_MemoryMap.xml new file mode 100644 index 0000000..249a1c3 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103CB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103R4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103R4_MemoryMap.xml new file mode 100644 index 0000000..c71e856 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103R4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103R6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103R6_MemoryMap.xml new file mode 100644 index 0000000..c923066 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103R6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103R8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103R8_MemoryMap.xml new file mode 100644 index 0000000..2b588bb --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103R8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RB_MemoryMap.xml new file mode 100644 index 0000000..3a8de29 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RC_MemoryMap.xml new file mode 100644 index 0000000..e37ba96 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RD_MemoryMap.xml new file mode 100644 index 0000000..bdd3bae --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RE_MemoryMap.xml new file mode 100644 index 0000000..c01565c --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RF_MemoryMap.xml new file mode 100644 index 0000000..73f64e6 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RG_MemoryMap.xml new file mode 100644 index 0000000..4e3bb3f --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RI_MemoryMap.xml new file mode 100644 index 0000000..cce610e --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103RK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103RK_MemoryMap.xml new file mode 100644 index 0000000..53d780a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103RK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103T4_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103T4_MemoryMap.xml new file mode 100644 index 0000000..76f1a44 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103T4_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103T6_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103T6_MemoryMap.xml new file mode 100644 index 0000000..9622160 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103T6_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103T8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103T8_MemoryMap.xml new file mode 100644 index 0000000..03d87ef --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103T8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103TB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103TB_MemoryMap.xml new file mode 100644 index 0000000..d8ebadb --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103TB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103V8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103V8_MemoryMap.xml new file mode 100644 index 0000000..6b1539e --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103V8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VB_MemoryMap.xml new file mode 100644 index 0000000..1d99845 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VC_MemoryMap.xml new file mode 100644 index 0000000..ed92cce --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VD_MemoryMap.xml new file mode 100644 index 0000000..a48321c --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VE_MemoryMap.xml new file mode 100644 index 0000000..49768c9 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VF_MemoryMap.xml new file mode 100644 index 0000000..168f93d --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VG_MemoryMap.xml new file mode 100644 index 0000000..53f9274 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VI_MemoryMap.xml new file mode 100644 index 0000000..3d93a27 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103VK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103VK_MemoryMap.xml new file mode 100644 index 0000000..411f4ca --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103VK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZC_MemoryMap.xml new file mode 100644 index 0000000..a2d924d --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZD_MemoryMap.xml new file mode 100644 index 0000000..bf519fe --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZE_MemoryMap.xml new file mode 100644 index 0000000..9617945 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZF_MemoryMap.xml new file mode 100644 index 0000000..91a0fc6 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZG_MemoryMap.xml new file mode 100644 index 0000000..0c03e96 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZI_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZI_MemoryMap.xml new file mode 100644 index 0000000..2aed53a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZI_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F103ZK_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F103ZK_MemoryMap.xml new file mode 100644 index 0000000..48ca566 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F103ZK_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105R8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105R8_MemoryMap.xml new file mode 100644 index 0000000..6bdeafb --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105R8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RB_MemoryMap.xml new file mode 100644 index 0000000..6ee9205 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RC_MemoryMap.xml new file mode 100644 index 0000000..0c721c7 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RD_MemoryMap.xml new file mode 100644 index 0000000..0804b45 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RE_MemoryMap.xml new file mode 100644 index 0000000..7af665e --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RF_MemoryMap.xml new file mode 100644 index 0000000..6ff1792 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105RG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105RG_MemoryMap.xml new file mode 100644 index 0000000..e4a5373 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105RG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105V8_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105V8_MemoryMap.xml new file mode 100644 index 0000000..26dc163 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105V8_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VB_MemoryMap.xml new file mode 100644 index 0000000..e9757b4 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VC_MemoryMap.xml new file mode 100644 index 0000000..6cffdc7 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VD_MemoryMap.xml new file mode 100644 index 0000000..39a70b1 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VE_MemoryMap.xml new file mode 100644 index 0000000..678375b --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VF_MemoryMap.xml new file mode 100644 index 0000000..73477c5 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105VG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105VG_MemoryMap.xml new file mode 100644 index 0000000..40aba58 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105VG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105ZC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105ZC_MemoryMap.xml new file mode 100644 index 0000000..efd7607 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105ZC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105ZD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105ZD_MemoryMap.xml new file mode 100644 index 0000000..f93517f --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105ZD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105ZE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105ZE_MemoryMap.xml new file mode 100644 index 0000000..50fd741 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105ZE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105ZF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105ZF_MemoryMap.xml new file mode 100644 index 0000000..40cf84b --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105ZF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F105ZG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F105ZG_MemoryMap.xml new file mode 100644 index 0000000..2dab977 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F105ZG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RB_MemoryMap.xml new file mode 100644 index 0000000..5639681 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RC_MemoryMap.xml new file mode 100644 index 0000000..b1b9391 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RD_MemoryMap.xml new file mode 100644 index 0000000..f57ad5a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RE_MemoryMap.xml new file mode 100644 index 0000000..217477f --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RF_MemoryMap.xml new file mode 100644 index 0000000..80c7f83 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107RG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107RG_MemoryMap.xml new file mode 100644 index 0000000..c59e446 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107RG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VB_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VB_MemoryMap.xml new file mode 100644 index 0000000..a3bfaba --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VB_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VC_MemoryMap.xml new file mode 100644 index 0000000..c81075f --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VD_MemoryMap.xml new file mode 100644 index 0000000..5a2b968 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VE_MemoryMap.xml new file mode 100644 index 0000000..853b170 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VF_MemoryMap.xml new file mode 100644 index 0000000..b8dc1d2 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107VG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107VG_MemoryMap.xml new file mode 100644 index 0000000..dfeb486 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107VG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107ZC_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107ZC_MemoryMap.xml new file mode 100644 index 0000000..162c55c --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107ZC_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107ZD_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107ZD_MemoryMap.xml new file mode 100644 index 0000000..a7c702a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107ZD_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107ZE_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107ZE_MemoryMap.xml new file mode 100644 index 0000000..abc0d35 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107ZE_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107ZF_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107ZF_MemoryMap.xml new file mode 100644 index 0000000..aa028b4 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107ZF_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F107ZG_MemoryMap.xml b/CartReaderApp/GD32F10x/XML/GD32F107ZG_MemoryMap.xml new file mode 100644 index 0000000..850718a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F107ZG_MemoryMap.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F10x_CL_Registers.xml b/CartReaderApp/GD32F10x/XML/GD32F10x_CL_Registers.xml new file mode 100644 index 0000000..3cb5e95 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F10x_CL_Registers.xml @@ -0,0 +1,10221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F10x_HD_Registers.xml b/CartReaderApp/GD32F10x/XML/GD32F10x_HD_Registers.xml new file mode 100644 index 0000000..8e9605a --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F10x_HD_Registers.xml @@ -0,0 +1,7280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F10x_MD_Registers.xml b/CartReaderApp/GD32F10x/XML/GD32F10x_MD_Registers.xml new file mode 100644 index 0000000..ad1ba08 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F10x_MD_Registers.xml @@ -0,0 +1,6300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/XML/GD32F10x_XD_Registers.xml b/CartReaderApp/GD32F10x/XML/GD32F10x_XD_Registers.xml new file mode 100644 index 0000000..7d7bb84 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/GD32F10x_XD_Registers.xml @@ -0,0 +1,7652 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/XML/project_templates.xml b/CartReaderApp/GD32F10x/XML/project_templates.xml new file mode 100644 index 0000000..8bb7a31 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/project_templates.xml @@ -0,0 +1,166 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GD32F10x/XML/property_groups.xml b/CartReaderApp/GD32F10x/XML/property_groups.xml new file mode 100644 index 0000000..85af7a3 --- /dev/null +++ b/CartReaderApp/GD32F10x/XML/property_groups.xml @@ -0,0 +1,2019 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CartReaderApp/GDCartReader.emProject b/CartReaderApp/GDCartReader.emProject index bd16d7f..55fc011 100644 --- a/CartReaderApp/GDCartReader.emProject +++ b/CartReaderApp/GDCartReader.emProject @@ -28,7 +28,7 @@ gcc_entry_point="Reset_Handler" link_linker_script_file="$(ProjectDir)/GD32F10x_Flash.icf" linker_memory_map_file="$(ProjectDir)/GD32F103VC_MemoryMap.xml" - linker_output_format="hex" + linker_output_format="bin" linker_printf_fp_enabled="Float" macros="DeviceHeaderFile=$(PackagesDir)/GD32F10x/Device/Include/gd32f10x.h;DeviceLibraryIdentifier=M3l;DeviceSystemFile=$(PackagesDir)/GD32F10x/Device/Source/system_gd32f10x.c;DeviceVectorsFile=$(PackagesDir)/GD32F10x/Source/gd32f10x_hd_Vectors.s;DeviceFamily=GD32F10x;DeviceSubFamily=GD32F103;Target=GD32F103VC" project_directory="" diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Common-3bab6b7c.o.tmp b/CartReaderApp/Output/Debug/Obj/GDCartReader/Common-3bab6b7c.o.tmp new file mode 100644 index 0000000..e69de29 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Common-fe735770.o.tmp b/CartReaderApp/Output/Debug/Obj/GDCartReader/Common-fe735770.o.tmp new file mode 100644 index 0000000..e69de29 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Common.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/Common.d new file mode 100644 index 0000000..d89de21 --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/Common.d @@ -0,0 +1,45 @@ +Output/Debug/Obj/GDCartReader/Common.o: \ + D:\OneDrive\Dokumenter\CartReaderApp\Common.c \ + D:\OneDrive\Dokumenter\CartReaderApp\Common.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\core_cm3.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdint.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\__config \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdint.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_ConfDefaults.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Conf.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Arm_Conf.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_version.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_compiler.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_gcc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\system_gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_libopt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\RTE_Components.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_adc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_can.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_crc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dac.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dbg.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dma.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_exti.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fmc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fwdgt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_gpio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_i2c.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_misc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_pmu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rcu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rtc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_spi.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_timer.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_usart.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_wwdgt.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdio.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdio.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdlib.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdlib.h \ + D:\OneDrive\Dokumenter\CartReaderApp\Display.h \ + D:\OneDrive\Dokumenter\CartReaderApp\Operate.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ff.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ffconf.h diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Common.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/Common.o new file mode 100644 index 0000000000000000000000000000000000000000..146dae709299e6ad7c6fce692416951afccd0b79 GIT binary patch literal 148664 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

>XN#wwWiwc#K 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�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≥}Kcg@}bd_-6Ml~8ccIJyymF2Rp5u>BqFt(Xbvxv^5se7J456*NqIda3Adp) zM91ZZ4&f@{I?^FJwy=)ep7I1!NA^JgI-c=?fYU>XtmrmIjL0^{!+^a;DWd zcQL97E}g3k9g~z0+LT}&R~tGe&z?9&O~HD$dh|?EQfRk=^<2w(Fd?ev2eE5UM{?w8 z5XyK8uNKNKLR%Zxxe~QpiTSjTalIQ_$w@V|YjJ}cjOXN;Oj{H;>d?Uf4(&qdO*%AH z;=@6_`F67#T&szbbmE|dYu_LanXwW+hIFe-&*Y93!L)~Q8wc}&qWmBqdE;b$N(WOq z1wg61T?1I*$>&%TCG-vr3=YU}O6jL{I5bIs5__ixYC=C9-1v+Rt%y)Mnt?+S$aS_7 z4|CNjOGN@`=V_;gDoc%1a`$jJuanh_wOl((kifk*(2ryYkdk+w2__2ypyb_e0=29F zD18r@K(!_SDv1Y8pq7iX0hGjtY=8_9Af@zkCYUS;AWn8aY$CO+M9AnzOr%b_(k?h#IPuJXSP z5HDVkIZh^G%O8a40BSuIMy~rjV~C|rma`3H!tdN*vRasi;1}HBR7r(XcE9L` zBUBzY?QEmCUviOJ78jF~CLHta7N=WZc0s%&QGuw4?CGyCn4%}d1~O%FmYckf^6pg^ zt8y{0N^(?1(?gupC&{jUw7? z1G<>DSb(pnuCQQ#ab0QP0Y!F|1?TcsQm?i^Z{ck>(7*z`CV*fU;_WXMfZ-|Fn*%7G!uimlGQ@*RA~=vHd&b%0R>i^12{^S5J&&*+m{iA`L+DB%GR8ftECLRuDKu~7 ze_q8Z)4^G*6VfgdghM%DDZ=A8lq4exk*4+r>5Y@2UrhclmoDI*KzY-P0(l8RQ;eIu$hK(Vrc+ur+ zf`t)ZFiWf*e?5whK9s`I{klo_-L5Z-=OCyP4?n5J2eqDO>1x~~iCzZXe7J0!pP+bA z2q!$kVk8hQEKYg-o`f+*@Cx&DR}F+a$s=ARVLDask?uf0-ROWB#v73SQxmVC)cNfz zeK_v#(IR^9a2rJG-!Qe{5eknIJj2x0AP3oyzcz7O%8jN+oLkRu6M88f|7fDY5%riJ zVIJj#3-e<*Z?Z7;rygN34hok}aP2;)xmI*LMUMs=WrWLf%Fj2%z0SwukZ^fU`bCDk z*Z;&2DO`alzDo@a9i9Y;QB=5w1Uup7QUiC#9u2#Z1zQa9E|2)`WWmP``EHN=?q$K% zhK3%GhTY48?ag#!j~eY+p6FiXW3?e$du2s7V6Y#2ETiLMp??IS-Ute*_G#YfZdZfjQ?7*&u}r& zpf!l_){+~`uQ$`G9wi#*qFpt-sqqaB#WlpO!#6dQ&=8+_eq2Kx8e;$bmWDbt#3Q(G zYp6>@T#291P`8FS*2FpVW0TWBA?MjsOcq13dc1awt&c5x z+N31B6gKM_lhWa(uvO2Rluj>&ZFx>nQq_2fEx#}+!M6O;qy*dYE0Ypz%dbsJm)BhO zso$8CZZCy>>$fJQ$4g-!d)}nPCK)?cgvVEA8 zYBre4d3b@K(qVTyPEOZ_E*g}mOBkiGEA6`QWH8VsHvcjv)9^Hm*n<}sVeGVti8K-p zAo7)wxHXc9o0&+R0M6FuYk53;eypcI;Jn|Wd7|U66Uy0th34=pF>DIw)Rj!hDXQ*$=4Dyba_ z@#q(x#HWilDGP595;Z(^UrYLF^vpidZd9~NwpgmEJT~-!$Juxb6X|)!(txtips8p- z$uxSb1$$`xD2TD6hOKoMrj0c5tcW1UjWygMU{J7oNHs$-XnPHdrUn77Z4zjc4cqPp zp&xr>CWH6dumf*Uuy1HGXvYm}t_A_yhbDpc-LNU|5_r=}6U6QtCJHWrx34ro?7?A| z-X)~)P`{f@+K0mp1};d$LIb9+M7Y}|*f_!WxbR?dadx0=FtGQA9e)?6-8cgkn{&7< zZU48pm!&PO(}jxavNU{-sS6fy@f&?)9}^3;gqqLq0ObWGc^jGwbHz)LFjmaHAa~c@ zO0!T;6%(67yf3$aAhAv*luM9yj*gHzal?(+1H)cobJGEDHBv*DbE?$fbBw;z9gw*B z4IkTMbU*!j@hQ%4Lcwu0(@1$Y{_p48E;*SK}UeA;~IU}!I1Bf}X7ZjJQr2z7ABivvmcH(KfIPHd}=oG>{sU2v(ygmOdB4ZB;5BzO4(_ zAGy|w{d%mi;p#Itn9P*``R`&EfW0!DHc|^Z90tp+wD^KHEIHyC6c-#UN+^*K8{8OB zsMMqe6^4amimT*eY_*6jL9tZ`fnU>qc@~H=xoQRrIz_((!P3!DS*ck2#9pGjtZEqt zva8s5r`XRuPRPSmY*=i`Qke8}@zJAwIpeN&_>GKRY9AKzQoDwQ_SHb8n|mYYk{z*e zEl%r*l!TmJ`VU&DmgZ$pCo%z;s*$vvPucMS87i04 z078O6`fC-+hiR)agUx#Hlju|n!dEPKf&2_8#zhSB&AeUioeWYRxynZ@ioRS%Qpmh> zA{M9HtA^_7xi&{%{~-0yHtKmcM_(->Idt&ne4C?h`;Z)}_!n3lzTjg4-R~hORBbP` zDAiJ~HkhpNtu~TG9&rg>%u>$`dhYZ7)3g+> zSXe6xBqr#9twl@(6Fcb4twrnzCU(+AW)`tCnAk-(m|4WGU?N^~ajQ-24kq^Cy&N{N zCz#la7j)Ug-eBSaIt*;txFDDq$F$>9HZ$HHLdE3ab`LeAbmAzUJ3+-+48DHNU6fW^ z*p0Sxc`NZV9Fe%YEuKi#EASRq8`ap)dI$xRK;E{~AoO|^P?f!#an;P!aj#AxUmL*0 z9ZntSnD>MUpdIiFAP4RZ6F|lF3&2tD3loT=sqjm{WA6`>=m<;&T=#)6iSEE;z=t0U zlZYn*69R93C`=^L6_^tE_2!$7I4&L|Ws8)mH3O=lH`EA&lFOuj@>)q$DzQ1`q@$#GhGj2NkN?z7NN z1EoC5TWFVoQZBvULc2A}H~yYVC{D59R2f!x;0xJonLUq&W~%sUv~AHcVA)jHRh-BM zo68HosbyNJ^c*L`qjcdeOelGc&7edCl00)wPY2m zu4u<8l^W(@=125*51ns`GwI|iXNA%`z1rbB%}uelnN=RI5^<}1F^R=&^>PttelI>_ z0b7NLIxnx7Nl+-(4s)$5PZ`p8%!n_#ap;h=bSRCRi7uky3PR*YC{e6iDPn&ul*kJ# zJ(7s4$}^QPs#xmjl~i1I-hj$>9xkZy26l=E5Z|YW;dY9Jo+Bi&p`BvQ=SWFyXs1~J zIa*K?4eS)lJqr~v+)i<;eo_(}+9|HqPf2P+JH_St8A0u6V5fNKJgbP|c8WXmbCTH5 zPVtoQB1vs%r?_JyFQ}aj?CfIye7_=w+u6nbxmXe#+9|H$C`f8UJH_+v{es%nz|L-t zzNCoZc8VK2%97a7PVrd$F_PNQ&K}ODs-Si^uv1*^QB%ZlJH^xU1CrR#&R&juiKI5P zvzN2!SfWxZS6?KbB&2cu2i(wH4ZC>mYUpupc%K_iE%fnjI5rrJM-@+y;c3z?9;qbt zLvApu7XS?zmb(D!7XU@D!UZ@20nk8U6#?nKrO0ReF&<_)(EunG`E(LQRvQRKBM^#Z z#6Tz>flxFj8Av8C9w(x)$jL@{x@e5Y))+v!KeCR(Lm#Jm2|Cvmn(U>T1Rg&pagu-K#K|Swh4Z{!Gr>^>E=Gc#3yWNNFp+q zT@H7&qxZ1Jw;z%?`x!PCy*L&`pn&g^1J=4~&CrQ$>sF7fqJ#PTjSsrFw#u+WW9Wil zE0#GpURihAR;(Tx9UaDLe6dT?N}Zj2avSc>oi?^CVuzYf2Phe+!0S3ap_B9l|{^ z6*N@Rv)2|3y_&$0&|}yZ1u7cRD3y*Z^dF>Li;tQ%S7*n`mYD_L)GIk>ptofMMvV9 z_)(9-i}mu@I6Ys*OZ49|(!j+g7U_Gjln}G@al7&DV755_V$nH6p9rRlQ!o~t&y3*d zZBBvc>^vzDy`DD>Sd~EC{+^jrz63~hoPh89nWpiQ%Ete|Pc;pfR5l#Xf{Uz2FYGm& zyJMf(e4qYLMD{?alCLeJ6$6#!q=)VOsZA+nGkLtg$%u_jeadFhV>l*=9)Rj|yQu|AxRqp4(a+bpe)Vg1>n7Tz7BNB1giy8=OVZz=YpyatH*c^4DPYW0!6sZJj5yns=*pE^BtJb(t$hkGHtss27M#1F^v2Hp`~h#!jO zYxa-yLi}_yzx?1RFT{_*w$iHG(O!t3f8{$>7J4Cm?v>v~kn}>mJkOxzwv-oIz!0sq zrM(a~$j~~q@`7Z>2g(eg$wk%&iY(!C7C9d%GKB}vi+rHS79K$N`9P5|amtyz4-{D= z4srNEkvVai3@rA6B75SLKLsBsGKen_C^1OxT&G_md&pbLHlTgw7#q-@Qn3N;CsiBJ zUQ)9G?IQy=pgm-X4QT%uv;plMOKm{=#xff)J>yspWcbAgJdoiP$9W*bCyw_(hDZFD z2QvJD-fDyA3RT&}4R1KX0~x+BtJ|r`Uk@gHapMelTVOrXQ^JK!zWD&;uEMFz$g2KUn91 z3_qCgK!zWz_dtdpoa%uLKRC?;8Gf+A0~vnsVTP!C!letJ| zXW4-EgN+dz(T;Go2hpBzjt9}MaIOc@zHpug(avzb2Qj_j0xxE`!-ZbV@P~`MnBfo? zdojZ!F7aZ9OI+&344=5niy2O_$%`3Yak&>W++vHscvymSdKjGO7UBvYrk&$sK1}<^ z$9LXHT0d&|%nmXBGj20NwcmWo z2-O~QyAi5=L#4lr2`0TLXR+k;_%rZHadHWF-f&c=i;7B42(xqA6LJ+sx9z}TBJ=)TWuW|`l6w*QzX0@Cq z>3DZ*Ybj-xU=rW}-Wcmcc@ZH6bg;}>Yl(8%r5R+aEs!6A%rKbnspTxmGT7k*`EkX( zNG?)r>{ig`O@RP%Hu`04Qk2F+uczF@6andA{;;Ct1 zke|&VfcAn0G=OL8#HJa|0hdxZ`Dneoh_z4~xl9KlcX?Cak4ks;55hSVsugP}>0}bhzyR>os6Iz^NLr9N=^crz&nbz=w38 z;Q$|YLrn)b!wt2I^h`J0DAJF(fu5o}O9OV%of9F1+Zcb@ozEb(FQSp55~7m3h{MsY zaNA;L^<|8pIr(3^;A@l8$QOL6d%NV_Ua%dDWyUh3|6;GpSspg-*2P{QRk8iwU+lG6 zMJ+D&`gc+)FZ9}CCUv(j^t!^7n*2hqkGW>z;Un5##2p=SKi4b=+V7no!{uST!gdu4 zQANYEKKf=ZJfNJ$19Mk1%B`dYq8q1!_2i(Uj#?;=xzMqC*Rd@S{U@ENCs4LM7L4AV z-WWU3Unt=+2+x=(S;vpN{CfA#~7_jz#MWB4)Q z?&-sNKRpO3N>%P&ao7J7o8=?1s;7xmtz}Zn0@U!}VAn!$sN z=QOO!#oUtnCBf8xm`{ugf_US}Z`eKhsp~P*m=sq_FgV}^Q(V?Bu;pdAr7LUgW{Bsg zUo=?te%rz5A!&Uk?4(I;XafU~?V zSaGma{u!xI*8N4W5@4w-3S5@9?QeqB0hW4wqGXwN{Zp{u=>bNGjn{ukN`OVMoZatD zN%5IONfR$>*cjyusC#T-Lc4g^%-NFC8Dxu?K%65f>Q#Q#;wMZ6d5 zJV{Zna;($sFcvk(`7tpV=JdT%kC=d}ec)^D)Kob-h3A3 zFy|`8@#eEIhdEa(jyIo$In3FrINp2~<}hcQ;&}2|n!}v!isQ*=X%2I)k(>@sK1*|$ zbFJcd@>!b0oE?&rEEMdDK{rp(4>g82L}{!bFR8%O90Rz}+gpp=miT5Sr;`1P+v^zZ z^T0V{Ku6;}O!6$Gob0%jnSygDAC`%C*C%3!;`PjY%}Ecx1+2O0 zy>B-cYz8xnYVN%R-2cbKC_wIli!T^q(Y%`O#N_~UvL6=|x~V*X!u@qZP%3zoC4eG! z!v%##Ye5{I;r9p*jH#!K^8Rpn=J0UWh`MoQIt^@&bmPXmv$YV7h8F5L>*WD`eR9$W zugGxT3WjP@zuUt!Iv~SmOLE%0On!-~Z8W4%Dw(#(qNz$?()g;+K8uFkK;dpCkB^4r zEnbIeEKD9hSp9yB*BxXYUm3U9;>8m|26oZVv|tevT|pM|lgA}N9K_L;ES`u*O+c+M z&R3BK!+*Q*LoQzS)9nK#lCRp^V+0?gbj%$JrKGyJNYaw{A+;4v3yM9BAEFHi8kJbs zl{8dqxlvdmxbV2ixyuBXkL-~fimy}?$SY}ihbt-LlFQ8RV=m1OTTfg&GNzx#k>B)Lo+A`9-he6A zO__-clajRtRBqCaVrmKTH(;`79nH*CsT@ueAuXyoNID$n6MJ+~aEu8#5gTjlu=x1DtNO<0$ z@Di^@VO!qM6xiyEMXbp8bDoel)Qe)|==r ziy7V%67L0}rP@J_K~RCXcY(}Vs=;E0H;u$=L#VS`rZEUAP~PuytOko2-c^DiUlfjY zXN^Hnf%4vx<1|>z@U{~Kd)pFZ&G8z8pajJQ;#gW%U>v2#`%L9egcss$;H{PQUWk*)2NO^ALYxfVcR9@qv6*}@ zaf27q8^ou3A-zldAupu2ia+dy*x`7~yo+N z3fJXwgB5O;%8fQ+l*vstVwA|uHe!^=EjD75#;rDDl*K1Bl2-3Ir2W-Tn&HweYV>b2 z!=+VphWAruxU`8n&)dy#VG&;=aEBQ#?BSl_|6}jXw@M&x4A zlAd!iGzA1sPR90RASda7)kE4QZ6s}Kl0xxvxk#A=1Vko*3yO;K%ynQ;oNz>O#92{9 zuiyY)XRf^8@7ilWd++CYlJdUq@ALlget!8t_t|TG_u6Z(J&(_OeY(jC`C8cfe7eaB z`O4J$eY(jCd~|_txky{WGFBcjSs@#$AN1*(6-6faLjl92Se`WdaKO;g$0UCwV3;(^ zfZ_IlVG=DLF#FGdVNxwmYkXW8*jV)*nEQlBb+zFRkLv2eogUTIgu6Vds|R;`R96c= z=}}!B_>@O=HQ*kP>dOD8J*q4HpYf=E+5fCh_e%cfe7aZeKkw7MQh%>c_saYie7aZS zzijBTPgYs$TA!~3bZ76c26Sif`vSVN`PTxvv-;Nqy0iQJ0o_^t8v)(f{+j{aS^rxB z-P!-!0o~7m?}QvL55606yj*x7svmlr<>IOZUSTqgK&otaqitdD-b z(0p0%Cyp^>j)QRM%nJO|nA43pJ^K{4SAREDP8G4Y)z8h^fzoi?<^02A%L6Qq&9TfA z9($~c^Cy0IuHyYq62R{?*$8-3`JYKZ(E;qB|49#{FVniRV` zd~;6c;FwY}0hb#9*BMZ{s)lLG=@pJuh*_=ja_W_iRg78k;$T$w2FGiOd7P`YA-by_ zvo&U#=&o_BwwPt2yVkMVW0ppDo#U;Fc{aKm9J3>4n&@tHtkp5gM0b;8;ng>56pimc zJf<^?jquGL*ICBI_!f`nEMua))#EwCXq0dDn9ejd%G(T=t23rrb$Eq}Hh)JFu-XH# z47@W5K&s;kBTdk|QV6eJE@#1gcM9Rx6&Bg|c!=%|*w+~>b*+cQ5`8>nVKYMk9-_H+I_Ns!%RR*>Ac{%#WF z@6VyqN|}5h39`HSDoL{Xdr6SLgJ-M%_md#IpRba{5I;zQ{GB^U5)=F|39>u-DoH+# z^P?ol-zO+w$|_%fNTD(d*kfr}!unFe z9#6v(=9eP&$22Tqe<@@CorWbcKnmHP(y&AhNGbcPgSqMW-yG4+#sBVzZX*56{Bf2^Fd5-8$xc7QwZ?=8DNA{-L z7kFfEo_(Q5_9odEd1P;feX%3+w2+=`m+8c%hULwQP4nd+#M8%PE;CSXhMWbJ3jBHl z4Q9((V5y;(dtf_<%mPcRe1!)t;{C1>ehW#*+KE5~Y|fhv+AD)VJ!6$cLYOBO-(W)M zM11jR+HpEln!u}qK#N3!5M>GRMlS@eQuwK{ZETzog$|@fLS4OZC|m3OP|8FPOEF*2EW6b}-6}}GnI5JBK(us} zZ#MxlRz$LbNTs_i5yUNKWCf9`_l`J7a-AeAh*ZFLCW0&)i>ZF^HbJ<0GB`B2W)#Qb zvuiBMo!aX?E=YBK7e1BAb5{!n(h~k&7f4TDEf~U_+gV!Q_B`)hU9@cRySi-Unn*B5 z4OikP>Xs$Aqe^-Js7MZX9G6cOx45%B#^a8xv?#2wAWX8Qm9VPZJX;Vbnb8&l7nUep zdOLxpmDgg;Y(aUV-f_f@j4lK+htf|JVLT#( zA9}HmH%d;5>D7TwrE}f(WS@?Yy2wfimt#vYqcnn|C3J2Vb;k7JZW{rYf66hv*OIyD z(-o7=0++1wbUR{vRgtSZJsy3?EIo5cr#B|!^Q~5QCaN!H3=ip2wS0W1-_g6vc;ISK z797oz?V6ZZEmcO%!VuHD*3sq3LBnCn29;BwNz3NO9gnV%Hx%>Sr8}kst({)|>t3g~ zC7F^_Vshu0eSlP!rAA@~9=sYd)|RAHeMUvUO(tv4>&P+X-yTACW5V@mCKH5HMY6EE zA9lF!JTO9`yV-}0=gkyD%x@Ti29T_1C`8W)7dYfZbM~Az*O}bdN zw>!>A=b+gdVIiJ!^wCbYWAZ9TjxV<|^G|p5$`H;Onsmxxk!i;&+550k0CqUW&{)i2 z5_dWdYn%_zaN>f_yqmKuoWm+r@$Jeu>*gH?zdH3&G>8p-f4o!TP<8+N-b=F*?=DyTx90%!_ zrCe^~$iV#H$djhChKeZ~$e}Xoe2(LFjg~ix4q}^scZ?nwz%Z!Yd3EGqJ#eHSOT+kP zC0VwnUuc;B8*jH>WF^Y&R`!A`5*I(Uspl`^?2Nkp)UT$pvKpXtO2}M;Nzt*v%i;qJ*xYLgW)#ky8g0VS#f3`4~Ehz@1sO~QT zU@=ku5F|R4l%Zs3%R>!Rl7M|0>PZWgI*=t$7*XB1OH`%-?o;sjg6CM3gP4?HGVqzg z5VTLB7YiN(`;~rIvS`x5NS(h!*(Hw@^se4t6eYsFBOkH6@qlH-)2ga)c{6<~X zD@T^MqA9`hG<30*%|52 z4wWd8QXb{N!qWQVU*J`N;ejz*1CGV-Ci?Y`Dt}_!VegH?8{AJ7cKq0w!66b^`3LUS6jG38@6gj0KO82Rila+}043WjI6om(dI&M`i1JCTD3a{2jBxSW0hmD6Bs5#ZdK~%>gg|wk+IeiGch_J z#9Jg%;J~H1ab+}SLo>_5Pq46gpX0ZW9ua(z#Cn#E8{>rZU*Y9c=3{4`(UUrl~zS32otS@k%wp<1=PHW9t~g4yxp zcUA2>@9>G;%ooOn$Yec3PupQX7R2f{957HW<5udFfK%#PW0oRXq>UK~m}PvYRTt89 zRitY9eH%tg6;9CTs~ZH>BAKpi`*#K z;L&XyMb_|XVW0q^qZRq~2H*~#p&WAoaA(XZ^+73J;xVTgXB=<1vk)_31sZpk&n?E> zLP0-_F(0EbLH^uyyH|V1JZb7(Gxf7WCbl|j#WFm z;`oYsk?)L{U0#c0d04R29cW(WV;gv841hudJ+)TTb1~=k#4K!tK{5u!(yKA+F0CUI zwUTA8HNO_w;eGDwvY1<8NpVbS{Q8(F#nv&|>|Y);rMNgIoBk_eCXE-z$j1N5n1!;W znlKG-i0MvGv(U;^TorR;Jq?p<>Tishv7Ux0rQqtA8!M_@rtzAXtC}j0NxU}ZIhD*B zr<8;1Vs@;Pa+#j%V{WXJa+#ht#oSma-T=xb5s4pF%C`gNa-Lk2--deEXnS=MI`Az`%-$?UYYdB3~hXOX+e`_4MnD=nN=7*1CHdFtb zfQ@NIf6Qju9|_nPM#fww{Lz4mFL}pYR-4}&E(cXyh0E(ufhFz_A**0V5nw&$v8q_T zz`<>^{l}8_xW~k+N->Yw{6~*h#vx@Bimk$bdmJ9xR~A$7XOC6wiobm=_4-M}8}2M3 z0i_-dMfJ~J!hVm|HN^oAlu{u!ky#dG01DQGJ2b^v%Nf!hhs~dCd z!hqB3rS&48!!}NN%&UtNyf{ag+}HU`)4pj?seYIEY_@Ke$sD`XXPUOnvT2pee70%X zESsje+-I|0vrJm&I?IHz+Nvp=N?)Ji#(}|oQ;OT7VX5>DDQ>HBsq>8~Zkuwc@=Ymj zyK<@Xtv**;GG&S--|BPOj#(xJzb(OxlS8?0_nD>*vtd~%ZcDM_(5waT2-s}DY+#m+ zcP6>k7}9vX%jdG~(xB3Gy*t6Q36h5Ey*`uemJLZGzu#xF)v`>c_QO7tZI)#+tsn83 zXt6Ah3BBFtp}n#^Ci7#$lSx`l23^WzVfuKIhjC{-oBBkOX{R?VN_Tk7k#O@|pA8xM1znk2ea7c?Gg4h8 zVl(<#pNZQbj!UzD&gWLwJ0|V^d7mloQ#n3uf3MHC9lVKJE^L3n=U1Fwa%uaA!o>6# zQ{>9Z~uqeqs?q<1Y=q)}nb!b(#tjt#=2 zAwniv4#COaZ$ktoTaM3?`G;7)q=Hc2q=Hr?_7JHd@Dv|pAH4VbTuLokA z@wYSxYrP(b4aeWpppF0}Be{R1QFs;6mnGfr6KNP8I}Bj7(Ep@ieCsg4u?zcW8po#& z0~|Z{C)2n#yy6t#*z28_GbFPbmB<=dmRdM($b2@A-Aaj^SUgoG!=Fa&UFsqKj zsP+XJFl#M^QR@pcVAfa)W9M>F1}x4a#j%^YBsKyU-4aGHt8WWi0l5qjm)fX`S!NKi zG{a>XFlPpV(G0K8fH^Y=jApnz1Ln*iFq+|t447vI!O;v?2@bi~#S?05?wOg1Elqzj z;f#{>+ zD<#(qZ;%jN>9XzkKJ0X(AHX!8(igDZp%@-px;ckmvP$Z+NWg2qrhEz@SvqC0c9GI4 zmGmuEf!e?rUI3ITZ=|tM-s*F)C#Gr*^hm@0R-dbd(1c~X^){c2-7y!It<~FouC`Jp zEKB)qJ{S9BE-VZ8JAAH|Y7>@a`kg*^wI7xx`CUF2m$W?5>;>K(u(c~Ovf2K>CtwHW zl9vCy0Y5YtyTbPc{J>;#2KEC1KQNj+mG+T}zF(1lz#WSJu%}LY(LOF(l2<&GA>_S$wEcKCS0*tINPPF{YYXn%N)iUfjrvc$38@sS(*Y2 zGy5k##%zy;AZGMWeUPM|MXbh=cp#9u{d49vE_ce7Y9d*D)@I>kNmc)aL}fxtIcAo` z;+U$35(u$wj9{96nLtQa6eF0RhZ6|tjA8_n@v8(vYEz700s3_UAsteTV9EKf1VZ}q z7{Ma*n*>7o^BBQm@<;+9eR_;wul;BOVfytL!k+uLNr?3AF+_Ur-z6~#yV9_~PhvvL zN-zG0Bqp@2^yH5vF`;#(H-9{d3GFNEc7O89S|L%^p2Gb3&n^m_UDnC7TBRV9`@bX* zzD)`;4E$>X;aj92ll;FW5WYPM@-pt<6A0fL1$iL%9|?qSi-Nq9`$Piam$kxjmbL#$ zApEjckjs4kOd$NSR**-Vo=hNuvR06LQRg;rpe_~I7}YOpuo)NV2$vs% zV1E2Zh;aEK2oaJbI=KolXxtj35J@L$+ zSV+gF5SG$;ToP<|(y~CdcNWny<)CGeObq+`l0oI5V~cX_Vd_}09CK_X7oAoztT|)Z zrrcy$bHuWpTzq^t6;|S1rQB3liMNB?Qe|Wy8Q2`JTy5FO(B^dI%g7dM;ozWNr)K7! z=;)MfKT8YFNscpQFJLnhJ4xr32jrODE6OQbsz@<(mWwV+hYa0j1GU>yN2(hKbqfsS z9!oBpvwzYB_gZ3QJ#J*kh9nFA8j_iX{RB%|ctAQY~~8eS#M+d>|9hN|7=A>4RSFSfXtWB5$4 z<(Dd@kpYiwG7dMnEno;24eU9t{ zx)@B5_}3Bg&ypcwy8r*z<~3U<}6$B)MxuT34Bbof0$L>mH0^B&PG32<>)g(`wAXI}u8! zS=W)yvR{kem7qrJW3qi#f;QR^Q(4YTiC_+IjOn8r#zyQz5bQNhjX6A4r!Pd%MlW}a zp}`)@VG=gQoRJMfu`s6L6){I{sEU=ChSNxwtDgMFlra5v-xjhEH7jGSJS;Cn$kBer zG)X4wAO8u0O_9SY$A1FOG&!c0)yjSLasf@Y!{c;~Du-{2&_X*sCfCtKcN%EMV?ZoE zO>CkwAA;KDafizTyk0LMnd(=2JcJw?R;GPPd^Y6UQbkqgLRNf>fO&j|@=#a({+uzM z>9NrGvyid|?(xV2SQONlSOqVxBTpamkmg*P6Kx>QmKI+qQl}B%brPUjDXm-Nae&JN z)Y;#KSGdZf{X>IzLQYBqF8Di^fGUJweKnwI`8ni?0)mDDR|?!n8|vz=@gcFU zvEfShhRm%+>5bly2&3YM1}ht#IwM28Ex`Dka2&Ta?-w{2PqOjmKoS_I&sk9py?HjY zNw`)5_u%|%H^10fE3_l0TnudX_;qu};6NS3WNn^G3U3fJ+8{h3+T+QRY@@N|&vOPrF2LL~sLKcewvRKTwN$ej>AzMOZ3$Mmg z&yS~&t*wE~)>eHZ?-OZcnDkbg_B&F@)nSTO+Z5fILKaqsio&m&ev(+^ARZh*XO$?3 z?6npyh_W&HDTzy35PhSdYZOfldPV$;_Y6GQES~o)2yZE(8A#x<$Ia@dROx6T3 zimi+?EdvXfnKC|;Ap@Z^WysS(8G3wPWU#NpJN5f~hT>iytxvD0P*!8pWn!C>Fy;pw z>C6*Z@)Y*azHDM*za?Gh=mwh)u}o&gR}!$1G>q-WR~^js;2GlBjPS9bY7L{0Ztdwa z~peoun3V_?VSH+AuOC22_b z7*SRBziaGWg6bgs)Q_Z5<&!mTY~a5>FH(LSgX~BnxSTDgwSFcT8SL6Yj(-9C!I+JF zO^1F+*wmG4ESxO_7}4UF0Y)Yo0Z7z%H~?`*5MYXIUH>b<$SO#7jK4_(7l`(e45ZFG z((ylPz(}aXjrAm%x&%NupZ41X&`f>;oXqX{Mv<|cNsLaP0-*G2kBLA5NkZ6w#M3rj zZXzKzNX&(Gc)KZPBA02|m~Z^N=HwunD2FkGsP0b=WT$2^NC~_Z6-$zG>EaTvc?GFz zRLx4sU&SH|q~vdoiRot?IqM!qWPf*DI}eQ^N{H(Cw33Zp^En2^iQw}}3d&5x()u+o z@>aU!Zc@C~Wo|h&EjLtuy{mvLE>abR8@&JRFS5!syys zL3lV3m4#7#io(NDs0<8-E249Y@Nfny3#0n93J-^$(wIVvV%mg*(PP`0JS8u$Fhi&4avx_4iwYOjyFB=!b}?Vxme(*yf)rYGgtmz88dMUqpYEr7ITG_?G71Z`uYMGr+Fb@ zUXvE;Jnk_D26S28e1vhc$HGVPOc?66#bfkWhs>MKTmjsgV3-ALE&xu19Q|MhRh~?6 zbkUpk-xjipCS#Zb+Y=lO!~{)+tQHf9*)VN5(sbhaP)#eh@v&&@^YGa!uZu%g!Q1+OUC1gbi@IDA zvRafyEiMgM$UPGmbMG>r#jG!LTUrx&*6eShV8x308|?(TZ;h zSp%bnMJwJAuwX{Rq7`opSTLhu(TcYy%Z!;YbjlBC!^8`yxG0q3mxl)ILk>*GTe1Ln zrBzxCrsmcx0J;y;Qkj0>t(h1VLN(u(1Qe{Arn`E3itni@`F>j#!s;paD&LWXh!tg% z${cuSCQ4P6_Ve9IM7~@aj+4ebv1*!Z{#c6dsVUj~ z@hpVZQ?mIJS%_Fso6UD*qWo;WD~Txj*<-T#?kr54IVPJwnZ&gCa%?t#Dhm}$vf2C@ zABB6PefB*Hw)US*F}2eN?{g{Mpr)0X|M@i61ZBqGn`GM8Ggw=`kYbvEY_PtV;@LRa zW_>BmH9=W5zMN#*cS6`@eT%{F1Bb zhV*ovsp*gUOl;UmcOrT8Tc0yxIqa)`=X21@`MLA^1kcNxKlrR6`%IEF_K*3jVSC&_ z%=h2QGBZiO9Oce~u;l+K&DX&>j=ZzH{M7+QamO9u^#M!G-FGZ8Lr1Q4j}12^#*rM9 z^UWKFK^7-LAQAPh098n%Fi7WDrF~h&Gzx=tep%W_wWLuPw4>|tQ3InX6bJ9v`t?v4 zuOv|%2?F(g4~0xkqBtl7>O&q%R&-;N8T;`y9;dk=oWTfzkB{=CFxFfKQ{dw~DU3Ci z!4&zy>lDVC%3xaf$?GI0Hk4on@TC36k{D+uV&LPWKM6U`NW{R0hYA&wvW%G!;G(Jz z2n^Fh%kVVl-66!Y3n7>w;9_bB@ytR9CJMNZ8bUm)5P}HN7Zxlc{alr1Z4+(72 zL!%J#86Oguq=z;k1+!5Z%qaL?kg=|om_h=BsRf@63NXb422%_^9TZ?% z5*SQ1&><=YZ2@Y$J=%gd`{$1_fx&=oI8H2cRJ0*q@X?(e_G&tB@F#*gbTE@|$?<_%{q2Dw8Lt-Bq zUvX$%WFs0I1~AEYUDUB0S@mxUBy)iGzyeTQ_3)KoSNXjxs4QEBSaww3&%)ZG7{WQ! z`9T((RVswCkNja4R3_LVmZQZVWns;%H3W0;_~Qk^30rV5`I7~~xJct0j)TjeW`c2u zH$ZZz`Liq}$9DlzhBOamK{4D*K$&qr&xCU97m8)Z{UQ^~@n8bXY$ zo{eWtKc0nOm5pa+|1k^Sk&S1D|92LCbvB+^{--Q_A)g(9b@tDh0T#$%sk(p346#ri zGn4886jX%R^%rppMk!6mu+`gOke=2<(p%*fq3%&>Zfi z7OWqy&jw;X7t3SYcX>9fb7-{B0omxiL4jOe8R@PJmAdfe$9f&(#jE)^F`venF`?#3 z#^~;vgbvU#k$>jY$F&KZB-%roLN3X}rY>}TlV%KeWf#sGbXtqPbz-vS1{*nr@ty^) zQ%kOkaAwVoNrWE6mQ7*FlbezVJ&%#K?WQ5`nNGpqfBy_Ie^lE&9Ah6k{nkbq&} zf@2k<_^#r@R(`97F}WeF08XQf;R>ZMery=y^tYvHS~B$viUhZZ*%m(vjD_C%OPQ}VI;GA+#&!T+~q|Kl2O zERe6$HpM>KzWYQ9gGUo$1=u3pkwTyf#R!)EJ5vZ$p%}qd=#z>t*%N#fQ!+-I0EU5` z#b}=jf-GvX&)E3;@G&bd_slt8c6pz52%J!JjlAnXKj#oQo|ZsJxA}R8uwSrqg-Xt% ze$gVz8#2m;i|b1sZqbB&)dAx#c_wv}Zu&kSxTwhc6*+{}c3Vr5rQX@?8yRSKnA#;@ z4D{_7jQ95UE&DrJ@GRjnxcFX-uJw1}@(PdScAEp+p+#_t5*hyeOn8=bqJI>l2lpWz z=MPz)ew-a3Q$F!Oi}9v^KzTYA06p;BMWoN4JW=8iI0}XRU4m3U$7AWBLm-quTf?NkjCSQ zi~tWQoJup0de>{(Ur+b%}bV= zGkTau!3=JgAseWzD;AydKqc7zQjN-&Q^QC$-{ezdgmKvdP&`AyGuGU(pb|3qSpZrL zp)vtl0NN5lIrz9D3tH~a_n>TrXx8K_7eaR@($)s>8?wQLp6*2IxZZPB78v9Ip5agn zuJv5A6qOebehnm->Yh^WT&ppmD%W^(j!OsTyWFu^!A)7XVu+*l|04_665?q2H*4KM z;Y?HvY*;L|NQz30;BV1r}`u}iaX`f__r#sd$5cPeIo+3C5#vv{;e4pTd;_s z(chMVvGs)*+WhTlrBED3@eLU*c?8nvx21u@r7@g;1^`u+FxvbbX_(mwaxj|wof)tV zSoXj(0)9$q_4g>$+>j$j1p`Ob{0gVeM_2zKm|~1DeG+_nW#HjWaOT>q#Ajt&tzzy(A@DX`4LGdJ{m7 zUB1Gno9B#VTkMq{-F`kzcE84BMxj>f>WW`gqGdLFyh^8iREb^smVncxDPi)rdK}DG z&Czxyal&T|n@6gc#>s%LDl>n#`Hc8{B6E1V$I;KA;Xx<8#xvzHEAiK-Sv{s>PO;|9 z&!~2I98B)?`VtsB14hLhgk<%c@fdwLCnKegHrwSf2CdeN{nZ|$YV(q|ob?!xWbUca zlyf0Nj(ke}oc9ldL{ZZQZkC^VIyVnK^tt%^Oc~WDMRhe25kMV`n$XEK`OI%M}li z{~n8!&#;*uYQ@at1-djsO?<3t?6JXe&_-6&JRshw6E__=Dv!jJa@#ZTY zDqmmhuw%_w8e68%BrtYt8H3o`eBNk)J}8(nV(zuD2J*(#y((SKWZ+S?Kn04U3SUTq z0v(8=4qrAp411f|s2J7dt5={&SXd4Dq{>$`hT#GIJO(>wNTS@YIv(eEoTLknZRUNB zH`LV?v)F3hZ`4^IsYt%f~S8?#*X1IAduh^{lpcH499E7~8bXoRm7RJM`E zr2fd`=4)*MpUM5P$1et4=FCq#ZXpqx+4G=LUB&=`@)%t%talsp=jSR~!qy7;PTHhU zGoq;ZFG4^e08sUZP2?O*gmHH)61TjC|0@;Epm9;f8Z{*`>RBvvjDn_~I6 z$CMqHn9ErIR9CKy;$w3ddxR-n>@16X-RaLNmqFvkD3(RpfAJALHV)9?> zA%f@)gvmdDiCAAoYhnERENB;~bc7A!H?kQ2g&rb^-#{4u>-a&}BEC6V84jagtR<9& z@DdfypmKJ?31Zxr`s~4>kpY}6aR@}cw0`(syu}syMsU2iBEBX=Gixh(yW6`T^C;5gmubwtjw`bmZ^qbD%TG@E(V$z|2_DkP=tqpFl$ zR9t(MeI_f6lDkrT9Lmthn3>%vK29|$pFK!ViZ7oY5oOVXEM2;^e#y~wht(?mo#o+S zbb@$Tl6igli|Y=kVRx;!7mL~>*nza1x+4ei#A_4o86Dk?tL4j&r4}y* z?wi>Ev`(u9jjtHgr`P@8Zg>Eudn ze#fqz<2#!0E+&>@YW+h!ojnZGiJukxLXk`R@H#pgSkh|<8BDK z{Wz>((*v8;FRy!+XERujMjJmSZ8XE82|Q!2$Hj{gKel|pt_+n+h|klewR;1GmDRCw zxf^eJBf)J#=qdGA@PIUv-9Azp?81YB8=6{*tJ+t=aszmzaSS^WAO+HQY_9DX-?KcR zZP`6LJF#=VHa)Xte0qZAqJHU1keIkwj9|-`Nj%}DsU#{3L2@hVmeg>Wd0=R;)>n(_ zb4M?&Z&<#xe!pYu>hZaHjEeYBu`FjG8LOJ|dscNsbxZM7ccCTUZk9Rnds?-}@H{4k237*shn{r>~@y ziJkSeB3pjN(ob^IvmlJ&b1Y%iQ-`HGN-#I!cpU#smb}4*3?n$fW@Y@{eq+J`} z!wTl8vFv{Ejo?v5c-cHQ!dos4mb)tm%9eD05Qgw-YYT%Oh_#(D9LF_$wqXYeMRV_9 z@n9vM*r$mHYwjG(9wHvBt}`>AE*`wF#zl=o#e=8R7};Us!JBDp-JcvnnIqbJ6x#4y#~jqpQV(pK_nv2rm%khC3Vm0>9N(ksiVEUr4ZFWZ)IJsr-x4$ zlB3kR0|4x)Vmgb{DtxyZRq{|n!jT{x3p%x%q$5DWzFQ6LU>E%_RR6%*9;wCuV);0i z!iJ8RW0cmtVHh=FX*2``HY_)G`-U64)$i9s-K;f5wj>p|l0+HeUEMz^-0ZJ7s&>8kV$vYp)x zFDtBg+uFE*01AAyvB7>T=4wmp97E$w)HS43fg+^C zzfVGpjwlT?ODgz&hobJ)rX%r|_mL}(9EAPglzZ?`mA|T8Mf{6TU7CN@({dzsxhMkP z8nAeQ%W1OjaXM1M}`{rL7twFw^z=NbWlNUJ4$jf6^P3C}wN|1FE}9fmpg@GU_8 z@flOVXfo_F4iNbZ5|Gx>{y`}{zfphph8~j>e^3HOXxJJ+h{s3}AGTD{Eb)q}%6Jwp_C$r7UgIvXi>*QuW^BNsBHI9#tp?$%+Su89f4 z2?0{^wUcsfz6m!7u{Iwqty>8iHwsWkV5e8rMweq@aZgltdTkWDtLpjIlF8b{%;fUP zU0jWu+BtvBa{fN{#K~RrvrR91S(EY2Y<^WU{-2wA%>?IA-)5-U*_l}lCm}!p>pNi0 zPfSny9LfUgyI@g*&+-NHuHj^DcH+#bom&MnS(~1lm^fWDTG7Oo>w7U^>(uP>tx%c) z#<$W(uR(pEs2!y38lT@z%U&DkprGL7 zk(GPtUylROsD*p-u<7|E3=N~>Lg!ya!RaLf`Edamcsqe-DF?gPlZww{U+7UwmGz~K zXma-C(U)En%ZbSaNV(XNhY<;?)}9uSFRfR}?3)Hk=q{F{5aFHt`D5};$2PHby}Z6> z0DIFc@l^Z@_2Mmb5TN*#Bxu1F)!slti3NX89?i*B^j3QqBlWwc9`yp^@Og4byVm;J zS+1^AA7tbD`StV}!AS6p^`(K@NEb@CsBsg$eQY8`iT|LtYK#Ez&Ghp1Io47h{fDJC10W_GK1xetwwYxB&^^u+j1hd6{3=Y9J8?CuHE zvmQD*j&gP?Js3z1;!6WHIK61(+M&wfB(lk~L>cisi`1cEOd%CYz3LnO&rm8J z=p@Hs{~r#e_WM6WsYQoUjd{!j_-JtzAC4%YJH~vV7GcyhfRm>fM%37Xpe11i(~}+g z0_}l>NUMjwoICBZLhS9mu#L#K^yo9Q2RS&JtcAd`=Y-m`tN^uoJE;xk9hA%i(Y?d{ zLzt!J=$BPE5=s~ZbK6|FI6<;sc@!_#kkg3)??`o2e%FREHb4uuOuoo~{?Ad-kR4F2 ztaStq9}ZkU;t|k-9fZ*ug^Hj88iRw&RgchynOI#^t4&Xzv7=UFa|q9t>G7T0622Yd zubP=94KicMj;WnOMEe%g(BEv?K0R^9#5B-`p%c?`*@br`3}=T%z<~0Q;pk|u_?dxq zINW2IMz1p_X6L46c7l3jp`|(BjH58sa(N|gt##ul&PvdV&BbFd=7PB1!7)aPWLr-d zo$!O0j0Ji(Y^aqw`)l~XT$Lj=3`>lDrO}}QoC-!{r42Y1YSO1f4B@L7NU9N)SSp_~ zhMi?io(oQ0*~36DhooFpR*BW_Q)*?D1&n5aWZzt_)CRf-hDJ8xb9wOB)(?%W#gW=> z8T2iN=^YtDl``qe64cebuD@&*%>v*!SFO4Zotglvs(lu+I@XC9Frzb;A08?7;<*ld zvRhVc(4&sBk5XmS$js0<`%%uAjV2d|I@jQ9m_tMO6hl>9wL1+yih*RU+=F2`hAUWc zvDP1fo|vj&o`HrziKhHaPt8xvj!)Mnc5a#3Iwb}D$g$C$V>?V_26X1s)(I>qWg}ax zUL!n_S?M3e2RksIk#FcAu40Qx^^mYT`+FU)wWX*TAiUwOVaID}Wd%kKc5cKl%LJ}9 zA=9&B5nw82Qu`~z7`vEQmM4!85@@?hAJ~=5KUQ9D8wa6V&Vi$XxU<2 zw#22t#5X(y;V8}tQS!wN5Vd($tlA@`j95EGH5r^HGc}G1AMHE35sg}{X?kYoHuDd9 zaLEMa_Y90~1^>wD>8+;1I{K8MPX%;b;TY@b>1P?&+_d?gifQ-Gxv6bCC$=`(C@m6k z&KTJ#j6H_2C&i#DP=7nWvpNOP3HRnfp}Z@n-lv*lp(i@~X8WNeqY?K88c$P<9m zQb~Z#7h4K#w4CdqfROCvVl3AWMt;KNHW+}6N23So>gHALZ4yswIv%WAVO!NZuS0tRs1qctq{C3piIdYA|croS~Y zGOr7H4047Mz+{PI7%IQ`7bnw{jrQiYwtVZvOB1@$Sh29>$8zb~1q9E?!!8+DxC0Iv zjAkr6w-rp9+q^VetD2lBG`Hpp#nm0H?Gwkgw&962Bc_&Zeob+l0Lb!9zd8=?3}0yG zSI$-!SLY{=T@}jDGP^{aX>@e5vB`_EWu@zlZPa4MHn6zR)!y9V(PSBOw;<8Q4h+>+ zO}w2H@!m75`)vYZk$W~%kCyJzB>RX#vx8_j_TiZG? z+-q%bYXw-7LU4x7MTQjXf+^QVsBiRw8I6(Qtd8MxF^@4#zIAo6E#FdTDNG!z<<7>G zvc6@ctxt|;{WddoF;uU(w{U$8X0Z%4f8I-?v45d?)#_F4tD#nFM|-iQ(8hf51Bd0l zC9fGFg8huh7r8=cqXY+I6{Nfkrgb& ziC`wx%SQ-HmHysA?5=U>XiA&RW5x#26XQ5Q+)A5XJw-$lyT1X?QVS8QFEg<8{T#3t{;b3kYl+{tf3mYPAsTtxo#X_`*BDG(Mokf z4KXn&12HYLz112bbGQw*mF|zW4O!$*Pdlwab}{&4?bzD!NF=s5hYMm_8D4MS?hUVn zECZ44+r7cHkYymUeY-cb7P1UPwr}?a)~O6K5t=4Q_6X5%hz{B+=`5HqmyxmFE=Lsr z^BB!N#Z8_X%{|2p*=X)5ZpcP+PjQf)F{Nl}j7HD)wzd}285l(k)lJw5b_FKZ-G=hq1L7G+EVMp!pgWCcXRAd_r%yf13n35AgrS_PT z9dXr;HAXd2m0i{JnMPGtFMM8XB-e792u+m?8fBMA7h_xqUDN^0#O-Qoz>F>B)jdD< zRP*68jitOI>obj|v_i(|MXgjr**3suX^w_#dp^M0DrqXy1o&NzOQnl4wv>%K0GY^> ztwI2?)=C-6#Gh=gj5!QXY?U&V;fbk|mO^D#OJ(+nMs{4|pF&Lr)|$`nMPor=hJC3^ zdX_GW7&F#tv34ksZVfv4A zvB?L|*d=VuG+1mJuZB8Sx-AQ1i%sLAjZF~8n`p_L^wbDQ@)_ZvRJt8=;f#I!y6Jev zK3?4<%e5%BA+g2*XTdg1Ls|9*;ocR3kPn!Icq@EEMwF>R6TM*-T70%|5W~CgU7C zPKXcUFcY^i%(`GNw!U?VcvNPvI7xuR=s2r4*3Hks7*x4Z!fu-4WV@3`=Wunt+wRH+ z2$}Tm6Tv10dvW`agEF-bl-~ROKUQVr`C%z2Bq3)-`GH>J+pzZExbC(^FlZ)X*7x9c!8A%>6%_V z@M5cQtp_J1acu&plVz<62Sr>U%d2#abZ@|EKo`5^lq;ut_!4d{;*_nPG=VNX!|Yml zt!lK^-;K7xlTB8MUrjYMNe0(9x<}-gh;5Ikd^gXx_=MrI4OSiM8SUZbg(tn2#ItT0P(`Uv40(6_9CY|Zs=j3Tx*IwAmbQVij>VC z+zS}c_*lC8co#%Y5#!1T4vFDn2;1HDrQurPsln_yihW3HeQMG=JX=^3RdJ}*S;$gP z;YD3TmhQybT0DJ2DBo_CQ)uo8O=0!w)%k*1M->*1w$xB60uiKnCeO5QwY!R9VziG}8nmQ^EF8B)FT~3PJRNTf zBf^xVtm5SkO+{CC=UA@@@9k!TF}taZ7n(+J>U(0g zv}@O<6Xxb|Ea}9j1dbqK_t36+oQIpkvBOBFHaJl>GE&0%FjO0z%SPKa?-&5Ie|};| z!S@t>PmAwq^*wFAr``9gisF%-MBXz}8(JITU)(xf%hy);oBfmi92`PNfD*8gblMed zr~c##WrIcs(vJt|aYT%M?AG+-mLGn}v2-7TlVNzqlN58Jlh0v;V9@=8MvfE(Vi>o{ zLy@MjT~0|`SkLWahA`*3MxL=+qy8bXN~+-T0uGeuQ~ zvGL3K)NZuF&Qu(g+lM&h2M>X7otPd!i>F5;UIFOD`Ec=^Ig4Xxv2WKb!dAC-?w*{S zm=)m2(176PCU$NOeiWj)GpBGEvv+)lku*Dj7gc(u$LF@kv4{`0W~?|BH#gzfn{f*C z^ex*bww&&0qKorV&w=q>yLgH&mf#bd44*1ed;-+ky-Or$Ib{i}Zke5!*ct6OtF(11 zG@o_p&I*fk{Lx^Nld`d;oGiIjQT12?wgED|f#Rs5q zks$ejOC)m>TjnFU5w0%uRHO0v`B|oQKAPJyy&JLVg_cNfPeeUEs2=@Yk!X(FED`Um zLxz_Abxt*fG9yt7cMV=1l$7H??hh zG>N9M$|TMr!2HyXiJ9H=(dOBS`RMfeC|VNn?}o-G8mWs|U9_5?3`SVUKLT{3ByTW5 zOndOv9QbhwI%sJWxnk$a>Q)mZ*-rct!dZ+3s1;!k1g6U9$tJvQvJQosVa@ypBqgfQ zt4tW%5SWJOj6jgKJ}+vByfS~Df!Oxvy@-oC+M3=IOOPh>YDH(XLdVl|wq5u-aITH{ z8GJ!I^DVJN&_eXV5YCoeeF3h~e+gnvbiEan zyF~N&jZnX~=y$NEZQvEt%^b`E=s@uy^ zCxaG)OvBs;8PbqG0G@4x zhCwvVW9xpPN(=U3m4l(^eAGrk5Q?$td~_;9q9J;VuY!y(PNp0-!RwJIp)iI2PX}bB zlM!}&Vtn%yF1X`ox!9av9p$#*0N%u&V|TPf4a@c$XpHt>a&YwYx@@(sYdo%v;Jh<`lx{H={ z9t?)h`=HNj3VB!hypE8!8H%XPu7kg~G?2;GB90Hr`ti;CG84QNi}1P@;oal&mWS~@ zME4R3SdIu8c# z8Nk{<{?;@^&p`oM8jUWE&}7y98Z`L_7-2SVp*1Hbo43YtW5~6m1wPm~#-Yi@?WUQXlT+Iw`K|X&@cxLA5??^#izHbcTdmHEx^to zm#{F!kcPEo$K2FhO{a$-K^sG|Q%9e+ZOazpojYp|gW6h{ChNnsl+81{m~12zQx(Lv zW7o`1j3}ukXfbenE9H5V&{x|szB5UgO@ydz9Zyjl>LeFh@Z%(m~4Iv9TPYjP~iF-bdIEFm>u}*nwr~%si5%;?ZPNwe!_SrCs}&& z8>Jt^`nm19#%ITO7#^#K1dpN|1V&N)VRgCsWzX1)zg*qkB}+IwQqBwNa)&MZ@7!~? zxg(o%``w&-LBsEJIYe`KL#wz)Hq`H7T$8!FhWcgAK{UTaH1*4F$sN@AqTB&M zJip;CAe$Q+H$Lz{?x5|tXCj6JnsWz3bC7fUHQWk9t|6bRe;~K4n0wmx-187>IcRI} zYXAV?8!o`V&umzmJNN=29NKVxt_h_5n{&rDY|9;wpR1d5P0hJyOj7vs&&zc*9Gly} zVX~o^%h$iA@dSjrBX?Xw{Tacg~y}6bmBE#y8~f{ow{L6W&}`mpfqDUMRPw z{wL?$fq?aIuWS6`Eo&R@X?>qVX zOZa^YLw|(6Z&=@Z==;9Gy`8^*%HIWQ<`<9uf@aTH_QzZ!QhPXTLH7V;A2q$|oHf++ zvAW6J^VW)qp4YI~cN-o^3;ZVp)-Qu4r;tm?&ovDXlYWudv7eVeV zx8x2O$o(&5di|REJO6F6q5g|Y?nuxZP?|%oXQYvuk^!bYZRifC2l6+Ebze>a7xkI4F z!6>tbpzJ;e?!nEFwX&hP{)w~2`WMzWug&FtuzlOq-2>ac|G+J5Jq{X>@{Gc~456Pk zg}OAEdkIQ6i~dyZux+^`pe#!6eki#O1Nbe){6fjQ{TnW9e9<-vyJc_g=>xeJBJBQa z8m6}8UND8I*EC$PjTPOHq0-viiy`1&*5nG!xdU#_t!|hA>gL?DPzzo}lb~iaT#$P@ ze!djGHMx94JzA{&06C$de%@4#2hK(T{AK;*`MG)|28Hl@LG}23JqyJ4sl9jq@sD>R z^9Ep^qo8?E(eKP1ba%RKk8}kwZVuNtJDUdE=(W6TkoF#*-?! z#tU-GrjUg5Afd7?cOa5>3#B$xAfdkg%JJQ?@oO5`45C(TLwRZZBFm;UG!LD1 zbMC-~`ZuF`@3*bEwyp7HmCE+>E8E%{UszeYHg`ZPIjl9e-(A41 zZCl$8CwJKP+#{V=B>!O!N*Qh)?bunToy zbeEds>A=)Q*x>R0>Z60BQv;J7>~S&7!V1811O6ci{-IHSVE;oC{AWau1@?VLv`yvh z4`f|bj9#q%1H|7Ftyg(WW?j@8J*nX-xh`tMzwWO-Iy~AH$Ui(fNBu?~S3cZdJyrmbSuZvbWFn-lX&yB7P?ET#6ZR$7jJE9@=8~d(~{;ugU{^Jtzj)+Quyd$Ew zE1s6Ei;j`G(<20{!(-Q*>RxZ!$3bw>~;D>J0ct zMkfXKKQVznD#Gx?`#UOnQ0-^Zdr~y1ey$1BMJIb$>T`5d2+GUR(cc35m7){1Jvc(b zcSesuo|AHPv;qFUSnAQyWg7mKg71n}slOur?&#;Lud!cG^m_GEjk>5e>QFzUt%Kyh zY7=A9(;vN9_1!4^HPP2KeI~!wMuUOB5f$~ROjB6)xHQD=0U z%4-C@E*gwhtKXEjp@>@o{Np-YT{Ik>seZ#hB|0+Tk3{!r`b>LLjrOSDl=o4QW&f#1 zeEwg3G~|1cf5Qp?DGC2b!e34Jlktru`0En>QxpD83I8h+{)vQtTU15HVoE73`JqU` zH1e1JoALjl=s#Fa>>u;=<<pWN>Gpif0y_V6)b+rpU7AIJ)j(lRmFo6_TavO z{UiP>D(@luJ{0Z$)#|@h{LhX)tbVSm9*Xw+KN8`;gZS(pa}d%=(Q4t z-9S2A>a}b)whQT=fh{PyXGW2vdruUd2meYm{ujc{!7aOpn;?y}e5H{E}Q{^TDTMIGeBW&L5g2T4b|xK+&basQWej$9bu$?7s) z^s|MeyII|7b)mY@sXzIbt9!k=Z&UaE>fWI)%PsL=Q}=u7KBO+wN&a8eT|)ifKUm#o zt9z8X&FV^epQY)Adm`zuW3$R(K2lDPx+CgtQkUsliEu1GdAO2JglG9#hRk}d;*L_c zLFve1k=sP~-y)2_jVtzq{{;HajnIKisWwSstnH$`@k8pLDo;NJqY&ukIz}Bht&shkF(2d!y)jy8n*)PyUOd z=$+)leLv|)|5DPAjxcip9j@pPxz8pa>3P1oN2zPm-9tapHLUKb>TXpRDhnS~M$&tw z`roYXyVbp2-A}6fMRmVM7k2s)UFa`*9;14~J)Cstc?4bPi6o1=T-`ppC=Zg)ki-00 ziOgeu=i%D$OyA0jO!z$9moOZRE9pZ$TSNY_s8KA*!|2g`h|D$v-j-n^%z7FX|`Dgpk1efi@OW-cM z1i$Gb(sp%ErVBaJK7h_Gaq^{I0G;Co@;OeRyNfR3J6CZRs(Y34uUG%g>fQmDdVCTt z^|+UG$oZMNzorX$hcAIkz3IZPN5Wm%jCL7r9_|X#Vb?~c5BeRVuH+N^P4q)d??Kfq;w@n_Ou7ik}9N7$40elA?vdxiR$@ARJlm;FR1UD$b$E{w5G z-A!=WZ=42~{l+xuu*W>2D`CXTh=Y4A>9G4vq&K7fk`DJa(qY%7)bmR1@819({cy$Z za3%lYZXz9-zf1YZGU?|pq>J=GgrwtYy4#}Y-EddF%(M%6xF07SdfY`iGWQ<1dAPJM z^+45&R+daZl!yCV`a4a3n};jq^1FN9_~G)Biy}k zSN3VU2KU=a{{iVJ?>~Xda{n;>{ZaHA`r-bL{xv$@h5Kjtmt7M@f2WK1|4H{kGyYw6 zDSjjWR<1SeU>+{pKgR!jy3qSbx(LT(YK)iVjPVxfM||z{!{z*MWyOpi^Khk|M7%wq zGyEELrQL+FIF4TSdedJr{cJy({z=jiKikih1E$~1!##s^Gut^RXqbG~=`-H4}cx zX^Puw%GVOOhZ8?($`}1d(!bfvhn8%Ku)+*K=pA%VG5sk05Giy76&GEC=yksOQAHx^ z$MQn_2k1i2d(?j)UFiEw_5YME^nOVFkI{wxOJEO%=eh^eag6#`s@taS@#>b;?NxU` z-Kx49)vc*Jq3-GGzFOTg)%`bhInSjYuT%F5b+1wPMs;sh_hagQQr$19dp})d>JQZa zAl;==^oaWZrtW^gFuud+Hbl|$)c<02+te-5ZH%I|>K{{gi@L8?_iVbrU9A2$s{a=C zzmM(#QS>qOe@5N=)%~IJf2ID%)&EcR?_Y1iKa(!>Zc_gW^`AiZFw`UU539S0?z2%} z)W1vJbJV>|-5b<>r@FV(eJ;jP>i?p;-==#6+7m{k8}bziOSzbXH9>c2+)Z&CmI)c*Au0+47 z{=cfbG-v3C(A|o0g8G-MpX<*{S|eHKC%>Qmb{ykWeog(StN$#zsLXrSf4RChDE&6| ze^~vWRR4W+kB_1U)cREe^m(xW%ou`ZTS=xQH%O}&1_PCEO+TmfksQVk} zE;Zv}wo}{bM_jw;qCMF|7xn&Jx`^yzx~R8T(nUSJo-XR=o9P~9=1;7TAEY1k?c;P& zFYcj>a{fiSDBt(f?TDi9(M7rZ8C{gaU(-c-;~({dYT`mA(eprc51|WvpP}xv=>i0m z#BHJr{h^Y$%jqH=E7Z-?MIfjoE>w|pouKZ?bRn!u-9EZVCx#T_4%3D3QFS-aMY=bs zdm3G&f2+FN>B0`v>h7Y8$miAFLl<^ATitW%LaFoBy_hcSbeXzW(uKXQR`+_ku-i@Q z+HzvuXOljm_JLi+9`K7jmTEfTmvkb~X^I#98&xmx&m|ppmH6P7_+Z!D75{O%i0pp# zf157K%cJW51KlIg&aj_E_yg&}u3QhKpW{2)^X-hz1LaKpkJ5!*m%=6t-$)mBZBqYHbYa(V*ofuvU+Loi@6v^x zT61t=pBw4IE-wd-*fcF zaKEay<8)plo2+fwE-r3abvay!Pi zOzoVU@wF2F`thmxp|zd!JEO^&Y1~hRTbtR1TX`-5*jR7sHSe6kIaNG@aV&17Z8=@; ze+}d7LlI-G!uVAfZs)dWPIQ`tD7i1gluXay2ApS2eBCJUPvVs8ga{nukGb(PCTd&x z$((3%-DWR<*G)2d^XCO31b_7poOHyb{3j-HZbWmvP6de@M zQ)EZ*A}gjMD@tT3dQs^3NJqlrpisFa*%7?R3P9Q3$zIGP&2R6U@m0tK1z!z8uJT`` zHpK;n^kkqE0bg6AqWL5c6oyaHK>3 zZwwdY4_$unhhc{N4M1KJhv7o}2e$li9`55_3F^(tqhoQKfx{3Z{`=~NB{FB20)=t% ze+)^Y!GydgK>Hy6w|`dNnuNS3Jb6r;m3IV`^Ywc#JXcy_aIL&&gYN6MVx!ZKdRckz zO6Ye21Z-vm`e)_6J)z(KRmb^-Xie3&bRv<);^DRv1F6TwY{2m{xYHAu9JMP%Jv z3$>fo-HQq~h=?``S%XTHV$~%U6}#xdMI)g8hv8|hsqwP3s(GgpZ-#xnJG7}^*$0U?IaF59GU7czvVT_@ zyqf#?{zb(r?Az?0o`d6fhxe65KO*s#lgxV~`8UM6Q)_sec@xRMX?QG0D_$2{^IoMv z^zRtF?S`>6Pw%0ke{=A3J;*=3>o)JJ0?^^P25#HyB#9Ki!@4MvRapJUS z7+dqcN&Za_m({mC@g5Gm_Y&_Y*W@P+yyJqpA!*+)DcGiqLU;{D9?LR0+o-fyWpVLN}| zUi^4msd<0kKpgKCPWJiG&i>s@;~jmmtllNazuv&p`^U(8eOc?-%}De9O}s^Tj^AT} zNAZ2Ubq}_lMKh1^-#6YVUbw!CNdB!3yl(Q*zq{~eRnRt_2eOr<7{3(<%j#KDyfq~0 zG;isBbmYxE)H>g(stmU(n?MwKj~p(mZv*13C7JgddGXwC4qmv;RCQDr%PEYyYv>qC zZK{)<;QETX>*y$|&AQ&C`w<*nYr>i$E=Pi@wXBwZJiS&X}NJxSM%j!UUF>vpF&uSVAtmw!_H9!JMdZRWj}belW$ zyEN$r(CNNmGjBS@Z?FSzN79X;Yl`3P6qoT1x-&`l7CPOBZ1(TjqJ&uqA=(XF0p;ACeSs_yW>fB z3|-Saq;tc*%J-A#bkDOnJ4nWP)h%N&r~fL+=DO#}#OvcA*N47k>3+F~gj-eIKV|DS zWQz+dZtf`4HrHKXKk`OL%j(;Ncza3aeM#PJ$QI{%THipFm$~i>@{u=qg!Lqq;ti3^ z)Aw(;p}5%5%ijp-m+RW*x*O~(uQj;rE)&TXj-^d?N~hafmv80)X)Ij8=6#4D`gigu z@uN)sY5uT(ZW$~vnZFAk5>_^^o;2ogOyr;;kjmI(7-8>Ef-bJ$lP)Ob)-1*H01KAq!Y-%leYpAUFi;f~|AM@{^ZN&Q*i_ zLTRZm?*(C=%jKHatoT9xB=lL|EBnECqmiFHHFj`f^uSVnZm|{2`y$#8vq@Or*is*2SIwe!gSDd|eDo9d3b)q9iDS#!JaJ>u!; zI0qJ!9L#Oau#Gt~&XKN!ze`1M?h!?Jn}$E_?{0gjII=#0*ClXo0%sDqCxQEg8FUXD zQGZJU?>2UDmct1=X2cJmUl|N#uq=V!^ut2MtCwqjAhQaciBaLIKOZgzO(`__3gnCz zlqbAaEiC8=#jL$uFE+iD*q?+3ApPsee{ zqx>+Y=m%DLAXOgNS)X;pZC<+)dL_s(h-5`;p}!Q0TlPXv+)}eCZs6D4YP}k|Ya5Pi zKewsk%YLb~P^eYwezZTr)%xW{q*gw!R0{m7rq>I+`ht&wQ2@?kdbM+WcFOg_FsPPV zA%g#&b|92@g6)$IMWVgx`;vo&x_%YEi`$DB&iPMq2jYBYUH!h{YQGNNLB5RRVA5A4 z=6Bl&#wS$FdZ)lIPcnSQBN=(|92R7^W#P@}D`Hq;6bsJ#42dWGM z3{Z(l`)a^uzMV+G889F1I^T8ZdJj~Y24IXP?Rx-&*6Aw(nEmo>qcRm1h8_sl=r7agP~y2MJ#2AV?ke9kVX< A=l}o! literal 0 HcmV?d00001 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/GDCartReader.ind b/CartReaderApp/Output/Debug/Obj/GDCartReader/GDCartReader.ind new file mode 100644 index 0000000..e354a47 --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/GDCartReader.ind @@ -0,0 +1,28 @@ +"Output/Debug/Obj/GDCartReader/system_gd32f10x.o" +"Output/Debug/Obj/GDCartReader/main.o" +"Output/Debug/Obj/GDCartReader/diskio.o" +"Output/Debug/Obj/GDCartReader/ff.o" +"Output/Debug/Obj/GDCartReader/ffsystem.o" +"Output/Debug/Obj/GDCartReader/ffunicode.o" +"Output/Debug/Obj/GDCartReader/sdcard.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_gpio.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_rcu.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_i2c.o" +"Output/Debug/Obj/GDCartReader/Display.o" +"Output/Debug/Obj/GDCartReader/Operate.o" +"Output/Debug/Obj/GDCartReader/Common.o" +"Output/Debug/Obj/GDCartReader/GB.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_sdio.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_dma.o" +"Output/Debug/Obj/GDCartReader/flashparam.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_fmc.o" +"Output/Debug/Obj/GDCartReader/GBA.o" +"Output/Debug/Obj/GDCartReader/GBM.o" +"Output/Debug/Obj/GDCartReader/SEGGER_THUMB_Startup.o" +"Output/Debug/Obj/GDCartReader/GD32F10x_Startup.o" +"Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.o" +"C:/Users/HDR/AppData/Local/SEGGER/SEGGER Embedded Studio/v3/packages/libraries/libcxx/lib/libcxx_noexcept_v7m_t_le_eabi_balanced.a" +"D:/SEGGER/SEGGER Embedded Studio for ARM 6.22a/lib/libc_v7m_t_le_eabi_balanced.a" +"D:/SEGGER/SEGGER Embedded Studio for ARM 6.22a/lib/SEGGER_crtinit_v7m_little.o" +"D:/SEGGER/SEGGER Embedded Studio for ARM 6.22a/lib/prinops_rtt_v7m_little.a" +"D:/SEGGER/SEGGER Embedded Studio for ARM 6.22a/lib/heapops_basic_v7m_little.a" diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.d new file mode 100644 index 0000000..d2d5e3e --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.d @@ -0,0 +1,47 @@ +Output/Debug/Obj/GDCartReader/Operate.o: \ + D:\OneDrive\Dokumenter\CartReaderApp\Operate.c \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\core_cm3.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdint.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\__config \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdint.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_ConfDefaults.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Conf.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Arm_Conf.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_version.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_compiler.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_gcc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\system_gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_libopt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\RTE_Components.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_adc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_can.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_crc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dac.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dbg.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dma.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_exti.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fmc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fwdgt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_gpio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_i2c.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_misc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_pmu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rcu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rtc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_spi.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_timer.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_usart.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_wwdgt.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdio.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdio.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdlib.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdlib.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\string.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\string.h \ + D:\OneDrive\Dokumenter\CartReaderApp\Common.h \ + D:\OneDrive\Dokumenter\CartReaderApp\Display.h \ + D:\OneDrive\Dokumenter\CartReaderApp\Operate.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ff.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ffconf.h diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/Operate.o new file mode 100644 index 0000000000000000000000000000000000000000..6d459ddb1b0a6556fc0e8d67ed13b2fe7b2e2b7f GIT binary patch literal 154316 zcmdSC37A|(xjufnXA-gihUF@wTy4T)2S=FhSpx|4nrYHAJ#_bE5)|8zOvp$`a!R1zN$J^bxxh0-21!FeV#v>o^$Gb zzpuWk`f52v=zZC+79< z5}zJB_kdmBfA8P#$1XnbUGG2&ZQbR=MGA@Ec>LX&cPBB^TkO4cfVX@WNfWkq^F*&b zL03vDz6;&$bo(R@jc*cvDeThC6Q`Y?o%lHYJs@#t;9?u zy~qFlD&2kc#6F>-o190{+##raL0{r4*Et^L9Z)y|l+%PTK@&uLX9^MSxp(LN!eG|oV z>E_*0`X5EhqS$5BdqOxu%7hcr;$557uQJF=%- z|5xveUs~rSV#xXTVrw_Q8{6jXhrG&PF8D9f`lXHAynPVoRt)JXd35&~_RR_FCTvLF zPWOBJ_kFity7?gF0fkOj=WRL&HkZ76U-z~no!;viZ^A|{+pEEd(bd|`J0MLvcyn)8 zC8LmuR}(%18g`gwU~vj1i3!Oao}iq2H%4(#374RWW7{6F#gL-S+atb7%Uhv?QucoA zpiQxam%IdJ@op@Z+>dkk-B`=I7UWS0`I>%?G_-6y@WZCfUwiwb$diLSZym+$Z4h=( zMQl?Yc9Tu-#U>-psUf>t;LR=Te)4J@b`VS1bt!Dy2IW9?_4>b_e&nN@_iKH0bKj0$ z;?d1rxaw$qar1sVs$8J>>EDZ+`*!nonc~;hDI16lR{UQ4i|w-Aa&^7k^0k{6#Bmn` z65GT%d*Dr^17TbrVqAvmju48wqjl5O8?T|ewVS`(aw-0K$qaJu3-O(9rxYxR@3-ki zBhHEEF5G3S_1-^XiH+AxUjM<=r1c~_@#3v6dU11yZ$DZL4^lhE{t-_RK566R4Y=Pe zmWKVifyq}LyLoRXbHap;zyAGpZ!PxLTK`)e`~T!)e{$9r1Hm0oL+C)1gX9Y*KK-Lc*kR}Ah)(x zxi4GSowvE#<90-O!!tK2M(aAIjdHsc_35zbDkS#$iLrw>x9&`c(0=(V+Xx?&rQ2dj zQ*Crhe|?jR&s!5u?)|)qVbYpd-=yVUV(WEVZ(rt~px%IkVy-Ka_g7{YK{ldc@MP4k3CvGDDBagfP6{S74 zCYFjV_txkbPS0-jqPl}s9g~(H@`|WQq;=}Lsj#p61tssTx%c&Zy{Q`~<+tji8gY8| zW6w?fAJ|To#X6|Iws6a`Al|ZRD$+A`-2<|g9HDLIn!XKMnd9$1e00_9(PKWj`@$(+ zVa?deRiEB{<)Pc)dc}&wClk9bl(+lupBOkIv2bifqB2_tDN;fPc}@ST4tQ$7fhmTeIV%G7R_-+B-Jv&~-KcCqaz9=MZ$4`}neZS5ek#q&O} z7Yx=s5jd^Oi%UT=X*-+q@ixKQeuBl?VJd6#yd8b%2_*d=mh^;=w^6ho^ktdzp(#ia zC2l*6R(IMV#wkUb+O|P>X$MMRA8tPkWP(WTM>yM%89V!VfE(|DNyt$y##SEpZteBT zLR}ar-1r#?*bo0=`@|-+5ZKa>pVm5lw(=$n;LpT!@iQs5)rItDtN3;Jb0q%7(n^3x zEO0#kF7)EJB4j;rIzt?wcPq3@qVfAxNVf`kRE6}Ykf&8huL^llh4iVA->Hz9GGx-n zkp5VFzu4q|0P-f&LqW`&_$IC=#RS;0V{GyS%B9Iu37q^P{Kh9w$8XEzz46;Rc^~{v zm|Vc`#L2_>-D+|Jzmp~}#_#0GU%>B_$!qaDb@FBS-Fou%_}ymmJ^0;r@?-e@z~pD~ zJ8kmI_}y;uyZGIH@-}z^*}ECo$d~ice}kycb}7qNVLFL zV+$yA!2H+;=x!llJ79F@9f*Gj{`gBIQX>W44macHbArCp&P4wLS&IUppLGCYhaOAx zH`&gX^_yEhN~||2#nW2Wzt=LIZr|egTh_nZ@^QL-Ti!kt>!jOvj-Yh3tbfScmu~<3 zMREI6FHg7cGC96}r+&J7?+k!D^g#Q)6hnOdj-N-3js272+cCa=hoy8kA@;+qaK8i9 z;uQkeniG|Xk@Y)FL-=P!_*53yRS2NDL8!+;hn`Hy+AsFOmi2c{I-a!d7o$jUf7_%p z#Xb4gjxFnNnRFrDAHd3Sf8(UD(fxt`{Z?1geLhAB1AhEgH`09}MrpzQ`x9@a`yv~G z``@Bf*3EQZQun`U{TJOI#P=WSfzsGOED2jbl%wm< z#m=Pb0lGdJ%?~o*K%^~;Kqz~mm2>7SHrCtWOduB!5?|l7HA!3Xs1|Zt_aC0Vp28s?HA0T}rhFBmi;$?6 zw|DAj`E6STalDD3mfv}8vk`m}GN$E~X>CL5`qdrV=HU7q3jh61ZRCSD(e)p8Zu>OC zzem@vCE7l#_;0j(Q#M0k4goDc*=btK_u6WZDNMxe_r10+;d&0q+}7GQ9hBL0efz|= zkE`oDwrXovy6&9R)`{zH66db1y$J_F$&_LI?2OQs8$a9^Z#lVb4m7fsQ@pkX>iX1J z+hTQnTD)zUx<0+7ZMC{Sqg7jT=ESzk5YCpJHL2}tb$#}fwi|H0k}O!ib=#e|<{Y|c zTHC|w`r;kio>teF?bP<1y1r`XwwKlQHxq4tz%}RMw{~lLPhDS~YU71G6= zYdhMesp}iM+IGVAMzY~MeI7T+pM_9Mddhr+ZKTW2DNAs<4wtRZPCNmBwu(y~x~#QO)_sIJS1;~y_`a04)d`%X^utcHwYT#g5MM*sjM&c4 zA^i7r9glr@r&!B-oKP;N&0gER05~K6*4p-fy8ipbwnuQyTK_Sr?I~O*;r%WDn%wph zt`DH=e}53R;eun_#+yP;{Q|(2F%A}1#=I#b;H1fCfA!&Hyya2t!;g7wA3!)q^0R4e zJF4r)w`%~&2d>%Af3aKJUbyDmeB40z8nt6q*2fkc zkz2NO(b(bOx7-?^7)vx7xk|Or$PIKh`Wv$fgDA6{*D`&p*asTrQZ_dM;ueIgaRs=R`g;}!-)kd{mHuyVE4nWYc-IPEW#R3}!i;aAtm>DkD zYZTQsQv)<+0BGAf0A#8ILL7DLz1aR1GCWu`4GuSoLue$3h4i8F82W4V zYH4s*BU2k73?5`)*?ILsqf*Tms)^($sfsSO;Nihcxio9AkZ)8+8ls#iV~?^(^?5_^ z#(JU?_8n~@nS36tz##>Oj5YRtD;kVe~gPFlbu~Hq#)a|U-;f+$EQ1D`R+H%Em9l2F5rH6xKc zHnC*c(!-IORV(JNT-=U}#bf*8cmB#F8;xXQ`pP3$FIke%*bKq|C08$9Id=Hc(SOigvnpMt}$1!Wkd}oe*0y!YeqO1Q$ zv%YPcH5@KiRRH4@@aq4w0=~sza?_k_YTEx=0pH~?t1&mZru`UH54-6f?&+El2i391Uu z*h1rpP&e>vTcqBP{w|L?ylOEzxP@NqbsHZnV7%8T!J5GW)$~=XR*W6CdetbJBINJV zWn)X1j4j0-W$Zh)Xr?@pnOD=YiW*ikf63AFk6GDJ1k&}ct*cr%c(_nQ7pn|WTrc*% z%^VuemN96e{xW3l(WCQ^5T@SRVl~2kE1xSLLT&VO0l0ifW4JRd%EIVl!KU!W%K3{% zrS;%=v6EWe+G(ItD-Gc3fqJqtB3Q!*qjzl#AB@2!(bh)Ls)ae+okYMxv-|7W27a?V znA{jaLsTOT#56*>E{`A$ROXB{@KYz!RS~38zQhJy7lG%phct58LC)WsA~^MIwo%Xa zQ#9X?pbVoYt<7ai?v9{ji@8R&Si--#r0GXdwDR0WwJ?h)KaHT2D;QqY`b$NQ?{S+| z%)lXY6%6ER7)IccNccyfimXJ19b1OMS91DZi{`Ifwb%5-+!^HIPutptYXyw-Fxso2 zx=~i5=wGxcJhFnj(fE2`s9czvSVTjtL?gHC$mL5$*Lbl_4uPI7Ltx>u)fmAV5--~l z<$MM82hR_F6g(ISiT&Od!&6HU%|y1E8O-%Jiq!%%AY&+N|70`gWbnjMqrsXQSsyjO zu>^}>UhJj<}X~h!sqHBFZOSnKY~GV zLUqNcs}roc$^+BJP`yfpnLKLQ*uun~Gq_Tp>>^eR14Kkwood5}@c28|U&zfCZecVV z2G&@#dg%gIf0|3aG?*{UjgV(d%b#w`bM!-*dc9DUerXtBf?C5FwuWMf#-->Sl9~3A zb_|cLeDYBtpJ`8wv?p?K>oXl%>X}kGIT)pdP@!ee*K(GvrJ8S0u_ZGBD`dE|0kNNL z%Z*f}T>D5sQX<-V2(JwZ4`IrtgxMVtITA1!R%3Fsy7t5%G+r{%%Cs7uxS$OWKnXk+ zUFQVB$z-ckL4?=KdoT9wD0*>-duFa9VB^+{T^~h8p_;03>&0$}Bx54NumjTuUhF$j zWcb${lTG(t?8YcM9CN^=)4dnFIf~xM7cIl--iv)Vl3u7*P3;ZbuYkrF^{~qZ{t4Kceob`ynMen*j|D zh1f?`=wJn7GZ^zR6~G+@2_j8GvuM^SvQJtD)k^5Tvhy%1L2C^aDGNnkltb@UDb^c8 zB^ccnLrfcqUNBd|P%$%$^?b@=mE?p6&1TTR3~CBaf^4HCr{v^_u^ke(+Jf;U;J51H z0gHOB;EYBIEbh?+XisWjDCev2Vrwk*C19A^^F;4!1#j2D1jk? zV=Z8~PfKEAX@wWF=TS<13Guw15a<^z>2iTaAGXC`axn}8z1Wu>3^I^YcDy}zA!E>1 zda)B+4A{xyC)yw~tdXOx3v((b*$@qx1+?p~t3%U6C?X%F*6EahumP_o{4^V|w zuxMQTMutbr^y9@|aEfpv5)cwC6Nau%2~HBVWWRO8+-zd>nJdwn1QCDlBy!H=%9$F? z(#79!a{L5g13`0wBgOGQIz>e5>l+xFAe4C-piw&hZ0j2+4VDHlb|_bJnKGBkdjSGw zRWVw_{63XhvTx5+N4krDR%0OY51X8+7v`4e;bj;-4kCNshOtC|6)H@T7im;qE(|7m zP$BNIAGEV$s}|sSroIf-IW$ByLG#J@fe0PNW;y_xIv$JAfgYfV9cVVhoB=pq>=zL_ zip_KYG<7_0>kt#U7_GO@3k(t^A_j+uzCDqgM^At+I2AN%^9Jkv1uDioS~q(p0uP1* z6-*8wyAE!zwhy-FXC!zM_Ta>)5`&4o6Zw4;RlfXW;@~}TW6hkNRRM&c;#7GTbcShn$jj`8;WJYE(P()HW8denzSNg-yV7 zQ=w79(>vM_8Pyh(09a&f98#!Os7758$t;$KYyFLS#ixGTruy@&!)VAFbE$sZ z7{Q=9Fu}Mbf2irQxwE>s;jrFud}DCx6Jez5(M3Vyx5)y zN5v9CGt=qL&fauKXHQ>uS8s23Uq^3Qh<`%TAnqh#EqxdiB!nX9M)q{mJ=u+bp6>2W z1oco5S%@H=3&R+$_Yy*807>9kaz zRl$(;wRo`{sbo6BwR-GBL^y^ocv2GCj$6L)VuL0kv~hyGSj9(VN#I^wd9fi26JjFW zSmO6FSunU4SJ*0RVM0!14tBcwm@FIIi!0i}qwJR%Cb10a@-QXTPn=A+Ov4M7J^{kMJQQA5~5*@j(&7f(ks+2OYV1w0eM~ zx`^0BA~EIQhui5o#&1z1nH=B?xCUR<5vAi;6>O_Gj_hH&OrbJ#ZHym4-A&0k5`>J^ zlw25twmv+jufZ^24H~iy6o5R^AsZvWprkRrXXBj*xgI~_6zhe+NbB5ilZZW|w@2+Ty9ui|vh0zMiRL?N|aUSIu8Fwg8h`w8HJh(mu}9qW(&>wccl~WMe-~ zKnEsI{pTdIB)FQsVszE&6<8~zF>zm`!O0BJRDv;M+=$RK`pezO)z$~VS0Hs zvMC_HeExzXMi;gx<}cyRKuPTS0X?JW$b;%IrlnV|TCsY;sx1>n*^9Uu!-F&nvwA5O zJhw~~<*9d~QA2C^YwXP@aujvl#e#WD2c^i51r4OJ_%s+j?* zr@TV8;K-F@D;ua|H0^#Z2=tsr>vgpuL|9t|SFbNyjs-57-m0TIVC{LJM8+^y9y@Xj zf;R)5gB5%%yw_>pC*V0)v|qMjr5F2N0Bc}HwOYy!*Llg!tiDt)+Y@rNA8Y+b2^G^h zC!U8I(MVBaM00D{c#vE%gLmmAa3N+)H3ge86$4w-1mi_Z2~C?Qiek_t>0o6jl$nX- z^rg#|Q!c&+#z?W`VjR6_ERf~zFj?$_HOmI-j$SkxApZ^IT49b$^UBeqDDF2f-Ibj^ zRHquYdX#)8p!BdKmaj@o-&Md~j5mqYGW8^O*QVO>gDHeYV|2}`QEX(S9Tl`!Qf{{g z09R`#ogh;+roX(KF%ZehmDn+%cTcLFlQcB}4ZK;hgbe5Cc#k9@tc>sXU27LgTTUmRZ($gxXQh#7+> zLFO{SFmmj26%vwBId+9$7&&&O3JJ-m9Q%e~7&&&83JJ-m9Q&4F7&&&e3JJ-m9J^L9 zO1V-4OBZR8+1<#u>jD64=oCK0Ibw<+W3Ctcy3o)C4L7KeP~=R4%#BtYDHcspq1_Y! zSVPB}PAWL~uo*u~LDzSsh*9*n=pd=UFZu`KSYxkOE7YlB!@7tW5&t9*ZkisFK&(IY z`AhLai6|{fz(av>Uk_wnkMj#CHM~hgQ`)6G$4*jjgpi=!=eN{y*+yjYHa6A1?C(J5jqfL405Qk}3YgyJiM`=z|D|?L# zbt<-mq4&C=WUef|j9TJvyU-?jr7-l~5Rk0<_L2vD$Aw1gRl?AFQ&7^kmm0I1U1$@% z+TL5VBzhGrITr?oWOe9-;#-}tQ?o4&lfQ4v!Yk;tBd*D5sJ_h!N2=E1P<@A%r7<`a zuF{<%-FLciR<1fo*-Eh61(YC$yR`-^P}VEi3@tcPO{S5@JucK~x+M&~_i9Os6nnW! zbA)25Yxg-(%WUX)m|1i9(IZ=~V0#G}Mt=K92+^|ivZ!vs0@Bd>ILl`6`e&6NY-Shc zi3F45KH&hRYFlqe9-4n17N$89t^KJ8!uT;LJ&5HOh7$6J%wVBb6LC-#`K1%)7>q_p zm~V+g^|OX7y1`l13f{=2Jf}A3ITy%!dv$gTy{0VGzFkVn7lM1Ad$e}x$}cpV-DD}z** zS(>`ER~?uyD=TnF5<35&<;sP^P#*vMTz$=fIdz(n(D{ZfhuxF38HSq#So)?Djnu29 zq4_PA%~1~2XUnbRa4vfEcsmRQbq3|2@Xx+fw%A`pmpn^6HIcji#eun0T9VNDt}jPR ztR0PdRb(j@(|ZogrPGpx&cFF`ayrk~N`24Yov2H1KpL9=sby<;^Sn?W@coMX{$Fm` zsXHJKNU=cAh;t4s6Yf~8}hX| z*d$Y?Qp8Rfu65L^uZ?23qX;TN9A7ass3e-Pkbkd>=D6btD?&`?8d_9Z&6vpN&x_`` zV+t!mOy?U~lxvwWQRi|&G{+rNSP^2{U}!-HgmsYF=wd|qP(|D5#@#X43ZVUBLz?Wb z&GD5}-*Sl)cI&ppq53jIcA$a@;0pDPY&g}u%iXYBw=EClR~XX5<&ImGeKcE5nuQlYA>nin)qJmY33>Z=bZw-rG7Em~ZqUn-~M z-|9q7Nc_BD^as=8jJ5gw#ET)bOB&5>2AxW!@jS1l<>r(yaYlVilNeK! zz#lr~oDrH@A@^e~SK7k(Iw-#T9ddqrz#r6jw&->Z+as~Nl3nAcEAiv_{1An3ge%&nTo&Tg>X~HQ_z64=LGT5apff^CFC>4ZCH2k$yM~9N?4u}u?GkiGY3YUJZ?xoK zB_|%1bbAttja~JnfQ&ODr44cXR`W}PbB4qUOp{31Ie!-va>nB8Lo}~i5;W%`rmUL8 z#Qykuhg?)-zE;HdnwA^Jcpuwku^(VO4`GLV-6`pe)7Few|H!ia)c@rRS?sZ%BgTU~ zhy5o97*rb)h0?dR9B%*;&n}(R*}oHloC>uV)cr-v&|FMCtCx2E8it(u3^^#=%u;zu zG)^1BYv0%hLG^+jd;aFYf+|Cj(D@H7hljR0-t8xiG(7!h2yyDuQqcBqEt4O?J_@|7 zMC#}n=KV0_)Mv;+;RzFHoWzFH#sbzxW7`u0;Z9Xb0(wr?{QgY2E+0#&WKRhpzAngp z4d_y_;sLM53K?xEs|^khuq7maMI?juU>J*GCNw=fK_2JU$knT5EY#!0tYSGMCfRu~ z{74kTH;DRnaVDHY3F3GxprJgwRvD%jd{rU*EQ$~vg{cEkJYj2~he+g#UoKC&;Yjs{ zJd{6WOJjzGPO2c|DW{)yqP}X#KjSlSLK)6IEASsB|Ev>bdGWBJ*5Y6Ai5Rapa>Las z7B+n|UUZ@kHJf}QW6Pm*N~tXm)mQq$v+6aR zha#2&c*nrkLl7&K8y1vCLk#M!@@49^A#9{uFn`G?XBs`ne$xfIblS2|d$liF8>y%n zOX@GK2?DO1)G|wBEP>i2>6;HbsK|a^vT&{R*hyBEZ|b3wA>y-d^uEZ za)W>rwB6~;K-1{Tm8^^sb5{^>>C!S#b&oGW{xrIDm0t&c5JG%qkb7++%1ZPv=;vq~ zr$`Yw;_G3IMMW=%RJlZ<^G!ppQm^KQW{dVTO>=C2bbwN;TO-q*%F85v$QNCMI}^D!hPY{E;K^3B@WH!XxX7$Ekj$uR5MKe_Z24`q1#pf zNWmTLxnWGIm3^)6L53)FepSoC;gw2qjPpZCgq>Or`YzN`LlrEnV2Og; zOlmAPI54SG4l#TqO<8EY$d<%3klLR_RqtXa+C;OKhwe+YG*W_QNR=4Xyvtmmkq?l+ zLQsZE)Plj&R6|DMS2{3dmwXtyiYf3Tl9PYbF#VejEFgXjQ@C1^0{=p(xHbY0sJWhL zXgf%W{G(Ld;J^anH!+1;HIi3E30_)8P(t=sak-E0#LfyCW$oiH=xoMTqDJ5n4LL zxQAMgdm|}Z5)msxL_c(B;a4uHxVSC(Q4~W)W3(uKu5o&l8pLwHt)o0RJEiIsH7*ah z;U>jmXn^_$ZF!Cz$70Jl8ycVeG?LLI5?c@AdDzy1213U|z0e~Oc#}9x9f;vETSEb_ z?BHNYoRmPtL9OP`q6kgmu(TkOCu|*lsi_+JWCSjwkag|fTh)hfgnN!3W($1!hnU`^ zrtWpAoJfU4Y?E-*r|B@M-AYuVx|GI#mtLQ$Eac&!VJP;5y< z@mCDlC8ec9E0!J3dZ`%JIWR*lq|cKKOb^soj2&KD%Cb~tz8XRdNj%YrEVSgH?*c7V zSX#sv8pP8Tb<7urp$LtJBvf9+a`Xs8-(^sLm9t*#L=DBzaG8j?RIGI11&RT@$)?wv z`Q@0)BM62Xm136?L~%tx!(n*lU9fDmOg=x(T^UJ{(a4sRGuDsBQiO=UVQ9gQFgq>O z0bLbAh)PR938MH`K!arhz7>K2ZDY!L? zAQjQWJ@kCvO%ur?J-0;>Y&~}}tq6}wxxN3c2!f%;@cxhzn0ik@gH_N8_WmD4Qe-p% z?-$WniV)F#hL(WiCeq|MKa3zmr6r&QQT#Zd!7@R3|NW7asI<7e|0jkPv`U8eKNv)$ z+MxGy9x3mC$QIJx|8Nj!rcHVOqqdOt{>OrVsSVlp1mnv4JHp=oWE4RvlHUK6o2I@0 z=_rD&=NU=k#ifB|3&rFyRi9@=h?JCLj29Tk)DEV`2djtZE`#5mc+rI#QOg<=7Dpca z+K?TPLl zy;oeI)GXg3pk`a-h$#)lzc*wvE00;4TXKXPiqN3<4^A}7XiFZtUpJ%&SMYj8Y3cIS zdfNAmD1wSXj(Gp1c=U0gMs4+B^<$O`ccL!wEhj2fNDc2;oPqhDU$(;6K_&m^2;9)3 z{fe!ybRe;BOwKJ^F`6GeZ1v%dJnyN_XJ=V&!Mqv8P?7kr*hFhWM1KmYq0`c6A_j-^ z(%>vjCHGb{7Dp&&vV(Ei$`Ic>PEB|{6D1)dq*C~EQ`&ej8tM?`Umdz|2O^ORV(dXV)$y%fEs=iP=YwV>e8TIKPO|) zk0Njs^k$|Qzi%*kg#mg})@uv=6tyvm5n*gV35>lsqyhW*ktqj@9HAcnl1NIkSPV6Y z<}#-auyu^mA1dW4u^| z62$SXkcK%pkSjxzZ)JiA-xkT-Uqw7~5|7 z!Mh1(oVc_m#C4-f4{x@V`AB`&P0dK-#AfJ1bl-Jp%JuuN3{XRJOB2pGk!ekc>w7Le zv^!Rn8FgacZ$=s?HbWPpyWOQ}U_eF2izLyMaia3|AfmfmTIduWy;?`Ue|K}5A0agU zYzmzhoGzC0$wgzMOBT{$XLOhn&N)+u4B=oi5r#&dIf-3&O;E!zBe91O0IksX%PIJ@ zM?MXmqQ)t@Jgy>jghF+OM>rEz< zQqZeY=y}P2`0K?i^?M`R3_?dCUleNpFhy;M6tHjFCldH>aR*j*$gbC>@F^!Q3antt z>qu2r8euEROU9dE&{j|sgxnKK&onrv4F{OW{6JKHBt1;Qcg}oVY6ku%WiWB%UQVAU z@7Ydp-(s^tWa|}6Ck2$ZDaXN}d{+d&41m8w*$$jCU*Ud10RJ=PJ#Z=kh5Mxe{4cry zz|sQ>#nmBXGz2c5Dh`wxT{W~~Y}tyjRmaR)v26A7G5+3Z6olSeh|P)?b3jio(=E*u3XQDo)q)Nu#So0D3q-LYso<6y>{uLNB&7 zkh=|>nSsY`oXUg#VJh|tVAw|=A;9=zFpsl9sS%=ME$|ZAO^pr-?LPXfg` zse2d&Kp1+KB=$ikKAF(!lca=I-yf&XZL|6nqlcrnYqw%aia^rJ92rZyRKUtvfXsX_ zj(zqxv|cp-IyNMxkNPLH?_m8jUZaC2!=$v}FzKOqMRgLU9vtOWEJ7FQc{q-lD2Ez! zl3k>VIFG~&a|iGROYTEWMHwTmpT#pn*%WPmb`ZIXl-eFAVmg{g9W6)uL_E{qOk;|& zgY0{fh@BA{dq^GrBjVF>d_xHJRHVeVSMc1jDLi{rq@YI6&4s6FSw^YK!;dAhnK^95+l=9^|#w@lWH zf~q~zZ7-DtmBX*%IeaC(St;~L8-5+fTQSX<(u7U%p@HG1%w8G$Z{m1mwmDPA{@Zw_ zSgL5M;k7|``5o#=T@4G7dKXn{eI-6?Xgsa5U|)@A@`kAnrD>`3wRkPBm0I;CXzJ_n z{6Iz}%E?p}>y3Cd=jW-DIaB88oAILGLfExd#ZGMnmHi*%xvHNer_QWo{wZD<>>h`g1apX6j5R9{RXi^b}cYlO}XwiheN2qk+YlHYY35pC~NQ}ne`(Ern zo8Se=f3yi+1^%%n_`nc8v>1)U`@PsMP4Fzfmo~i#K9Iq|^3ga|1e`1%O@OQ5X!&TI zst3M35>3E>C0B%zACIP>k;7L>qH%79aRz%d1I-COQ4)=#YIw0vG{NhzpgkH#@uG@)LDndxY}R?gvjGo8_d$`IV8D;h7& z!Fy&Hif+3@EGets8mdE7_x6mp#y*Mbj)ZClks-KD;XGv3Fj4~}8^OI1m<~WRN}zTp zO#(EbgfZp<9272wxAI0bQbg+{TCQI1h@|l$16`7qilp%?-rXE2wwTwW_2nqq9-kPg z5t9QT_7bs#hm1&tDK@ZA@uKyyg)gj!bNtjoV++BGZbOq7mrro><80HP0a2@@PH9q6~SEy9-?5XWr#4>k7XS3T-4D{;K4qK zcuT^bZiH9;a9AnBdk|jp!wVIhtSkh20n~i}=lD~q=nGfFe&9&HCM=qXU~Cwd7L{@t zkyy%u5kEMOLr4WZMcFXd1Z09!lo9hx0B@v;l%+b`QLQfVbC?b-XGP2i zUEqgSYdGUk02J{;AHZ0W>6EvlIuxIfqX;>#7Wu&i^d_8%wPY&Yo}$t|+yDzIBgy{7 z1|YK@QoSOp#tg6^%Oy<(_IV$ujo|#%x=0G8@CXB``Uqw35+AA8&>6{$r(`Z8gkBM< z&&7slkzKW9M>|QaAdFh#x%^8J5yUB8O&GO;{9{3D1cc@Nk$joW^QDd@2(8^*`e7>w zqD(qYA{~vYtSV_3K^A_Q5Hwcw&k{L4<|Bp(WyDDWp=JT5(;r`uee_hux!Dknhi^X> z%V`FR7*f?dzD~?(PxZ8SlK!)p!G{G)e7{TZ30FrBL>P5S8R4WEK(p;RZ$%$&~=U{C#E zgSN$U1gx`$55;d_5XXrWFx1I6a+vQM#Odgn;d(_A(Y9dDSs20%fFFspgIj_ocJz=P zmvB_PGaqkq7ZSn-YEQV`zLep7X1Gl2@WW*~b_1U?Etg@AZ=VV=g{kl^+Y;ew1$_m5 zSjUK&s>J15I24g@3*I~`S4OZ~hrdW~Xdrj~+J8$!4T?+~sH$AiM1#pCU%pavgE?hV zsgwD7m>QW7>U+M?gda4Un$D{<-_JU=sos^{)L&dJW$GDmvMcuD_tWZ$KNU)AO5(p^ z(60&5%Y|ZHxn`=7&)_qM-)0J()?XSNu3#$9^z#&YY&^Mshuk;SKvQ1L1>Kih=O*sk zOYVCUMbgoL3i%4O$a`$W=s>mUpqy9gsYSoJDLrM<$$`Jyl%6)}L0*6+xzaw6dK_>Fx+Jd4NTxGP);%+#585O6UiXWLNpz8^Oj$ z0qqo0>DIsCMlfSF&2fQsUwXg+z6_I~iGvOFBk?+h741@cIwfbjorzkVSGDwIbf z1?uEXmPN#WO!0Lk@Jqp}FwjpG=5gXXxMK!4xX2pGUDN zp}JuJn~LhGW^5~4sGy#XVt0j-NyYSwXnG)-l;_Xlfldv$1N{pPyrZj42X!vbQCvJ^ zFBfPAt&tj{59oF$45d_Ao)7YR!#v9L7lOQ0XP8L&{bG=q?h6wstA7T>f>C z*xeo0Ncp=dNbGfJq^$i-keKeA8CFS-{M(p*vI!Le9&yGgg;!(#!_WUf`ZY+)=cE6D z^qVo7Fv5dUKvq04MH`OCM+S$R}E+6BY+%`VGSFL?^usUB!6L^ z-;y|qe4gT8Errbm_>{-@SU^2|;8_P_xd#65X9UH_P#VHBNq=`5(&(^l=Gm!#xT%n3*-HoWOs%shu{JlXg6>g{h>uOgzD2xGX!-Vz>-C$zr(dIN4%!*_Lvy zo?9^6yQf)Yi>f`fLVI|D9nmX4(us_4G`OkqTsLhJ5ub zn-a*?EK$z3DS>R|8OF6XC6KRq(sGVX31n=6C||KDft)Q8Wt~m2vsO%@ueT|7-r_AX zX!$Br&~IRpCOCs}zK?|`FfK5#@chL_AB~tCxyUAj^Oi>9fjs9)H({T z@o*&<-m#8?OOz&uszurkxsZ|~8lJpfg>$0@f0>s>6kc? zM>CacLlY`%UBgt-ibZp0vf5(=cbxK?$$GyaxLg~e^=4S_v4T5JiDg*tae_Nek%(K>PwI4IfR`cA&u*O|F7aBUoDIqi}ZXFv89ph(D3d1J1o{a%L&2uM(hRdzzQr3efqDE;1 z%l5P-9D)Nqv_S{uPGGgiX;kiO{y`QjlWm=-av;b7iTR2tzu zZ=B3)bugt<0F=t>G=M3dQjs-LLcgtnkzpB5DZO5YLz4t3u{UU-F7(sR4eWtSDv8@opk7R|0hGi$Y=8_9Af@z96U>wakRrS9GLd>gB4qU4 zCQ_?Qgk0wy6R8)|BHO6ke_$hIgha{qdrcJYqYF7Q{yr0_7bHTK|IkEgb%F4%x*r*c zzlT$8ti;Mb3S5*EzPuoFoJ_pmMntmGWZnZdBBLVneqtfznp8*jJs5z5zD~;8p9UbI zkhkAG!jPCp#f+5j2;O4|xkqhKIvIJzV>VI|c97fu%trD8p~8AnBPoiC4OCJ6+yPC zPTBpsAC6GD-?Xcp;(o(N>IIxkPMWaKw?}MmebWc=kwgWeBC@By#bB0R5gX1AiOt;P zeUx`^`&f;OfmQM@>vuH5wWgM&m0_~+&kCs>G$PDURsJsuDd$wz%GL0%D!it{sSGxA zI7W{RtUdTy_BTHi8}F!lChFgHpzfOf;RoUib==$5lAR*a|Ma1n52aHAdtYKh4ZLbT zC^uSnw3AOC&#zqKTjglDq)Fs`Cm6wg&U5CTED;{sH1b)lRFu2q6Q=|~nZD*B`c{LEKm$b*vB~!FE&tT0bb%D*oAnhgApjm z%N&$IVO|lSgbMUZ2f;4XuR9olg8hbr5-8knF@+Wk=y(~*N**;{t%LisxfB;|EeUs` zI&+->Y4M;@M7{Snl#sN1r5~e0!J?IeMzN;CIR>9|li={80nSFx6y3C21Z|{I9B~uA zF9=kmcqVgm?qm)&p_KA-=|}=%jV)Z$e%RQm<#gnZbuf>>X3)_GJu?!=nTH!lKJwu% zrIAkh5l>vp7A?ZD8c>FKa7qLR(!-vy`8cUKI648_)}iNa)&r9o_;d)J2}H*Do0Ubt z9`p#!EBQZAvC4FC*6M_G$OK_mPE?BUJ`N?xh(e^Pqe*&GWazyrYD#eJf0SaxO`7gA zliZ=wY*@s(z&V7SNh;|-G^J8XDl(_;kBg^|!Yps!jT0@$h@ExgvyW@a{Ey#ku8sgmn@h!=M&4zqW zKz_@z;2(yD-hhTJ%YuKm(2+fAv}bvuf0mEYPRp*mJ<*B()42VFR#V<`#-{S{QK8^u zLxCLq`3Y&Np#utFz-g9zv9x8veeDUJTszZ{4p)Zp;-_bTwGIusJ~Y*!j9BMTp{qnw z6>yUT59-fz=+Kp-sSY@bD2fXLI_zrER0j%!GGn7dgRU7(HK@$E#Gyi0j;1R7%(&d4 zLsyTcI{eJIl66q$O;74u=2gf@dX&G)7v)F!EtB<)zuK4PXZIiapC;DR+CsfwF75!%x zCzQdw7yWUI6Ut$JfO*2=gtC}-qd#eJLV3*F(SL4nLYd4@vA@uqbcEad(xik^#V-7e zNeLy2UHDm(5=s-h@N*_5lq7bW=S@l|MeH^&m=w3$yl7I~ZnKFg1DR4eTbUbp?|>`z zZ%jhqtpm=JmrO$7odeF1mzgkFk&)Pq2WQAD%qSLV^=>dv>zc-7f!#{Js;GFg5G`uK zP31g%O;BkcyB#N|>vbP>CF+li(x{ZyQ}{8@X%n0O7L#e{8Aa^Hw~5dnyv;-!<2s0Z z8YB*cB;sF~NSy$-&6nyWyjOlmpg-We|EuPSj>AqUXaBpJ!(Y3wDV$S(V@k19#!={) z7OFK;J@{i2In(|gBzC4lL^kYS29c9N56TXO{|@rXB`iH#(Ug2Po(a?Fb$p_oqG;8^K&7to*w6$})4`Zziuju$NEs=@WKmZ5@`7h zujd$qL9Bk63|>XU>p2DmD}pA2*3$4T34?%zL6bl$YB7g(>j}h zie)#PgZ82S@ZaB=+n}=&{r7iprinT`5ofy5CHt6|g2gT7U#Za|_ev4UQ$_NiGau%P zmnIl<;X#nQ>mCA0vrtbJ6U#pQ&^yytE0s%-2A%s!ojANktZrfa+}iTt4;rb#$%B4s zaGjugI^Gd4BjK_mK}XN;jjI%Y@5RccHulgz;-f{?+b~GsZDGk%VGA@Aui8eW89@)?3KkvKazK-=h*iFjB|h- z>g5q@jJwp!v(}>A_1b>zKM+PL&!^@4cG>{#U27qza+eQ1ht|wsL8s{FAXqv&Dk~Lh zKjlAf!61Ad2ePZ!c$ZkI{fv-@tJttuY^5;i=i)M;{V>LT?eH5JyVO1^q>XC@nC0izY`KUbBK7}ep<0?JIK9{^z*LQ- z?Yw`^&-bGNLV`j1YZc0|T!pXU9_(FJDS_l&5>AF~cBpY09;f5^QI$kqaueGCkH%3bN zdVeF8U~OdHxh^~{aI)?^7v3pwGVH4^yi4Fz(C54GZh=!FU*N)f1WpBfp$qR7IF;@O z7v3juD%g!Ke5Syu)x5}s<8^k5!Qv{L*yASl z;*%RTvDZ!P!?(9=VxOBhlMXktY@F#PrtsKtjm=DTL{RbYaBYAZQ93CU&-I{U2+Sv| z`BTwqak|+;EiV$@z!8aK*;46jqY7{FwNZ`zPJmE03FK`z8ic-p0;;k%Gp?GM29C@r zm+HfKaEDVn9rL?U0%!-q0?2_|q6AQJ!vb*BTcZS0Xez=I@YwG~Npw0>0oVP0lthm+ z8SvrTq9jsjXF}l3w?~PjyPYY4U*8cW(v4Ht9EpdA-x(#6>PR~iL(YCzln`EHb|xnU zx4%0|sH|L&3mId#HOZDvZ<8WyDCG^DGPPHc-l= zehcj}P|Br}h4yNc5A$73DE6mdzZhnB;0uMq5PKdC%~bJwv7>BS9xR*cyNVY(+UD}a zZ+4zmDm}-GeSzW-?m{jR=mN$WQSvKb$7<hu^2#oS>rx$wyO`uG@eqZ@~`q~#)Maxw?naJnFJBa$d*btG}H9!ZqbJA#N)$n(`G zs+#H%RGeepgvxf#q~zdey(V_bqx2Oq+DP3;t?Y|NI_rgn-~*#`u*yNR7W9Q~joM%yV4)XrYcrmCR!G_g~h+EG))XgkG=@pVaTYG)ruJ}jwC?d;=hnnzS> zKg16$*0GA`&xU^55AXNGsfGTGAC3hE<0Zs~49}5v@vIFa@!+alL{Q{r} z4)XzyKmasQ7$qRrKNtCoKgMe+iwuBbk?$QrBu5V~c3ZJ>T&b_GD6q?U_Iq1Y0o=!tu(w)4pKw{H04r zvCm$tk|e3Klka51-MQ1ol0{-qbKk#`fjZ2Z2z8={HB*NwF|ImHv9LP79yU=(-S4;x zFO>@Y+S*JZa%fzIn7mQ>hpp@QjwihUFzjBP<#jep;;0O5g?i=BY>L^I0dF#gbv}JcoZ~L@)U~+L$4-qB=knM zr2#Q%3P(%tW?K}*tto5>&!8Y8t|CDjFn6LLSNu0=*cJE98g|8tISZ9QX}D}eDRo%N z#0-VRm2!zw(tu+=LgGrh#3^0CF)aWbi`Doz9eq%)QLi)xut}gwpK21)^IFq(JnK!8Bn000l zAk}dKo(wZh<0X}i|9O~d8ZN19_%Bq}qrVQC%^i2hY(7-~mm+&0R4vu#(cFT{a?->0 zK4Vh`3i%Sg;v}<3|t+#&iHL%c=PQx=C<|*uT-i*XURRTunlNWsoH?{lbQ`^FR9yr_K{&5&>k|!2DE>S*nswqxi+AE zW1bC|o^eP3GW_Dx0m$%*&jcXDCk_ojhDUrh02%&3pSHofg{o{)hBtgJ02#h8KL8n? za998`{9u$JYPK5mqy1o!4QM|&+y=BCEVcpd2V*v%{owO9p#9(o8_<5R#0In<9BBjE z50=`1_Jd_MVEV!G0A%>Ve+3}J4^{*q!w*&lAj1z<1t7x@RtF%%4~_~zh94XqfDAua z6MzgqIF=#mo^Wu4=?BNzfcAqg+JN?hFWG?hgD=~F_JiYNHliKjgaD#F;lu!K{caEH@^nBfnn2QkAT&In?LN1PeN43{`7h#5X{b`Ue1Vr>vJ zyyBc7X1K+Af$^{eJNhs<(JjQeAxt~Rc_B>u$5%s`c9HW#nD&wjLYVfG3qzRplno(F z`^v@;roH8&5T^a*;t*zf%q3ye@R>`)sNpr2g;B$AE)S!I=X@=U8oqNy7&W}-$}np9 z&)37K;X&UBqlOQCOQ1vf#*jREi^dsO8==~7t}#Nj$6RZKYG1j|2-RNlZ6j3s$Mr_2 z_KX{hQ0)`nF+#OB+-QVqKe)*VH9g>FGu$Zq@0#I8so!FT8|8hg8E%yH_snpkjK6P& z8>M@j8E%y8?Pj=9qIa0#x-45;+COYOQ56UDc6eMT=w5DzuVfRIth`B4I1V(FbGWz@ z6PaSCf11$Qg?SxeoFA+@39n?q2ow0ps*4EpuBbx;KU#GY0n;2|Ts&Fz5Kc4L4g#Cd zD@>p`LN zhB#|2Q7*e2gKV`0^6Qd$2Gb$6oFxSYJ3}D9*jN(DMT(7e4O-?Y6F|;JKh}aqg%EZ# z>1^h1o+^RtVvX!@jRkr0LrsSd&7#>*ddQ@B>KYi~w|EGkRij}I;4M6{yhhJ}b19sB zv@tY`wNM*5PX{7*`2iN8hxnlbGL&Ncv>#f@N);5}XN+LUrsxj!gORFgopsX+)o1e9Sq_IU%N9VsFzObDha`9~5uGDJ1jG+{XfQ#}oN z$4WxDhT0CWN{8DHuv!DQ101CR%K?s|aH`^_1AIXT8V+!*A8Iq+j&IjUxS$ z9~daQFKfUqx)WoBa2pdYyHgmX_C+)@R6eM1tUj9&G$;RShkUJ78u^ef zb#|9L-wU>5vdox<3?J@w4$H&FEjrxmD=N1C`@_A~si?)_UjLnx%0s=@n@Qc`L%q&5 zrN%$h>pb5~yrx7ekvP3WuKb$iKr6#D5;#DNXV@-aA*yJ2D@dQtg~g&AUah;3QEnwI z5ZyR!!6ye5b<{$!A%-^K`;Kja=s#)InLye0STK5bI;(bguw22h5!7**PSmlctGlPS zBbDYk@P`bVdNo?ECgt*lV&BXRzu^C9Y@{YSrogm+^v6MIz2Y%n47QOuPOiSnza*QDRZ{-;(062$r+^y)P*tb0}%zV-3g0IRhF2TbR%x zJ~(rNq;$D#5f2b2N{afPqn~clBOU=xk`(nlM~fmpj&-u6sP8#i6tQFM6iHDZ%QPt| zQKY9ziuzinNs*rvJ55sXz#7h8xdrxg#c}0tpNQ%V#c^aXtYM!$Q*j(Q40D)smf|?F z80IkNY{hZpG0b7kTEz)xGMU4ia}+0>%VZ97zM?qcY$kJfI8K1*|$bFt)f2J%^&!<w59OhgqIhk_Vt{8Mi z1^q{j;n(6cR*=V8;JuGw9O@mcMSe^CbtY#sgR?st813`GxlpSG1o}E~%!$zc4MTu7 z(Fd61Sx7nAaTPNKXHVW%lj>=#O6-YmH1mNdz5FS#)|S0LVounMXLZdYohoA6!1qa47as%=V zak)EjAK!?EacnvbY(C}3jSpyRAsP)GsN-x54eKM6Ge&q-hVxP|RFnEG9;VR-8Qxn` z)aK<&b5w1kA%#-Ov{@ESRRWX7$9?u&G^_>+cQbjsHKb(mI#pv~^7s|(gDhT;%RD|* zZnnisrCkPg)6leR5!2l+3;7-8iXe_)>q-Id&Z8!vRv3G)$b;d(-T04Od?-w}H`<;`)DcILmcf6dwyJ5a*mL-gXv2a=B^Gsf4b@t16y^vnJZ^mMJi+CC zf8>VZmTCfdB~9;eC1sr4(ZF$wO)cr2{TjWdF>9z)@hddl;K&{hqYBOYLnwFXKT6YH z1ZABJG?v8Jn;019I&`3^Bt{28$XW*@Cm1P$&~$|v)UuO~G(kltL)y_v3>^CB&>`*U z!C~Z;1pUZq=6#t{$meGg}#oCW>+8fr6N8!ec8l%%extCQLRm&-qnQZ8vA3&X)qCLpdCRA{uUub38cr z9l1?wwKaU^B}m~2W*HPU8LhQ&^7{=6Pwt|h@hKwVC4<6KycUIRIfyB+H57}Oksstd zA#Z35h-D`}+yc&5(Fnm}1~APZnHbX0fcSPxE!o9KyBw?$2=R(eEh%2GtZHZ=&ucn# z06$HT)-(bk38_u{bqx;WdC3Q#KagAYhcyO41B+aNSmJEAcNDi9|$ zkU4WTIFRQ>Bk}1F>g?ue41x-jC&3(|!GS!lDnXDB3&*^(#vrIbdBVwOG&qpwWhV&s zwWrCNLp26L35r9+F}19~6iScRrBvz7*9gQUBueiv4GrXZ(Mpxx0*ydOLZb8*Y6wLx zy+IV;sD>b=FjanwGzvlK5vl+W*C2^1RF>dkjY3rU1N^$U5gH^>h00P~qEU!S-%!PPqy|Y;p|Tv8Y80Z%J7hsF(;$gTRF&ikM!5xT@UPxL zurdhAg;JzsRS@EA;H8z-L5P#d8xxNTLYxd~Oqfa$FEH7mdFd0%e9!*?uVmiY(!2(=UfWktw_}@%UH>75TzD6Hf@EB5QbS z;>iM~Uadhty6{d3AiC^M4IsMcP75HqEi+u&MUDQ|X1KJ9_V8X~hD)2M^Sss! z7Z&k>1J{}1!XEA!zHNq!qTnxvU2leqqToa6Z!p6}QQ*T1^v)8uCFEndswfIxP`%L% zmqn4L1m9!-|at6|o(JhR#%hf9)d$JkwL3LhaSx zMJPQgVr{ELi?supA-~J{hXM0ZEgGh=%s&lyxQ6{FraaB!{VPbIZ#Ah1=$+<&2MK9S zP=o&W4URm+##f@A-Hwl|$H)$zxv3fvsi(LTf*dO@^*C^1kkzRz!gC#LKFMIvslA3V zsm^vDjGb&yuvyYDCdtFGQw&@jWs~c-;-L~d)gWc^I47r2ug)qB)^vnPe$Y70#lu6r z$)g7ObeorQ>7zdB3>VMV$9>e92Cp`9Py^qclh5FIq@)C#BM3Cl0Pm^^Q26OrG?en8 zEQ|=q}L^&WBT(BICQ%0Cl#g2)|~aI%hkMY{bGQ}bH^pv>^Js?;%)}0s=Y8p<_*PnAQsnD$buXm>D$CdZJ$)i~T)=QNpVlnB}hPkE763KbSl}_I;Cy zw+2mJ;vAjZEXJ_K5a-R@ZZL3odxNHZIlUqxaai;n0n*TrP2vgPI}K8%7*fRZf_K@R zpdOxH{DI(9YD0xWzLDw}=s(1YP3#T0*J7nZB;FlxpGE2ptKv;PKNc){8H+ZCRk4i; z6VvKke3{{##QU90Otu?2Cd_-l$+S0@h#d?+aWd^v=wLe^bTZZYq3IY83nr(fRvE71 zIJu}KJ>sUi()6gC>PpmOZmKI)KXX%E$$H#P#Ug{5|GcjBgqx~9F(fmKzaR6IpvvM$ zjZ;g^X30MtB&juKN#ggde-R{^>vO2I?32F?lGJLx)Wk*oOps)*;Hm2WY>=eZ^Q9)v zi06VNbL9@2I18Q+lGKX6)Wjdrc_BzL7Ym_@EANXzl3LT3n)o|9zY3Btw6=S?w_j}vu>zUS?apsPtU#{w_jFzgu>#r78_!=3u>$$d%Z0B97RKNWSpx%U$U%{y*H1Ktg68Fa56ZPncarW%I*Cad8eaz{0YL!=28D~)8RzjjfH>ehUT3-2c~%rY1t!J;j_S*A!VyH+OrDyp~3>8VEl&#;!P)UXBo){{r zbp0-dN-AEzkD-#v*S#@RVgb7^4vSb{O4$8zSj7BN#2$#lBKDUu_J=quk^xf4{uqZv zazIMigCQ)Oj{hYjhI8@1hQx3p{o@I3h9h#`fqjwB(a~NU`#f!*3 zfxpI4yoXC0V`|P9(MS&eN$>YM6(C`mBPoc~q}NA+gew$DL8Lyt!3K#gek28vTJ^?A zkTqjbb?VJ32$w`ADifOLNj3`@~OF7()opAL&y)8FILdxN$DKD?Fg1JmEQ%tcGP; z!X#UAgw^FbSxcZ~Mvn!ymMHynFM+%+)=HkrsXmd%ODZjKqF}$lwTxDMPicU-!WJxq zwUj674H8#tv;wJ<=1&u0Jokbh`nDdgiJW2S_3wArv7Tia`5KCr z(76YcxAbbsM8GwjAxj@IWUk~CEE%P(-oRJB%p!8pa&W#%Uqa-%P068G)S@yMYlbZu zpKvt^V9G`;qgv66(DDJE(U4v$;OVLfSxQukv1683&zBpbl5Cc54(amjpyDujG9 zT?^_i9S^0DH(`0ZS;3=z$GPxwB<}%9q`((1J zJV}nK1m<{gINIA9XEH%JFC}q2%+0U?Sd?RQwkFRQpxtJ&C zI4sssob{A3n2B0i5&5J$Qi9S z42L$}A99M5Sa?-8q`BpELC7f;WRaE|G&1CV9$C_UHc>G}0XZ&4ou41_ijBe!Q9*3; zf{-x`11JWSyQqyEtn}5!u;`2LR+43E`im6v|KPpV%Zx<1x5}>Y)X0@i-QM&5sMrXQMgx79RlZ<9H@*MVopY;8iz}z%{YUt++MDJ2 zx1)#V%6q;zQ_%H1_buLyN(9JQ>&6x&x$(flRZROns17N~xzZ>|6J^C5YuG3hVN3+O zKrxCk%15Z-}xJKo0VSr4GUqGXNZ zl>!$pMV&(e>H7Kjr6@!gZgFlME0`741d(5Nu%l?lWVpvM9ED-L5VU2Rn z5hs6P9rdS{Km{iq@%UJSO^yeZ)AYl`vc&P<0_CUL{S*HQ`u&fEu3;RB|N916t<;+n z*k1JG*Q&}yVbs4ckzkHr zL<1ND+A^SrVL{uk1B zyI-(;&l95{trf-?925m@4}{ENv%a5Ti9Z<_Y!?*+QqcBi53rV~zX=lkZp=_J1m=kb zDoMZr4fQVrm5PugP#8hmh3#6V0v=HCrGn>hmgAh5U^4JELmzZNp;rhV6M&dJnG|r> zpIQ=dKv^$o*8@I`#ABDL*80Gq+?KjVg+?>8)dt3s0{oO+-6=o< z?{Au=*@VLKiV%hCLW8QzaYlx(GZuE>1A!`;#iAMmH~SfFVv8W{#|;s9CM|fHDjcgT zQMl1F@EB)$JwApTNBWuC?g_Nb&8?WdH1ha_T7KM*QPx3F36aW89uk*_>Z3lEt4aI= zHtS*a>kQ6!#o zhs~R3CMkF z42u&FllC(cQOfi;N|Qij+txk8)aJUB^=%>r{d2 z_@t=;r{Q-O{rZ9`e`4@qE{($LT}~CYeQ7M@%5qGv4%{pkE9LO8TAv}~t7{lEsfhq` zu;0+PP4d|ZRA9M(Fkr}l8#?EcgN9z-Y9_+Wp+55^!a3g>wG8z^FJVx#G0Vt>qG-6ymZ84sB_U|KEtb(6hTseh z)j@037cw|TAGeJDkikx%N`_pi)L*ryALDHpIcPiEGBHG-z(XWb;J~H1abMK3p_yUf zCs>nYp)_H^7Aqr>TjQ#DtA*{Y28ajSo}v!sfqZuf~|@8-9^8ui5dP3Ya*G>0P-$W4S zivj~iew?osVaXpV#*?m=Ur#3+s?`fyBGIc4ojry8V%2bCtuvGRx5JS#?(A!0iSc#Yi)Yrq;B}5+Z*|^UcQr)!dRzOnh3{6 z$hw3hLk?@Gs#jIn&TKWT!WN^w+&tW7=+&}`MXnQUcjzXLENl3@Fi?Qd(TaR?{co?! z&>VI9Z^3f%qfkn(0;!{niy^N%l(9@$fyP~OxmnB2WYqVQo)fZ*g^;W7@-15~(q@*= z#e^#%r&cQJhjZoR?P|y=m&c{?#=0o3)3E{FXPJ}rp`wj1t8ek0XW4}juNn=Fs^(+qaE9~6deVVn73GlpSJ_>jlL9+xaVFn=iidr@|nI7QSc&< zW46p$2`=_HMh7Z>iN`VXKxWRR9;f6a=|vvL=*Aqo%;StWX}#R#u#M9^=G7Gup3M;^ z_r)$#wQoA8RKF`-Hd{BtWR6|sGF97V*tE(^T()Z244bC8+GVp{GfZ0N2E&B1x>eI` zDt%*&YXgJ(su(w?!&2#2$GAP3OPz0uaeFnFD&HLA_GvD4ex1vemP|9nlCO8UY{v|f zg5MBf+T>8~8(pSq!%SEfiZ{jBHZ*I&n>{w$FB6z$$~4m(7Ny%9X01`c`#BhVIhg8WtGw4 z$AkwGCX9OM?I`>4IM-G86D}Jv^oMq3Zgr>2D=|{NO2lULlP(iiK|(Ig{wbGR-xe}y z_fNY_d7LWb)ApZn`KE(cQOj-Z&$|3_sF&Q>{;n`FJ;oHdT-|D?el-6NRlxs)Tkk(I z5@qXsX=ZtDX%F^;-Bkm3am)bhHv5kyJjP}RwaxzXc1%psyg_`pdo26Izi3DQ!@kw%483oBh#92 zwPx}F;Gab{LgQ==%*Qot;nUkAiC<1cX#)_NTf8;-xmK?5F0Msk0P zqwpl6D@(fHzsF&C>Cl7GLjQ=v_|Tz;V;A<%IF9cedN_9M|BB;!@r09yW3P8{N|DrR zR3vL;S*ms3$TwIoN$Fv02ARVwaxzB?W$s*>05j@n7}b7J0?b%T!>ILT2{2>Jlk;bu`xzZYei*6AksMWXDRzNO8#8oD$Y?2v7EY0we1XySWfzb>vO@M`F5E#vH zbpk9jgTQEpYZ73N83ac&yj*a|#Uc-}vAJhvMz%EF&4gDZ28isf>HxA6@XEvh=029* zztaKajQn+p0U{fII)L09yFM`hO1{&7+QUF{KkSC&5Xnl(9m7{k2(EOQcKiT#y2%Zo z8c*p9*zQma&o14P!Y^4Rby+0fsb5t-1rRNrvRJ!D>6A+PTBAU7d=k(9NtIX9SSVlT za;oPYHx?72GE(@U z3+1EYiBNgt_d^~OM;;QP(#wC?gQCVJLS;AjHV=ve8i`PO>i2dJinb{c+RrxpBOVkt z855yWq3-aYXe$z-gOvJF585iXP_Tggn1^kdU6NlP_pq(<3k42xKjC8eI(eeHD15-) z>0w*t7z!e=pY*V;vJ6vCU_YZ8G0e&1eXQD3YTb(Q&}`85S&6N%1tQQtAqg_pXzB{2 z1+zi>Tq00a4h>^H{d^KE8N@UyT4|cP9#DgZs4z&>7{2QM2v+dIV_mLN}Emnr-oS zQ+i$|3l$NYaK)l^wo6s}p2Vh>Ig~X#d9=m%U5G5Rba@zN_77Z)+8*;k%;+DwAW1)q zSd$}hPat#qC(Lc!?369lNV52*P3vSyRsX3(r9w+NW|mlSOx4dK2(hk3Fik&?Afzj@ z2qx$k5rlL`7QtlvGJ=rWWDzVtzltEFL$U~#oL@%}(wAEVi_F~-g!JbY!D8~82txXF zi(s$)+XzDS>lVVE`<^I7`gRME-urh^OvJ7j zM=`#AW!>(NPFc%D%GyE9pZ^p_fwRkc@~o|rk;(m^BM8?f85ssX7(uue$;c%CFA;=m zkBmHv`_~A$NgIb;o2f2kL3P6f^f@PW+ThmKOzXXtYzfIrhi5dZduF7i%tKE zAiT1ck*iY|c5ldpy5S)_@V|*oz*>k1GH>Ov7HUw9B zd~0|GU_0;I00;6+rUkY9C=Nt`W?YYkY*Uw??pOz1Bw$4x#W%nv~@KW_FBVSWgL`SI^QBFqm#Fh6eb5n+A^ zg8A_p58>p8AlTKtyEEJqh*XZ&pUt!1V|kCrw`Zc87+T=ylOvIh#(NV$85cx*ye|Qi zc0n}B`(vOqZWK7t!7A%I@{e=RSvKsM|I;w$>cao##4~?lAsw4SSW4${NwC9{mKn00 zvxtT%2Q9N?V%R?#4Jrp6bDC=oQ(M7u%&~`DbXw7{>WpQt=0?M+BbI&S;>)|Suo7>- z=ElNGyaVLs%eC=nV0FB5(6FPS)#=KokuBE3!9jiFnwfh>NT+P`OK8rO`n%aFFKN)B_5|EL{G_1I%wGh_m17!qVFIm|Hr<8gLq4!*$@ z;haN`WR(2tg~IJw#Vf~oyU63tP`y;B;KqaYVvCD8hP&K`pD*WY;|^P8T+lXS02SOe z#0!Yq91OD%7qtySPJBD@nEb?77CcB86%i_Lae>>zc(D=2tj4`;f?CJ3VA;uWELwgG z`AZhSLL^CLQ$~;2VEYlJu%~lU#ye-=jChbTs zVe(i61ung=(d|qm@9_sPz+xD^7)$Fi~%Su*O<2QE!m2v1}b?X(>+>JY561 zKGPy4s_i?2Kw6p0F!D}=Od`&7$?EwIHc4k$@_4;r?zOOG%UcFwRMj?jD%+YN%fJtP z2!TTtoXyhlmQ};V@k!AV>)R&Od$ckvDfx6QhU1Z8%c7Pe!QsUghhgYUFTUt1>5_}3HO-+;cwRJQu;&%6z^GaV zl3c7w>nfA5vn?Zh0EAK0ES)b&=x&ELty>13lF)RTbt~yC`%U}w1U1@b$>!w=+Gx9_ zvYe?B!5rRU>5c7^HS<;kdyS`C4v*F8MOGA&+BGP{+h7ctsm| z`n?Zn&ZRlg4aD=L#TSayX#{w&1gMwuTi19Y;3WbY8Y|+pu0mt1GJ*Hwq(tDBe<)Ha zB`*t51s|-R4(QtW0`f!wK|_IS1+Ju3ilruB5i3qs%cbp!TZ_^gy(|(&i?2+ScZBNH zD!eVg_(I`0ZmS+K2w^y?^RFd-uCtlxLr#S;u-W6M z%^5=o8XzWV^Hfs!YC)q7!uz4ajx5PGDtwa#jOJ_RR;jIR@v69jy5x;;>a3>=Jig9(XkPXZ%q&@m=zOSoeofo z&WdOkH;PS92WJE-V3uEV`x8G?wJl3ukk^poCW(tcYE zIq0Wo(4^@07&0^HD+<5X^rOTg2l3zlI;%)QWUtk_Aj-z%$0ROkLG&91#Ri%h^osZw z?-@9E^~$I9g~+ywO{GI4x9NP*bB_$MKRrU?f!H#(I)WT|A(iPrD}qRFfYM zCv$tgQKT%V5~HV29#DF<`$V9CBq3}-?6i%Sn@F$*v0PY(x0@^zxlGGizVh>$QwY(C z3NeZhwEZyznW>otX##IWSxHhZ!??t&UO}oWRg+Tkpjf0uO8ycuG5xfWv+iL;_ScYW z=Ajm%2|*j5Rx;7+e6}E)2tKc*L5Yc2*RlEW&PtcuO|olU>XuX2Mn!ekyE3@qA{C-r zcsO(u$Dnssm`%dNDp(RmuY;w9hl5c`7`?WZ5gtxNC1JEaS>fR*R00OW7122-Je+|_ z!f1VZgondVaZDzsF}=dWp{E2)kJhJ8csT5ofWc!sqEEl@uu+u=(vb})P_m`*9=Avu zRG?&2XS7PED^Rkn&6w(G0#YlJt8;s2mczA4;|*6Q&#>UkM#EKGF4ikxX(-NA;QBbW z4lO$gEo*^iDKt6<*_&81fUF7Pt3KnU8k_LpwZLlKa!Bj4t+aJbUDW0bX6O`M80BnX zP2r+?(SfgN7xmd~c`#E;&#on1EolyG=@X4Lv10NOh2{KejqFk1HX7A(^R+dxV(T%D zt(B^4fz>nin>Bbejc3T#P(!`vvBjV>2SAId%Lbi209w=@H|X5jX!Vl*ghm%e*Gy!O zSh}LXD6R)6-Rd(@RSRznt!0xQ(Yv8F;jGhK+T%cR(xFdQF^ZQ3Ee;X4dK^XP&~TeW zuUE$f&(R>h8z&{4FaOefRrG_OIKE}iu@zWg^UOiBcJ8(Yy42MzJVmH*( zmA_|NCT?LAbSS1pU14RrL&l_jeF2PTIU!(Pl@{teBJkNI<4Hs$D*yv!)FU6vF1~h3oa9juOgC$SacaBeG5`v2d4Ty&n20{K<#`ciVKnXRIG-QmW;B-;*dOC& zHJ7?x5aZ@Fm+C$@%0(NYwBmx$|B7(=RY=8U4R~IJJ5<}ExwP=}BV1Hay{ydg_JRl( z={0N?x);XS8N-%iC>OTH09gxQ4qg-oiHVJ@NTBXHcYF?KFK=+|qD%B6XJ`tmZP|Y_) z0U4vF>aN}x<2!0fzP~96Vf2)Hm2XZ$SVh^SG6!x=L}^u}{d{W_kuKz`wrN%`dc7?P zGpxSWz&?R#etQ&?apjng^S&bqWhI%fmcGYDq2nIS8vChies7HL*pJ!#z9fJ#AG7)W zNdRj-mCgT|h;g#{15rTEsHw8~gE79NreyPnk`P8u$>t9yA*`Y%n{P`*x!L@YC?e}- zkILpdk}x)NR5pJ!ipjZhOg4Wk31uajY`)V);oj(|d5?mv{U>8g-RXn(sTglUrV0|veGjX!b`h1+Lg0gCSA<8uGgs{v0VvMN*vS;{G zjA!DM((~mwTZNU9^OYz!XUYSO^j|Tq4oV|^-7vA97d>tEEzRQ!y=^A+p@O?ixI8AF z`I>GtHS@cMiRm3q9^e^X8TPA>jr_ncIh|uk!1o0VUz({OTL5No0A!+opIHDVZEP~4 zfL~ew=4k-rqJX;%08=wQHf_F!tu*|N%dOTb`gESE>A!WE*szoCMDpk!ms2ww_Eo=g zIq2ow-1&Wk=j6@3E~{dmNs`9?K9^NB#|^}Mf6y#7ljO@$;dv02{6EI|dT@>-?<_A5 zhJXg{xFfuNz*6V#o7>gUk!#(P)vm}ml7n)-c@tug#ZeGQM7_mBW#T9d()megS5`KT z!eE`Bm3C3NI0}PybX_iLyb(ij@Q$rt2ZixU6vdGsQ15h5$kZr`gF>L*3b(GHODAi>fZbGt4k8!_%O5_z=e~gkXYzi>W@uF$*D> zDBwP-4{@wQ2qp~JzV#rkQ2^n@0lTv<#IwmTjY7zsF2pm*Fl|D}CtV0qS7JN3y!(<~EOfmR$kcY`dFqmqfL(~|w1*q}nXbax#Up-j`1_Qd` zII+x8(T0592?2%I3PN^i0%5-3g~_ZPhO=3O`JxvlyLK2(a1rK9UYOk4VL0bSm@m6w zFwfQda!DpYNl;AKCc;9IO z#Z?bi33iotB|&A`%Ez*!`tKyHDT+RvL!JLgg0o8bQ1+4EO@hh<+sAUW_`M{onzj01 z4j#YX5*)Dw2a`W&3C2Yl*KizM{xA`YL%bf6L(Ly0AvwPDkTRtCaS{~6y$F;U_me~@ z$9}$8X53E`u^bOZz|6LvC4(_GjDVSOKTif@oEQN!=YEk4#+WezX3qUG5sdL;1j~&3 zRT5U2A%bSk{l=||(bI4Pr*>gb*7{HgHZdULxA6!I&5Uf@VsqY&Q=OB$CkdZT#>)UU z37<>GGlPGhgzrhlGmr00!uKZQna%el;ro*D%<21+@cqenX7&R~_<>|RGyD%p_`zg6 zv;2=q_)I!E0PF0Z5(BizVX3-*P7Kj1kD192CWdH{%Q92=OJax?`7G=He@zV0BBy1h z^S8thE%I6>Kz~mR(IU6yJ;;9~hG>!B@|ygG9cthsy=;?@BXQwX^|mr7kb_Kerstv< z6eFHEHam$dxHtierP-)l*)Y5$0gJWTC{}hkFHOK=@iu~0JKHacW4W3e!K$s~%VJoJ zWMWvg8+v&Ri_vZji|_Bj4p(+yjDxMp{CGGrk#k*QTk{$rthF$2L92v#a?yF(1dNF`>?rgwfq~5gnjoB>&W@kLx2iNwkAhgqKSEt4-t-#(NgHPA$1E!kINUMG^WSwrmPZp4=Qo=mXgb!R&aA zM%1h7cxHWUVx(LON7DG(MRgq82@x0uE;v@vz{eF^Tlw`mjLHpZ1#lW=5?3f)@sm}I z)87z>j+84yYkj`v%{mBHlH`WS~HG!Y4}jBl*e6#3d}Rs*x?-fjOg_4WV{>zO-?%6kt+0hpALuv$@$4fWo>hD zISpan9|^N&N^m-Wf^-G^fsJept?V2gBH41p?S5iI?; z#}KGO7Qt5NqZ*;I$NMyOUDGa6&C? z}a#XAx{d($t9S=Mi91VN!Q{ei1=d zw~fcDYoD0lmvLmQ+V%_b?hsiY&0}QIs^Uo@`b`YIW?lJR2UR)Yl$ba+TjXK=y@?$1f^Mr|w{S*TNPIPtBK z_-LuE+W3lk%R>CO1pF|*Mwt{q8jrsx1mI{^jin<+G@WN+{}l$o#aeYimB#|{t1%WW z)oGa~UARv5G)P7mWDJ)iTLco-E=mk!KN4%JWLi3bOG7lr+%n>fsxL+NMKNH!$z?nDlZ=V8jmj39aQdIuVX@0Zt~_Fmk!i- zxvf-odp9J&bX#O`%$6GyaC&lRamTz8L1f9uvlx66qOpmU#p{$Yk{h>H!Zd*?vzX8 zzfJ>769ru8s|nPUFk)!<*C$|1!6Jr6e?tPs)E8oC^EbwoLUCx|8#21&5lExIDGsdW zCvpB608~}NX!AG6VQMERgwf=;Ccw61*#plAxGAO8-=?AJ{-e57sjR09q-wX7e4G%* z1hHiZV{g^;C3Ji5(pijizp;zqI7`%pMa0%iJ{j~0Q25L`9MQA^f|P#D597xX zc9QIN*L94a1Tq9w$E=_pMAVuZGv2jQ5l-qn=#fLZDt12phcl zg9)TM_&%e>Wbt4EVf=xZ`c)tlg7m=z!dL`>25g|rK?LHw2Z07{pzOf}QfWF}1sbUy zOc0f#GgJ_{09rMV=dfO%=`if8I;_WMIgAMtg7p^dD9V7kOBz16!-_iOa5%YDr@Yx7 z7aWe<;lv0{THvC?z{`Lnv&AjBWZV!Yoz3g8LoW~MuZnYzXvAR@8g&&j_kuPn1`Cb6 z_+t*wG0?c;4dF2fK5T;K%y5~S35Sb~Z_Cx6)jeCWSw@=mp)G}R_0SG&T60*nZIhxs zOUNjmz3H^W;jnaQX|&PP zU6#7gLbE=@C7Vl9vXyp@!`Y?+$g#_RbLr|iBiR;vrb9QMPm|rRDa*(-^TnclRf(3_ z>F~-!=20bf>AO5mQKy8-pLRHyud1W%OyZ2osH#V*n8sO;u2p9K?sggWd?IsrkHgWQ zLBoSi`Wnxi!z|mcPqTW=TTZqanx9eabvT&Z>FY~iEO?BvIta)3e zU7%PaSVlH?qST?&=UT?dWZs@Q%~0tVC>Hh>#){kVjFYTB&rR!5bB421l%4gVA4|VF|?Ci?Ss{I<9ZHv)yxiJ{n6HR|M zj6byfUG^hw7q%(+&=rdk^^NCE%~Q+pgIq$e;nV31!}HRS)k`NetJ9;?da6oYR(mn% z_cYU7NjyHJ;HO?EA7q#Y`@ZD5Ivs@JpyDN=iZq?+EMA6^{7ysyGpX=-)z$`F=y zKQ|Y`WPRl0Z8|#tZ5_;xT94w@S3I;hPyPTS;S5zvpn%&0des#eL%(oQ1xG^$T^ts;~rQeZg~s;ms&J~ z+MotX!z7VtK#AlpPn#WvqW}E0i1f*c`?leoEIm%OYQQ`jeK+ zptdoxvMBq{F2c4%7D9{s)kg1ZVWWs*sMES^$rq#k777pBLM^)?wfyfcA{u=|GUQ(> zdKpLg$vp!xMj@Q6U!lfoO9aAp_s=*a?+-cKiX&zg$vN}sHtOcKF&U8aJzIu(O31O}>;6+YC3vNyfc32a;Ya=6A)UII%(s0^NoWK*W zUASlT#1gKSZ#<1!JlTV8%|jeET8pLOv58VKXgj6ZJa4KwKew{ll?24vR=rf(g4i0A z+b5pFWUUJqmHNel2T;3kBk8Pib9L|1!qna_yo-sYnC4hzcxaemhVZkDp9q1+>njuZ z3H*c?n>_C7XjS*P!~f`$M|_SpJ*Dj!R@NsAg%aNKMuK~VFq|JN;{j|k|%xd&gR~!{Tn^nu6@hPGYhND`NdsR^D`_L9jPZHF}7ILu;t4nKJ}DX z5;Y4!I!|qDZ{jlZcx9qF+6+2UPXuk_x{gCmYwN)0>M<(fL&dV3fn@Y|rT6y_1a0f^ zRCgwq?o-Pg>HWD~L0bx1LsEHid;(|M0Xn2yD&p_}3)_19Y~l$_7Vks(8z(S0k>9}I zwJv#Mc|d-{UzzCQ&&tF`p#V0>A0xFAh8{k11kBUP94b$iBD^8+o+1(`49Bnd8?Kf5 zR7YxrO}S4C1T%0lOT-YEE_`-0aFPq2p@D}nDg;E(o*^(X#LItn3<{0!L zSlgMzaa_e`8+N!*bnYD?9<0O@`%v*<&7FhUBgKQ&b!O&K;=v1RT+}#PJa|ftkv&X2 zcr%Ty`!V8~tV$~6$k4GuVM*1Hgr*cHkcc#!!j3~b+8!}HY^r(J zKwn=j6LdU!Q(J0ym`@jyqp59&0XSU8bQY&o_--|-8T)9QCk~LoZukgX_kP`bfDh_=?st<1mhNNXp*!IB>rwz^LQ}2 zCx^CW6(pvsJUqd6b|1W~u;T6Qh!-uLNscchM6T5d}oNF?)9z{@s{_Ar=BH2uV9|D5)!(&LZePt*l`j_8G2F+?DN00dzJ}?rzY2wv1fJ zkm7KoCUUn9`*dAQ5Kah?im#m%nyX#7L5Q{aU|riL(6~{6Is!XAyV=-?g~k0r+qumK zc2~9M8||~rnZ?T=i9p4O#&i#wm)jsI8Xo;$-i)HfMw zd3kYJhm#N>fb}h~R%hntT@Gb|^=+^y!DYFEdDn2Zxjb|J+`_bAW}EXXGc)IkMyGbM z<+{rPrstM7PD5!1n3|@KUWNK^qV|%uG_|^in0*WLa|`DxFE104vUhRc!m33mAI>5$ zh!S&g$8cU66cn5^vhou8x8VRZYT^DgY))uAP`ZyL{|yV!_Agm>~+ zPfmB8*2UKK>W<-Y>`k-8Q}JuG7jL110L8B*K^JUM?PVn7S@8F#(VV=T-uf_Oq<+_R zpk6>6K2Hv5*Bf6S%he6q2idrOej|NKFcN%IM}E9nE24CZ8aLBB$|gdT_;-5i$_N18 zLN8yRV=d*;e|YmXRJ8r5Fzeb5-+966Ocxhp@wRW!cEtIM%hTfJJ~TS6or{a}GgAv8 z;z&|L?@_DE`({+ndi3lR$`#hXVX0$>F_4_Vmj;?}M$pLhL6wJ-$R^JaWyJFcQY%$V zAvKhG{lB5q{~Jn8Hvg|5O08=Pn$7w7^Y%8Ititf@nx9(O9r5j*diLTnX{gB-vUhGl zh^Uj6hBk87p81*cX6Aub3_Y1D6vFT!2}7_-4GgpwkP*^R$M`hWwapz<^|bQYbgaOXHQ=4t(Mb{^qtyZ3~WpmSmu^7G|VY!H8O= zFG*0bv~{dt6iou)2vW1Y6%DZf>stFHWPNf7vo=PjEMKkVNASc1J~J(=4Cnq;tHQ$_B*tIx4Ck6e)$;R+$11d5FI)83@28$rc$ehuu##4mlu?9Xefibvz z_XP@Mb1KypVGoUsguI?yR%d|ls>N!^%k^-~iX0r;fuVs4-0VW8C&ePbSj?o3m8F*iH_4Oz;KMxS& z;5#!2BP@qMn9b&L{n>P`Z=koQzrS}N-CtHnwZNj}_hbiq2K)N6gT0d?1+k7F_viZ4gT1|(zDzF`&qRxAqgEWlkXgxz*Z@+%Pv$X- zkQq%Jb*o^eTA9STkT6#iRc3i0s zb@QyT+8!}w#M&{c%HTMesR^m@(Y}oxXw;fr^NS0+)jt^4NhWCi@OWby{1fNrr&Waw z>2r!c=h1QPU~+hPjAdNsrpfnMO#2pA=5{a4Om~?m4H9uKD%p!lw!_$`82e(3{fe@G_k3+sL&z`=pxuc1I3L7 zK~kcYkme|YtD}L}y>)9&V#~qi7gH3Sk=8CNdlr{fktYBre4+r8FQyclXgNPY0U_DR zMJv}0Mt;QPCK$-B)g7{Hc!%uT-jIz-x?JJiNF)?HoY=u?VhD!P+}n*WJN5MSurJ6B zru(wJGp7y6=i873g&)n=O&HU!Ye6u1Q;$E4=)xHG#xO}FM~#*gr&O(vq0s|%u)Dvn zSK{f3$Ags?tOer!vL6#wzyPk)XkvjX!W-w%Lq(WT{jG|Td7VjPkW)nfl_eoVQTdfR zn@m+U`nr32(>*h%M0BIEtgwxzak(`N2%eIMogJ>qdK@$u-B>K`&8Rf@I%zgmRXLIA z?n!5|g9AN%GpF_R;#n{yrkQMhono5+$Z}0TXoH7_&vf(4T!Y!c^vr4fzWgM!OT>vr zM<;7dp0$>huGiWqr^Yt0xX`t|xhir72Hg=-VgHFuV4 z-3|lAraRN$+cVgcLqRqYi$f@qZmI9-9_&e@6!!EEV7S-Q*V_ZIP71*ZHWwLEtTU=y zE1|B@Gio$OMrd^mpR;LY}JlanEs0 z2xc)1ZT_^AL}mX>cmH62-yqcL8R*OAGQG?PH?Uvsb7`FsBG}D{be5}HCQ5KHRzb>p zF^(JP9e|TfXJ}+CyG#KGlO=i-OL#)2C^2rXXu%2DBAf%|OC-8j&WMoY)<{_KywT)@ z%(0wE?pQhtb7J;5T1G31$si>pF^4RxWftk-wjPQ`IuXpIM)+`EzC1QEfgK?Z9aU+Q zdCcSldSYy0+g4ij>M=5U#{tu&>ha#LJyXk4hJoV~ zXj_p*{``EXHOOHM?pWJe+m1x6y*XSE)5`FA&mL!ZEo2#p?AhZCu7xZEkv)5yp|y}@ zAhKtVGq8?jkcv<>L9(xfhC_7Ft&*Mv6BcHq)jP~l4S;!+=8objPnG75;)<*^cNAA- zrMaUx$e}T%Xz3W0o_)Q&In@~`MHMxiuoD~>7^}Z2Iht*>ca&FUCp!L9RMFj0T~S4K zM{`g^&AZerUdN}jjLw3Us)`qxS~FZy8BI)(DwgqinxadR=I5OZQFKYv{JfJaMVDlG zlQhuXggKK*aFqIMts$tSC|v913ZSrsfE{LAX%dXIs6B3QQ=q(xY=VIqug(rra>A?B4pXwjR&A>>s)<%PteP%UsT$S` zmuHO>wwx+LRVBSfIZR|2qb-DC)E-R59oAHjX)Wc{Jva7P^Wid;rJN$`GL@xtg|z8K zt<;7xZGg+tIqI+Nxd3CUsHs#F;C3}(D#IwPrA*u&NJSoP6+DQsR?Ju`{%CWh%%ON< ztC*=2PfQiH6e_c}RAQf~WZN2l5H%TCV?MVRwSvI(`_eG!NxH0IOsmye?T{zk7 zW?H3oyxDa17UO!2r^^-d+9s66iBGz$*{~^qDiLNyIt*yc=rwC9h%uraok=pi_^jdl zM$L`Vj0l{-#zKCRW+P2#(JW7_<2PuQC${n0GqS?QC2Uhn^1)Mf@mn(;%$mljp&={Y zmie(+(}dAl6WDkoEmP#>P^% zjaa+oq7JGBh%L5D?kZkFyQKrhn$XrJv>F|-)e4o0kMbO?656aVq?puivO=a9)wWnT z0fyZ@9^1o7JZxNoD6T))1CO~gct)Xx^0!gr*+02T@jOwr>_EK9tE^VtH{FcrVQY>fS4 zwJ_(bpGjrQ*T&@ph|+0ld9SW4_+_hCsXT0d^D=dv`0PYPUMuw4L$6W>zZN?$b<|mMat$6&a#i|_*l9}d4EApzT%n#P732P z1KZtg`6>=&DYXs&Gv_D{0P8t8X#5Rv(j1c~+P7Y+qbM1Bj+S6G*;q9-ntXFSst-F2T3vMs ziN{azeFCBBYbjj2Mtjj18hzY91s|C7%Xwpw-?59 z8VMbStCKjYlgB{~&;oT%scYBb-le(undL5hCQYAO>e{$-Y6Zs#78knYG!e--r*?8s zJpG)?!c1{_?!1|Eii_v&+ly;FGt1``@TyP^CzWTG^Gi$TJauIi$CA!CC~&YkwXkwN z4#WjAsli#YS}l*0VW=>A78}e$!HKE8Gb@3DX0)5tZce*B+U?bDpLY8LJ9Lvc=(tPE^q5BeQpqP7|V;)IWKER-w^XjNyHBoCc#G8#80L zgoa;oYTAY15Ex#WBt?!{%WKUbDD>Ebk|ViJ4C7YWCDL^4I8ls)a^&+;2Tu6mxV{pg z&&-p>F@qv1A(hFIQQWDhiGqzv1%+c`hdSEL6xA8V#E(`6DM51^8jS;R^G<~P;2GsD zGZzdkPme9ktp?}LTu@(~TAe`-&g?pOXy5AU;zF=(YHqc%WoUIFc+S3=l~o*f99rDp ztl-*Eu=j%I-g9w&T{3oPdGY*}nPm#WVYV5I)_J!QEbQCcG)07(OwY_t?VDe1?%K0B zw`(R?UYy5q=lPjktHG}M<@)k2Q=o!5=pzv2G#8gaQ5Vk&i}Q=i!OAWMZm!PlI@kPO zSw%q(b_UdL=km;Iu(&j{01xj21og#*Dvr+wwZ+9%`2p2}ZOtOVIO!kEuHe7s>IF+P z0S~|hOVi8e1q;pDsnwO>{Mq@b-C)l(<;UD~XkImArGe4Ntp@1kiU_rgNGNz0?-T^{ zvkN=-%?8qc1oKlXNdElFYETsL?DEWv^6z2@i4oP3u_5Sri}S3@0WOU|I+PI~fXba( zosu88masx2!VPd3ez+b?t**jG$XFO>ejj4fS0n;`9zPf!Mu{FP2Gh6z0pk-QB4!tY zo%8257hw;acn_u*k*H>Id1eLKhN4!g1fVbu2k4a>e= zNCd85&eS1ajDeIQ33Cgxi^1$POWf@0++O@kRp)jFQ}e5Y2RL?{uLZO68wDIYk(FTQ z!s6b=WyqxnQ-*ZGS)C0eSD4AX&B5$%N>ccP1R5WbjIOGfEX?d*Z7xmio(b%)Ot7at z2=E{NzOX(BcC-boT)I&>8a~zdG!M+jTd&Q-yq&B$>evsoKa zY|~&p1ImPL=nuejD(^-_9@f<-18N)O=O{6zWl$~C^F7(RIXa~y2y69=6~eSf<2Haa znJ+{PrWyZt`#T%F%l^&K?}^~-ISXN(xtcIyWIIu{tWz3X6Uw}s4yFxAJ@eQDC8yw<0M ztuvAz{0skwW$ltf0^J~#QSw+?uLea``#0g2skV3Wx2}a>;cs0--iN4cN6D6UdnyR% z-bMy~u-TtS01HwrR}W%SHSQh+Fpa|IPW+a3WIuwahHDFcNy~VvmWUDDYA{8SruBQQ ztAzB{TN#{f;y6+(loul!HZ1b@|8pFZKMSF!W~O$|;Vv_N7P8&x!63B@=hkNSpSCv_ zbZ$6ge0^|e`w_uWZAY&=rtR3^5go_19pCoIw#Rgy*!D!Ic_f1U3xDf^bwS(nj(Eu7 z@E?c&&0jZu3>~rl>bA?HJ%H0Unc?21aJaY08}4n=qtN}E ziZkb-OWriLfX)D2Ihtj50jFrpU&n;%+LSeYcSpPTw?%amC6xqs7`e7?c*#(VbIX#C`K~lsejps&meH zxpS7LcAbl6edV0_xt+^X%X8}2uKoMZG1>){C7i%to$21ijM_b&%g$!f`@8qhXtT3$ zkvB33Ud3-Tjy?jV3?25~9C)z0#i3Z^=E~y2?A-1^ek(=!9)gl$FPHFzgaUv?H5OWF z!A>COvFN~%inVL+%G^p*5B))cHi~4X1ukv(u3gHza>2^#%-*J-Cga1EgPn^@Og2n` zu_t*UDbJ(9i3ZJ zoqxcORA)NXu{)K@q&lCSItB#%cSL77^>FewgVwgEeZ3>&^tRNY8xRESw$5jJ;y;7; z20Aya{}otAZH9m&}^XHV)V03HJ%-J?6lLB9=p&!rwRo;qw(>hO+-Z%!SGQ0qH40dQ<*CiOVD59L(^-}4~JSCUV|VHk$}g*kVgZ4D6~F0n>tKvDgqP`afwa}eKgRB!v`J# ziHGb?9h!ldL!jsSEF>b4G$uGO!Ev3Jq#h5_AvD}2AYBXut;8JdxblUFq2t1~Zg@6( zW#XQ;w$x!8E={e!B-L>TQ{2%x3tMeLm>0|YUkB8uDnn<2vs_5uZhRdsByRN*y*w)1c&T zY2V-!>W{Ryr4HF}*Y4EA%H(%;9C2IfF*MRGNZs7-+f#?VCUwYo=eHqh6UcX^4*O_l z$1TsF1-IkpFvbSRTrUc2=p4uIqfj7`yT@fwl{Tj~u77Ik5SF~xi1*32rMi%Vn^O;k z>POt3%0V_z8#?d6zlU~Cu;6XjlbAM#FVDLL zLOQPMX#Y0ycOx)|uriE8Etuz))XAGuUC5?eP~}id^Z;ccZ*~n?c?sK|;os)P_FT>Zs20 zccd~Oic*3oSshNkEtS0`)wenI7*x*nUC8Vah-I0}pD&o4}K28Sg zUk3&qA3!S}{&^m7Q^9|DB=i=}Uq{dxJm2GEIPd&*1nYyRdwfg+oWG7>L(uQ>Hv}o2 zg2RAolM!$jpaY}hV?6vrf_G>?$IWfQQNfkk|4{KC9qiWrhl&4TLDBQOBj^C>JtDZz zu~z{9<1`+_U&wz<@K4R>*t{+13VsOxlC}B~!Q0?J%gQ(+__qE{r!9C~@FDG2`kn}C z_}39UKJ?&MM{rWazcJ$HOg#MS2u=w-_|*~QBL3cB0u-vtdB@Q}obDi)rpH4+^7;E{ zAy&)k7W9VfXQk4hSP#z4_y@U=W74!=xz#v z_tFLaPnu5qZbD@|5^fsqF>p6P_)q8p{~%q+>qJEKi$1We=!@zl@%3O8gYw`m(*^x` zbbEu~O1PWQ7+noF4flG|A^&E&2>d4Uk#TP&AFk*JemCRo4}u=L1DK1$-Em_h*hxCvXKOn3+=R;AMY(WcQqjxU2_hw3LvS}eMd_c0J3;?bF)4$ahI⪙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 literal 0 HcmV?d00001 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.d new file mode 100644 index 0000000..d89336e --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.d @@ -0,0 +1,46 @@ +Output/Debug/Obj/GDCartReader/diskio.o: \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\diskio.c \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ff.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ffconf.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdint.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\__config \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdint.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_ConfDefaults.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Conf.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Arm_Conf.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\diskio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_sdio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\core_cm3.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_version.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_compiler.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_gcc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\system_gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_libopt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\RTE_Components.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_adc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_can.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_crc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dac.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dbg.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dma.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_exti.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fmc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fwdgt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_gpio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_i2c.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_misc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_pmu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rcu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rtc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_spi.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_timer.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_usart.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_wwdgt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\sdcard.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\math.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdlib.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdlib.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\math.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_FP.h diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/diskio.o new file mode 100644 index 0000000000000000000000000000000000000000..bbb03a6b6ac0a97656191512c5620984429b3900 GIT binary patch literal 157168 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%0D3H{kWKS)Sx^5 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 literal 0 HcmV?d00001 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.d new file mode 100644 index 0000000..6a0b5c9 --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.d @@ -0,0 +1,11 @@ +Output/Debug/Obj/GDCartReader/ffunicode.o: \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ffunicode.c \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ff.h \ + D:\OneDrive\Dokumenter\CartReaderApp\fatfs\ffconf.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdint.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\__config \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdint.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_ConfDefaults.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Conf.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Arm_Conf.h diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/ffunicode.o new file mode 100644 index 0000000000000000000000000000000000000000..5eb1207b61f87c719a1116c09da62babd901b4f1 GIT binary patch literal 27740 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

T?ut~!%95h4oan;b@8b(`g>6o)=ZVD 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

p>LVkJXglL; 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 LK4&WKesKQ}h0ob= literal 0 HcmV?d00001 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.d new file mode 100644 index 0000000..c517223 --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.d @@ -0,0 +1,2 @@ +Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.o: \ + J:\GZCSir\gbx_cart\cartflasher\CartReaderApp\GD32F10x\Source\gd32f10x_hd_Vectors.s diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/gd32f10x_hd_Vectors.o new file mode 100644 index 0000000000000000000000000000000000000000..c1418dbcfcf6cdc178d055f761c6b8f2bec84457 GIT binary patch literal 15832 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≻)_1=+;bAl$oINvNX# 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

Sy3{T3T1Iu1ReocvpD4F4pC4&ju#mLZvJ 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%0DF#N9J&kgq*{=u-YG;Bvt!@sFHJi|+cQ#l7U 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 literal 0 HcmV?d00001 diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.d b/CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.d new file mode 100644 index 0000000..7e03cf7 --- /dev/null +++ b/CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.d @@ -0,0 +1,36 @@ +Output/Debug/Obj/GDCartReader/system_gd32f10x.o: \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Source\system_gd32f10x.c \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\core_cm3.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\stdint.h \ + C:\Users\HDR\AppData\Local\SEGGER\SEGGER\ Embedded\ Studio\v3\packages\libraries\libcxx\include\__config \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\stdint.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_ConfDefaults.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Conf.h \ + D:\SEGGER\SEGGER\ Embedded\ Studio\ for\ ARM\ 6.22a\include\__SEGGER_RTL_Arm_Conf.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_version.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_compiler.h \ + D:\OneDrive\Dokumenter\CartReaderApp\CMSIS_5\CMSIS\Core\Include\cmsis_gcc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\system_gd32f10x.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_libopt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\RTE_Components.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_adc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_can.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_crc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dac.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dbg.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_dma.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_exti.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fmc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_fwdgt.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_gpio.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_i2c.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_misc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_pmu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rcu.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_rtc.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_spi.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_timer.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_usart.h \ + D:\OneDrive\Dokumenter\CartReaderApp\GD32F10x\Device\Include\gd32f10x_wwdgt.h diff --git a/CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.o b/CartReaderApp/Output/Debug/Obj/GDCartReader/system_gd32f10x.o new file mode 100644 index 0000000000000000000000000000000000000000..0fa75396efafb701d41233f40122bdcea61c4a05 GIT binary patch literal 138996 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⁢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�gS=rQiyxH7 z|JmkP+4!34dURqF`OSauSHl0uB8TM%{voeyfAF{YUdI>volaxmtr(0S)Q^8Pko