From 3c14cb8e8f980f2ae291420eeefc0dcc9f5a79a2 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Mon, 18 Aug 2025 00:10:27 +0800 Subject: [PATCH 1/6] add EK-RA2A1 support --- .github/ALL_BSP_COMPILE.json | 3 +- .../libraries/HAL_Drivers/config/drv_config.h | 25 + .../HAL_Drivers/config/ra2a1/adc_config.h | 42 + .../HAL_Drivers/config/ra2a1/can_config.h | 48 + .../HAL_Drivers/config/ra2a1/dac_config.h | 41 + .../HAL_Drivers/config/ra2a1/pwm_config.h | 68 + .../HAL_Drivers/config/ra2a1/uart_config.h | 58 + bsp/renesas/libraries/Kconfig | 6 + bsp/renesas/ra2a1-ek/.api_xml | 2 + bsp/renesas/ra2a1-ek/.config | 1419 ++ bsp/renesas/ra2a1-ek/.gitignore | 5 + bsp/renesas/ra2a1-ek/.ignore_format.yml | 9 + bsp/renesas/ra2a1-ek/.secure_azone | 44 + bsp/renesas/ra2a1-ek/.secure_rzone | 242 + bsp/renesas/ra2a1-ek/.secure_xml | 63 + .../ra2a1-ek/.settings/standalone.prefs | 28 + bsp/renesas/ra2a1-ek/EventRecorderStub.scvd | 9 + bsp/renesas/ra2a1-ek/Kconfig | 17 + bsp/renesas/ra2a1-ek/README.md | 183 + bsp/renesas/ra2a1-ek/SConscript | 28 + bsp/renesas/ra2a1-ek/SConstruct | 54 + bsp/renesas/ra2a1-ek/board/Kconfig | 112 + bsp/renesas/ra2a1-ek/board/SConscript | 16 + bsp/renesas/ra2a1-ek/board/board.h | 38 + bsp/renesas/ra2a1-ek/board/ports/SConscript | 22 + bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h | 82 + bsp/renesas/ra2a1-ek/buildinfo.gpdsc | 183 + bsp/renesas/ra2a1-ek/configuration.xml | 312 + .../picture/PixPin_2025-08-17_23-14-53.png | Bin 0 -> 71855 bytes .../picture/PixPin_2025-08-17_23-17-25.png | Bin 0 -> 10145 bytes .../picture/PixPin_2025-08-17_23-18-20.png | Bin 0 -> 25983 bytes .../picture/PixPin_2025-08-17_23-20-37.png | Bin 0 -> 56350 bytes .../picture/PixPin_2025-08-17_23-43-47.png | Bin 0 -> 729368 bytes .../picture/ek-ra2a1-evaluation-board_0.jpg | Bin 0 -> 103487 bytes .../ra2a1-ek/docs/picture/readme_faq1.png | Bin 0 -> 19419 bytes bsp/renesas/ra2a1-ek/fsp_gen.scat | 323 + bsp/renesas/ra2a1-ek/memory_regions.scat | 17 + bsp/renesas/ra2a1-ek/project.uvoptx | 878 + bsp/renesas/ra2a1-ek/project.uvprojx | 2199 ++ bsp/renesas/ra2a1-ek/ra/SConscript | 26 + .../Core/Include/a-profile/cmsis_armclang_a.h | 392 + .../Core/Include/a-profile/cmsis_clang_a.h | 386 + .../CMSIS/Core/Include/a-profile/cmsis_cp15.h | 564 + .../Core/Include/a-profile/cmsis_gcc_a.h | 223 + .../Core/Include/a-profile/cmsis_iccarm_a.h | 558 + .../CMSIS/Core/Include/a-profile/irq_ctrl.h | 190 + .../CMSIS/Core/Include/cmsis_armclang.h | 707 + .../CMSIS_6/CMSIS/Core/Include/cmsis_clang.h | 708 + .../CMSIS/Core/Include/cmsis_compiler.h | 292 + .../CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h | 1006 + .../CMSIS/Core/Include/cmsis_version.h | 44 + .../arm/CMSIS_6/CMSIS/Core/Include/core_ca.h | 3000 +++ .../arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h | 967 + .../CMSIS_6/CMSIS/Core/Include/core_cm0plus.h | 1103 + .../arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h | 992 + .../CMSIS_6/CMSIS/Core/Include/core_cm23.h | 2253 ++ .../arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h | 2045 ++ .../CMSIS_6/CMSIS/Core/Include/core_cm33.h | 3245 +++ .../CMSIS_6/CMSIS/Core/Include/core_cm35p.h | 3245 +++ .../arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h | 2237 ++ .../CMSIS_6/CMSIS/Core/Include/core_cm52.h | 4783 ++++ .../CMSIS_6/CMSIS/Core/Include/core_cm55.h | 4895 ++++ .../arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h | 2468 ++ .../CMSIS_6/CMSIS/Core/Include/core_cm85.h | 4936 ++++ .../CMSIS_6/CMSIS/Core/Include/core_sc000.h | 1055 + .../CMSIS_6/CMSIS/Core/Include/core_sc300.h | 2028 ++ .../CMSIS_6/CMSIS/Core/Include/core_starmc1.h | 3614 +++ .../Core/Include/m-profile/armv7m_cachel1.h | 439 + .../CMSIS/Core/Include/m-profile/armv7m_mpu.h | 273 + .../Core/Include/m-profile/armv81m_pac.h | 203 + .../CMSIS/Core/Include/m-profile/armv8m_mpu.h | 421 + .../CMSIS/Core/Include/m-profile/armv8m_pmu.h | 335 + .../Core/Include/m-profile/cmsis_armclang_m.h | 818 + .../Core/Include/m-profile/cmsis_clang_m.h | 824 + .../Core/Include/m-profile/cmsis_gcc_m.h | 717 + .../Core/Include/m-profile/cmsis_iccarm_m.h | 1043 + .../Include/m-profile/cmsis_tiarmclang_m.h | 1451 ++ .../Core/Include/r-profile/cmsis_armclang_r.h | 161 + .../Core/Include/r-profile/cmsis_clang_r.h | 161 + .../Core/Include/r-profile/cmsis_gcc_r.h | 163 + .../CMSIS_6/CMSIS/Core/Include/tz_context.h | 68 + bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/LICENSE | 201 + .../ra2a1-ek/ra/board/ra2a1_ek/board.h | 52 + .../ra2a1-ek/ra/board/ra2a1_ek/board_init.c | 53 + .../ra2a1-ek/ra/board/ra2a1_ek/board_init.h | 50 + .../ra2a1-ek/ra/board/ra2a1_ek/board_leds.c | 60 + .../ra2a1-ek/ra/board/ra2a1_ek/board_leds.h | 64 + bsp/renesas/ra2a1-ek/ra/fsp/inc/api/bsp_api.h | 100 + .../ra2a1-ek/ra/fsp/inc/api/fsp_common_api.h | 385 + .../ra2a1-ek/ra/fsp/inc/api/r_ioport_api.h | 192 + .../ra2a1-ek/ra/fsp/inc/api/r_transfer_api.h | 389 + .../ra2a1-ek/ra/fsp/inc/api/r_uart_api.h | 267 + .../ra2a1-ek/ra/fsp/inc/fsp_features.h | 297 + bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_version.h | 76 + .../ra2a1-ek/ra/fsp/inc/instances/r_ioport.h | 525 + .../ra/fsp/inc/instances/r_sci_uart.h | 249 + .../cmsis/Device/RENESAS/Include/R7FA2A1AB.h | 20344 ++++++++++++++++ .../cmsis/Device/RENESAS/Include/renesas.h | 172 + .../bsp/cmsis/Device/RENESAS/Include/system.h | 44 + .../bsp/cmsis/Device/RENESAS/Source/startup.c | 137 + .../bsp/cmsis/Device/RENESAS/Source/system.c | 693 + .../ra/fsp/src/bsp/mcu/all/bsp_clocks.c | 3443 +++ .../ra/fsp/src/bsp/mcu/all/bsp_clocks.h | 1793 ++ .../ra/fsp/src/bsp/mcu/all/bsp_common.c | 311 + .../ra/fsp/src/bsp/mcu/all/bsp_common.h | 764 + .../src/bsp/mcu/all/bsp_compiler_support.h | 90 + .../ra/fsp/src/bsp/mcu/all/bsp_delay.c | 205 + .../ra/fsp/src/bsp/mcu/all/bsp_delay.h | 77 + .../ra/fsp/src/bsp/mcu/all/bsp_exceptions.h | 44 + .../ra/fsp/src/bsp/mcu/all/bsp_group_irq.c | 122 + .../ra/fsp/src/bsp/mcu/all/bsp_group_irq.h | 69 + .../ra/fsp/src/bsp/mcu/all/bsp_guard.c | 41 + .../ra/fsp/src/bsp/mcu/all/bsp_guard.h | 32 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.c | 27 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.h | 465 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.c | 148 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.h | 60 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.c | 282 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.h | 238 + .../ra/fsp/src/bsp/mcu/all/bsp_macl.c | 2050 ++ .../ra/fsp/src/bsp/mcu/all/bsp_macl.h | 164 + .../ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h | 79 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mmf.h | 141 + .../ra/fsp/src/bsp/mcu/all/bsp_module_stop.h | 382 + .../src/bsp/mcu/all/bsp_register_protection.c | 119 + .../src/bsp/mcu/all/bsp_register_protection.h | 60 + .../ra/fsp/src/bsp/mcu/all/bsp_sbrk.c | 104 + .../ra/fsp/src/bsp/mcu/all/bsp_sdram.c | 199 + .../ra/fsp/src/bsp/mcu/all/bsp_sdram.h | 37 + .../ra/fsp/src/bsp/mcu/all/bsp_security.c | 546 + .../ra/fsp/src/bsp/mcu/all/bsp_security.h | 33 + .../ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_tfu.h | 218 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h | 212 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h | 615 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c | 33 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h | 44 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h | 61 + .../ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h | 216 + .../ra2a1-ek/ra/fsp/src/r_ioport/r_ioport.c | 962 + .../ra/fsp/src/r_sci_uart/r_sci_uart.c | 2029 ++ bsp/renesas/ra2a1-ek/ra_cfg/SConscript | 19 + .../ra2a1-ek/ra_cfg/fsp_cfg/bsp/board_cfg.h | 5 + .../ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h | 63 + .../ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h | 5 + .../fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h | 12 + .../ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h | 42 + .../ra_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h | 14 + .../ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h | 16 + .../ra2a1-ek/ra_cfg/fsp_cfg/r_ioport_cfg.h | 13 + .../ra2a1-ek/ra_cfg/fsp_cfg/r_sci_uart_cfg.h | 17 + bsp/renesas/ra2a1-ek/ra_gen/SConscript | 18 + bsp/renesas/ra2a1-ek/ra_gen/bsp_clock_cfg.h | 17 + bsp/renesas/ra2a1-ek/ra_gen/common_data.c | 11 + bsp/renesas/ra2a1-ek/ra_gen/common_data.h | 20 + bsp/renesas/ra2a1-ek/ra_gen/hal_data.c | 97 + bsp/renesas/ra2a1-ek/ra_gen/hal_data.h | 24 + bsp/renesas/ra2a1-ek/ra_gen/main.c | 6 + bsp/renesas/ra2a1-ek/ra_gen/pin_data.c | 127 + bsp/renesas/ra2a1-ek/ra_gen/vector_data.c | 21 + bsp/renesas/ra2a1-ek/ra_gen/vector_data.h | 32 + bsp/renesas/ra2a1-ek/rasc_launcher.bat | 83 + bsp/renesas/ra2a1-ek/rasc_version.bat | 225 + bsp/renesas/ra2a1-ek/rasc_version.txt | 3 + bsp/renesas/ra2a1-ek/rtconfig.h | 419 + bsp/renesas/ra2a1-ek/rtconfig.py | 97 + .../script/bsp_link/GCC/bsp_linker_info.h | 116 + .../script/bsp_link/Keil/bsp_linker_info.h | 138 + bsp/renesas/ra2a1-ek/script/fsp.ld | 6 + bsp/renesas/ra2a1-ek/script/fsp.scat | 3 + bsp/renesas/ra2a1-ek/script/fsp_gen.ld | 330 + bsp/renesas/ra2a1-ek/script/memory_regions.ld | 17 + bsp/renesas/ra2a1-ek/src/hal_entry.c | 27 + bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW | 1878 ++ bsp/renesas/ra2a1-ek/template.uvoptx | 218 + bsp/renesas/ra2a1-ek/template.uvprojx | 433 + bsp/renesas/ra2a1-ek/via/rasc_armasm.via | 1 + bsp/renesas/ra2a1-ek/via/rasc_armclang.via | 20 + bsp/renesas/ra2a1-ek/via/rasc_armlink.via | 6 + 178 files changed, 107078 insertions(+), 1 deletion(-) create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra2a1/adc_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra2a1/can_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra2a1/dac_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra2a1/pwm_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra2a1/uart_config.h create mode 100644 bsp/renesas/ra2a1-ek/.api_xml create mode 100644 bsp/renesas/ra2a1-ek/.config create mode 100644 bsp/renesas/ra2a1-ek/.gitignore create mode 100644 bsp/renesas/ra2a1-ek/.ignore_format.yml create mode 100644 bsp/renesas/ra2a1-ek/.secure_azone create mode 100644 bsp/renesas/ra2a1-ek/.secure_rzone create mode 100644 bsp/renesas/ra2a1-ek/.secure_xml create mode 100644 bsp/renesas/ra2a1-ek/.settings/standalone.prefs create mode 100644 bsp/renesas/ra2a1-ek/EventRecorderStub.scvd create mode 100644 bsp/renesas/ra2a1-ek/Kconfig create mode 100644 bsp/renesas/ra2a1-ek/README.md create mode 100644 bsp/renesas/ra2a1-ek/SConscript create mode 100644 bsp/renesas/ra2a1-ek/SConstruct create mode 100644 bsp/renesas/ra2a1-ek/board/Kconfig create mode 100644 bsp/renesas/ra2a1-ek/board/SConscript create mode 100644 bsp/renesas/ra2a1-ek/board/board.h create mode 100644 bsp/renesas/ra2a1-ek/board/ports/SConscript create mode 100644 bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/buildinfo.gpdsc create mode 100644 bsp/renesas/ra2a1-ek/configuration.xml create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-14-53.png create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-17-25.png create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-18-20.png create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-20-37.png create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/ek-ra2a1-evaluation-board_0.jpg create mode 100644 bsp/renesas/ra2a1-ek/docs/picture/readme_faq1.png create mode 100644 bsp/renesas/ra2a1-ek/fsp_gen.scat create mode 100644 bsp/renesas/ra2a1-ek/memory_regions.scat create mode 100644 bsp/renesas/ra2a1-ek/project.uvoptx create mode 100644 bsp/renesas/ra2a1-ek/project.uvprojx create mode 100644 bsp/renesas/ra2a1-ek/ra/SConscript create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h create mode 100644 bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/LICENSE create mode 100644 bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board.h create mode 100644 bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.c create mode 100644 bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.h create mode 100644 bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.c create mode 100644 bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/api/bsp_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/api/fsp_common_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_ioport_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_transfer_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_uart_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_features.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_version.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_ioport.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_sci_uart.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA2A1AB.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mmf.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_tfu.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/r_ioport/r_ioport.c create mode 100644 bsp/renesas/ra2a1-ek/ra/fsp/src/r_sci_uart/r_sci_uart.c create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/SConscript create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/board_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_ioport_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_sci_uart_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/SConscript create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/bsp_clock_cfg.h create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/common_data.c create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/common_data.h create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/hal_data.c create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/hal_data.h create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/main.c create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/pin_data.c create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/vector_data.c create mode 100644 bsp/renesas/ra2a1-ek/ra_gen/vector_data.h create mode 100644 bsp/renesas/ra2a1-ek/rasc_launcher.bat create mode 100644 bsp/renesas/ra2a1-ek/rasc_version.bat create mode 100644 bsp/renesas/ra2a1-ek/rasc_version.txt create mode 100644 bsp/renesas/ra2a1-ek/rtconfig.h create mode 100644 bsp/renesas/ra2a1-ek/rtconfig.py create mode 100644 bsp/renesas/ra2a1-ek/script/bsp_link/GCC/bsp_linker_info.h create mode 100644 bsp/renesas/ra2a1-ek/script/bsp_link/Keil/bsp_linker_info.h create mode 100644 bsp/renesas/ra2a1-ek/script/fsp.ld create mode 100644 bsp/renesas/ra2a1-ek/script/fsp.scat create mode 100644 bsp/renesas/ra2a1-ek/script/fsp_gen.ld create mode 100644 bsp/renesas/ra2a1-ek/script/memory_regions.ld create mode 100644 bsp/renesas/ra2a1-ek/src/hal_entry.c create mode 100644 bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW create mode 100644 bsp/renesas/ra2a1-ek/template.uvoptx create mode 100644 bsp/renesas/ra2a1-ek/template.uvprojx create mode 100644 bsp/renesas/ra2a1-ek/via/rasc_armasm.via create mode 100644 bsp/renesas/ra2a1-ek/via/rasc_armclang.via create mode 100644 bsp/renesas/ra2a1-ek/via/rasc_armlink.via diff --git a/.github/ALL_BSP_COMPILE.json b/.github/ALL_BSP_COMPILE.json index 496aa9ce064..a603a70d8c4 100644 --- a/.github/ALL_BSP_COMPILE.json +++ b/.github/ALL_BSP_COMPILE.json @@ -262,6 +262,7 @@ "renesas/rzt2m_rsk", "renesas/rzn2l_rsk", "renesas/rzn2l_etherkit", + "renesas/ra2a1-ek", "frdm-k64f", "xplorer4330/M4" ] @@ -501,4 +502,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h b/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h index 89e0d04f8a5..97d3b3a3846 100644 --- a/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h +++ b/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h @@ -7,6 +7,7 @@ * Date Author Notes * 2021-07-29 KyleChan first version * 2022-12-7 Vandoul ADD ra4m2 +* 2025-08-17 CYFS ADD ra2a1 */ #ifndef __DRV_CONFIG_H__ @@ -203,6 +204,30 @@ extern "C" #endif #endif /* SOC_SERIES_R7FA6E2 */ +#if defined(SOC_SERIES_R7FA2A1) +#include "ra2a1/uart_config.h" + +#ifdef BSP_USING_ADC +#include "ra2a1/adc_config.h" +#endif + +#ifdef BSP_USING_DAC +#include "ra2a1/dac_config.h" +#endif + +#ifdef BSP_USING_PWM +#include "ra2a1/pwm_config.h" +#endif + +#ifdef BSP_USING_TIM +#include "ra2a1/timer_config.h" +#endif + +#ifdef BSP_USING_CAN +#include "ra2a1/can_config.h" +#endif +#endif /* SOC_SERIES_R7FA2A1 */ + #ifdef __cplusplus } #endif diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/adc_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/adc_config.h new file mode 100644 index 00000000000..9a02bece717 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/adc_config.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ + +#ifndef __ADC_CONFIG_H__ +#define __ADC_CONFIG_H__ + +#include +#include +#include "hal_data.h" +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BSP_USING_ADC0) || defined(BSP_USING_ADC1) + +struct rt_adc_dev +{ + struct rt_adc_ops ops; + struct rt_adc_device adc_device; +}; + +struct ra_adc_map +{ + const char *device_name; + const adc_cfg_t *g_cfg; + const adc_ctrl_t *g_ctrl; + const adc_channel_cfg_t *g_channel_cfg; +}; +#endif +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/can_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/can_config.h new file mode 100644 index 00000000000..aa01d94ece6 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/can_config.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ + +#ifndef __CAN_CONFIG_H__ +#define __CAN_CONFIG_H__ + +#include +#include "hal_data.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BSP_USING_CAN0) +#ifndef CAN0_CONFIG +#define CAN0_CONFIG \ + { \ + .name = "can0", \ + .num_of_mailboxs = CAN_NO_OF_MAILBOXES_g_can0, \ + .p_api_ctrl = &g_can0_ctrl, \ + .p_cfg = &g_can0_cfg, \ + } +#endif /* CAN0_CONFIG */ +#endif /* BSP_USING_CAN0 */ + +#if defined(BSP_USING_CAN1) +#ifndef CAN1_CONFIG +#define CAN1_CONFIG \ + { \ + .name = "can1", \ + .num_of_mailboxs = CAN_NO_OF_MAILBOXES_g_can1, \ + .p_api_ctrl = &g_can1_ctrl, \ + .p_cfg = &g_can1_cfg, \ + } +#endif /* CAN1_CONFIG */ +#endif /* BSP_USING_CAN1 */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/dac_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/dac_config.h new file mode 100644 index 00000000000..059d5a10de7 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/dac_config.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ + +#ifndef __DAC_CONFIG_H__ +#define __DAC_CONFIG_H__ + +#include +#include +#include "hal_data.h" +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef BSP_USING_DAC +struct ra_dac_map +{ + char name; + const struct st_dac_cfg *g_cfg; + const struct st_dac_instance_ctrl *g_ctrl; +}; + +struct ra_dac_dev +{ + rt_dac_device_t ra_dac_device_t; + struct ra_dac_map *ra_dac_map_dev; +}; +#endif + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/pwm_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/pwm_config.h new file mode 100644 index 00000000000..3590ec1e9b6 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/pwm_config.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ +#ifndef __PWM_CONFIG_H__ +#define __PWM_CONFIG_H__ + +#include +#include +#include "hal_data.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum +{ +#ifdef BSP_USING_PWM0 + BSP_PWM0_INDEX, +#endif +#ifdef BSP_USING_PWM1 + BSP_PWM1_INDEX, +#endif +#ifdef BSP_USING_PWM2 + BSP_PWM2_INDEX, +#endif +#ifdef BSP_USING_PWM3 + BSP_PWM3_INDEX, +#endif +#ifdef BSP_USING_PWM4 + BSP_PWM4_INDEX, +#endif +#ifdef BSP_USING_PWM5 + BSP_PWM5_INDEX, +#endif +#ifdef BSP_USING_PWM6 + BSP_PWM6_INDEX, +#endif +#ifdef BSP_USING_PWM7 + BSP_PWM7_INDEX, +#endif +#ifdef BSP_USING_PWM8 + BSP_PWM8_INDEX, +#endif +#ifdef BSP_USING_PWM9 + BSP_PWM9_INDEX, +#endif + BSP_PWMS_NUM +}; + +#define PWM_DRV_INITIALIZER(num) \ + { \ + .name = "pwm"#num , \ + .g_cfg = &g_timer##num##_cfg, \ + .g_ctrl = &g_timer##num##_ctrl, \ + .g_timer = &g_timer##num, \ + } + +#ifdef __cplusplus +} +#endif + +#endif /* __PWM_CONFIG_H__ */ diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/uart_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/uart_config.h new file mode 100644 index 00000000000..f2a10eb3a0a --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra2a1/uart_config.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2006-2025, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ + +#ifndef __UART_CONFIG_H__ +#define __UART_CONFIG_H__ + +#include +#include "hal_data.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(BSP_USING_UART0) +#ifndef UART0_CONFIG +#define UART0_CONFIG \ + { \ + .name = "uart0", \ + .p_api_ctrl = &g_uart0_ctrl, \ + .p_cfg = &g_uart0_cfg, \ + } +#endif /* UART0_CONFIG */ +#endif /* BSP_USING_UART0 */ + +#if defined(BSP_USING_UART1) +#ifndef UART1_CONFIG +#define UART1_CONFIG \ + { \ + .name = "uart1", \ + .p_api_ctrl = &g_uart1_ctrl, \ + .p_cfg = &g_uart1_cfg, \ + } +#endif /* UART1_CONFIG */ +#endif /* BSP_USING_UART1 */ + +#if defined(BSP_USING_UART9) +#ifndef UART9_CONFIG +#define UART9_CONFIG \ + { \ + .name = "uart9", \ + .p_api_ctrl = &g_uart9_ctrl, \ + .p_cfg = &g_uart9_cfg, \ + } +#endif /* UART9_CONFIG */ +#endif /* BSP_USING_UART9 */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/renesas/libraries/Kconfig b/bsp/renesas/libraries/Kconfig index c3dcc34b364..b75a00d252f 100644 --- a/bsp/renesas/libraries/Kconfig +++ b/bsp/renesas/libraries/Kconfig @@ -59,4 +59,10 @@ config SOC_SERIES_R7FA6E2 bool select ARCH_ARM_CORTEX_M33 select SOC_FAMILY_RENESAS_RA + default n + +config SOC_SERIES_R7FA2A1 + bool + select ARCH_ARM_CORTEX_M23 + select SOC_FAMILY_RENESAS_RA default n \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/.api_xml b/bsp/renesas/ra2a1-ek/.api_xml new file mode 100644 index 00000000000..fc9bf0b30e4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.api_xml @@ -0,0 +1,2 @@ + + diff --git a/bsp/renesas/ra2a1-ek/.config b/bsp/renesas/ra2a1-ek/.config new file mode 100644 index 00000000000..0d3eae3d0a2 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.config @@ -0,0 +1,1419 @@ + +# +# RT-Thread Kernel +# + +# +# klibc options +# + +# +# rt_vsnprintf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSNPRINTF is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_LONGLONG is not set +# CONFIG_RT_KLIBC_USING_VSNPRINTF_STANDARD is not set +# end of rt_vsnprintf options + +# +# rt_vsscanf options +# +# CONFIG_RT_KLIBC_USING_LIBC_VSSCANF is not set +# end of rt_vsscanf options + +# +# rt_memset options +# +# CONFIG_RT_KLIBC_USING_USER_MEMSET is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMSET is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMSET is not set +# end of rt_memset options + +# +# rt_memcpy options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCPY is not set +# CONFIG_RT_KLIBC_USING_TINY_MEMCPY is not set +# end of rt_memcpy options + +# +# rt_memmove options +# +# CONFIG_RT_KLIBC_USING_USER_MEMMOVE is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMMOVE is not set +# end of rt_memmove options + +# +# rt_memcmp options +# +# CONFIG_RT_KLIBC_USING_USER_MEMCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_MEMCMP is not set +# end of rt_memcmp options + +# +# rt_strstr options +# +# CONFIG_RT_KLIBC_USING_USER_STRSTR is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRSTR is not set +# end of rt_strstr options + +# +# rt_strcasecmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCASECMP is not set +# end of rt_strcasecmp options + +# +# rt_strncpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCPY is not set +# end of rt_strncpy options + +# +# rt_strcpy options +# +# CONFIG_RT_KLIBC_USING_USER_STRCPY is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCPY is not set +# end of rt_strcpy options + +# +# rt_strncmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRNCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRNCMP is not set +# end of rt_strncmp options + +# +# rt_strcmp options +# +# CONFIG_RT_KLIBC_USING_USER_STRCMP is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRCMP is not set +# end of rt_strcmp options + +# +# rt_strlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRLEN is not set +# CONFIG_RT_KLIBC_USING_LIBC_STRLEN is not set +# end of rt_strlen options + +# +# rt_strnlen options +# +# CONFIG_RT_KLIBC_USING_USER_STRNLEN is not set +# end of rt_strnlen options + +# CONFIG_RT_UTEST_TC_USING_KLIBC is not set +# end of klibc options + +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_NANO is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_CPUS_NR=1 +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +# CONFIG_RT_USING_HOOKLIST is not set +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=256 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 +# CONFIG_RT_USING_TIMER_ALL_SOFT is not set +# CONFIG_RT_USING_CPU_USAGE_TRACER is not set + +# +# kservice options +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice options + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_ASSERT=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_AUTO_INIT is not set +# CONFIG_RT_USING_CI_ACTION is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +# CONFIG_RT_USING_MEMPOOL is not set +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +# CONFIG_RT_USING_MEMHEAP is not set +CONFIG_RT_USING_SMALL_MEM_AS_HEAP=y +# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +# CONFIG_RT_USING_THREADSAFE_PRINTF is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=128 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart0" +CONFIG_RT_VER_NUM=0x50201 +# CONFIG_RT_USING_STDC_ATOMIC is not set +CONFIG_RT_BACKTRACE_LEVEL_MAX_NR=32 +# end of RT-Thread Kernel + +CONFIG_RT_USING_HW_ATOMIC=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M23=y + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_DEV_BUS is not set +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y +# CONFIG_RT_SERIAL_BUF_STRATEGY_DROP is not set +CONFIG_RT_SERIAL_BUF_STRATEGY_OVERWRITE=y +CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_USING_SERIAL_BYPASS is not set +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_CPUTIME is not set +# CONFIG_RT_USING_I2C is not set +# CONFIG_RT_USING_PHY is not set +# CONFIG_RT_USING_PHY_V2 is not set +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +# CONFIG_RT_USING_TOUCH is not set +# CONFIG_RT_USING_LCD is not set +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_BLK is not set +# CONFIG_RT_USING_VIRTIO is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_KTIME is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CHERRYUSB is not set +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Memory protection +# +# CONFIG_RT_USING_MEM_PROTECTION is not set +# CONFIG_RT_USING_HW_STACK_GUARD is not set +# end of Memory protection + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set + +# +# Using USB legacy version +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB legacy version + +# CONFIG_RT_USING_FDT is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# CONFIG_PKG_USING_PNET is not set +# CONFIG_PKG_USING_OPENER is not set +# CONFIG_PKG_USING_FREEMQTT is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# CONFIG_PKG_USING_RYAN_JSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# CONFIG_PKG_USING_RVBACKTRACE is not set +# CONFIG_PKG_USING_HPATCHLITE is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_UART_FRAMEWORK is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_RMP is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# CONFIG_PKG_USING_HEARTBEAT is not set +# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32F0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F1_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F2_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F3_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32F7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32G4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32H7RS_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L0_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32U5_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# CONFIG_PKG_USING_STM32WL_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WL_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32WB_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32MP1_M4_CMSIS_DRIVER is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# CONFIG_PKG_USING_MM32 is not set + +# +# WCH HAL & SDK Drivers +# +# CONFIG_PKG_USING_CH32V20x_SDK is not set +# CONFIG_PKG_USING_CH32V307_SDK is not set +# end of WCH HAL & SDK Drivers + +# +# AT32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_AT32A403A_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A403A_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32A423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F45x_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F402_405_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F403A_407_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F413_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F415_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F421_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F423_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F425_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32F435_437_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_HAL_DRIVER is not set +# CONFIG_PKG_USING_AT32M412_416_CMSIS_DRIVER is not set +# end of AT32 HAL & SDK Drivers + +# +# HC32 DDL Drivers +# +# CONFIG_PKG_USING_HC32F4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_HC32F4_SERIES_DRIVER is not set +# end of HC32 DDL Drivers + +# +# NXP HAL & SDK Drivers +# +# CONFIG_PKG_USING_NXP_MCX_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NXP_MCX_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC_DRIVER is not set +# CONFIG_PKG_USING_NXP_LPC55S_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6SX_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMX6UL_DRIVER is not set +# CONFIG_PKG_USING_NXP_IMXRT_DRIVER is not set +# end of NXP HAL & SDK Drivers + +# +# NUVOTON Drivers +# +# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set +# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set +# end of NUVOTON Drivers + +# +# GD32 Drivers +# +# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set +# end of GD32 Drivers +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_MAX31855 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90382 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90394 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# CONFIG_PKG_USING_P3T1755 is not set +# CONFIG_PKG_USING_QMI8658 is not set +# CONFIG_PKG_USING_ICM20948 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_BT_MX02 is not set +# CONFIG_PKG_USING_GC9A01 is not set +# CONFIG_PKG_USING_IK485 is not set +# CONFIG_PKG_USING_SERVO is not set +# CONFIG_PKG_USING_SEAN_WS2812B is not set +# CONFIG_PKG_USING_IC74HC165 is not set +# CONFIG_PKG_USING_IST8310 is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# CONFIG_PKG_USING_LLMCHAT is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# CONFIG_PKG_USING_TINYSQUARE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LIBCRC is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# CONFIG_PKG_USING_DRMP is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_RTDUINO_SENSORFUSION_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_SOC_FAMILY_RENESAS_RA=y +CONFIG_SOC_SERIES_R7FA2A1=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_R7FA2A1AB=y + +# +# Onboard Peripheral Drivers +# + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_ONCHIP_FLASH is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_ONCHIP_RTC is not set +CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART0=y +# CONFIG_BSP_UART0_RX_USING_DMA is not set +# CONFIG_BSP_UART0_TX_USING_DMA is not set +CONFIG_BSP_UART0_RX_BUFSIZE=256 +CONFIG_BSP_UART0_TX_BUFSIZE=0 +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# end of Hardware Drivers Config diff --git a/bsp/renesas/ra2a1-ek/.gitignore b/bsp/renesas/ra2a1-ek/.gitignore new file mode 100644 index 00000000000..9ac428c1b3e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.gitignore @@ -0,0 +1,5 @@ +/RTE +/Listings +/Objects +ra_cfg.txt + diff --git a/bsp/renesas/ra2a1-ek/.ignore_format.yml b/bsp/renesas/ra2a1-ek/.ignore_format.yml new file mode 100644 index 00000000000..af51bf92aa6 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.ignore_format.yml @@ -0,0 +1,9 @@ +# files format check exclude path, please follow the instructions below to modify; +# If you need to exclude an entire folder, add the folder path in dir_path; +# If you need to exclude a file, add the path to the file in file_path. + +dir_path: +- ra +- ra_gen +- ra_cfg +- RTE diff --git a/bsp/renesas/ra2a1-ek/.secure_azone b/bsp/renesas/ra2a1-ek/.secure_azone new file mode 100644 index 00000000000..7562ac6d7f9 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.secure_azone @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/.secure_rzone b/bsp/renesas/ra2a1-ek/.secure_rzone new file mode 100644 index 00000000000..82e177ad94a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.secure_rzone @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/.secure_xml b/bsp/renesas/ra2a1-ek/.secure_xml new file mode 100644 index 00000000000..b76b6f2b39a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.secure_xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/.settings/standalone.prefs b/bsp/renesas/ra2a1-ek/.settings/standalone.prefs new file mode 100644 index 00000000000..4673ca4bce5 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/.settings/standalone.prefs @@ -0,0 +1,28 @@ +#Sun Aug 17 23:22:42 CST 2025 +com.renesas.cdt.ddsc.content/com.renesas.cdt.ddsc.content.defaultlinkerscript=script/fsp.scat +com.renesas.cdt.ddsc.contentgen.options/options/suppresswarningspaths=ra/arm +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#Main\#\#CoreM\#\#\#\#6.1.0+fsp.6.0.0/all=1441545198,ra/arm/CMSIS_6/LICENSE|409404162,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h|3070162158,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h|2642675438,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h|432601292,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h|1219721305,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h|1716662092,ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h|3033126542,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h|3716711724,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h|1573341164,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h|1528066797,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h|956077447,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h|3181146757,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h|3422691989,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h|3011809468,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h|862174236,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h|3557548549,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h|2145813412,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h|215226313,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h|3759822293,ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h|3285488134,ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h|3342995321,ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h|440777068,ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h|987654843,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h|1790528804,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h|117658130,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h|3644000269,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h|947683335,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h|3200474466,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h|2703360002,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h|271089146,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h|3180041419,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h|1572899130,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h|1964429271,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h|2095512231,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h|2951442685,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h|1179088122,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h|1753083115,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h|163659099,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h|718227869,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h|681720804,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h|154254372,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#Main\#\#CoreM\#\#\#\#6.1.0+fsp.6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#6.0.0/all=2733360937,ra/board/ra2a1_ek/board.h|2653174233,ra/board/ra2a1_ek/board_init.c|4148195294,ra/board/ra2a1_ek/board_init.h|3897262546,ra/board/ra2a1_ek/board_leds.c|4193750285,ra/board/ra2a1_ek/board_leds.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#ra2a1_ek\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#6.0.0/all=1148860467,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA2A1AB.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#device\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#6.0.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#device\#\#R7FA2A1AB3CFM\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#events\#\#\#\#6.0.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#events\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#6.0.0/all=2026942077,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|4088081372,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|4233790918,ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h|1758185444,ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h|531694793,ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c|2038012490,ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h|1161423252,ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h|390965063,ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h|2134721004,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|3593160558,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|864672585,ra/fsp/src/bsp/mcu/all/bsp_common.c|1766417223,ra/fsp/src/bsp/mcu/all/bsp_common.h|2476010042,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|1391797498,ra/fsp/src/bsp/mcu/all/bsp_delay.c|1823692586,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1002834645,ra/fsp/src/bsp/mcu/all/bsp_exceptions.h|3294907421,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|2982971571,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|3480596119,ra/fsp/src/bsp/mcu/all/bsp_guard.c|379456290,ra/fsp/src/bsp/mcu/all/bsp_guard.h|554349144,ra/fsp/src/bsp/mcu/all/bsp_io.c|1270173761,ra/fsp/src/bsp/mcu/all/bsp_io.h|4226258005,ra/fsp/src/bsp/mcu/all/bsp_ipc.c|2907652827,ra/fsp/src/bsp/mcu/all/bsp_ipc.h|3952374344,ra/fsp/src/bsp/mcu/all/bsp_irq.c|2972687487,ra/fsp/src/bsp/mcu/all/bsp_irq.h|1355081035,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|1712869516,ra/fsp/src/bsp/mcu/all/bsp_mmf.h|1272853908,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|3336678806,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|277796574,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|2455669964,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|659341578,ra/fsp/src/bsp/mcu/all/bsp_sdram.c|2275550317,ra/fsp/src/bsp/mcu/all/bsp_sdram.h|963966360,ra/fsp/src/bsp/mcu/all/bsp_security.c|1515045059,ra/fsp/src/bsp/mcu/all/bsp_security.h|686902729,ra/fsp/src/bsp/mcu/all/bsp_macl.c|3660402312,ra/fsp/src/bsp/mcu/all/bsp_macl.h|3202460155,ra/fsp/src/bsp/mcu/all/bsp_tfu.h|2646736735,ra/fsp/inc/fsp_features.h|678846915,ra/fsp/inc/instances/r_ioport.h|2968025458,script/fsp.scat +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#fsp\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#linker\#\#\#\#6.0.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra2a1\#\#linker\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#6.0.0/all=2029657729,ra/fsp/inc/fsp_version.h|1808519175,ra/fsp/inc/api/fsp_common_api.h|1692739955,ra/fsp/inc/api/r_ioport_api.h|2238316510,ra/fsp/inc/api/bsp_api.h|3894236990,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|2057644446,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#6.0.0/all=1692739955,ra/fsp/inc/api/r_ioport_api.h|678846915,ra/fsp/inc/instances/r_ioport.h|3160786249,ra/fsp/src/r_ioport/r_ioport.c +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#6.0.0/all=429738396,ra/fsp/inc/api/r_transfer_api.h|2894177435,ra/fsp/inc/api/r_uart_api.h|3371921742,ra/fsp/inc/instances/r_sci_uart.h|4212520575,ra/fsp/src/r_sci_uart/r_sci_uart.c +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#6.0.0/libraries= +com.renesas.cdt.ddsc.project.standalone.projectgenerationoptions/isCpp=false +com.renesas.cdt.ddsc.settingseditor/com.renesas.cdt.ddsc.settingseditor.active_page=SWPConfigurator +com.renesas.cdt.ddsc.threads.configurator/collapse/module.driver.uart_on_sci_uart.1178779529=false +com.renesas.cdt.ddsc.threads.configurator/collapse/module.driver.uart_on_sci_uart.1578673258=false +com.renesas.cdt.ddsc.threads.configurator/collapse/module.driver.uart_on_sci_uart.1772939246=false diff --git a/bsp/renesas/ra2a1-ek/EventRecorderStub.scvd b/bsp/renesas/ra2a1-ek/EventRecorderStub.scvd new file mode 100644 index 00000000000..2956b296838 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/Kconfig b/bsp/renesas/ra2a1-ek/Kconfig new file mode 100644 index 00000000000..9274e3b0513 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/Kconfig @@ -0,0 +1,17 @@ +mainmenu "RT-Thread Configuration" + +BSP_DIR := . + +RTT_DIR := ../../.. + +# you can change the RTT_ROOT default "../.." to your rtthread_root, +# example : default "F:/git_repositories/rt-thread" + +PKGS_DIR := packages + +ENV_DIR := / + +source "$(RTT_DIR)/Kconfig" +osource "$PKGS_DIR/Kconfig" +rsource "../libraries/Kconfig" +source "$(BSP_DIR)/board/Kconfig" diff --git a/bsp/renesas/ra2a1-ek/README.md b/bsp/renesas/ra2a1-ek/README.md new file mode 100644 index 00000000000..79dfe5b253d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/README.md @@ -0,0 +1,183 @@ +# 瑞萨 EK-RA2A1 开发板 + +## 简介 + +本文档为瑞萨 EK-RA2A1 开发板提供的 BSP (板级支持包) 说明。通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 + +主要内容如下: + +- 开发板介绍 +- BSP 快速上手指南 + +## 开发板介绍 + +CPK-RA2L1 评估板可通过灵活配置软件包和 IDE,可帮助用户对RA2A1 MCU 群组的特性轻松进行评估,并对嵌入系统应用程序进行开发。 + +开发板正面外观如下图: + +![EK-RA2A1 Evaluation Board](docs/picture/ek-ra2a1-evaluation-board_0.jpg) + +该开发板常用 **板载资源** 如下: + +- MCU:R7FA2L1AB2DFM,48MHz,Arm Cortex®-M23 内核,256kB 代码闪存, 32kB SRAM +- 调试接口:板载 J-Link 接口 +- 扩展接口:两个 PMOD 连接器 + +**更多详细资料及工具** + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 目前仅提供 MDK5 工程。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +**硬件连接** + +使用 USB 数据线连接开发板到 PC,使用 J-link 接口下载和 DEBUG 程序。使用 USB 转串口工具连接 UART0:P302(TXD)、P301(RXD)。 + +![PixPin_2025-08-17_23-14-53](docs/picture/PixPin_2025-08-17_23-14-53.png) + +**编译下载** + +- 编译:双击 project.uvprojx 文件,打开 MDK5 工程,编译程序。 + +> 注意:此工程需要使用 J-Flash Lite 工具烧录程序。建议使用 V7.50 及以上版本烧录工程。[J-Link 下载链接](https://www.segger.com/downloads/jlink/) + +- 下载:打开 J-Flash lite 工具,选择芯片型号 R7FA2L1AB,点击 OK 进入工具。选择 BSP 目录下 MDK 编译出的 /object/ra6m4.hex 文件,点击 Program Device 按钮开始烧录。具体操作过程可参考下图步骤: + +![PixPin_2025-08-17_23-17-25](docs/picture/PixPin_2025-08-17_23-17-25.png) + +![PixPin_2025-08-17_23-18-20](docs/picture/PixPin_2025-08-17_23-18-20.png) + +选择hex文件,点击烧录 + +![PixPin_2025-08-17_23-20-37](docs/picture/PixPin_2025-08-17_23-20-37.png) + + + +**查看运行结果** + +下载程序成功之后,系统会自动运行并打印系统信息。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息。输入 help 命令可查看系统中支持的命令。 + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.2.1 build Aug 17 2025 23:22:17 + 2006 - 2024 Copyright by RT-Thread team + +Hello RT-Thread! +msh > +RT-Thread shell commands: +pin - pin [option] +reboot - Reboot System +clear - clear the terminal screen +version - show RT-Thread version information +list - list objects +help - RT-Thread shell help +ps - List threads in the system +free - Show the memory usage in the system +backtrace - print backtrace of a thread + +msh > + + +``` + +**应用入口函数** + +应用层的入口函数在 **bsp\ra2a1-ek\src\hal_emtry.c** 中 的 `void hal_entry(void)` 。用户编写的源文件可直接放在 src 目录下。 + +```c +#define LED_PIN BSP_IO_PORT_02_PIN_05 /* Onboard LED pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + while (1) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +### 进阶使用 + +**资料及文档** + +- [芯片官网主页](https://www.renesas.cn/zh/products/ra2a1) +- [开发板官网主页](https://www.renesas.cn/zh/design-resources/boards-kits/ek-ra2a1?queryID=2377dd332697b5265bd3eca038979315) +- [datasheet](https://www.renesas.com/en/document/dst/renesas-ra2a1-group-datasheet-0?r=1054141) + +**FSP 配置** + +需要修改瑞萨的 BSP 外设配置或添加新的外设端口,需要用到瑞萨的 FSP 配置工具。请务必按照如下步骤完成配置。配置中有任何问题可到[RT-Thread 社区论坛](https://club.rt-thread.org/)中提问。 + +1. [下载灵活配置软件包 (FSP) | Renesas](https://www.renesas.com/cn/zh/software-tool/flexible-software-package-fsp),请使用 FSP 6.0.0 版本 + +目前仓库 bsp 默认使能最小体量配置,用户可通过如下步骤使能 env 外设配置: + +**Keil使用方法** + +1. 在 bsp 目录下打开 env 工具,使用 `scons --target=mdk5`命令生成 MDK 工程。 +2. 打开 bsp 目录下的`project.uvprojx`文件,选择上方导航栏的 `Software Components`配置,打开后找到`Flex Software`下的`RA Configuration`旁的配置按钮,该操作会自动查找当前电脑环境下安装的 fsp 版本,选择指定版本后进入 fsp。 + ![](../docs/figures/mdk_rasc.png) +3. 在进入 fsp 后我们可以发现,已经存在了一些已经配置完成的外设,此时我们点击`Generate Project Content`按钮即可生成所需驱动文件。 + ![](../docs/figures/fsp_configure.png) +4. 接下来回到 env,使能所需的外设配置后保存退出即可。 + +**GCC** + +1.需要下载 [e² studio](https://www.renesas.cn/zh/software-tool/e-studio) 集成开发环境,使用目录下的GCC工具链`toolchains\gcc_arm\13.2.rel1\bin` + +2.修改`rtconfig.py`中的工具链路径 + +![PixPin_2025-08-17_23-43-47](docs/picture/PixPin_2025-08-17_23-43-47.png) + +3.fsp的使用,打开当前目录下的`configuration.xml` + +4.配置完外设之后点击`Generate Project Content`按钮即可生成所需驱动文件。 + +**注意:重新生成配置需要把当前路径下的`bsp_linker_info.h`删掉** + +**ENV 配置** + +- 如何使用 ENV 工具:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/#/development-tools/env/env) + +此 BSP 默认只开启了UART和IRQ3外设功能,如果需使用更多高级功能例如组件、软件包等,需要利用 ENV 工具进行配置。 + +步骤如下: +1. 在 bsp 下打开 env 工具。 +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 +3. 输入`pkgs --update`命令更新软件包。 +4. 输入`scons --target=mdk5` 命令重新生成工程。 + +## FAQ + +### 使用 MDK 的 DEBUG 时如果遇到提示 “Error: Flash Download failed Cortex-M23” 怎么办? + +可按照下图操作,修改 Utilities 中的选项: + +![image-20211214102231248](docs/picture/readme_faq1.png) + +## 联系人信息 + +在使用过程中若您有任何的想法和建议,建议您通过以下方式来联系到我们 [RT-Thread 社区论坛](https://club.rt-thread.org/) + +## 贡献代码 + +如果您对此BSP感兴趣,并且有一些好玩的项目愿意与大家分享的话欢迎给我们贡献代码,您可以参考 [如何向 RT-Thread 代码贡献](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github)。 diff --git a/bsp/renesas/ra2a1-ek/SConscript b/bsp/renesas/ra2a1-ek/SConscript new file mode 100644 index 00000000000..755bc2294b5 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/SConscript @@ -0,0 +1,28 @@ +# for module compiling +import os +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +CPPPATH = [] +list = os.listdir(cwd) + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + if GetOption('target') != 'mdk5': + src = Glob('./src/*.c') + +if rtconfig.PLATFORM in ['armclang']: + CPPPATH = [cwd + '/script/bsp_link/Keil'] +elif rtconfig.PLATFORM in ['gcc']: + CPPPATH = [cwd + 'script/bsp_link/GCC'] +group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + group = group + SConscript(os.path.join(d, 'SConscript')) +Return('group') diff --git a/bsp/renesas/ra2a1-ek/SConstruct b/bsp/renesas/ra2a1-ek/SConstruct new file mode 100644 index 00000000000..d00d0dbeaac --- /dev/null +++ b/bsp/renesas/ra2a1-ek/SConstruct @@ -0,0 +1,54 @@ +import os +import sys +import rtconfig + +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../..') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except: + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + exit(-1) + +TARGET = 'rtthread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map project.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') +if os.path.exists(SDK_ROOT + '/libraries'): + libraries_path_prefix = SDK_ROOT + '/libraries' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/libraries' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +rtconfig.BSP_LIBRARY_TYPE = None + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +# include drivers +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) + +# make a building +DoBuilding(TARGET, objs) diff --git a/bsp/renesas/ra2a1-ek/board/Kconfig b/bsp/renesas/ra2a1-ek/board/Kconfig new file mode 100644 index 00000000000..c72a158aa0c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/board/Kconfig @@ -0,0 +1,112 @@ +menu "Hardware Drivers Config" + + config SOC_R7FA2A1AB + bool + select SOC_SERIES_R7FA2A1 + select RT_USING_COMPONENTS_INIT + select RT_USING_USER_MAIN + default y + + menu "Onboard Peripheral Drivers" + + endmenu + + menu "On-chip Peripheral Drivers" + + rsource "../../libraries/HAL_Drivers/Kconfig" + + menuconfig BSP_USING_UART + bool "Enable UART" + default y + select RT_USING_SERIAL + select RT_USING_SERIAL_V2 + if BSP_USING_UART + + menuconfig BSP_USING_UART0 + bool "Enable UART0" + default n + if BSP_USING_UART0 + config BSP_UART0_RX_USING_DMA + bool "Enable UART0 RX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + + config BSP_UART0_TX_USING_DMA + bool "Enable UART0 TX DMA" + depends on BSP_USING_UART0 && RT_SERIAL_USING_DMA + default n + + config BSP_UART0_RX_BUFSIZE + int "Set UART0 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART0_TX_BUFSIZE + int "Set UART0 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + + menuconfig BSP_USING_UART1 + bool "Enable UART1" + default n + if BSP_USING_UART1 + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_UART1_TX_USING_DMA + bool "Enable UART1 TX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n + + config BSP_UART1_RX_BUFSIZE + int "Set UART1 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART1_TX_BUFSIZE + int "Set UART1 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + + menuconfig BSP_USING_UART9 + bool "Enable UART9" + default n + if BSP_USING_UART9 + config BSP_UART9_RX_USING_DMA + bool "Enable UART9 RX DMA" + depends on BSP_USING_UART9 && RT_SERIAL_USING_DMA + default n + + config BSP_UART9_TX_USING_DMA + bool "Enable UART9 TX DMA" + depends on BSP_USING_UART9 && RT_SERIAL_USING_DMA + default n + + config BSP_UART9_RX_BUFSIZE + int "Set UART9 RX buffer size" + range 64 65535 + depends on RT_USING_SERIAL_V2 + default 256 + + config BSP_UART9_TX_BUFSIZE + int "Set UART9 TX buffer size" + range 0 65535 + depends on RT_USING_SERIAL_V2 + default 0 + endif + endif + + endmenu + + menu "Board extended module Drivers" + + endmenu +endmenu diff --git a/bsp/renesas/ra2a1-ek/board/SConscript b/bsp/renesas/ra2a1-ek/board/SConscript new file mode 100644 index 00000000000..a27ea8e470c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/board/SConscript @@ -0,0 +1,16 @@ +import os +from building import * + +objs = [] +cwd = GetCurrentDir() +list = os.listdir(cwd) +CPPPATH = [cwd] +src = Glob('*.c') + +objs = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH) + +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + objs = objs + SConscript(os.path.join(item, 'SConscript')) + +Return('objs') diff --git a/bsp/renesas/ra2a1-ek/board/board.h b/bsp/renesas/ra2a1-ek/board/board.h new file mode 100644 index 00000000000..99b419ef78b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/board/board.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-10 Sherman first version + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#define RA_SRAM_SIZE 32 /* The SRAM size of the chip needs to be modified */ +#define RA_SRAM_END (0x20000000 + RA_SRAM_SIZE * 1024) + +#ifdef __ARMCC_VERSION +extern int Image$$__RAM_end$$ZI$$Base; +#define HEAP_BEGIN ((void *)&Image$$__RAM_end$$ZI$$Base) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __ddsc_RAM_END; +#define HEAP_BEGIN (&__ddsc_RAM_END) +#endif + +#define HEAP_END RA_SRAM_END + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/board/ports/SConscript b/bsp/renesas/ra2a1-ek/board/ports/SConscript new file mode 100644 index 00000000000..4871d7248bf --- /dev/null +++ b/bsp/renesas/ra2a1-ek/board/ports/SConscript @@ -0,0 +1,22 @@ + +from building import * +import rtconfig + +cwd = GetCurrentDir() + +src = [] + +if GetDepend(['BSP_USING_RW007']): + src += Glob('drv_rw007.c') + +CPPPATH = [cwd] +LOCAL_CFLAGS = '' + +if rtconfig.PLATFORM in ['gcc', 'armclang']: + LOCAL_CFLAGS += ' -std=c99' +elif rtconfig.PLATFORM in ['armcc']: + LOCAL_CFLAGS += ' --c99' + +group = DefineGroup('Drivers', src, depend = [], CPPPATH = CPPPATH, LOCAL_CFLAGS = LOCAL_CFLAGS) + +Return('group') diff --git a/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h b/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h new file mode 100644 index 00000000000..294477ee31e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-01-19 Sherman first version + */ + +/* Number of IRQ channels on the device */ +#define RA_IRQ_MAX 16 + +/* PIN to IRQx table */ +#define PIN2IRQX_TABLE \ +{ \ + switch (pin) \ + { \ + case BSP_IO_PORT_04_PIN_00: \ + case BSP_IO_PORT_02_PIN_06: \ + case BSP_IO_PORT_01_PIN_05: \ + return 0; \ + case BSP_IO_PORT_02_PIN_05: \ + case BSP_IO_PORT_01_PIN_01: \ + case BSP_IO_PORT_01_PIN_04: \ + return 1; \ + case BSP_IO_PORT_02_PIN_03: \ + case BSP_IO_PORT_01_PIN_00: \ + case BSP_IO_PORT_02_PIN_13: \ + return 2; \ + case BSP_IO_PORT_02_PIN_02: \ + case BSP_IO_PORT_01_PIN_10: \ + case BSP_IO_PORT_02_PIN_12: \ + return 3; \ + case BSP_IO_PORT_04_PIN_02: \ + case BSP_IO_PORT_01_PIN_11: \ + case BSP_IO_PORT_04_PIN_11: \ + return 4; \ + case BSP_IO_PORT_04_PIN_01: \ + case BSP_IO_PORT_03_PIN_02: \ + case BSP_IO_PORT_04_PIN_10: \ + return 5; \ + case BSP_IO_PORT_03_PIN_01: \ + case BSP_IO_PORT_00_PIN_00: \ + case BSP_IO_PORT_04_PIN_09: \ + return 6; \ + case BSP_IO_PORT_00_PIN_01: \ + case BSP_IO_PORT_04_PIN_08: \ + return 7; \ + case BSP_IO_PORT_00_PIN_02: \ + case BSP_IO_PORT_03_PIN_05: \ + case BSP_IO_PORT_04_PIN_15: \ + return 8; \ + case BSP_IO_PORT_00_PIN_04: \ + case BSP_IO_PORT_03_PIN_04: \ + case BSP_IO_PORT_04_PIN_14: \ + return 9; \ + case BSP_IO_PORT_00_PIN_05: \ + case BSP_IO_PORT_07_PIN_09: \ + return 10; \ + case BSP_IO_PORT_05_PIN_01: \ + case BSP_IO_PORT_00_PIN_06: \ + case BSP_IO_PORT_07_PIN_08: \ + return 11; \ + case BSP_IO_PORT_05_PIN_02: \ + case BSP_IO_PORT_00_PIN_08: \ + return 12; \ + case BSP_IO_PORT_00_PIN_15: \ + case BSP_IO_PORT_00_PIN_09: \ + return 13; \ + case BSP_IO_PORT_04_PIN_03: \ + case BSP_IO_PORT_05_PIN_12: \ + case BSP_IO_PORT_05_PIN_05: \ + return 14; \ + case BSP_IO_PORT_04_PIN_04: \ + case BSP_IO_PORT_05_PIN_11: \ + case BSP_IO_PORT_05_PIN_06: \ + return 15; \ + default : \ + return -1; \ + } \ +} diff --git a/bsp/renesas/ra2a1-ek/buildinfo.gpdsc b/bsp/renesas/ra2a1-ek/buildinfo.gpdsc new file mode 100644 index 00000000000..f173b535170 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/buildinfo.gpdsc @@ -0,0 +1,183 @@ + + + Renesas + Project Content + Project content managed by the Renesas Smart Configurator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/configuration.xml b/bsp/renesas/ra2a1-ek/configuration.xml new file mode 100644 index 00000000000..60d833a49af --- /dev/null +++ b/bsp/renesas/ra2a1-ek/configuration.xml @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Board Support Package Common Files + Renesas.RA.6.0.0.pack + + + I/O Port + Renesas.RA.6.0.0.pack + + + Arm CMSIS Version 6 - Core (M) + Arm.CMSIS6.6.1.0+fsp.6.0.0.pack + + + Board support package for R7FA2A1AB3CFM + Renesas.RA_mcu_ra2a1.6.0.0.pack + + + Board support package for RA2A1 + Renesas.RA_mcu_ra2a1.6.0.0.pack + + + Board support package for RA2A1 - FSP Data + Renesas.RA_mcu_ra2a1.6.0.0.pack + + + Board support package for RA2A1 - Events + Renesas.RA_mcu_ra2a1.6.0.0.pack + + + Board support package for RA2A1 - Linker + Renesas.RA_mcu_ra2a1.6.0.0.pack + + + RA2A1-EK Board Support Files + Renesas.RA_board_ra2a1_ek.6.0.0.pack + + + SCI UART + Renesas.RA.6.0.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-14-53.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-14-53.png new file mode 100644 index 0000000000000000000000000000000000000000..d476717912a56fe687dcd1867086066526cdd67c GIT binary patch literal 71855 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

SY01KmA@BC3jR1yK0Qt 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-17-25.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-17-25.png new file mode 100644 index 0000000000000000000000000000000000000000..677cb3225acf76c8558e51906d003d6cc0884f77 GIT binary patch literal 10145 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-18-20.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-18-20.png new file mode 100644 index 0000000000000000000000000000000000000000..31e87cd0215d7ca54c044dc32c12bdd4f97afd40 GIT binary patch literal 25983 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 I2JHEN0GFGCOaK4? literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-20-37.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-20-37.png new file mode 100644 index 0000000000000000000000000000000000000000..1f51def0c9ec37e4ce812fc479210b9083bd11f4 GIT binary patch literal 56350 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 HP{RKKJI0i4 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png new file mode 100644 index 0000000000000000000000000000000000000000..d14d62789a23ae6cc0ce8c06182fc841d857fadb GIT binary patch literal 729368 zcmaHTd0bOh*Y&wKH+U0JlMpaYcnJX_MFodCp}oNb0Z|eKOX*+)tx5-LwH2p&6Ho)9 zQb5EBL!2Voidt>$WK@(ov^b!3Xe$o2)%vtpt99mEC${hNe%~M8@Apu7ASCymv-jF- zt-a4JvW^czxK7CRGj-1=`*2O*QlAMdLUrd;{?c3Vf z>!zMrw(IO`UkzG0dDEn?|8971T761%?Xg$x?Yr_#`KYFdQG;ylU%1T;xw#?uuXE+; zCxS-}w51QaYaY2~?uDY+SGqU+c6)P|kD{w*msHQa5I_6ol!jl6HixZ`Ui<#D9~`~W zF!@T;>18KRe>Wg0dhG{?<7Yoy+3;(}Nnz`Ef0uAaH*(E`HMxDKUB}O+f0vN7?hgLn z?KORto%|)?7u~$5>PKsG|2mTY-Snj=TYFVczaGEJ|9w4uZS;^|j<3Hv5bxAD@TzX! zcQ=OrHa&ev(z@wKPd;2TX6eaas^2Xc`b$Obj8oG`4W&Ph&;D(1bhoXI10Uek-SL5= z=&KLMKm37y-cWoVKIbg`W@N%I1OIzLO(Bf~?@S(Y=Q!SKW#ho4MqKxkaqnMWIsCVk z`1DC@W|a(m`MUvEaWfwrKKc2lxYcYdz{8WXFWhMOb;{;$A8oGw;FIciFPvO8;OD>A z-^FsAt>3b_>qnc{ykAlME?#$POT(|Xqq}|7P@P{9Ht)*G*-eV!zo{F#tzXo2W=Yul z2X4>4pAvmj9lh4ubMWK(;4>3ucCxsuI0{{+Bk$R#Syv`1L+Fwc(|r~*_mIe=lU1!uf3bQ ztS{;_YUtSXfe*5VJiQkDm$!WB_XpDlnc5GzVIJ~$LvTMDE|agg%133ac=AQpS*MD! zf5ZQ2%BI(FcF>g#!FRU|_;UlUxb>(Fm)2Nsi(cnVKSaN8?bhYJKZ|bmUa|Mq%0UmW z1@At4GJ2hR_}UrHuz7zfRt>mb5q$TvG3h6+rVoB?*$e*}FtW@13%3W|xIbpu_g6;^ z8MSQ4-2p>>Z@Rks?6l2YHaD!Dy(Vnt(P^s&JZ-xA*Zna|PhTB1aMZHFxbAz`a^E{O z4IAIEc5X@7oIm67)*EtXj9WVJM%G8~9Y4}A<;uD8Wv6q~hrYIM8~!`$@1M`%@9B5= z`vGfb{BWe)Qd%tpz`PSw8Uhie35oW1kb>#NC`%-f}4^bI0>ZZxv21$un}G(p_U}5xje>8L^e}pkz1_`3ZqMtwv@YG4?g{R&IN;^SNxP%HY+I9io1Tan58$~ zyz?tXO9n{@;hWg|Qy2R7$)sbiT;DmrO}x`3ut~A{P!ki*l&VB?yxt(H?PV@OQYZ7p zF1=AN==oAY_7g>fQ%#bkQW6<%RMhcGqn(ipjMDd$$RzW1{nesY9U0C#StU=(MO#IR zk{CEuMdALkmdFF;y4+a3(zkClbH7!J+mPM%{L8!Zb`a^jDu^BA3(i`6EgCMvo=L?rg9ENNop4AGLOW4J1=WuH%#9=`69;3cqhv$1!53IIbsOEC5*(eU>J4NhnQmx?fYOI0H zTg2uU6!_5T=jR79c{Oe#CUP2APLOUr&q{71A*qSP6mP7S+-bdy)y5>P+CoS~X^Z7{ zkZy<0reO_1#p*-BajaACabX<_iQ7O#X0h8PVeb`mN6U$-iYs;_EGi0#!lbs3!v=U4 zh&|MYhTV=#sv}0kfELM>(NSt`U;OghSC+2+*nPHZ|5qCi+v3EgR(|Uo#y7FGd#$_H zppA4SCT5yK)~ z&G>B#$Ny%_=(bhBS}BP~nZpDsNn@eX%htO1?mL zjfhqnZat^3M48WUlTxdk;}ByilQn@U&?}vILl>(=v_&cGC1ouoIVE~M0X|eq>K3j< zJkZA(ZMT{$3V8{+Dljei$Y^CP5lV?yPE)j;OUB;W%aC_lHX7YVYam&W!V)3%K%db4 zdcK&YISU-xe3U$%&rQj$3~ThfKdkR(s~&}2NaM(7w=T7nXA-$P)TofST7z}5I!^Bn z?Rz*l@^WCl-caH*$Xt>sUT-Xpaq)Vf1g9amS}vJ1X^1;i>5>wWLDI3O!D0$YVjP>(F9qo3-A>6QdzR%W1qh+r%JqX{oLx#A;Hj#Bc|8wT;nWMmliTWZcdDaf0tO zV;v!JVh>J3KS+fDCG-WzJu7aI=OTF}%Slmp@lrtY@d>Zi(Jx$;mc&M(OA7@QSfc3!_55wkl{&VQa4UUh(A9 zVMGXL5&UkK(aj$<00UfNqQudUGMQczoZ%ANF zYJm|%mQ;LIlbUF~7lm{rCbdme3*!M~$i9hX>M8>^G294@)LMzAm_=#@g{H?k^{6n? zq{TqUfS|T_mX3dE=BmjvhO{42SG|+P+Wu&@YBMb%RzPs?6sxF?wX0*j7XJ2<$g9IH zj5#%w3%ehX&_02Yp@xV=ZOXKTlt>I0?vM!CZ6?h{0%^I#X;Ija0}dJz3`u0wM8kRs zn=cIYPTk)IfGPF}kqZu1J()8LYI_L5U*Lim#>}`wSp`|a$0?9KG*n43N(a#^CBe-a z1%pb37YR&pE!#2y5lAs<<*}z16#;QZVkbH+`SY&NxE^BXY+`3=|Iu zC(l6T@oYGBDmm>r^%6~)da>IqvCmQl`?B}eZ8wQiFjg}WttCJv)`d4v><4BMi5H4_ zUh*LxHF~_LurLOALCaUZ9{XtE;`BUz;QI;TDwSC?t)$A}Ggy%_5>a4tMDE_}oF*Vy z2ka{+z$c{u1XS(N?cj?E!S~hOWi72EfBZ6dp#AlBM=$1It3H!vq)B5UQcAH$=|;#~ zq(angy&abz7+KwVoy~uhNj}6;j>ttZMmuNLn$^G*KFY9W13`gMRV25IdflAnu^1Z*102dii4IsjHs&k(%;dK5X71C$4^N2vs>VE*MC z^9NfPxljX!p_Lg(ZA^)`!QECjW?5~g47rUE3yQ8;E@AtcMl(_h@D&um2wY>#3iFW> zX^V>{m%F~qVzrhcMoyl-5Zqiu*K4GNnu|iwytDNW?*3H7Ne#jG{Q%y08;-@MN`%%Z z1_9wn(K`tNETZ(LC5DG9S=@TKBc@iMB@SiVsygHRVGpMRD*lI=J(?5MEla9}5 zH{izJE<5M88z>_^=j`c@`&+;ni91b0L@C9o$J+sX*#H#+N1;}!0R>Dt7ZG=)zjKl= zID9;(Vbc;tie(I`hLUU@$&ve07bLRHMG`B;>?Ti<%+*2W{Uoe;7~8&S%(fl4Q{Ydi zp|`4&OVSaQ+`$o#L6uA%_fk7Jp8;H_v!lgKs(ZL8IRz-ng>aEYx~tT{&`hg^Gjq5% zPc2WL6|bISxb`Y{?ZWuGx{P(|yWO{_wwlzON**FFEDRxHIMb3=Y&3n#AR1fL-T|CN{$ ziIkU!iDq?0ias?F5zmo4g`gLlh&gAp6MupPMiQj(sRwvOwUk1fY^jQtW8@n9_&K6r zG)W>C#>puqMLseGSBgLGGV^O5$)$3 zx8^SgS>*P+b%nZNHd#{Bq!SNIwhWgS)C#p=6*RXSE0k`hS5hjy#;>#f)SP-VG25`| zwb<%<%E}4IG{nQBU=T%G*7n{yALY^cTzbis!nK94Zeg9Z!J* z0V+5MYLU97#10CMDtBLRK$VLCVA7h*l}JcB4_~UXnGt=7Rt|`YPokw7#ZmOfJxA*d zI3-_f2W@oanANtRVs{$5G1T|9PHIhef8)C_c-F1U^lSBJzihgAK9l=%SJjY6{~od~ zRGD!ZAzB&%5KQ47P*puDY>6@8kPD~}=vJ$cDnKZP#(rLRLCM|<#NKnD`}6xSR%{=u z^j&4-%`eDz2uhK~?$|Y9%`%5&o~5loSRibjXh5PdfkuJ#wd%DR76pP-6%yYrMMXAw z6pXj4!bp@{ zNrf&u^ft@2mF?gh>qz+#^O?0H89vf-aQbaQb(26Y0iw92_-{#zxZ)v6L zXWu5(J(=nrr1d}M5NlL8D<%@CEjN+$1ba+tpCDm-Bz5F?u7rtjnp6bAj^c$4Vu;3w z(nD+AX4U~!1wB#M%S~?eqV-xX&F`;`VwzZ{`8LF5{w5L3q^_4>AbB;Y2f%cRnVYQ2 zs+R?kTWvF44&J5JTLb+P`+z}u(iYU3k!KFWH`trIhiTgPV%33$ury4$^WxHo_>QAMm$ zk)iUd%W|to$*R`MSWKdWV`GTQHF{Fcs*%a%=4-Co_ys4W2t3FQgc~4arsm($7tOY0 z2$U8*T20dB6j(2%N}LCk%ZPmfL`f-1J{7BqVuGJzU6n2;k??{z1?oE>gQ$e@1d@nT zVf}epzN-v8hGoy^lZ;bXX8hTy1<;)wtAzm$~~dl6(DaV3};Gl|bJUBd9O_EZ`8Y^TQ{g8zm4J zK?@sbAXu>w4q$c=U?g<8KpuZ8lIBZtWMUuq15Xzs*D@FsscoB^WlXb-#urrgSf8^< zQX&1I53F*V1`7Of|6nYtLQ7uZls&Tr4|ApFcL{#y(zZt7vkC z>ys>VY^Xd|$va6g3z|5U`gdvm6zchC>IR7{YXk8XD5}Bpa8m&YcnjDv=x;b8)2v2> z0;MDrZna&bL;(1H0+9k!MFc?%5b#3=dQG&_t%B8s1>8IW3{@}qQ3vpW9TpjHBzA}T zAE=dpxq#;RUF*3eT|aqmRL$;oByZxoQ^*OOG%3)SZpI(CzM+Ca0kkn|p>R1U=ZIqZ z4Vbpn5JABZpXCNOX+EN{k29Nad99t)z==erc_ooI@9PQ&OHQo_nU$Vu}`a(%z!dC#2qt-^3K$>|>WLe5-icUE|j9(F_McK)uEqlF9~= zTDx|x?WSSV0#|6!H$_+0XI1E!AiqR=`XW3PY(_DeBYWpO3Yo@D`5Y)90bW{3^Efp^ zjq-!)o@(42_zPl(P!9&&$Si_-fd~<289~Yti`8EZ>}6E8;=g20uz)J3U_@F|M4^Ti z5Cwum!rx+Nkgd)f^7Q-tak3{NLc?D_KQ|?glnVWqJ?L|j8FA_3w}7fBaE$>>o+6dC zX#yf4#k0&>)2swHNeE-Al~OjFpoW>3Vw7S~aDDn52Gqvq*4d&uB0_*jN~uf*w!xC! zh;}N32~5tT23&R;d;dikyP$g12!W(!LCs>o_LbNJC3)lo-9PUHkKD{INb&krcS~9g z0>Hr$p3E6WWcNivjY_!91~XKhU<%3tEic6v6@lbwFrv1JnvACzfD#B8qItKu`8IqN zkez6jzLJv7x?U_~1rH2D;So`#n7ksA$Czw@b5uH*(ElLjy?v~f(pn~{xD9W26n9eI zjQ0$Ea(2>*fD&(G;p~bg)mAs}6hQkKlIJKD!7a3Mxje(?DqCI^6?`%$@uuNGgGZ8U zDgEF*tRxs9W@xYk)6Y2n6HV3sRy)pK#uj@J{1u!8ELo?Z;0C_?!~)7?AQ`w=x!H#W zAbwhr&4Thl>N7%(M6(~ULc~A%YEciuAqZfyfMG4@M)PfiQ#leqV9Ti& z0UMYj5czK28n}RC!56431mHqeum(=dGCjgU8emoec*Mk zrSBuv-4_lo`~bM7C1hhIjfGiBw@VK7uk;xmJGkn|mYh@7qo4cvrMw5#hx&xJ_ZvcB zT>B~0HOGRh;__(LrDC!DxYDZhAYSE;!Wg$xU0`Z~@<2_axNA47IAT)~cO?KEdxrp1 z(r@I2DG;8uDwwT_po-~>SiYGVs>*6%WW13wT9-R?hf@w`4YoEm{po6yjQrkkHh7k} z>-tNZ6S-<6njS)fcjH$HPEty@j3Npum4kypf>QTiv3Ri?7e1b}C$3Ddx5hm*qEp=D zc>y0axE`i?ho=ll49SoahBIY|oK>TDvV0m_wL!APiJ>Fb*MG9gl~k0n-l&q1V$WgL zorT))IQkhbyp65{aAB|tM9@fY1pvMX@t|c?Dg+hwZk!r-U+V-O?G~B)GvT6HM*tOE zESMCa0W^nz5FmqDs?vE>GZZ`j{!*}hrUiTk@LS?CDi}~9rI?6{+RB`4clO8kgMWK} z$(W^WKZp^Q_ntg!%};0gPirVxjU>e@!{M<8-4D=I+vct}%-z8y-ClB~^Wv%6aTPve z^^T@LOL`yaqjHt~S@Fr#lxvTxN+u~v4%r!1Y*=XfmO35&S*9x}i}OIo`Ar8{?;S{eX=h)nDiR0U#@nyB_Ngn!FAB=B=qlD|hPgBMx= zTWCBi!bpY}<7w`G999bVYKITO%pxlZ4K&3~5YC*hjc=AkF9_QSFG$tt#|=O?zFGVj(a%kSM|e zaaD3gMYRzYm=R!)s2EcUt<0@~w~SwO`@-?X+n-gf{&;WI>g{{0F223j@!sGh8#rK+ z7Tuffj?LWRE1gHc86T%j*N%&=HU@xzIm<+oHcA0M0L=wnDe3rx$j-+1K1jQO4jCJ| zzm^rG{rW8K5LowOV1gQ)2VATa*bplAu-=o~$BAmO=}J*qr2d4i{UMTsJ%+`A`~sU* zQGpD;0$+>V>j1I|LudX1n7Y;7Lqt-@p|@y=liHvX+*gJPZjgSrl!?KzAiTC6Q%7}e+X$Jzc*FQ6(* zJv|;P8HeluVIF20lGN9J;-Mj_X|sD_v2v`*ih>H71C~N1j&*?;dslNZM~}8tWPEXC z62Op>hsIDUSc7+Xvb1uIOOQ;rskood`XkFu}^>;NgNzkvLQi2&-~cWH=IYL&6As zTxhy4_z<6uR**`|h{;l!NGUfOR&*!LCWseht!lAg?3jC`P3q9PYiwkTHdkx0`aDL- z&+oCH=r-ZaMQj&T6dZphFC1J0loH03QSatI%+8Q=F!$kW(6%u62P2^-(VMVSN5`gu za?_)aTaJd70T?ui-X;gvSPr)RtX~;bLt3`Gsb!F`8q^yUdQvd#?@+DApAVpLQ51$q zH(q<276gOU=R7R(W--W!ZVH3?l@0#Fp&j`6Ilt~DzOO-nVClmPROKfSAThml06o%( z$}*q^76POf?gg4-FwU|>;L4W79_TCMBJ%aHBY_cqlQ0C{?-<$$WJFh{aZAHzvxBxY zN&zKV>lAmr-u*D0kP#HtV7>=A%MP59Hd^$ZA`iC#EfA%zx>N2qC)kZd0GT2yTwpud zo|a3L4>uNq8fcV8r^Th##)(qdfwC6(MNr9wsD`kqj1W1ksZ#VX?JM`v7}&|+i98>d zVpWMIB8PieN~*Y2R!&Srq(M_os^8M%9uol{)Il^e78Flljes5XkjG!tU=09=QQ@#7 z@#|!r`W}QU?D%N(Yd}lwYAuvjA}|q5K#PWKP^yr6Vb_L|D@CxvRa%NlXa@pTkh2O7 zp%kYOIW*tMZj$$sFxHYuTFfaOzj;vk<@Rd{$sHFn+B&76qr%!*rm}H_1~mfc+-j=s zKqmoPpfhSl3l9jP4U-yxPm!P+lo!zNo7ng~0s-q(-PR2rb(%Jz!F)(#6kK-EY)#+a z<~B1<9U;Ihp*>DG!*y(o1mb71n9x@vJ%>R~Bnpm17SO2@8T&XDzOa5!9Y6ulLUg9p zd5)Gp3~V}A*czozq>e7M?wscpc2v^%#FyG$&8M5bNq17(IU5uO27?~GVvOVW);?8xja&i$tk?eL;tqE_zUFk+~W=XLgTR~d8 z(;o^9xE`{bS~UiMHPG(B7_>scj^XTsE+y0AfJU!l9u%PoK6r$^q`71GWd-cUiC9=M z1vYS`YDBXmT8W(rko#D?BeBu;GBT3xFA^My5Aq5=9qt$WBFBh3MAnuN0l?{5XJCU1 zc)O`blF!xq2<;Ct+(eC$>JwVS(DBO)ck=$i4jhAp28Brr{Iih{^q67&lFwpmjI~PG zC9H3kyn@ahJOUWBzGa0g#~KOvG!gXP?f*C>@b^ROL{6cQ=lEEUOX;QZx-km#AJFxW zFvyTh%geddXq5;&VFmmxk0Os2x|I?sN?jih275L=n98R9ch`}!BuQRix8^Kxc7new z&P&=h{N(J6Cb!Z9|F?#%l~^NFIjCrI_y$wX=qzg;AA^t>8;cgei->W7Y1x+sO#{lB z&QaxOH!;F^wZ2ffP#-oiLCVMl0fo_5xMhA!kesTrviH+muQ6_engwYr@>{ zp9A&9FyH8)1oe5@gfJ7e0H_2>)1YCCI+MbKTuL06Gp$$%9EHDy_q33uRu|n^>}g|^ z6}=i{-lZVS^H@>P9EHVt6zY2NwSK6fMI0icP-Y4NdZDjMrUcMDEvK~LQxnr%#u$H4P!?r$5g;mA$uG`v51EXg_!;G%E`1DCdXcHiZ?e%Hfwy3(CA}4dGCC zOH~{*LOc^+dDMR#y zBy!Q{sStZnBTCYP{Jo%s_%IXgViL{@KN1V;r*Q~*+NYe4^nIi!C^`lNWqu5o9|Hji zynLqPv0e%eEumzi;4=W*F)k7cI#*?o-2PS!_$4=2_O(q^5!kf?WmnJ}Y6kWe5d9un z7&Z+mnZJ`uqaZHDW=14wkQC6C*`X#IH{z&xp};4(Jd#%rP*Bn0$(hvHNnDu77IH?2 z3@?FiE4Y>P6DSQwC{ja@ifi1NR%%%9`w1;JYA4gNmI*E%E!hIpRkR~8$b}LPlZBRK z4xZxEwIJ-ZR+U^0PfhPc0t#ZH3WbYhb*lC)A-BUF46f1ZlqZ#uOL9yK{>M?9zg|SSmkL32&>x;a z+KUTnJ4H3cZD59-Mc<*elU9YUy*61$O^t0^|4CI)-u9NhM7GutYSbLIus(K(&loPB(!$ba?ziBh(l~3>?Sr%?Lx}nk=AT6O{c}ict6jnnM4u^Sy7v?84B2FuqQ*W*!6qyC{thk{2eo z6<~mXK6%SDBV_6xnlaJw4x=&)EJ`SH89^r% z${XbbqKpU(>zglwhzy4Sqy`L7E+I3Zd0!EA6Z}<<;_x9|OIsbd4!}W>pjC} zD?v!&n;tbe7jQ2 z#Hz)JOHCMRY{7kLyLS>^DUVe#;RZu*H(q0;srXJ?M8`b~_Uj&$)mIJ{77CAsh<*N; z<}Lqj+mp>wDfqggK;Xv?IeIg`HtgWpTyxvVe)V}OTLzJbh{BSMCVh5VvMinnm1meN zqFg4RLHr^JJ1vK+yDKFlzfcEjyvs7%-IczG`sUm%5u1vt0&;d@eu9a0{2R1l3h-(8!(!ltRh40ct=i|7ox8+$4Vf-AkL7z$;1sciO<5t znQ_Sw0!VK7-890VS>3zQ6C|lUEX+heft^_D@{F|&uGvB7CB@w>c2RCagxSJX8~10? z*{~c|TUXC}nda6A)a37B9)jLnLX5L+Ng$#=$#^+_VWTn35)_)eI5Jwj#N1c);h`(J z41AjA-W?oZt*)GsL$0zoIFtlbf^t)!6_vb3f4~y}2l16h(rsGS#=%LzcN9jcHA)~& ziFCPk9U_l6^DX&UYOEb2s8dwi6ks7N?nNRqw)WLg z;jD!*3#TO{oykp{ca#?<)HM}t{LmE;`;xZ(Vm8z&Fm?S=Wc?QS(@lu{8oG>hhaf&N z5`=NVAW0&KBeXrz5(P%!ji~Z;i=!CSM~rY$=QFW~NrkFK`)wF%s#d~@NbSKyDX@D~ zWn+Wj3gjo$5<7W%5mXiH52ukQUo(vocy9_2fvU_VjiV6qq)b3Qf?x#W?fv7!7DD|% zl>b749k>L;%nCebO0mHD7nZcY6_Vg-@z!gI> zf&QIEWVLT%xs?hK9^Kn9>%DER$iBAB^+RCw*O;rKk1SbqWZ zYtZTEgBhgG&dnnrzkNbhVcG1GJfEv=m33L|Y$Kb)9OC_RfxC*lf(!)Awt z-P#RchuB3Q6cNeXpBhdnKaxUVl{y=n4t+uUvM}mLG1Cc1EPpx&S6N>y00k)vVR6~?U+AmV4s@)e zS?EMG@Lu$0p<|-)xY?N0#376Cm-^b=4Jl!PdUglT%X7f`{RbiFTPiWer2ltx4>SF& z5tW^AP&RQoE<8YavyW%!!Lys)L&F0?7_E9lQbkhH5;;@Kma>LZ#`uxuYefndvlw6uim_*(L+{ClIlh=$ zWqiK=egMX;;D?xq4B_Q0Rrx1?{~_kI*GD{@1d{MlymsHGQiohIBCtDI$tMc_R)PsS~$M+V3fr_e%n zV1xp?rTM%bV5;DrhDcw9W5H!@wb=G{#FzEtqfZW zRx8a1DF+o5Q;>J8!lH&Zr?Ww8;X-kdr9>{4AVfe_L{d|IX#2|tPHuk{U(f!H$M^Bu z*B(3mJ_gMYq~egpdZ+UNUQ4#;`tpLN_z#xCVtC z3txXdc9g8e40Co5-2B#+Q079CZ&At>2J2um<;c`&2UwgU!Fi%WxOk`n(i@Nw&(0O# zz#TNM@3b5SUwML76_aQ5Hq-@_T(Kq9>8vKMx2Lb>bXr>1(DoKfidU(SXJ~E75HkOa zyG%ddCmc}(driO4b{7$$53Av8?R67eQv?sy3cc&|v$Ucq#3$szwL(W;OmqN;D0e6_ z<`7g{^w-gR1{)zD_zE;t0HtF@6+FSR=nSwMU9RNDlZRbZ*+~#SB4(_9lCEAX^$vBLHl7yFF?|c&$ zzhXTWdDznA2&fAIJPKC|GE1}(rPw!WY7zFpCZ`gzuhN;?vK!wxLXHTqH8W$=bC!g)EhI8S_%} zT-pq6MEn$5w!W>uR);m0qZ*M~|0L+6sS!Sd%|y&QbVqfE&*XCGo^)Rv9?CG|Vqe

4w>v2Cx!`_W>~9{afUS1h}-AaN;$ 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 $vtONaK3g<+=F&4LYbP>OG(V16}% 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%0A57!m@jkgo`wUopxUF=`mudK-(WYZ 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 -I4Phq*XpT9)I-r*hZWbm%uL#1 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 z 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¬H-ydT$;LSeJ9b>FzFaNv#FhWl~Np$f`6ry?BdMi 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/ek-ra2a1-evaluation-board_0.jpg b/bsp/renesas/ra2a1-ek/docs/picture/ek-ra2a1-evaluation-board_0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee93ccf86162c738c103246fa4e3c79266365cc6 GIT binary patch literal 103487 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 l;kynSu_?EB^qI|Jj#rzpwxR literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/docs/picture/readme_faq1.png b/bsp/renesas/ra2a1-ek/docs/picture/readme_faq1.png new file mode 100644 index 0000000000000000000000000000000000000000..efdc0e019ea46cc4ebcda77f096fc77a4288e4c5 GIT binary patch literal 19419 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra2a1-ek/fsp_gen.scat b/bsp/renesas/ra2a1-ek/fsp_gen.scat new file mode 100644 index 00000000000..3bf69ccd225 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/fsp_gen.scat @@ -0,0 +1,323 @@ +LOAD_REGION_DATA_FLASH DATA_FLASH_START NOCOMPRESS DATA_FLASH_LENGTH +{ + __DATA_FLASH_start +0 EMPTY 0 {} + __DATA_FLASH_init +0 EMPTY 0 {} + + + __ddsc_DATA_FLASH_START +0 EMPTY 0 {} + .data_flash.startof +0 EMPTY 0 + { + } + __RAM_start RAM_START +0 EMPTY 0 {} + + __ddsc_RAM_START +0 EMPTY 0 {} + .ram.startof +0 EMPTY 0 + { + } + + + __ram_dtc_vector +0 UNINIT + { + *(.bss.fsp_dtc_vector_table) + } + + ; ram initialized from data_flash + __ram_from_data_flash +0 + { + ; section.ram.from_data_flash + *(.ram_from_data_flash) + ; section.ram.code_from_data_flash + *(.ram_code_from_data_flash) + } + } ; create a root region after the RAM init ERs for remainder of ROM ERs + LOAD_REGION_DATA_FLASH_JUMP +0 NOCOMPRESS + { + + __data_flash_readonly +0 FIXED + { + ; section.data_flash.readonly + *(.data_flash) + ; section.data_flash.code + *(.data_flash_code) + } + + + + __data_flash_noinit +0 FIXED UNINIT + { + ; section.data_flash.noinit + *(.bss.data_flash_noinit) + } + + + + __ddsc_DATA_FLASH_END AlignExpr(+0, 512) EMPTY 0 {} + .data_flash.endof AlignExpr(+0, 512) EMPTY 0 + { + } + + + __DATA_FLASH_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__DATA_FLASH_end) - LoadBase(__DATA_FLASH_start)) <= DATA_FLASH_LENGTH ) +} +LOAD_REGION_FLASH_GAP FLASH_GAP_START NOCOMPRESS FLASH_GAP_LENGTH +{ + __FLASH_GAP_start +0 EMPTY 0 {} + __FLASH_GAP_init +0 EMPTY 0 {} + + + __ddsc_FLASH_START +0 EMPTY 0 {} + .flash.startof +0 EMPTY 0 + { + } + + + ; MCU vector table + _VECTORS +0 EMPTY 0 {} + __flash_gap_vectors +0 FIXED + { + *(.fixed_vectors, +FIRST) + *(.application_vectors) + } + + + ; Sections that can be used to fill flash gap + __flash_gap_readonly_gap +0 FIXED + { + ; section.flash.readonly_gap + ; *bsp_linker.?*(.rodata.*) + *bsp_linker.?*(.rodata.*) + *(.flash_gap) + ; section.flash.code_gap + ; *startup.?*(.text.Reset_Handler) + *startup.?*(.text.Reset_Handler) + ; *system.?*(.text.*) + *system.?*(.text.*) + *(.flash_gap_code) + } + + __FLASH_GAP_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__FLASH_GAP_end) - LoadBase(__FLASH_GAP_start)) <= FLASH_GAP_LENGTH ) +} +LOAD_REGION_FLASH FLASH_START NOCOMPRESS FLASH_LENGTH +{ + __FLASH_start +0 EMPTY 0 {} + __FLASH_init +0 EMPTY 0 {} + + + __flash_noinit +0 FIXED UNINIT + { + ; section.flash.noinit + *(.bss.flash_noinit) + } + __ram_from_data_flash_jump ImageLimit(__ram_from_data_flash) EMPTY 0 {} + ; ram initialized from flash + __ram_from_flash +0 + { + ; section.ram.from_flash + *(.ram_from_flash) + ; section.ram.code_from_flash + *(.ram_code_from_flash) + .ANY(+RW ) + *(vtable) + } + + ; Non-initialized ram + __ram_noinit +0 UNINIT + { + ; section.ram.noinit + ; *(.bss.g_heap) + ; In case this execution region becomes empty due to heap placement place dummy selector + $$.$$(.$$) + } + ARM_LIB_STACK +0 UNINIT EMPTY 0 + { + } + ARM_LIB_HEAP +0 UNINIT + { + *(.bss.g_heap) + } + __post_heap +0 UNINIT + { + ; *(.bss.g_main_stack) + *(.bss.g_main_stack) + *(.bss.ram_noinit) + *(.bss.noinit) + } + + ; Zeroed ram + __ram_zero +0 + { + ; section.ram.zero + *(.bss.ram) + .ANY(+ZI ) + } + + ; Thread Stacks + __ram_thread_stack AlignExpr(+0, 8) UNINIT + { + *(.bss.stack?*) + } + + + __ddsc_RAM_END AlignExpr(+0, 512) EMPTY 0 {} + .ram.endof AlignExpr(+0, 512) EMPTY 0 + { + } + + __RAM_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__RAM_end) - LoadBase(__RAM_start)) <= RAM_LENGTH ) + } ; create a root region after the RAM init ERs for remainder of ROM ERs + LOAD_REGION_FLASH_JUMP +0 NOCOMPRESS + { + + __flash_readonly +0 FIXED + { + ; section.flash.readonly + *(.flash) + ; section.flash.code + *(.flash_code) + .ANY(+RO-CODE ) + .ANY(+RO-DATA ) + *(.mcuboot_sce9_key) + *(.version) + } + + + + __init_array_start +0 EMPTY 0 {} + __flash_init_array +0 FIXED + { + *(.init_array.*) + *(.init_array) + } + __init_array_end +0 EMPTY 0 {} + + + + __ddsc_FLASH_END AlignExpr(+0, 512) EMPTY 0 {} + .flash.endof AlignExpr(+0, 512) EMPTY 0 + { + } + + __FLASH_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__FLASH_end) - LoadBase(__FLASH_start)) <= FLASH_LENGTH ) +} +LOAD_REGION_OPTION_SETTING_OFS0 OPTION_SETTING_OFS0_START NOCOMPRESS OPTION_SETTING_OFS0_LENGTH +{ + __OPTION_SETTING_OFS0_start +0 EMPTY 0 {} + __OPTION_SETTING_OFS0_init +0 EMPTY 0 {} + + + __ddsc_OPTION_SETTING_OFS0_START +0 EMPTY 0 {} + .option_setting_ofs0.startof +0 EMPTY 0 + { + } + + + ; Option Function Select Register 0 + __option_setting_ofs0_reg +0 FIXED + { + *(.option_setting_ofs0) + } + + + + __ddsc_OPTION_SETTING_OFS0_END +0 EMPTY 0 {} + .option_setting_ofs0.endof +0 EMPTY 0 + { + } + + + __OPTION_SETTING_OFS0_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__OPTION_SETTING_OFS0_end) - LoadBase(__OPTION_SETTING_OFS0_start)) <= OPTION_SETTING_OFS0_LENGTH ) +} +LOAD_REGION_OPTION_SETTING_OFS1 OPTION_SETTING_OFS1_START NOCOMPRESS OPTION_SETTING_OFS1_LENGTH +{ + __OPTION_SETTING_OFS1_start +0 EMPTY 0 {} + __OPTION_SETTING_OFS1_init +0 EMPTY 0 {} + + + __ddsc_OPTION_SETTING_OFS1_START +0 EMPTY 0 {} + .option_setting_ofs1.startof +0 EMPTY 0 + { + } + + + ; Option Function Select Register 1 + __option_setting_ofs1_reg +0 FIXED + { + *(.option_setting_ofs1) + } + + + + __ddsc_OPTION_SETTING_OFS1_END +0 EMPTY 0 {} + .option_setting_ofs1.endof +0 EMPTY 0 + { + } + + + __OPTION_SETTING_OFS1_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__OPTION_SETTING_OFS1_end) - LoadBase(__OPTION_SETTING_OFS1_start)) <= OPTION_SETTING_OFS1_LENGTH ) +} +LOAD_REGION_OPTION_SETTING_SECMPU OPTION_SETTING_SECMPU_START NOCOMPRESS OPTION_SETTING_SECMPU_LENGTH +{ + __OPTION_SETTING_SECMPU_start +0 EMPTY 0 {} + __OPTION_SETTING_SECMPU_init +0 EMPTY 0 {} + + + __ddsc_OPTION_SETTING_SECMPU_START +0 EMPTY 0 {} + .option_setting_secmpu.startof +0 EMPTY 0 + { + } + + + ; Security MPU Registers + __option_setting_secmpu_reg +0 FIXED + { + *(.option_setting_secmpu) + } + + + + __ddsc_OPTION_SETTING_SECMPU_END +0 EMPTY 0 {} + .option_setting_secmpu.endof +0 EMPTY 0 + { + } + + + __OPTION_SETTING_SECMPU_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__OPTION_SETTING_SECMPU_end) - LoadBase(__OPTION_SETTING_SECMPU_start)) <= OPTION_SETTING_SECMPU_LENGTH ) +} +LOAD_REGION_OPTION_SETTING_OSIS OPTION_SETTING_OSIS_START NOCOMPRESS OPTION_SETTING_OSIS_LENGTH +{ + __OPTION_SETTING_OSIS_start +0 EMPTY 0 {} + __OPTION_SETTING_OSIS_init +0 EMPTY 0 {} + + + __ddsc_OPTION_SETTING_OSIS_START +0 EMPTY 0 {} + .option_setting_osis.startof +0 EMPTY 0 + { + } + + + ; OCD/Serial Programmer ID setting register + __option_setting_osis_reg +0 FIXED + { + *(.option_setting_osis) + } + + + + __ddsc_OPTION_SETTING_OSIS_END +0 EMPTY 0 {} + .option_setting_osis.endof +0 EMPTY 0 + { + } + + + __OPTION_SETTING_OSIS_end +0 EMPTY 0 {} + SCatterAssert( (LoadBase(__OPTION_SETTING_OSIS_end) - LoadBase(__OPTION_SETTING_OSIS_start)) <= OPTION_SETTING_OSIS_LENGTH ) +} + + diff --git a/bsp/renesas/ra2a1-ek/memory_regions.scat b/bsp/renesas/ra2a1-ek/memory_regions.scat new file mode 100644 index 00000000000..13d309d8f13 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/memory_regions.scat @@ -0,0 +1,17 @@ + /* generated memory regions file - do not edit */ + #define RAM_START 0x20000000 + #define RAM_LENGTH 0x00008000 + #define FLASH_START 0x00000440 + #define FLASH_LENGTH 0x0003fbc0 + #define DATA_FLASH_START 0x40100000 + #define DATA_FLASH_LENGTH 0x00002000 + #define OPTION_SETTING_OFS0_START 0x00000400 + #define OPTION_SETTING_OFS0_LENGTH 0x00000004 + #define OPTION_SETTING_OFS1_START 0x00000404 + #define OPTION_SETTING_OFS1_LENGTH 0x00000004 + #define OPTION_SETTING_SECMPU_START 0x00000408 + #define OPTION_SETTING_SECMPU_LENGTH 0x00000034 + #define OPTION_SETTING_OSIS_START 0x01010018 + #define OPTION_SETTING_OSIS_LENGTH 0x00000020 + #define FLASH_GAP_START 0x00000000 + #define FLASH_GAP_LENGTH 0x00000400 diff --git a/bsp/renesas/ra2a1-ek/project.uvoptx b/bsp/renesas/ra2a1-ek/project.uvoptx new file mode 100644 index 00000000000..c522b197e3d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/project.uvoptx @@ -0,0 +1,878 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + Target_1 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 1 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) + + + 0 + JL2CM3 + -O111 -N00("ARM CoreSight SW-DP") -S2 -ZTIFSpeedSel5000 -A0 -C-1 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD0 -FC800 -FN0 + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 ) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Compiler + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + syscall_mem.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + syscalls.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cctype.c + cctype.c + 0 + 0 + + + 1 + 4 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstdlib.c + cstdlib.c + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cstring.c + cstring.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\ctime.c + ctime.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cunistd.c + cunistd.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + ..\..\..\components\libc\compilers\common\cwchar.c + cwchar.c + 0 + 0 + + + + + DeviceDrivers + 0 + 0 + 0 + 0 + + 2 + 9 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\core\device.c + device.c + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_comm.c + completion_comm.c + 0 + 0 + + + 2 + 11 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\completion_up.c + completion_up.c + 0 + 0 + + + 2 + 12 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\condvar.c + condvar.c + 0 + 0 + + + 2 + 13 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\dataqueue.c + dataqueue.c + 0 + 0 + + + 2 + 14 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\pipe.c + pipe.c + 0 + 0 + + + 2 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringblk_buf.c + ringblk_buf.c + 0 + 0 + + + 2 + 16 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\ringbuffer.c + ringbuffer.c + 0 + 0 + + + 2 + 17 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\waitqueue.c + waitqueue.c + 0 + 0 + + + 2 + 18 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\ipc\workqueue.c + workqueue.c + 0 + 0 + + + 2 + 19 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\pin\dev_pin.c + dev_pin.c + 0 + 0 + + + 2 + 20 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\serial\dev_serial_v2.c + dev_serial_v2.c + 0 + 0 + + + + + Drivers + 0 + 0 + 0 + 0 + + 3 + 21 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_common.c + drv_common.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_gpio.c + drv_gpio.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\libraries\HAL_Drivers\drv_usart_v2.c + drv_usart_v2.c + 0 + 0 + + + + + Finsh + 0 + 0 + 0 + 0 + + 4 + 24 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh.c + msh.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + + + Kernel + 0 + 0 + 0 + 0 + + 5 + 28 + 1 + 0 + 0 + 0 + ..\..\..\src\clock.c + clock.c + 0 + 0 + + + 5 + 29 + 1 + 0 + 0 + 0 + ..\..\..\src\components.c + components.c + 0 + 0 + + + 5 + 30 + 1 + 0 + 0 + 0 + ..\..\..\src\cpu_up.c + cpu_up.c + 0 + 0 + + + 5 + 31 + 1 + 0 + 0 + 0 + ..\..\..\src\defunct.c + defunct.c + 0 + 0 + + + 5 + 32 + 1 + 0 + 0 + 0 + ..\..\..\src\idle.c + idle.c + 0 + 0 + + + 5 + 33 + 1 + 0 + 0 + 0 + ..\..\..\src\ipc.c + ipc.c + 0 + 0 + + + 5 + 34 + 1 + 0 + 0 + 0 + ..\..\..\src\irq.c + irq.c + 0 + 0 + + + 5 + 35 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 5 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 5 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 5 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 5 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 5 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + klibc + 0 + 0 + 0 + 0 + + 6 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 6 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kerrno.c + kerrno.c + 0 + 0 + + + 6 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c + 0 + 0 + + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c + 0 + 0 + + + + + libcpu + 0 + 0 + 0 + 0 + + 7 + 47 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 7 + 48 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 7 + 49 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 7 + 50 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m23\context_rvds.S + context_rvds.S + 0 + 0 + + + 7 + 51 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m23\cpuport.c + cpuport.c + 0 + 0 + + + + + :Renesas RA Smart Configurator:Common Sources + 1 + 0 + 0 + 0 + + 8 + 52 + 1 + 0 + 0 + 0 + .\src\hal_entry.c + hal_entry.c + 0 + 0 + + + + + ::Flex Software + 0 + 0 + 0 + 1 + + + diff --git a/bsp/renesas/ra2a1-ek/project.uvprojx b/bsp/renesas/ra2a1-ek/project.uvprojx new file mode 100644 index 00000000000..e34377d006a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/project.uvprojx @@ -0,0 +1,2199 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target_1 + 0x4 + ARM-ADS + 6210000::V6.21::ARMCLANG + 1 + + + R7FA2A1AB + Renesas + Renesas.RA_DFP.6.0.0 + https://www2.renesas.eu/Keil_MDK_Packs/ + CPUTYPE("Cortex-M23") CLOCK(12000000) ELITTLE + + + + 0 + + + + + + + + + + + $$Device:R7FA2A1AB$SVD\R7FA2A1AB.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + rtthread + 1 + 0 + 1 + 1 + 0 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out" && echo. > "$Poutput.rasc"" + + 0 + 0 + 2 + 0 + + + 1 + 0 + cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --gensmartbundle --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" "$L%L" 2> "%%TEMP%%\rasc_stderr.out"" + + 0 + 0 + 2 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMV8M.DLL + -MPU + DCM.DLL + -pCM4 + SARMV8M.DLL + -MPU + TCM.DLL + -pCM23 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 0 + 1 + 0 + 0 + 1 + -1 + + 1 + + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M23" + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 6 + 0 + 0 + 0 + 0 + 0 + + -ffunction-sections -Wno-license-management -Wunused -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal -Wno-unused-but-set-variable -Wno-implicit-function-declaration -Wno-deprecated-non-prototype -Wno-int-conversion -Oz -D_RENESAS_RA_ -D_RA_CORE=CM23 -D_RA_ORDINAL=1 + RT_USING_LIBC, RT_USING_ARMLIBC, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__ + + ..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\cortex-m23;..\..\..\components\libc\posix\ipc;board\ports;..\..\..\components\libc\posix\io\eventfd;..\libraries\HAL_Drivers\config;..\..\..\components\drivers\smp_call;..\..\..\components\libc\compilers\common\include;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\..\..\include;script\bsp_link\Keil;..\..\..\components\libc\compilers\common\extension\fcntl\octal;board;..\..\..\components\finsh;.;..\..\..\libcpu\arm\common;..\..\..\components\drivers\phy;..\..\..\components\drivers\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + --via=via/rasc_armasm.via + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + + + + .\script\fsp.scat + + + + + + + + + + + Compiler + + + syscall_mem.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscall_mem.c + + + syscalls.c + 1 + ..\..\..\components\libc\compilers\armlibc\syscalls.c + + + cctype.c + 1 + ..\..\..\components\libc\compilers\common\cctype.c + + + cstdlib.c + 1 + ..\..\..\components\libc\compilers\common\cstdlib.c + + + cstring.c + 1 + ..\..\..\components\libc\compilers\common\cstring.c + + + ctime.c + 1 + ..\..\..\components\libc\compilers\common\ctime.c + + + cunistd.c + 1 + ..\..\..\components\libc\compilers\common\cunistd.c + + + cwchar.c + 1 + ..\..\..\components\libc\compilers\common\cwchar.c + + + + + DeviceDrivers + + + device.c + 1 + ..\..\..\components\drivers\core\device.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_comm.c + 1 + ..\..\..\components\drivers\ipc\completion_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + completion_up.c + 1 + ..\..\..\components\drivers\ipc\completion_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + condvar.c + 1 + ..\..\..\components\drivers\ipc\condvar.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dataqueue.c + 1 + ..\..\..\components\drivers\ipc\dataqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + pipe.c + 1 + ..\..\..\components\drivers\ipc\pipe.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringblk_buf.c + 1 + ..\..\..\components\drivers\ipc\ringblk_buf.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + ringbuffer.c + 1 + ..\..\..\components\drivers\ipc\ringbuffer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + waitqueue.c + 1 + ..\..\..\components\drivers\ipc\waitqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + workqueue.c + 1 + ..\..\..\components\drivers\ipc\workqueue.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_pin.c + 1 + ..\..\..\components\drivers\pin\dev_pin.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + dev_serial_v2.c + 1 + ..\..\..\components\drivers\serial\dev_serial_v2.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_IPC_SOURCE__ + + + + + + + + + + + Drivers + + + drv_common.c + 1 + ..\libraries\HAL_Drivers\drv_common.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + -std=c99 + + + + + + + + + + drv_gpio.c + 1 + ..\libraries\HAL_Drivers\drv_gpio.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + -std=c99 + + + + + + + + + + drv_usart_v2.c + 1 + ..\libraries\HAL_Drivers\drv_usart_v2.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + -std=c99 + + + + + + + + + + + + Finsh + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + + + Kernel + + + clock.c + 1 + ..\..\..\src\clock.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + components.c + 1 + ..\..\..\src\components.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + cpu_up.c + 1 + ..\..\..\src\cpu_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + defunct.c + 1 + ..\..\..\src\defunct.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + idle.c + 1 + ..\..\..\src\idle.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + ipc.c + 1 + ..\..\..\src\ipc.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + irq.c + 1 + ..\..\..\src\irq.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + kservice.c + 1 + ..\..\..\src\kservice.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + mem.c + 1 + ..\..\..\src\mem.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + object.c + 1 + ..\..\..\src\object.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_comm.c + 1 + ..\..\..\src\scheduler_comm.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + scheduler_up.c + 1 + ..\..\..\src\scheduler_up.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + thread.c + 1 + ..\..\..\src\thread.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + timer.c + 1 + ..\..\..\src\timer.c + + + 2 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + __RT_KERNEL_SOURCE__ + + + + + + + + + + + klibc + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + rt_vsnprintf_tiny.c + 1 + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.c + + + rt_vsscanf.c + 1 + ..\..\..\src\klibc\rt_vsscanf.c + + + + + libcpu + + + atomic_arm.c + 1 + ..\..\..\libcpu\arm\common\atomic_arm.c + + + div0.c + 1 + ..\..\..\libcpu\arm\common\div0.c + + + showmem.c + 1 + ..\..\..\libcpu\arm\common\showmem.c + + + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m23\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m23\cpuport.c + + + + + :Renesas RA Smart Configurator:Common Sources + + + hal_entry.c + 1 + .\src\hal_entry.c + + + + + ::Flex Software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + template + 1 + + + + +
diff --git a/bsp/renesas/ra2a1-ek/ra/SConscript b/bsp/renesas/ra2a1-ek/ra/SConscript new file mode 100644 index 00000000000..4bed93bc2e5 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/SConscript @@ -0,0 +1,26 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + if GetOption('target') != 'mdk5': + src += Glob(cwd + '/fsp/src/bsp/mcu/all/*.c') + src += Glob(cwd + '/fsp/src/bsp/mcu/ra2a1/*.c') + src += [cwd + '/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c'] + src += [cwd + '/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c'] + src += Glob(cwd + '/fsp/src/r_*/*.c') + CPPPATH = [ cwd + '/arm/CMSIS_6/CMSIS/Core/Include', + cwd + '/fsp/inc', + cwd + '/fsp/inc/api', + cwd + '/fsp/inc/instances',] + +group = DefineGroup('ra', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h new file mode 100644 index 00000000000..760c6305729 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS-Core(A) Compiler ARMClang (Arm Compiler 6) Header File + */ + +#ifndef __CMSIS_ARMCLANG_A_H +#define __CMSIS_ARMCLANG_A_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#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 + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0, #0" : "=Q" (*ptr) : "r" (value) ); +} + + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +#define __SADD8 __builtin_arm_sadd8 +#define __QADD8 __builtin_arm_qadd8 +#define __SHADD8 __builtin_arm_shadd8 +#define __UADD8 __builtin_arm_uadd8 +#define __UQADD8 __builtin_arm_uqadd8 +#define __UHADD8 __builtin_arm_uhadd8 +#define __SSUB8 __builtin_arm_ssub8 +#define __QSUB8 __builtin_arm_qsub8 +#define __SHSUB8 __builtin_arm_shsub8 +#define __USUB8 __builtin_arm_usub8 +#define __UQSUB8 __builtin_arm_uqsub8 +#define __UHSUB8 __builtin_arm_uhsub8 +#define __SADD16 __builtin_arm_sadd16 +#define __QADD16 __builtin_arm_qadd16 +#define __SHADD16 __builtin_arm_shadd16 +#define __UADD16 __builtin_arm_uadd16 +#define __UQADD16 __builtin_arm_uqadd16 +#define __UHADD16 __builtin_arm_uhadd16 +#define __SSUB16 __builtin_arm_ssub16 +#define __QSUB16 __builtin_arm_qsub16 +#define __SHSUB16 __builtin_arm_shsub16 +#define __USUB16 __builtin_arm_usub16 +#define __UQSUB16 __builtin_arm_uqsub16 +#define __UHSUB16 __builtin_arm_uhsub16 +#define __SASX __builtin_arm_sasx +#define __QASX __builtin_arm_qasx +#define __SHASX __builtin_arm_shasx +#define __UASX __builtin_arm_uasx +#define __UQASX __builtin_arm_uqasx +#define __UHASX __builtin_arm_uhasx +#define __SSAX __builtin_arm_ssax +#define __QSAX __builtin_arm_qsax +#define __SHSAX __builtin_arm_shsax +#define __USAX __builtin_arm_usax +#define __UQSAX __builtin_arm_uqsax +#define __UHSAX __builtin_arm_uhsax +#define __USAD8 __builtin_arm_usad8 +#define __USADA8 __builtin_arm_usada8 +#define __SSAT16 __builtin_arm_ssat16 +#define __USAT16 __builtin_arm_usat16 +#define __UXTB16 __builtin_arm_uxtb16 +#define __UXTAB16 __builtin_arm_uxtab16 +#define __SXTB16 __builtin_arm_sxtb16 +#define __SXTAB16 __builtin_arm_sxtab16 +#define __SMUAD __builtin_arm_smuad +#define __SMUADX __builtin_arm_smuadx +#define __SMLAD __builtin_arm_smlad +#define __SMLADX __builtin_arm_smladx +#define __SMLALD __builtin_arm_smlald +#define __SMLALDX __builtin_arm_smlaldx +#define __SMUSD __builtin_arm_smusd +#define __SMUSDX __builtin_arm_smusdx +#define __SMLSD __builtin_arm_smlsd +#define __SMLSDX __builtin_arm_smlsdx +#define __SMLSLD __builtin_arm_smlsld +#define __SMLSLDX __builtin_arm_smlsldx +#define __SEL __builtin_arm_sel +#define __QADD __builtin_arm_qadd +#define __QSUB __builtin_arm_qsub + +#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) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + 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; +} + +__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 int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + __ASM volatile( + // Permit access to VFP/NEON, registers by modifying CPACR + " MRC p15,0,R1,c1,c0,2 \n" + " ORR R1,R1,#0x00F00000 \n" + " MCR p15,0,R1,c1,c0,2 \n" + + // Ensure that subsequent instructions occur in the context of VFP/NEON access permitted + " ISB \n" + + // Enable VFP/NEON + " VMRS R1,FPEXC \n" + " ORR R1,R1,#0x40000000 \n" + " VMSR FPEXC,R1 \n" + + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + + // Initialise FPSCR to a known state + " VMRS R1,FPSCR \n" + " LDR R2,=0x00086060 \n" //Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero. + " AND R1,R1,R2 \n" + " VMSR FPSCR,R1 " + : : : "cc", "r1", "r2" + ); +} + +#endif /* __CMSIS_ARMCLANG_A_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h new file mode 100644 index 00000000000..91ca6a2a590 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h @@ -0,0 +1,386 @@ +/* + * Copyright (c) 2023-2024 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. + */ + +/* + * CMSIS-Core(A) Compiler LLVM/Clang Header File + */ + +#ifndef __CMSIS_CLANG_A_H +#define __CMSIS_CLANG_A_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#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 + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0, #0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0, #0" : "=Q" (*ptr) : "r" (value) ); +} + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __builtin_arm_sadd8 +#define __QADD8 __builtin_arm_qadd8 +#define __SHADD8 __builtin_arm_shadd8 +#define __UADD8 __builtin_arm_uadd8 +#define __UQADD8 __builtin_arm_uqadd8 +#define __UHADD8 __builtin_arm_uhadd8 +#define __SSUB8 __builtin_arm_ssub8 +#define __QSUB8 __builtin_arm_qsub8 +#define __SHSUB8 __builtin_arm_shsub8 +#define __USUB8 __builtin_arm_usub8 +#define __UQSUB8 __builtin_arm_uqsub8 +#define __UHSUB8 __builtin_arm_uhsub8 +#define __SADD16 __builtin_arm_sadd16 +#define __QADD16 __builtin_arm_qadd16 +#define __SHADD16 __builtin_arm_shadd16 +#define __UADD16 __builtin_arm_uadd16 +#define __UQADD16 __builtin_arm_uqadd16 +#define __UHADD16 __builtin_arm_uhadd16 +#define __SSUB16 __builtin_arm_ssub16 +#define __QSUB16 __builtin_arm_qsub16 +#define __SHSUB16 __builtin_arm_shsub16 +#define __USUB16 __builtin_arm_usub16 +#define __UQSUB16 __builtin_arm_uqsub16 +#define __UHSUB16 __builtin_arm_uhsub16 +#define __SASX __builtin_arm_sasx +#define __QASX __builtin_arm_qasx +#define __SHASX __builtin_arm_shasx +#define __UASX __builtin_arm_uasx +#define __UQASX __builtin_arm_uqasx +#define __UHASX __builtin_arm_uhasx +#define __SSAX __builtin_arm_ssax +#define __QSAX __builtin_arm_qsax +#define __SHSAX __builtin_arm_shsax +#define __USAX __builtin_arm_usax +#define __UQSAX __builtin_arm_uqsax +#define __UHSAX __builtin_arm_uhsax +#define __USAD8 __builtin_arm_usad8 +#define __USADA8 __builtin_arm_usada8 +#define __SSAT16 __builtin_arm_ssat16 +#define __USAT16 __builtin_arm_usat16 +#define __UXTB16 __builtin_arm_uxtb16 +#define __UXTAB16 __builtin_arm_uxtab16 +#define __SXTB16 __builtin_arm_sxtb16 +#define __SXTAB16 __builtin_arm_sxtab16 +#define __SMUAD __builtin_arm_smuad +#define __SMUADX __builtin_arm_smuadx +#define __SMLAD __builtin_arm_smlad +#define __SMLADX __builtin_arm_smladx +#define __SMLALD __builtin_arm_smlald +#define __SMLALDX __builtin_arm_smlaldx +#define __SMUSD __builtin_arm_smusd +#define __SMUSDX __builtin_arm_smusdx +#define __SMLSD __builtin_arm_smlsd +#define __SMLSDX __builtin_arm_smlsdx +#define __SMLSLD __builtin_arm_smlsld +#define __SMLSLDX __builtin_arm_smlsldx +#define __SEL __builtin_arm_sel +#define __QADD __builtin_arm_qadd +#define __QSUB __builtin_arm_qsub + +#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) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) +{ + uint32_t result; + 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; +} + +__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 int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + // Permit access to VFP/NEON, registers by modifying CPACR + const uint32_t cpacr = __get_CPACR(); + __set_CPACR(cpacr | 0x00F00000ul); + __ISB(); + + // Enable VFP/NEON + const uint32_t fpexc = __get_FPEXC(); + __set_FPEXC(fpexc | 0x40000000ul); + + __ASM volatile( + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + : : : "cc", "r2" + ); + + // Initialise FPSCR to a known state + const uint32_t fpscr = __get_FPSCR(); + __set_FPSCR(fpscr & 0x00086060ul); +} + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma clang diagnostic pop + +#endif /* __CMSIS_CLANG_A_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h new file mode 100644 index 00000000000..582b1bc54fe --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h @@ -0,0 +1,564 @@ +/* + * Copyright (c) 2009-2017 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. + */ + +/* + * CMSIS-Core(A) Compiler Specific Macros, Functions, Instructions + */ + +#ifndef __CMSIS_CP15_H +#define __CMSIS_CP15_H + +#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 + +/** \brief Get ACTLR + \return Auxiliary Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_ACTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 1); + return(result); +} + +/** \brief Set ACTLR + \param [in] actlr Auxiliary Control value to set + */ +__STATIC_FORCEINLINE void __set_ACTLR(uint32_t actlr) +{ + __set_CP(15, 0, actlr, 1, 0, 1); +} + +/** \brief Get CPACR + \return Coprocessor Access Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 2); + return result; +} + +/** \brief Set CPACR + \param [in] cpacr Coprocessor Access Control value to set + */ +__STATIC_FORCEINLINE void __set_CPACR(uint32_t cpacr) +{ + __set_CP(15, 0, cpacr, 1, 0, 2); +} + +/** \brief Get DFSR + \return Data Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 0); + return result; +} + +/** \brief Set DFSR + \param [in] dfsr Data Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_DFSR(uint32_t dfsr) +{ + __set_CP(15, 0, dfsr, 5, 0, 0); +} + +/** \brief Get IFSR + \return Instruction Fault Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IFSR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 5, 0, 1); + return result; +} + +/** \brief Set IFSR + \param [in] ifsr Instruction Fault Status value to set + */ +__STATIC_FORCEINLINE void __set_IFSR(uint32_t ifsr) +{ + __set_CP(15, 0, ifsr, 5, 0, 1); +} + +/** \brief Get ISR + \return Interrupt Status Register value + */ +__STATIC_FORCEINLINE uint32_t __get_ISR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 1, 0); + return result; +} + +/** \brief Get CBAR + \return Configuration Base Address register value + */ +__STATIC_FORCEINLINE uint32_t __get_CBAR(void) +{ + uint32_t result; + __get_CP(15, 4, result, 15, 0, 0); + return result; +} + +/** \brief Get TTBR0 + + This function returns the value of the Translation Table Base Register 0. + + \return Translation Table Base Register 0 value + */ +__STATIC_FORCEINLINE uint32_t __get_TTBR0(void) +{ + uint32_t result; + __get_CP(15, 0, result, 2, 0, 0); + return result; +} + +/** \brief Set TTBR0 + + This function assigns the given value to the Translation Table Base Register 0. + + \param [in] ttbr0 Translation Table Base Register 0 value to set + */ +__STATIC_FORCEINLINE void __set_TTBR0(uint32_t ttbr0) +{ + __set_CP(15, 0, ttbr0, 2, 0, 0); +} + +/** \brief Get DACR + + This function returns the value of the Domain Access Control Register. + + \return Domain Access Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_DACR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 3, 0, 0); + return result; +} + +/** \brief Set DACR + + This function assigns the given value to the Domain Access Control Register. + + \param [in] dacr Domain Access Control Register value to set + */ +__STATIC_FORCEINLINE void __set_DACR(uint32_t dacr) +{ + __set_CP(15, 0, dacr, 3, 0, 0); +} + +/** \brief Set SCTLR + + This function assigns the given value to the System Control Register. + + \param [in] sctlr System Control Register value to set + */ +__STATIC_FORCEINLINE void __set_SCTLR(uint32_t sctlr) +{ + __set_CP(15, 0, sctlr, 1, 0, 0); +} + +/** \brief Get SCTLR + \return System Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_SCTLR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 1, 0, 0); + return result; +} + +/** \brief Get MPIDR + + This function returns the value of the Multiprocessor Affinity Register. + + \return Multiprocessor Affinity Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MPIDR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 0, 0, 5); + return result; +} + +/** \brief Get VBAR + + This function returns the value of the Vector Base Address Register. + + \return Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_VBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 0); + return result; +} + +/** \brief Set VBAR + + This function assigns the given value to the Vector Base Address Register. + + \param [in] vbar Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_VBAR(uint32_t vbar) +{ + __set_CP(15, 0, vbar, 12, 0, 0); +} + +/** \brief Get MVBAR + + This function returns the value of the Monitor Vector Base Address Register. + + \return Monitor Vector Base Address Register + */ +__STATIC_FORCEINLINE uint32_t __get_MVBAR(void) +{ + uint32_t result; + __get_CP(15, 0, result, 12, 0, 1); + return result; +} + +/** \brief Set MVBAR + + This function assigns the given value to the Monitor Vector Base Address Register. + + \param [in] mvbar Monitor Vector Base Address Register value to set + */ +__STATIC_FORCEINLINE void __set_MVBAR(uint32_t mvbar) +{ + __set_CP(15, 0, mvbar, 12, 0, 1); +} + +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Set CNTFRQ + + This function assigns the given value to PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \param [in] value CNTFRQ Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTFRQ(uint32_t value) +{ + __set_CP(15, 0, value, 14, 0, 0); +} + +/** \brief Get CNTFRQ + + This function returns the value of the PL1 Physical Timer Counter Frequency Register (CNTFRQ). + + \return CNTFRQ Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTFRQ(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 0 , 0); + return result; +} + +/** \brief Set CNTP_TVAL + + This function assigns the given value to PL1 Physical Timer Value Register (CNTP_TVAL). + + \param [in] value CNTP_TVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_TVAL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 0); +} + +/** \brief Get CNTP_TVAL + + This function returns the value of the PL1 Physical Timer Value Register (CNTP_TVAL). + + \return CNTP_TVAL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_TVAL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 0); + return result; +} + +/** \brief Get CNTPCT + + This function returns the value of the 64 bits PL1 Physical Count Register (CNTPCT). + + \return CNTPCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTPCT(void) +{ + uint64_t result; + __get_CP64(15, 0, result, 14); + return result; +} + +/** \brief Set CNTP_CVAL + + This function assigns the given value to 64bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \param [in] value CNTP_CVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CVAL(uint64_t value) +{ + __set_CP64(15, 2, value, 14); +} + +/** \brief Get CNTP_CVAL + + This function returns the value of the 64 bits PL1 Physical Timer CompareValue Register (CNTP_CVAL). + + \return CNTP_CVAL Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTP_CVAL(void) +{ + uint64_t result; + __get_CP64(15, 2, result, 14); + return result; +} + +/** \brief Set CNTP_CTL + + This function assigns the given value to PL1 Physical Timer Control Register (CNTP_CTL). + + \param [in] value CNTP_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTP_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 2, 1); +} + +/** \brief Get CNTP_CTL register + \return CNTP_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTP_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 2, 1); + return result; +} + +/******************************* VIRTUAL TIMER *******************************/ +/** see [ARM DDI 0406C.d] : + . §B4.1.31 "CNTV_CTL, Counter-timer Virtual Timer Control register" + . §B4.1.32 "CNTV_CVAL, Counter-timer Virtual Timer CompareValue register" + . §B4.1.33 "CNTV_TVAL, Counter-timer Virtual Timer TimerValue register" + . §B4.1.34 "CNTVCT, Counter-timer Virtual Count register" +**/ +/** \brief Set CNTV_TVAL + This function assigns the given value to VL1 Virtual Timer Value Register (CNTV_TVAL). + \param [in] value CNTV_TVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_TVAL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 3, 0); +} + +/** \brief Get CNTV_TVAL + This function returns the value of the VL1 Virtual Timer Value Register (CNTV_TVAL). + \return CNTV_TVAL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTV_TVAL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 3, 0); + return result; +} + +/** \brief Get CNTVCT + This function returns the value of the 64 bits VL1 Virtual Count Register (CNTVCT). + \return CNTVCT Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTVCT(void) +{ + uint64_t result; + __get_CP64(15, 1, result, 14); + return result; +} + +/** \brief Set CNTV_CVAL + This function assigns the given value to 64bits VL1 Virtual Timer CompareValue Register (CNTV_CVAL). + \param [in] value CNTV_CVAL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_CVAL(uint64_t value) +{ + __set_CP64(15, 3, value, 14); +} + +/** \brief Get CNTV_CVAL + This function returns the value of the 64 bits VL1 Virtual Timer CompareValue Register (CNTV_CVAL). + \return CNTV_CVAL Register value + */ +__STATIC_FORCEINLINE uint64_t __get_CNTV_CVAL(void) +{ + uint64_t result; + __get_CP64(15, 3, result, 14); + return result; +} + +/** \brief Set CNTV_CTL + This function assigns the given value to VL1 Virtual Timer Control Register (CNTV_CTL). + \param [in] value CNTV_CTL Register value to set +*/ +__STATIC_FORCEINLINE void __set_CNTV_CTL(uint32_t value) +{ + __set_CP(15, 0, value, 14, 3, 1); +} + +/** \brief Get CNTV_CTL register + \return CNTV_CTL Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CNTV_CTL(void) +{ + uint32_t result; + __get_CP(15, 0, result, 14, 3, 1); + return result; +} + +/***************************** VIRTUAL TIMER END *****************************/ +#endif + +/** \brief Set TLBIALL + + TLB Invalidate All + */ +__STATIC_FORCEINLINE void __set_TLBIALL(uint32_t value) +{ + __set_CP(15, 0, value, 8, 7, 0); +} + +/** \brief Set BPIALL. + + Branch Predictor Invalidate All + */ +__STATIC_FORCEINLINE void __set_BPIALL(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 6); +} + +/** \brief Set ICIALLU + + Instruction Cache Invalidate All + */ +__STATIC_FORCEINLINE void __set_ICIALLU(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 0); +} + +/** \brief Set ICIMVAC + + Instruction Cache Invalidate + */ +__STATIC_FORCEINLINE void __set_ICIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 5, 1); +} + +/** \brief Set DCCMVAC + + Data cache clean + */ +__STATIC_FORCEINLINE void __set_DCCMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 1); +} + +/** \brief Set DCIMVAC + + Data cache invalidate + */ +__STATIC_FORCEINLINE void __set_DCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 1); +} + +/** \brief Set DCCIMVAC + + Data cache clean and invalidate + */ +__STATIC_FORCEINLINE void __set_DCCIMVAC(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 1); +} + +/** \brief Set CSSELR + */ +__STATIC_FORCEINLINE void __set_CSSELR(uint32_t value) +{ + __set_CP(15, 2, value, 0, 0, 0); +} + +/** \brief Get CSSELR + \return CSSELR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CSSELR(void) +{ + uint32_t result; + __get_CP(15, 2, result, 0, 0, 0); + return result; +} + +/** \brief Get CCSIDR + \return CCSIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CCSIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 0); + return result; +} + +/** \brief Get CLIDR + \return CLIDR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CLIDR(void) +{ + uint32_t result; + __get_CP(15, 1, result, 0, 0, 1); + return result; +} + +/** \brief Set DCISW + */ +__STATIC_FORCEINLINE void __set_DCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 6, 2); +} + +/** \brief Set DCCSW + */ +__STATIC_FORCEINLINE void __set_DCCSW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 10, 2); +} + +/** \brief Set DCCISW + */ +__STATIC_FORCEINLINE void __set_DCCISW(uint32_t value) +{ + __set_CP(15, 0, value, 7, 14, 2); +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h new file mode 100644 index 00000000000..5d2aaca75dd --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +#ifndef __CMSIS_GCC_A_H +#define __CMSIS_GCC_A_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + + +/** \defgroup CMSIS_Core_intrinsics CMSIS Core Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr = __get_CPSR(); + uint32_t result; + __ASM volatile( + "CPS #0x1F \n" + "MOV %0, sp " : "=r"(result) : : "memory" + ); + __set_CPSR(cpsr); + __ISB(); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr = __get_CPSR(); + __ASM volatile( + "CPS #0x1F \n" + "MOV sp, %0 " : : "r" (topOfProcStack) : "memory" + ); + __set_CPSR(cpsr); + __ISB(); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#include "cmsis_cp15.h" + +/** \brief Enable Floating Point Unit + + Critical section, called from undef handler, so systick is disabled + */ +__STATIC_INLINE void __FPU_Enable(void) +{ + // Permit access to VFP/NEON, registers by modifying CPACR + const uint32_t cpacr = __get_CPACR(); + __set_CPACR(cpacr | 0x00F00000ul); + __ISB(); + + // Enable VFP/NEON + const uint32_t fpexc = __get_FPEXC(); + __set_FPEXC(fpexc | 0x40000000ul); + + __ASM volatile( + // Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + // Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#if (defined(__ARM_NEON) && (__ARM_NEON == 1)) + // Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + : : : "cc", "r2" + ); + + // Initialise FPSCR to a known state + const uint32_t fpscr = __get_FPSCR(); + __set_FPSCR(fpscr & 0x00086060ul); +} + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_A_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h new file mode 100644 index 00000000000..3ddd0ba79a4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h @@ -0,0 +1,558 @@ +/* + * Copyright (c) 2017-2018 IAR Systems + * Copyright (c) 2018-2023 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. + */ + +/* + * CMSIS-Core(A) Compiler ICCARM (IAR Compiler for Arm) Header File + */ + +#ifndef __CMSIS_ICCARM_A_H__ +#define __CMSIS_ICCARM_A_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#pragma language=extended + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_7A__ +/* Macro already defined */ +#else + #if defined(__ARM7A__) + #define __ARM_ARCH_7A__ 1 + #endif +#endif + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif + +#ifndef __UNALIGNED_UINT16_READ + #pragma language=save + #pragma language=extended + __IAR_FT uint16_t __iar_uint16_read(void const *ptr) + { + return *(__packed uint16_t*)(ptr); + } + #pragma language=restore + #define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE + #pragma language=save + #pragma language=extended + __IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) + { + *(__packed uint16_t*)(ptr) = val;; + } + #pragma language=restore + #define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ + #pragma language=save + #pragma language=extended + __IAR_FT uint32_t __iar_uint32_read(void const *ptr) + { + return *(__packed uint32_t*)(ptr); + } + #pragma language=restore + #define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE + #pragma language=save + #pragma language=extended + __IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) + { + *(__packed uint32_t*)(ptr) = val;; + } + #pragma language=restore + #define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_CPSR() (__arm_rsr("CPSR")) + #define __get_mode() (__get_CPSR() & 0x1FU) + + #define __set_CPSR(VALUE) (__arm_wsr("CPSR", (VALUE))) + #define __set_mode(VALUE) (__arm_wsr("CPSR_c", (VALUE))) + + + #define __get_FPEXC() (__arm_rsr("FPEXC")) + #define __set_FPEXC(VALUE) (__arm_wsr("FPEXC", VALUE)) + + #define __get_CP(cp, op1, RT, CRn, CRm, op2) \ + ((RT) = __arm_rsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2)) + + #define __set_CP(cp, op1, RT, CRn, CRm, op2) \ + (__arm_wsr("p" # cp ":" # op1 ":c" # CRn ":c" # CRm ":" # op2, (RT))) + + #define __get_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) + + #define __set_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + + #include "cmsis_cp15.h" + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #define __SSAT __iar_builtin_SSAT + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #define __USAT __iar_builtin_USAT + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if !((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if !((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + #define __get_FPSCR() (0) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + __IAR_FT void __set_mode(uint32_t mode) + { + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); + } + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); + return(result); + } + + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + __IAR_FT uint32_t __get_FPEXC(void) + { + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); + #else + return(0); + #endif + } + + __IAR_FT void __set_FPEXC(uint32_t fpexc) + { + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U))) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); + #endif + } + + + #define __get_CP(cp, op1, Rt, CRn, CRm, op2) \ + __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) + #define __set_CP(cp, op1, Rt, CRn, CRm, op2) \ + __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) + #define __get_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) + #define __set_CP64(cp, op1, Rt, CRm) \ + __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + + #include "cmsis_cp15.h" + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + + +__IAR_FT uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %2 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : "r"(cpsr) : "memory" + ); + return result; +} + +__IAR_FT void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %2 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack), "r"(cpsr) : "memory" + ); +} + +#define __get_mode() (__get_CPSR() & 0x1FU) + +__STATIC_INLINE +void __FPU_Enable(void) +{ + __ASM volatile( + //Permit access to VFP/NEON, registers by modifying CPACR + " MRC p15,0,R1,c1,c0,2 \n" + " ORR R1,R1,#0x00F00000 \n" + " MCR p15,0,R1,c1,c0,2 \n" + + //Ensure that subsequent instructions occur in the context of VFP/NEON access permitted + " ISB \n" + + //Enable VFP/NEON + " VMRS R1,FPEXC \n" + " ORR R1,R1,#0x40000000 \n" + " VMSR FPEXC,R1 \n" + + //Initialise VFP/NEON registers to 0 + " MOV R2,#0 \n" + + //Initialise D16 registers to 0 + " VMOV D0, R2,R2 \n" + " VMOV D1, R2,R2 \n" + " VMOV D2, R2,R2 \n" + " VMOV D3, R2,R2 \n" + " VMOV D4, R2,R2 \n" + " VMOV D5, R2,R2 \n" + " VMOV D6, R2,R2 \n" + " VMOV D7, R2,R2 \n" + " VMOV D8, R2,R2 \n" + " VMOV D9, R2,R2 \n" + " VMOV D10,R2,R2 \n" + " VMOV D11,R2,R2 \n" + " VMOV D12,R2,R2 \n" + " VMOV D13,R2,R2 \n" + " VMOV D14,R2,R2 \n" + " VMOV D15,R2,R2 \n" + +#ifdef __ARM_ADVANCED_SIMD__ + //Initialise D32 registers to 0 + " VMOV D16,R2,R2 \n" + " VMOV D17,R2,R2 \n" + " VMOV D18,R2,R2 \n" + " VMOV D19,R2,R2 \n" + " VMOV D20,R2,R2 \n" + " VMOV D21,R2,R2 \n" + " VMOV D22,R2,R2 \n" + " VMOV D23,R2,R2 \n" + " VMOV D24,R2,R2 \n" + " VMOV D25,R2,R2 \n" + " VMOV D26,R2,R2 \n" + " VMOV D27,R2,R2 \n" + " VMOV D28,R2,R2 \n" + " VMOV D29,R2,R2 \n" + " VMOV D30,R2,R2 \n" + " VMOV D31,R2,R2 \n" +#endif + + //Initialise FPSCR to a known state + " VMRS R1,FPSCR \n" + " MOV32 R2,#0x00086060 \n" //Mask off all bits that do not have to be preserved. Non-preserved bits can/should be zero. + " AND R1,R1,R2 \n" + " VMSR FPSCR,R1 \n" + : : : "cc", "r1", "r2" + ); +} + + + +#undef __IAR_FT +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#endif /* __CMSIS_ICCARM_A_H__ */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h new file mode 100644 index 00000000000..7264fb9367f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2017-2020 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(A) Interrupt Controller API Header File + */ + +#ifndef IRQ_CTRL_H_ +#define IRQ_CTRL_H_ + +#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 + +#include + +#ifndef IRQHANDLER_T +#define IRQHANDLER_T +/// Interrupt handler data type +typedef void (*IRQHandler_t) (void); +#endif + +#ifndef IRQN_ID_T +#define IRQN_ID_T +/// Interrupt ID number data type +typedef int32_t IRQn_ID_t; +#endif + +/* Interrupt mode bit-masks */ +#define IRQ_MODE_TRIG_Pos (0U) +#define IRQ_MODE_TRIG_Msk (0x07UL /*<< IRQ_MODE_TRIG_Pos*/) +#define IRQ_MODE_TRIG_LEVEL (0x00UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: level triggered interrupt +#define IRQ_MODE_TRIG_LEVEL_LOW (0x01UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: low level triggered interrupt +#define IRQ_MODE_TRIG_LEVEL_HIGH (0x02UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: high level triggered interrupt +#define IRQ_MODE_TRIG_EDGE (0x04UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_RISING (0x05UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: rising edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_FALLING (0x06UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: falling edge triggered interrupt +#define IRQ_MODE_TRIG_EDGE_BOTH (0x07UL /*<< IRQ_MODE_TRIG_Pos*/) ///< Trigger: rising and falling edge triggered interrupt + +#define IRQ_MODE_TYPE_Pos (3U) +#define IRQ_MODE_TYPE_Msk (0x01UL << IRQ_MODE_TYPE_Pos) +#define IRQ_MODE_TYPE_IRQ (0x00UL << IRQ_MODE_TYPE_Pos) ///< Type: interrupt source triggers CPU IRQ line +#define IRQ_MODE_TYPE_FIQ (0x01UL << IRQ_MODE_TYPE_Pos) ///< Type: interrupt source triggers CPU FIQ line + +#define IRQ_MODE_DOMAIN_Pos (4U) +#define IRQ_MODE_DOMAIN_Msk (0x01UL << IRQ_MODE_DOMAIN_Pos) +#define IRQ_MODE_DOMAIN_NONSECURE (0x00UL << IRQ_MODE_DOMAIN_Pos) ///< Domain: interrupt is targeting non-secure domain +#define IRQ_MODE_DOMAIN_SECURE (0x01UL << IRQ_MODE_DOMAIN_Pos) ///< Domain: interrupt is targeting secure domain + +#define IRQ_MODE_CPU_Pos (5U) +#define IRQ_MODE_CPU_Msk (0xFFUL << IRQ_MODE_CPU_Pos) +#define IRQ_MODE_CPU_ALL (0x00UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets all CPUs +#define IRQ_MODE_CPU_0 (0x01UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 0 +#define IRQ_MODE_CPU_1 (0x02UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 1 +#define IRQ_MODE_CPU_2 (0x04UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 2 +#define IRQ_MODE_CPU_3 (0x08UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 3 +#define IRQ_MODE_CPU_4 (0x10UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 4 +#define IRQ_MODE_CPU_5 (0x20UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 5 +#define IRQ_MODE_CPU_6 (0x40UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 6 +#define IRQ_MODE_CPU_7 (0x80UL << IRQ_MODE_CPU_Pos) ///< CPU: interrupt targets CPU 7 + +// Encoding in some early GIC implementations +#define IRQ_MODE_MODEL_Pos (13U) +#define IRQ_MODE_MODEL_Msk (0x1UL << IRQ_MODE_MODEL_Pos) +#define IRQ_MODE_MODEL_NN (0x0UL << IRQ_MODE_MODEL_Pos) ///< Corresponding interrupt is handled using the N-N model +#define IRQ_MODE_MODEL_1N (0x1UL << IRQ_MODE_MODEL_Pos) ///< Corresponding interrupt is handled using the 1-N model + +#define IRQ_MODE_ERROR (0x80000000UL) ///< Bit indicating mode value error + +/* Interrupt priority bit-masks */ +#define IRQ_PRIORITY_Msk (0x0000FFFFUL) ///< Interrupt priority value bit-mask +#define IRQ_PRIORITY_ERROR (0x80000000UL) ///< Bit indicating priority value error + +/// Initialize interrupt controller. +/// \return 0 on success, -1 on error. +int32_t IRQ_Initialize (void); + +/// Register interrupt handler. +/// \param[in] irqn interrupt ID number +/// \param[in] handler interrupt handler function address +/// \return 0 on success, -1 on error. +int32_t IRQ_SetHandler (IRQn_ID_t irqn, IRQHandler_t handler); + +/// Get the registered interrupt handler. +/// \param[in] irqn interrupt ID number +/// \return registered interrupt handler function address. +IRQHandler_t IRQ_GetHandler (IRQn_ID_t irqn); + +/// Enable interrupt. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_Enable (IRQn_ID_t irqn); + +/// Disable interrupt. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_Disable (IRQn_ID_t irqn); + +/// Get interrupt enable state. +/// \param[in] irqn interrupt ID number +/// \return 0 - interrupt is disabled, 1 - interrupt is enabled. +uint32_t IRQ_GetEnableState (IRQn_ID_t irqn); + +/// Configure interrupt request mode. +/// \param[in] irqn interrupt ID number +/// \param[in] mode mode configuration +/// \return 0 on success, -1 on error. +int32_t IRQ_SetMode (IRQn_ID_t irqn, uint32_t mode); + +/// Get interrupt mode configuration. +/// \param[in] irqn interrupt ID number +/// \return current interrupt mode configuration with optional IRQ_MODE_ERROR bit set. +uint32_t IRQ_GetMode (IRQn_ID_t irqn); + +/// Get ID number of current interrupt request (IRQ). +/// \return interrupt ID number. +IRQn_ID_t IRQ_GetActiveIRQ (void); + +/// Get ID number of current fast interrupt request (FIQ). +/// \return interrupt ID number. +IRQn_ID_t IRQ_GetActiveFIQ (void); + +/// Signal end of interrupt processing. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_EndOfInterrupt (IRQn_ID_t irqn); + +/// Set interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPending (IRQn_ID_t irqn); + +/// Get interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 - interrupt is not pending, 1 - interrupt is pending. +uint32_t IRQ_GetPending (IRQn_ID_t irqn); + +/// Clear interrupt pending flag. +/// \param[in] irqn interrupt ID number +/// \return 0 on success, -1 on error. +int32_t IRQ_ClearPending (IRQn_ID_t irqn); + +/// Set interrupt priority value. +/// \param[in] irqn interrupt ID number +/// \param[in] priority interrupt priority value +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriority (IRQn_ID_t irqn, uint32_t priority); + +/// Get interrupt priority. +/// \param[in] irqn interrupt ID number +/// \return current interrupt priority value with optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriority (IRQn_ID_t irqn); + +/// Set priority masking threshold. +/// \param[in] priority priority masking threshold value +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriorityMask (uint32_t priority); + +/// Get priority masking threshold +/// \return current priority masking threshold value with optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriorityMask (void); + +/// Set priority grouping field split point +/// \param[in] bits number of MSB bits included in the group priority field comparison +/// \return 0 on success, -1 on error. +int32_t IRQ_SetPriorityGroupBits (uint32_t bits); + +/// Get priority grouping field split point +/// \return current number of MSB bits included in the group priority field comparison with +/// optional IRQ_PRIORITY_ERROR bit set. +uint32_t IRQ_GetPriorityGroupBits (void); + +#endif // IRQ_CTRL_H_ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h new file mode 100644 index 00000000000..446d21a918f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h @@ -0,0 +1,707 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".bss.noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#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 No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \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() __wfi() + + +/** + \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. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \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() __isb(0xF) + + +/** + \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() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \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 + */ +#define __REV(value) __rev(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 + */ +#define __REV16(value) __rev16(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 + */ +#define __REVSH(value) __revsh(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 + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \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. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#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 + */ +#define __RBIT(value) __rbit(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 + */ +#define __CLZ(value) __clz(value) + + +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/* __ARM_FEATURE_SAT is wrong for Armv8-M Baseline devices */ +/** + \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(value, sat) __ssat(value, sat) + + +/** + \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(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 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 + */ +__STATIC_FORCEINLINE 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 + */ +__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); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \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) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \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 +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \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) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \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) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \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 uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \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 uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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 __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \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 __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 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) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \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 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 + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \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 + + +/** + \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 + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* 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. + */ +#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 + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} +#endif + + + +/** + \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 __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "./a-profile/cmsis_armclang_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "./r-profile/cmsis_armclang_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "./m-profile/cmsis_armclang_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h new file mode 100644 index 00000000000..872e16c838a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h @@ -0,0 +1,708 @@ +/**************************************************************************//** + * @file cmsis_clang.h + * @brief CMSIS compiler LLVM/Clang header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_CLANG_H +#define __CMSIS_CLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#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 No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \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() __wfi() + + +/** + \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. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \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() __isb(0xF) + + +/** + \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() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \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 + */ +#define __REV(value) __rev(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 + */ +#define __REV16(value) __rev16(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 + */ +#define __REVSH(value) __revsh(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 + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \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. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#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 + */ +#define __RBIT(value) __rbit(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 + */ +#define __CLZ(value) __clz(value) + + +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/* __ARM_FEATURE_SAT is wrong for Armv8-M Baseline devices */ +/** + \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(value, sat) __ssat(value, sat) + + +/** + \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(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 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 + */ +__STATIC_FORCEINLINE 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 + */ +__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); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \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) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \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 +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \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) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \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) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \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 uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \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 uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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 __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \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 __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 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) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \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 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 + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \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 + + +/** + \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 + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* 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. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} +#endif + + + +/** + \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 __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "./a-profile/cmsis_clang_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "./r-profile/cmsis_clang_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "./m-profile/cmsis_clang_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_CLANG_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h new file mode 100644 index 00000000000..cf3f5b027dd --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2009-2023 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. + */ + +/* + * CMSIS Compiler Generic Header File + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler above 6.10.1 (armclang) + */ +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) + #include "cmsis_armclang.h" + +/* + * TI Arm Clang Compiler (tiarmclang) + */ +#elif defined (__ti__) + #include "cmsis_tiarmclang.h" + + +/* + * LLVM/Clang Compiler + */ +#elif defined ( __clang__ ) + #include "cmsis_clang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #if __ARM_ARCH_PROFILE == 'A' + #include "a-profile/cmsis_iccarm_a.h" + #elif __ARM_ARCH_PROFILE == 'R' + #include "r-profile/cmsis_iccarm_r.h" + #elif __ARM_ARCH_PROFILE == 'M' + #include "m-profile/cmsis_iccarm_m.h" + #else + #error "Unknown Arm architecture profile" + #endif + + +/* + * TI Arm Compiler (armcl) + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #define __RESTRICT __restrict + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + #ifndef __COMPILER_BARRIER + #warning No compiler specific solution for __COMPILER_BARRIER. __COMPILER_BARRIER is ignored. + #define __COMPILER_BARRIER() (void)0 + #endif + #ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) + #endif + #ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) + #endif + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h new file mode 100644 index 00000000000..4771466f065 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h @@ -0,0 +1,1006 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V6.0.0 + * @date 27. July 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +#pragma GCC system_header /* treat file as system include file */ + +#include + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef CMSIS_DEPRECATED + #define CMSIS_DEPRECATED __attribute__((deprecated)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#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 No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + + +/** + \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") + + +/** + \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. + */ +#define __WFE() __ASM volatile ("wfe":::"memory") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \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 __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \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 __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \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 __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \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 __REV(uint32_t value) +{ + return __builtin_bswap32(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 __REV16(uint32_t value) +{ + uint32_t result; + + __ASM ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return (result); +} + + +/** + \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 int16_t __REVSH(int16_t value) +{ + return (int16_t)__builtin_bswap16(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 __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \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. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#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 __RBIT(uint32_t value) +{ + uint32_t result; + +#if (__ARM_ARCH_ISA_THUMB >= 2) + __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); +} + + +/** + \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 uint8_t __CLZ(uint32_t value) +{ + /* 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); +} + + +#if (__ARM_FEATURE_SAT >= 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 + */ +#define __SSAT(value, sat) __ssat(value, sat) + + +/** + \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(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 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 + */ +__STATIC_FORCEINLINE 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 + */ +__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); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + + +/** + \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 uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \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 __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \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 uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \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 __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return (result); +} + + +/** + \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 uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return (result); +} +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \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 uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \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 uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} + + +/** + \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 __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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 __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \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 __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \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; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \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 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 __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return (result); +} + + +/** + \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 uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); + return (result); +} + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* 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. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting special-purpose register PRIMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + +#if (__ARM_ARCH_ISA_THUMB >= 2) + /** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ + __STATIC_FORCEINLINE void __enable_fault_irq(void) + { + __ASM volatile ("cpsie f" : : : "memory"); + } + + + /** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ + __STATIC_FORCEINLINE void __disable_fault_irq(void) + { + __ASM volatile ("cpsid f" : : : "memory"); + } +#endif + + +/** + \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 __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + #define __SADD8 __sadd8 + #define __QADD8 __qadd8 + #define __SHADD8 __shadd8 + #define __UADD8 __uadd8 + #define __UQADD8 __uqadd8 + #define __UHADD8 __uhadd8 + #define __SSUB8 __ssub8 + #define __QSUB8 __qsub8 + #define __SHSUB8 __shsub8 + #define __USUB8 __usub8 + #define __UQSUB8 __uqsub8 + #define __UHSUB8 __uhsub8 + #define __SADD16 __sadd16 + #define __QADD16 __qadd16 + #define __SHADD16 __shadd16 + #define __UADD16 __uadd16 + #define __UQADD16 __uqadd16 + #define __UHADD16 __uhadd16 + #define __SSUB16 __ssub16 + #define __QSUB16 __qsub16 + #define __SHSUB16 __shsub16 + #define __USUB16 __usub16 + #define __UQSUB16 __uqsub16 + #define __UHSUB16 __uhsub16 + #define __SASX __sasx + #define __QASX __qasx + #define __SHASX __shasx + #define __UASX __uasx + #define __UQASX __uqasx + #define __UHASX __uhasx + #define __SSAX __ssax + #define __QSAX __qsax + #define __SHSAX __shsax + #define __USAX __usax + #define __UQSAX __uqsax + #define __UHSAX __uhsax + #define __USAD8 __usad8 + #define __USADA8 __usada8 + #define __SSAT16 __ssat16 + #define __USAT16 __usat16 + #define __UXTB16 __uxtb16 + #define __UXTAB16 __uxtab16 + #define __SXTB16 __sxtb16 + #define __SXTAB16 __sxtab16 + #define __SMUAD __smuad + #define __SMUADX __smuadx + #define __SMLAD __smlad + #define __SMLADX __smladx + #define __SMLALD __smlald + #define __SMLALDX __smlaldx + #define __SMUSD __smusd + #define __SMUSDX __smusdx + #define __SMLSD __smlsd + #define __SMLSDX __smlsdx + #define __SMLSLD __smlsld + #define __SMLSLDX __smlsldx + #define __SEL __sel + #define __QADD __qadd + #define __QSUB __qsub + + #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) ); \ + __RES; \ + }) + + #define __PKHTB(ARG1,ARG2,ARG3) \ + __extension__ \ + ({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + + __STATIC_FORCEINLINE uint32_t __SXTB16_RORn(uint32_t op1, uint32_t rotate) + { + uint32_t result; + 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; + } + + __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 int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) + { + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); + } +#endif /* (__ARM_FEATURE_DSP == 1) */ +/** @} end of group CMSIS_SIMD_intrinsics */ + +// Include the profile specific settings: +#if __ARM_ARCH_PROFILE == 'A' + #include "a-profile/cmsis_gcc_a.h" +#elif __ARM_ARCH_PROFILE == 'R' + #include "r-profile/cmsis_gcc_r.h" +#elif __ARM_ARCH_PROFILE == 'M' + #include "m-profile/cmsis_gcc_m.h" +#else + #error "Unknown Arm architecture profile" +#endif + +#endif /* __CMSIS_GCC_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h new file mode 100644 index 00000000000..849a8a4a15d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009-2023 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. + */ + +/* + * CMSIS Core Version Definitions + */ + +#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 __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS-Core(M) Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 6U) /*!< \brief [31:16] CMSIS-Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< \brief [15:0] CMSIS-Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< \brief CMSIS Core(M) version number */ + +/* CMSIS-Core(A) Version definitions */ +#define __CA_CMSIS_VERSION_MAIN ( 6U) /*!< \brief [31:16] CMSIS-Core(A) main version */ +#define __CA_CMSIS_VERSION_SUB ( 1U) /*!< \brief [15:0] CMSIS-Core(A) sub version */ +#define __CA_CMSIS_VERSION ((__CA_CMSIS_VERSION_MAIN << 16U) | \ + __CA_CMSIS_VERSION_SUB ) /*!< \brief CMSIS-Core(A) version number */ + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h new file mode 100644 index 00000000000..df5a95d7148 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h @@ -0,0 +1,3000 @@ +/* + * Copyright (c) 2009-2023 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. + */ + +/* + * CMSIS Cortex-A Core Peripheral Access Layer Header File + */ + +#ifndef __CORE_CA_H_GENERIC +#define __CORE_CA_H_GENERIC + +#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 + +#ifdef __cplusplus + extern "C" { +#endif + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ + +#include "cmsis_version.h" + +/* CMSIS CA definitions */ + +#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 + +#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 + +#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 + +#elif defined ( __TMS470__ ) + #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 ( __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 + +#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 +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CA_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CA_H_DEPENDANT +#define __CORE_CA_H_DEPENDANT + +#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 + +#ifdef __cplusplus + extern "C" { +#endif + + /* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CA_REV + #define __CA_REV 0x0000U /*!< \brief Contains the core revision for a Cortex-A class device */ + #warning "__CA_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 __GIC_PRESENT + #define __GIC_PRESENT 1U + #warning "__GIC_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __TIM_PRESENT + #define __TIM_PRESENT 1U + #warning "__TIM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __L2C_PRESENT + #define __L2C_PRESENT 0U + #warning "__L2C_PRESENT not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +#ifdef __cplusplus + #define __I volatile /*!< \brief Defines 'read only' permissions */ +#else + #define __I volatile const /*!< \brief Defines 'read only' permissions */ +#endif +#define __O volatile /*!< \brief Defines 'write only' permissions */ +#define __IO volatile /*!< \brief Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*!< \brief Defines 'read only' structure member permissions */ +#define __OM volatile /*!< \brief Defines 'write only' structure member permissions */ +#define __IOM volatile /*!< \brief Defines 'read / write' structure member permissions */ +#define RESERVED(N, T) T RESERVED##N; // placeholder struct members used for "reserved" areas + + /******************************************************************************* + * Register Abstraction + Core Register contain: + - CPSR + - CP15 Registers + - L2C-310 Cache Controller + - Generic Interrupt Controller Distributor + - Generic Interrupt Controller Interface + ******************************************************************************/ + +/* Core Register CPSR */ +typedef union +{ + struct + { + uint32_t M:5; /*!< \brief bit: 0.. 4 Mode field */ + uint32_t T:1; /*!< \brief bit: 5 Thumb execution state bit */ + uint32_t F:1; /*!< \brief bit: 6 FIQ mask bit */ + uint32_t I:1; /*!< \brief bit: 7 IRQ mask bit */ + uint32_t A:1; /*!< \brief bit: 8 Asynchronous abort mask bit */ + uint32_t E:1; /*!< \brief bit: 9 Endianness execution state bit */ + uint32_t IT1:6; /*!< \brief bit: 10..15 If-Then execution state bits 2-7 */ + uint32_t GE:4; /*!< \brief bit: 16..19 Greater than or Equal flags */ + RESERVED(0:4, uint32_t) + uint32_t J:1; /*!< \brief bit: 24 Jazelle bit */ + uint32_t IT0:2; /*!< \brief bit: 25..26 If-Then execution state bits 0-1 */ + uint32_t Q:1; /*!< \brief bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< \brief bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< \brief bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< \brief bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< \brief bit: 31 Negative condition code flag */ + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CPSR_Type; + + + +/* CPSR Register Definitions */ +#define CPSR_N_Pos 31U /*!< \brief CPSR: N Position */ +#define CPSR_N_Msk (1UL << CPSR_N_Pos) /*!< \brief CPSR: N Mask */ + +#define CPSR_Z_Pos 30U /*!< \brief CPSR: Z Position */ +#define CPSR_Z_Msk (1UL << CPSR_Z_Pos) /*!< \brief CPSR: Z Mask */ + +#define CPSR_C_Pos 29U /*!< \brief CPSR: C Position */ +#define CPSR_C_Msk (1UL << CPSR_C_Pos) /*!< \brief CPSR: C Mask */ + +#define CPSR_V_Pos 28U /*!< \brief CPSR: V Position */ +#define CPSR_V_Msk (1UL << CPSR_V_Pos) /*!< \brief CPSR: V Mask */ + +#define CPSR_Q_Pos 27U /*!< \brief CPSR: Q Position */ +#define CPSR_Q_Msk (1UL << CPSR_Q_Pos) /*!< \brief CPSR: Q Mask */ + +#define CPSR_IT0_Pos 25U /*!< \brief CPSR: IT0 Position */ +#define CPSR_IT0_Msk (3UL << CPSR_IT0_Pos) /*!< \brief CPSR: IT0 Mask */ + +#define CPSR_J_Pos 24U /*!< \brief CPSR: J Position */ +#define CPSR_J_Msk (1UL << CPSR_J_Pos) /*!< \brief CPSR: J Mask */ + +#define CPSR_GE_Pos 16U /*!< \brief CPSR: GE Position */ +#define CPSR_GE_Msk (0xFUL << CPSR_GE_Pos) /*!< \brief CPSR: GE Mask */ + +#define CPSR_IT1_Pos 10U /*!< \brief CPSR: IT1 Position */ +#define CPSR_IT1_Msk (0x3FUL << CPSR_IT1_Pos) /*!< \brief CPSR: IT1 Mask */ + +#define CPSR_E_Pos 9U /*!< \brief CPSR: E Position */ +#define CPSR_E_Msk (1UL << CPSR_E_Pos) /*!< \brief CPSR: E Mask */ + +#define CPSR_A_Pos 8U /*!< \brief CPSR: A Position */ +#define CPSR_A_Msk (1UL << CPSR_A_Pos) /*!< \brief CPSR: A Mask */ + +#define CPSR_I_Pos 7U /*!< \brief CPSR: I Position */ +#define CPSR_I_Msk (1UL << CPSR_I_Pos) /*!< \brief CPSR: I Mask */ + +#define CPSR_F_Pos 6U /*!< \brief CPSR: F Position */ +#define CPSR_F_Msk (1UL << CPSR_F_Pos) /*!< \brief CPSR: F Mask */ + +#define CPSR_T_Pos 5U /*!< \brief CPSR: T Position */ +#define CPSR_T_Msk (1UL << CPSR_T_Pos) /*!< \brief CPSR: T Mask */ + +#define CPSR_M_Pos 0U /*!< \brief CPSR: M Position */ +#define CPSR_M_Msk (0x1FUL << CPSR_M_Pos) /*!< \brief CPSR: M Mask */ + +#define CPSR_M_USR 0x10U /*!< \brief CPSR: M User mode (PL0) */ +#define CPSR_M_FIQ 0x11U /*!< \brief CPSR: M Fast Interrupt mode (PL1) */ +#define CPSR_M_IRQ 0x12U /*!< \brief CPSR: M Interrupt mode (PL1) */ +#define CPSR_M_SVC 0x13U /*!< \brief CPSR: M Supervisor mode (PL1) */ +#define CPSR_M_MON 0x16U /*!< \brief CPSR: M Monitor mode (PL1) */ +#define CPSR_M_ABT 0x17U /*!< \brief CPSR: M Abort mode (PL1) */ +#define CPSR_M_HYP 0x1AU /*!< \brief CPSR: M Hypervisor mode (PL2) */ +#define CPSR_M_UND 0x1BU /*!< \brief CPSR: M Undefined mode (PL1) */ +#define CPSR_M_SYS 0x1FU /*!< \brief CPSR: M System mode (PL1) */ + +/* CP15 Register SCTLR */ +typedef union +{ + struct + { + uint32_t M:1; /*!< \brief bit: 0 MMU enable */ + uint32_t A:1; /*!< \brief bit: 1 Alignment check enable */ + uint32_t C:1; /*!< \brief bit: 2 Cache enable */ + RESERVED(0:2, uint32_t) + uint32_t CP15BEN:1; /*!< \brief bit: 5 CP15 barrier enable */ + RESERVED(1:1, uint32_t) + uint32_t B:1; /*!< \brief bit: 7 Endianness model */ + RESERVED(2:2, uint32_t) + uint32_t SW:1; /*!< \brief bit: 10 SWP and SWPB enable */ + uint32_t Z:1; /*!< \brief bit: 11 Branch prediction enable */ + uint32_t I:1; /*!< \brief bit: 12 Instruction cache enable */ + uint32_t V:1; /*!< \brief bit: 13 Vectors bit */ + uint32_t RR:1; /*!< \brief bit: 14 Round Robin select */ + RESERVED(3:2, uint32_t) + uint32_t HA:1; /*!< \brief bit: 17 Hardware Access flag enable */ + RESERVED(4:1, uint32_t) + uint32_t WXN:1; /*!< \brief bit: 19 Write permission implies XN */ + uint32_t UWXN:1; /*!< \brief bit: 20 Unprivileged write permission implies PL1 XN */ + uint32_t FI:1; /*!< \brief bit: 21 Fast interrupts configuration enable */ + uint32_t U:1; /*!< \brief bit: 22 Alignment model */ + RESERVED(5:1, uint32_t) + uint32_t VE:1; /*!< \brief bit: 24 Interrupt Vectors Enable */ + uint32_t EE:1; /*!< \brief bit: 25 Exception Endianness */ + RESERVED(6:1, uint32_t) + uint32_t NMFI:1; /*!< \brief bit: 27 Non-maskable FIQ (NMFI) support */ + uint32_t TRE:1; /*!< \brief bit: 28 TEX remap enable. */ + uint32_t AFE:1; /*!< \brief bit: 29 Access flag enable */ + uint32_t TE:1; /*!< \brief bit: 30 Thumb Exception enable */ + RESERVED(7:1, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} SCTLR_Type; + +#define SCTLR_TE_Pos 30U /*!< \brief SCTLR: TE Position */ +#define SCTLR_TE_Msk (1UL << SCTLR_TE_Pos) /*!< \brief SCTLR: TE Mask */ + +#define SCTLR_AFE_Pos 29U /*!< \brief SCTLR: AFE Position */ +#define SCTLR_AFE_Msk (1UL << SCTLR_AFE_Pos) /*!< \brief SCTLR: AFE Mask */ + +#define SCTLR_TRE_Pos 28U /*!< \brief SCTLR: TRE Position */ +#define SCTLR_TRE_Msk (1UL << SCTLR_TRE_Pos) /*!< \brief SCTLR: TRE Mask */ + +#define SCTLR_NMFI_Pos 27U /*!< \brief SCTLR: NMFI Position */ +#define SCTLR_NMFI_Msk (1UL << SCTLR_NMFI_Pos) /*!< \brief SCTLR: NMFI Mask */ + +#define SCTLR_EE_Pos 25U /*!< \brief SCTLR: EE Position */ +#define SCTLR_EE_Msk (1UL << SCTLR_EE_Pos) /*!< \brief SCTLR: EE Mask */ + +#define SCTLR_VE_Pos 24U /*!< \brief SCTLR: VE Position */ +#define SCTLR_VE_Msk (1UL << SCTLR_VE_Pos) /*!< \brief SCTLR: VE Mask */ + +#define SCTLR_U_Pos 22U /*!< \brief SCTLR: U Position */ +#define SCTLR_U_Msk (1UL << SCTLR_U_Pos) /*!< \brief SCTLR: U Mask */ + +#define SCTLR_FI_Pos 21U /*!< \brief SCTLR: FI Position */ +#define SCTLR_FI_Msk (1UL << SCTLR_FI_Pos) /*!< \brief SCTLR: FI Mask */ + +#define SCTLR_UWXN_Pos 20U /*!< \brief SCTLR: UWXN Position */ +#define SCTLR_UWXN_Msk (1UL << SCTLR_UWXN_Pos) /*!< \brief SCTLR: UWXN Mask */ + +#define SCTLR_WXN_Pos 19U /*!< \brief SCTLR: WXN Position */ +#define SCTLR_WXN_Msk (1UL << SCTLR_WXN_Pos) /*!< \brief SCTLR: WXN Mask */ + +#define SCTLR_HA_Pos 17U /*!< \brief SCTLR: HA Position */ +#define SCTLR_HA_Msk (1UL << SCTLR_HA_Pos) /*!< \brief SCTLR: HA Mask */ + +#define SCTLR_RR_Pos 14U /*!< \brief SCTLR: RR Position */ +#define SCTLR_RR_Msk (1UL << SCTLR_RR_Pos) /*!< \brief SCTLR: RR Mask */ + +#define SCTLR_V_Pos 13U /*!< \brief SCTLR: V Position */ +#define SCTLR_V_Msk (1UL << SCTLR_V_Pos) /*!< \brief SCTLR: V Mask */ + +#define SCTLR_I_Pos 12U /*!< \brief SCTLR: I Position */ +#define SCTLR_I_Msk (1UL << SCTLR_I_Pos) /*!< \brief SCTLR: I Mask */ + +#define SCTLR_Z_Pos 11U /*!< \brief SCTLR: Z Position */ +#define SCTLR_Z_Msk (1UL << SCTLR_Z_Pos) /*!< \brief SCTLR: Z Mask */ + +#define SCTLR_SW_Pos 10U /*!< \brief SCTLR: SW Position */ +#define SCTLR_SW_Msk (1UL << SCTLR_SW_Pos) /*!< \brief SCTLR: SW Mask */ + +#define SCTLR_B_Pos 7U /*!< \brief SCTLR: B Position */ +#define SCTLR_B_Msk (1UL << SCTLR_B_Pos) /*!< \brief SCTLR: B Mask */ + +#define SCTLR_CP15BEN_Pos 5U /*!< \brief SCTLR: CP15BEN Position */ +#define SCTLR_CP15BEN_Msk (1UL << SCTLR_CP15BEN_Pos) /*!< \brief SCTLR: CP15BEN Mask */ + +#define SCTLR_C_Pos 2U /*!< \brief SCTLR: C Position */ +#define SCTLR_C_Msk (1UL << SCTLR_C_Pos) /*!< \brief SCTLR: C Mask */ + +#define SCTLR_A_Pos 1U /*!< \brief SCTLR: A Position */ +#define SCTLR_A_Msk (1UL << SCTLR_A_Pos) /*!< \brief SCTLR: A Mask */ + +#define SCTLR_M_Pos 0U /*!< \brief SCTLR: M Position */ +#define SCTLR_M_Msk (1UL << SCTLR_M_Pos) /*!< \brief SCTLR: M Mask */ + +/* CP15 Register ACTLR */ +typedef union +{ +#if __CORTEX_A == 5 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A5 */ + struct + { + uint32_t FW:1; /*!< \brief bit: 0 Cache and TLB maintenance broadcast */ + RESERVED(0:5, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + uint32_t EXCL:1; /*!< \brief bit: 7 Exclusive L1/L2 cache control */ + RESERVED(1:2, uint32_t) + uint32_t DODMBS:1; /*!< \brief bit: 10 Disable optimized data memory barrier behavior */ + uint32_t DWBST:1; /*!< \brief bit: 11 AXI data write bursts to Normal memory */ + uint32_t RADIS:1; /*!< \brief bit: 12 L1 Data Cache read-allocate mode disable */ + uint32_t L1PCTL:2; /*!< \brief bit:13..14 L1 Data prefetch control */ + uint32_t BP:2; /*!< \brief bit:16..15 Branch prediction policy */ + uint32_t RSDIS:1; /*!< \brief bit: 17 Disable return stack operation */ + uint32_t BTDIS:1; /*!< \brief bit: 18 Disable indirect Branch Target Address Cache (BTAC) */ + RESERVED(3:9, uint32_t) + uint32_t DBDI:1; /*!< \brief bit: 28 Disable branch dual issue */ + RESERVED(7:3, uint32_t) + } b; +#endif +#if __CORTEX_A == 7 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A7 */ + struct + { + RESERVED(0:6, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + RESERVED(1:3, uint32_t) + uint32_t DODMBS:1; /*!< \brief bit: 10 Disable optimized data memory barrier behavior */ + uint32_t L2RADIS:1; /*!< \brief bit: 11 L2 Data Cache read-allocate mode disable */ + uint32_t L1RADIS:1; /*!< \brief bit: 12 L1 Data Cache read-allocate mode disable */ + uint32_t L1PCTL:2; /*!< \brief bit:13..14 L1 Data prefetch control */ + uint32_t DDVM:1; /*!< \brief bit: 15 Disable Distributed Virtual Memory (DVM) transactions */ + RESERVED(3:12, uint32_t) + uint32_t DDI:1; /*!< \brief bit: 28 Disable dual issue */ + RESERVED(7:3, uint32_t) + } b; +#endif +#if __CORTEX_A == 9 || defined(DOXYGEN) + /** \brief Structure used for bit access on Cortex-A9 */ + struct + { + uint32_t FW:1; /*!< \brief bit: 0 Cache and TLB maintenance broadcast */ + RESERVED(0:1, uint32_t) + uint32_t L1PE:1; /*!< \brief bit: 2 Dside prefetch */ + uint32_t WFLZM:1; /*!< \brief bit: 3 Cache and TLB maintenance broadcast */ + RESERVED(1:2, uint32_t) + uint32_t SMP:1; /*!< \brief bit: 6 Enables coherent requests to the processor */ + uint32_t EXCL:1; /*!< \brief bit: 7 Exclusive L1/L2 cache control */ + uint32_t AOW:1; /*!< \brief bit: 8 Enable allocation in one cache way only */ + uint32_t PARITY:1; /*!< \brief bit: 9 Support for parity checking, if implemented */ + RESERVED(7:22, uint32_t) + } b; +#endif + uint32_t w; /*!< \brief Type used for word access */ +} ACTLR_Type; + +#define ACTLR_DDI_Pos 28U /*!< \brief ACTLR: DDI Position */ +#define ACTLR_DDI_Msk (1UL << ACTLR_DDI_Pos) /*!< \brief ACTLR: DDI Mask */ + +#define ACTLR_DBDI_Pos 28U /*!< \brief ACTLR: DBDI Position */ +#define ACTLR_DBDI_Msk (1UL << ACTLR_DBDI_Pos) /*!< \brief ACTLR: DBDI Mask */ + +#define ACTLR_BTDIS_Pos 18U /*!< \brief ACTLR: BTDIS Position */ +#define ACTLR_BTDIS_Msk (1UL << ACTLR_BTDIS_Pos) /*!< \brief ACTLR: BTDIS Mask */ + +#define ACTLR_RSDIS_Pos 17U /*!< \brief ACTLR: RSDIS Position */ +#define ACTLR_RSDIS_Msk (1UL << ACTLR_RSDIS_Pos) /*!< \brief ACTLR: RSDIS Mask */ + +#define ACTLR_BP_Pos 15U /*!< \brief ACTLR: BP Position */ +#define ACTLR_BP_Msk (3UL << ACTLR_BP_Pos) /*!< \brief ACTLR: BP Mask */ + +#define ACTLR_DDVM_Pos 15U /*!< \brief ACTLR: DDVM Position */ +#define ACTLR_DDVM_Msk (1UL << ACTLR_DDVM_Pos) /*!< \brief ACTLR: DDVM Mask */ + +#define ACTLR_L1PCTL_Pos 13U /*!< \brief ACTLR: L1PCTL Position */ +#define ACTLR_L1PCTL_Msk (3UL << ACTLR_L1PCTL_Pos) /*!< \brief ACTLR: L1PCTL Mask */ + +#define ACTLR_RADIS_Pos 12U /*!< \brief ACTLR: RADIS Position */ +#define ACTLR_RADIS_Msk (1UL << ACTLR_RADIS_Pos) /*!< \brief ACTLR: RADIS Mask */ + +#define ACTLR_L1RADIS_Pos 12U /*!< \brief ACTLR: L1RADIS Position */ +#define ACTLR_L1RADIS_Msk (1UL << ACTLR_L1RADIS_Pos) /*!< \brief ACTLR: L1RADIS Mask */ + +#define ACTLR_DWBST_Pos 11U /*!< \brief ACTLR: DWBST Position */ +#define ACTLR_DWBST_Msk (1UL << ACTLR_DWBST_Pos) /*!< \brief ACTLR: DWBST Mask */ + +#define ACTLR_L2RADIS_Pos 11U /*!< \brief ACTLR: L2RADIS Position */ +#define ACTLR_L2RADIS_Msk (1UL << ACTLR_L2RADIS_Pos) /*!< \brief ACTLR: L2RADIS Mask */ + +#define ACTLR_DODMBS_Pos 10U /*!< \brief ACTLR: DODMBS Position */ +#define ACTLR_DODMBS_Msk (1UL << ACTLR_DODMBS_Pos) /*!< \brief ACTLR: DODMBS Mask */ + +#define ACTLR_PARITY_Pos 9U /*!< \brief ACTLR: PARITY Position */ +#define ACTLR_PARITY_Msk (1UL << ACTLR_PARITY_Pos) /*!< \brief ACTLR: PARITY Mask */ + +#define ACTLR_AOW_Pos 8U /*!< \brief ACTLR: AOW Position */ +#define ACTLR_AOW_Msk (1UL << ACTLR_AOW_Pos) /*!< \brief ACTLR: AOW Mask */ + +#define ACTLR_EXCL_Pos 7U /*!< \brief ACTLR: EXCL Position */ +#define ACTLR_EXCL_Msk (1UL << ACTLR_EXCL_Pos) /*!< \brief ACTLR: EXCL Mask */ + +#define ACTLR_SMP_Pos 6U /*!< \brief ACTLR: SMP Position */ +#define ACTLR_SMP_Msk (1UL << ACTLR_SMP_Pos) /*!< \brief ACTLR: SMP Mask */ + +#define ACTLR_WFLZM_Pos 3U /*!< \brief ACTLR: WFLZM Position */ +#define ACTLR_WFLZM_Msk (1UL << ACTLR_WFLZM_Pos) /*!< \brief ACTLR: WFLZM Mask */ + +#define ACTLR_L1PE_Pos 2U /*!< \brief ACTLR: L1PE Position */ +#define ACTLR_L1PE_Msk (1UL << ACTLR_L1PE_Pos) /*!< \brief ACTLR: L1PE Mask */ + +#define ACTLR_FW_Pos 0U /*!< \brief ACTLR: FW Position */ +#define ACTLR_FW_Msk (1UL << ACTLR_FW_Pos) /*!< \brief ACTLR: FW Mask */ + +/* CP15 Register CPACR */ +typedef union +{ + struct + { + uint32_t CP0:2; /*!< \brief bit: 0..1 Access rights for coprocessor 0 */ + uint32_t CP1:2; /*!< \brief bit: 2..3 Access rights for coprocessor 1 */ + uint32_t CP2:2; /*!< \brief bit: 4..5 Access rights for coprocessor 2 */ + uint32_t CP3:2; /*!< \brief bit: 6..7 Access rights for coprocessor 3 */ + uint32_t CP4:2; /*!< \brief bit: 8..9 Access rights for coprocessor 4 */ + uint32_t CP5:2; /*!< \brief bit:10..11 Access rights for coprocessor 5 */ + uint32_t CP6:2; /*!< \brief bit:12..13 Access rights for coprocessor 6 */ + uint32_t CP7:2; /*!< \brief bit:14..15 Access rights for coprocessor 7 */ + uint32_t CP8:2; /*!< \brief bit:16..17 Access rights for coprocessor 8 */ + uint32_t CP9:2; /*!< \brief bit:18..19 Access rights for coprocessor 9 */ + uint32_t CP10:2; /*!< \brief bit:20..21 Access rights for coprocessor 10 */ + uint32_t CP11:2; /*!< \brief bit:22..23 Access rights for coprocessor 11 */ + uint32_t CP12:2; /*!< \brief bit:24..25 Access rights for coprocessor 11 */ + uint32_t CP13:2; /*!< \brief bit:26..27 Access rights for coprocessor 11 */ + uint32_t TRCDIS:1; /*!< \brief bit: 28 Disable CP14 access to trace registers */ + RESERVED(0:1, uint32_t) + uint32_t D32DIS:1; /*!< \brief bit: 30 Disable use of registers D16-D31 of the VFP register file */ + uint32_t ASEDIS:1; /*!< \brief bit: 31 Disable Advanced SIMD Functionality */ + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CPACR_Type; + +#define CPACR_ASEDIS_Pos 31U /*!< \brief CPACR: ASEDIS Position */ +#define CPACR_ASEDIS_Msk (1UL << CPACR_ASEDIS_Pos) /*!< \brief CPACR: ASEDIS Mask */ + +#define CPACR_D32DIS_Pos 30U /*!< \brief CPACR: D32DIS Position */ +#define CPACR_D32DIS_Msk (1UL << CPACR_D32DIS_Pos) /*!< \brief CPACR: D32DIS Mask */ + +#define CPACR_TRCDIS_Pos 28U /*!< \brief CPACR: D32DIS Position */ +#define CPACR_TRCDIS_Msk (1UL << CPACR_D32DIS_Pos) /*!< \brief CPACR: D32DIS Mask */ + +#define CPACR_CP_Pos_(n) (n*2U) /*!< \brief CPACR: CPn Position */ +#define CPACR_CP_Msk_(n) (3UL << CPACR_CP_Pos_(n)) /*!< \brief CPACR: CPn Mask */ + +#define CPACR_CP_NA 0U /*!< \brief CPACR CPn field: Access denied. */ +#define CPACR_CP_PL1 1U /*!< \brief CPACR CPn field: Accessible from PL1 only. */ +#define CPACR_CP_FA 3U /*!< \brief CPACR CPn field: Full access. */ + +/* CP15 Register DFSR */ +typedef union +{ + struct + { + uint32_t FS0:4; /*!< \brief bit: 0.. 3 Fault Status bits bit 0-3 */ + uint32_t Domain:4; /*!< \brief bit: 4.. 7 Fault on which domain */ + RESERVED(0:1, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + uint32_t FS1:1; /*!< \brief bit: 10 Fault Status bits bit 4 */ + uint32_t WnR:1; /*!< \brief bit: 11 Write not Read bit */ + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + uint32_t CM:1; /*!< \brief bit: 13 Cache maintenance fault */ + RESERVED(1:18, uint32_t) + } s; /*!< \brief Structure used for bit access in short format */ + struct + { + uint32_t STATUS:5; /*!< \brief bit: 0.. 5 Fault Status bits */ + RESERVED(0:3, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + RESERVED(1:1, uint32_t) + uint32_t WnR:1; /*!< \brief bit: 11 Write not Read bit */ + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + uint32_t CM:1; /*!< \brief bit: 13 Cache maintenance fault */ + RESERVED(2:18, uint32_t) + } l; /*!< \brief Structure used for bit access in long format */ + uint32_t w; /*!< \brief Type used for word access */ +} DFSR_Type; + +#define DFSR_CM_Pos 13U /*!< \brief DFSR: CM Position */ +#define DFSR_CM_Msk (1UL << DFSR_CM_Pos) /*!< \brief DFSR: CM Mask */ + +#define DFSR_Ext_Pos 12U /*!< \brief DFSR: Ext Position */ +#define DFSR_Ext_Msk (1UL << DFSR_Ext_Pos) /*!< \brief DFSR: Ext Mask */ + +#define DFSR_WnR_Pos 11U /*!< \brief DFSR: WnR Position */ +#define DFSR_WnR_Msk (1UL << DFSR_WnR_Pos) /*!< \brief DFSR: WnR Mask */ + +#define DFSR_FS1_Pos 10U /*!< \brief DFSR: FS1 Position */ +#define DFSR_FS1_Msk (1UL << DFSR_FS1_Pos) /*!< \brief DFSR: FS1 Mask */ + +#define DFSR_LPAE_Pos 9U /*!< \brief DFSR: LPAE Position */ +#define DFSR_LPAE_Msk (1UL << DFSR_LPAE_Pos) /*!< \brief DFSR: LPAE Mask */ + +#define DFSR_Domain_Pos 4U /*!< \brief DFSR: Domain Position */ +#define DFSR_Domain_Msk (0xFUL << DFSR_Domain_Pos) /*!< \brief DFSR: Domain Mask */ + +#define DFSR_FS0_Pos 0U /*!< \brief DFSR: FS0 Position */ +#define DFSR_FS0_Msk (0xFUL << DFSR_FS0_Pos) /*!< \brief DFSR: FS0 Mask */ + +#define DFSR_STATUS_Pos 0U /*!< \brief DFSR: STATUS Position */ +#define DFSR_STATUS_Msk (0x3FUL << DFSR_STATUS_Pos) /*!< \brief DFSR: STATUS Mask */ + +/* CP15 Register IFSR */ +typedef union +{ + struct + { + uint32_t FS0:4; /*!< \brief bit: 0.. 3 Fault Status bits bit 0-3 */ + RESERVED(0:5, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + uint32_t FS1:1; /*!< \brief bit: 10 Fault Status bits bit 4 */ + RESERVED(1:1, uint32_t) + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + RESERVED(2:19, uint32_t) + } s; /*!< \brief Structure used for bit access in short format */ + struct + { + uint32_t STATUS:6; /*!< \brief bit: 0.. 5 Fault Status bits */ + RESERVED(0:3, uint32_t) + uint32_t LPAE:1; /*!< \brief bit: 9 Large Physical Address Extension */ + RESERVED(1:2, uint32_t) + uint32_t ExT:1; /*!< \brief bit: 12 External abort type */ + RESERVED(2:19, uint32_t) + } l; /*!< \brief Structure used for bit access in long format */ + uint32_t w; /*!< \brief Type used for word access */ +} IFSR_Type; + +#define IFSR_ExT_Pos 12U /*!< \brief IFSR: ExT Position */ +#define IFSR_ExT_Msk (1UL << IFSR_ExT_Pos) /*!< \brief IFSR: ExT Mask */ + +#define IFSR_FS1_Pos 10U /*!< \brief IFSR: FS1 Position */ +#define IFSR_FS1_Msk (1UL << IFSR_FS1_Pos) /*!< \brief IFSR: FS1 Mask */ + +#define IFSR_LPAE_Pos 9U /*!< \brief IFSR: LPAE Position */ +#define IFSR_LPAE_Msk (0x1UL << IFSR_LPAE_Pos) /*!< \brief IFSR: LPAE Mask */ + +#define IFSR_FS0_Pos 0U /*!< \brief IFSR: FS0 Position */ +#define IFSR_FS0_Msk (0xFUL << IFSR_FS0_Pos) /*!< \brief IFSR: FS0 Mask */ + +#define IFSR_STATUS_Pos 0U /*!< \brief IFSR: STATUS Position */ +#define IFSR_STATUS_Msk (0x3FUL << IFSR_STATUS_Pos) /*!< \brief IFSR: STATUS Mask */ + +/* CP15 Register ISR */ +typedef union +{ + struct + { + RESERVED(0:6, uint32_t) + uint32_t F:1; /*!< \brief bit: 6 FIQ pending bit */ + uint32_t I:1; /*!< \brief bit: 7 IRQ pending bit */ + uint32_t A:1; /*!< \brief bit: 8 External abort pending bit */ + RESERVED(1:23, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} ISR_Type; + +#define ISR_A_Pos 13U /*!< \brief ISR: A Position */ +#define ISR_A_Msk (1UL << ISR_A_Pos) /*!< \brief ISR: A Mask */ + +#define ISR_I_Pos 12U /*!< \brief ISR: I Position */ +#define ISR_I_Msk (1UL << ISR_I_Pos) /*!< \brief ISR: I Mask */ + +#define ISR_F_Pos 11U /*!< \brief ISR: F Position */ +#define ISR_F_Msk (1UL << ISR_F_Pos) /*!< \brief ISR: F Mask */ + +/* DACR Register */ +#define DACR_D_Pos_(n) (2U*n) /*!< \brief DACR: Dn Position */ +#define DACR_D_Msk_(n) (3UL << DACR_D_Pos_(n)) /*!< \brief DACR: Dn Mask */ +#define DACR_Dn_NOACCESS 0U /*!< \brief DACR Dn field: No access */ +#define DACR_Dn_CLIENT 1U /*!< \brief DACR Dn field: Client */ +#define DACR_Dn_MANAGER 3U /*!< \brief DACR Dn field: Manager */ + +/** + \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) + + +/** + \brief Union type to access the L2C_310 Cache Controller. +*/ +#if (defined(__L2C_PRESENT) && (__L2C_PRESENT == 1U)) || \ + defined(DOXYGEN) +typedef struct +{ + __IM uint32_t CACHE_ID; /*!< \brief Offset: 0x0000 (R/ ) Cache ID Register */ + __IM uint32_t CACHE_TYPE; /*!< \brief Offset: 0x0004 (R/ ) Cache Type Register */ + RESERVED(0[0x3e], uint32_t) + __IOM uint32_t CONTROL; /*!< \brief Offset: 0x0100 (R/W) Control Register */ + __IOM uint32_t AUX_CNT; /*!< \brief Offset: 0x0104 (R/W) Auxiliary Control */ + RESERVED(1[0x3e], uint32_t) + __IOM uint32_t EVENT_CONTROL; /*!< \brief Offset: 0x0200 (R/W) Event Counter Control */ + __IOM uint32_t EVENT_COUNTER1_CONF; /*!< \brief Offset: 0x0204 (R/W) Event Counter 1 Configuration */ + __IOM uint32_t EVENT_COUNTER0_CONF; /*!< \brief Offset: 0x0208 (R/W) Event Counter 1 Configuration */ + RESERVED(2[0x2], uint32_t) + __IOM uint32_t INTERRUPT_MASK; /*!< \brief Offset: 0x0214 (R/W) Interrupt Mask */ + __IM uint32_t MASKED_INT_STATUS; /*!< \brief Offset: 0x0218 (R/ ) Masked Interrupt Status */ + __IM uint32_t RAW_INT_STATUS; /*!< \brief Offset: 0x021c (R/ ) Raw Interrupt Status */ + __OM uint32_t INTERRUPT_CLEAR; /*!< \brief Offset: 0x0220 ( /W) Interrupt Clear */ + RESERVED(3[0x143], uint32_t) + __IOM uint32_t CACHE_SYNC; /*!< \brief Offset: 0x0730 (R/W) Cache Sync */ + RESERVED(4[0xf], uint32_t) + __IOM uint32_t INV_LINE_PA; /*!< \brief Offset: 0x0770 (R/W) Invalidate Line By PA */ + RESERVED(6[2], uint32_t) + __IOM uint32_t INV_WAY; /*!< \brief Offset: 0x077c (R/W) Invalidate by Way */ + RESERVED(5[0xc], uint32_t) + __IOM uint32_t CLEAN_LINE_PA; /*!< \brief Offset: 0x07b0 (R/W) Clean Line by PA */ + RESERVED(7[1], uint32_t) + __IOM uint32_t CLEAN_LINE_INDEX_WAY; /*!< \brief Offset: 0x07b8 (R/W) Clean Line by Index/Way */ + __IOM uint32_t CLEAN_WAY; /*!< \brief Offset: 0x07bc (R/W) Clean by Way */ + RESERVED(8[0xc], uint32_t) + __IOM uint32_t CLEAN_INV_LINE_PA; /*!< \brief Offset: 0x07f0 (R/W) Clean and Invalidate Line by PA */ + RESERVED(9[1], uint32_t) + __IOM uint32_t CLEAN_INV_LINE_INDEX_WAY; /*!< \brief Offset: 0x07f8 (R/W) Clean and Invalidate Line by Index/Way */ + __IOM uint32_t CLEAN_INV_WAY; /*!< \brief Offset: 0x07fc (R/W) Clean and Invalidate by Way */ + RESERVED(10[0x40], uint32_t) + __IOM uint32_t DATA_LOCK_0_WAY; /*!< \brief Offset: 0x0900 (R/W) Data Lockdown 0 by Way */ + __IOM uint32_t INST_LOCK_0_WAY; /*!< \brief Offset: 0x0904 (R/W) Instruction Lockdown 0 by Way */ + __IOM uint32_t DATA_LOCK_1_WAY; /*!< \brief Offset: 0x0908 (R/W) Data Lockdown 1 by Way */ + __IOM uint32_t INST_LOCK_1_WAY; /*!< \brief Offset: 0x090c (R/W) Instruction Lockdown 1 by Way */ + __IOM uint32_t DATA_LOCK_2_WAY; /*!< \brief Offset: 0x0910 (R/W) Data Lockdown 2 by Way */ + __IOM uint32_t INST_LOCK_2_WAY; /*!< \brief Offset: 0x0914 (R/W) Instruction Lockdown 2 by Way */ + __IOM uint32_t DATA_LOCK_3_WAY; /*!< \brief Offset: 0x0918 (R/W) Data Lockdown 3 by Way */ + __IOM uint32_t INST_LOCK_3_WAY; /*!< \brief Offset: 0x091c (R/W) Instruction Lockdown 3 by Way */ + __IOM uint32_t DATA_LOCK_4_WAY; /*!< \brief Offset: 0x0920 (R/W) Data Lockdown 4 by Way */ + __IOM uint32_t INST_LOCK_4_WAY; /*!< \brief Offset: 0x0924 (R/W) Instruction Lockdown 4 by Way */ + __IOM uint32_t DATA_LOCK_5_WAY; /*!< \brief Offset: 0x0928 (R/W) Data Lockdown 5 by Way */ + __IOM uint32_t INST_LOCK_5_WAY; /*!< \brief Offset: 0x092c (R/W) Instruction Lockdown 5 by Way */ + __IOM uint32_t DATA_LOCK_6_WAY; /*!< \brief Offset: 0x0930 (R/W) Data Lockdown 5 by Way */ + __IOM uint32_t INST_LOCK_6_WAY; /*!< \brief Offset: 0x0934 (R/W) Instruction Lockdown 5 by Way */ + __IOM uint32_t DATA_LOCK_7_WAY; /*!< \brief Offset: 0x0938 (R/W) Data Lockdown 6 by Way */ + __IOM uint32_t INST_LOCK_7_WAY; /*!< \brief Offset: 0x093c (R/W) Instruction Lockdown 6 by Way */ + RESERVED(11[0x4], uint32_t) + __IOM uint32_t LOCK_LINE_EN; /*!< \brief Offset: 0x0950 (R/W) Lockdown by Line Enable */ + __IOM uint32_t UNLOCK_ALL_BY_WAY; /*!< \brief Offset: 0x0954 (R/W) Unlock All Lines by Way */ + RESERVED(12[0xaa], uint32_t) + __IOM uint32_t ADDRESS_FILTER_START; /*!< \brief Offset: 0x0c00 (R/W) Address Filtering Start */ + __IOM uint32_t ADDRESS_FILTER_END; /*!< \brief Offset: 0x0c04 (R/W) Address Filtering End */ + RESERVED(13[0xce], uint32_t) + __IOM uint32_t DEBUG_CONTROL; /*!< \brief Offset: 0x0f40 (R/W) Debug Control Register */ +} L2C_310_TypeDef; + +#define L2C_310 ((L2C_310_TypeDef *)L2C_310_BASE) /*!< \brief L2C_310 register set access pointer */ +#endif + +#if (defined(__GIC_PRESENT) && (__GIC_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Structure type to access the Generic Interrupt Controller Distributor (GICD) +*/ +typedef struct +{ + __IOM uint32_t CTLR; /*!< \brief Offset: 0x000 (R/W) Distributor Control Register */ + __IM uint32_t TYPER; /*!< \brief Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IM uint32_t IIDR; /*!< \brief Offset: 0x008 (R/ ) Distributor Implementer Identification Register */ + RESERVED(0, uint32_t) + __IOM uint32_t STATUSR; /*!< \brief Offset: 0x010 (R/W) Error Reporting Status Register, optional */ + RESERVED(1[11], uint32_t) + __OM uint32_t SETSPI_NSR; /*!< \brief Offset: 0x040 ( /W) Set SPI Register */ + RESERVED(2, uint32_t) + __OM uint32_t CLRSPI_NSR; /*!< \brief Offset: 0x048 ( /W) Clear SPI Register */ + RESERVED(3, uint32_t) + __OM uint32_t SETSPI_SR; /*!< \brief Offset: 0x050 ( /W) Set SPI, Secure Register */ + RESERVED(4, uint32_t) + __OM uint32_t CLRSPI_SR; /*!< \brief Offset: 0x058 ( /W) Clear SPI, Secure Register */ + RESERVED(5[9], uint32_t) + __IOM uint32_t IGROUPR[32]; /*!< \brief Offset: 0x080 (R/W) Interrupt Group Registers */ + __IOM uint32_t ISENABLER[32]; /*!< \brief Offset: 0x100 (R/W) Interrupt Set-Enable Registers */ + __IOM uint32_t ICENABLER[32]; /*!< \brief Offset: 0x180 (R/W) Interrupt Clear-Enable Registers */ + __IOM uint32_t ISPENDR[32]; /*!< \brief Offset: 0x200 (R/W) Interrupt Set-Pending Registers */ + __IOM uint32_t ICPENDR[32]; /*!< \brief Offset: 0x280 (R/W) Interrupt Clear-Pending Registers */ + __IOM uint32_t ISACTIVER[32]; /*!< \brief Offset: 0x300 (R/W) Interrupt Set-Active Registers */ + __IOM uint32_t ICACTIVER[32]; /*!< \brief Offset: 0x380 (R/W) Interrupt Clear-Active Registers */ + __IOM uint32_t IPRIORITYR[255]; /*!< \brief Offset: 0x400 (R/W) Interrupt Priority Registers */ + RESERVED(6, uint32_t) + __IOM uint32_t ITARGETSR[255]; /*!< \brief Offset: 0x800 (R/W) Interrupt Targets Registers */ + RESERVED(7, uint32_t) + __IOM uint32_t ICFGR[64]; /*!< \brief Offset: 0xC00 (R/W) Interrupt Configuration Registers */ + __IOM uint32_t IGRPMODR[32]; /*!< \brief Offset: 0xD00 (R/W) Interrupt Group Modifier Registers */ + RESERVED(8[32], uint32_t) + __IOM uint32_t NSACR[64]; /*!< \brief Offset: 0xE00 (R/W) Non-secure Access Control Registers */ + __OM uint32_t SGIR; /*!< \brief Offset: 0xF00 ( /W) Software Generated Interrupt Register */ + RESERVED(9[3], uint32_t) + __IOM uint32_t CPENDSGIR[4]; /*!< \brief Offset: 0xF10 (R/W) SGI Clear-Pending Registers */ + __IOM uint32_t SPENDSGIR[4]; /*!< \brief Offset: 0xF20 (R/W) SGI Set-Pending Registers */ + RESERVED(10[5236], uint32_t) + __IOM uint64_t IROUTER[988]; /*!< \brief Offset: 0x6100(R/W) Interrupt Routing Registers */ +} GICDistributor_Type; + +#define GICDistributor ((GICDistributor_Type *) GIC_DISTRIBUTOR_BASE ) /*!< \brief GIC Distributor register set access pointer */ + +/* GICDistributor CTLR Register */ +#define GICDistributor_CTLR_EnableGrp0_Pos 0U /*!< GICDistributor CTLR: EnableGrp0 Position */ +#define GICDistributor_CTLR_EnableGrp0_Msk (0x1U /*<< GICDistributor_CTLR_EnableGrp0_Pos*/) /*!< GICDistributor CTLR: EnableGrp0 Mask */ +#define GICDistributor_CTLR_EnableGrp0(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CTLR_EnableGrp0_Pos*/)) & GICDistributor_CTLR_EnableGrp0_Msk) + +#define GICDistributor_CTLR_EnableGrp1_Pos 1U /*!< GICDistributor CTLR: EnableGrp1 Position */ +#define GICDistributor_CTLR_EnableGrp1_Msk (0x1U << GICDistributor_CTLR_EnableGrp1_Pos) /*!< GICDistributor CTLR: EnableGrp1 Mask */ +#define GICDistributor_CTLR_EnableGrp1(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_EnableGrp1_Pos)) & GICDistributor_CTLR_EnableGrp1_Msk) + +#define GICDistributor_CTLR_ARE_Pos 4U /*!< GICDistributor CTLR: ARE Position */ +#define GICDistributor_CTLR_ARE_Msk (0x1U << GICDistributor_CTLR_ARE_Pos) /*!< GICDistributor CTLR: ARE Mask */ +#define GICDistributor_CTLR_ARE(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_ARE_Pos)) & GICDistributor_CTLR_ARE_Msk) + +#define GICDistributor_CTLR_DC_Pos 6U /*!< GICDistributor CTLR: DC Position */ +#define GICDistributor_CTLR_DC_Msk (0x1U << GICDistributor_CTLR_DC_Pos) /*!< GICDistributor CTLR: DC Mask */ +#define GICDistributor_CTLR_DC(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_DC_Pos)) & GICDistributor_CTLR_DC_Msk) + +#define GICDistributor_CTLR_EINWF_Pos 7U /*!< GICDistributor CTLR: EINWF Position */ +#define GICDistributor_CTLR_EINWF_Msk (0x1U << GICDistributor_CTLR_EINWF_Pos) /*!< GICDistributor CTLR: EINWF Mask */ +#define GICDistributor_CTLR_EINWF(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_EINWF_Pos)) & GICDistributor_CTLR_EINWF_Msk) + +#define GICDistributor_CTLR_RWP_Pos 31U /*!< GICDistributor CTLR: RWP Position */ +#define GICDistributor_CTLR_RWP_Msk (0x1U << GICDistributor_CTLR_RWP_Pos) /*!< GICDistributor CTLR: RWP Mask */ +#define GICDistributor_CTLR_RWP(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_CTLR_RWP_Pos)) & GICDistributor_CTLR_RWP_Msk) + +/* GICDistributor TYPER Register */ +#define GICDistributor_TYPER_ITLinesNumber_Pos 0U /*!< GICDistributor TYPER: ITLinesNumber Position */ +#define GICDistributor_TYPER_ITLinesNumber_Msk (0x1FU /*<< GICDistributor_TYPER_ITLinesNumber_Pos*/) /*!< GICDistributor TYPER: ITLinesNumber Mask */ +#define GICDistributor_TYPER_ITLinesNumber(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_TYPER_ITLinesNumber_Pos*/)) & GICDistributor_CTLR_ITLinesNumber_Msk) + +#define GICDistributor_TYPER_CPUNumber_Pos 5U /*!< GICDistributor TYPER: CPUNumber Position */ +#define GICDistributor_TYPER_CPUNumber_Msk (0x7U << GICDistributor_TYPER_CPUNumber_Pos) /*!< GICDistributor TYPER: CPUNumber Mask */ +#define GICDistributor_TYPER_CPUNumber(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_CPUNumber_Pos)) & GICDistributor_TYPER_CPUNumber_Msk) + +#define GICDistributor_TYPER_SecurityExtn_Pos 10U /*!< GICDistributor TYPER: SecurityExtn Position */ +#define GICDistributor_TYPER_SecurityExtn_Msk (0x1U << GICDistributor_TYPER_SecurityExtn_Pos) /*!< GICDistributor TYPER: SecurityExtn Mask */ +#define GICDistributor_TYPER_SecurityExtn(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_SecurityExtn_Pos)) & GICDistributor_TYPER_SecurityExtn_Msk) + +#define GICDistributor_TYPER_LSPI_Pos 11U /*!< GICDistributor TYPER: LSPI Position */ +#define GICDistributor_TYPER_LSPI_Msk (0x1FU << GICDistributor_TYPER_LSPI_Pos) /*!< GICDistributor TYPER: LSPI Mask */ +#define GICDistributor_TYPER_LSPI(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_TYPER_LSPI_Pos)) & GICDistributor_TYPER_LSPI_Msk) + +/* GICDistributor IIDR Register */ +#define GICDistributor_IIDR_Implementer_Pos 0U /*!< GICDistributor IIDR: Implementer Position */ +#define GICDistributor_IIDR_Implementer_Msk (0xFFFU /*<< GICDistributor_IIDR_Implementer_Pos*/) /*!< GICDistributor IIDR: Implementer Mask */ +#define GICDistributor_IIDR_Implementer(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_IIDR_Implementer_Pos*/)) & GICDistributor_IIDR_Implementer_Msk) + +#define GICDistributor_IIDR_Revision_Pos 12U /*!< GICDistributor IIDR: Revision Position */ +#define GICDistributor_IIDR_Revision_Msk (0xFU << GICDistributor_IIDR_Revision_Pos) /*!< GICDistributor IIDR: Revision Mask */ +#define GICDistributor_IIDR_Revision(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_Revision_Pos)) & GICDistributor_IIDR_Revision_Msk) + +#define GICDistributor_IIDR_Variant_Pos 16U /*!< GICDistributor IIDR: Variant Position */ +#define GICDistributor_IIDR_Variant_Msk (0xFU << GICDistributor_IIDR_Variant_Pos) /*!< GICDistributor IIDR: Variant Mask */ +#define GICDistributor_IIDR_Variant(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_Variant_Pos)) & GICDistributor_IIDR_Variant_Msk) + +#define GICDistributor_IIDR_ProductID_Pos 24U /*!< GICDistributor IIDR: ProductID Position */ +#define GICDistributor_IIDR_ProductID_Msk (0xFFU << GICDistributor_IIDR_ProductID_Pos) /*!< GICDistributor IIDR: ProductID Mask */ +#define GICDistributor_IIDR_ProductID(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_IIDR_ProductID_Pos)) & GICDistributor_IIDR_ProductID_Msk) + +/* GICDistributor STATUSR Register */ +#define GICDistributor_STATUSR_RRD_Pos 0U /*!< GICDistributor STATUSR: RRD Position */ +#define GICDistributor_STATUSR_RRD_Msk (0x1U /*<< GICDistributor_STATUSR_RRD_Pos*/) /*!< GICDistributor STATUSR: RRD Mask */ +#define GICDistributor_STATUSR_RRD(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_STATUSR_RRD_Pos*/)) & GICDistributor_STATUSR_RRD_Msk) + +#define GICDistributor_STATUSR_WRD_Pos 1U /*!< GICDistributor STATUSR: WRD Position */ +#define GICDistributor_STATUSR_WRD_Msk (0x1U << GICDistributor_STATUSR_WRD_Pos) /*!< GICDistributor STATUSR: WRD Mask */ +#define GICDistributor_STATUSR_WRD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_WRD_Pos)) & GICDistributor_STATUSR_WRD_Msk) + +#define GICDistributor_STATUSR_RWOD_Pos 2U /*!< GICDistributor STATUSR: RWOD Position */ +#define GICDistributor_STATUSR_RWOD_Msk (0x1U << GICDistributor_STATUSR_RWOD_Pos) /*!< GICDistributor STATUSR: RWOD Mask */ +#define GICDistributor_STATUSR_RWOD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_RWOD_Pos)) & GICDistributor_STATUSR_RWOD_Msk) + +#define GICDistributor_STATUSR_WROD_Pos 3U /*!< GICDistributor STATUSR: WROD Position */ +#define GICDistributor_STATUSR_WROD_Msk (0x1U << GICDistributor_STATUSR_WROD_Pos) /*!< GICDistributor STATUSR: WROD Mask */ +#define GICDistributor_STATUSR_WROD(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_STATUSR_WROD_Pos)) & GICDistributor_STATUSR_WROD_Msk) + +/* GICDistributor SETSPI_NSR Register */ +#define GICDistributor_SETSPI_NSR_INTID_Pos 0U /*!< GICDistributor SETSPI_NSR: INTID Position */ +#define GICDistributor_SETSPI_NSR_INTID_Msk (0x3FFU /*<< GICDistributor_SETSPI_NSR_INTID_Pos*/) /*!< GICDistributor SETSPI_NSR: INTID Mask */ +#define GICDistributor_SETSPI_NSR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SETSPI_NSR_INTID_Pos*/)) & GICDistributor_SETSPI_NSR_INTID_Msk) + +/* GICDistributor CLRSPI_NSR Register */ +#define GICDistributor_CLRSPI_NSR_INTID_Pos 0U /*!< GICDistributor CLRSPI_NSR: INTID Position */ +#define GICDistributor_CLRSPI_NSR_INTID_Msk (0x3FFU /*<< GICDistributor_CLRSPI_NSR_INTID_Pos*/) /*!< GICDistributor CLRSPI_NSR: INTID Mask */ +#define GICDistributor_CLRSPI_NSR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CLRSPI_NSR_INTID_Pos*/)) & GICDistributor_CLRSPI_NSR_INTID_Msk) + +/* GICDistributor SETSPI_SR Register */ +#define GICDistributor_SETSPI_SR_INTID_Pos 0U /*!< GICDistributor SETSPI_SR: INTID Position */ +#define GICDistributor_SETSPI_SR_INTID_Msk (0x3FFU /*<< GICDistributor_SETSPI_SR_INTID_Pos*/) /*!< GICDistributor SETSPI_SR: INTID Mask */ +#define GICDistributor_SETSPI_SR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SETSPI_SR_INTID_Pos*/)) & GICDistributor_SETSPI_SR_INTID_Msk) + +/* GICDistributor CLRSPI_SR Register */ +#define GICDistributor_CLRSPI_SR_INTID_Pos 0U /*!< GICDistributor CLRSPI_SR: INTID Position */ +#define GICDistributor_CLRSPI_SR_INTID_Msk (0x3FFU /*<< GICDistributor_CLRSPI_SR_INTID_Pos*/) /*!< GICDistributor CLRSPI_SR: INTID Mask */ +#define GICDistributor_CLRSPI_SR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_CLRSPI_SR_INTID_Pos*/)) & GICDistributor_CLRSPI_SR_INTID_Msk) + +/* GICDistributor ITARGETSR Register */ +#define GICDistributor_ITARGETSR_CPU0_Pos 0U /*!< GICDistributor ITARGETSR: CPU0 Position */ +#define GICDistributor_ITARGETSR_CPU0_Msk (0x1U /*<< GICDistributor_ITARGETSR_CPU0_Pos*/) /*!< GICDistributor ITARGETSR: CPU0 Mask */ +#define GICDistributor_ITARGETSR_CPU0(x) (((uint8_t)(((uint8_t)(x)) /*<< GICDistributor_ITARGETSR_CPU0_Pos*/)) & GICDistributor_ITARGETSR_CPU0_Msk) + +#define GICDistributor_ITARGETSR_CPU1_Pos 1U /*!< GICDistributor ITARGETSR: CPU1 Position */ +#define GICDistributor_ITARGETSR_CPU1_Msk (0x1U << GICDistributor_ITARGETSR_CPU1_Pos) /*!< GICDistributor ITARGETSR: CPU1 Mask */ +#define GICDistributor_ITARGETSR_CPU1(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU1_Pos)) & GICDistributor_ITARGETSR_CPU1_Msk) + +#define GICDistributor_ITARGETSR_CPU2_Pos 2U /*!< GICDistributor ITARGETSR: CPU2 Position */ +#define GICDistributor_ITARGETSR_CPU2_Msk (0x1U << GICDistributor_ITARGETSR_CPU2_Pos) /*!< GICDistributor ITARGETSR: CPU2 Mask */ +#define GICDistributor_ITARGETSR_CPU2(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU2_Pos)) & GICDistributor_ITARGETSR_CPU2_Msk) + +#define GICDistributor_ITARGETSR_CPU3_Pos 3U /*!< GICDistributor ITARGETSR: CPU3 Position */ +#define GICDistributor_ITARGETSR_CPU3_Msk (0x1U << GICDistributor_ITARGETSR_CPU3_Pos) /*!< GICDistributor ITARGETSR: CPU3 Mask */ +#define GICDistributor_ITARGETSR_CPU3(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU3_Pos)) & GICDistributor_ITARGETSR_CPU3_Msk) + +#define GICDistributor_ITARGETSR_CPU4_Pos 4U /*!< GICDistributor ITARGETSR: CPU4 Position */ +#define GICDistributor_ITARGETSR_CPU4_Msk (0x1U << GICDistributor_ITARGETSR_CPU4_Pos) /*!< GICDistributor ITARGETSR: CPU4 Mask */ +#define GICDistributor_ITARGETSR_CPU4(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU4_Pos)) & GICDistributor_ITARGETSR_CPU4_Msk) + +#define GICDistributor_ITARGETSR_CPU5_Pos 5U /*!< GICDistributor ITARGETSR: CPU5 Position */ +#define GICDistributor_ITARGETSR_CPU5_Msk (0x1U << GICDistributor_ITARGETSR_CPU5_Pos) /*!< GICDistributor ITARGETSR: CPU5 Mask */ +#define GICDistributor_ITARGETSR_CPU5(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU5_Pos)) & GICDistributor_ITARGETSR_CPU5_Msk) + +#define GICDistributor_ITARGETSR_CPU6_Pos 6U /*!< GICDistributor ITARGETSR: CPU6 Position */ +#define GICDistributor_ITARGETSR_CPU6_Msk (0x1U << GICDistributor_ITARGETSR_CPU6_Pos) /*!< GICDistributor ITARGETSR: CPU6 Mask */ +#define GICDistributor_ITARGETSR_CPU6(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU6_Pos)) & GICDistributor_ITARGETSR_CPU6_Msk) + +#define GICDistributor_ITARGETSR_CPU7_Pos 7U /*!< GICDistributor ITARGETSR: CPU7 Position */ +#define GICDistributor_ITARGETSR_CPU7_Msk (0x1U << GICDistributor_ITARGETSR_CPU7_Pos) /*!< GICDistributor ITARGETSR: CPU7 Mask */ +#define GICDistributor_ITARGETSR_CPU7(x) (((uint8_t)(((uint8_t)(x)) << GICDistributor_ITARGETSR_CPU7_Pos)) & GICDistributor_ITARGETSR_CPU7_Msk) + +/* GICDistributor SGIR Register */ +#define GICDistributor_SGIR_INTID_Pos 0U /*!< GICDistributor SGIR: INTID Position */ +#define GICDistributor_SGIR_INTID_Msk (0x7U /*<< GICDistributor_SGIR_INTID_Pos*/) /*!< GICDistributor SGIR: INTID Mask */ +#define GICDistributor_SGIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICDistributor_SGIR_INTID_Pos*/)) & GICDistributor_SGIR_INTID_Msk) + +#define GICDistributor_SGIR_NSATT_Pos 15U /*!< GICDistributor SGIR: NSATT Position */ +#define GICDistributor_SGIR_NSATT_Msk (0x1U << GICDistributor_SGIR_NSATT_Pos) /*!< GICDistributor SGIR: NSATT Mask */ +#define GICDistributor_SGIR_NSATT(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_NSATT_Pos)) & GICDistributor_SGIR_NSATT_Msk) + +#define GICDistributor_SGIR_CPUTargetList_Pos 16U /*!< GICDistributor SGIR: CPUTargetList Position */ +#define GICDistributor_SGIR_CPUTargetList_Msk (0xFFU << GICDistributor_SGIR_CPUTargetList_Pos) /*!< GICDistributor SGIR: CPUTargetList Mask */ +#define GICDistributor_SGIR_CPUTargetList(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_CPUTargetList_Pos)) & GICDistributor_SGIR_CPUTargetList_Msk) + +#define GICDistributor_SGIR_TargetFilterList_Pos 24U /*!< GICDistributor SGIR: TargetFilterList Position */ +#define GICDistributor_SGIR_TargetFilterList_Msk (0x3U << GICDistributor_SGIR_TargetFilterList_Pos) /*!< GICDistributor SGIR: TargetFilterList Mask */ +#define GICDistributor_SGIR_TargetFilterList(x) (((uint32_t)(((uint32_t)(x)) << GICDistributor_SGIR_TargetFilterList_Pos)) & GICDistributor_SGIR_TargetFilterList_Msk) + +/* GICDistributor IROUTER Register */ +#define GICDistributor_IROUTER_Aff0_Pos 0UL /*!< GICDistributor IROUTER: Aff0 Position */ +#define GICDistributor_IROUTER_Aff0_Msk (0xFFUL /*<< GICDistributor_IROUTER_Aff0_Pos*/) /*!< GICDistributor IROUTER: Aff0 Mask */ +#define GICDistributor_IROUTER_Aff0(x) (((uint64_t)(((uint64_t)(x)) /*<< GICDistributor_IROUTER_Aff0_Pos*/)) & GICDistributor_IROUTER_Aff0_Msk) + +#define GICDistributor_IROUTER_Aff1_Pos 8UL /*!< GICDistributor IROUTER: Aff1 Position */ +#define GICDistributor_IROUTER_Aff1_Msk (0xFFUL << GICDistributor_IROUTER_Aff1_Pos) /*!< GICDistributor IROUTER: Aff1 Mask */ +#define GICDistributor_IROUTER_Aff1(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff1_Pos)) & GICDistributor_IROUTER_Aff1_Msk) + +#define GICDistributor_IROUTER_Aff2_Pos 16UL /*!< GICDistributor IROUTER: Aff2 Position */ +#define GICDistributor_IROUTER_Aff2_Msk (0xFFUL << GICDistributor_IROUTER_Aff2_Pos) /*!< GICDistributor IROUTER: Aff2 Mask */ +#define GICDistributor_IROUTER_Aff2(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff2_Pos)) & GICDistributor_IROUTER_Aff2_Msk) + +#define GICDistributor_IROUTER_IRM_Pos 31UL /*!< GICDistributor IROUTER: IRM Position */ +#define GICDistributor_IROUTER_IRM_Msk (0xFFUL << GICDistributor_IROUTER_IRM_Pos) /*!< GICDistributor IROUTER: IRM Mask */ +#define GICDistributor_IROUTER_IRM(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_IRM_Pos)) & GICDistributor_IROUTER_IRM_Msk) + +#define GICDistributor_IROUTER_Aff3_Pos 32UL /*!< GICDistributor IROUTER: Aff3 Position */ +#define GICDistributor_IROUTER_Aff3_Msk (0xFFUL << GICDistributor_IROUTER_Aff3_Pos) /*!< GICDistributor IROUTER: Aff3 Mask */ +#define GICDistributor_IROUTER_Aff3(x) (((uint64_t)(((uint64_t)(x)) << GICDistributor_IROUTER_Aff3_Pos)) & GICDistributor_IROUTER_Aff3_Msk) + + + +/** \brief Structure type to access the Generic Interrupt Controller Interface (GICC) +*/ +typedef struct +{ + __IOM uint32_t CTLR; /*!< \brief Offset: 0x000 (R/W) CPU Interface Control Register */ + __IOM uint32_t PMR; /*!< \brief Offset: 0x004 (R/W) Interrupt Priority Mask Register */ + __IOM uint32_t BPR; /*!< \brief Offset: 0x008 (R/W) Binary Point Register */ + __IM uint32_t IAR; /*!< \brief Offset: 0x00C (R/ ) Interrupt Acknowledge Register */ + __OM uint32_t EOIR; /*!< \brief Offset: 0x010 ( /W) End Of Interrupt Register */ + __IM uint32_t RPR; /*!< \brief Offset: 0x014 (R/ ) Running Priority Register */ + __IM uint32_t HPPIR; /*!< \brief Offset: 0x018 (R/ ) Highest Priority Pending Interrupt Register */ + __IOM uint32_t ABPR; /*!< \brief Offset: 0x01C (R/W) Aliased Binary Point Register */ + __IM uint32_t AIAR; /*!< \brief Offset: 0x020 (R/ ) Aliased Interrupt Acknowledge Register */ + __OM uint32_t AEOIR; /*!< \brief Offset: 0x024 ( /W) Aliased End Of Interrupt Register */ + __IM uint32_t AHPPIR; /*!< \brief Offset: 0x028 (R/ ) Aliased Highest Priority Pending Interrupt Register */ + __IOM uint32_t STATUSR; /*!< \brief Offset: 0x02C (R/W) Error Reporting Status Register, optional */ + RESERVED(1[40], uint32_t) + __IOM uint32_t APR[4]; /*!< \brief Offset: 0x0D0 (R/W) Active Priority Register */ + __IOM uint32_t NSAPR[4]; /*!< \brief Offset: 0x0E0 (R/W) Non-secure Active Priority Register */ + RESERVED(2[3], uint32_t) + __IM uint32_t IIDR; /*!< \brief Offset: 0x0FC (R/ ) CPU Interface Identification Register */ + RESERVED(3[960], uint32_t) + __OM uint32_t DIR; /*!< \brief Offset: 0x1000( /W) Deactivate Interrupt Register */ +} GICInterface_Type; + +#define GICInterface ((GICInterface_Type *) GIC_INTERFACE_BASE ) /*!< \brief GIC Interface register set access pointer */ + +/* GICInterface CTLR Register */ +#define GICInterface_CTLR_Enable_Pos 0U /*!< PTIM CTLR: Enable Position */ +#define GICInterface_CTLR_Enable_Msk (0x1U /*<< GICInterface_CTLR_Enable_Pos*/) /*!< PTIM CTLR: Enable Mask */ +#define GICInterface_CTLR_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_CTLR_Enable_Pos*/)) & GICInterface_CTLR_Enable_Msk) + +/* GICInterface PMR Register */ +#define GICInterface_PMR_Priority_Pos 0U /*!< PTIM PMR: Priority Position */ +#define GICInterface_PMR_Priority_Msk (0xFFU /*<< GICInterface_PMR_Priority_Pos*/) /*!< PTIM PMR: Priority Mask */ +#define GICInterface_PMR_Priority(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_PMR_Priority_Pos*/)) & GICInterface_PMR_Priority_Msk) + +/* GICInterface BPR Register */ +#define GICInterface_BPR_Binary_Point_Pos 0U /*!< PTIM BPR: Binary_Point Position */ +#define GICInterface_BPR_Binary_Point_Msk (0x7U /*<< GICInterface_BPR_Binary_Point_Pos*/) /*!< PTIM BPR: Binary_Point Mask */ +#define GICInterface_BPR_Binary_Point(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_BPR_Binary_Point_Pos*/)) & GICInterface_BPR_Binary_Point_Msk) + +/* GICInterface IAR Register */ +#define GICInterface_IAR_INTID_Pos 0U /*!< PTIM IAR: INTID Position */ +#define GICInterface_IAR_INTID_Msk (0xFFFFFFU /*<< GICInterface_IAR_INTID_Pos*/) /*!< PTIM IAR: INTID Mask */ +#define GICInterface_IAR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_IAR_INTID_Pos*/)) & GICInterface_IAR_INTID_Msk) + +/* GICInterface EOIR Register */ +#define GICInterface_EOIR_INTID_Pos 0U /*!< PTIM EOIR: INTID Position */ +#define GICInterface_EOIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_EOIR_INTID_Pos*/) /*!< PTIM EOIR: INTID Mask */ +#define GICInterface_EOIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_EOIR_INTID_Pos*/)) & GICInterface_EOIR_INTID_Msk) + +/* GICInterface RPR Register */ +#define GICInterface_RPR_INTID_Pos 0U /*!< PTIM RPR: INTID Position */ +#define GICInterface_RPR_INTID_Msk (0xFFU /*<< GICInterface_RPR_INTID_Pos*/) /*!< PTIM RPR: INTID Mask */ +#define GICInterface_RPR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_RPR_INTID_Pos*/)) & GICInterface_RPR_INTID_Msk) + +/* GICInterface HPPIR Register */ +#define GICInterface_HPPIR_INTID_Pos 0U /*!< PTIM HPPIR: INTID Position */ +#define GICInterface_HPPIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_HPPIR_INTID_Pos*/) /*!< PTIM HPPIR: INTID Mask */ +#define GICInterface_HPPIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_HPPIR_INTID_Pos*/)) & GICInterface_HPPIR_INTID_Msk) + +/* GICInterface ABPR Register */ +#define GICInterface_ABPR_Binary_Point_Pos 0U /*!< PTIM ABPR: Binary_Point Position */ +#define GICInterface_ABPR_Binary_Point_Msk (0x7U /*<< GICInterface_ABPR_Binary_Point_Pos*/) /*!< PTIM ABPR: Binary_Point Mask */ +#define GICInterface_ABPR_Binary_Point(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_ABPR_Binary_Point_Pos*/)) & GICInterface_ABPR_Binary_Point_Msk) + +/* GICInterface AIAR Register */ +#define GICInterface_AIAR_INTID_Pos 0U /*!< PTIM AIAR: INTID Position */ +#define GICInterface_AIAR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AIAR_INTID_Pos*/) /*!< PTIM AIAR: INTID Mask */ +#define GICInterface_AIAR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AIAR_INTID_Pos*/)) & GICInterface_AIAR_INTID_Msk) + +/* GICInterface AEOIR Register */ +#define GICInterface_AEOIR_INTID_Pos 0U /*!< PTIM AEOIR: INTID Position */ +#define GICInterface_AEOIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AEOIR_INTID_Pos*/) /*!< PTIM AEOIR: INTID Mask */ +#define GICInterface_AEOIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AEOIR_INTID_Pos*/)) & GICInterface_AEOIR_INTID_Msk) + +/* GICInterface AHPPIR Register */ +#define GICInterface_AHPPIR_INTID_Pos 0U /*!< PTIM AHPPIR: INTID Position */ +#define GICInterface_AHPPIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_AHPPIR_INTID_Pos*/) /*!< PTIM AHPPIR: INTID Mask */ +#define GICInterface_AHPPIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_AHPPIR_INTID_Pos*/)) & GICInterface_AHPPIR_INTID_Msk) + +/* GICInterface STATUSR Register */ +#define GICInterface_STATUSR_RRD_Pos 0U /*!< GICInterface STATUSR: RRD Position */ +#define GICInterface_STATUSR_RRD_Msk (0x1U /*<< GICInterface_STATUSR_RRD_Pos*/) /*!< GICInterface STATUSR: RRD Mask */ +#define GICInterface_STATUSR_RRD(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_STATUSR_RRD_Pos*/)) & GICInterface_STATUSR_RRD_Msk) + +#define GICInterface_STATUSR_WRD_Pos 1U /*!< GICInterface STATUSR: WRD Position */ +#define GICInterface_STATUSR_WRD_Msk (0x1U << GICInterface_STATUSR_WRD_Pos) /*!< GICInterface STATUSR: WRD Mask */ +#define GICInterface_STATUSR_WRD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_WRD_Pos)) & GICInterface_STATUSR_WRD_Msk) + +#define GICInterface_STATUSR_RWOD_Pos 2U /*!< GICInterface STATUSR: RWOD Position */ +#define GICInterface_STATUSR_RWOD_Msk (0x1U << GICInterface_STATUSR_RWOD_Pos) /*!< GICInterface STATUSR: RWOD Mask */ +#define GICInterface_STATUSR_RWOD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_RWOD_Pos)) & GICInterface_STATUSR_RWOD_Msk) + +#define GICInterface_STATUSR_WROD_Pos 3U /*!< GICInterface STATUSR: WROD Position */ +#define GICInterface_STATUSR_WROD_Msk (0x1U << GICInterface_STATUSR_WROD_Pos) /*!< GICInterface STATUSR: WROD Mask */ +#define GICInterface_STATUSR_WROD(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_WROD_Pos)) & GICInterface_STATUSR_WROD_Msk) + +#define GICInterface_STATUSR_ASV_Pos 4U /*!< GICInterface STATUSR: ASV Position */ +#define GICInterface_STATUSR_ASV_Msk (0x1U << GICInterface_STATUSR_ASV_Pos) /*!< GICInterface STATUSR: ASV Mask */ +#define GICInterface_STATUSR_ASV(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_STATUSR_ASV_Pos)) & GICInterface_STATUSR_ASV_Msk) + +/* GICInterface IIDR Register */ +#define GICInterface_IIDR_Implementer_Pos 0U /*!< GICInterface IIDR: Implementer Position */ +#define GICInterface_IIDR_Implementer_Msk (0xFFFU /*<< GICInterface_IIDR_Implementer_Pos*/) /*!< GICInterface IIDR: Implementer Mask */ +#define GICInterface_IIDR_Implementer(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_IIDR_Implementer_Pos*/)) & GICInterface_IIDR_Implementer_Msk) + +#define GICInterface_IIDR_Revision_Pos 12U /*!< GICInterface IIDR: Revision Position */ +#define GICInterface_IIDR_Revision_Msk (0xFU << GICInterface_IIDR_Revision_Pos) /*!< GICInterface IIDR: Revision Mask */ +#define GICInterface_IIDR_Revision(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_Revision_Pos)) & GICInterface_IIDR_Revision_Msk) + +#define GICInterface_IIDR_Arch_version_Pos 16U /*!< GICInterface IIDR: Arch_version Position */ +#define GICInterface_IIDR_Arch_version_Msk (0xFU << GICInterface_IIDR_Arch_version_Pos) /*!< GICInterface IIDR: Arch_version Mask */ +#define GICInterface_IIDR_Arch_version(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_Arch_version_Pos)) & GICInterface_IIDR_Arch_version_Msk) + +#define GICInterface_IIDR_ProductID_Pos 20U /*!< GICInterface IIDR: ProductID Position */ +#define GICInterface_IIDR_ProductID_Msk (0xFFFU << GICInterface_IIDR_ProductID_Pos) /*!< GICInterface IIDR: ProductID Mask */ +#define GICInterface_IIDR_ProductID(x) (((uint32_t)(((uint32_t)(x)) << GICInterface_IIDR_ProductID_Pos)) & GICInterface_IIDR_ProductID_Msk) + +/* GICInterface DIR Register */ +#define GICInterface_DIR_INTID_Pos 0U /*!< PTIM DIR: INTID Position */ +#define GICInterface_DIR_INTID_Msk (0xFFFFFFU /*<< GICInterface_DIR_INTID_Pos*/) /*!< PTIM DIR: INTID Mask */ +#define GICInterface_DIR_INTID(x) (((uint32_t)(((uint32_t)(x)) /*<< GICInterface_DIR_INTID_Pos*/)) & GICInterface_DIR_INTID_Msk) +#endif /* (__GIC_PRESENT == 1U) || defined(DOXYGEN) */ + +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) +#if ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) +/** \brief Structure type to access the Private Timer +*/ +typedef struct +{ + __IOM uint32_t LOAD; //!< \brief Offset: 0x000 (R/W) Private Timer Load Register + __IOM uint32_t COUNTER; //!< \brief Offset: 0x004 (R/W) Private Timer Counter Register + __IOM uint32_t CONTROL; //!< \brief Offset: 0x008 (R/W) Private Timer Control Register + __IOM uint32_t ISR; //!< \brief Offset: 0x00C (R/W) Private Timer Interrupt Status Register + RESERVED(0[4], uint32_t) + __IOM uint32_t WLOAD; //!< \brief Offset: 0x020 (R/W) Watchdog Load Register + __IOM uint32_t WCOUNTER; //!< \brief Offset: 0x024 (R/W) Watchdog Counter Register + __IOM uint32_t WCONTROL; //!< \brief Offset: 0x028 (R/W) Watchdog Control Register + __IOM uint32_t WISR; //!< \brief Offset: 0x02C (R/W) Watchdog Interrupt Status Register + __IOM uint32_t WRESET; //!< \brief Offset: 0x030 (R/W) Watchdog Reset Status Register + __OM uint32_t WDISABLE; //!< \brief Offset: 0x034 ( /W) Watchdog Disable Register +} Timer_Type; +#define PTIM ((Timer_Type *) TIMER_BASE ) /*!< \brief Timer register struct */ + +/* PTIM Control Register */ +#define PTIM_CONTROL_Enable_Pos 0U /*!< PTIM CONTROL: Enable Position */ +#define PTIM_CONTROL_Enable_Msk (0x1U /*<< PTIM_CONTROL_Enable_Pos*/) /*!< PTIM CONTROL: Enable Mask */ +#define PTIM_CONTROL_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_CONTROL_Enable_Pos*/)) & PTIM_CONTROL_Enable_Msk) + +#define PTIM_CONTROL_AutoReload_Pos 1U /*!< PTIM CONTROL: Auto Reload Position */ +#define PTIM_CONTROL_AutoReload_Msk (0x1U << PTIM_CONTROL_AutoReload_Pos) /*!< PTIM CONTROL: Auto Reload Mask */ +#define PTIM_CONTROL_AutoReload(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_AutoReload_Pos)) & PTIM_CONTROL_AutoReload_Msk) + +#define PTIM_CONTROL_IRQenable_Pos 2U /*!< PTIM CONTROL: IRQ Enabel Position */ +#define PTIM_CONTROL_IRQenable_Msk (0x1U << PTIM_CONTROL_IRQenable_Pos) /*!< PTIM CONTROL: IRQ Enabel Mask */ +#define PTIM_CONTROL_IRQenable(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_IRQenable_Pos)) & PTIM_CONTROL_IRQenable_Msk) + +#define PTIM_CONTROL_Prescaler_Pos 8U /*!< PTIM CONTROL: Prescaler Position */ +#define PTIM_CONTROL_Prescaler_Msk (0xFFU << PTIM_CONTROL_Prescaler_Pos) /*!< PTIM CONTROL: Prescaler Mask */ +#define PTIM_CONTROL_Prescaler(x) (((uint32_t)(((uint32_t)(x)) << PTIM_CONTROL_Prescaler_Pos)) & PTIM_CONTROL_Prescaler_Msk) + +/* WCONTROL Watchdog Control Register */ +#define PTIM_WCONTROL_Enable_Pos 0U /*!< PTIM WCONTROL: Enable Position */ +#define PTIM_WCONTROL_Enable_Msk (0x1U /*<< PTIM_WCONTROL_Enable_Pos*/) /*!< PTIM WCONTROL: Enable Mask */ +#define PTIM_WCONTROL_Enable(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WCONTROL_Enable_Pos*/)) & PTIM_WCONTROL_Enable_Msk) + +#define PTIM_WCONTROL_AutoReload_Pos 1U /*!< PTIM WCONTROL: Auto Reload Position */ +#define PTIM_WCONTROL_AutoReload_Msk (0x1U << PTIM_WCONTROL_AutoReload_Pos) /*!< PTIM WCONTROL: Auto Reload Mask */ +#define PTIM_WCONTROL_AutoReload(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_AutoReload_Pos)) & PTIM_WCONTROL_AutoReload_Msk) + +#define PTIM_WCONTROL_IRQenable_Pos 2U /*!< PTIM WCONTROL: IRQ Enable Position */ +#define PTIM_WCONTROL_IRQenable_Msk (0x1U << PTIM_WCONTROL_IRQenable_Pos) /*!< PTIM WCONTROL: IRQ Enable Mask */ +#define PTIM_WCONTROL_IRQenable(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_IRQenable_Pos)) & PTIM_WCONTROL_IRQenable_Msk) + +#define PTIM_WCONTROL_Mode_Pos 3U /*!< PTIM WCONTROL: Watchdog Mode Position */ +#define PTIM_WCONTROL_Mode_Msk (0x1U << PTIM_WCONTROL_Mode_Pos) /*!< PTIM WCONTROL: Watchdog Mode Mask */ +#define PTIM_WCONTROL_Mode(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_Mode_Pos)) & PTIM_WCONTROL_Mode_Msk) + +#define PTIM_WCONTROL_Presacler_Pos 8U /*!< PTIM WCONTROL: Prescaler Position */ +#define PTIM_WCONTROL_Presacler_Msk (0xFFU << PTIM_WCONTROL_Presacler_Pos) /*!< PTIM WCONTROL: Prescaler Mask */ +#define PTIM_WCONTROL_Presacler(x) (((uint32_t)(((uint32_t)(x)) << PTIM_WCONTROL_Presacler_Pos)) & PTIM_WCONTROL_Presacler_Msk) + +/* WISR Watchdog Interrupt Status Register */ +#define PTIM_WISR_EventFlag_Pos 0U /*!< PTIM WISR: Event Flag Position */ +#define PTIM_WISR_EventFlag_Msk (0x1U /*<< PTIM_WISR_EventFlag_Pos*/) /*!< PTIM WISR: Event Flag Mask */ +#define PTIM_WISR_EventFlag(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WISR_EventFlag_Pos*/)) & PTIM_WISR_EventFlag_Msk) + +/* WRESET Watchdog Reset Status */ +#define PTIM_WRESET_ResetFlag_Pos 0U /*!< PTIM WRESET: Reset Flag Position */ +#define PTIM_WRESET_ResetFlag_Msk (0x1U /*<< PTIM_WRESET_ResetFlag_Pos*/) /*!< PTIM WRESET: Reset Flag Mask */ +#define PTIM_WRESET_ResetFlag(x) (((uint32_t)(((uint32_t)(x)) /*<< PTIM_WRESET_ResetFlag_Pos*/)) & PTIM_WRESET_ResetFlag_Msk) + +#endif /* ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) */ +#endif /* (__TIM_PRESENT == 1U) || defined(DOXYGEN) */ + + /******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - L1 Cache Functions + - L2C-310 Cache Controller Functions + - PL1 Timer Functions + - GIC Functions + - MMU Functions + ******************************************************************************/ + +/* ########################## L1 Cache functions ################################# */ + +/** \brief Enable Caches by setting I and C bits in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_EnableCaches(void) { + __set_SCTLR( __get_SCTLR() | SCTLR_I_Msk | SCTLR_C_Msk); + __ISB(); +} + +/** \brief Disable Caches by clearing I and C bits in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_DisableCaches(void) { + __set_SCTLR( __get_SCTLR() & (~SCTLR_I_Msk) & (~SCTLR_C_Msk)); + __ISB(); +} + +/** \brief Enable Branch Prediction by setting Z bit in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_EnableBTAC(void) { + __set_SCTLR( __get_SCTLR() | SCTLR_Z_Msk); + __ISB(); +} + +/** \brief Disable Branch Prediction by clearing Z bit in SCTLR register. +*/ +__STATIC_FORCEINLINE void L1C_DisableBTAC(void) { + __set_SCTLR( __get_SCTLR() & (~SCTLR_Z_Msk)); + __ISB(); +} + +/** \brief Invalidate entire branch predictor array +*/ +__STATIC_FORCEINLINE void L1C_InvalidateBTAC(void) { + __set_BPIALL(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new state +} + +/** \brief Clean instruction cache line by address. +* \param [in] va Pointer to instructions to clear the cache for. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateICacheMVA(void *va) { + __set_ICIMVAC((uint32_t)va); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new I cache state +} + +/** \brief Invalidate the whole instruction cache +*/ +__STATIC_FORCEINLINE void L1C_InvalidateICacheAll(void) { + __set_ICIALLU(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new I cache state +} + +/** \brief Clean data cache line by address. +* \param [in] va Pointer to data to clear the cache for. +*/ +__STATIC_FORCEINLINE void L1C_CleanDCacheMVA(void *va) { + __set_DCCMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Invalidate data cache line by address. +* \param [in] va Pointer to data to invalidate the cache for. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateDCacheMVA(void *va) { + __set_DCIMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Clean and Invalidate data cache by address. +* \param [in] va Pointer to data to invalidate the cache for. +*/ +__STATIC_FORCEINLINE void L1C_CleanInvalidateDCacheMVA(void *va) { + __set_DCCIMVAC((uint32_t)va); + __DMB(); //ensure the ordering of data cache maintenance operations and their effects +} + +/** \brief Calculate log2 rounded up +* - log(0) => 0 +* - log(1) => 0 +* - log(2) => 1 +* - log(3) => 2 +* - log(4) => 2 +* - log(5) => 3 +* : : +* - log(16) => 4 +* - log(32) => 5 +* : : +* \param [in] n input value parameter +* \return log2(n) +*/ +__STATIC_FORCEINLINE uint8_t __log2_up(uint32_t n) +{ + if (n < 2U) { + return 0U; + } + uint8_t log = 0U; + uint32_t t = n; + while(t > 1U) + { + log++; + t >>= 1U; + } + if (n & 1U) { log++; } + return log; +} + +/** \brief Apply cache maintenance to given cache level. +* \param [in] level cache level to be maintained +* \param [in] maint 0 - invalidate, 1 - clean, otherwise - invalidate and clean +*/ +__STATIC_FORCEINLINE void __L1C_MaintainDCacheSetWay(uint32_t level, uint32_t maint) +{ + uint32_t Dummy; + uint32_t ccsidr; + uint32_t num_sets; + uint32_t num_ways; + uint32_t shift_way; + uint32_t log2_linesize; + uint8_t log2_num_ways; + + Dummy = level << 1U; + /* set csselr, select ccsidr register */ + __set_CSSELR(Dummy); + /* get current ccsidr register */ + ccsidr = __get_CCSIDR(); + num_sets = ((ccsidr & 0x0FFFE000U) >> 13U) + 1U; + num_ways = ((ccsidr & 0x00001FF8U) >> 3U) + 1U; + log2_linesize = (ccsidr & 0x00000007U) + 2U + 2U; + log2_num_ways = __log2_up(num_ways); + if (log2_num_ways > 32U) { + return; // FATAL ERROR + } + shift_way = 32U - log2_num_ways; + for(int32_t way = num_ways-1; way >= 0; way--) + { + for(int32_t set = num_sets-1; set >= 0; set--) + { + Dummy = (level << 1U) | (((uint32_t)set) << log2_linesize) | (((uint32_t)way) << shift_way); + switch (maint) + { + case 0U: __set_DCISW(Dummy); break; + case 1U: __set_DCCSW(Dummy); break; + default: __set_DCCISW(Dummy); break; + } + } + } + __DMB(); +} + +/** \brief Clean and Invalidate the entire data or unified cache +* \param [in] op 0 - invalidate, 1 - clean, otherwise - invalidate and clean +*/ +__STATIC_FORCEINLINE void L1C_CleanInvalidateCache(uint32_t op) { + uint32_t clidr; + uint32_t cache_type; + clidr = __get_CLIDR(); + for(uint32_t i = 0U; i<7U; i++) + { + cache_type = (clidr >> i*3U) & 0x7UL; + if ((cache_type >= 2U) && (cache_type <= 4U)) + { + __L1C_MaintainDCacheSetWay(i, op); + } + } +} + +/** \brief Invalidate the whole data cache. +*/ +__STATIC_FORCEINLINE void L1C_InvalidateDCacheAll(void) { + L1C_CleanInvalidateCache(0); +} + +/** \brief Clean the whole data cache. + */ +__STATIC_FORCEINLINE void L1C_CleanDCacheAll(void) { + L1C_CleanInvalidateCache(1); +} + +/** \brief Clean and invalidate the whole data cache. + */ +__STATIC_FORCEINLINE void L1C_CleanInvalidateDCacheAll(void) { + L1C_CleanInvalidateCache(2); +} + +/* ########################## L2 Cache functions ################################# */ +#if (defined(__L2C_PRESENT) && (__L2C_PRESENT == 1U)) || \ + defined(DOXYGEN) +/** \brief Cache Sync operation by writing CACHE_SYNC register. +*/ +__STATIC_INLINE void L2C_Sync(void) +{ + L2C_310->CACHE_SYNC = 0x0; +} + +/** \brief Read cache controller cache ID from CACHE_ID register. + * \return L2C_310_TypeDef::CACHE_ID + */ +__STATIC_INLINE int L2C_GetID (void) +{ + return L2C_310->CACHE_ID; +} + +/** \brief Read cache controller cache type from CACHE_TYPE register. +* \return L2C_310_TypeDef::CACHE_TYPE +*/ +__STATIC_INLINE int L2C_GetType (void) +{ + return L2C_310->CACHE_TYPE; +} + +/** \brief Invalidate all cache by way +*/ +__STATIC_INLINE void L2C_InvAllByWay (void) +{ + unsigned int assoc; + + if (L2C_310->AUX_CNT & (1U << 16U)) { + assoc = 16U; + } else { + assoc = 8U; + } + + L2C_310->INV_WAY = (1U << assoc) - 1U; + while(L2C_310->INV_WAY & ((1U << assoc) - 1U)); //poll invalidate + + L2C_Sync(); +} + +/** \brief Clean and Invalidate all cache by way +*/ +__STATIC_INLINE void L2C_CleanInvAllByWay (void) +{ + unsigned int assoc; + + if (L2C_310->AUX_CNT & (1U << 16U)) { + assoc = 16U; + } else { + assoc = 8U; + } + + L2C_310->CLEAN_INV_WAY = (1U << assoc) - 1U; + while(L2C_310->CLEAN_INV_WAY & ((1U << assoc) - 1U)); //poll invalidate + + L2C_Sync(); +} + +/** \brief Enable Level 2 Cache +*/ +__STATIC_INLINE void L2C_Enable(void) +{ + L2C_310->CONTROL = 0; + L2C_310->INTERRUPT_CLEAR = 0x000001FFuL; + L2C_310->DEBUG_CONTROL = 0; + L2C_310->DATA_LOCK_0_WAY = 0; + L2C_310->CACHE_SYNC = 0; + L2C_310->CONTROL = 0x01; + L2C_Sync(); +} + +/** \brief Disable Level 2 Cache +*/ +__STATIC_INLINE void L2C_Disable(void) +{ + L2C_310->CONTROL = 0x00; + L2C_Sync(); +} + +/** \brief Invalidate cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_InvPa (void *pa) +{ + L2C_310->INV_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} + +/** \brief Clean cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_CleanPa (void *pa) +{ + L2C_310->CLEAN_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} + +/** \brief Clean and invalidate cache by physical address +* \param [in] pa Pointer to data to invalidate cache for. +*/ +__STATIC_INLINE void L2C_CleanInvPa (void *pa) +{ + L2C_310->CLEAN_INV_LINE_PA = (unsigned int)pa; + L2C_Sync(); +} +#endif + +/* ########################## GIC functions ###################################### */ +#if (defined(__GIC_PRESENT) && (__GIC_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/** \brief Enable the interrupt distributor using the GIC's CTLR register. +*/ +__STATIC_INLINE void GIC_EnableDistributor(void) +{ + GICDistributor->CTLR |= 1U; +} + +/** \brief Disable the interrupt distributor using the GIC's CTLR register. +*/ +__STATIC_INLINE void GIC_DisableDistributor(void) +{ + GICDistributor->CTLR &=~1U; +} + +/** \brief Read the GIC's TYPER register. +* \return GICDistributor_Type::TYPER +*/ +__STATIC_INLINE uint32_t GIC_DistributorInfo(void) +{ + return (GICDistributor->TYPER); +} + +/** \brief Reads the GIC's IIDR register. +* \return GICDistributor_Type::IIDR +*/ +__STATIC_INLINE uint32_t GIC_DistributorImplementer(void) +{ + return (GICDistributor->IIDR); +} + +/** \brief Sets the GIC's ITARGETSR register for the given interrupt. +* \param [in] IRQn Interrupt to be configured. +* \param [in] cpu_target CPU interfaces to assign this interrupt to. +*/ +__STATIC_INLINE void GIC_SetTarget(IRQn_Type IRQn, uint32_t cpu_target) +{ + uint32_t mask = GICDistributor->ITARGETSR[IRQn / 4U] & ~(0xFFUL << ((IRQn % 4U) * 8U)); + GICDistributor->ITARGETSR[IRQn / 4U] = mask | ((cpu_target & 0xFFUL) << ((IRQn % 4U) * 8U)); +} + +/** \brief Read the GIC's ITARGETSR register. +* \param [in] IRQn Interrupt to acquire the configuration for. +* \return GICDistributor_Type::ITARGETSR +*/ +__STATIC_INLINE uint32_t GIC_GetTarget(IRQn_Type IRQn) +{ + return (GICDistributor->ITARGETSR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; +} + +/** \brief Enable the CPU's interrupt interface. +*/ +__STATIC_INLINE void GIC_EnableInterface(void) +{ + GICInterface->CTLR |= 1U; //enable interface +} + +/** \brief Disable the CPU's interrupt interface. +*/ +__STATIC_INLINE void GIC_DisableInterface(void) +{ + GICInterface->CTLR &=~1U; //disable distributor +} + +/** \brief Read the CPU's IAR register. +* \return GICInterface_Type::IAR +*/ +__STATIC_INLINE IRQn_Type GIC_AcknowledgePending(void) +{ + return (IRQn_Type)(GICInterface->IAR); +} + +/** \brief Writes the given interrupt number to the CPU's EOIR register. +* \param [in] IRQn The interrupt to be signaled as finished. +*/ +__STATIC_INLINE void GIC_EndInterrupt(IRQn_Type IRQn) +{ + GICInterface->EOIR = IRQn; +} + +/** \brief Enables the given interrupt using GIC's ISENABLER register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_EnableIRQ(IRQn_Type IRQn) +{ + GICDistributor->ISENABLER[IRQn / 32U] = 1U << (IRQn % 32U); +} + +/** \brief Get interrupt enable status using GIC's ISENABLER register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - interrupt is not enabled, 1 - interrupt is enabled. +*/ +__STATIC_INLINE uint32_t GIC_GetEnableIRQ(IRQn_Type IRQn) +{ + return (GICDistributor->ISENABLER[IRQn / 32U] >> (IRQn % 32U)) & 1UL; +} + +/** \brief Disables the given interrupt using GIC's ICENABLER register. +* \param [in] IRQn The interrupt to be disabled. +*/ +__STATIC_INLINE void GIC_DisableIRQ(IRQn_Type IRQn) +{ + GICDistributor->ICENABLER[IRQn / 32U] = 1U << (IRQn % 32U); +} + +/** \brief Get interrupt pending status from GIC's ISPENDR register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - interrupt is not pending, 1 - interrupt is pendig. +*/ +__STATIC_INLINE uint32_t GIC_GetPendingIRQ(IRQn_Type IRQn) +{ + uint32_t pend; + + if (IRQn >= 16U) { + pend = (GICDistributor->ISPENDR[IRQn / 32U] >> (IRQn % 32U)) & 1UL; + } else { + // INTID 0-15 Software Generated Interrupt + pend = (GICDistributor->SPENDSGIR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; + // No CPU identification offered + if (pend != 0U) { + pend = 1U; + } else { + pend = 0U; + } + } + + return (pend); +} + +/** \brief Sets the given interrupt as pending using GIC's ISPENDR register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if (IRQn >= 16U) { + GICDistributor->ISPENDR[IRQn / 32U] = 1U << (IRQn % 32U); + } else { + // INTID 0-15 Software Generated Interrupt + // Forward the interrupt to the CPU interface that requested it + GICDistributor->SGIR = (IRQn | 0x02000000U); + } +} + +/** \brief Clears the given interrupt from being pending using GIC's ICPENDR register. +* \param [in] IRQn The interrupt to be enabled. +*/ +__STATIC_INLINE void GIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if (IRQn >= 16U) { + GICDistributor->ICPENDR[IRQn / 32U] = 1U << (IRQn % 32U); + } else { + // INTID 0-15 Software Generated Interrupt + GICDistributor->CPENDSGIR[IRQn / 4U] = 1U << ((IRQn % 4U) * 8U); + } +} + +/** \brief Sets the interrupt configuration using GIC's ICFGR register. +* \param [in] IRQn The interrupt to be configured. +* \param [in] int_config Int_config field value. Bit 0: Reserved (0 - N-N model, 1 - 1-N model for some GIC before v1) +* Bit 1: 0 - level sensitive, 1 - edge triggered +*/ +__STATIC_INLINE void GIC_SetConfiguration(IRQn_Type IRQn, uint32_t int_config) +{ + uint32_t icfgr = GICDistributor->ICFGR[IRQn / 16U]; /* read current register content */ + uint32_t shift = (IRQn % 16U) << 1U; /* calculate shift value */ + + int_config &= 3U; /* only 2 bits are valid */ + icfgr &= (~(3U << shift)); /* clear bits to change */ + icfgr |= ( int_config << shift); /* set new configuration */ + + GICDistributor->ICFGR[IRQn / 16U] = icfgr; /* write new register content */ +} + +/** \brief Get the interrupt configuration from the GIC's ICFGR register. +* \param [in] IRQn Interrupt to acquire the configuration for. +* \return Int_config field value. Bit 0: Reserved (0 - N-N model, 1 - 1-N model for some GIC before v1) +* Bit 1: 0 - level sensitive, 1 - edge triggered +*/ +__STATIC_INLINE uint32_t GIC_GetConfiguration(IRQn_Type IRQn) +{ + return (GICDistributor->ICFGR[IRQn / 16U] >> ((IRQn % 16U) >> 1U)); +} + +/** \brief Set the priority for the given interrupt in the GIC's IPRIORITYR register. +* \param [in] IRQn The interrupt to be configured. +* \param [in] priority The priority for the interrupt, lower values denote higher priorities. +*/ +__STATIC_INLINE void GIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + uint32_t mask = GICDistributor->IPRIORITYR[IRQn / 4U] & ~(0xFFUL << ((IRQn % 4U) * 8U)); + GICDistributor->IPRIORITYR[IRQn / 4U] = mask | ((priority & 0xFFUL) << ((IRQn % 4U) * 8U)); +} + +/** \brief Read the current interrupt priority from GIC's IPRIORITYR register. +* \param [in] IRQn The interrupt to be queried. +*/ +__STATIC_INLINE uint32_t GIC_GetPriority(IRQn_Type IRQn) +{ + return (GICDistributor->IPRIORITYR[IRQn / 4U] >> ((IRQn % 4U) * 8U)) & 0xFFUL; +} + +/** \brief Set the interrupt priority mask using CPU's PMR register. +* \param [in] priority Priority mask to be set. +*/ +__STATIC_INLINE void GIC_SetInterfacePriorityMask(uint32_t priority) +{ + GICInterface->PMR = priority & 0xFFUL; //set priority mask +} + +/** \brief Read the current interrupt priority mask from CPU's PMR register. +* \result GICInterface_Type::PMR +*/ +__STATIC_INLINE uint32_t GIC_GetInterfacePriorityMask(void) +{ + return GICInterface->PMR; +} + +/** \brief Configures the group priority and subpriority split point using CPU's BPR register. +* \param [in] binary_point Amount of bits used as subpriority. +*/ +__STATIC_INLINE void GIC_SetBinaryPoint(uint32_t binary_point) +{ + GICInterface->BPR = binary_point & 7U; //set binary point +} + +/** \brief Read the current group priority and subpriority split point from CPU's BPR register. +* \return GICInterface_Type::BPR +*/ +__STATIC_INLINE uint32_t GIC_GetBinaryPoint(void) +{ + return GICInterface->BPR; +} + +/** \brief Get the status for a given interrupt. +* \param [in] IRQn The interrupt to get status for. +* \return 0 - not pending/active, 1 - pending, 2 - active, 3 - pending and active +*/ +__STATIC_INLINE uint32_t GIC_GetIRQStatus(IRQn_Type IRQn) +{ + uint32_t pending, active; + + active = ((GICDistributor->ISACTIVER[IRQn / 32U]) >> (IRQn % 32U)) & 1UL; + pending = ((GICDistributor->ISPENDR[IRQn / 32U]) >> (IRQn % 32U)) & 1UL; + + return ((active<<1U) | pending); +} + +/** \brief Generate a software interrupt using GIC's SGIR register. +* \param [in] IRQn Software interrupt to be generated. +* \param [in] target_list List of CPUs the software interrupt should be forwarded to. +* \param [in] filter_list Filter to be applied to determine interrupt receivers. +*/ +__STATIC_INLINE void GIC_SendSGI(IRQn_Type IRQn, uint32_t target_list, uint32_t filter_list) +{ + GICDistributor->SGIR = ((filter_list & 3U) << 24U) | ((target_list & 0xFFUL) << 16U) | (IRQn & 0x0FUL); +} + +/** \brief Get the interrupt number of the highest interrupt pending from CPU's HPPIR register. +* \return GICInterface_Type::HPPIR +*/ +__STATIC_INLINE uint32_t GIC_GetHighPendingIRQ(void) +{ + return GICInterface->HPPIR; +} + +/** \brief Provides information about the implementer and revision of the CPU interface. +* \return GICInterface_Type::IIDR +*/ +__STATIC_INLINE uint32_t GIC_GetInterfaceId(void) +{ + return GICInterface->IIDR; +} + +/** \brief Set the interrupt group from the GIC's IGROUPR register. +* \param [in] IRQn The interrupt to be queried. +* \param [in] group Interrupt group number: 0 - Group 0, 1 - Group 1 +*/ +__STATIC_INLINE void GIC_SetGroup(IRQn_Type IRQn, uint32_t group) +{ + uint32_t igroupr = GICDistributor->IGROUPR[IRQn / 32U]; + uint32_t shift = (IRQn % 32U); + + igroupr &= (~(1U << shift)); + igroupr |= ( (group & 1U) << shift); + + GICDistributor->IGROUPR[IRQn / 32U] = igroupr; +} +#define GIC_SetSecurity GIC_SetGroup + +/** \brief Get the interrupt group from the GIC's IGROUPR register. +* \param [in] IRQn The interrupt to be queried. +* \return 0 - Group 0, 1 - Group 1 +*/ +__STATIC_INLINE uint32_t GIC_GetGroup(IRQn_Type IRQn) +{ + return (GICDistributor->IGROUPR[IRQn / 32U] >> (IRQn % 32U)) & 1UL; +} +#define GIC_GetSecurity GIC_GetGroup + +/** \brief Initialize the interrupt distributor. +*/ +__STATIC_INLINE void GIC_DistInit(void) +{ + uint32_t i; + uint32_t num_irq = 0U; + uint32_t priority_field; + + //A reset sets all bits in the IGROUPRs corresponding to the SPIs to 0, + //configuring all of the interrupts as Secure. + + //Disable interrupt forwarding + GIC_DisableDistributor(); + //Get the maximum number of interrupts that the GIC supports + num_irq = 32U * ((GIC_DistributorInfo() & 0x1FU) + 1U); + + /* Priority level is implementation defined. + To determine the number of priority bits implemented write 0xFF to an IPRIORITYR + priority field and read back the value stored.*/ + GIC_SetPriority((IRQn_Type)0U, 0xFFU); + priority_field = GIC_GetPriority((IRQn_Type)0U); + + for (i = 32U; i < num_irq; i++) + { + //Disable the SPI interrupt + GIC_DisableIRQ((IRQn_Type)i); + //Set level-sensitive (and N-N model) + GIC_SetConfiguration((IRQn_Type)i, 0U); + //Set priority + GIC_SetPriority((IRQn_Type)i, priority_field/2U); + //Set target list to CPU0 + GIC_SetTarget((IRQn_Type)i, 1U); + } + //Enable distributor + GIC_EnableDistributor(); +} + +/** \brief Initialize the CPU's interrupt interface +*/ +__STATIC_INLINE void GIC_CPUInterfaceInit(void) +{ + uint32_t i; + uint32_t priority_field; + + //A reset sets all bits in the IGROUPRs corresponding to the SPIs to 0, + //configuring all of the interrupts as Secure. + + //Disable interrupt forwarding + GIC_DisableInterface(); + + /* Priority level is implementation defined. + To determine the number of priority bits implemented write 0xFF to an IPRIORITYR + priority field and read back the value stored.*/ + GIC_SetPriority((IRQn_Type)0U, 0xFFU); + priority_field = GIC_GetPriority((IRQn_Type)0U); + + //SGI and PPI + for (i = 0U; i < 32U; i++) + { + if(i > 15U) { + //Set level-sensitive (and N-N model) for PPI + GIC_SetConfiguration((IRQn_Type)i, 0U); + } + //Disable SGI and PPI interrupts + GIC_DisableIRQ((IRQn_Type)i); + //Set priority + GIC_SetPriority((IRQn_Type)i, priority_field/2U); + } + //Enable interface + GIC_EnableInterface(); + //Set binary point to 0 + GIC_SetBinaryPoint(0U); + //Set priority mask + GIC_SetInterfacePriorityMask(0xFFU); +} + +/** \brief Initialize and enable the GIC +*/ +__STATIC_INLINE void GIC_Enable(void) +{ + GIC_DistInit(); + GIC_CPUInterfaceInit(); //per CPU +} +#endif + +/* ########################## Generic Timer functions ############################ */ +#if (defined(__TIM_PRESENT) && (__TIM_PRESENT == 1U)) || \ + defined(DOXYGEN) + +/* PL1 Physical Timer */ +#if (__CORTEX_A == 7U) || defined(DOXYGEN) + +/** \brief Physical Timer Control register */ +typedef union +{ + struct + { + uint32_t ENABLE:1; /*!< \brief bit: 0 Enables the timer. */ + uint32_t IMASK:1; /*!< \brief bit: 1 Timer output signal mask bit. */ + uint32_t ISTATUS:1; /*!< \brief bit: 2 The status of the timer. */ + RESERVED(0:29, uint32_t) + } b; /*!< \brief Structure used for bit access */ + uint32_t w; /*!< \brief Type used for word access */ +} CNTP_CTL_Type; + +/** \brief Configures the frequency the timer shall run at. +* \param [in] value The timer frequency in Hz. +*/ +__STATIC_INLINE void PL1_SetCounterFrequency(uint32_t value) +{ + __set_CNTFRQ(value); + __ISB(); +} + +/** \brief Sets the reset value of the timer. +* \param [in] value The value the timer is loaded with. +*/ +__STATIC_INLINE void PL1_SetLoadValue(uint32_t value) +{ + __set_CNTP_TVAL(value); + __ISB(); +} + +/** \brief Get the current counter value. +* \return Current counter value. +*/ +__STATIC_INLINE uint32_t PL1_GetCurrentValue(void) +{ + return(__get_CNTP_TVAL()); +} + +/** \brief Get the current physical counter value. +* \return Current physical counter value. +*/ +__STATIC_INLINE uint64_t PL1_GetCurrentPhysicalValue(void) +{ + return(__get_CNTPCT()); +} + +/** \brief Set the physical compare value. +* \param [in] value New physical timer compare value. +*/ +__STATIC_INLINE void PL1_SetPhysicalCompareValue(uint64_t value) +{ + __set_CNTP_CVAL(value); + __ISB(); +} + +/** \brief Get the physical compare value. +* \return Physical compare value. +*/ +__STATIC_INLINE uint64_t PL1_GetPhysicalCompareValue(void) +{ + return(__get_CNTP_CVAL()); +} + +/** \brief Configure the timer by setting the control value. +* \param [in] value New timer control value. +*/ +__STATIC_INLINE void PL1_SetControl(uint32_t value) +{ + __set_CNTP_CTL(value); + __ISB(); +} + +/** \brief Get the control value. +* \return Control value. +*/ +__STATIC_INLINE uint32_t PL1_GetControl(void) +{ + return(__get_CNTP_CTL()); +} + +/******************************* VIRTUAL TIMER *******************************/ +/** \brief Virtual Timer Control register */ + +/** \brief Sets the reset value of the virtual timer. +* \param [in] value The value the virtual timer is loaded with. +*/ +__STATIC_INLINE void VL1_SetCurrentTimerValue(uint32_t value) +{ + __set_CNTV_TVAL(value); + __ISB(); +} + +/** \brief Get the current virtual timer value. +* \return Current virtual timer value. +*/ +__STATIC_INLINE uint32_t VL1_GetCurrentTimerValue(void) +{ + return(__get_CNTV_TVAL()); +} + +/** \brief Get the current virtual count value. +* \return Current virtual count value. +*/ +__STATIC_INLINE uint64_t VL1_GetCurrentCountValue(void) +{ + return(__get_CNTVCT()); +} + +/** \brief Set the virtual timer compare value. +* \param [in] value New virtual timer compare value. +*/ +__STATIC_INLINE void VL1_SetTimerCompareValue(uint64_t value) +{ + __set_CNTV_CVAL(value); + __ISB(); +} + +/** \brief Get the virtual timer compare value. +* \return Virtual timer compare value. +*/ +__STATIC_INLINE uint64_t VL1_GetTimerCompareValue(void) +{ + return(__get_CNTV_CVAL()); +} + +/** \brief Configure the virtual timer by setting the control value. +* \param [in] value New virtual timer control value. +*/ +__STATIC_INLINE void VL1_SetControl(uint32_t value) +{ + __set_CNTV_CTL(value); + __ISB(); +} + +/** \brief Get the virtual timer control value. +* \return Virtual timer control value. +*/ +__STATIC_INLINE uint32_t VL1_GetControl(void) +{ + return(__get_CNTV_CTL()); +} +/***************************** VIRTUAL TIMER END *****************************/ +#endif + +/* Private Timer */ +#if ((__CORTEX_A == 5U) || (__CORTEX_A == 9U)) || defined(DOXYGEN) +/** \brief Set the load value to timers LOAD register. +* \param [in] value The load value to be set. +*/ +__STATIC_INLINE void PTIM_SetLoadValue(uint32_t value) +{ + PTIM->LOAD = value; +} + +/** \brief Get the load value from timers LOAD register. +* \return Timer_Type::LOAD +*/ +__STATIC_INLINE uint32_t PTIM_GetLoadValue(void) +{ + return(PTIM->LOAD); +} + +/** \brief Set current counter value from its COUNTER register. +*/ +__STATIC_INLINE void PTIM_SetCurrentValue(uint32_t value) +{ + PTIM->COUNTER = value; +} + +/** \brief Get current counter value from timers COUNTER register. +* \result Timer_Type::COUNTER +*/ +__STATIC_INLINE uint32_t PTIM_GetCurrentValue(void) +{ + return(PTIM->COUNTER); +} + +/** \brief Configure the timer using its CONTROL register. +* \param [in] value The new configuration value to be set. +*/ +__STATIC_INLINE void PTIM_SetControl(uint32_t value) +{ + PTIM->CONTROL = value; +} + +/** ref Timer_Type::CONTROL Get the current timer configuration from its CONTROL register. +* \return Timer_Type::CONTROL +*/ +__STATIC_INLINE uint32_t PTIM_GetControl(void) +{ + return(PTIM->CONTROL); +} + +/** ref Timer_Type::CONTROL Get the event flag in timers ISR register. +* \return 0 - flag is not set, 1- flag is set +*/ +__STATIC_INLINE uint32_t PTIM_GetEventFlag(void) +{ + return (PTIM->ISR & 1UL); +} + +/** ref Timer_Type::CONTROL Clears the event flag in timers ISR register. +*/ +__STATIC_INLINE void PTIM_ClearEventFlag(void) +{ + PTIM->ISR = 1; +} +#endif +#endif + +/* ########################## MMU functions ###################################### */ + +#define SECTION_DESCRIPTOR (0x2) +#define SECTION_MASK (0xFFFFFFFC) + +#define SECTION_TEXCB_MASK (0xFFFF8FF3) +#define SECTION_B_SHIFT (2) +#define SECTION_C_SHIFT (3) +#define SECTION_TEX0_SHIFT (12) +#define SECTION_TEX1_SHIFT (13) +#define SECTION_TEX2_SHIFT (14) + +#define SECTION_XN_MASK (0xFFFFFFEF) +#define SECTION_XN_SHIFT (4) + +#define SECTION_DOMAIN_MASK (0xFFFFFE1F) +#define SECTION_DOMAIN_SHIFT (5) + +#define SECTION_P_MASK (0xFFFFFDFF) +#define SECTION_P_SHIFT (9) + +#define SECTION_AP_MASK (0xFFFF73FF) +#define SECTION_AP_SHIFT (10) +#define SECTION_AP2_SHIFT (15) + +#define SECTION_S_MASK (0xFFFEFFFF) +#define SECTION_S_SHIFT (16) + +#define SECTION_NG_MASK (0xFFFDFFFF) +#define SECTION_NG_SHIFT (17) + +#define SECTION_NS_MASK (0xFFF7FFFF) +#define SECTION_NS_SHIFT (19) + +#define PAGE_L1_DESCRIPTOR (0x1) +#define PAGE_L1_MASK (0xFFFFFFFC) + +#define PAGE_L2_4K_DESC (0x2) +#define PAGE_L2_4K_MASK (0xFFFFFFFD) + +#define PAGE_L2_64K_DESC (0x1) +#define PAGE_L2_64K_MASK (0xFFFFFFFC) + +#define PAGE_4K_TEXCB_MASK (0xFFFFFE33) +#define PAGE_4K_B_SHIFT (2) +#define PAGE_4K_C_SHIFT (3) +#define PAGE_4K_TEX0_SHIFT (6) +#define PAGE_4K_TEX1_SHIFT (7) +#define PAGE_4K_TEX2_SHIFT (8) + +#define PAGE_64K_TEXCB_MASK (0xFFFF8FF3) +#define PAGE_64K_B_SHIFT (2) +#define PAGE_64K_C_SHIFT (3) +#define PAGE_64K_TEX0_SHIFT (12) +#define PAGE_64K_TEX1_SHIFT (13) +#define PAGE_64K_TEX2_SHIFT (14) + +#define PAGE_TEXCB_MASK (0xFFFF8FF3) +#define PAGE_B_SHIFT (2) +#define PAGE_C_SHIFT (3) +#define PAGE_TEX_SHIFT (12) + +#define PAGE_XN_4K_MASK (0xFFFFFFFE) +#define PAGE_XN_4K_SHIFT (0) +#define PAGE_XN_64K_MASK (0xFFFF7FFF) +#define PAGE_XN_64K_SHIFT (15) + +#define PAGE_DOMAIN_MASK (0xFFFFFE1F) +#define PAGE_DOMAIN_SHIFT (5) + +#define PAGE_P_MASK (0xFFFFFDFF) +#define PAGE_P_SHIFT (9) + +#define PAGE_AP_MASK (0xFFFFFDCF) +#define PAGE_AP_SHIFT (4) +#define PAGE_AP2_SHIFT (9) + +#define PAGE_S_MASK (0xFFFFFBFF) +#define PAGE_S_SHIFT (10) + +#define PAGE_NG_MASK (0xFFFFF7FF) +#define PAGE_NG_SHIFT (11) + +#define PAGE_NS_MASK (0xFFFFFFF7) +#define PAGE_NS_SHIFT (3) + +#define OFFSET_1M (0x00100000) +#define OFFSET_64K (0x00010000) +#define OFFSET_4K (0x00001000) + +#define DESCRIPTOR_FAULT (0x00000000) + +/* Attributes enumerations */ + +/* Region size attributes */ +typedef enum +{ + SECTION, + PAGE_4k, + PAGE_64k, +} mmu_region_size_Type; + +/* Region type attributes */ +typedef enum +{ + NORMAL, + DEVICE, + SHARED_DEVICE, + NON_SHARED_DEVICE, + STRONGLY_ORDERED +} mmu_memory_Type; + +/* Region cacheability attributes */ +typedef enum +{ + NON_CACHEABLE, + WB_WA, + WT, + WB_NO_WA, +} mmu_cacheability_Type; + +/* Region parity check attributes */ +typedef enum +{ + ECC_DISABLED, + ECC_ENABLED, +} mmu_ecc_check_Type; + +/* Region execution attributes */ +typedef enum +{ + EXECUTE, + NON_EXECUTE, +} mmu_execute_Type; + +/* Region global attributes */ +typedef enum +{ + GLOBAL, + NON_GLOBAL, +} mmu_global_Type; + +/* Region shareability attributes */ +typedef enum +{ + NON_SHARED, + SHARED, +} mmu_shared_Type; + +/* Region security attributes */ +typedef enum +{ + SECURE, + NON_SECURE, +} mmu_secure_Type; + +/* Region access attributes */ +typedef enum +{ + NO_ACCESS, + RW, + READ, +} mmu_access_Type; + +/* Memory Region definition */ +typedef struct RegionStruct { + mmu_region_size_Type rg_t; + mmu_memory_Type mem_t; + uint8_t domain; + mmu_cacheability_Type inner_norm_t; + mmu_cacheability_Type outer_norm_t; + mmu_ecc_check_Type e_t; + mmu_execute_Type xn_t; + mmu_global_Type g_t; + mmu_secure_Type sec_t; + mmu_access_Type priv_t; + mmu_access_Type user_t; + mmu_shared_Type sh_t; + +} mmu_region_attributes_Type; + +//Following macros define the descriptors and attributes +//Sect_Normal. Outer & inner wb/wa, non-shareable, executable, rw, domain 0 +#define section_normal(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_NC. Outer & inner non-cacheable, non-shareable, executable, rw, domain 0 +#define section_normal_nc(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_Cod. Outer & inner wb/wa, non-shareable, executable, ro, domain 0 +#define section_normal_cod(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_RO. Sect_Normal_Cod, but not executable +#define section_normal_ro(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Normal_RW. Sect_Normal_Cod, but writeable and not executable +#define section_normal_rw(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = WB_WA; \ + region.outer_norm_t = WB_WA; \ + region.mem_t = NORMAL; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); +//Sect_SO. Strongly-ordered (therefore shareable), not executable, rw, domain 0, base addr 0 +#define section_so(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Device_RO. Device, non-shareable, non-executable, ro, domain 0, base addr 0 +#define section_device_ro(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = READ; \ + region.user_t = READ; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); + +//Sect_Device_RW. Sect_Device_RO, but writeable +#define section_device_rw(descriptor_l1, region) region.rg_t = SECTION; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = STRONGLY_ORDERED; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetSectionDescriptor(&descriptor_l1, region); +//Page_4k_Device_RW. Shared device, not executable, rw, domain 0 +#define page4k_device_rw(descriptor_l1, descriptor_l2, region) region.rg_t = PAGE_4k; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = SHARED_DEVICE; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetPageDescriptor(&descriptor_l1, &descriptor_l2, region); + +//Page_64k_Device_RW. Shared device, not executable, rw, domain 0 +#define page64k_device_rw(descriptor_l1, descriptor_l2, region) region.rg_t = PAGE_64k; \ + region.domain = 0x0; \ + region.e_t = ECC_DISABLED; \ + region.g_t = GLOBAL; \ + region.inner_norm_t = NON_CACHEABLE; \ + region.outer_norm_t = NON_CACHEABLE; \ + region.mem_t = SHARED_DEVICE; \ + region.sec_t = SECURE; \ + region.xn_t = NON_EXECUTE; \ + region.priv_t = RW; \ + region.user_t = RW; \ + region.sh_t = NON_SHARED; \ + MMU_GetPageDescriptor(&descriptor_l1, &descriptor_l2, region); + +/** \brief Set section execution-never attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] xn Section execution-never attribute : EXECUTE , NON_EXECUTE. + + \return 0 +*/ +__STATIC_INLINE int MMU_XNSection(uint32_t *descriptor_l1, mmu_execute_Type xn) +{ + *descriptor_l1 &= SECTION_XN_MASK; + *descriptor_l1 |= ((xn & 0x1) << SECTION_XN_SHIFT); + return 0; +} + +/** \brief Set section domain + + \param [out] descriptor_l1 L1 descriptor. + \param [in] domain Section domain + + \return 0 +*/ +__STATIC_INLINE int MMU_DomainSection(uint32_t *descriptor_l1, uint8_t domain) +{ + *descriptor_l1 &= SECTION_DOMAIN_MASK; + *descriptor_l1 |= ((domain & 0xF) << SECTION_DOMAIN_SHIFT); + return 0; +} + +/** \brief Set section parity check + + \param [out] descriptor_l1 L1 descriptor. + \param [in] p_bit Parity check: ECC_DISABLED, ECC_ENABLED + + \return 0 +*/ +__STATIC_INLINE int MMU_PSection(uint32_t *descriptor_l1, mmu_ecc_check_Type p_bit) +{ + *descriptor_l1 &= SECTION_P_MASK; + *descriptor_l1 |= ((p_bit & 0x1) << SECTION_P_SHIFT); + return 0; +} + +/** \brief Set section access privileges + + \param [out] descriptor_l1 L1 descriptor. + \param [in] user User Level Access: NO_ACCESS, RW, READ + \param [in] priv Privilege Level Access: NO_ACCESS, RW, READ + \param [in] afe Access flag enable + + \return 0 +*/ +__STATIC_INLINE int MMU_APSection(uint32_t *descriptor_l1, mmu_access_Type user, mmu_access_Type priv, uint32_t afe) +{ + uint32_t ap = 0; + + if (afe == 0) { //full access + if ((priv == NO_ACCESS) && (user == NO_ACCESS)) { ap = 0x0; } + else if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == READ)) { ap = 0x2; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + else { //Simplified access + if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + *descriptor_l1 &= SECTION_AP_MASK; + *descriptor_l1 |= (ap & 0x3) << SECTION_AP_SHIFT; + *descriptor_l1 |= ((ap & 0x4)>>2) << SECTION_AP2_SHIFT; + + return 0; +} + +/** \brief Set section shareability + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit Section shareability: NON_SHARED, SHARED + + \return 0 +*/ +__STATIC_INLINE int MMU_SharedSection(uint32_t *descriptor_l1, mmu_shared_Type s_bit) +{ + *descriptor_l1 &= SECTION_S_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << SECTION_S_SHIFT); + return 0; +} + +/** \brief Set section Global attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] g_bit Section attribute: GLOBAL, NON_GLOBAL + + \return 0 +*/ +__STATIC_INLINE int MMU_GlobalSection(uint32_t *descriptor_l1, mmu_global_Type g_bit) +{ + *descriptor_l1 &= SECTION_NG_MASK; + *descriptor_l1 |= ((g_bit & 0x1) << SECTION_NG_SHIFT); + return 0; +} + +/** \brief Set section Security attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit Section Security attribute: SECURE, NON_SECURE + + \return 0 +*/ +__STATIC_INLINE int MMU_SecureSection(uint32_t *descriptor_l1, mmu_secure_Type s_bit) +{ + *descriptor_l1 &= SECTION_NS_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << SECTION_NS_SHIFT); + return 0; +} + +/* Page 4k or 64k */ +/** \brief Set 4k/64k page execution-never attribute + + \param [out] descriptor_l2 L2 descriptor. + \param [in] xn Page execution-never attribute : EXECUTE , NON_EXECUTE. + \param [in] page Page size: PAGE_4k, PAGE_64k, + + \return 0 +*/ +__STATIC_INLINE int MMU_XNPage(uint32_t *descriptor_l2, mmu_execute_Type xn, mmu_region_size_Type page) +{ + if (page == PAGE_4k) + { + *descriptor_l2 &= PAGE_XN_4K_MASK; + *descriptor_l2 |= ((xn & 0x1) << PAGE_XN_4K_SHIFT); + } + else + { + *descriptor_l2 &= PAGE_XN_64K_MASK; + *descriptor_l2 |= ((xn & 0x1) << PAGE_XN_64K_SHIFT); + } + return 0; +} + +/** \brief Set 4k/64k page domain + + \param [out] descriptor_l1 L1 descriptor. + \param [in] domain Page domain + + \return 0 +*/ +__STATIC_INLINE int MMU_DomainPage(uint32_t *descriptor_l1, uint8_t domain) +{ + *descriptor_l1 &= PAGE_DOMAIN_MASK; + *descriptor_l1 |= ((domain & 0xf) << PAGE_DOMAIN_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page parity check + + \param [out] descriptor_l1 L1 descriptor. + \param [in] p_bit Parity check: ECC_DISABLED, ECC_ENABLED + + \return 0 +*/ +__STATIC_INLINE int MMU_PPage(uint32_t *descriptor_l1, mmu_ecc_check_Type p_bit) +{ + *descriptor_l1 &= SECTION_P_MASK; + *descriptor_l1 |= ((p_bit & 0x1) << SECTION_P_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page access privileges + + \param [out] descriptor_l2 L2 descriptor. + \param [in] user User Level Access: NO_ACCESS, RW, READ + \param [in] priv Privilege Level Access: NO_ACCESS, RW, READ + \param [in] afe Access flag enable + + \return 0 +*/ +__STATIC_INLINE int MMU_APPage(uint32_t *descriptor_l2, mmu_access_Type user, mmu_access_Type priv, uint32_t afe) +{ + uint32_t ap = 0; + + if (afe == 0) { //full access + if ((priv == NO_ACCESS) && (user == NO_ACCESS)) { ap = 0x0; } + else if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == READ)) { ap = 0x2; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x6; } + } + + else { //Simplified access + if ((priv == RW) && (user == NO_ACCESS)) { ap = 0x1; } + else if ((priv == RW) && (user == RW)) { ap = 0x3; } + else if ((priv == READ) && (user == NO_ACCESS)) { ap = 0x5; } + else if ((priv == READ) && (user == READ)) { ap = 0x7; } + } + + *descriptor_l2 &= PAGE_AP_MASK; + *descriptor_l2 |= (ap & 0x3) << PAGE_AP_SHIFT; + *descriptor_l2 |= ((ap & 0x4)>>2) << PAGE_AP2_SHIFT; + + return 0; +} + +/** \brief Set 4k/64k page shareability + + \param [out] descriptor_l2 L2 descriptor. + \param [in] s_bit 4k/64k page shareability: NON_SHARED, SHARED + + \return 0 +*/ +__STATIC_INLINE int MMU_SharedPage(uint32_t *descriptor_l2, mmu_shared_Type s_bit) +{ + *descriptor_l2 &= PAGE_S_MASK; + *descriptor_l2 |= ((s_bit & 0x1) << PAGE_S_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page Global attribute + + \param [out] descriptor_l2 L2 descriptor. + \param [in] g_bit 4k/64k page attribute: GLOBAL, NON_GLOBAL + + \return 0 +*/ +__STATIC_INLINE int MMU_GlobalPage(uint32_t *descriptor_l2, mmu_global_Type g_bit) +{ + *descriptor_l2 &= PAGE_NG_MASK; + *descriptor_l2 |= ((g_bit & 0x1) << PAGE_NG_SHIFT); + return 0; +} + +/** \brief Set 4k/64k page Security attribute + + \param [out] descriptor_l1 L1 descriptor. + \param [in] s_bit 4k/64k page Security attribute: SECURE, NON_SECURE + + \return 0 +*/ +__STATIC_INLINE int MMU_SecurePage(uint32_t *descriptor_l1, mmu_secure_Type s_bit) +{ + *descriptor_l1 &= PAGE_NS_MASK; + *descriptor_l1 |= ((s_bit & 0x1) << PAGE_NS_SHIFT); + return 0; +} + +/** \brief Set Section memory attributes + + \param [out] descriptor_l1 L1 descriptor. + \param [in] mem Section memory type: NORMAL, DEVICE, SHARED_DEVICE, NON_SHARED_DEVICE, STRONGLY_ORDERED + \param [in] outer Outer cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] inner Inner cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + + \return 0 +*/ +__STATIC_INLINE int MMU_MemorySection(uint32_t *descriptor_l1, mmu_memory_Type mem, mmu_cacheability_Type outer, mmu_cacheability_Type inner) +{ + *descriptor_l1 &= SECTION_TEXCB_MASK; + + if (STRONGLY_ORDERED == mem) + { + return 0; + } + else if (SHARED_DEVICE == mem) + { + *descriptor_l1 |= (1 << SECTION_B_SHIFT); + } + else if (NON_SHARED_DEVICE == mem) + { + *descriptor_l1 |= (1 << SECTION_TEX1_SHIFT); + } + else if (NORMAL == mem) + { + *descriptor_l1 |= 1 << SECTION_TEX2_SHIFT; + switch(inner) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l1 |= (1 << SECTION_B_SHIFT); + break; + case WT: + *descriptor_l1 |= 1 << SECTION_C_SHIFT; + break; + case WB_NO_WA: + *descriptor_l1 |= (1 << SECTION_B_SHIFT) | (1 << SECTION_C_SHIFT); + break; + } + switch(outer) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l1 |= (1 << SECTION_TEX0_SHIFT); + break; + case WT: + *descriptor_l1 |= 1 << SECTION_TEX1_SHIFT; + break; + case WB_NO_WA: + *descriptor_l1 |= (1 << SECTION_TEX0_SHIFT) | (1 << SECTION_TEX0_SHIFT); + break; + } + } + return 0; +} + +/** \brief Set 4k/64k page memory attributes + + \param [out] descriptor_l2 L2 descriptor. + \param [in] mem 4k/64k page memory type: NORMAL, DEVICE, SHARED_DEVICE, NON_SHARED_DEVICE, STRONGLY_ORDERED + \param [in] outer Outer cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] inner Inner cacheability: NON_CACHEABLE, WB_WA, WT, WB_NO_WA, + \param [in] page Page size + + \return 0 +*/ +__STATIC_INLINE int MMU_MemoryPage(uint32_t *descriptor_l2, mmu_memory_Type mem, mmu_cacheability_Type outer, mmu_cacheability_Type inner, mmu_region_size_Type page) +{ + *descriptor_l2 &= PAGE_4K_TEXCB_MASK; + + if (page == PAGE_64k) + { + //same as section + MMU_MemorySection(descriptor_l2, mem, outer, inner); + } + else + { + if (STRONGLY_ORDERED == mem) + { + return 0; + } + else if (SHARED_DEVICE == mem) + { + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT); + } + else if (NON_SHARED_DEVICE == mem) + { + *descriptor_l2 |= (1 << PAGE_4K_TEX1_SHIFT); + } + else if (NORMAL == mem) + { + *descriptor_l2 |= 1 << PAGE_4K_TEX2_SHIFT; + switch(inner) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT); + break; + case WT: + *descriptor_l2 |= 1 << PAGE_4K_C_SHIFT; + break; + case WB_NO_WA: + *descriptor_l2 |= (1 << PAGE_4K_B_SHIFT) | (1 << PAGE_4K_C_SHIFT); + break; + } + switch(outer) + { + case NON_CACHEABLE: + break; + case WB_WA: + *descriptor_l2 |= (1 << PAGE_4K_TEX0_SHIFT); + break; + case WT: + *descriptor_l2 |= 1 << PAGE_4K_TEX1_SHIFT; + break; + case WB_NO_WA: + *descriptor_l2 |= (1 << PAGE_4K_TEX0_SHIFT) | (1 << PAGE_4K_TEX0_SHIFT); + break; + } + } + } + + return 0; +} + +/** \brief Create a L1 section descriptor + + \param [out] descriptor L1 descriptor + \param [in] reg Section attributes + + \return 0 +*/ +__STATIC_INLINE int MMU_GetSectionDescriptor(uint32_t *descriptor, mmu_region_attributes_Type reg) +{ + *descriptor = 0; + + MMU_MemorySection(descriptor, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t); + MMU_XNSection(descriptor,reg.xn_t); + MMU_DomainSection(descriptor, reg.domain); + MMU_PSection(descriptor, reg.e_t); + MMU_APSection(descriptor, reg.user_t, reg.priv_t, 1); + MMU_SharedSection(descriptor,reg.sh_t); + MMU_GlobalSection(descriptor,reg.g_t); + MMU_SecureSection(descriptor,reg.sec_t); + *descriptor &= SECTION_MASK; + *descriptor |= SECTION_DESCRIPTOR; + + return 0; +} + + +/** \brief Create a L1 and L2 4k/64k page descriptor + + \param [out] descriptor L1 descriptor + \param [out] descriptor2 L2 descriptor + \param [in] reg 4k/64k page attributes + + \return 0 +*/ +__STATIC_INLINE int MMU_GetPageDescriptor(uint32_t *descriptor, uint32_t *descriptor2, mmu_region_attributes_Type reg) +{ + *descriptor = 0; + *descriptor2 = 0; + + switch (reg.rg_t) + { + case PAGE_4k: + MMU_MemoryPage(descriptor2, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t, PAGE_4k); + MMU_XNPage(descriptor2, reg.xn_t, PAGE_4k); + MMU_DomainPage(descriptor, reg.domain); + MMU_PPage(descriptor, reg.e_t); + MMU_APPage(descriptor2, reg.user_t, reg.priv_t, 1); + MMU_SharedPage(descriptor2,reg.sh_t); + MMU_GlobalPage(descriptor2,reg.g_t); + MMU_SecurePage(descriptor,reg.sec_t); + *descriptor &= PAGE_L1_MASK; + *descriptor |= PAGE_L1_DESCRIPTOR; + *descriptor2 &= PAGE_L2_4K_MASK; + *descriptor2 |= PAGE_L2_4K_DESC; + break; + + case PAGE_64k: + MMU_MemoryPage(descriptor2, reg.mem_t, reg.outer_norm_t, reg.inner_norm_t, PAGE_64k); + MMU_XNPage(descriptor2, reg.xn_t, PAGE_64k); + MMU_DomainPage(descriptor, reg.domain); + MMU_PPage(descriptor, reg.e_t); + MMU_APPage(descriptor2, reg.user_t, reg.priv_t, 1); + MMU_SharedPage(descriptor2,reg.sh_t); + MMU_GlobalPage(descriptor2,reg.g_t); + MMU_SecurePage(descriptor,reg.sec_t); + *descriptor &= PAGE_L1_MASK; + *descriptor |= PAGE_L1_DESCRIPTOR; + *descriptor2 &= PAGE_L2_64K_MASK; + *descriptor2 |= PAGE_L2_64K_DESC; + break; + + case SECTION: + //error + break; + } + + return 0; +} + +/** \brief Create a 1MB Section + + \param [in] ttb Translation table base address + \param [in] base_address Section base address + \param [in] count Number of sections to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTSection(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1) +{ + uint32_t offset; + uint32_t entry; + uint32_t i; + + offset = base_address >> 20; + entry = (base_address & 0xFFF00000) | descriptor_l1; + + //4 bytes aligned + ttb = ttb + offset; + + for (i = 0; i < count; i++ ) + { + //4 bytes aligned + *ttb++ = entry; + entry += OFFSET_1M; + } +} + +/** \brief Create a 4k page entry + + \param [in] ttb L1 table base address + \param [in] base_address 4k base address + \param [in] count Number of 4k pages to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + \param [in] ttb_l2 L2 table base address + \param [in] descriptor_l2 L2 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTPage4k(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1, uint32_t *ttb_l2, uint32_t descriptor_l2 ) +{ + + uint32_t offset, offset2; + uint32_t entry, entry2; + uint32_t i; + + offset = base_address >> 20; + entry = ((int)ttb_l2 & 0xFFFFFC00) | descriptor_l1; + + //4 bytes aligned + ttb += offset; + //create l1_entry + *ttb = entry; + + offset2 = (base_address & 0xff000) >> 12; + ttb_l2 += offset2; + entry2 = (base_address & 0xFFFFF000) | descriptor_l2; + for (i = 0; i < count; i++ ) + { + //4 bytes aligned + *ttb_l2++ = entry2; + entry2 += OFFSET_4K; + } +} + +/** \brief Create a 64k page entry + + \param [in] ttb L1 table base address + \param [in] base_address 64k base address + \param [in] count Number of 64k pages to create + \param [in] descriptor_l1 L1 descriptor (region attributes) + \param [in] ttb_l2 L2 table base address + \param [in] descriptor_l2 L2 descriptor (region attributes) + +*/ +__STATIC_INLINE void MMU_TTPage64k(uint32_t *ttb, uint32_t base_address, uint32_t count, uint32_t descriptor_l1, uint32_t *ttb_l2, uint32_t descriptor_l2 ) +{ + uint32_t offset, offset2; + uint32_t entry, entry2; + uint32_t i,j; + + + offset = base_address >> 20; + entry = ((int)ttb_l2 & 0xFFFFFC00) | descriptor_l1; + + //4 bytes aligned + ttb += offset; + //create l1_entry + *ttb = entry; + + offset2 = (base_address & 0xff000) >> 12; + ttb_l2 += offset2; + entry2 = (base_address & 0xFFFF0000) | descriptor_l2; + for (i = 0; i < count; i++ ) + { + //create 16 entries + for (j = 0; j < 16; j++) + { + //4 bytes aligned + *ttb_l2++ = entry2; + } + entry2 += OFFSET_64K; + } +} + +/** \brief Enable MMU +*/ +__STATIC_INLINE void MMU_Enable(void) +{ + // Set M bit 0 to enable the MMU + // Set AFE bit to enable simplified access permissions model + // Clear TRE bit to disable TEX remap and A bit to disable strict alignment fault checking + __set_SCTLR( (__get_SCTLR() & ~(1 << 28) & ~(1 << 1)) | 1 | (1 << 29)); + __ISB(); +} + +/** \brief Disable MMU +*/ +__STATIC_INLINE void MMU_Disable(void) +{ + // Clear M bit 0 to disable the MMU + __set_SCTLR( __get_SCTLR() & ~1); + __ISB(); +} + +/** \brief Invalidate entire unified TLB +*/ + +__STATIC_INLINE void MMU_InvalidateTLB(void) +{ + __set_TLBIALL(0); + __DSB(); //ensure completion of the invalidation + __ISB(); //ensure instruction fetch path sees new state +} + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CA_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h new file mode 100644 index 00000000000..eeb599fc77f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h @@ -0,0 +1,967 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M0 Core Peripheral Access Layer Header File + */ + +#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_CM0_H_GENERIC +#define __CORE_CM0_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_M0 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #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_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick 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:28; /*!< bit: 0..27 Reserved */ + 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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/** \brief 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_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T 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 _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL 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[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} 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 */ + uint32_t RESERVED0; + __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 */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \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 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 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 */ + + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick 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 +/* NVIC_GetActive not available for Cortex-M0 */ + #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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \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[0U] = (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[0U] & (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[0U] = (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[0U] & (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[0U] = (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[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (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. + Address 0 must be mapped to SRAM. + \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 *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ + /* ARM Application Note 321 states that the M0 does not require the architectural barrier */ +} + + +/** + \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 *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +} + + +/** + \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 = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## 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) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## 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 */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h new file mode 100644 index 00000000000..1ee9457560f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h @@ -0,0 +1,1103 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + */ + +#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_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_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-M0+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV 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 __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #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-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU 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:28; /*!< bit: 0..27 Reserved */ + 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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/** \brief 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_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T 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 to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} 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 */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __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 */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \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 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 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 */ + +#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 + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick 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 +/* NVIC_GetActive not available for Cortex-M0+ */ + #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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \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[0U] = (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[0U] & (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[0U] = (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[0U] & (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[0U] = (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[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (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. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + *(vectors + (int32_t)IRQn) = vector; /* use pointer arithmetic to access vector */ +#endif + /* ARM Application Note 321 states that the M0+ does not require the architectural barrier */ +} + + +/** + \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) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +#else + uint32_t *vectors = (uint32_t *)(NVIC_USER_IRQ_OFFSET << 2); /* point to 1st user interrupt */ + return *(vectors + (int32_t)IRQn); /* use pointer arithmetic to access vector */ +#endif +} + + +/** + \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 = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## 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 */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h new file mode 100644 index 00000000000..d41cf05b336 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h @@ -0,0 +1,992 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M1 Core Peripheral Access Layer Header File + */ + +#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_CM1_H_GENERIC +#define __CORE_CM1_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_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #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_M1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick 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:28; /*!< bit: 0..27 Reserved */ + 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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/** \brief 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_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T 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 _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL 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[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} 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 */ + uint32_t RESERVED0; + __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 */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED 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[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \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 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 SCnSCB ((SCnSCB_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 */ + + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick 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 not available for Cortex-M1 */ + #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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \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[0U] = (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[0U] & (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[0U] = (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[0U] & (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[0U] = (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[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (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. + Address 0 must be mapped to SRAM. + \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 *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M1 does not require the architectural barrier */ +} + + +/** + \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 *)0x0U; + 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 = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## 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) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## 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 */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h new file mode 100644 index 00000000000..d6337a4848b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h @@ -0,0 +1,2253 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M23 Core Peripheral Access Layer Header File + */ + +#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_CM23_H_GENERIC +#define __CORE_CM23_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_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM23 definitions */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_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 __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #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 + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT 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_M23 */ + + + +/******************************************************************************* + * 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 + ******************************************************************************/ +/** + \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:28; /*!< bit: 0..27 Reserved */ + 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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/** \brief 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_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T 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 _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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 RESERVED1[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 uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} 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 */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __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 */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief 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 */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/** \brief 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 */ +#endif + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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_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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED 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_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_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_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 RESERVED14[992U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/** \brief 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 (1UL << 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 (0x3UL << 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_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 */ + uint32_t RESERVED0[7U]; + 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 1U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 Mask */ + +/** \brief 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 */ + +/** \brief 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 */ +#endif +} SAU_Type; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + + +/** + \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; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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; + +/** \brief DIB 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 */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << 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 (1UL << 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 (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU 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 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 DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU 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 (__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 + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space 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 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 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 + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_DWTENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_DWTENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 +/* NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/* NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #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 + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (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. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + 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) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *) ((uintptr_t) SCB->VTOR); +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + 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 = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + 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 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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (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 "m-profile/armv8m_mpu.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) +{ + 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 */ + + + + +/* ################################## 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 */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h new file mode 100644 index 00000000000..624b9f69b02 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h @@ -0,0 +1,2045 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M3 Core Peripheral Access Layer Header File + */ + +#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_CM3_H_GENERIC +#define __CORE_CM3_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_M3 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV 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 __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!" + #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_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU 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:27; /*!< bit: 0..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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/** \brief 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC 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[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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 */ + +#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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_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 */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#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_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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_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 */ + +/** \brief SCB BusFault Status Register Definitions (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_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 */ + +/** \brief SCB UsageFault Status Register Definitions (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_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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/*@} 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 */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/** \brief SCnSCB 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 */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ +#endif + +/*@} 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 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_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \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 */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \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 TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB 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 + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \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); + } +} + + +/** + \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 *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \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 *) ((uintptr_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(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## 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 */ +} + +#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_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h new file mode 100644 index 00000000000..5f7d9b1575c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h @@ -0,0 +1,3245 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M33 Core Peripheral Access Layer Header File + */ + +#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_CM33_H_GENERIC +#define __CORE_CM33_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_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ + +#define __CORTEX_M (33U) /*!< Cortex-M 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 + #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__) + #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) && (__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_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_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 __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!" + #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_M33 */ + + + +/******************************************************************************* + * 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 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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 */ + 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 */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_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; + +/** \brief SCnSCB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME 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 RESERVED14[984U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (0x3UL << 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_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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; + +/** \brief DIB 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 */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << 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 (1UL << 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 (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 TPIU_BASE (0xE0040000UL) /*!< TPIU 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU 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 (__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 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 SCnSCB_NS ((SCnSCB_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 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) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 *) ((uintptr_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 *) ((uintptr_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 "m-profile/armv8m_mpu.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_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 */ + + + +/* ########################## 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 */ + + + + +/* ################################## 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_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h new file mode 100644 index 00000000000..def2589fadb --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h @@ -0,0 +1,3245 @@ +/* + * Copyright (c) 2018-2024 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. + */ + +/* + * CMSIS Cortex-M35P Core Peripheral Access Layer Header File + */ + +#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_CM35P_H_GENERIC +#define __CORE_CM35P_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_M35P + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM35 definitions */ + +#define __CORTEX_M (35U) /*!< Cortex-M 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 + #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__) + #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) && (__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_CM35P_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM35P_H_DEPENDANT +#define __CORE_CM35P_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM35P_REV + #define __CM35P_REV 0x0000U + #warning "__CM35P_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 __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!" + #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_M35P */ + + + +/******************************************************************************* + * 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 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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 */ + 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 */ + __OM uint32_t BPIALL; /*!< Offset: 0x278 ( /W) Branch Predictor Invalidate All */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_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; + +/** \brief SCnSCB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME 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 RESERVED14[984U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (0x3UL << 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_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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; + +/** \brief DIB 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 */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << 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 (1UL << 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 (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 TPIU_BASE (0xE0040000UL) /*!< TPIU 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU 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 (__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 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 SCnSCB_NS ((SCnSCB_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 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) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + uint32_t RESERVED0[1U]; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 *) ((uintptr_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 *) ((uintptr_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 "m-profile/armv8m_mpu.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_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 */ + + + +/* ########################## 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 */ + + + + +/* ################################## 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_CM35P_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h new file mode 100644 index 00000000000..8354ccfbcff --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h @@ -0,0 +1,2237 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M4 Core Peripheral Access Layer Header File + */ + +#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_CM4_H_GENERIC +#define __CORE_CM4_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_M4 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ + +#define __CORTEX_M (4U) /*!< Cortex-M 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 + +#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 + +#elif defined (__ti__) + #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 + +#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 + +#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 + +#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_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_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 __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!" + #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_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU 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; + +/** \brief 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; + +/** \brief 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:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + 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 */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/** \brief 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 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_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC 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[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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_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 */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#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_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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_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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/*@} 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 */ +} SCnSCB_Type; + +/** \brief SCnSCB 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 */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 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_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \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; + +/** \brief FPU 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_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY 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_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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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 */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \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 TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB 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 + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \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); + } +} + + +/** + \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 *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M4 does not require the architectural barrier */ +} + + +/** + \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 *) ((uintptr_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(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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_FPSP_Msk | FPU_MVFR0_FPDP_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## 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 */ +} + +#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_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h new file mode 100644 index 00000000000..a6195940426 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h @@ -0,0 +1,4783 @@ +/* + * Copyright (c) 2018-2024 Arm Limited. Copyright (c) 2024 Arm Technology (China) Co., Ltd. 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. + */ + +/* + * CMSIS Cortex-M52 Core Peripheral Access Layer Header File + */ + +#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_CM52_H_GENERIC +#define __CORE_CM52_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_M52 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM52 definitions */ + +#define __CORTEX_M (52U) /*!< 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) && (__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__) + #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) && (__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_CM52_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM52_H_DEPENDANT +#define __CORE_CM52_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM52_REV + #define __CM52_REV 0x0002U + #warning "__CM52_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 __UCACHE_PRESENT + #define __UCACHE_PRESENT 0U + #warning "__UCACHE_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_M52 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core EWIC Interrupt Status Access 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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 RESERVED0[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 RESERVED1[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 RESERVED2[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 RESERVED3[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED4[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; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_CTYPE1_Pos 0U +#define SCB_CLIDR_CTYPE1_Msk (7UL << SCB_CLIDR_CTYPE1_Pos) + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + + +/** \brief SCB U-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_UC_WAY_Pos 31U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_UC_WAY_Msk (1UL << SCB_DCISW_UC_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_UC_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_UC_SET_Msk (0x3FFUL << SCB_DCISW_UC_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/** \brief SCB U-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_UC_WAY_Pos 31U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_UC_WAY_Msk (1UL << SCB_DCCSW_UC_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_UC_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_UC_SET_Msk (0x3FFUL << SCB_DCCSW_UC_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/** \brief SCB U-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_UC_WAY_Pos 31U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_UC_WAY_Msk (1UL << SCB_DCCISW_UC_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_UC_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_UC_SET_Msk (0x3FFUL << SCB_DCCISW_UC_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; + +/** \brief ICB 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 */ + +/** \brief ICB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME 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 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (0x3UL << 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 */ + uint32_t RESERVED1[3U]; + __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; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl ITCM Control 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 (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control 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 (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control 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 (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << 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 */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << 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 DCAR_Type Direct Cache Access Registers + \brief Type definitions for the Direct Cache Access Registers (DCAR) + @{ + */ + +/** + \brief Structure type to access the Direct Cache Access Registers (DCAR). + */ +typedef struct +{ + __IM uint32_t DCADCRR; /*!< Offset: 0x000 (R/W) Direct Cache Access Data Cache Read Register */ + __IM uint32_t DCAICRR; /*!< Offset: 0x004 (R/W) Direct Cache Access Instruction Cache Read Register */ + uint32_t RESERVED1[2]; + __IOM uint32_t DCADCLR; /*!< Offset: 0x010 (R/W) Direct Cache Access Data Cache Location Registers */ + __IOM uint32_t DCAICLR; /*!< Offset: 0x014 (R/W) Direct Cache Access Instruction Cache Location Registers */ +} DCAR_Type; + +/*@}*/ /* end of group DCAR_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; + +/** \brief PwrModCtl Core Power Domain Low Power State 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_CLPSTATE_Pos 0U /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Position */ +#define PWRMODCTL_CPDLPSTATE_CLPSTATE_Msk (0x3UL /*<< PWRMODCTL_CPDLPSTATE_CLPSTATE_Pos*/) /*!< PWRMODCTL CPDLPSTATE: CLPSTATE Mask */ + +/** \brief PwrModCtl Debug Power Domain Low Power State 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 +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_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 */ + __IM uint32_t TEBRDATA0; /*!< Offset: 0x024 (RO) Storage for corrected data that is associated with an error.*/ + __IOM uint32_t TEBR1; /*!< Offset: 0x028 (R/W) TCM Error Bank Register 1 */ + __IM uint32_t TEBRDATA1; /*!< Offset: 0x02c (RO) Storage for corrected data that is associated with an error.*/ +} ErrBnk_Type; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 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 (1UL << 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 (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 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 (1UL << 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 (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 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 (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 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 (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 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 27U /*!< ERRBNK TEBR0: POISON Position */ +#define ERRBNK_TEBR0_POISON_Msk (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 26U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << 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 (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 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 27U /*!< ERRBNK TEBR1: POISON Position */ +#define ERRBNK_TEBR1_POISON_Msk (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 26U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << 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 (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*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; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register 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]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample Register */ + __IM uint32_t STLIMPUOR; /*!< Offset: 0x014 (R/ ) MPU Region Hit Register */ + __IM uint32_t STLDMPUOR; /*!< Offset: 0x018 (R/ ) MPU Memory Attributes Register */ + +} STL_Type; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL MPU Sample Register 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 (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register 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 */ + +/** \brief STL MPU Memory Attributes Register Definitions */ +#define STL_STLDMPUOR_HITREGION_Pos 9U /*!< STL STLDMPUOR: HITREGION Position */ +#define STL_STLDMPUOR_HITREGION_Msk (0xFFUL << STL_STLDMPUOR_HITREGION_Pos) /*!< STL STLDMPUOR: HITREGION Mask */ + +#define STL_STLDMPUOR_ATTR_Pos 0U /*!< STL STLDMPUOR: ATTR Position */ +#define STL_STLDMPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLDMPUOR_ATTR_Pos*/) /*!< STL STLDMPUOR: ATTR Mask */ + +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) 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) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief 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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP 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: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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 */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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 +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 DCAR_BASE (0xE001E200UL) /*!< Direct Cache Access Registers */ + #define PWRMODCTL_BASE (0xE001E300UL) /*!< Power Mode Control Base Address */ + #define EWIC_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller 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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ + #define MEMSYSCTL ((MemSysCtl_Type *) MEMSYSCTL_BASE ) /*!< Memory System Control configuration struct */ + #define ERRBNK ((ErrBnk_Type *) ERRBNK_BASE ) /*!< Error Banking configuration struct */ + #define DCAR ((DCAR_Type *) DCAR_BASE ) /*!< Direct Read Access to the embedded RAM associated with the L1 instruction and data cache */ + #define PWRMODCTL ((PwrModCtl_Type *) PWRMODCTL_BASE ) /*!< Power Mode Control configuration struct */ + #define EWIC_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access 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 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 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 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) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 *) ((uintptr_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 *) ((uintptr_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 "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M52 PMU events + \note Architectural PMU events can be found in armv8m_pmu.h +*/ + +#define ARMCM52_PMU_ECC_ERR 0xC000 /*!< One or more Error Correcting Code (ECC) errors detected */ +#define ARMCM52_PMU_ECC_ERR_MBIT 0xC001 /*!< One or more multi-bit ECC errors detected */ +#define ARMCM52_PMU_ECC_ERR_DCACHE 0xC010 /*!< One or more ECC errors in the data cache */ +#define ARMCM52_PMU_ECC_ERR_ICACHE 0xC011 /*!< One or more ECC errors in the instruction cache */ +#define ARMCM52_PMU_ECC_ERR_MBIT_DCACHE 0xC012 /*!< One or more multi-bit ECC errors in the data cache */ +#define ARMCM52_PMU_ECC_ERR_MBIT_ICACHE 0xC013 /*!< One or more multi-bit ECC errors in the instruction cache */ +#define ARMCM52_PMU_ECC_ERR_DTCM 0xC020 /*!< Any ECC error in the DTCM */ +#define ARMCM52_PMU_ECC_ERR_ITCM 0xC021 /*!< Any ECC error in the ITCM */ +#define ARMCM52_PMU_ECC_ERR_MBIT_DTCM 0xC022 /*!< One or more multi-bit ECC errors in the DTCM */ +#define ARMCM52_PMU_ECC_ERR_MBIT_ITCM 0xC023 /*!< One or more multi-bit ECC errors in the ITCM */ +#define ARMCM52_PMU_NWAMODE_ENTER 0xC200 /*!< No write-allocate mode entry */ +#define ARMCM52_PMU_NWAMODE 0xC201 /*!< Write-allocate store is not allocated into the data cache due to no-write-allocate mode */ +#define ARMCM52_PMU_SAHB_ACCESS 0xC300 /*!< Read or write access on the S-AHB interface to the TCM */ +#define ARMCM52_PMU_PAHB_ACCESS 0xC301 /*!< Read or write access to the P-AHB write interface */ +#define ARMCM52_PMU_AXI_SAHB_WRITE_ACCESS 0xC302 /*!< M-AXI configuration: Any beat access to the M-AXI write interface.M-AHB configuration: Any write beat access to the SYS-AHB interface */ +#define ARMCM52_PMU_AXI_SAHB_READ_ACCESS 0xC303 /*!< M-AXI configuration: Any beat access to the M-AXI read interface.M-AHB configuration: Any read beat access to the SYS-AHB interface */ +#define ARMCM52_PMU_DOSTIMEOUT_DOUBLE 0xC400 /*!< Denial of Service timeout has fired twice and caused buffers to drain to allow forward progress */ +#define ARMCM52_PMU_DOSTIMEOUT_TRIPLE 0xC401 /*!< Denial of Service timeout has fired three times and blocked the LSU to force forward progress */ +#define ARMCM52_PMU_CDE_INST_RETIRED 0xC402 /*!< CDE instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX1_INST_RETIRED 0xC404 /*!< CDE CX1 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX2_INST_RETIRED 0xC406 /*!< CDE CX2 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_CX3_INST_RETIRED 0xC408 /*!< CDE CX3 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX1_INST_RETIRED 0xC40A /*!< CDE VCX1 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX2_INST_RETIRED 0xC40C /*!< CDE VCX2 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX3_INST_RETIRED 0xC40E /*!< CDE VCX3 instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX1_VEC_INST_RETIRED 0xC410 /*!< CDE VCX1 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX2_VEC_INST_RETIRED 0xC412 /*!< CDE VCX2 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_VCX3_VEC_INST_RETIRED 0xC414 /*!< CDE VCX3 Vector instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_PRED 0xC416 /*!< Cycles where one or more predicated beats of a CDE instruction architecturally executed. */ +#define ARMCM52_PMU_CDE_STALL 0xC417 /*!< Stall cycles caused by a CDE instruction. */ +#define ARMCM52_PMU_CDE_STALL_RESOURCE 0xC418 /*!< Stall cycles caused by a CDE instruction because of resource conflicts */ +#define ARMCM52_PMU_CDE_STALL_DEPENDENCY 0xC419 /*!< Stall cycles caused by a CDE register dependency. */ +#define ARMCM52_PMU_CDE_STALL_CUSTOM 0xC41A /*!< Stall cycles caused by a CDE instruction are generated by the custom hardware. */ +#define ARMCM52_PMU_CDE_STALL_OTHER 0xC41B /*!< Stall cycles caused by a CDE instruction are not covered by the other counters. */ +#define ARMCM52_PMU_CAHB_WRITE_ACCESS 0xC420 /*!< M-AHB configuration: A Write beat transfer on Code-AHB */ +#define ARMCM52_PMU_CAHB_READ_ACCESS 0xC421 /*!< M-AHB configuration: A Read beat transfer on Code-AHB. */ + +#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 "m-profile/armv7m_cachel1.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 "m-profile/armv81m_pac.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_CM52_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ + + + + + diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h new file mode 100644 index 00000000000..a7c9f7436b4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h @@ -0,0 +1,4895 @@ +/* + * Copyright (c) 2018-2024 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. + */ + +/* + * CMSIS Cortex-M55 Core Peripheral Access Layer Header File + */ + +#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_CM55_H_GENERIC +#define __CORE_CM55_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_M55 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM55 definitions */ + +#define __CORTEX_M (55U) /*!< 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) && (__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__) + #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) && (__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_CM55_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM55_H_DEPENDANT +#define __CORE_CM55_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM55_REV + #define __CM55_REV 0x0000U + #warning "__CM55_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_M55 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core EWIC Register + - Core EWIC Interrupt Status Access 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief ICB 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 */ + +/** \brief ICB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME 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 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (0x3UL << 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; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl Prefetcher Control 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 (1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/** \brief MemSysCtl ITCM Control 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 (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control 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 (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control 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 (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << 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 */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << 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; + +/** \brief PwrModCtl Core Power Domain Low Power State 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 */ + +/** \brief PwrModCtl Debug Power Domain Low Power State 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 +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_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; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 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 (1UL << 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 (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 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 (1UL << 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 (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 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 (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 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 (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 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 (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x7UL << 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 (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 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 (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x7UL << 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 (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*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; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register 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]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample 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; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL MPU Sample Register 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 (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register 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 */ + +/** \brief STL MPU Memory Attributes Register 0 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 */ + +/** \brief STL MPU Memory Attributes Register 1 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_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) 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) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief 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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP 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: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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 */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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 +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller 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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU 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_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access 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 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 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 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) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + __OM uint32_t DSCEMCR; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_FPD_Pos DCB_DHCSR_S_FPD_Pos +#define CoreDebug_DHCSR_S_FPD_Msk DCB_DHCSR_S_FPD_Msk + +#define CoreDebug_DHCSR_S_SUIDE_Pos DCB_DHCSR_S_SUIDE_Pos +#define CoreDebug_DHCSR_S_SUIDE_Msk DCB_DHCSR_S_SUIDE_Msk + +#define CoreDebug_DHCSR_S_NSUIDE_Pos DCB_DHCSR_S_NSUIDE_Pos +#define CoreDebug_DHCSR_S_NSUIDE_Msk DCB_DHCSR_S_NSUIDE_Msk + +#define CoreDebug_DHCSR_S_SDE_Pos DCB_DHCSR_S_SDE_Pos +#define CoreDebug_DHCSR_S_SDE_Msk DCB_DHCSR_S_SDE_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_PMOV_Pos DCB_DHCSR_C_PMOV_Pos +#define CoreDebug_DHCSR_C_PMOV_Msk DCB_DHCSR_C_PMOV_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos DCB_DSCEMCR_CLR_MON_REQ_Pos +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk DCB_DSCEMCR_CLR_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos DCB_DSCEMCR_CLR_MON_PEND_Pos +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk DCB_DSCEMCR_CLR_MON_PEND_Msk + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos DCB_DSCEMCR_SET_MON_REQ_Pos +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk DCB_DSCEMCR_SET_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos DCB_DSCEMCR_SET_MON_PEND_Pos +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk DCB_DSCEMCR_SET_MON_PEND_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos DCB_DAUTHCTRL_UIDEN_Pos +#define CoreDebug_DAUTHCTRL_UIDEN_Msk DCB_DAUTHCTRL_UIDEN_Msk + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos DCB_DAUTHCTRL_UIDAPEN_Pos +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk DCB_DAUTHCTRL_UIDAPEN_Msk + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos DCB_DAUTHCTRL_FSDMA_Pos +#define CoreDebug_DAUTHCTRL_FSDMA_Msk DCB_DAUTHCTRL_FSDMA_Msk + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 *) ((uintptr_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 *) ((uintptr_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 "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M55 PMU events + \note Architectural PMU events can be found in armv8m_pmu.h +*/ + +#define ARMCM55_PMU_ECC_ERR 0xC000 /*!< Any ECC error */ +#define ARMCM55_PMU_ECC_ERR_FATAL 0xC001 /*!< Any fatal ECC error */ +#define ARMCM55_PMU_ECC_ERR_DCACHE 0xC010 /*!< Any ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_ICACHE 0xC011 /*!< Any ECC error in the instruction cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DCACHE 0xC012 /*!< Any fatal ECC error in the data cache */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ICACHE 0xC013 /*!< Any fatal ECC error in the instruction cache*/ +#define ARMCM55_PMU_ECC_ERR_DTCM 0xC020 /*!< Any ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_ITCM 0xC021 /*!< Any ECC error in the ITCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_DTCM 0xC022 /*!< Any fatal ECC error in the DTCM */ +#define ARMCM55_PMU_ECC_ERR_FATAL_ITCM 0xC023 /*!< Any fatal ECC error in the ITCM */ +#define ARMCM55_PMU_PF_LINEFILL 0xC100 /*!< A prefetcher starts a line-fill */ +#define ARMCM55_PMU_PF_CANCEL 0xC101 /*!< A prefetcher stops prefetching */ +#define ARMCM55_PMU_PF_DROP_LINEFILL 0xC102 /*!< A linefill triggered by a prefetcher has been dropped because of lack of buffering */ +#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 */ +#define ARMCM55_PMU_CDE_INST_RETIRED 0xC402 /*!< CDE instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX1_INST_RETIRED 0xC404 /*!< CDE CX1 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX2_INST_RETIRED 0xC406 /*!< CDE CX2 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_CX3_INST_RETIRED 0xC408 /*!< CDE CX3 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX1_INST_RETIRED 0xC40A /*!< CDE VCX1 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX2_INST_RETIRED 0xC40C /*!< CDE VCX2 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX3_INST_RETIRED 0xC40E /*!< CDE VCX3 instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX1_VEC_INST_RETIRED 0xC410 /*!< CDE VCX1 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX2_VEC_INST_RETIRED 0xC412 /*!< CDE VCX2 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_VCX3_VEC_INST_RETIRED 0xC414 /*!< CDE VCX3 Vector instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_PRED 0xC416 /*!< Cycles where one or more predicated beats of a CDE instruction architecturally executed. */ +#define ARMCM55_PMU_CDE_STALL 0xC417 /*!< Stall cycles caused by a CDE instruction. */ +#define ARMCM55_PMU_CDE_STALL_RESOURCE 0xC418 /*!< Stall cycles caused by a CDE instruction because of resource conflicts */ +#define ARMCM55_PMU_CDE_STALL_DEPENDENCY 0xC419 /*!< Stall cycles caused by a CDE register dependency. */ +#define ARMCM55_PMU_CDE_STALL_CUSTOM 0xC41A /*!< Stall cycles caused by a CDE instruction are generated by the custom hardware. */ +#define ARMCM55_PMU_CDE_STALL_OTHER 0xC41B /*!< Stall cycles caused by a CDE instruction are not covered by the other counters. */ +#define ARMCM55_PMU_PF_LF_LA_1 0xC41C /*!< A data prefetcher line-fill request is made while the lookahead distance is 1. */ +#define ARMCM55_PMU_PF_LF_LA_2 0xC41D /*!< A data prefetcher line-fill request is made while the lookahead distance is 2. */ +#define ARMCM55_PMU_PF_LF_LA_3 0xC41E /*!< A data prefetcher line-fill request is made while the lookahead distance is 3. */ +#define ARMCM55_PMU_PF_LF_LA_4 0xC41F /*!< A data prefetcher line-fill request is made while the lookahead distance is 4. */ +#define ARMCM55_PMU_PF_LF_LA_5 0xC420 /*!< A data prefetcher line-fill request is made while the lookahead distance is 5. */ +#define ARMCM55_PMU_PF_LF_LA_6 0xC421 /*!< A data prefetcher line-fill request is made while the lookahead distance is 6. */ +#define ARMCM55_PMU_PF_BUFFER_FULL 0xC422 /*!< A data prefetcher request is made while the buffer is full. */ +#define ARMCM55_PMU_PF_BUFFER_MISS 0xC423 /*!< A load requires a line-fill which misses in the data prefetcher buffer. */ +#define ARMCM55_PMU_PF_BUFFER_HIT 0xC424 /*!< A load access hits in the data prefetcher buffer. */ + +#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 "m-profile/armv7m_cachel1.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 */ + + + + +/* ################################## 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_CM55_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h new file mode 100644 index 00000000000..182081940b7 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h @@ -0,0 +1,2468 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS Cortex-M7 Core Peripheral Access Layer Header File + */ + +#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_CM7_H_GENERIC +#define __CORE_CM7_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_M7 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ + +#define __CORTEX_M (7U) /*!< Cortex-M 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 + +#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 + +#elif defined (__ti__) + #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 + +#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 + +#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 + +#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_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_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 __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 __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!" + #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_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU 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; + +/** \brief 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; + +/** \brief 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:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + 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 */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/** \brief 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 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_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC 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 */ + uint32_t RESERVED3[93U]; + __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 */ + __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 */ + 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 */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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_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 */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#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_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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_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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB 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_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW 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 */ + +/** \brief SCB 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_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW 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 */ + +/** \brief SCB AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/** \brief SCB L1 Cache Control Register Definitions */ +#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_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 */ + +/** \brief SCB AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#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_AHBSCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBSCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/** \brief SCB Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM 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 */ +} SCnSCB_Type; + +/** \brief SCnSCB 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 */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISDYNADD_Pos 26U /*!< ACTLR: DISDYNADD Position */ +#define SCnSCB_ACTLR_DISDYNADD_Msk (1UL << SCnSCB_ACTLR_DISDYNADD_Pos) /*!< ACTLR: DISDYNADD Mask */ + +#define SCnSCB_ACTLR_DISISSCH1_Pos 21U /*!< ACTLR: DISISSCH1 Position */ +#define SCnSCB_ACTLR_DISISSCH1_Msk (0x1FUL << SCnSCB_ACTLR_DISISSCH1_Pos) /*!< ACTLR: DISISSCH1 Mask */ + +#define SCnSCB_ACTLR_DISDI_Pos 16U /*!< ACTLR: DISDI Position */ +#define SCnSCB_ACTLR_DISDI_Msk (0x1FUL << SCnSCB_ACTLR_DISDI_Pos) /*!< ACTLR: DISDI Mask */ + +#define SCnSCB_ACTLR_DISCRITAXIRUR_Pos 15U /*!< ACTLR: DISCRITAXIRUR Position */ +#define SCnSCB_ACTLR_DISCRITAXIRUR_Msk (1UL << SCnSCB_ACTLR_DISCRITAXIRUR_Pos) /*!< ACTLR: DISCRITAXIRUR Mask */ + +#define SCnSCB_ACTLR_DISBTACALLOC_Pos 14U /*!< ACTLR: DISBTACALLOC Position */ +#define SCnSCB_ACTLR_DISBTACALLOC_Msk (1UL << SCnSCB_ACTLR_DISBTACALLOC_Pos) /*!< ACTLR: DISBTACALLOC Mask */ + +#define SCnSCB_ACTLR_DISBTACREAD_Pos 13U /*!< ACTLR: DISBTACREAD Position */ +#define SCnSCB_ACTLR_DISBTACREAD_Msk (1UL << SCnSCB_ACTLR_DISBTACREAD_Pos) /*!< ACTLR: DISBTACREAD Mask */ + +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 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_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \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; + +/** \brief FPU 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_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY 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_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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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 */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \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 TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB 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 + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \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); + } +} + + +/** + \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 *) ((uintptr_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 *) ((uintptr_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(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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_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 */ + + +/* ########################## Cache functions #################################### */ + +#if ((defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U)) || \ + (defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U))) + #include "m-profile/armv7m_cachel1.h" +#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 */ +} + +#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_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h new file mode 100644 index 00000000000..8a8b8954f95 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h @@ -0,0 +1,4936 @@ +/* + * Copyright (c) 2022-2024 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. + */ + +/* + * CMSIS Cortex-M85 Core Peripheral Access Layer Header File + */ + +#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) && (__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__) + #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) && (__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_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 EWIC Interrupt Status Access 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_PMU_Pos 5U /*!< SCB DFSR: PMU Position */ +#define SCB_DFSR_PMU_Msk (1UL << SCB_DFSR_PMU_Pos) /*!< SCB DFSR: PMU Mask */ + +#define 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief ICB 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 */ + +/** \brief ICB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[27U]; + __IM uint32_t ITREAD; /*!< Offset: 0xEF0 (R/ ) Integration Read Register */ + uint32_t RESERVED4[1U]; + __OM uint32_t ITWRITE; /*!< Offset: 0xEF8 ( /W) Integration Write Register */ + uint32_t RESERVED5[1U]; + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control Register */ + uint32_t RESERVED6[46U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ + uint32_t RESERVED7[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief ITM Integration Read Register Definitions */ +#define ITM_ITREAD_AFVALID_Pos 1U /*!< ITM ITREAD: AFVALID Position */ +#define ITM_ITREAD_AFVALID_Msk (1UL << ITM_ITREAD_AFVALID_Pos) /*!< ITM ITREAD: AFVALID Mask */ + +#define ITM_ITREAD_ATREADY_Pos 0U /*!< ITM ITREAD: ATREADY Position */ +#define ITM_ITREAD_ATREADY_Msk (1UL /*<< ITM_ITREAD_ATREADY_Pos*/) /*!< ITM ITREAD: ATREADY Mask */ + +/** \brief ITM Integration Write Register Definitions */ +#define ITM_ITWRITE_AFVALID_Pos 1U /*!< ITM ITWRITE: AFVALID Position */ +#define ITM_ITWRITE_AFVALID_Msk (1UL << ITM_ITWRITE_AFVALID_Pos) /*!< ITM ITWRITE: AFVALID Mask */ + +#define ITM_ITWRITE_ATREADY_Pos 0U /*!< ITM ITWRITE: ATREADY Position */ +#define ITM_ITWRITE_ATREADY_Msk (1UL /*<< ITM_ITWRITE_ATREADY_Pos*/) /*!< ITM ITWRITE: ATREADY Mask */ + +/** \brief ITM Integration Mode Control Register Definitions */ +#define ITM_ITCTRL_IME_Pos 0U /*!< ITM ITCTRL: IME Position */ +#define ITM_ITCTRL_IME_Msk (1UL /*<< ITM_ITCTRL_IME_Pos*/) /*!< ITM ITCTRL: IME 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 */ + __IOM uint32_t VMASK1; /*!< Offset: 0x03C (R/W) Comparator Value Mask 1 */ + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + __IOM uint32_t VMASK3; /*!< Offset: 0x05C (R/W) Comparator Value Mask 3 */ + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED14[968U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Type Architecture Register */ + uint32_t RESERVED15[3U]; + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (0x3UL << 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; + +/** \brief MemSysCtl Memory System Control Register Definitions */ +#define MEMSYSCTL_MSCR_CPWRDN_Pos 17U /*!< MEMSYSCTL MSCR: CPWRDN Position */ +#define MEMSYSCTL_MSCR_CPWRDN_Msk (1UL << MEMSYSCTL_MSCR_CPWRDN_Pos) /*!< MEMSYSCTL MSCR: CPWRDN Mask */ + +#define MEMSYSCTL_MSCR_DCCLEAN_Pos 16U /*!< MEMSYSCTL MSCR: DCCLEAN Position */ +#define MEMSYSCTL_MSCR_DCCLEAN_Msk (1UL << MEMSYSCTL_MSCR_DCCLEAN_Pos) /*!< MEMSYSCTL MSCR: DCCLEAN Mask */ + +#define MEMSYSCTL_MSCR_ICACTIVE_Pos 13U /*!< MEMSYSCTL MSCR: ICACTIVE Position */ +#define MEMSYSCTL_MSCR_ICACTIVE_Msk (1UL << MEMSYSCTL_MSCR_ICACTIVE_Pos) /*!< MEMSYSCTL MSCR: ICACTIVE Mask */ + +#define MEMSYSCTL_MSCR_DCACTIVE_Pos 12U /*!< MEMSYSCTL MSCR: DCACTIVE Position */ +#define MEMSYSCTL_MSCR_DCACTIVE_Msk (1UL << MEMSYSCTL_MSCR_DCACTIVE_Pos) /*!< MEMSYSCTL MSCR: DCACTIVE Mask */ + +#define MEMSYSCTL_MSCR_TECCCHKDIS_Pos 4U /*!< MEMSYSCTL MSCR: TECCCHKDIS Position */ +#define MEMSYSCTL_MSCR_TECCCHKDIS_Msk (1UL << MEMSYSCTL_MSCR_TECCCHKDIS_Pos) /*!< MEMSYSCTL MSCR: TECCCHKDIS Mask */ + +#define MEMSYSCTL_MSCR_EVECCFAULT_Pos 3U /*!< MEMSYSCTL MSCR: EVECCFAULT Position */ +#define MEMSYSCTL_MSCR_EVECCFAULT_Msk (1UL << MEMSYSCTL_MSCR_EVECCFAULT_Pos) /*!< MEMSYSCTL MSCR: EVECCFAULT Mask */ + +#define MEMSYSCTL_MSCR_FORCEWT_Pos 2U /*!< MEMSYSCTL MSCR: FORCEWT Position */ +#define MEMSYSCTL_MSCR_FORCEWT_Msk (1UL << MEMSYSCTL_MSCR_FORCEWT_Pos) /*!< MEMSYSCTL MSCR: FORCEWT Mask */ + +#define MEMSYSCTL_MSCR_ECCEN_Pos 1U /*!< MEMSYSCTL MSCR: ECCEN Position */ +#define MEMSYSCTL_MSCR_ECCEN_Msk (1UL << MEMSYSCTL_MSCR_ECCEN_Pos) /*!< MEMSYSCTL MSCR: ECCEN Mask */ + +/** \brief MemSysCtl Prefetcher Control Register Definitions */ +#define MEMSYSCTL_PFCR_DIS_NLP_Pos 7U /*!< MEMSYSCTL PFCR: DIS_NLP Position */ +#define MEMSYSCTL_PFCR_DIS_NLP_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_PFCR_ENABLE_Pos*/) /*!< MEMSYSCTL PFCR: ENABLE Mask */ + +/** \brief MemSysCtl ITCM Control 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 (1UL /*<< MEMSYSCTL_ITCMCR_EN_Pos*/) /*!< MEMSYSCTL ITCMCR: EN Mask */ + +/** \brief MemSysCtl DTCM Control 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 (1UL /*<< MEMSYSCTL_DTCMCR_EN_Pos*/) /*!< MEMSYSCTL DTCMCR: EN Mask */ + +/** \brief MemSysCtl P-AHB Control 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 (1UL /*<< MEMSYSCTL_PAHBCR_EN_Pos*/) /*!< MEMSYSCTL PAHBCR: EN Mask */ + +/** \brief MemSysCtl ITGU Control Register Definitions */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL ITGU_CTRL: DEREN Position */ +#define MEMSYSCTL_ITGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_ITGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL ITGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl ITGU Configuration Register Definitions */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL ITGU_CFG: PRESENT Position */ +#define MEMSYSCTL_ITGU_CFG_PRESENT_Msk (1UL << 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 */ + +/** \brief MemSysCtl DTGU Control Registers Definitions */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Pos 1U /*!< MEMSYSCTL DTGU_CTRL: DEREN Position */ +#define MEMSYSCTL_DTGU_CTRL_DEREN_Msk (1UL << 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 (1UL /*<< MEMSYSCTL_DTGU_CTRL_DBFEN_Pos*/) /*!< MEMSYSCTL DTGU_CTRL: DBFEN Mask */ + +/** \brief MemSysCtl DTGU Configuration Register Definitions */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Pos 31U /*!< MEMSYSCTL DTGU_CFG: PRESENT Position */ +#define MEMSYSCTL_DTGU_CFG_PRESENT_Msk (1UL << 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; + +/** \brief PwrModCtl Core Power Domain Low Power State 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 */ + +/** \brief PwrModCtl Debug Power Domain Low Power State 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 +{ + __IOM uint32_t EWIC_CR; /*!< Offset: 0x000 (R/W) EWIC Control Register */ + __IOM uint32_t EWIC_ASCR; /*!< Offset: 0x004 (R/W) EWIC Automatic Sequence Control Register */ + __OM uint32_t EWIC_CLRMASK; /*!< Offset: 0x008 ( /W) EWIC Clear Mask Register */ + __IM uint32_t EWIC_NUMID; /*!< Offset: 0x00C (R/ ) EWIC Event Number ID Register */ + uint32_t RESERVED0[124U]; + __IOM uint32_t EWIC_MASKA; /*!< Offset: 0x200 (R/W) EWIC MaskA Register */ + __IOM uint32_t EWIC_MASKn[15]; /*!< Offset: 0x204 (R/W) EWIC Maskn Registers */ + uint32_t RESERVED1[112U]; + __IM uint32_t EWIC_PENDA; /*!< Offset: 0x400 (R/ ) EWIC PendA Event Register */ + __IOM uint32_t EWIC_PENDn[15]; /*!< Offset: 0x404 (R/W) EWIC Pendn Event Registers */ + uint32_t RESERVED2[112U]; + __IM uint32_t EWIC_PSR; /*!< Offset: 0x600 (R/ ) EWIC Pend Summary Register */ +} EWIC_Type; + +/** \brief EWIC Control Register Definitions */ +#define EWIC_EWIC_CR_EN_Pos 0U /*!< EWIC EWIC_CR: EN Position */ +#define EWIC_EWIC_CR_EN_Msk (1UL /*<< EWIC_EWIC_CR_EN_Pos*/) /*!< EWIC EWIC_CR: EN Mask */ + +/** \brief EWIC Automatic Sequence Control Register Definitions */ +#define EWIC_EWIC_ASCR_ASPU_Pos 1U /*!< EWIC EWIC_ASCR: ASPU Position */ +#define EWIC_EWIC_ASCR_ASPU_Msk (1UL << EWIC_EWIC_ASCR_ASPU_Pos) /*!< EWIC EWIC_ASCR: ASPU Mask */ + +#define EWIC_EWIC_ASCR_ASPD_Pos 0U /*!< EWIC EWIC_ASCR: ASPD Position */ +#define EWIC_EWIC_ASCR_ASPD_Msk (1UL /*<< EWIC_EWIC_ASCR_ASPD_Pos*/) /*!< EWIC EWIC_ASCR: ASPD Mask */ + +/** \brief EWIC Event Number ID Register Definitions */ +#define EWIC_EWIC_NUMID_NUMEVENT_Pos 0U /*!< EWIC_NUMID: NUMEVENT Position */ +#define EWIC_EWIC_NUMID_NUMEVENT_Msk (0xFFFFUL /*<< EWIC_EWIC_NUMID_NUMEVENT_Pos*/) /*!< EWIC_NUMID: NUMEVENT Mask */ + +/** \brief EWIC Mask A Register Definitions */ +#define EWIC_EWIC_MASKA_EDBGREQ_Pos 2U /*!< EWIC EWIC_MASKA: EDBGREQ Position */ +#define EWIC_EWIC_MASKA_EDBGREQ_Msk (1UL << EWIC_EWIC_MASKA_EDBGREQ_Pos) /*!< EWIC EWIC_MASKA: EDBGREQ Mask */ + +#define EWIC_EWIC_MASKA_NMI_Pos 1U /*!< EWIC EWIC_MASKA: NMI Position */ +#define EWIC_EWIC_MASKA_NMI_Msk (1UL << EWIC_EWIC_MASKA_NMI_Pos) /*!< EWIC EWIC_MASKA: NMI Mask */ + +#define EWIC_EWIC_MASKA_EVENT_Pos 0U /*!< EWIC EWIC_MASKA: EVENT Position */ +#define EWIC_EWIC_MASKA_EVENT_Msk (1UL /*<< EWIC_EWIC_MASKA_EVENT_Pos*/) /*!< EWIC EWIC_MASKA: EVENT Mask */ + +/** \brief EWIC Mask n Register Definitions */ +#define EWIC_EWIC_MASKn_IRQ_Pos 0U /*!< EWIC EWIC_MASKn: IRQ Position */ +#define EWIC_EWIC_MASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_MASKn_IRQ_Pos*/) /*!< EWIC EWIC_MASKn: IRQ Mask */ + +/** \brief EWIC Pend A Register Definitions */ +#define EWIC_EWIC_PENDA_EDBGREQ_Pos 2U /*!< EWIC EWIC_PENDA: EDBGREQ Position */ +#define EWIC_EWIC_PENDA_EDBGREQ_Msk (1UL << EWIC_EWIC_PENDA_EDBGREQ_Pos) /*!< EWIC EWIC_PENDA: EDBGREQ Mask */ + +#define EWIC_EWIC_PENDA_NMI_Pos 1U /*!< EWIC EWIC_PENDA: NMI Position */ +#define EWIC_EWIC_PENDA_NMI_Msk (1UL << EWIC_EWIC_PENDA_NMI_Pos) /*!< EWIC EWIC_PENDA: NMI Mask */ + +#define EWIC_EWIC_PENDA_EVENT_Pos 0U /*!< EWIC EWIC_PENDA: EVENT Position */ +#define EWIC_EWIC_PENDA_EVENT_Msk (1UL /*<< EWIC_EWIC_PENDA_EVENT_Pos*/) /*!< EWIC EWIC_PENDA: EVENT Mask */ + +/** \brief EWIC Pend n Register Definitions */ +#define EWIC_EWIC_PENDn_IRQ_Pos 0U /*!< EWIC EWIC_PENDn: IRQ Position */ +#define EWIC_EWIC_PENDn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_EWIC_PENDn_IRQ_Pos*/) /*!< EWIC EWIC_PENDn: IRQ Mask */ + +/** \brief EWIC Pend Summary Register Definitions */ +#define EWIC_EWIC_PSR_NZ_Pos 1U /*!< EWIC EWIC_PSR: NZ Position */ +#define EWIC_EWIC_PSR_NZ_Msk (0x7FFFUL << EWIC_EWIC_PSR_NZ_Pos) /*!< EWIC EWIC_PSR: NZ Mask */ + +#define EWIC_EWIC_PSR_NZA_Pos 0U /*!< EWIC EWIC_PSR: NZA Position */ +#define EWIC_EWIC_PSR_NZA_Msk (1UL /*<< EWIC_EWIC_PSR_NZA_Pos*/) /*!< EWIC EWIC_PSR: NZA Mask */ + +/*@}*/ /* end of group EWIC_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup EWIC_ISA_Type External Wakeup Interrupt Controller (EWIC) interrupt status access registers + \brief Type definitions for the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA) + @{ + */ + +/** + \brief Structure type to access the External Wakeup Interrupt Controller interrupt status access registers (EWIC_ISA). + */ +typedef struct +{ + __OM uint32_t EVENTSPR; /*!< Offset: 0x000 ( /W) Event Set Pending Register */ + uint32_t RESERVED0[31U]; + __IM uint32_t EVENTMASKA; /*!< Offset: 0x080 (R/ ) Event Mask A Register */ + __IM uint32_t EVENTMASKn[15]; /*!< Offset: 0x084 (R/ ) Event Mask Register */ +} EWIC_ISA_Type; + +/** \brief EWIC_ISA Event Set Pending Register Definitions */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTSPR: EDBGREQ Position */ +#define EWIC_ISA_EVENTSPR_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTSPR_EDBGREQ_Pos) /*!< EWIC_ISA EVENTSPR: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTSPR_NMI_Pos 1U /*!< EWIC_ISA EVENTSPR: NMI Position */ +#define EWIC_ISA_EVENTSPR_NMI_Msk (1UL << EWIC_ISA_EVENTSPR_NMI_Pos) /*!< EWIC_ISA EVENTSPR: NMI Mask */ + +#define EWIC_ISA_EVENTSPR_EVENT_Pos 0U /*!< EWIC_ISA EVENTSPR: EVENT Position */ +#define EWIC_ISA_EVENTSPR_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTSPR_EVENT_Pos*/) /*!< EWIC_ISA EVENTSPR: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask A Register Definitions */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Pos 2U /*!< EWIC_ISA EVENTMASKA: EDBGREQ Position */ +#define EWIC_ISA_EVENTMASKA_EDBGREQ_Msk (1UL << EWIC_ISA_EVENTMASKA_EDBGREQ_Pos) /*!< EWIC_ISA EVENTMASKA: EDBGREQ Mask */ + +#define EWIC_ISA_EVENTMASKA_NMI_Pos 1U /*!< EWIC_ISA EVENTMASKA: NMI Position */ +#define EWIC_ISA_EVENTMASKA_NMI_Msk (1UL << EWIC_ISA_EVENTMASKA_NMI_Pos) /*!< EWIC_ISA EVENTMASKA: NMI Mask */ + +#define EWIC_ISA_EVENTMASKA_EVENT_Pos 0U /*!< EWIC_ISA EVENTMASKA: EVENT Position */ +#define EWIC_ISA_EVENTMASKA_EVENT_Msk (1UL /*<< EWIC_ISA_EVENTMASKA_EVENT_Pos*/) /*!< EWIC_ISA EVENTMASKA: EVENT Mask */ + +/** \brief EWIC_ISA Event Mask n Register Definitions */ +#define EWIC_ISA_EVENTMASKn_IRQ_Pos 0U /*!< EWIC_ISA EVENTMASKn: IRQ Position */ +#define EWIC_ISA_EVENTMASKn_IRQ_Msk (0xFFFFFFFFUL /*<< EWIC_ISA_EVENTMASKn_IRQ_Pos*/) /*!< EWIC_ISA EVENTMASKn: IRQ Mask */ + +/*@}*/ /* end of group EWIC_ISA_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; + +/** \brief ErrBnk Instruction Cache Error Bank Register 0 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 (1UL << 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 (1UL << ERRBNK_IEBR0_LOCKED_Pos) /*!< ERRBNK IEBR0: LOCKED Mask */ + +#define ERRBNK_IEBR0_VALID_Pos 0U /*!< ERRBNK IEBR0: VALID Position */ +#define ERRBNK_IEBR0_VALID_Msk (1UL << /*ERRBNK_IEBR0_VALID_Pos*/) /*!< ERRBNK IEBR0: VALID Mask */ + +/** \brief ErrBnk Instruction Cache Error Bank Register 1 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 (1UL << 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 (1UL << ERRBNK_IEBR1_LOCKED_Pos) /*!< ERRBNK IEBR1: LOCKED Mask */ + +#define ERRBNK_IEBR1_VALID_Pos 0U /*!< ERRBNK IEBR1: VALID Position */ +#define ERRBNK_IEBR1_VALID_Msk (1UL << /*ERRBNK_IEBR1_VALID_Pos*/) /*!< ERRBNK IEBR1: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 0 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 (1UL << ERRBNK_DEBR0_TYPE_Pos) /*!< ERRBNK DEBR0: TYPE Mask */ + +#define ERRBNK_DEBR0_BANK_Pos 16U /*!< ERRBNK DEBR0: BANK Position */ +#define ERRBNK_DEBR0_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR0_LOCKED_Pos) /*!< ERRBNK DEBR0: LOCKED Mask */ + +#define ERRBNK_DEBR0_VALID_Pos 0U /*!< ERRBNK DEBR0: VALID Position */ +#define ERRBNK_DEBR0_VALID_Msk (1UL << /*ERRBNK_DEBR0_VALID_Pos*/) /*!< ERRBNK DEBR0: VALID Mask */ + +/** \brief ErrBnk Data Cache Error Bank Register 1 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 (1UL << ERRBNK_DEBR1_TYPE_Pos) /*!< ERRBNK DEBR1: TYPE Mask */ + +#define ERRBNK_DEBR1_BANK_Pos 16U /*!< ERRBNK DEBR1: BANK Position */ +#define ERRBNK_DEBR1_BANK_Msk (1UL << 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 (1UL << ERRBNK_DEBR1_LOCKED_Pos) /*!< ERRBNK DEBR1: LOCKED Mask */ + +#define ERRBNK_DEBR1_VALID_Pos 0U /*!< ERRBNK DEBR1: VALID Position */ +#define ERRBNK_DEBR1_VALID_Msk (1UL << /*ERRBNK_DEBR1_VALID_Pos*/) /*!< ERRBNK DEBR1: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 0 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 (1UL << ERRBNK_TEBR0_POISON_Pos) /*!< ERRBNK TEBR0: POISON Mask */ + +#define ERRBNK_TEBR0_TYPE_Pos 27U /*!< ERRBNK TEBR0: TYPE Position */ +#define ERRBNK_TEBR0_TYPE_Msk (1UL << ERRBNK_TEBR0_TYPE_Pos) /*!< ERRBNK TEBR0: TYPE Mask */ + +#define ERRBNK_TEBR0_BANK_Pos 24U /*!< ERRBNK TEBR0: BANK Position */ +#define ERRBNK_TEBR0_BANK_Msk (0x7UL << 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 (1UL << ERRBNK_TEBR0_LOCKED_Pos) /*!< ERRBNK TEBR0: LOCKED Mask */ + +#define ERRBNK_TEBR0_VALID_Pos 0U /*!< ERRBNK TEBR0: VALID Position */ +#define ERRBNK_TEBR0_VALID_Msk (1UL << /*ERRBNK_TEBR0_VALID_Pos*/) /*!< ERRBNK TEBR0: VALID Mask */ + +/** \brief ErrBnk TCM Error Bank Register 1 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 (1UL << ERRBNK_TEBR1_POISON_Pos) /*!< ERRBNK TEBR1: POISON Mask */ + +#define ERRBNK_TEBR1_TYPE_Pos 27U /*!< ERRBNK TEBR1: TYPE Position */ +#define ERRBNK_TEBR1_TYPE_Msk (1UL << ERRBNK_TEBR1_TYPE_Pos) /*!< ERRBNK TEBR1: TYPE Mask */ + +#define ERRBNK_TEBR1_BANK_Pos 24U /*!< ERRBNK TEBR1: BANK Position */ +#define ERRBNK_TEBR1_BANK_Msk (0x7UL << 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 (1UL << ERRBNK_TEBR1_LOCKED_Pos) /*!< ERRBNK TEBR1: LOCKED Mask */ + +#define ERRBNK_TEBR1_VALID_Pos 0U /*!< ERRBNK TEBR1: VALID Position */ +#define ERRBNK_TEBR1_VALID_Msk (1UL << /*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; + +/** \brief PrcCfgInf Processor Configuration Information Selection Register Definitions */ + +/** \brief PrcCfgInf Processor Configuration Information Read Data Register 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]; + __IOM uint32_t STLIDMPUSR; /*!< Offset: 0x010 ( /W) MPU Sample 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 */ + __IM uint32_t STLD2MPUOR; /*!< Offset: 0x020 (R/ ) MPU Memory Attributes Register 2 */ + __IM uint32_t STLD3MPUOR; /*!< Offset: 0x024 (R/ ) MPU Memory Attributes Register 3 */ + __IOM uint32_t STLSTBSLOTSR; /*!< Offset: 0x028 (R/W) STB Control Register */ + __IOM uint32_t STLLFDENTRYSR; /*!< Offset: 0x02C (R/W) LFD Control Register */ +} STL_Type; + +/** \brief STL NVIC Pending Priority Tree Register Definitions */ +#define STL_STLNVICPENDOR_VALID_Pos 18U /*!< STL STLNVICPENDOR: VALID Position */ +#define STL_STLNVICPENDOR_VALID_Msk (1UL << STL_STLNVICPENDOR_VALID_Pos) /*!< STL STLNVICPENDOR: VALID Mask */ + +#define STL_STLNVICPENDOR_TARGET_Pos 17U /*!< STL STLNVICPENDOR: TARGET Position */ +#define STL_STLNVICPENDOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL NVIC Active Priority Tree Register Definitions */ +#define STL_STLNVICACTVOR_VALID_Pos 18U /*!< STL STLNVICACTVOR: VALID Position */ +#define STL_STLNVICACTVOR_VALID_Msk (1UL << STL_STLNVICACTVOR_VALID_Pos) /*!< STL STLNVICACTVOR: VALID Mask */ + +#define STL_STLNVICACTVOR_TARGET_Pos 17U /*!< STL STLNVICACTVOR: TARGET Position */ +#define STL_STLNVICACTVOR_TARGET_Msk (1UL << 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 */ + +/** \brief STL MPU Sample Register 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 (1UL << STL_STLIDMPUSR_INSTR_Pos) /*!< STL STLIDMPUSR: INSTR Mask */ + +#define STL_STLIDMPUSR_DATA_Pos 1U /*!< STL STLIDMPUSR: DATA Position */ +#define STL_STLIDMPUSR_DATA_Msk (1UL << STL_STLIDMPUSR_DATA_Pos) /*!< STL STLIDMPUSR: DATA Mask */ + +/** \brief STL MPU Region Hit Register 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 */ + +/** \brief STL MPU Memory Attributes Register 0 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 */ + +/** \brief STL MPU Memory Attributes Register 1 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 */ + +/** \brief STL MPU Memory Attributes Register 2 Definitions */ +#define STL_STLD2MPUOR_HITREGION_Pos 9U /*!< STL STLD2MPUOR: HITREGION Position */ +#define STL_STLD2MPUOR_HITREGION_Msk (0xFFUL << STL_STLD2MPUOR_HITREGION_Pos) /*!< STL STLD2MPUOR: HITREGION Mask */ + +#define STL_STLD2MPUOR_ATTR_Pos 0U /*!< STL STLD2MPUOR: ATTR Position */ +#define STL_STLD2MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD2MPUOR_ATTR_Pos*/) /*!< STL STLD2MPUOR: ATTR Mask */ + +/** \brief STL MPU Memory Attributes Register 3 Definitions */ +#define STL_STLD3MPUOR_HITREGION_Pos 9U /*!< STL STLD3MPUOR: HITREGION Position */ +#define STL_STLD3MPUOR_HITREGION_Msk (0xFFUL << STL_STLD3MPUOR_HITREGION_Pos) /*!< STL STLD3MPUOR: HITREGION Mask */ + +#define STL_STLD3MPUOR_ATTR_Pos 0U /*!< STL STLD3MPUOR: ATTR Position */ +#define STL_STLD3MPUOR_ATTR_Msk (0x1FFUL /*<< STL_STLD3MPUOR_ATTR_Pos*/) /*!< STL STLD3MPUOR: ATTR Mask */ + +/** \brief STL STB Control Register Definitions */ +#define STL_STLSTBSLOTSR_VALID_Pos 4U /*!< STL STLSTBSLOTSR: VALID Position */ +#define STL_STLSTBSLOTSR_VALID_Msk (1UL << STL_STLSTBSLOTSR_VALID_Pos) /*!< STL STLSTBSLOTSR: VALID Mask */ + +#define STL_STLSTBSLOTSR_STBSLOTNUM_Pos 0U /*!< STL STLSTBSLOTSR: STBSLOTNUM Position */ +#define STL_STLSTBSLOTSR_STBSLOTNUM_Msk (0xFUL /*<< STL_STLSTBSLOTSR_STBSLOTNUM_Pos*/) /*!< STL STLSTBSLOTSR: STBSLOTNUM Mask */ + +/** \brief STL LFD Control Register Definitions */ +#define STL_STLLFDENTRYSR_VALID_Pos 4U /*!< STL STLLFDENTRYSR: VALID Position */ +#define STL_STLLFDENTRYSR_VALID_Msk (1UL << STL_STLLFDENTRYSR_VALID_Pos) /*!< STL STLLFDENTRYSR: VALID Mask */ + +#define STL_STLLFDENTRYSR_LFDENTRYNUM_Pos 0U /*!< STL STLLFDENTRYSR: LFDENTRYNUM Position */ +#define STL_STLLFDENTRYSR_LFDENTRYNUM_Msk (0xFUL /*<< STL_STLLFDENTRYSR_LFDENTRYNUM_Pos*/) /*!< STL STLLFDENTRYSR: LFDENTRYNUM Mask */ +/*@}*/ /* end of group STL_Type */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU Claim Tag Set Register Definitions */ +#define TPIU_CLAIMSET_SET_Pos 0U /*!< TPIU CLAIMSET: SET Position */ +#define TPIU_CLAIMSET_SET_Msk (0xFUL /*<< TPIU_CLAIMSET_SET_Pos*/) /*!< TPIU CLAIMSET: SET Mask */ + +/** \brief TPIU Claim Tag Clear Register Definitions */ +#define TPIU_CLAIMCLR_CLR_Pos 0U /*!< TPIU CLAIMCLR: CLR Position */ +#define TPIU_CLAIMCLR_CLR_Msk (0xFUL /*<< TPIU_CLAIMCLR_CLR_Pos*/) /*!< TPIU CLAIMCLR: CLR Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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) Event Counter Registers */ +#if __PMU_NUM_EVENTCNT<31 + uint32_t RESERVED0[31U-__PMU_NUM_EVENTCNT]; +#endif + __IOM uint32_t CCNTR; /*!< Offset: 0x7C (R/W) Cycle Counter Register */ + uint32_t RESERVED1[224]; + __IOM uint32_t EVTYPER[__PMU_NUM_EVENTCNT]; /*!< Offset: 0x400 (R/W) 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) Cycle Counter Filter Register */ + uint32_t RESERVED3[480]; + __IOM uint32_t CNTENSET; /*!< Offset: 0xC00 (R/W) Count Enable Set Register */ + uint32_t RESERVED4[7]; + __IOM uint32_t CNTENCLR; /*!< Offset: 0xC20 (R/W) Count Enable Clear Register */ + uint32_t RESERVED5[7]; + __IOM uint32_t INTENSET; /*!< Offset: 0xC40 (R/W) Interrupt Enable Set Register */ + uint32_t RESERVED6[7]; + __IOM uint32_t INTENCLR; /*!< Offset: 0xC60 (R/W) Interrupt Enable Clear Register */ + uint32_t RESERVED7[7]; + __IOM uint32_t OVSCLR; /*!< Offset: 0xC80 (R/W) Overflow Flag Status Clear Register */ + uint32_t RESERVED8[7]; + __IOM uint32_t SWINC; /*!< Offset: 0xCA0 (R/W) Software Increment Register */ + uint32_t RESERVED9[7]; + __IOM uint32_t OVSSET; /*!< Offset: 0xCC0 (R/W) Overflow Flag Status Set Register */ + uint32_t RESERVED10[79]; + __IOM uint32_t TYPE; /*!< Offset: 0xE00 (R/W) Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0xE04 (R/W) Control Register */ + uint32_t RESERVED11[108]; + __IOM uint32_t AUTHSTATUS; /*!< Offset: 0xFB8 (R/W) Authentication Status Register */ + __IOM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/W) Device Architecture Register */ + uint32_t RESERVED12[3]; + __IOM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/W) Device Type Register */ +} PMU_Type; + +/** \brief 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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP 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: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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 */ + __OM uint32_t DSCEMCR; /*!< Offset: 0x010 ( /W) Debug Set Clear Exception and Monitor Control Register */ + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_FPD_Pos 23U /*!< DCB DHCSR: Floating-point registers Debuggable Position */ +#define DCB_DHCSR_S_FPD_Msk (1UL << DCB_DHCSR_S_FPD_Pos) /*!< DCB DHCSR: Floating-point registers Debuggable Mask */ + +#define DCB_DHCSR_S_SUIDE_Pos 22U /*!< DCB DHCSR: Secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_SUIDE_Msk (1UL << DCB_DHCSR_S_SUIDE_Pos) /*!< DCB DHCSR: Secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_NSUIDE_Pos 21U /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Position */ +#define DCB_DHCSR_S_NSUIDE_Msk (1UL << DCB_DHCSR_S_NSUIDE_Pos) /*!< DCB DHCSR: Non-secure unprivileged halting debug enabled Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_PMOV_Pos 6U /*!< DCB DHCSR: Halt on PMU overflow control Position */ +#define DCB_DHCSR_C_PMOV_Msk (1UL << DCB_DHCSR_C_PMOV_Pos) /*!< DCB DHCSR: Halt on PMU overflow control Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Set Clear Exception and Monitor Control Register Definitions */ +#define DCB_DSCEMCR_CLR_MON_REQ_Pos 19U /*!< DCB DSCEMCR: Clear monitor request Position */ +#define DCB_DSCEMCR_CLR_MON_REQ_Msk (1UL << DCB_DSCEMCR_CLR_MON_REQ_Pos) /*!< DCB DSCEMCR: Clear monitor request Mask */ + +#define DCB_DSCEMCR_CLR_MON_PEND_Pos 17U /*!< DCB DSCEMCR: Clear monitor pend Position */ +#define DCB_DSCEMCR_CLR_MON_PEND_Msk (1UL << DCB_DSCEMCR_CLR_MON_PEND_Pos) /*!< DCB DSCEMCR: Clear monitor pend Mask */ + +#define DCB_DSCEMCR_SET_MON_REQ_Pos 3U /*!< DCB DSCEMCR: Set monitor request Position */ +#define DCB_DSCEMCR_SET_MON_REQ_Msk (1UL << DCB_DSCEMCR_SET_MON_REQ_Pos) /*!< DCB DSCEMCR: Set monitor request Mask */ + +#define DCB_DSCEMCR_SET_MON_PEND_Pos 1U /*!< DCB DSCEMCR: Set monitor pend Position */ +#define DCB_DSCEMCR_SET_MON_PEND_Msk (1UL << DCB_DSCEMCR_SET_MON_PEND_Pos) /*!< DCB DSCEMCR: Set monitor pend Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_UIDEN_Pos 10U /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Position */ +#define DCB_DAUTHCTRL_UIDEN_Msk (1UL << DCB_DAUTHCTRL_UIDEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive Debug Enable Mask */ + +#define DCB_DAUTHCTRL_UIDAPEN_Pos 9U /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Position */ +#define DCB_DAUTHCTRL_UIDAPEN_Msk (1UL << DCB_DAUTHCTRL_UIDAPEN_Pos) /*!< DCB DAUTHCTRL: Unprivileged Invasive DAP Access Enable Mask */ + +#define DCB_DAUTHCTRL_FSDMA_Pos 8U /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Position */ +#define DCB_DAUTHCTRL_FSDMA_Msk (1UL << DCB_DAUTHCTRL_FSDMA_Pos) /*!< DCB DAUTHCTRL: Force Secure DebugMonitor Allowed Mask */ + +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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 +{ + uint32_t RESERVED0[2U]; + __IM uint32_t DAUTHSTATUS; /*!< Offset: 0x008 (R/ ) Debug Authentication Status Register */ + __IM uint32_t DDEVARCH; /*!< Offset: 0x00C (R/ ) SCS Device Architecture Register */ + uint32_t RESERVED1[3U]; + __IM uint32_t DDEVTYPE; /*!< Offset: 0x01C (R/ ) SCS Device Type Register */ +} DIB_Type; + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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_ISA_BASE (0xE001E400UL) /*!< External Wakeup Interrupt Controller interrupt status access Base Address */ + #define PRCCFGINF_BASE (0xE001E700UL) /*!< Processor Configuration Information Base Address */ + #define STL_BASE (0xE001E800UL) /*!< Software Test Library Base Address */ + #define TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ + #define EWIC_BASE (0xE0047000UL) /*!< External Wakeup Interrupt Controller 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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU 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_ISA ((EWIC_ISA_Type *) EWIC_ISA_BASE ) /*!< EWIC interrupt status access 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 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 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 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) */ +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; + __OM uint32_t DSCEMCR; + __IOM uint32_t DAUTHCTRL; + __IOM uint32_t DSCSR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos DCB_DHCSR_S_RESTART_ST_Pos +#define CoreDebug_DHCSR_S_RESTART_ST_Msk DCB_DHCSR_S_RESTART_ST_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_FPD_Pos DCB_DHCSR_S_FPD_Pos +#define CoreDebug_DHCSR_S_FPD_Msk DCB_DHCSR_S_FPD_Msk + +#define CoreDebug_DHCSR_S_SUIDE_Pos DCB_DHCSR_S_SUIDE_Pos +#define CoreDebug_DHCSR_S_SUIDE_Msk DCB_DHCSR_S_SUIDE_Msk + +#define CoreDebug_DHCSR_S_NSUIDE_Pos DCB_DHCSR_S_NSUIDE_Pos +#define CoreDebug_DHCSR_S_NSUIDE_Msk DCB_DHCSR_S_NSUIDE_Msk + +#define CoreDebug_DHCSR_S_SDE_Pos DCB_DHCSR_S_SDE_Pos +#define CoreDebug_DHCSR_S_SDE_Msk DCB_DHCSR_S_SDE_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_PMOV_Pos DCB_DHCSR_C_PMOV_Pos +#define CoreDebug_DHCSR_C_PMOV_Msk DCB_DHCSR_C_PMOV_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +/* Debug Set Clear Exception and Monitor Control Register Definitions */ +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Pos DCB_DSCEMCR_CLR_MON_REQ_Pos +#define CoreDebug_DSCEMCR_CLR_MON_REQ_Msk DCB_DSCEMCR_CLR_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Pos DCB_DSCEMCR_CLR_MON_PEND_Pos +#define CoreDebug_DSCEMCR_CLR_MON_PEND_Msk DCB_DSCEMCR_CLR_MON_PEND_Msk + +#define CoreDebug_DSCEMCR_SET_MON_REQ_Pos DCB_DSCEMCR_SET_MON_REQ_Pos +#define CoreDebug_DSCEMCR_SET_MON_REQ_Msk DCB_DSCEMCR_SET_MON_REQ_Msk + +#define CoreDebug_DSCEMCR_SET_MON_PEND_Pos DCB_DSCEMCR_SET_MON_PEND_Pos +#define CoreDebug_DSCEMCR_SET_MON_PEND_Msk DCB_DSCEMCR_SET_MON_PEND_Msk + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_UIDEN_Pos DCB_DAUTHCTRL_UIDEN_Pos +#define CoreDebug_DAUTHCTRL_UIDEN_Msk DCB_DAUTHCTRL_UIDEN_Msk + +#define CoreDebug_DAUTHCTRL_UIDAPEN_Pos DCB_DAUTHCTRL_UIDAPEN_Pos +#define CoreDebug_DAUTHCTRL_UIDAPEN_Msk DCB_DAUTHCTRL_UIDAPEN_Msk + +#define CoreDebug_DAUTHCTRL_FSDMA_Pos DCB_DAUTHCTRL_FSDMA_Pos +#define CoreDebug_DAUTHCTRL_FSDMA_Msk DCB_DAUTHCTRL_FSDMA_Msk + +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos DCB_DAUTHCTRL_INTSPNIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk DCB_DAUTHCTRL_INTSPNIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos DCB_DAUTHCTRL_SPNIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk DCB_DAUTHCTRL_SPNIDENSEL_Msk + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos DCB_DAUTHCTRL_INTSPIDEN_Pos +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk DCB_DAUTHCTRL_INTSPIDEN_Msk + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos DCB_DAUTHCTRL_SPIDENSEL_Pos +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk DCB_DAUTHCTRL_SPIDENSEL_Msk + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos DCB_DSCSR_CDS_Pos +#define CoreDebug_DSCSR_CDS_Msk DCB_DSCSR_CDS_Msk + +#define CoreDebug_DSCSR_SBRSEL_Pos DCB_DSCSR_SBRSEL_Pos +#define CoreDebug_DSCSR_SBRSEL_Msk DCB_DSCSR_SBRSEL_Msk + +#define CoreDebug_DSCSR_SBRSELEN_Pos DCB_DSCSR_SBRSELEN_Pos +#define CoreDebug_DSCSR_SBRSELEN_Msk DCB_DSCSR_SBRSELEN_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#define CoreDebug_NS ((CoreDebug_Type *) DCB_BASE_NS) +#endif + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 *) ((uintptr_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 *) ((uintptr_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 "m-profile/armv8m_mpu.h" + +#endif + +/* ########################## PMU functions and events #################################### */ + +#if defined (__PMU_PRESENT) && (__PMU_PRESENT == 1U) + +#include "m-profile/armv8m_pmu.h" + +/** + \brief Cortex-M85 PMU events + \note Architectural PMU events can be found in armv8m_pmu.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 */ +#define ARMCM85_PMU_FUSED_INST_RETIRED 0xC500 /*!< Fused instructions architecturally executed */ +#define ARMCM85_PMU_BR_INDIRECT 0xC501 /*!< Indirect branch instruction architecturally executed */ +#define ARMCM85_PMU_BTAC_HIT 0xC502 /*!< BTAC branch predictor hit */ +#define ARMCM85_PMU_BTAC_HIT_RETURNS 0xC503 /*!< Return branch hits BTAC */ +#define ARMCM85_PMU_BTAC_HIT_CALLS 0xC504 /*!< Call branch hits BTAC */ +#define ARMCM85_PMU_BTAC_HIT_INDIRECT 0xC505 /*!< Indirect branch hits BTACT */ +#define ARMCM85_PMU_BTAC_NEW_ALLOC 0xC506 /*!< New allocation to BTAC */ +#define ARMCM85_PMU_BR_IND_MIS_PRED 0xC507 /*!< Indirect branch mis-predicted */ +#define ARMCM85_PMU_BR_RETURN_MIS_PRED 0xC508 /*!< Return branch mis-predicted */ +#define ARMCM85_PMU_BR_BTAC_OFFSET_OVERFLOW 0xC509 /*!< Branch does not allocate in BTAC due to offset overflow */ +#define ARMCM85_PMU_STB_FULL_STALL_AXI 0xC50A /*!< STore Buffer (STB) full with AXI requests causing CPU to stall */ +#define ARMCM85_PMU_STB_FULL_STALL_TCM 0xC50B /*!< STB full with TCM requests causing CPU to stall */ +#define ARMCM85_PMU_CPU_STALLED_AHBS 0xC50C /*!< CPU is stalled because TCM access through AHBS */ +#define ARMCM85_PMU_AHBS_STALLED_CPU 0xC50D /*!< AHBS is stalled due to TCM access by CPU */ +#define ARMCM85_PMU_BR_INTERSTATING_MIS_PRED 0xC50E /*!< Inter-stating branch is mis-predicted. */ +#define ARMCM85_PMU_DWT_STALL 0xC50F /*!< Data Watchpoint and Trace (DWT) stall */ +#define ARMCM85_PMU_DWT_FLUSH 0xC510 /*!< DWT flush */ +#define ARMCM85_PMU_ETM_STALL 0xC511 /*!< Embedded Trace Macrocell (ETM) stall */ +#define ARMCM85_PMU_ETM_FLUSH 0xC512 /*!< ETM flush */ +#define ARMCM85_PMU_ADDRESS_BANK_CONFLICT 0xC513 /*!< Bank conflict prevents memory instruction dual issue */ +#define ARMCM85_PMU_BLOCKED_DUAL_ISSUE 0xC514 /*!< Dual instruction issuing is prevented */ +#define ARMCM85_PMU_FP_CONTEXT_TRIGGER 0xC515 /*!< Floating Point Context is created */ +#define ARMCM85_PMU_TAIL_CHAIN 0xC516 /*!< New exception is handled without first unstacking */ +#define ARMCM85_PMU_LATE_ARRIVAL 0xC517 /*!< Late-arriving exception taken during exception entry */ +#define ARMCM85_PMU_INT_STALL_FAULT 0xC518 /*!< Delayed exception entry due to ongoing fault processing */ +#define ARMCM85_PMU_INT_STALL_DEV 0xC519 /*!< Delayed exception entry due to outstanding device access */ +#define ARMCM85_PMU_PAC_STALL 0xC51A /*!< Stall caused by authentication code computation */ +#define ARMCM85_PMU_PAC_RETIRED 0xC51B /*!< PAC instruction architecturally executed */ +#define ARMCM85_PMU_AUT_RETIRED 0xC51C /*!< AUT instruction architecturally executed */ +#define ARMCM85_PMU_BTI_RETIRED 0xC51D /*!< BTI instruction architecturally executed */ +#define ARMCM85_PMU_PF_NL_MODE 0xC51E /*!< Prefetch in next line mode */ +#define ARMCM85_PMU_PF_STREAM_MODE 0xC51F /*!< Prefetch in stream mode */ +#define ARMCM85_PMU_PF_BUFF_CACHE_HIT 0xC520 /*!< Prefetch request that hit in the cache */ +#define ARMCM85_PMU_PF_REQ_LFB_HIT 0xC521 /*!< Prefetch request that hit in line fill buffers */ +#define ARMCM85_PMU_PF_BUFF_FULL 0xC522 /*!< Number of times prefetch buffer is full */ +#define ARMCM85_PMU_PF_REQ_DCACHE_HIT 0xC523 /*!< Generated prefetch request address that hit in D-Cache */ + +#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 "m-profile/armv7m_cachel1.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 "m-profile/armv81m_pac.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/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h new file mode 100644 index 00000000000..4d85c48d081 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h @@ -0,0 +1,1055 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS SC000 Core Peripheral Access Layer Header File + */ + +#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_SC000_H_GENERIC +#define __CORE_SC000_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 SC000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ + +#define __CORTEX_SC (000U) /*!< Cortex Secure Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV 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 __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #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 SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU 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:28; /*!< bit: 0..27 Reserved */ + 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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + 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; + +/** \brief 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_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T 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 _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL 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[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IPR[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} 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 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED 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[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \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 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 SCnSCB ((SCnSCB_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 */ + +#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 + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick 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 not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #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 not available for SC000 */ + #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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \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[0U] = (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[0U] & (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[0U] = (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[0U] & (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[0U] = (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[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \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[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \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[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \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 *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M0 and M0+ do not require the architectural barrier - assume SC000 is the same */ +} + + +/** + \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 *) ((uintptr_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 = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## 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 */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h new file mode 100644 index 00000000000..670d9114133 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h @@ -0,0 +1,2028 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS SC300 Core Peripheral Access Layer Header File + */ + +#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_SC300_H_GENERIC +#define __CORE_SC300_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 SC3000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ + +#define __CORTEX_SC (300U) /*!< Cortex Secure Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ti__) + #if defined (__ARM_FP) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV 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 __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!" + #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 SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU 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:27; /*!< bit: 0..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; + +/** \brief 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 */ + + +/** + \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; + +/** \brief 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:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + 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; + +/** \brief 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_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 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 to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/** \brief CONTROL Register Definitions */ +#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[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RESERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IPR[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/** \brief NVIC 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[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/** \brief 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 */ + +/** \brief SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET 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_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 */ + +/** \brief SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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_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 */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/** \brief 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_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 */ + +/** \brief SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN 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 */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/** \brief SCB System Handler Control and State Register Definitions */ +#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_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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_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 */ + +/** \brief SCB BusFault Status Register Definitions (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_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 */ + +/** \brief SCB UsageFault Status Register Definitions (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_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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/*@} 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 */ +} SCnSCB_Type; + +/** \brief SCnSCB 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 */ + +/** \brief SCnSCB Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ +} ITM_Type; + +/** \brief 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 */ + +/** \brief 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_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 */ + +/** \brief 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 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/** \brief DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 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_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration ETM Data Register Definitions (FIFO0) */ +#define TPIU_FIFO0_ITM_ATVALID_Pos 29U /*!< TPIU FIFO0: ITM_ATVALID Position */ +#define TPIU_FIFO0_ITM_ATVALID_Msk (1UL << TPIU_FIFO0_ITM_ATVALID_Pos) /*!< TPIU FIFO0: ITM_ATVALID Mask */ + +#define TPIU_FIFO0_ITM_bytecount_Pos 27U /*!< TPIU FIFO0: ITM_bytecount Position */ +#define TPIU_FIFO0_ITM_bytecount_Msk (0x3UL << TPIU_FIFO0_ITM_bytecount_Pos) /*!< TPIU FIFO0: ITM_bytecount Mask */ + +#define TPIU_FIFO0_ETM_ATVALID_Pos 26U /*!< TPIU FIFO0: ETM_ATVALID Position */ +#define TPIU_FIFO0_ETM_ATVALID_Msk (1UL << TPIU_FIFO0_ETM_ATVALID_Pos) /*!< TPIU FIFO0: ETM_ATVALID Mask */ + +#define TPIU_FIFO0_ETM_bytecount_Pos 24U /*!< TPIU FIFO0: ETM_bytecount Position */ +#define TPIU_FIFO0_ETM_bytecount_Msk (0x3UL << TPIU_FIFO0_ETM_bytecount_Pos) /*!< TPIU FIFO0: ETM_bytecount Mask */ + +#define TPIU_FIFO0_ETM2_Pos 16U /*!< TPIU FIFO0: ETM2 Position */ +#define TPIU_FIFO0_ETM2_Msk (0xFFUL << TPIU_FIFO0_ETM2_Pos) /*!< TPIU FIFO0: ETM2 Mask */ + +#define TPIU_FIFO0_ETM1_Pos 8U /*!< TPIU FIFO0: ETM1 Position */ +#define TPIU_FIFO0_ETM1_Msk (0xFFUL << TPIU_FIFO0_ETM1_Pos) /*!< TPIU FIFO0: ETM1 Mask */ + +#define TPIU_FIFO0_ETM0_Pos 0U /*!< TPIU FIFO0: ETM0 Position */ +#define TPIU_FIFO0_ETM0_Msk (0xFFUL /*<< TPIU_FIFO0_ETM0_Pos*/) /*!< TPIU FIFO0: ETM0 Mask */ + +/** \brief TPIU ITATBCTR2 Register Definitions */ +#define TPIU_ITATBCTR2_ATREADY2_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2 Position */ +#define TPIU_ITATBCTR2_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2 Mask */ + +#define TPIU_ITATBCTR2_ATREADY1_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1 Position */ +#define TPIU_ITATBCTR2_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1 Mask */ + +/** \brief TPIU Integration ITM Data Register Definitions (FIFO1) */ +#define TPIU_FIFO1_ITM_ATVALID_Pos 29U /*!< TPIU FIFO1: ITM_ATVALID Position */ +#define TPIU_FIFO1_ITM_ATVALID_Msk (1UL << TPIU_FIFO1_ITM_ATVALID_Pos) /*!< TPIU FIFO1: ITM_ATVALID Mask */ + +#define TPIU_FIFO1_ITM_bytecount_Pos 27U /*!< TPIU FIFO1: ITM_bytecount Position */ +#define TPIU_FIFO1_ITM_bytecount_Msk (0x3UL << TPIU_FIFO1_ITM_bytecount_Pos) /*!< TPIU FIFO1: ITM_bytecount Mask */ + +#define TPIU_FIFO1_ETM_ATVALID_Pos 26U /*!< TPIU FIFO1: ETM_ATVALID Position */ +#define TPIU_FIFO1_ETM_ATVALID_Msk (1UL << TPIU_FIFO1_ETM_ATVALID_Pos) /*!< TPIU FIFO1: ETM_ATVALID Mask */ + +#define TPIU_FIFO1_ETM_bytecount_Pos 24U /*!< TPIU FIFO1: ETM_bytecount Position */ +#define TPIU_FIFO1_ETM_bytecount_Msk (0x3UL << TPIU_FIFO1_ETM_bytecount_Pos) /*!< TPIU FIFO1: ETM_bytecount Mask */ + +#define TPIU_FIFO1_ITM2_Pos 16U /*!< TPIU FIFO1: ITM2 Position */ +#define TPIU_FIFO1_ITM2_Msk (0xFFUL << TPIU_FIFO1_ITM2_Pos) /*!< TPIU FIFO1: ITM2 Mask */ + +#define TPIU_FIFO1_ITM1_Pos 8U /*!< TPIU FIFO1: ITM1 Position */ +#define TPIU_FIFO1_ITM1_Msk (0xFFUL << TPIU_FIFO1_ITM1_Pos) /*!< TPIU FIFO1: ITM1 Mask */ + +#define TPIU_FIFO1_ITM0_Pos 0U /*!< TPIU FIFO1: ITM0 Position */ +#define TPIU_FIFO1_ITM0_Msk (0xFFUL /*<< TPIU_FIFO1_ITM0_Pos*/) /*!< TPIU FIFO1: ITM0 Mask */ + +/** \brief TPIU ITATBCTR0 Register Definitions */ +#define TPIU_ITATBCTR0_ATREADY2_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2 Position */ +#define TPIU_ITATBCTR0_ATREADY2_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2 Mask */ + +#define TPIU_ITATBCTR0_ATREADY1_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1 Position */ +#define TPIU_ITATBCTR0_ATREADY1_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1 Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_MinBufSz_Pos 6U /*!< TPIU DEVID: MinBufSz Position */ +#define TPIU_DEVID_MinBufSz_Msk (0x7UL << TPIU_DEVID_MinBufSz_Pos) /*!< TPIU DEVID: MinBufSz Mask */ + +#define TPIU_DEVID_AsynClkIn_Pos 5U /*!< TPIU DEVID: AsynClkIn Position */ +#define TPIU_DEVID_AsynClkIn_Msk (1UL << TPIU_DEVID_AsynClkIn_Pos) /*!< TPIU DEVID: AsynClkIn Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/** \brief MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \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 */ +} DCB_Type; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/*@} end of group CMSIS_DCB */ + + +/** + \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 TPIU_BASE (0xE0040000UL) /*!< TPIU Base Address */ +#define DCB_BASE (0xE000EDF0UL) /*!< Core Debug 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 SCnSCB ((SCnSCB_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 TPIU ((TPIU_Type *) TPIU_BASE ) /*!< TPIU configuration struct */ +#define DCB ((DCB_Type *) DCB_BASE ) /*!< DCB 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 + +/*@} */ + + +/** + \defgroup CMSIS_deprecated_aliases Backwards Compatibility Aliases + \brief Alias definitions present for backwards compatibility for deprecated symbols. + @{ + */ + +#ifndef CMSIS_DISABLE_DEPRECATED + +#define SCB_AIRCR_ENDIANESS_Pos SCB_AIRCR_ENDIANNESS_Pos +#define SCB_AIRCR_ENDIANESS_Msk SCB_AIRCR_ENDIANNESS_Msk + +/* deprecated, CMSIS_5 backward compatibility */ +typedef struct +{ + __IOM uint32_t DHCSR; + __OM uint32_t DCRSR; + __IOM uint32_t DCRDR; + __IOM uint32_t DEMCR; +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos DCB_DHCSR_DBGKEY_Pos +#define CoreDebug_DHCSR_DBGKEY_Msk DCB_DHCSR_DBGKEY_Msk + +#define CoreDebug_DHCSR_S_RESET_ST_Pos DCB_DHCSR_S_RESET_ST_Pos +#define CoreDebug_DHCSR_S_RESET_ST_Msk DCB_DHCSR_S_RESET_ST_Msk + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos DCB_DHCSR_S_RETIRE_ST_Pos +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk DCB_DHCSR_S_RETIRE_ST_Msk + +#define CoreDebug_DHCSR_S_LOCKUP_Pos DCB_DHCSR_S_LOCKUP_Pos +#define CoreDebug_DHCSR_S_LOCKUP_Msk DCB_DHCSR_S_LOCKUP_Msk + +#define CoreDebug_DHCSR_S_SLEEP_Pos DCB_DHCSR_S_SLEEP_Pos +#define CoreDebug_DHCSR_S_SLEEP_Msk DCB_DHCSR_S_SLEEP_Msk + +#define CoreDebug_DHCSR_S_HALT_Pos DCB_DHCSR_S_HALT_Pos +#define CoreDebug_DHCSR_S_HALT_Msk DCB_DHCSR_S_HALT_Msk + +#define CoreDebug_DHCSR_S_REGRDY_Pos DCB_DHCSR_S_REGRDY_Pos +#define CoreDebug_DHCSR_S_REGRDY_Msk DCB_DHCSR_S_REGRDY_Msk + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos DCB_DHCSR_C_SNAPSTALL_Pos +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk DCB_DHCSR_C_SNAPSTALL_Msk + +#define CoreDebug_DHCSR_C_MASKINTS_Pos DCB_DHCSR_C_MASKINTS_Pos +#define CoreDebug_DHCSR_C_MASKINTS_Msk DCB_DHCSR_C_MASKINTS_Msk + +#define CoreDebug_DHCSR_C_STEP_Pos DCB_DHCSR_C_STEP_Pos +#define CoreDebug_DHCSR_C_STEP_Msk DCB_DHCSR_C_STEP_Msk + +#define CoreDebug_DHCSR_C_HALT_Pos DCB_DHCSR_C_HALT_Pos +#define CoreDebug_DHCSR_C_HALT_Msk DCB_DHCSR_C_HALT_Msk + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos DCB_DHCSR_C_DEBUGEN_Pos +#define CoreDebug_DHCSR_C_DEBUGEN_Msk DCB_DHCSR_C_DEBUGEN_Msk + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos DCB_DCRSR_REGWnR_Pos +#define CoreDebug_DCRSR_REGWnR_Msk DCB_DCRSR_REGWnR_Msk + +#define CoreDebug_DCRSR_REGSEL_Pos DCB_DCRSR_REGSEL_Pos +#define CoreDebug_DCRSR_REGSEL_Msk DCB_DCRSR_REGSEL_Msk + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos DCB_DEMCR_TRCENA_Pos +#define CoreDebug_DEMCR_TRCENA_Msk DCB_DEMCR_TRCENA_Msk + +#define CoreDebug_DEMCR_MON_REQ_Pos DCB_DEMCR_MON_REQ_Pos +#define CoreDebug_DEMCR_MON_REQ_Msk DCB_DEMCR_MON_REQ_Msk + +#define CoreDebug_DEMCR_MON_STEP_Pos DCB_DEMCR_MON_STEP_Pos +#define CoreDebug_DEMCR_MON_STEP_Msk DCB_DEMCR_MON_STEP_Msk + +#define CoreDebug_DEMCR_MON_PEND_Pos DCB_DEMCR_MON_PEND_Pos +#define CoreDebug_DEMCR_MON_PEND_Msk DCB_DEMCR_MON_PEND_Msk + +#define CoreDebug_DEMCR_MON_EN_Pos DCB_DEMCR_MON_EN_Pos +#define CoreDebug_DEMCR_MON_EN_Msk DCB_DEMCR_MON_EN_Msk + +#define CoreDebug_DEMCR_VC_HARDERR_Pos DCB_DEMCR_VC_HARDERR_Pos +#define CoreDebug_DEMCR_VC_HARDERR_Msk DCB_DEMCR_VC_HARDERR_Msk + +#define CoreDebug_DEMCR_VC_INTERR_Pos DCB_DEMCR_VC_INTERR_Pos +#define CoreDebug_DEMCR_VC_INTERR_Msk DCB_DEMCR_VC_INTERR_Msk + +#define CoreDebug_DEMCR_VC_BUSERR_Pos DCB_DEMCR_VC_BUSERR_Pos +#define CoreDebug_DEMCR_VC_BUSERR_Msk DCB_DEMCR_VC_BUSERR_Msk + +#define CoreDebug_DEMCR_VC_STATERR_Pos DCB_DEMCR_VC_STATERR_Pos +#define CoreDebug_DEMCR_VC_STATERR_Msk DCB_DEMCR_VC_STATERR_Msk + +#define CoreDebug_DEMCR_VC_CHKERR_Pos DCB_DEMCR_VC_CHKERR_Pos +#define CoreDebug_DEMCR_VC_CHKERR_Msk DCB_DEMCR_VC_CHKERR_Msk + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos DCB_DEMCR_VC_NOCPERR_Pos +#define CoreDebug_DEMCR_VC_NOCPERR_Msk DCB_DEMCR_VC_NOCPERR_Msk + +#define CoreDebug_DEMCR_VC_MMERR_Pos DCB_DEMCR_VC_MMERR_Pos +#define CoreDebug_DEMCR_VC_MMERR_Msk DCB_DEMCR_VC_MMERR_Msk + +#define CoreDebug_DEMCR_VC_CORERESET_Pos DCB_DEMCR_VC_CORERESET_Pos +#define CoreDebug_DEMCR_VC_CORERESET_Msk DCB_DEMCR_VC_CORERESET_Msk + +#define CoreDebug ((CoreDebug_Type *) DCB_BASE) + +#endif // CMSIS_DISABLE_DEPRECATED + +/*@} */ + + +/******************************************************************************* + * 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 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \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); + } +} + + +/** + \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 *) ((uintptr_t) SCB->VTOR); + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; + /* ARM Application Note 321 states that the M3 does not require the architectural barrier */ +} + + +/** + \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 *) ((uintptr_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(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "m-profile/armv7m_mpu.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) +{ + return 0U; /* No FPU */ +} + +/*@} end of CMSIS_Core_FpuFunctions */ + + +/* ################################## 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 */ +} + +#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_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h new file mode 100644 index 00000000000..3b4e93e4135 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h @@ -0,0 +1,3614 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS ArmChina STAR-MC1 Core Peripheral Access Layer Header File + */ + +#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 + #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__) + #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) && (__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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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; + +/** \brief 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 RESERVED1[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; + +/** \brief NVIC 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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_ENDIANNESS_Pos 15U /*!< SCB AIRCR: ENDIANNESS Position */ +#define SCB_AIRCR_ENDIANNESS_Msk (1UL << SCB_AIRCR_ENDIANNESS_Pos) /*!< SCB AIRCR: ENDIANNESS 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief SCB MemManage Fault Status Register Definitions (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 */ + +/** \brief SCB BusFault Status Register Definitions (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 */ + +/** \brief SCB UsageFault Status Register Definitions (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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief SCnSCB 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; + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) Trace Control Register */ + uint32_t RESERVED3[32U]; + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} ITM_Type; + +/** \brief ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 (1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (1UL << 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 (1UL << 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 (1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 (1UL << 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 (1UL << 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_TPIU Trace Port Interface Unit (TPIU) + \brief Type definitions for the Trace Port Interface Unit (TPIU) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Unit Register (TPIU). + */ +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 */ +} TPIU_Type; + +/** \brief TPIU Asynchronous Clock Prescaler Register Definitions */ +#define TPIU_ACPR_PRESCALER_Pos 0U /*!< TPIU ACPR: PRESCALER Position */ +#define TPIU_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPIU_ACPR_PRESCALER_Pos*/) /*!< TPIU ACPR: PRESCALER Mask */ + +/** \brief TPIU Selected Pin Protocol Register Definitions */ +#define TPIU_SPPR_TXMODE_Pos 0U /*!< TPIU SPPR: TXMODE Position */ +#define TPIU_SPPR_TXMODE_Msk (0x3UL /*<< TPIU_SPPR_TXMODE_Pos*/) /*!< TPIU SPPR: TXMODE Mask */ + +/** \brief TPIU Formatter and Flush Status Register Definitions */ +#define TPIU_FFSR_FtNonStop_Pos 3U /*!< TPIU FFSR: FtNonStop Position */ +#define TPIU_FFSR_FtNonStop_Msk (1UL << TPIU_FFSR_FtNonStop_Pos) /*!< TPIU FFSR: FtNonStop Mask */ + +#define TPIU_FFSR_TCPresent_Pos 2U /*!< TPIU FFSR: TCPresent Position */ +#define TPIU_FFSR_TCPresent_Msk (1UL << TPIU_FFSR_TCPresent_Pos) /*!< TPIU FFSR: TCPresent Mask */ + +#define TPIU_FFSR_FtStopped_Pos 1U /*!< TPIU FFSR: FtStopped Position */ +#define TPIU_FFSR_FtStopped_Msk (1UL << TPIU_FFSR_FtStopped_Pos) /*!< TPIU FFSR: FtStopped Mask */ + +#define TPIU_FFSR_FlInProg_Pos 0U /*!< TPIU FFSR: FlInProg Position */ +#define TPIU_FFSR_FlInProg_Msk (1UL /*<< TPIU_FFSR_FlInProg_Pos*/) /*!< TPIU FFSR: FlInProg Mask */ + +/** \brief TPIU Formatter and Flush Control Register Definitions */ +#define TPIU_FFCR_TrigIn_Pos 8U /*!< TPIU FFCR: TrigIn Position */ +#define TPIU_FFCR_TrigIn_Msk (1UL << TPIU_FFCR_TrigIn_Pos) /*!< TPIU FFCR: TrigIn Mask */ + +#define TPIU_FFCR_FOnMan_Pos 6U /*!< TPIU FFCR: FOnMan Position */ +#define TPIU_FFCR_FOnMan_Msk (1UL << TPIU_FFCR_FOnMan_Pos) /*!< TPIU FFCR: FOnMan Mask */ + +#define TPIU_FFCR_EnFCont_Pos 1U /*!< TPIU FFCR: EnFCont Position */ +#define TPIU_FFCR_EnFCont_Msk (1UL << TPIU_FFCR_EnFCont_Pos) /*!< TPIU FFCR: EnFCont Mask */ + +/** \brief TPIU Periodic Synchronization Control Register Definitions */ +#define TPIU_PSCR_PSCount_Pos 0U /*!< TPIU PSCR: PSCount Position */ +#define TPIU_PSCR_PSCount_Msk (0x1FUL /*<< TPIU_PSCR_PSCount_Pos*/) /*!< TPIU PSCR: TPSCount Mask */ + +/** \brief TPIU TRIGGER Register Definitions */ +#define TPIU_TRIGGER_TRIGGER_Pos 0U /*!< TPIU TRIGGER: TRIGGER Position */ +#define TPIU_TRIGGER_TRIGGER_Msk (1UL /*<< TPIU_TRIGGER_TRIGGER_Pos*/) /*!< TPIU TRIGGER: TRIGGER Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 0 Register Definitions */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPIU_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD0: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD0: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPIU ITFTTD0: ATB Interface 1 data2 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPIU ITFTTD0: ATB Interface 1 data1 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPIU_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPIU ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPIU_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPIU ITFTTD0: ATB Interface 1 data0 Position */ +#define TPIU_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPIU_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPIU ITFTTD0: ATB Interface 1 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 2 Register Definitions */ +#define TPIU_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID2S Position */ +#define TPIU_ITATBCTR2_AFVALID2S_Msk (1UL << TPIU_ITATBCTR2_AFVALID2S_Pos) /*!< TPIU ITATBCTR2: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR2: AFVALID1S Position */ +#define TPIU_ITATBCTR2_AFVALID1S_Msk (1UL << TPIU_ITATBCTR2_AFVALID1S_Pos) /*!< TPIU ITATBCTR2: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY2S Position */ +#define TPIU_ITATBCTR2_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY2S Mask */ + +#define TPIU_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR2: ATREADY1S Position */ +#define TPIU_ITATBCTR2_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR2: ATREADY1S Mask */ + +/** \brief TPIU Integration Test FIFO Test Data 1 Register Definitions */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPIU ITFTTD1: ATB Interface 2 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPIU_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPIU ITFTTD1: ATB Interface 1 byte count Position */ +#define TPIU_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPIU_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPIU ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPIU ITFTTD1: ATB Interface 2 data2 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPIU ITFTTD1: ATB Interface 2 data1 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPIU_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPIU ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPIU_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPIU ITFTTD1: ATB Interface 2 data0 Position */ +#define TPIU_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPIU_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPIU ITFTTD1: ATB Interface 2 data0 Mask */ + +/** \brief TPIU Integration Test ATB Control Register 0 Definitions */ +#define TPIU_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID2S Position */ +#define TPIU_ITATBCTR0_AFVALID2S_Msk (1UL << TPIU_ITATBCTR0_AFVALID2S_Pos) /*!< TPIU ITATBCTR0: AFVALID2SS Mask */ + +#define TPIU_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPIU ITATBCTR0: AFVALID1S Position */ +#define TPIU_ITATBCTR0_AFVALID1S_Msk (1UL << TPIU_ITATBCTR0_AFVALID1S_Pos) /*!< TPIU ITATBCTR0: AFVALID1SS Mask */ + +#define TPIU_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY2S Position */ +#define TPIU_ITATBCTR0_ATREADY2S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY2S Mask */ + +#define TPIU_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPIU ITATBCTR0: ATREADY1S Position */ +#define TPIU_ITATBCTR0_ATREADY1S_Msk (1UL /*<< TPIU_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPIU ITATBCTR0: ATREADY1S Mask */ + +/** \brief TPIU Integration Mode Control Register Definitions */ +#define TPIU_ITCTRL_Mode_Pos 0U /*!< TPIU ITCTRL: Mode Position */ +#define TPIU_ITCTRL_Mode_Msk (0x3UL /*<< TPIU_ITCTRL_Mode_Pos*/) /*!< TPIU ITCTRL: Mode Mask */ + +/** \brief TPIU DEVID Register Definitions */ +#define TPIU_DEVID_NRZVALID_Pos 11U /*!< TPIU DEVID: NRZVALID Position */ +#define TPIU_DEVID_NRZVALID_Msk (1UL << TPIU_DEVID_NRZVALID_Pos) /*!< TPIU DEVID: NRZVALID Mask */ + +#define TPIU_DEVID_MANCVALID_Pos 10U /*!< TPIU DEVID: MANCVALID Position */ +#define TPIU_DEVID_MANCVALID_Msk (1UL << TPIU_DEVID_MANCVALID_Pos) /*!< TPIU DEVID: MANCVALID Mask */ + +#define TPIU_DEVID_PTINVALID_Pos 9U /*!< TPIU DEVID: PTINVALID Position */ +#define TPIU_DEVID_PTINVALID_Msk (1UL << TPIU_DEVID_PTINVALID_Pos) /*!< TPIU DEVID: PTINVALID Mask */ + +#define TPIU_DEVID_FIFOSZ_Pos 6U /*!< TPIU DEVID: FIFOSZ Position */ +#define TPIU_DEVID_FIFOSZ_Msk (0x7UL << TPIU_DEVID_FIFOSZ_Pos) /*!< TPIU DEVID: FIFOSZ Mask */ + +#define TPIU_DEVID_NrTraceInput_Pos 0U /*!< TPIU DEVID: NrTraceInput Position */ +#define TPIU_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPIU_DEVID_NrTraceInput_Pos*/) /*!< TPIU DEVID: NrTraceInput Mask */ + +/** \brief TPIU DEVTYPE Register Definitions */ +#define TPIU_DEVTYPE_SubType_Pos 4U /*!< TPIU DEVTYPE: SubType Position */ +#define TPIU_DEVTYPE_SubType_Msk (0xFUL /*<< TPIU_DEVTYPE_SubType_Pos*/) /*!< TPIU DEVTYPE: SubType Mask */ + +#define TPIU_DEVTYPE_MajorType_Pos 0U /*!< TPIU DEVTYPE: MajorType Position */ +#define TPIU_DEVTYPE_MajorType_Msk (0xFUL << TPIU_DEVTYPE_MajorType_Pos) /*!< TPIU DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPIU */ + + +#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 + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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 Mask */ + +/** \brief 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 */ + +/** \brief 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; + +/** \brief 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 */ + +/** \brief 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) +/** \brief 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 */ + +/** \brief 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 */ + +/** \brief 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) */ + +/** \brief SAU 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; + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU 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 */ + +/** \brief FPU Media and VFP Feature Register 0 Definitions */ +#define FPU_MVFR0_FPRound_Pos 28U /*!< MVFR0: Rounding modes bits Position */ +#define FPU_MVFR0_FPRound_Msk (0xFUL << FPU_MVFR0_FPRound_Pos) /*!< MVFR0: Rounding modes bits Mask */ + +#define FPU_MVFR0_FPShortvec_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_FPShortvec_Msk (0xFUL << FPU_MVFR0_FPShortvec_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_FPSqrt_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_FPSqrt_Msk (0xFUL << FPU_MVFR0_FPSqrt_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_FPDivide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_FPDivide_Msk (0xFUL << FPU_MVFR0_FPDivide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FPExceptrap_Pos 12U /*!< MVFR0: Exception trapping bits Position */ +#define FPU_MVFR0_FPExceptrap_Msk (0xFUL << FPU_MVFR0_FPExceptrap_Pos) /*!< MVFR0: Exception trapping bits Mask */ + +#define FPU_MVFR0_FPDP_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_FPDP_Msk (0xFUL << FPU_MVFR0_FPDP_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_FPSP_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_FPSP_Msk (0xFUL << FPU_MVFR0_FPSP_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_SIMDReg_Pos 0U /*!< MVFR0: SIMD registers bits Position */ +#define FPU_MVFR0_SIMDReg_Msk (0xFUL /*<< FPU_MVFR0_SIMDReg_Pos*/) /*!< MVFR0: SIMD registers bits Mask */ + +/** \brief FPU Media and VFP Feature Register 1 Definitions */ +#define FPU_MVFR1_FMAC_Pos 28U /*!< MVFR1: Fused MAC bits Position */ +#define FPU_MVFR1_FMAC_Msk (0xFUL << FPU_MVFR1_FMAC_Pos) /*!< MVFR1: Fused MAC bits Mask */ + +#define FPU_MVFR1_FPHP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FPHP_Msk (0xFUL << FPU_MVFR1_FPHP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_FPDNaN_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_FPDNaN_Msk (0xFUL << FPU_MVFR1_FPDNaN_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FPFtZ_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FPFtZ_Msk (0xFUL /*<< FPU_MVFR1_FPFtZ_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/** \brief FPU Media and VFP Feature Register 2 Definitions */ +#define FPU_MVFR2_FPMisc_Pos 4U /*!< MVFR2: VFP Misc bits Position */ +#define FPU_MVFR2_FPMisc_Msk (0xFUL << FPU_MVFR2_FPMisc_Pos) /*!< MVFR2: VFP Misc 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; + +/** \brief DCB Debug Halting Control and Status Register Definitions */ +#define DCB_DHCSR_DBGKEY_Pos 16U /*!< DCB DHCSR: Debug key Position */ +#define DCB_DHCSR_DBGKEY_Msk (0xFFFFUL << DCB_DHCSR_DBGKEY_Pos) /*!< DCB DHCSR: Debug key Mask */ + +#define DCB_DHCSR_S_RESTART_ST_Pos 26U /*!< DCB DHCSR: Restart sticky status Position */ +#define DCB_DHCSR_S_RESTART_ST_Msk (1UL << DCB_DHCSR_S_RESTART_ST_Pos) /*!< DCB DHCSR: Restart sticky status Mask */ + +#define DCB_DHCSR_S_RESET_ST_Pos 25U /*!< DCB DHCSR: Reset sticky status Position */ +#define DCB_DHCSR_S_RESET_ST_Msk (1UL << DCB_DHCSR_S_RESET_ST_Pos) /*!< DCB DHCSR: Reset sticky status Mask */ + +#define DCB_DHCSR_S_RETIRE_ST_Pos 24U /*!< DCB DHCSR: Retire sticky status Position */ +#define DCB_DHCSR_S_RETIRE_ST_Msk (1UL << DCB_DHCSR_S_RETIRE_ST_Pos) /*!< DCB DHCSR: Retire sticky status Mask */ + +#define DCB_DHCSR_S_SDE_Pos 20U /*!< DCB DHCSR: Secure debug enabled Position */ +#define DCB_DHCSR_S_SDE_Msk (1UL << DCB_DHCSR_S_SDE_Pos) /*!< DCB DHCSR: Secure debug enabled Mask */ + +#define DCB_DHCSR_S_LOCKUP_Pos 19U /*!< DCB DHCSR: Lockup status Position */ +#define DCB_DHCSR_S_LOCKUP_Msk (1UL << DCB_DHCSR_S_LOCKUP_Pos) /*!< DCB DHCSR: Lockup status Mask */ + +#define DCB_DHCSR_S_SLEEP_Pos 18U /*!< DCB DHCSR: Sleeping status Position */ +#define DCB_DHCSR_S_SLEEP_Msk (1UL << DCB_DHCSR_S_SLEEP_Pos) /*!< DCB DHCSR: Sleeping status Mask */ + +#define DCB_DHCSR_S_HALT_Pos 17U /*!< DCB DHCSR: Halted status Position */ +#define DCB_DHCSR_S_HALT_Msk (1UL << DCB_DHCSR_S_HALT_Pos) /*!< DCB DHCSR: Halted status Mask */ + +#define DCB_DHCSR_S_REGRDY_Pos 16U /*!< DCB DHCSR: Register ready status Position */ +#define DCB_DHCSR_S_REGRDY_Msk (1UL << DCB_DHCSR_S_REGRDY_Pos) /*!< DCB DHCSR: Register ready status Mask */ + +#define DCB_DHCSR_C_SNAPSTALL_Pos 5U /*!< DCB DHCSR: Snap stall control Position */ +#define DCB_DHCSR_C_SNAPSTALL_Msk (1UL << DCB_DHCSR_C_SNAPSTALL_Pos) /*!< DCB DHCSR: Snap stall control Mask */ + +#define DCB_DHCSR_C_MASKINTS_Pos 3U /*!< DCB DHCSR: Mask interrupts control Position */ +#define DCB_DHCSR_C_MASKINTS_Msk (1UL << DCB_DHCSR_C_MASKINTS_Pos) /*!< DCB DHCSR: Mask interrupts control Mask */ + +#define DCB_DHCSR_C_STEP_Pos 2U /*!< DCB DHCSR: Step control Position */ +#define DCB_DHCSR_C_STEP_Msk (1UL << DCB_DHCSR_C_STEP_Pos) /*!< DCB DHCSR: Step control Mask */ + +#define DCB_DHCSR_C_HALT_Pos 1U /*!< DCB DHCSR: Halt control Position */ +#define DCB_DHCSR_C_HALT_Msk (1UL << DCB_DHCSR_C_HALT_Pos) /*!< DCB DHCSR: Halt control Mask */ + +#define DCB_DHCSR_C_DEBUGEN_Pos 0U /*!< DCB DHCSR: Debug enable control Position */ +#define DCB_DHCSR_C_DEBUGEN_Msk (1UL /*<< DCB_DHCSR_C_DEBUGEN_Pos*/) /*!< DCB DHCSR: Debug enable control Mask */ + +/** \brief DCB Debug Core Register Selector Register Definitions */ +#define DCB_DCRSR_REGWnR_Pos 16U /*!< DCB DCRSR: Register write/not-read Position */ +#define DCB_DCRSR_REGWnR_Msk (1UL << DCB_DCRSR_REGWnR_Pos) /*!< DCB DCRSR: Register write/not-read Mask */ + +#define DCB_DCRSR_REGSEL_Pos 0U /*!< DCB DCRSR: Register selector Position */ +#define DCB_DCRSR_REGSEL_Msk (0x7FUL /*<< DCB_DCRSR_REGSEL_Pos*/) /*!< DCB DCRSR: Register selector Mask */ + +/** \brief DCB Debug Core Register Data Register Definitions */ +#define DCB_DCRDR_DBGTMP_Pos 0U /*!< DCB DCRDR: Data temporary buffer Position */ +#define DCB_DCRDR_DBGTMP_Msk (0xFFFFFFFFUL /*<< DCB_DCRDR_DBGTMP_Pos*/) /*!< DCB DCRDR: Data temporary buffer Mask */ + +/** \brief DCB Debug Exception and Monitor Control Register Definitions */ +#define DCB_DEMCR_TRCENA_Pos 24U /*!< DCB DEMCR: Trace enable Position */ +#define DCB_DEMCR_TRCENA_Msk (1UL << DCB_DEMCR_TRCENA_Pos) /*!< DCB DEMCR: Trace enable Mask */ + +#define DCB_DEMCR_MONPRKEY_Pos 23U /*!< DCB DEMCR: Monitor pend req key Position */ +#define DCB_DEMCR_MONPRKEY_Msk (1UL << DCB_DEMCR_MONPRKEY_Pos) /*!< DCB DEMCR: Monitor pend req key Mask */ + +#define DCB_DEMCR_UMON_EN_Pos 21U /*!< DCB DEMCR: Unprivileged monitor enable Position */ +#define DCB_DEMCR_UMON_EN_Msk (1UL << DCB_DEMCR_UMON_EN_Pos) /*!< DCB DEMCR: Unprivileged monitor enable Mask */ + +#define DCB_DEMCR_SDME_Pos 20U /*!< DCB DEMCR: Secure DebugMonitor enable Position */ +#define DCB_DEMCR_SDME_Msk (1UL << DCB_DEMCR_SDME_Pos) /*!< DCB DEMCR: Secure DebugMonitor enable Mask */ + +#define DCB_DEMCR_MON_REQ_Pos 19U /*!< DCB DEMCR: Monitor request Position */ +#define DCB_DEMCR_MON_REQ_Msk (1UL << DCB_DEMCR_MON_REQ_Pos) /*!< DCB DEMCR: Monitor request Mask */ + +#define DCB_DEMCR_MON_STEP_Pos 18U /*!< DCB DEMCR: Monitor step Position */ +#define DCB_DEMCR_MON_STEP_Msk (1UL << DCB_DEMCR_MON_STEP_Pos) /*!< DCB DEMCR: Monitor step Mask */ + +#define DCB_DEMCR_MON_PEND_Pos 17U /*!< DCB DEMCR: Monitor pend Position */ +#define DCB_DEMCR_MON_PEND_Msk (1UL << DCB_DEMCR_MON_PEND_Pos) /*!< DCB DEMCR: Monitor pend Mask */ + +#define DCB_DEMCR_MON_EN_Pos 16U /*!< DCB DEMCR: Monitor enable Position */ +#define DCB_DEMCR_MON_EN_Msk (1UL << DCB_DEMCR_MON_EN_Pos) /*!< DCB DEMCR: Monitor enable Mask */ + +#define DCB_DEMCR_VC_SFERR_Pos 11U /*!< DCB DEMCR: Vector Catch SecureFault Position */ +#define DCB_DEMCR_VC_SFERR_Msk (1UL << DCB_DEMCR_VC_SFERR_Pos) /*!< DCB DEMCR: Vector Catch SecureFault Mask */ + +#define DCB_DEMCR_VC_HARDERR_Pos 10U /*!< DCB DEMCR: Vector Catch HardFault errors Position */ +#define DCB_DEMCR_VC_HARDERR_Msk (1UL << DCB_DEMCR_VC_HARDERR_Pos) /*!< DCB DEMCR: Vector Catch HardFault errors Mask */ + +#define DCB_DEMCR_VC_INTERR_Pos 9U /*!< DCB DEMCR: Vector Catch interrupt errors Position */ +#define DCB_DEMCR_VC_INTERR_Msk (1UL << DCB_DEMCR_VC_INTERR_Pos) /*!< DCB DEMCR: Vector Catch interrupt errors Mask */ + +#define DCB_DEMCR_VC_BUSERR_Pos 8U /*!< DCB DEMCR: Vector Catch BusFault errors Position */ +#define DCB_DEMCR_VC_BUSERR_Msk (1UL << DCB_DEMCR_VC_BUSERR_Pos) /*!< DCB DEMCR: Vector Catch BusFault errors Mask */ + +#define DCB_DEMCR_VC_STATERR_Pos 7U /*!< DCB DEMCR: Vector Catch state errors Position */ +#define DCB_DEMCR_VC_STATERR_Msk (1UL << DCB_DEMCR_VC_STATERR_Pos) /*!< DCB DEMCR: Vector Catch state errors Mask */ + +#define DCB_DEMCR_VC_CHKERR_Pos 6U /*!< DCB DEMCR: Vector Catch check errors Position */ +#define DCB_DEMCR_VC_CHKERR_Msk (1UL << DCB_DEMCR_VC_CHKERR_Pos) /*!< DCB DEMCR: Vector Catch check errors Mask */ + +#define DCB_DEMCR_VC_NOCPERR_Pos 5U /*!< DCB DEMCR: Vector Catch NOCP errors Position */ +#define DCB_DEMCR_VC_NOCPERR_Msk (1UL << DCB_DEMCR_VC_NOCPERR_Pos) /*!< DCB DEMCR: Vector Catch NOCP errors Mask */ + +#define DCB_DEMCR_VC_MMERR_Pos 4U /*!< DCB DEMCR: Vector Catch MemManage errors Position */ +#define DCB_DEMCR_VC_MMERR_Msk (1UL << DCB_DEMCR_VC_MMERR_Pos) /*!< DCB DEMCR: Vector Catch MemManage errors Mask */ + +#define DCB_DEMCR_VC_CORERESET_Pos 0U /*!< DCB DEMCR: Vector Catch Core reset Position */ +#define DCB_DEMCR_VC_CORERESET_Msk (1UL /*<< DCB_DEMCR_VC_CORERESET_Pos*/) /*!< DCB DEMCR: Vector Catch Core reset Mask */ + +/** \brief DCB Debug Authentication Control Register Definitions */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPNIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPNIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure non-invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPNIDENSEL_Msk (1UL << DCB_DAUTHCTRL_SPNIDENSEL_Pos) /*!< DCB DAUTHCTRL: Secure non-invasive debug enable select Mask */ + +#define DCB_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Position */ +#define DCB_DAUTHCTRL_INTSPIDEN_Msk (1UL << DCB_DAUTHCTRL_INTSPIDEN_Pos) /*!< DCB DAUTHCTRL: Internal Secure invasive debug enable Mask */ + +#define DCB_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< DCB DAUTHCTRL: Secure invasive debug enable select Position */ +#define DCB_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< DCB_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< DCB DAUTHCTRL: Secure invasive debug enable select Mask */ + +/** \brief DCB Debug Security Control and Status Register Definitions */ +#define DCB_DSCSR_CDSKEY_Pos 17U /*!< DCB DSCSR: CDS write-enable key Position */ +#define DCB_DSCSR_CDSKEY_Msk (1UL << DCB_DSCSR_CDSKEY_Pos) /*!< DCB DSCSR: CDS write-enable key Mask */ + +#define DCB_DSCSR_CDS_Pos 16U /*!< DCB DSCSR: Current domain Secure Position */ +#define DCB_DSCSR_CDS_Msk (1UL << DCB_DSCSR_CDS_Pos) /*!< DCB DSCSR: Current domain Secure Mask */ + +#define DCB_DSCSR_SBRSEL_Pos 1U /*!< DCB DSCSR: Secure banked register select Position */ +#define DCB_DSCSR_SBRSEL_Msk (1UL << DCB_DSCSR_SBRSEL_Pos) /*!< DCB DSCSR: Secure banked register select Mask */ + +#define DCB_DSCSR_SBRSELEN_Pos 0U /*!< DCB DSCSR: Secure banked register select enable Position */ +#define DCB_DSCSR_SBRSELEN_Msk (1UL /*<< DCB_DSCSR_SBRSELEN_Pos*/) /*!< DCB DSCSR: Secure banked register select enable Mask */ + +/*@} 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; + +/** \brief DIB 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 */ + +/** \brief DIB SCS Software Lock Status Register Definitions */ +#define DIB_DLSR_nTT_Pos 2U /*!< DIB DLSR: Not thirty-two bit Position */ +#define DIB_DLSR_nTT_Msk (1UL << 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 (1UL << 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 (1UL /*<< DIB_DLSR_SLI_Pos*/) /*!< DIB DLSR: Software Lock implemented Mask */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 */ + +/** \brief DIB 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 TPIU_BASE (0xE0040000UL) /*!< TPIU 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 *) ((uintptr_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 *) ((uintptr_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(); + } +} + +/** + \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 "m-profile/armv8m_mpu.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_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 */ + + + +/* ########################## 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/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h new file mode 100644 index 00000000000..d7338a72e0a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2020-2021 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. + */ + +/* + * CMSIS-Core(M) Level 1 Cache API for Armv7-M and later + */ + +#ifndef ARM_ARMV7M_CACHEL1_H +#define ARM_ARMV7M_CACHEL1_H + +#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 + +/** + \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 ) + +#ifndef __SCB_DCACHE_LINE_SIZE +#define __SCB_DCACHE_LINE_SIZE 32U /*!< Cortex-M7 cache line size is fixed to 32 bytes (8 words). See also register SCB_CCSIDR */ +#endif + +#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 + +/** + \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 (volatile 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) + struct { + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + } locals + #if ((defined(__GNUC__) || defined(__clang__)) && !defined(__OPTIMIZE__)) + __ALIGNED(__SCB_DCACHE_LINE_SIZE) + #endif + ; + + SCB->CSSELR = 0U; /* select Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + #if !defined(__OPTIMIZE__) + /* + * For the endless loop issue with no optimization builds. + * More details, see https://github.com/ARM-software/CMSIS_5/issues/620 + * + * The issue only happens when local variables are in stack. If + * local variables are saved in general purpose register, then the function + * is OK. + * + * When local variables are in stack, after disabling the cache, flush the + * local variables cache line for data consistency. + */ + /* Clean and invalidate the local variable cache. */ + #if defined(__ICCARM__) + /* As we can't align the stack to the cache line size, invalidate each of the variables */ + SCB->DCCIMVAC = (uint32_t)&locals.sets; + SCB->DCCIMVAC = (uint32_t)&locals.ways; + SCB->DCCIMVAC = (uint32_t)&locals.ccsidr; + #else + SCB->DCCIMVAC = (uint32_t)&locals; + #endif + __DSB(); + __ISB(); + #endif + + locals.ccsidr = SCB->CCSIDR; + /* clean & invalidate D-Cache */ + locals.sets = (uint32_t)(CCSIDR_SETS(locals.ccsidr)); + do { + locals.ways = (uint32_t)(CCSIDR_WAYS(locals.ccsidr)); + do { + SCB->DCCISW = (((locals.sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((locals.ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (locals.ways-- != 0U); + } while(locals.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 (volatile 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 (volatile 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->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 (volatile 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->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 /* ARM_ARMV7M_CACHEL1_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h new file mode 100644 index 00000000000..5a4eba231c1 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2017-2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) MPU API for Armv7-M MPU + */ + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#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 + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) | \ + (((SubRegionDisable) << MPU_RASR_SRD_Pos) & MPU_RASR_SRD_Msk) | \ + (((Size) << MPU_RASR_SIZE_Pos) & MPU_RASR_SIZE_Msk) | \ + (((MPU_RASR_ENABLE_Msk)))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if shareable) or 010b (if non-shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) >> 1U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rasr Value for RASR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** 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. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + ARM_MPU_OrderedMemcpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h new file mode 100644 index 00000000000..648cf886476 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h @@ -0,0 +1,203 @@ +/* + * 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. + */ + +/* + * CMSIS-Core(M) PAC key functions for Armv8.1-M PAC extension + */ + +#ifndef PAC_ARMV81_H +#define PAC_ARMV81_H + +#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 + +/* ################### 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/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h new file mode 100644 index 00000000000..d743af12c78 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2017-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. + */ + +/* + * CMSIS-Core(M) MPU API for Armv8-M and Armv8.1-M MPU + */ + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +#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 + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for Normal memory, Outer and Inner cacheability. +* \param NT Non-Transient: Set to 1 for Non-transient data. Set to 0 for Transient data. +* \param WB Write-Back: Set to 1 to use a Write-Back policy. Set to 0 to use a Write-Through policy. +* \param RA Read Allocation: Set to 1 to enable cache allocation on read miss. Set to 0 to disable cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to enable cache allocation on write miss. Set to 0 to disable cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + ((((NT) & 1U) << 3U) | (((WB) & 1U) << 2U) | (((RA) & 1U) << 1U) | ((WA) & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Normal memory outer-cacheable and inner-cacheable attributes +* WT = Write Through, WB = Write Back, TR = Transient, RA = Read-Allocate, WA = Write Allocate +*/ +#define MPU_ATTR_NORMAL_OUTER_NON_CACHEABLE (0b0100) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_RA (0b0010) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_WA (0b0001) +#define MPU_ATTR_NORMAL_OUTER_WT_TR_RA_WA (0b0011) +#define MPU_ATTR_NORMAL_OUTER_WT_RA (0b1010) +#define MPU_ATTR_NORMAL_OUTER_WT_WA (0b1001) +#define MPU_ATTR_NORMAL_OUTER_WT_RA_WA (0b1011) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_RA (0b0101) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_WA (0b0110) +#define MPU_ATTR_NORMAL_OUTER_WB_TR_RA_WA (0b0111) +#define MPU_ATTR_NORMAL_OUTER_WB_RA (0b1101) +#define MPU_ATTR_NORMAL_OUTER_WB_WA (0b1110) +#define MPU_ATTR_NORMAL_OUTER_WB_RA_WA (0b1111) +#define MPU_ATTR_NORMAL_INNER_NON_CACHEABLE (0b0100) +#define MPU_ATTR_NORMAL_INNER_WT_TR_RA (0b0010) +#define MPU_ATTR_NORMAL_INNER_WT_TR_WA (0b0001) +#define MPU_ATTR_NORMAL_INNER_WT_TR_RA_WA (0b0011) +#define MPU_ATTR_NORMAL_INNER_WT_RA (0b1010) +#define MPU_ATTR_NORMAL_INNER_WT_WA (0b1001) +#define MPU_ATTR_NORMAL_INNER_WT_RA_WA (0b1011) +#define MPU_ATTR_NORMAL_INNER_WB_TR_RA (0b0101) +#define MPU_ATTR_NORMAL_INNER_WB_TR_WA (0b0110) +#define MPU_ATTR_NORMAL_INNER_WB_TR_RA_WA (0b0111) +#define MPU_ATTR_NORMAL_INNER_WB_RA (0b1101) +#define MPU_ATTR_NORMAL_INNER_WB_WA (0b1110) +#define MPU_ATTR_NORMAL_INNER_WB_RA_WA (0b1111) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) ((((O) & 0xFU) << 4U) | ((((O) & 0xFU) != 0U) ? ((I) & 0xFU) : (((I) & 0x3U) << 2U))) + +/* \brief Specifies MAIR_ATTR number */ +#define MAIR_ATTR(x) ((x > 7 || x < 0) ? 0 : x) + +/** + * Shareability + */ +/** \brief Normal memory, non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory, outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory, inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** + * Access permissions + * AP = Access permission, RO = Read-only, RW = Read/Write, NP = Any privilege, PO = Privileged code only + */ +/** \brief Normal memory, read/write */ +#define ARM_MPU_AP_RW (0U) + +/** \brief Normal memory, read-only */ +#define ARM_MPU_AP_RO (1U) + +/** \brief Normal memory, any privilege level */ +#define ARM_MPU_AP_NP (1U) + +/** \brief Normal memory, privileged access only */ +#define ARM_MPU_AP_PO (0U) + +/* + * Execute-never + * XN = Execute-never, EX = Executable + */ +/** \brief Normal memory, Execution only permitted if read permitted */ +#define ARM_MPU_XN (1U) + +/** \brief Normal memory, Execution only permitted if read permitted */ +#define ARM_MPU_EX (0U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. Set to 0 for a read/write memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. Set to 0 for privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) ((((RO) & 1U) << 1U) | ((NP) & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. Set to 0 for a read/write memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. Set to 0 for privileged memory region. +* \param XN eXecute Never: Set to 1 for a non-executable memory region. Set to 0 for an executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + (((BASE) & MPU_RBAR_BASE_Msk) | \ + (((SH) << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + (((XN) << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#if defined(MPU_RLAR_PXN_Pos) + +/** \brief Region Limit Address Register with PXN value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param PXN Privileged execute never. Defines whether code can be executed from this privileged region. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR_PXN(LIMIT, PXN, IDX) \ + (((LIMIT) & MPU_RLAR_LIMIT_Msk) | \ + (((PXN) << MPU_RLAR_PXN_Pos) & MPU_RLAR_PXN_Msk) | \ + (((IDX) << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +#endif + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** + \brief Read MPU Type Register + \return Number of MPU regions +*/ +__STATIC_INLINE uint32_t ARM_MPU_TYPE() +{ + return ((MPU->TYPE) >> 8); +} + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DMB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DMB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif + __DSB(); + __ISB(); +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DMB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; + __DSB(); + __ISB(); +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** 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. +*/ +__STATIC_INLINE void ARM_MPU_OrderedMemcpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + ARM_MPU_OrderedMemcpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h new file mode 100644 index 00000000000..fb165331730 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2020 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * CMSIS-Core(M) PMU API for Armv8.1-M PMU + */ + +#ifndef ARM_PMU_ARMV8_H +#define ARM_PMU_ARMV8_H + +#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 + +/** + * \brief PMU Events + * \note See the Armv8.1-M Architecture Reference Manual for full details on these PMU events. + * */ + +#define ARM_PMU_SW_INCR 0x0000 /*!< Software update to the PMU_SWINC register, architecturally executed and condition code check pass */ +#define ARM_PMU_L1I_CACHE_REFILL 0x0001 /*!< L1 I-Cache refill */ +#define ARM_PMU_L1D_CACHE_REFILL 0x0003 /*!< L1 D-Cache refill */ +#define ARM_PMU_L1D_CACHE 0x0004 /*!< L1 D-Cache access */ +#define ARM_PMU_LD_RETIRED 0x0006 /*!< Memory-reading instruction architecturally executed and condition code check pass */ +#define ARM_PMU_ST_RETIRED 0x0007 /*!< Memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_INST_RETIRED 0x0008 /*!< Instruction architecturally executed */ +#define ARM_PMU_EXC_TAKEN 0x0009 /*!< Exception entry */ +#define ARM_PMU_EXC_RETURN 0x000A /*!< Exception return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_PC_WRITE_RETIRED 0x000C /*!< Software change to the Program Counter (PC). Instruction is architecturally executed and condition code check pass */ +#define ARM_PMU_BR_IMMED_RETIRED 0x000D /*!< Immediate branch architecturally executed */ +#define ARM_PMU_BR_RETURN_RETIRED 0x000E /*!< Function return instruction architecturally executed and the condition code check pass */ +#define ARM_PMU_UNALIGNED_LDST_RETIRED 0x000F /*!< Unaligned memory memory-reading or memory-writing instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BR_MIS_PRED 0x0010 /*!< Mispredicted or not predicted branch speculatively executed */ +#define ARM_PMU_CPU_CYCLES 0x0011 /*!< Cycle */ +#define ARM_PMU_BR_PRED 0x0012 /*!< Predictable branch speculatively executed */ +#define ARM_PMU_MEM_ACCESS 0x0013 /*!< Data memory access */ +#define ARM_PMU_L1I_CACHE 0x0014 /*!< Level 1 instruction cache access */ +#define ARM_PMU_L1D_CACHE_WB 0x0015 /*!< Level 1 data cache write-back */ +#define ARM_PMU_L2D_CACHE 0x0016 /*!< Level 2 data cache access */ +#define ARM_PMU_L2D_CACHE_REFILL 0x0017 /*!< Level 2 data cache refill */ +#define ARM_PMU_L2D_CACHE_WB 0x0018 /*!< Level 2 data cache write-back */ +#define ARM_PMU_BUS_ACCESS 0x0019 /*!< Bus access */ +#define ARM_PMU_MEMORY_ERROR 0x001A /*!< Local memory error */ +#define ARM_PMU_INST_SPEC 0x001B /*!< Instruction speculatively executed */ +#define ARM_PMU_BUS_CYCLES 0x001D /*!< Bus cycles */ +#define ARM_PMU_CHAIN 0x001E /*!< For an odd numbered counter, increment when an overflow occurs on the preceding even-numbered counter on the same PE */ +#define ARM_PMU_L1D_CACHE_ALLOCATE 0x001F /*!< Level 1 data cache allocation without refill */ +#define ARM_PMU_L2D_CACHE_ALLOCATE 0x0020 /*!< Level 2 data cache allocation without refill */ +#define ARM_PMU_BR_RETIRED 0x0021 /*!< Branch instruction architecturally executed */ +#define ARM_PMU_BR_MIS_PRED_RETIRED 0x0022 /*!< Mispredicted branch instruction architecturally executed */ +#define ARM_PMU_STALL_FRONTEND 0x0023 /*!< No operation issued because of the frontend */ +#define ARM_PMU_STALL_BACKEND 0x0024 /*!< No operation issued because of the backend */ +#define ARM_PMU_L2I_CACHE 0x0027 /*!< Level 2 instruction cache access */ +#define ARM_PMU_L2I_CACHE_REFILL 0x0028 /*!< Level 2 instruction cache refill */ +#define ARM_PMU_L3D_CACHE_ALLOCATE 0x0029 /*!< Level 3 data cache allocation without refill */ +#define ARM_PMU_L3D_CACHE_REFILL 0x002A /*!< Level 3 data cache refill */ +#define ARM_PMU_L3D_CACHE 0x002B /*!< Level 3 data cache access */ +#define ARM_PMU_L3D_CACHE_WB 0x002C /*!< Level 3 data cache write-back */ +#define ARM_PMU_LL_CACHE_RD 0x0036 /*!< Last level data cache read */ +#define ARM_PMU_LL_CACHE_MISS_RD 0x0037 /*!< Last level data cache read miss */ +#define ARM_PMU_L1D_CACHE_MISS_RD 0x0039 /*!< Level 1 data cache read miss */ +#define ARM_PMU_OP_COMPLETE 0x003A /*!< Operation retired */ +#define ARM_PMU_OP_SPEC 0x003B /*!< Operation speculatively executed */ +#define ARM_PMU_STALL 0x003C /*!< Stall cycle for instruction or operation not sent for execution */ +#define ARM_PMU_STALL_OP_BACKEND 0x003D /*!< Stall cycle for instruction or operation not sent for execution due to pipeline backend */ +#define ARM_PMU_STALL_OP_FRONTEND 0x003E /*!< Stall cycle for instruction or operation not sent for execution due to pipeline frontend */ +#define ARM_PMU_STALL_OP 0x003F /*!< Instruction or operation slots not occupied each cycle */ +#define ARM_PMU_L1D_CACHE_RD 0x0040 /*!< Level 1 data cache read */ +#define ARM_PMU_LE_RETIRED 0x0100 /*!< Loop end instruction executed */ +#define ARM_PMU_LE_SPEC 0x0101 /*!< Loop end instruction speculatively executed */ +#define ARM_PMU_BF_RETIRED 0x0104 /*!< Branch future instruction architecturally executed and condition code check pass */ +#define ARM_PMU_BF_SPEC 0x0105 /*!< Branch future instruction speculatively executed and condition code check pass */ +#define ARM_PMU_LE_CANCEL 0x0108 /*!< Loop end instruction not taken */ +#define ARM_PMU_BF_CANCEL 0x0109 /*!< Branch future instruction not taken */ +#define ARM_PMU_SE_CALL_S 0x0114 /*!< Call to secure function, resulting in Security state change */ +#define ARM_PMU_SE_CALL_NS 0x0115 /*!< Call to non-secure function, resulting in Security state change */ +#define ARM_PMU_DWT_CMPMATCH0 0x0118 /*!< DWT comparator 0 match */ +#define ARM_PMU_DWT_CMPMATCH1 0x0119 /*!< DWT comparator 1 match */ +#define ARM_PMU_DWT_CMPMATCH2 0x011A /*!< DWT comparator 2 match */ +#define ARM_PMU_DWT_CMPMATCH3 0x011B /*!< DWT comparator 3 match */ +#define ARM_PMU_MVE_INST_RETIRED 0x0200 /*!< MVE instruction architecturally executed */ +#define ARM_PMU_MVE_INST_SPEC 0x0201 /*!< MVE instruction speculatively executed */ +#define ARM_PMU_MVE_FP_RETIRED 0x0204 /*!< MVE floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SPEC 0x0205 /*!< MVE floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_HP_RETIRED 0x0208 /*!< MVE half-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_HP_SPEC 0x0209 /*!< MVE half-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_SP_RETIRED 0x020C /*!< MVE single-precision floating-point instruction architecturally executed */ +#define ARM_PMU_MVE_FP_SP_SPEC 0x020D /*!< MVE single-precision floating-point instruction speculatively executed */ +#define ARM_PMU_MVE_FP_MAC_RETIRED 0x0214 /*!< MVE floating-point multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_FP_MAC_SPEC 0x0215 /*!< MVE floating-point multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_INT_RETIRED 0x0224 /*!< MVE integer instruction architecturally executed */ +#define ARM_PMU_MVE_INT_SPEC 0x0225 /*!< MVE integer instruction speculatively executed */ +#define ARM_PMU_MVE_INT_MAC_RETIRED 0x0228 /*!< MVE multiply or multiply-accumulate instruction architecturally executed */ +#define ARM_PMU_MVE_INT_MAC_SPEC 0x0229 /*!< MVE multiply or multiply-accumulate instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_RETIRED 0x0238 /*!< MVE load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_SPEC 0x0239 /*!< MVE load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_RETIRED 0x023C /*!< MVE load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_SPEC 0x023D /*!< MVE load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_RETIRED 0x0240 /*!< MVE store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_SPEC 0x0241 /*!< MVE store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_CONTIG_RETIRED 0x0244 /*!< MVE contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_CONTIG_SPEC 0x0245 /*!< MVE contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_CONTIG_RETIRED 0x0248 /*!< MVE contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_CONTIG_SPEC 0x0249 /*!< MVE contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_CONTIG_RETIRED 0x024C /*!< MVE contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_CONTIG_SPEC 0x024D /*!< MVE contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_RETIRED 0x0250 /*!< MVE non-contiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_NONCONTIG_SPEC 0x0251 /*!< MVE non-contiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_RETIRED 0x0254 /*!< MVE non-contiguous load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_NONCONTIG_SPEC 0x0255 /*!< MVE non-contiguous load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_RETIRED 0x0258 /*!< MVE non-contiguous store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_NONCONTIG_SPEC 0x0259 /*!< MVE non-contiguous store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_MULTI_RETIRED 0x025C /*!< MVE memory instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LDST_MULTI_SPEC 0x025D /*!< MVE memory instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LD_MULTI_RETIRED 0x0260 /*!< MVE memory load instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_LD_MULTI_SPEC 0x0261 /*!< MVE memory load instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_ST_MULTI_RETIRED 0x0261 /*!< MVE memory store instruction targeting multiple registers architecturally executed */ +#define ARM_PMU_MVE_ST_MULTI_SPEC 0x0265 /*!< MVE memory store instruction targeting multiple registers speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_RETIRED 0x028C /*!< MVE unaligned memory load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_SPEC 0x028D /*!< MVE unaligned memory load or store instruction speculatively executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_RETIRED 0x0290 /*!< MVE unaligned load instruction architecturally executed */ +#define ARM_PMU_MVE_LD_UNALIGNED_SPEC 0x0291 /*!< MVE unaligned load instruction speculatively executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_RETIRED 0x0294 /*!< MVE unaligned store instruction architecturally executed */ +#define ARM_PMU_MVE_ST_UNALIGNED_SPEC 0x0295 /*!< MVE unaligned store instruction speculatively executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_RETIRED 0x0298 /*!< MVE unaligned noncontiguous load or store instruction architecturally executed */ +#define ARM_PMU_MVE_LDST_UNALIGNED_NONCONTIG_SPEC 0x0299 /*!< MVE unaligned noncontiguous load or store instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_RETIRED 0x02A0 /*!< MVE vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_SPEC 0x02A1 /*!< MVE vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_FP_RETIRED 0x02A4 /*!< MVE floating-point vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_FP_SPEC 0x02A5 /*!< MVE floating-point vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_VREDUCE_INT_RETIRED 0x02A8 /*!< MVE integer vector reduction instruction architecturally executed */ +#define ARM_PMU_MVE_VREDUCE_INT_SPEC 0x02A9 /*!< MVE integer vector reduction instruction speculatively executed */ +#define ARM_PMU_MVE_PRED 0x02B8 /*!< Cycles where one or more predicated beats architecturally executed */ +#define ARM_PMU_MVE_STALL 0x02CC /*!< Stall cycles caused by an MVE instruction */ +#define ARM_PMU_MVE_STALL_RESOURCE 0x02CD /*!< Stall cycles caused by an MVE instruction because of resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_MEM 0x02CE /*!< Stall cycles caused by an MVE instruction because of memory resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_FP 0x02CF /*!< Stall cycles caused by an MVE instruction because of floating-point resource conflicts */ +#define ARM_PMU_MVE_STALL_RESOURCE_INT 0x02D0 /*!< Stall cycles caused by an MVE instruction because of integer resource conflicts */ +#define ARM_PMU_MVE_STALL_BREAK 0x02D3 /*!< Stall cycles caused by an MVE chain break */ +#define ARM_PMU_MVE_STALL_DEPENDENCY 0x02D4 /*!< Stall cycles caused by MVE register dependency */ +#define ARM_PMU_ITCM_ACCESS 0x4007 /*!< Instruction TCM access */ +#define ARM_PMU_DTCM_ACCESS 0x4008 /*!< Data TCM access */ +#define ARM_PMU_TRCEXTOUT0 0x4010 /*!< ETM external output 0 */ +#define ARM_PMU_TRCEXTOUT1 0x4011 /*!< ETM external output 1 */ +#define ARM_PMU_TRCEXTOUT2 0x4012 /*!< ETM external output 2 */ +#define ARM_PMU_TRCEXTOUT3 0x4013 /*!< ETM external output 3 */ +#define ARM_PMU_CTI_TRIGOUT4 0x4018 /*!< Cross-trigger Interface output trigger 4 */ +#define ARM_PMU_CTI_TRIGOUT5 0x4019 /*!< Cross-trigger Interface output trigger 5 */ +#define ARM_PMU_CTI_TRIGOUT6 0x401A /*!< Cross-trigger Interface output trigger 6 */ +#define ARM_PMU_CTI_TRIGOUT7 0x401B /*!< Cross-trigger Interface output trigger 7 */ + +/** \brief PMU Functions */ + +__STATIC_INLINE void ARM_PMU_Enable(void); +__STATIC_INLINE void ARM_PMU_Disable(void); + +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type); + +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void); +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void); + +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void); +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num); + +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void); +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask); +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask); + +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask); + +/** + \brief Enable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Enable(void) +{ + PMU->CTRL |= PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Disable the PMU +*/ +__STATIC_INLINE void ARM_PMU_Disable(void) +{ + PMU->CTRL &= ~PMU_CTRL_ENABLE_Msk; +} + +/** + \brief Set event to count for PMU eventer counter + \param [in] num Event counter (0-30) to configure + \param [in] type Event to count +*/ +__STATIC_INLINE void ARM_PMU_Set_EVTYPER(uint32_t num, uint32_t type) +{ + PMU->EVTYPER[num] = type; +} + +/** + \brief Reset cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CYCCNT_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_CYCCNT_RESET_Msk; +} + +/** + \brief Reset all event counters +*/ +__STATIC_INLINE void ARM_PMU_EVCNTR_ALL_Reset(void) +{ + PMU->CTRL |= PMU_CTRL_EVENTCNT_RESET_Msk; +} + +/** + \brief Enable counters + \param [in] mask Counters to enable + \note Enables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Enable(uint32_t mask) +{ + PMU->CNTENSET = mask; +} + +/** + \brief Disable counters + \param [in] mask Counters to enable + \note Disables one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Disable(uint32_t mask) +{ + PMU->CNTENCLR = mask; +} + +/** + \brief Read cycle counter + \return Cycle count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CCNTR(void) +{ + return PMU->CCNTR; +} + +/** + \brief Read event counter + \param [in] num Event counter (0-30) to read + \return Event count +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_EVCNTR(uint32_t num) +{ + return PMU_EVCNTR_CNT_Msk & PMU->EVCNTR[num]; +} + +/** + \brief Read counter overflow status + \return Counter overflow status bits for the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE uint32_t ARM_PMU_Get_CNTR_OVS(void) +{ + return PMU->OVSSET; +} + +/** + \brief Clear counter overflow status + \param [in] mask Counter overflow status bits to clear + \note Clears overflow status bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_OVS(uint32_t mask) +{ + PMU->OVSCLR = mask; +} + +/** + \brief Enable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to set + \note Sets overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Enable(uint32_t mask) +{ + PMU->INTENSET = mask; +} + +/** + \brief Disable counter overflow interrupt request + \param [in] mask Counter overflow interrupt request bits to clear + \note Clears overflow interrupt request bits for one or more of the following: + - event counters (0-30) + - cycle counter +*/ +__STATIC_INLINE void ARM_PMU_Set_CNTR_IRQ_Disable(uint32_t mask) +{ + PMU->INTENCLR = mask; +} + +/** + \brief Software increment event counter + \param [in] mask Counters to increment + \note Software increment bits for one or more event counters (0-30) +*/ +__STATIC_INLINE void ARM_PMU_CNTR_Increment(uint32_t mask) +{ + PMU->SWINC = mask; +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h new file mode 100644 index 00000000000..82fb6d46f43 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h @@ -0,0 +1,818 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS-Core(M) Compiler ARMClang (Arm Compiler 6) Header File + */ + +#ifndef __CMSIS_ARMCLANG_M_H +#define __CMSIS_ARMCLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#endif + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START __main +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP Image$$ARM_LIB_STACK$$ZI$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT Image$$ARM_LIB_STACK$$ZI$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section("RESET"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#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 + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + + +/** + \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; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register 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) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \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 void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__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) : ); +} +#endif + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \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 void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \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 __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__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"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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 uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 +} +#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 + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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 uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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. + + \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 void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 /* (__ARM_ARCH >= 8) */ +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#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) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#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; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_M_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h new file mode 100644 index 00000000000..a594442664c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h @@ -0,0 +1,824 @@ +/* + * Copyright (c) 2009-2024 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. + */ + +/* + * CMSIS-Core(M) Compiler LLVM/Clang Header File + */ + +#ifndef __CMSIS_CLANG_M_H +#define __CMSIS_CLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#endif + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START _start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __stack +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __stack_limit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL __stack_seal +#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 + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + + +/** + \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; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register 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) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \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 void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__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) : ); +} +#endif + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \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 void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \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 __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__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"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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 uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 +} +#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 + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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 uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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. + + \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 void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 /* (__ARM_ARCH >= 8) */ + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#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) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +__extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#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; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) */ + /** @} end of group CMSIS_SIMD_intrinsics */ +/** @} end of CMSIS_Core_RegAccFunctions */ + + +#endif /* __CMSIS_CLANG_M_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h new file mode 100644 index 00000000000..54d1f549577 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2009-2023 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. + */ + +/* + * CMSIS-Core(M) Compiler GCC Header File + */ + +#ifndef __CMSIS_GCC_M_H +#define __CMSIS_GCC_M_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +#include + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START + +/** + \brief Initializes data and bss sections + \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 __copy_table { + uint32_t const* src; + uint32_t* dest; + uint32_t wlen; + } __copy_table_t; + + typedef struct __zero_table { + 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__; + extern const __zero_table_t __zero_table_end__; + + for (__copy_table_t const* pTable = &__copy_table_start__; pTable < &__copy_table_end__; ++pTable) { + for(uint32_t i=0u; iwlen; ++i) { + 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 + +#ifndef __INITIAL_SP +#define __INITIAL_SP __StackTop +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __StackLimit +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".vectors"))) +#endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3) +#ifndef __STACK_SEAL +#define __STACK_SEAL __StackSeal +#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 Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \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; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__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 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 __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register 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) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + 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 + */ +__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 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 void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register 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 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 __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \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 void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#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) : ); +} +#endif + + +#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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \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 void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \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 __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 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 __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__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 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"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#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 + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#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 + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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 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 ("MRS %0, psplim" : "=r" (result) ); + return (result); +#endif +} + +#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 + */ +__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 ("MRS %0, psplim_ns" : "=r" (result) ); + return (result); +#endif +} +#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 + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#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 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 __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#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 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 uint32_t __get_MSPLIM(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 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 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 uint32_t __TZ_get_MSPLIM_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 MSPLIM is RAZ/WI */ + return (0U); +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return (result); +#endif +} +#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. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__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 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 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 /* (__ARM_ARCH >= 8) */ + +/*@} end of CMSIS_Core_RegAccFunctions */ + +#endif /* __CMSIS_GCC_M_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h new file mode 100644 index 00000000000..cfc6f808365 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h @@ -0,0 +1,1043 @@ +/* + * Copyright (c) 2017-2021 IAR Systems + * Copyright (c) 2017-2024 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. + */ + +/* + * CMSIS-Core(M) Compiler ICCARM (IAR Compiler for Arm) Header File + */ + +#ifndef __CMSIS_ICCARM_M_H__ +#define __CMSIS_ICCARM_M_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ || __ARM_ARCH_8_1M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #elif __ARM_ARCH == 801 + #define __ARM_ARCH_8_1M_MAIN__ 1 + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) && !defined(__ARM_ARCH_8_1M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' && __ARM_ARCH == 801 + #define __ARM_ARCH_8_1M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if defined(__cplusplus) && __cplusplus >= 201103L + #define __NO_RETURN [[noreturn]] + #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define __NO_RETURN _Noreturn + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #if __ICCARM_V8 + #define __RESTRICT __restrict + #else + /* Needs IAR language extensions */ + #define __RESTRICT restrict + #endif +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#undef __WEAK /* undo the definition from DLib_Defaults.h */ +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + +#ifndef __PROGRAM_START +#define __PROGRAM_START __iar_program_start +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP CSTACK$$Limit +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT CSTACK$$Base +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __vector_table +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#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 + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #if (defined(__ARM_ARCH_ISA_THUMB) && __ARM_ARCH_ISA_THUMB >= 2) + __IAR_FT void __disable_fault_irq() + { + __ASM volatile ("CPSID F" ::: "memory"); + } + + __IAR_FT void __enable_fault_irq() + { + __ASM volatile ("CPSIE F" ::: "memory"); + } + #endif + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if (defined (__ARM_FP) && (__ARM_FP >= 1)) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #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 + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #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 + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (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))) + + #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 + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #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 + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + +__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")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #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 + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + + /* + * __iar_builtin_CLREX can be reordered w.r.t. STREX during high optimizations. + * As a workaround we use inline assembly and a memory barrier. + * (IAR issue EWARM-11901) + */ + #define __CLREX() (__ASM volatile ("CLREX" ::: "memory")) + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!(defined (__ARM_FP) && (__ARM_FP >= 1))) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM volatile("RRX %0, %1" : "=r"(result) : "r" (value)); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + __IAR_FT void __disable_fault_irq() + { + __ASM volatile ("CPSID F" ::: "memory"); + } + + __IAR_FT void __enable_fault_irq() + { + __ASM volatile ("CPSIE F" ::: "memory"); + } + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #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_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #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 extension and secure, there is no stack limit check. + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #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 and secure, there is no stack limit check. + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #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 and secure, there is no stack limit check. + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #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 and secure, there is no stack limit check. + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __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) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #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 + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #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)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ or __ARM_ARCH_8_1M_MAIN__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __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; + } + + __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 + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM volatile ("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM volatile ("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM volatile ("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM volatile ("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM volatile ("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM volatile ("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#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_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=&r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#define __SXTB16_RORn(ARG1, ARG2) __SXTB16(__ROR(ARG1, ARG2)) + +#define __SXTAB16_RORn(ARG1, ARG2, ARG3) __SXTAB16(ARG1, __ROR(ARG2, ARG3)) + +#endif /* __CMSIS_ICCARM_M_H__ */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h new file mode 100644 index 00000000000..5b193a17a5d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h @@ -0,0 +1,1451 @@ +/* + * Copyright (c) 2023-2024 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. + */ + +/* + * CMSIS-Core(M) Compiler TIARMClang Header File + */ + +#ifndef __CMSIS_TIARMCLANG_M_H +#define __CMSIS_TIARMCLANG_M_H + +#pragma clang system_header /* treat file as system include file */ + +#if (__ARM_ACLE >= 200) + #include +#else + #error Compiler must support ACLE V2.0 +#endif /* (__ARM_ACLE >= 200) */ + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif +#ifndef __COMPILER_BARRIER + #define __COMPILER_BARRIER() __ASM volatile("":::"memory") +#endif +#ifndef __NO_INIT + #define __NO_INIT __attribute__ ((section (".noinit"))) +#endif +#ifndef __ALIAS + #define __ALIAS(x) __attribute__ ((alias(x))) +#endif + +/* ######################### Startup and Lowlevel Init ######################## */ +#ifndef __PROGRAM_START +#define __PROGRAM_START _c_int00 +#endif + +#ifndef __INITIAL_SP +#define __INITIAL_SP __STACK_END +#endif + +#ifndef __STACK_LIMIT +#define __STACK_LIMIT __STACK_SIZE +#endif + +#ifndef __VECTOR_TABLE +#define __VECTOR_TABLE __Vectors +#endif + +#ifndef __VECTOR_TABLE_ATTRIBUTE +#define __VECTOR_TABLE_ATTRIBUTE __attribute__((used, section(".intvecs"))) +#endif + +#if (__ARM_FEATURE_CMSE == 3) +#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 No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __nop() + + +/** + \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() __wfi() + + +/** + \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. + */ +#define __WFE() __wfe() + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __sev() + + +/** + \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() __isb(0xF) + + +/** + \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() __dsb(0xF) + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __dmb(0xF) + + +/** + \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 + */ +#define __REV(value) __rev(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 + */ +#define __REV16(value) __rev16(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 + */ +#define __REVSH(value) __revsh(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 + */ +#define __ROR(op1, op2) __ror(op1, op2) + + +/** + \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. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#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 + */ +#define __RBIT(value) __rbit(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 + */ +#define __CLZ(value) __clz(value) + + +/* __ARM_FEATURE_SAT is wrong for for Armv8-M Baseline devices */ +#if ((__ARM_FEATURE_SAT >= 1) && \ + (__ARM_ARCH_ISA_THUMB >= 2) ) +/** + \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(value, sat) __ssat(value, sat) + + +/** + \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(value, sat) __usat(value, sat) + +#else /* (__ARM_FEATURE_SAT >= 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 + */ +__STATIC_FORCEINLINE 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 + */ +__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); +} +#endif /* (__ARM_FEATURE_SAT >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 1) +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + + +/** + \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) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \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 +#endif /* (__ARM_FEATURE_LDREX >= 1) */ + + +#if (__ARM_FEATURE_LDREX >= 2) +/** + \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) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXH (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 2) */ + + +#if (__ARM_FEATURE_LDREX >= 4) +/** + \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) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \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 + */ +#define __STREXW (uint32_t)__builtin_arm_strex +#endif /* (__ARM_FEATURE_LDREX >= 4) */ + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \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 __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : "=r" (result) : "r" (value)); + return (result); +} + + +/** + \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 uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t)result); /* Add explicit type cast here */ +} + + +/** + \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 uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t)result); /* Add explicit type cast here */ +} + + +/** + \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 __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return (result); +} + + +/** + \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 __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)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 void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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); /* Add explicit type cast here */ +} + + +/** + \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 __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) : "memory" ); + return (result); +} + + +/** + \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 __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) : "memory" ); +} + + +/** + \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 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) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \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 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 + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \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 + + +/** + \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 + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* (__ARM_ARCH >= 8) */ + +/** @}*/ /* 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. + */ +#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 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; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); + __ISB(); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); + __ISB(); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return (result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register 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) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \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 void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (__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) : ); +} +#endif + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return (result); +} + + +/** + \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 void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \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 __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return (result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (__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"); +} +#endif + + +#if (__ARM_ARCH_ISA_THUMB >= 2) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting special-purpose register FAULTMASK. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return (result); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + 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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#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 + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return (result); +} + + +#if (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* (__ARM_ARCH_ISA_THUMB >= 2) */ + + +#if (__ARM_ARCH >= 8) +/** + \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 uint32_t __get_PSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 +} +#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 + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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 uint32_t __get_MSPLIM(void) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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 + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 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. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__ARM_ARCH_8_1M_MAIN__ < 1) ) && \ + (__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 (__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. + + \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 void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if ((__ARM_ARCH_8M_MAIN__ < 1) && \ + (__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 /* (__ARM_ARCH >= 8) */ + + +/** + \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 __get_FPSCR(void) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + return (__builtin_arm_get_fpscr()); +#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_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if (defined(__ARM_FP) && (__ARM_FP >= 1)) + __builtin_arm_set_fpscr(fpscr); +#else + (void)fpscr; +#endif +} + + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (__ARM_FEATURE_DSP == 1) +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#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) ) + +#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; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return (result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/** @} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_TIARMCLANG_M_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h new file mode 100644 index 00000000000..fd9f0e9a16f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h @@ -0,0 +1,161 @@ +/**************************************************************************//** + * @file cmsis_armclang_r.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 04. December 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_ARMCLANG_R_H +#define __CMSIS_ARMCLANG_R_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_ARMCLANG_H + #error "This file must not be included directly" +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#endif /* __CMSIS_ARMCLANG_R_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h new file mode 100644 index 00000000000..f27eef08f6c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h @@ -0,0 +1,161 @@ +/**************************************************************************//** + * @file cmsis_clang_r.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V6.0.0 + * @date 04. December 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_CLANG_CORER_H +#define __CMSIS_CLANG_CORER_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __CMSIS_CLANG_H + #error "This file must not be included directly" +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr; + uint32_t result; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV %1, sp \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr), "=r"(result) : : "memory" + ); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr; + __ASM volatile( + "MRS %0, cpsr \n" + "CPS #0x1F \n" // no effect in USR mode + "MOV sp, %1 \n" + "MSR cpsr_c, %0 \n" // no effect in USR mode + "ISB" : "=r"(cpsr) : "r" (topOfProcStack) : "memory" + ); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/** @} end of CMSIS_Core_RegAccFunctions */ + + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +#endif /* __CMSIS_CLANG_COREA_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h new file mode 100644 index 00000000000..be2117c953e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h @@ -0,0 +1,163 @@ +/**************************************************************************//** + * @file cmsis_gcc_r.h + * @brief CMSIS compiler GCC header file + * @version V6.0.0 + * @date 4. August 2024 + ******************************************************************************/ +/* + * Copyright (c) 2009-2023 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. + */ + +#ifndef __CMSIS_GCC_R_H +#define __CMSIS_GCC_R_H + +#ifndef __CMSIS_GCC_H + #error "This file must not be included directly" +#endif + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + + +/** \defgroup CMSIS_Core_intrinsics CMSIS Core Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +/** \brief Get CPSR Register + \return CPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CPSR(void) +{ + uint32_t result; + __ASM volatile("MRS %0, cpsr" : "=r" (result) ); + return(result); +} + +/** \brief Set CPSR Register + \param [in] cpsr CPSR value to set + */ +__STATIC_FORCEINLINE void __set_CPSR(uint32_t cpsr) +{ + __ASM volatile ("MSR cpsr, %0" : : "r" (cpsr) : "cc", "memory"); +} + +/** \brief Get Mode + \return Processor Mode + */ +__STATIC_FORCEINLINE uint32_t __get_mode(void) +{ + return (__get_CPSR() & 0x1FU); +} + +/** \brief Set Mode + \param [in] mode Mode value to set + */ +__STATIC_FORCEINLINE void __set_mode(uint32_t mode) +{ + __ASM volatile("MSR cpsr_c, %0" : : "r" (mode) : "memory"); +} + +/** \brief Get Stack Pointer + \return Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP(void) +{ + uint32_t result; + __ASM volatile("MOV %0, sp" : "=r" (result) : : "memory"); + return result; +} + +/** \brief Set Stack Pointer + \param [in] stack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP(uint32_t stack) +{ + __ASM volatile("MOV sp, %0" : : "r" (stack) : "memory"); +} + +/** \brief Get USR/SYS Stack Pointer + \return USR/SYS Stack Pointer value + */ +__STATIC_FORCEINLINE uint32_t __get_SP_usr(void) +{ + uint32_t cpsr = __get_CPSR(); + uint32_t result; + __ASM volatile( + "CPS #0x1F \n" + "MOV %0, sp " : "=r"(result) : : "memory" + ); + __set_CPSR(cpsr); + __ISB(); + return result; +} + +/** \brief Set USR/SYS Stack Pointer + \param [in] topOfProcStack USR/SYS Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_SP_usr(uint32_t topOfProcStack) +{ + uint32_t cpsr = __get_CPSR(); + __ASM volatile( + "CPS #0x1F \n" + "MOV sp, %0 " : : "r" (topOfProcStack) : "memory" + ); + __set_CPSR(cpsr); + __ISB(); +} + +/** \brief Get FPEXC + \return Floating Point Exception Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPEXC(void) +{ +#if (__FPU_PRESENT == 1) + uint32_t result; + __ASM volatile("VMRS %0, fpexc" : "=r" (result) : : "memory"); + return(result); +#else + return(0); +#endif +} + +/** \brief Set FPEXC + \param [in] fpexc Floating Point Exception Control value to set + */ +__STATIC_FORCEINLINE void __set_FPEXC(uint32_t fpexc) +{ +#if (__FPU_PRESENT == 1) + __ASM volatile ("VMSR fpexc, %0" : : "r" (fpexc) : "memory"); +#endif +} + +/* + * Include common core functions to access Coprocessor 15 registers + */ + +#define __get_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MRC p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : "=r" (Rt) : : "memory" ) +#define __set_CP(cp, op1, Rt, CRn, CRm, op2) __ASM volatile("MCR p" # cp ", " # op1 ", %0, c" # CRn ", c" # CRm ", " # op2 : : "r" (Rt) : "memory" ) +#define __get_CP64(cp, op1, Rt, CRm) __ASM volatile("MRRC p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : "=r" (Rt) : : "memory" ) +#define __set_CP64(cp, op1, Rt, CRm) __ASM volatile("MCRR p" # cp ", " # op1 ", %Q0, %R0, c" # CRm : : "r" (Rt) : "memory" ) + +/*@} end of group CMSIS_Core_intrinsics */ + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_R_H */ diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h new file mode 100644 index 00000000000..e095956a8cb --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2017-2023 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. + */ + +/* + * CMSIS Core(M) Context Management for Armv8-M TrustZone + */ + +#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 TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// 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 +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// 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) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/LICENSE b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/LICENSE new file mode 100644 index 00000000000..8dada3edaf5 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/arm/CMSIS_6/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board.h b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board.h new file mode 100644 index 00000000000..eb96e70e981 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board.h @@ -0,0 +1,52 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * File Name : board.h + * Description : Includes and API function available for this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARDS + * @defgroup BOARD_RA2A1_EK + * @brief BSP for the RA2A1-EK Board + * + * The RA2A1_EK is a development kit for the Renesas RA2A1 microcontroller. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_H +#define BOARD_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Board Specific Includes. */ +#include "board_init.h" +#include "board_leds.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BOARD_RA2A1_EK + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end defgroup BSP_CONFIG_RA2A1) */ + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.c b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.c new file mode 100644 index 00000000000..bea64bb2ca3 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.c @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * File Name : board_init.c + * Description : This module calls any initialization code specific to this BSP. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA2A1_EK_INIT + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if defined(BOARD_RA2A1_EK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Performs any initialization specific to this BSP. + * + * @param[in] p_args Pointer to arguments of the user's choice. + **********************************************************************************************************************/ +void bsp_init (void * p_args) +{ + FSP_PARAMETER_NOT_USED(p_args); +} + +#endif + +/** @} (end addtogroup BOARD_RA2A1_EK_INIT) */ diff --git a/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.h b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.h new file mode 100644 index 00000000000..2fb2e3dc6be --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_init.h @@ -0,0 +1,50 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * File Name : board_init.h + * Description : This module calls any initialization code specific to this BSP. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RA2A1_EK + * @defgroup BOARD_RA2A1_EK_INIT + * @brief Board specific code for the RA2A1-EK Board + * + * This include file is specific to the RA2A1-EK board. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_INIT_H +#define BOARD_INIT_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +void bsp_init(void * p_args); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RA2A1_EK_INIT) */ diff --git a/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.c b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.c new file mode 100644 index 00000000000..94178b67035 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.c @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * File Name : board_leds.c + * Description : This module has information about the LEDs on this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA2A1_EK_LEDS + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if defined(BOARD_RA2A1_EK) + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Array of LED IOPORT pins. */ +static const uint16_t g_bsp_prv_leds[] = +{ + (uint16_t) BSP_IO_PORT_02_PIN_05, ///< LED1 +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** Structure with LED information for this board. */ + +const bsp_leds_t g_bsp_leds = +{ + .led_count = (uint16_t) ((sizeof(g_bsp_prv_leds) / sizeof(g_bsp_prv_leds[0]))), + .p_leds = &g_bsp_prv_leds[0] +}; + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end addtogroup BOARD_RA2A1_EK_LEDS) */ diff --git a/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.h b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.h new file mode 100644 index 00000000000..a830c451726 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/board/ra2a1_ek/board_leds.h @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * File Name : board_leds.h + * Description : This module has information about the LEDs on this board. + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RA2A1_EK + * @defgroup BOARD_RA2A1_EK_LEDS Board LEDs + * @brief LED information for this board. + * + * This is code specific to the RA2A1 EK board. It includes info on the number of LEDs and which pins are they + * are on. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BOARD_LEDS_H +#define BOARD_LEDS_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Information on how many LEDs and what pins they are on. */ +typedef struct st_bsp_leds +{ + uint16_t led_count; ///< The number of LEDs on this board + uint16_t const * p_leds; ///< Pointer to an array of IOPORT pins for controlling LEDs +} bsp_leds_t; + +/** Available user-controllable LEDs on this board. These enums can be can be used to index into the array of LED pins + * found in the bsp_leds_t structure. */ +typedef enum e_bsp_led +{ + BSP_LED_LED1, ///< LED1 +} bsp_led_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Public Functions + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/** @} (end defgroup BOARD_RA2A1_EK_LEDS) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/bsp_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/bsp_api.h new file mode 100644 index 00000000000..f31884b1c02 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/bsp_api.h @@ -0,0 +1,100 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_API_H +#define BSP_API_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* FSP Common Includes. */ +#include "fsp_common_api.h" + +/* Gets MCU configuration information. */ +#include "bsp_cfg.h" + +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) +/* Store warning settings for 'conversion' and 'sign-conversion' to as specified on command line. */ + #pragma GCC diagnostic push + +/* CMSIS-CORE currently generates 2 warnings when compiling with GCC. One in core_cmInstr.h and one in core_cm4_simd.h. + * We are not modifying these files so we will ignore these warnings temporarily. */ + #pragma GCC diagnostic ignored "-Wconversion" + #pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +/* Vector information for this project. This is generated by the tooling. */ +#include "../../src/bsp/mcu/all/bsp_exceptions.h" +#include "vector_data.h" + +/* CMSIS-CORE Renesas Device Files. Must come after bsp_feature.h, which is included in bsp_cfg.h. */ +#include "../../src/bsp/cmsis/Device/RENESAS/Include/renesas.h" +#include "../../src/bsp/cmsis/Device/RENESAS/Include/system.h" + +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) + +/* Restore warning settings for 'conversion' and 'sign-conversion' to as specified on command line. */ + #pragma GCC diagnostic pop +#endif + +#if defined(BSP_API_OVERRIDE) + #include BSP_API_OVERRIDE +#else + +/* BSP Common Includes. */ + #include "../../src/bsp/mcu/all/bsp_common.h" + +/* BSP MCU Specific Includes. */ + #include "../../src/bsp/mcu/all/bsp_register_protection.h" + #include "../../src/bsp/mcu/all/bsp_irq.h" + #include "../../src/bsp/mcu/all/bsp_io.h" + #include "../../src/bsp/mcu/all/bsp_group_irq.h" + #include "../../src/bsp/mcu/all/bsp_clocks.h" + #include "../../src/bsp/mcu/all/bsp_module_stop.h" + #include "../../src/bsp/mcu/all/bsp_security.h" + +/* Factory MCU information. */ + #include "../../inc/fsp_features.h" + +/* BSP Common Includes (Other than bsp_common.h) */ + #include "../../src/bsp/mcu/all/bsp_delay.h" + #include "../../src/bsp/mcu/all/bsp_mcu_api.h" + + #if __has_include("../../src/bsp/mcu/all/internal/bsp_internal.h") + #include "../../src/bsp/mcu/all/internal/bsp_internal.h" + #endif + +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +fsp_err_t R_FSP_VersionGet(fsp_pack_version_t * const p_version); + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/fsp_common_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/fsp_common_api.h new file mode 100644 index 00000000000..ac401da63c2 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/fsp_common_api.h @@ -0,0 +1,385 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef FSP_COMMON_API_H +#define FSP_COMMON_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include + +/* Includes FSP version macros. */ +#include "fsp_version.h" + +/*******************************************************************************************************************//** + * @ingroup RENESAS_COMMON + * @defgroup RENESAS_ERROR_CODES Common Error Codes + * All FSP modules share these common error codes. + * @{ + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** This macro is used to suppress compiler messages about a parameter not being used in a function. The nice thing + * about using this implementation is that it does not take any extra RAM or ROM. */ + +#define FSP_PARAMETER_NOT_USED(p) (void) ((p)) + +/** Determine if a C++ compiler is being used. + * If so, ensure that standard C is used to process the API information. */ +#if defined(__cplusplus) + #define FSP_CPP_HEADER extern "C" { + #define FSP_CPP_FOOTER } +#else + #define FSP_CPP_HEADER + #define FSP_CPP_FOOTER +#endif + +/** FSP Header and Footer definitions */ +#define FSP_HEADER FSP_CPP_HEADER +#define FSP_FOOTER FSP_CPP_FOOTER + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/** Macro to be used when argument to function is ignored since function call is NSC and the parameter is statically + * defined on the Secure side. */ +#define FSP_SECURE_ARGUMENT (NULL) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Common error codes */ +typedef enum e_fsp_err +{ + FSP_SUCCESS = 0, + + FSP_ERR_ASSERTION = 1, ///< A critical assertion has failed + FSP_ERR_INVALID_POINTER = 2, ///< Pointer points to invalid memory location + FSP_ERR_INVALID_ARGUMENT = 3, ///< Invalid input parameter + FSP_ERR_INVALID_CHANNEL = 4, ///< Selected channel does not exist + FSP_ERR_INVALID_MODE = 5, ///< Unsupported or incorrect mode + FSP_ERR_UNSUPPORTED = 6, ///< Selected mode not supported by this API + FSP_ERR_NOT_OPEN = 7, ///< Requested channel is not configured or API not open + FSP_ERR_IN_USE = 8, ///< Channel/peripheral is running/busy + FSP_ERR_OUT_OF_MEMORY = 9, ///< Allocate more memory in the driver's cfg.h + FSP_ERR_HW_LOCKED = 10, ///< Hardware is locked + FSP_ERR_IRQ_BSP_DISABLED = 11, ///< IRQ not enabled in BSP + FSP_ERR_OVERFLOW = 12, ///< Hardware overflow + FSP_ERR_UNDERFLOW = 13, ///< Hardware underflow + FSP_ERR_ALREADY_OPEN = 14, ///< Requested channel is already open in a different configuration + FSP_ERR_APPROXIMATION = 15, ///< Could not set value to exact result + FSP_ERR_CLAMPED = 16, ///< Value had to be limited for some reason + FSP_ERR_INVALID_RATE = 17, ///< Selected rate could not be met + FSP_ERR_ABORTED = 18, ///< An operation was aborted + FSP_ERR_NOT_ENABLED = 19, ///< Requested operation is not enabled + FSP_ERR_TIMEOUT = 20, ///< Timeout error + FSP_ERR_INVALID_BLOCKS = 21, ///< Invalid number of blocks supplied + FSP_ERR_INVALID_ADDRESS = 22, ///< Invalid address supplied + FSP_ERR_INVALID_SIZE = 23, ///< Invalid size/length supplied for operation + FSP_ERR_WRITE_FAILED = 24, ///< Write operation failed + FSP_ERR_ERASE_FAILED = 25, ///< Erase operation failed + FSP_ERR_INVALID_CALL = 26, ///< Invalid function call is made + FSP_ERR_INVALID_HW_CONDITION = 27, ///< Detected hardware is in invalid condition + FSP_ERR_INVALID_FACTORY_FLASH = 28, ///< Factory flash is not available on this MCU + FSP_ERR_INVALID_STATE = 30, ///< API or command not valid in the current state + FSP_ERR_NOT_ERASED = 31, ///< Erase verification failed + FSP_ERR_SECTOR_RELEASE_FAILED = 32, ///< Sector release failed + FSP_ERR_NOT_INITIALIZED = 33, ///< Required initialization not complete + FSP_ERR_NOT_FOUND = 34, ///< The requested item could not be found + FSP_ERR_NO_CALLBACK_MEMORY = 35, ///< Non-secure callback memory not provided for non-secure callback + FSP_ERR_BUFFER_EMPTY = 36, ///< No data available in buffer + FSP_ERR_INVALID_DATA = 37, ///< Accuracy of data is not guaranteed + + /* Start of RTOS only error codes */ + FSP_ERR_INTERNAL = 100, ///< Internal error + FSP_ERR_WAIT_ABORTED = 101, ///< Wait aborted + + /* Start of UART specific */ + FSP_ERR_FRAMING = 200, ///< Framing error occurs + FSP_ERR_BREAK_DETECT = 201, ///< Break signal detects + FSP_ERR_PARITY = 202, ///< Parity error occurs + FSP_ERR_RXBUF_OVERFLOW = 203, ///< Receive queue overflow + FSP_ERR_QUEUE_UNAVAILABLE = 204, ///< Can't open s/w queue + FSP_ERR_INSUFFICIENT_SPACE = 205, ///< Not enough space in transmission circular buffer + FSP_ERR_INSUFFICIENT_DATA = 206, ///< Not enough data in receive circular buffer + + /* Start of SPI specific */ + FSP_ERR_TRANSFER_ABORTED = 300, ///< The data transfer was aborted. + FSP_ERR_MODE_FAULT = 301, ///< Mode fault error. + FSP_ERR_READ_OVERFLOW = 302, ///< Read overflow. + FSP_ERR_SPI_PARITY = 303, ///< Parity error. + FSP_ERR_OVERRUN = 304, ///< Overrun error. + + /* Start of CGC Specific */ + FSP_ERR_CLOCK_INACTIVE = 400, ///< Inactive clock specified as system clock. + FSP_ERR_CLOCK_ACTIVE = 401, ///< Active clock source cannot be modified without stopping first. + FSP_ERR_NOT_STABILIZED = 403, ///< Clock has not stabilized after its been turned on/off + FSP_ERR_PLL_SRC_INACTIVE = 404, ///< PLL initialization attempted when PLL source is turned off + FSP_ERR_OSC_STOP_DET_ENABLED = 405, ///< Illegal attempt to stop LOCO when Oscillation stop is enabled + FSP_ERR_OSC_STOP_DETECTED = 406, ///< The Oscillation stop detection status flag is set + FSP_ERR_OSC_STOP_CLOCK_ACTIVE = 407, ///< Attempt to clear Oscillation Stop Detect Status with PLL/MAIN_OSC active + FSP_ERR_CLKOUT_EXCEEDED = 408, ///< Output on target output clock pin exceeds maximum supported limit + FSP_ERR_USB_MODULE_ENABLED = 409, ///< USB clock configure request with USB Module enabled + FSP_ERR_HARDWARE_TIMEOUT = 410, ///< A register read or write timed out + FSP_ERR_LOW_VOLTAGE_MODE = 411, ///< Invalid clock setting attempted in low voltage mode + + /* Start of FLASH Specific */ + FSP_ERR_PE_FAILURE = 500, ///< Unable to enter Programming mode. + FSP_ERR_CMD_LOCKED = 501, ///< Peripheral in command locked state + FSP_ERR_FCLK = 502, ///< FCLK must be >= 4 MHz + FSP_ERR_INVALID_LINKED_ADDRESS = 503, ///< Function or data are linked at an invalid region of memory + FSP_ERR_BLANK_CHECK_FAILED = 504, ///< Blank check operation failed + FSP_ERR_HUK_ZEROIZATION = 505, ///< W-HUK zeroization is in progress + + /* Start of CAC Specific */ + FSP_ERR_INVALID_CAC_REF_CLOCK = 600, ///< Measured clock rate < reference clock rate + + /* Start of IIRFA Specific */ + FSP_ERR_INVALID_RESULT = 700, ///< The result of one or more calculations was +/- infinity. + + /* Start of GLCD Specific */ + FSP_ERR_CLOCK_GENERATION = 1000, ///< Clock cannot be specified as system clock + FSP_ERR_INVALID_TIMING_SETTING = 1001, ///< Invalid timing parameter + FSP_ERR_INVALID_LAYER_SETTING = 1002, ///< Invalid layer parameter + FSP_ERR_INVALID_ALIGNMENT = 1003, ///< Invalid memory alignment found + FSP_ERR_INVALID_GAMMA_SETTING = 1004, ///< Invalid gamma correction parameter + FSP_ERR_INVALID_LAYER_FORMAT = 1005, ///< Invalid color format in layer + FSP_ERR_INVALID_UPDATE_TIMING = 1006, ///< Invalid timing for register update + FSP_ERR_INVALID_CLUT_ACCESS = 1007, ///< Invalid access to CLUT entry + FSP_ERR_INVALID_FADE_SETTING = 1008, ///< Invalid fade-in/fade-out setting + FSP_ERR_INVALID_BRIGHTNESS_SETTING = 1009, ///< Invalid gamma correction parameter + + /* Start of JPEG Specific */ + FSP_ERR_JPEG_ERR = 1100, ///< JPEG error + FSP_ERR_JPEG_SOI_NOT_DETECTED = 1101, ///< SOI not detected until EOI detected. + FSP_ERR_JPEG_SOF1_TO_SOFF_DETECTED = 1102, ///< SOF1 to SOFF detected. + FSP_ERR_JPEG_UNSUPPORTED_PIXEL_FORMAT = 1103, ///< Unprovided pixel format detected. + FSP_ERR_JPEG_SOF_ACCURACY_ERROR = 1104, ///< SOF accuracy error: other than 8 detected. + FSP_ERR_JPEG_DQT_ACCURACY_ERROR = 1105, ///< DQT accuracy error: other than 0 detected. + FSP_ERR_JPEG_COMPONENT_ERROR1 = 1106, ///< Component error 1: the number of SOF0 header components detected is other than 1, 3, or 4. + FSP_ERR_JPEG_COMPONENT_ERROR2 = 1107, ///< Component error 2: the number of components differs between SOF0 header and SOS. + FSP_ERR_JPEG_SOF0_DQT_DHT_NOT_DETECTED = 1108, ///< SOF0, DQT, and DHT not detected when SOS detected. + FSP_ERR_JPEG_SOS_NOT_DETECTED = 1109, ///< SOS not detected: SOS not detected until EOI detected. + FSP_ERR_JPEG_EOI_NOT_DETECTED = 1110, ///< EOI not detected (default) + FSP_ERR_JPEG_RESTART_INTERVAL_DATA_NUMBER_ERROR = 1111, ///< Restart interval data number error detected. + FSP_ERR_JPEG_IMAGE_SIZE_ERROR = 1112, ///< Image size error detected. + FSP_ERR_JPEG_LAST_MCU_DATA_NUMBER_ERROR = 1113, ///< Last MCU data number error detected. + FSP_ERR_JPEG_BLOCK_DATA_NUMBER_ERROR = 1114, ///< Block data number error detected. + FSP_ERR_JPEG_BUFFERSIZE_NOT_ENOUGH = 1115, ///< User provided buffer size not enough + FSP_ERR_JPEG_UNSUPPORTED_IMAGE_SIZE = 1116, ///< JPEG Image size is not aligned with MCU + + /* Start of touch panel framework specific */ + FSP_ERR_CALIBRATE_FAILED = 1200, ///< Calibration failed + + /* Start of IIRFA specific */ + FSP_ERR_IIRFA_ECC_1BIT = 1300, ///< 1-bit ECC error detected + FSP_ERR_IIRFA_ECC_2BIT = 1301, ///< 2-bit ECC error detected + + /* Start of IP specific */ + FSP_ERR_IP_HARDWARE_NOT_PRESENT = 1400, ///< Requested IP does not exist on this device + FSP_ERR_IP_UNIT_NOT_PRESENT = 1401, ///< Requested unit does not exist on this device + FSP_ERR_IP_CHANNEL_NOT_PRESENT = 1402, ///< Requested channel does not exist on this device + + /* Start of USB specific */ + FSP_ERR_USB_FAILED = 1500, + FSP_ERR_USB_BUSY = 1501, + FSP_ERR_USB_SIZE_SHORT = 1502, + FSP_ERR_USB_SIZE_OVER = 1503, + FSP_ERR_USB_NOT_OPEN = 1504, + FSP_ERR_USB_NOT_SUSPEND = 1505, + FSP_ERR_USB_PARAMETER = 1506, + + /* Start of Message framework specific */ + FSP_ERR_NO_MORE_BUFFER = 2000, ///< No more buffer found in the memory block pool + FSP_ERR_ILLEGAL_BUFFER_ADDRESS = 2001, ///< Buffer address is out of block memory pool + FSP_ERR_INVALID_WORKBUFFER_SIZE = 2002, ///< Work buffer size is invalid + FSP_ERR_INVALID_MSG_BUFFER_SIZE = 2003, ///< Message buffer size is invalid + FSP_ERR_TOO_MANY_BUFFERS = 2004, ///< Number of buffer is too many + FSP_ERR_NO_SUBSCRIBER_FOUND = 2005, ///< No message subscriber found + FSP_ERR_MESSAGE_QUEUE_EMPTY = 2006, ///< No message found in the message queue + FSP_ERR_MESSAGE_QUEUE_FULL = 2007, ///< No room for new message in the message queue + FSP_ERR_ILLEGAL_SUBSCRIBER_LISTS = 2008, ///< Message subscriber lists is illegal + FSP_ERR_BUFFER_RELEASED = 2009, ///< Buffer has been released + + /* Start of 2DG Driver specific */ + FSP_ERR_D2D_ERROR_INIT = 3000, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_DEINIT = 3001, ///< D/AVE 2D has an error in the initialization + FSP_ERR_D2D_ERROR_RENDERING = 3002, ///< D/AVE 2D has an error in the rendering + FSP_ERR_D2D_ERROR_SIZE = 3003, ///< D/AVE 2D has an error in the rendering + + /* Start of ETHER Driver specific */ + FSP_ERR_ETHER_ERROR_NO_DATA = 4000, ///< No Data in Receive buffer. + FSP_ERR_ETHER_ERROR_LINK = 4001, ///< ETHERC/EDMAC has an error in the Auto-negotiation + FSP_ERR_ETHER_ERROR_MAGIC_PACKET_MODE = 4002, ///< As a Magic Packet is being detected, and transmission/reception is not enabled + FSP_ERR_ETHER_ERROR_TRANSMIT_BUFFER_FULL = 4003, ///< Transmit buffer is not empty + FSP_ERR_ETHER_ERROR_FILTERING = 4004, ///< Detect multicast frame when multicast frame filtering enable + FSP_ERR_ETHER_ERROR_PHY_COMMUNICATION = 4005, ///< ETHERC/EDMAC has an error in the phy communication + FSP_ERR_ETHER_RECEIVE_BUFFER_ACTIVE = 4006, ///< Receive buffer is active. + + /* Start of ETHER_PHY Driver specific */ + FSP_ERR_ETHER_PHY_ERROR_LINK = 5000, ///< PHY is not link up. + FSP_ERR_ETHER_PHY_NOT_READY = 5001, ///< PHY has an error in the Auto-negotiation + + /* Start of BYTEQ library specific */ + FSP_ERR_QUEUE_FULL = 10000, ///< Queue is full, cannot queue another data + FSP_ERR_QUEUE_EMPTY = 10001, ///< Queue is empty, no data to dequeue + + /* Start of CTSU Driver specific */ + FSP_ERR_CTSU_SCANNING = 6000, ///< Scanning. + FSP_ERR_CTSU_NOT_GET_DATA = 6001, ///< Not processed previous scan data. + FSP_ERR_CTSU_INCOMPLETE_TUNING = 6002, ///< Incomplete initial offset tuning. + FSP_ERR_CTSU_DIAG_NOT_YET = 6003, ///< Diagnosis of data collected no yet. + FSP_ERR_CTSU_DIAG_LDO_OVER_VOLTAGE = 6004, ///< Diagnosis of LDO over voltage failed. + FSP_ERR_CTSU_DIAG_CCO_HIGH = 6005, ///< Diagnosis of CCO into 19.2uA failed. + FSP_ERR_CTSU_DIAG_CCO_LOW = 6006, ///< Diagnosis of CCO into 2.4uA failed. + FSP_ERR_CTSU_DIAG_SSCG = 6007, ///< Diagnosis of SSCG frequency failed. + FSP_ERR_CTSU_DIAG_DAC = 6008, ///< Diagnosis of non-touch count value failed. + FSP_ERR_CTSU_DIAG_OUTPUT_VOLTAGE = 6009, ///< Diagnosis of LDO output voltage failed. + FSP_ERR_CTSU_DIAG_OVER_VOLTAGE = 6010, ///< Diagnosis of over voltage detection circuit failed. + FSP_ERR_CTSU_DIAG_OVER_CURRENT = 6011, ///< Diagnosis of over current detection circuit failed. + FSP_ERR_CTSU_DIAG_LOAD_RESISTANCE = 6012, ///< Diagnosis of LDO internal resistance value failed. + FSP_ERR_CTSU_DIAG_CURRENT_SOURCE = 6013, ///< Diagnosis of Current source value failed. + FSP_ERR_CTSU_DIAG_SENSCLK_GAIN = 6014, ///< Diagnosis of SENSCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_SUCLK_GAIN = 6015, ///< Diagnosis of SUCLK frequency gain failed. + FSP_ERR_CTSU_DIAG_CLOCK_RECOVERY = 6016, ///< Diagnosis of SUCLK clock recovery function failed. + FSP_ERR_CTSU_DIAG_CFC_GAIN = 6017, ///< Diagnosis of CFC oscillator gain failed. + + /* Start of SDMMC specific */ + FSP_ERR_CARD_INIT_FAILED = 40000, ///< SD card or eMMC device failed to initialize. + FSP_ERR_CARD_NOT_INSERTED = 40001, ///< SD card not installed. + FSP_ERR_DEVICE_BUSY = 40002, ///< Device is holding DAT0 low or another operation is ongoing. + FSP_ERR_CARD_NOT_INITIALIZED = 40004, ///< SD card was removed. + FSP_ERR_CARD_WRITE_PROTECTED = 40005, ///< Media is write protected. + FSP_ERR_TRANSFER_BUSY = 40006, ///< Transfer in progress. + FSP_ERR_RESPONSE = 40007, ///< Card did not respond or responded with an error. + + /* Start of FX_IO specific */ + FSP_ERR_MEDIA_FORMAT_FAILED = 50000, ///< Media format failed. + FSP_ERR_MEDIA_OPEN_FAILED = 50001, ///< Media open failed. + + /* Start of CAN specific */ + FSP_ERR_CAN_DATA_UNAVAILABLE = 60000, ///< No data available. + FSP_ERR_CAN_MODE_SWITCH_FAILED = 60001, ///< Switching operation modes failed. + FSP_ERR_CAN_INIT_FAILED = 60002, ///< Hardware initialization failed. + FSP_ERR_CAN_TRANSMIT_NOT_READY = 60003, ///< Transmit in progress. + FSP_ERR_CAN_RECEIVE_MAILBOX = 60004, ///< Mailbox is setup as a receive mailbox. + FSP_ERR_CAN_TRANSMIT_MAILBOX = 60005, ///< Mailbox is setup as a transmit mailbox. + FSP_ERR_CAN_MESSAGE_LOST = 60006, ///< Receive message has been overwritten or overrun. + FSP_ERR_CAN_TRANSMIT_FIFO_FULL = 60007, ///< Transmit FIFO is full. + + /* Start of SF_WIFI Specific */ + FSP_ERR_WIFI_CONFIG_FAILED = 70000, ///< WiFi module Configuration failed. + FSP_ERR_WIFI_INIT_FAILED = 70001, ///< WiFi module initialization failed. + FSP_ERR_WIFI_TRANSMIT_FAILED = 70002, ///< Transmission failed + FSP_ERR_WIFI_INVALID_MODE = 70003, ///< API called when provisioned in client mode + FSP_ERR_WIFI_FAILED = 70004, ///< WiFi Failed. + FSP_ERR_WIFI_SCAN_COMPLETE = 70005, ///< Wifi scan has completed. + FSP_ERR_WIFI_AP_NOT_CONNECTED = 70006, ///< WiFi module is not connected to access point + FSP_ERR_WIFI_UNKNOWN_AT_CMD = 70007, ///< DA16XXX Unknown AT command Error + FSP_ERR_WIFI_INSUF_PARAM = 70008, ///< DA16XXX Insufficient parameter + FSP_ERR_WIFI_TOO_MANY_PARAMS = 70009, ///< DA16XXX Too many parameters + FSP_ERR_WIFI_INV_PARAM_VAL = 70010, ///< DA16XXX Wrong parameter value + FSP_ERR_WIFI_NO_RESULT = 70011, ///< DA16XXX No result + FSP_ERR_WIFI_RSP_BUF_OVFLW = 70012, ///< DA16XXX Response buffer overflow + FSP_ERR_WIFI_FUNC_NOT_CONFIG = 70013, ///< DA16XXX Function is not configured + FSP_ERR_WIFI_NVRAM_WR_FAIL = 70014, ///< DA16XXX NVRAM write failure + FSP_ERR_WIFI_RET_MEM_WR_FAIL = 70015, ///< DA16XXX Retention memory write failure + FSP_ERR_WIFI_UNKNOWN_ERR = 70016, ///< DA16XXX unknown error + + /* Start of SF_CELLULAR Specific */ + FSP_ERR_CELLULAR_CONFIG_FAILED = 80000, ///< Cellular module Configuration failed. + FSP_ERR_CELLULAR_INIT_FAILED = 80001, ///< Cellular module initialization failed. + FSP_ERR_CELLULAR_TRANSMIT_FAILED = 80002, ///< Transmission failed + FSP_ERR_CELLULAR_FW_UPTODATE = 80003, ///< Firmware is uptodate + FSP_ERR_CELLULAR_FW_UPGRADE_FAILED = 80004, ///< Firmware upgrade failed + FSP_ERR_CELLULAR_FAILED = 80005, ///< Cellular Failed. + FSP_ERR_CELLULAR_INVALID_STATE = 80006, ///< API Called in invalid state. + FSP_ERR_CELLULAR_REGISTRATION_FAILED = 80007, ///< Cellular Network registration failed + + /* Start of SF_BLE specific */ + FSP_ERR_BLE_FAILED = 90001, ///< BLE operation failed + FSP_ERR_BLE_INIT_FAILED = 90002, ///< BLE device initialization failed + FSP_ERR_BLE_CONFIG_FAILED = 90003, ///< BLE device configuration failed + FSP_ERR_BLE_PRF_ALREADY_ENABLED = 90004, ///< BLE device Profile already enabled + FSP_ERR_BLE_PRF_NOT_ENABLED = 90005, ///< BLE device not enabled + + /* Start of SF_BLE_ABS specific */ + FSP_ERR_BLE_ABS_INVALID_OPERATION = 91001, ///< Invalid operation is executed. + FSP_ERR_BLE_ABS_NOT_FOUND = 91002, ///< Valid data or free space is not found. + + /* Start of Crypto specific (0x10000) @note Refer to sf_cryoto_err.h for Crypto error code. */ + FSP_ERR_CRYPTO_CONTINUE = 0x10000, ///< Continue executing function + FSP_ERR_CRYPTO_SCE_RESOURCE_CONFLICT = 0x10001, ///< Hardware resource busy + FSP_ERR_CRYPTO_SCE_FAIL = 0x10002, ///< Internal I/O buffer is not empty + FSP_ERR_CRYPTO_SCE_HRK_INVALID_INDEX = 0x10003, ///< Invalid index + FSP_ERR_CRYPTO_SCE_RETRY = 0x10004, ///< Retry + FSP_ERR_CRYPTO_SCE_VERIFY_FAIL = 0x10005, ///< Verify is failed + FSP_ERR_CRYPTO_SCE_ALREADY_OPEN = 0x10006, ///< HW SCE module is already opened + FSP_ERR_CRYPTO_NOT_OPEN = 0x10007, ///< Hardware module is not initialized + FSP_ERR_CRYPTO_UNKNOWN = 0x10008, ///< Some unknown error occurred + FSP_ERR_CRYPTO_NULL_POINTER = 0x10009, ///< Null pointer input as a parameter + FSP_ERR_CRYPTO_NOT_IMPLEMENTED = 0x1000a, ///< Algorithm/size not implemented + FSP_ERR_CRYPTO_RNG_INVALID_PARAM = 0x1000b, ///< An invalid parameter is specified + FSP_ERR_CRYPTO_RNG_FATAL_ERROR = 0x1000c, ///< A fatal error occurred + FSP_ERR_CRYPTO_INVALID_SIZE = 0x1000d, ///< Size specified is invalid + FSP_ERR_CRYPTO_INVALID_STATE = 0x1000e, ///< Function used in an valid state + FSP_ERR_CRYPTO_ALREADY_OPEN = 0x1000f, ///< control block is already opened + FSP_ERR_CRYPTO_INSTALL_KEY_FAILED = 0x10010, ///< Specified input key is invalid. + FSP_ERR_CRYPTO_AUTHENTICATION_FAILED = 0x10011, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_KEY_SET_FAIL = 0x10012, ///< Failure to Init Cipher + FSP_ERR_CRYPTO_SCE_AUTHENTICATION = 0x10013, ///< Authentication failed + FSP_ERR_CRYPTO_SCE_PARAMETER = 0x10014, ///< Input date is illegal. + FSP_ERR_CRYPTO_SCE_PROHIBIT_FUNCTION = 0x10015, ///< An invalid function call occurred. + + FSP_ERR_CRYPTO_SCE_LBIST_CHECK_BUSY = 0x100ff, ///< LBIST Check BUSY + + /* Start of Crypto RSIP specific (0x10100) */ + FSP_ERR_CRYPTO_RSIP_RESOURCE_CONFLICT = 0x10100, ///< Hardware resource is busy + FSP_ERR_CRYPTO_RSIP_FATAL = 0x10101, ///< Hardware fatal error or unexpected return + FSP_ERR_CRYPTO_RSIP_FAIL = 0x10102, ///< Internal error + FSP_ERR_CRYPTO_RSIP_KEY_SET_FAIL = 0x10103, ///< Input key type is illegal + FSP_ERR_CRYPTO_RSIP_AUTHENTICATION = 0x10104, ///< Authentication failed + + FSP_ERR_CRYPTO_RSIP_LBIST_CHECK_BUSY = 0x101ff, ///< LBIST Check BUSY + + /* Start of SF_CRYPTO specific */ + FSP_ERR_CRYPTO_COMMON_NOT_OPENED = 0x20000, ///< Crypto Framework Common is not opened + FSP_ERR_CRYPTO_HAL_ERROR = 0x20001, ///< Cryoto HAL module returned an error + FSP_ERR_CRYPTO_KEY_BUF_NOT_ENOUGH = 0x20002, ///< Key buffer size is not enough to generate a key + FSP_ERR_CRYPTO_BUF_OVERFLOW = 0x20003, ///< Attempt to write data larger than what the buffer can hold + FSP_ERR_CRYPTO_INVALID_OPERATION_MODE = 0x20004, ///< Invalid operation mode. + FSP_ERR_MESSAGE_TOO_LONG = 0x20005, ///< Message for RSA encryption is too long. + FSP_ERR_RSA_DECRYPTION_ERROR = 0x20006, ///< RSA Decryption error. + + /** @note SF_CRYPTO APIs may return an error code starting from 0x10000 which is of Crypto module. + * Refer to sf_cryoto_err.h for Crypto error codes. + */ + + /* Start of Sensor specific */ + FSP_ERR_SENSOR_INVALID_DATA = 0x30000, ///< Data is invalid. + FSP_ERR_SENSOR_IN_STABILIZATION = 0x30001, ///< Sensor is stabilizing. + FSP_ERR_SENSOR_MEASUREMENT_NOT_FINISHED = 0x30002, ///< Measurement is not finished. + + /* Start of COMMS specific */ + FSP_ERR_COMMS_BUS_NOT_OPEN = 0x40000, ///< Bus is not open. +} fsp_err_t; + +/** @} */ + +/*********************************************************************************************************************** + * Function prototypes + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_ioport_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_ioport_api.h new file mode 100644 index 00000000000..dcb104b06df --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_ioport_api.h @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_SYSTEM_INTERFACES + * @defgroup IOPORT_API I/O Port Interface + * @brief Interface for accessing I/O ports and configuring I/O functionality. + * + * @section IOPORT_API_SUMMARY Summary + * The IOPort shared interface provides the ability to access the IOPorts of a device at both bit and port level. + * Port and pin direction can be changed. + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_IOPORT_API_H +#define R_IOPORT_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Common error codes and definitions. */ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +#ifndef BSP_OVERRIDE_IOPORT_SIZE_T + +/** IO port type used with ports */ +typedef uint16_t ioport_size_t; ///< IO port size +#endif + +/** Pin identifier and pin configuration value */ +typedef struct st_ioport_pin_cfg +{ + uint32_t pin_cfg; ///< Pin configuration - Use ioport_cfg_options_t parameters to configure + bsp_io_port_pin_t pin; ///< Pin identifier +} ioport_pin_cfg_t; + +/** Multiple pin configuration data for loading into registers by R_IOPORT_Open() */ +typedef struct st_ioport_cfg +{ + uint16_t number_of_pins; ///< Number of pins for which there is configuration data + ioport_pin_cfg_t const * p_pin_cfg_data; ///< Pin configuration data + const void * p_extend; ///< Pointer to hardware extend configuration +} ioport_cfg_t; + +/** IOPORT control block. Allocate an instance specific control block to pass into the IOPORT API calls. + */ +typedef void ioport_ctrl_t; + +/** IOPort driver structure. IOPort functions implemented at the HAL layer will follow this API. */ +typedef struct st_ioport_api +{ + /** Initialize internal driver data and initial pin configurations. Called during startup. Do + * not call this API during runtime. Use @ref ioport_api_t::pinsCfg for runtime reconfiguration of + * multiple pins. + * + * @param[in] p_ctrl Pointer to control structure. Must be declared by user. Elements set here. + * @param[in] p_cfg Pointer to pin configuration data array. + */ + fsp_err_t (* open)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); + + /** Close the API. + * + * @param[in] p_ctrl Pointer to control structure. + **/ + fsp_err_t (* close)(ioport_ctrl_t * const p_ctrl); + + /** Configure multiple pins. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] p_cfg Pointer to pin configuration data array. + */ + fsp_err_t (* pinsCfg)(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); + + /** Configure settings for an individual pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] cfg Configuration options for the pin. + */ + fsp_err_t (* pinCfg)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); + + /** Read the event input data of the specified pin and return the level. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] p_pin_event Pointer to return the event data. + */ + fsp_err_t (* pinEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); + + /** Write pin event data. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin event data is to be written to. + * @param[in] pin_value Level to be written to pin output event. + */ + fsp_err_t (* pinEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); + + /** Read level of a pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be read. + * @param[in] p_pin_value Pointer to return the pin level. + */ + fsp_err_t (* pinRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); + + /** Write specified level to a pin. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] pin Pin to be written to. + * @param[in] level State to be written to the pin. + */ + fsp_err_t (* pinWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); + + /** Set the direction of one or more pins on a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port being configured. + * @param[in] direction_values Value controlling direction of pins on port. + * @param[in] mask Mask controlling which pins on the port are to be configured. + */ + fsp_err_t (* portDirectionSet)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t direction_values, + ioport_size_t mask); + + /** Read captured event data for a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be read. + * @param[in] p_event_data Pointer to return the event data. + */ + fsp_err_t (* portEventInputRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data); + + /** Write event output data for a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port event data will be written to. + * @param[in] event_data Data to be written as event data to specified port. + * @param[in] mask_value Each bit set to 1 in the mask corresponds to that bit's value in event data. + * being written to port. + */ + fsp_err_t (* portEventOutputWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t event_data, + ioport_size_t mask_value); + + /** Read states of pins on the specified port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be read. + * @param[in] p_port_value Pointer to return the port value. + */ + fsp_err_t (* portRead)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); + + /** Write to multiple pins on a port. + * + * @param[in] p_ctrl Pointer to control structure. + * @param[in] port Port to be written to. + * @param[in] value Value to be written to the port. + * @param[in] mask Mask controlling which pins on the port are written to. + */ + fsp_err_t (* portWrite)(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); +} ioport_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_ioport_instance +{ + ioport_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + ioport_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + ioport_api_t const * p_api; ///< Pointer to the API structure for this instance +} ioport_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/*******************************************************************************************************************//** + * @} (end defgroup IOPORT_API) + **********************************************************************************************************************/ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_transfer_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_transfer_api.h new file mode 100644 index 00000000000..92aeeabc2af --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_transfer_api.h @@ -0,0 +1,389 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_TRANSFER_INTERFACES + * @defgroup TRANSFER_API Transfer Interface + * + * @brief Interface for data transfer functions. + * + * @section TRANSFER_API_SUMMARY Summary + * The transfer interface supports background data transfer (no CPU intervention). + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_TRANSFER_API_H +#define R_TRANSFER_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Common error codes and definitions. */ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#define TRANSFER_SETTINGS_MODE_BITS (30U) +#define TRANSFER_SETTINGS_SIZE_BITS (28U) +#define TRANSFER_SETTINGS_SRC_ADDR_BITS (26U) +#define TRANSFER_SETTINGS_CHAIN_MODE_BITS (22U) +#define TRANSFER_SETTINGS_IRQ_BITS (21U) +#define TRANSFER_SETTINGS_REPEAT_AREA_BITS (20U) +#define TRANSFER_SETTINGS_DEST_ADDR_BITS (18U) + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Transfer control block. Allocate an instance specific control block to pass into the transfer API calls. + */ +typedef void transfer_ctrl_t; + +#ifndef BSP_OVERRIDE_TRANSFER_MODE_T + +/** Transfer mode describes what will happen when a transfer request occurs. */ +typedef enum e_transfer_mode +{ + /** In normal mode, each transfer request causes a transfer of @ref transfer_size_t from the source pointer to + * the destination pointer. The transfer length is decremented and the source and address pointers are + * updated according to @ref transfer_addr_mode_t. After the transfer length reaches 0, transfer requests + * will not cause any further transfers. */ + TRANSFER_MODE_NORMAL = 0, + + /** Repeat mode is like normal mode, except that when the transfer length reaches 0, the pointer to the + * repeat area and the transfer length will be reset to their initial values. If DMAC is used, the + * transfer repeats only transfer_info_t::num_blocks times. After the transfer repeats + * transfer_info_t::num_blocks times, transfer requests will not cause any further transfers. If DTC is + * used, the transfer repeats continuously (no limit to the number of repeat transfers). */ + TRANSFER_MODE_REPEAT = 1, + + /** In block mode, each transfer request causes transfer_info_t::length transfers of @ref transfer_size_t. + * After each individual transfer, the source and destination pointers are updated according to + * @ref transfer_addr_mode_t. After the block transfer is complete, transfer_info_t::num_blocks is + * decremented. After the transfer_info_t::num_blocks reaches 0, transfer requests will not cause any + * further transfers. */ + TRANSFER_MODE_BLOCK = 2, + + /** In addition to block mode features, repeat-block mode supports a ring buffer of blocks and offsets + * within a block (to split blocks into arrays of their first data, second data, etc.) */ + TRANSFER_MODE_REPEAT_BLOCK = 3 +} transfer_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_SIZE_T + +/** Transfer size specifies the size of each individual transfer. + * Total transfer length = transfer_size_t * transfer_length_t + */ +typedef enum e_transfer_size +{ + TRANSFER_SIZE_1_BYTE = 0, ///< Each transfer transfers a 8-bit value + TRANSFER_SIZE_2_BYTE = 1, ///< Each transfer transfers a 16-bit value + TRANSFER_SIZE_4_BYTE = 2, ///< Each transfer transfers a 32-bit value + TRANSFER_SIZE_8_BYTE = 3 ///< Each transfer transfers a 64-bit value +} transfer_size_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_ADDR_MODE_T + +/** Address mode specifies whether to modify (increment or decrement) pointer after each transfer. */ +typedef enum e_transfer_addr_mode +{ + /** Address pointer remains fixed after each transfer. */ + TRANSFER_ADDR_MODE_FIXED = 0, + + /** Offset is added to the address pointer after each transfer. */ + TRANSFER_ADDR_MODE_OFFSET = 1, + + /** Address pointer is incremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_INCREMENTED = 2, + + /** Address pointer is decremented by associated @ref transfer_size_t after each transfer. */ + TRANSFER_ADDR_MODE_DECREMENTED = 3 +} transfer_addr_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_REPEAT_AREA_T + +/** Repeat area options (source or destination). In @ref TRANSFER_MODE_REPEAT, the selected pointer returns to its + * original value after transfer_info_t::length transfers. In @ref TRANSFER_MODE_BLOCK and @ref TRANSFER_MODE_REPEAT_BLOCK, + * the selected pointer returns to its original value after each transfer. */ +typedef enum e_transfer_repeat_area +{ + /** Destination area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_DESTINATION = 0, + + /** Source area repeated in @ref TRANSFER_MODE_REPEAT or @ref TRANSFER_MODE_BLOCK or @ref TRANSFER_MODE_REPEAT_BLOCK. */ + TRANSFER_REPEAT_AREA_SOURCE = 1 +} transfer_repeat_area_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CHAIN_MODE_T + +/** Chain transfer mode options. + * @note Only applies for DTC. */ +typedef enum e_transfer_chain_mode +{ + /** Chain mode not used. */ + TRANSFER_CHAIN_MODE_DISABLED = 0, + + /** Switch to next transfer after a single transfer from this @ref transfer_info_t. */ + TRANSFER_CHAIN_MODE_EACH = 2, + + /** Complete the entire transfer defined in this @ref transfer_info_t before chaining to next transfer. */ + TRANSFER_CHAIN_MODE_END = 3 +} transfer_chain_mode_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_IRQ_T + +/** Interrupt options. */ +typedef enum e_transfer_irq +{ + /** Interrupt occurs only after last transfer. If this transfer is chained to a subsequent transfer, + * the interrupt will occur only after subsequent chained transfer(s) are complete. + * @warning DTC triggers the interrupt of the activation source. Choosing TRANSFER_IRQ_END with DTC will + * prevent activation source interrupts until the transfer is complete. */ + TRANSFER_IRQ_END = 0, + + /** Interrupt occurs after each transfer. + * @note Not available in all HAL drivers. See HAL driver for details. */ + TRANSFER_IRQ_EACH = 1 +} transfer_irq_t; + +#endif + +#ifndef BSP_OVERRIDE_TRANSFER_CALLBACK_ARGS_T + +/** Callback function parameter data. */ +typedef struct st_transfer_callback_args_t +{ + void * p_context; ///< Placeholder for user data. Set in @ref transfer_api_t::open function in ::transfer_cfg_t. +} transfer_callback_args_t; + +#endif + +/** Driver specific information. */ +typedef struct st_transfer_properties +{ + uint32_t block_count_max; ///< Maximum number of blocks + uint32_t block_count_remaining; ///< Number of blocks remaining + uint32_t transfer_length_max; ///< Maximum number of transfers + uint32_t transfer_length_remaining; ///< Number of transfers remaining +} transfer_properties_t; + +#ifndef BSP_OVERRIDE_TRANSFER_INFO_T + +/** This structure specifies the properties of the transfer. + * @warning When using DTC, this structure corresponds to the descriptor block registers required by the DTC. + * The following components may be modified by the driver: p_src, p_dest, num_blocks, and length. + * @warning When using DTC, do NOT reuse this structure to configure multiple transfers. Each transfer must + * have a unique transfer_info_t. + * @warning When using DTC, this structure must not be allocated in a temporary location. Any instance of this + * structure must remain in scope until the transfer it is used for is closed. + * @note When using DTC, consider placing instances of this structure in a protected section of memory. */ +typedef struct st_transfer_info +{ + union + { + struct + { + uint32_t : 16; + uint32_t : 2; + + /** Select what happens to destination pointer after each transfer. */ + transfer_addr_mode_t dest_addr_mode : 2; + + /** Select to repeat source or destination area, unused in @ref TRANSFER_MODE_NORMAL. */ + transfer_repeat_area_t repeat_area : 1; + + /** Select if interrupts should occur after each individual transfer or after the completion of all planned + * transfers. */ + transfer_irq_t irq : 1; + + /** Select when the chain transfer ends. */ + transfer_chain_mode_t chain_mode : 2; + + uint32_t : 2; + + /** Select what happens to source pointer after each transfer. */ + transfer_addr_mode_t src_addr_mode : 2; + + /** Select number of bytes to transfer at once. @see transfer_info_t::length. */ + transfer_size_t size : 2; + + /** Select mode from @ref transfer_mode_t. */ + transfer_mode_t mode : 2; + } transfer_settings_word_b; + + uint32_t transfer_settings_word; + }; + + void const * volatile p_src; ///< Source pointer + void * volatile p_dest; ///< Destination pointer + + /** Number of blocks to transfer when using @ref TRANSFER_MODE_BLOCK (both DTC an DMAC) or + * @ref TRANSFER_MODE_REPEAT (DMAC only) or + * @ref TRANSFER_MODE_REPEAT_BLOCK (DMAC only), unused in other modes. */ + volatile uint16_t num_blocks; + + /** Length of each transfer. Range limited for @ref TRANSFER_MODE_BLOCK, @ref TRANSFER_MODE_REPEAT, + * and @ref TRANSFER_MODE_REPEAT_BLOCK + * see HAL driver for details. */ + volatile uint16_t length; +} transfer_info_t; + +#endif + +/** Driver configuration set in @ref transfer_api_t::open. All elements except p_extend are required and must be + * initialized. */ +typedef struct st_transfer_cfg +{ + /** Pointer to transfer configuration options. If using chain transfer (DTC only), this can be a pointer to + * an array of chained transfers that will be completed in order. */ + transfer_info_t * p_info; + + void const * p_extend; ///< Extension parameter for hardware specific settings. +} transfer_cfg_t; + +/** Select whether to start single or repeated transfer with software start. */ +typedef enum e_transfer_start_mode +{ + TRANSFER_START_MODE_SINGLE = 0, ///< Software start triggers single transfer. + TRANSFER_START_MODE_REPEAT = 1 ///< Software start transfer continues until transfer is complete. +} transfer_start_mode_t; + +/** Transfer functions implemented at the HAL layer will follow this API. */ +typedef struct st_transfer_api +{ + /** Initial configuration. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_cfg Pointer to configuration structure. All elements of this structure + * must be set by user. + */ + fsp_err_t (* open)(transfer_ctrl_t * const p_ctrl, transfer_cfg_t const * const p_cfg); + + /** Reconfigure the transfer. + * Enable the transfer if p_info is valid. + * + * @param[in,out] p_ctrl Pointer to control block. Must be declared by user. Elements set here. + * @param[in] p_info Pointer to a new transfer info structure. + */ + fsp_err_t (* reconfigure)(transfer_ctrl_t * const p_ctrl, transfer_info_t * p_info); + + /** Reset source address pointer, destination address pointer, and/or length, keeping all other settings the same. + * Enable the transfer if p_src, p_dest, and length are valid. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or number of blocks in block mode. In DMAC only, + * resets number of repeats (initially stored in transfer_info_t::num_blocks) in + * repeat mode. Not used in repeat mode for DTC. + */ + fsp_err_t (* reset)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint16_t const num_transfers); + + /** Enable transfer. Transfers occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as activation source). + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* enable)(transfer_ctrl_t * const p_ctrl); + + /** Disable transfer. Transfers do not occur after the activation source event (or when + * @ref transfer_api_t::softwareStart is called if no peripheral event is chosen as the DMAC activation source). + * @note If a transfer is in progress, it will be completed. Subsequent transfer requests do not cause a + * transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* disable)(transfer_ctrl_t * const p_ctrl); + + /** Start transfer in software. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * @note Not supported for DTC. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] mode Select mode from @ref transfer_start_mode_t. + */ + fsp_err_t (* softwareStart)(transfer_ctrl_t * const p_ctrl, transfer_start_mode_t mode); + + /** Stop transfer in software. The transfer will stop after completion of the current transfer. + * @note Not supported for DTC. + * @note Only applies for transfers started with TRANSFER_START_MODE_REPEAT. + * @warning Only works if no peripheral event is chosen as the DMAC activation source. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* softwareStop)(transfer_ctrl_t * const p_ctrl); + + /** Provides information about this transfer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[out] p_properties Driver specific information. + */ + fsp_err_t (* infoGet)(transfer_ctrl_t * const p_ctrl, transfer_properties_t * const p_properties); + + /** Releases hardware lock. This allows a transfer to be reconfigured using @ref transfer_api_t::open. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + */ + fsp_err_t (* close)(transfer_ctrl_t * const p_ctrl); + + /** To update next transfer information without interruption during transfer. + * Allow further transfer continuation. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_src Pointer to source. Set to NULL if source pointer should not change. + * @param[in] p_dest Pointer to destination. Set to NULL if destination pointer should not change. + * @param[in] num_transfers Transfer length in normal mode or block mode. + */ + fsp_err_t (* reload)(transfer_ctrl_t * const p_ctrl, void const * p_src, void * p_dest, + uint32_t const num_transfers); + + /** Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Control block set in @ref transfer_api_t::open call for this transfer. + * @param[in] p_callback Callback function to register + * @param[in] p_context Pointer to send to callback function + * @param[in] p_callback_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(transfer_ctrl_t * const p_ctrl, void (* p_callback)(transfer_callback_args_t *), + void * const p_context, transfer_callback_args_t * const p_callback_memory); +} transfer_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_transfer_instance +{ + transfer_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + transfer_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + transfer_api_t const * p_api; ///< Pointer to the API structure for this instance +} transfer_instance_t; + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +/*******************************************************************************************************************//** + * @} (end defgroup TRANSFER_API) + **********************************************************************************************************************/ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_uart_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_uart_api.h new file mode 100644 index 00000000000..db1a63a8478 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/api/r_uart_api.h @@ -0,0 +1,267 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup RENESAS_CONNECTIVITY_INTERFACES + * @defgroup UART_API UART Interface + * @brief Interface for UART communications. + * + * @section UART_INTERFACE_SUMMARY Summary + * The UART interface provides common APIs for UART HAL drivers. The UART interface supports the following features: + * - Full-duplex UART communication + * - Interrupt driven transmit/receive processing + * - Callback function with returned event code + * - Runtime baud-rate change + * - Hardware resource locking during a transaction + * - CTS/RTS hardware flow control support (with an associated IOPORT pin) + * + * + * @{ + **********************************************************************************************************************/ + +#ifndef R_UART_API_H +#define R_UART_API_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ +#include "bsp_api.h" +#include "r_transfer_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** UART Event codes */ +#ifndef BSP_OVERRIDE_UART_EVENT_T +typedef enum e_sf_event +{ + UART_EVENT_RX_COMPLETE = (1UL << 0), ///< Receive complete event + UART_EVENT_TX_COMPLETE = (1UL << 1), ///< Transmit complete event + UART_EVENT_RX_CHAR = (1UL << 2), ///< Character received + UART_EVENT_ERR_PARITY = (1UL << 3), ///< Parity error event + UART_EVENT_ERR_FRAMING = (1UL << 4), ///< Mode fault error event + UART_EVENT_ERR_OVERFLOW = (1UL << 5), ///< FIFO Overflow error event + UART_EVENT_BREAK_DETECT = (1UL << 6), ///< Break detect error event + UART_EVENT_TX_DATA_EMPTY = (1UL << 7), ///< Last byte is transmitting, ready for more data +} uart_event_t; +#endif +#ifndef BSP_OVERRIDE_UART_DATA_BITS_T + +/** UART Data bit length definition */ +typedef enum e_uart_data_bits +{ + UART_DATA_BITS_9 = 0U, ///< Data bits 9-bit + UART_DATA_BITS_8 = 2U, ///< Data bits 8-bit + UART_DATA_BITS_7 = 3U, ///< Data bits 7-bit +} uart_data_bits_t; +#endif +#ifndef BSP_OVERRIDE_UART_PARITY_T + +/** UART Parity definition */ +typedef enum e_uart_parity +{ + UART_PARITY_OFF = 0U, ///< No parity + UART_PARITY_ZERO = 1U, ///< Zero parity + UART_PARITY_EVEN = 2U, ///< Even parity + UART_PARITY_ODD = 3U, ///< Odd parity +} uart_parity_t; +#endif + +/** UART Stop bits definition */ +typedef enum e_uart_stop_bits +{ + UART_STOP_BITS_1 = 0U, ///< Stop bit 1-bit + UART_STOP_BITS_2 = 1U, ///< Stop bits 2-bit +} uart_stop_bits_t; + +/** UART transaction definition */ +typedef enum e_uart_dir +{ + UART_DIR_RX_TX = 3U, ///< Both RX and TX + UART_DIR_RX = 1U, ///< Only RX + UART_DIR_TX = 2U, ///< Only TX +} uart_dir_t; + +/** UART driver specific information */ +typedef struct st_uart_info +{ + /** Maximum bytes that can be written at this time. Only applies if uart_cfg_t::p_transfer_tx is not NULL. */ + uint32_t write_bytes_max; + + /** Maximum bytes that are available to read at one time. Only applies if uart_cfg_t::p_transfer_rx is not NULL. */ + uint32_t read_bytes_max; +} uart_info_t; + +/** UART Callback parameter definition */ +typedef struct st_uart_callback_arg +{ + uint32_t channel; ///< Device channel number + uart_event_t event; ///< Event code + + /** Contains the next character received for the events UART_EVENT_RX_CHAR, UART_EVENT_ERR_PARITY, + * UART_EVENT_ERR_FRAMING, or UART_EVENT_ERR_OVERFLOW. Otherwise unused. */ + uint32_t data; + void * p_context; ///< Context provided to user during callback +} uart_callback_args_t; + +/** UART Configuration */ +typedef struct st_uart_cfg +{ + /* UART generic configuration */ + uint8_t channel; ///< Select a channel corresponding to the channel number of the hardware. + uart_data_bits_t data_bits; ///< Data bit length (8 or 7 or 9) + uart_parity_t parity; ///< Parity type (none or odd or even) + uart_stop_bits_t stop_bits; ///< Stop bit length (1 or 2) + uint8_t rxi_ipl; ///< Receive interrupt priority + IRQn_Type rxi_irq; ///< Receive interrupt IRQ number + uint8_t txi_ipl; ///< Transmit interrupt priority + IRQn_Type txi_irq; ///< Transmit interrupt IRQ number + uint8_t tei_ipl; ///< Transmit end interrupt priority + IRQn_Type tei_irq; ///< Transmit end interrupt IRQ number + uint8_t eri_ipl; ///< Error interrupt priority + IRQn_Type eri_irq; ///< Error interrupt IRQ number + + /** Optional transfer instance used to receive multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the read API is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_rx; + + /** Optional transfer instance used to send multiple bytes without interrupts. Set to NULL if unused. + * If NULL, the number of bytes allowed in the write APIs is limited to one byte at a time. */ + transfer_instance_t const * p_transfer_tx; + + /* Configuration for UART Event processing */ + void (* p_callback)(uart_callback_args_t * p_args); ///< Pointer to callback function + void * p_context; ///< User defined context passed into callback function + + /* Pointer to UART peripheral specific configuration */ + void const * p_extend; ///< UART hardware dependent configuration +} uart_cfg_t; + +/** UART control block. Allocate an instance specific control block to pass into the UART API calls. + */ +typedef void uart_ctrl_t; + +/** Shared Interface definition for UART */ +typedef struct st_uart_api +{ + /** Open UART device. + * + * @param[in,out] p_ctrl Pointer to the UART control block. Must be declared by user. Value set here. + * @param[in] uart_cfg_t Pointer to UART configuration structure. All elements of this structure must be set by + * user. + */ + fsp_err_t (* open)(uart_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + + /** Read from UART device. The read buffer is used until the read is complete. When a transfer is complete, the + * callback is called with event UART_EVENT_RX_COMPLETE. Bytes received outside an active transfer are received in + * the callback function with event UART_EVENT_RX_CHAR. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block for the channel. + * @param[in] p_dest Destination address to read data from. + * @param[in] bytes Read data length. + */ + fsp_err_t (* read)(uart_ctrl_t * const p_ctrl, uint8_t * const p_dest, uint32_t const bytes); + + /** Write to UART device. The write buffer is used until write is complete. Do not overwrite write buffer + * contents until the write is finished. When the write is complete (all bytes are fully transmitted on the wire), + * the callback called with event UART_EVENT_TX_COMPLETE. + * The maximum transfer size is reported by infoGet(). + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_src Source address to write data to. + * @param[in] bytes Write data length. + */ + fsp_err_t (* write)(uart_ctrl_t * const p_ctrl, uint8_t const * const p_src, uint32_t const bytes); + + /** Change baud rate. + * @warning Calling this API aborts any in-progress transmission and disables reception until the new baud + * settings have been applied. + * + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_baudrate_info Pointer to module specific information for configuring baud rate. + */ + fsp_err_t (* baudSet)(uart_ctrl_t * const p_ctrl, void const * const p_baudrate_info); + + /** Get the driver specific information. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[out] p_info Pointer to UART information structure. + */ + fsp_err_t (* infoGet)(uart_ctrl_t * const p_ctrl, uart_info_t * const p_info); + + /** + * Abort ongoing transfer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] communication_to_abort Type of abort request. + */ + fsp_err_t (* communicationAbort)(uart_ctrl_t * const p_ctrl, uart_dir_t communication_to_abort); + + /** + * Specify callback function and optional context pointer and working memory pointer. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in] p_callback Callback function + * @param[in] p_context Pointer to send to callback function + * @param[in] p_working_memory Pointer to volatile memory where callback structure can be allocated. + * Callback arguments allocated here are only valid during the callback. + */ + fsp_err_t (* callbackSet)(uart_ctrl_t * const p_ctrl, void (* p_callback)(uart_callback_args_t *), + void * const p_context, uart_callback_args_t * const p_callback_memory); + + /** Close UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* close)(uart_ctrl_t * const p_ctrl); + + /** Stop ongoing read and return the number of bytes remaining in the read. + * + * @param[in] p_ctrl Pointer to the UART control block. + * @param[in,out] remaining_bytes Pointer to location to store remaining bytes for read. + */ + fsp_err_t (* readStop)(uart_ctrl_t * const p_ctrl, uint32_t * remaining_bytes); + + /** Suspend RX operations for UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* receiveSuspend)(uart_ctrl_t * const p_ctrl); + + + /** Resume RX operations for UART device. + * + * @param[in] p_ctrl Pointer to the UART control block. + */ + fsp_err_t (* receiveResume)(uart_ctrl_t * const p_ctrl); +} uart_api_t; + +/** This structure encompasses everything that is needed to use an instance of this interface. */ +typedef struct st_uart_instance +{ + uart_ctrl_t * p_ctrl; ///< Pointer to the control structure for this instance + uart_cfg_t const * p_cfg; ///< Pointer to the configuration structure for this instance + uart_api_t const * p_api; ///< Pointer to the API structure for this instance +} uart_instance_t; + +/** @} (end defgroup UART_API) */ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_features.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_features.h new file mode 100644 index 00000000000..dd54197d7d8 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_features.h @@ -0,0 +1,297 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef FSP_FEATURES_H +#define FSP_FEATURES_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* C99 includes. */ +#include +#include +#include +#include + +/* Different compiler support. */ +#include "fsp_common_api.h" +#include "../../fsp/src/bsp/mcu/all/bsp_compiler_support.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Available modules. */ +typedef enum e_fsp_ip +{ + FSP_IP_CFLASH = 0, ///< Code Flash + FSP_IP_DFLASH = 1, ///< Data Flash + FSP_IP_RAM = 2, ///< RAM + FSP_IP_LVD = 3, ///< Low Voltage Detection + FSP_IP_CGC = 3, ///< Clock Generation Circuit + FSP_IP_LPM = 3, ///< Low Power Modes + FSP_IP_FCU = 4, ///< Flash Control Unit + FSP_IP_ICU = 6, ///< Interrupt Control Unit + FSP_IP_DMAC = 7, ///< DMA Controller + FSP_IP_DTC = 8, ///< Data Transfer Controller + FSP_IP_IOPORT = 9, ///< I/O Ports + FSP_IP_PFS = 10, ///< Pin Function Select + FSP_IP_ELC = 11, ///< Event Link Controller + FSP_IP_MPU = 13, ///< Memory Protection Unit + FSP_IP_MSTP = 14, ///< Module Stop + FSP_IP_MMF = 15, ///< Memory Mirror Function + FSP_IP_KEY = 16, ///< Key Interrupt Function + FSP_IP_CAC = 17, ///< Clock Frequency Accuracy Measurement Circuit + FSP_IP_DOC = 18, ///< Data Operation Circuit + FSP_IP_CRC = 19, ///< Cyclic Redundancy Check Calculator + FSP_IP_SCI = 20, ///< Serial Communications Interface + FSP_IP_IIC = 21, ///< I2C Bus Interface + FSP_IP_SPI = 22, ///< Serial Peripheral Interface + FSP_IP_CTSU = 23, ///< Capacitive Touch Sensing Unit + FSP_IP_SCE = 24, ///< Secure Cryptographic Engine + FSP_IP_SLCDC = 25, ///< Segment LCD Controller + FSP_IP_AES = 26, ///< Advanced Encryption Standard + FSP_IP_TRNG = 27, ///< True Random Number Generator + FSP_IP_FCACHE = 30, ///< Flash Cache + FSP_IP_SRAM = 31, ///< SRAM + FSP_IP_ADC = 32, ///< A/D Converter + FSP_IP_DAC = 33, ///< 12-Bit D/A Converter + FSP_IP_TSN = 34, ///< Temperature Sensor + FSP_IP_DAAD = 35, ///< D/A A/D Synchronous Unit + FSP_IP_ACMPHS = 36, ///< High Speed Analog Comparator + FSP_IP_ACMPLP = 37, ///< Low Power Analog Comparator + FSP_IP_OPAMP = 38, ///< Operational Amplifier + FSP_IP_SDADC = 39, ///< Sigma Delta A/D Converter + FSP_IP_RTC = 40, ///< Real Time Clock + FSP_IP_WDT = 41, ///< Watch Dog Timer + FSP_IP_IWDT = 42, ///< Independent Watch Dog Timer + FSP_IP_GPT = 43, ///< General PWM Timer + FSP_IP_POEG = 44, ///< Port Output Enable for GPT + FSP_IP_OPS = 45, ///< Output Phase Switch + FSP_IP_AGT = 47, ///< Asynchronous General-Purpose Timer + FSP_IP_CAN = 48, ///< Controller Area Network + FSP_IP_IRDA = 49, ///< Infrared Data Association + FSP_IP_QSPI = 50, ///< Quad Serial Peripheral Interface + FSP_IP_USBFS = 51, ///< USB Full Speed + FSP_IP_SDHI = 52, ///< SD/MMC Host Interface + FSP_IP_SRC = 53, ///< Sampling Rate Converter + FSP_IP_SSI = 54, ///< Serial Sound Interface + FSP_IP_DALI = 55, ///< Digital Addressable Lighting Interface + FSP_IP_ETHER = 64, ///< Ethernet MAC Controller + FSP_IP_EDMAC = 64, ///< Ethernet DMA Controller + FSP_IP_EPTPC = 65, ///< Ethernet PTP Controller + FSP_IP_PDC = 66, ///< Parallel Data Capture Unit + FSP_IP_GLCDC = 67, ///< Graphics LCD Controller + FSP_IP_DRW = 68, ///< 2D Drawing Engine + FSP_IP_JPEG = 69, ///< JPEG + FSP_IP_DAC8 = 70, ///< 8-Bit D/A Converter + FSP_IP_USBHS = 71, ///< USB High Speed + FSP_IP_OSPI = 72, ///< Octa Serial Peripheral Interface + FSP_IP_CEC = 73, ///< HDMI CEC + FSP_IP_TFU = 74, ///< Trigonometric Function Unit + FSP_IP_IIRFA = 75, ///< IIR Filter Accelerator + FSP_IP_CANFD = 76, ///< CAN-FD + FSP_IP_ULPT = 77, ///< Ultra Low Power Timer ULPT + FSP_IP_SAU = 78, ///< Serial Array Unit + FSP_IP_IICA = 79, ///< Serial Interface IICA + FSP_IP_UARTA = 80, ///< Serial Interface UARTA + FSP_IP_TAU = 81, ///< Timer Array Unit + FSP_IP_TML = 82, ///< 32-bit Interval Timer + FSP_IP_MACL = 83, ///< 32-bit Multiply-Accumulator + FSP_IP_USBCC = 84, ///< USB Type-C Controller +} fsp_ip_t; + +/** Signals that can be mapped to an interrupt. */ +typedef enum e_fsp_signal +{ + FSP_SIGNAL_ADC_COMPARE_MATCH = 0, ///< ADC COMPARE MATCH + FSP_SIGNAL_ADC_COMPARE_MISMATCH, ///< ADC COMPARE MISMATCH + FSP_SIGNAL_ADC_SCAN_END, ///< ADC SCAN END + FSP_SIGNAL_ADC_SCAN_END_B, ///< ADC SCAN END B + FSP_SIGNAL_ADC_WINDOW_A, ///< ADC WINDOW A + FSP_SIGNAL_ADC_WINDOW_B, ///< ADC WINDOW B + FSP_SIGNAL_AES_RDREQ = 0, ///< AES RDREQ + FSP_SIGNAL_AES_WRREQ, ///< AES WRREQ + FSP_SIGNAL_AGT_COMPARE_A = 0, ///< AGT COMPARE A + FSP_SIGNAL_AGT_COMPARE_B, ///< AGT COMPARE B + FSP_SIGNAL_AGT_INT, ///< AGT INT + FSP_SIGNAL_CAC_FREQUENCY_ERROR = 0, ///< CAC FREQUENCY ERROR + FSP_SIGNAL_CAC_MEASUREMENT_END, ///< CAC MEASUREMENT END + FSP_SIGNAL_CAC_OVERFLOW, ///< CAC OVERFLOW + FSP_SIGNAL_CAN_ERROR = 0, ///< CAN ERROR + FSP_SIGNAL_CAN_FIFO_RX, ///< CAN FIFO RX + FSP_SIGNAL_CAN_FIFO_TX, ///< CAN FIFO TX + FSP_SIGNAL_CAN_MAILBOX_RX, ///< CAN MAILBOX RX + FSP_SIGNAL_CAN_MAILBOX_TX, ///< CAN MAILBOX TX + FSP_SIGNAL_CGC_MOSC_STOP = 0, ///< CGC MOSC STOP + FSP_SIGNAL_LPM_SNOOZE_REQUEST, ///< LPM SNOOZE REQUEST + FSP_SIGNAL_LVD_LVD1, ///< LVD LVD1 + FSP_SIGNAL_LVD_LVD2, ///< LVD LVD2 + FSP_SIGNAL_VBATT_LVD, ///< VBATT LVD + FSP_SIGNAL_LVD_VBATT = FSP_SIGNAL_VBATT_LVD, ///< LVD VBATT + FSP_SIGNAL_ACMPHS_INT = 0, ///< ACMPHS INT + FSP_SIGNAL_ACMPLP_INT = 0, ///< ACMPLP INT + FSP_SIGNAL_CTSU_END = 0, ///< CTSU END + FSP_SIGNAL_CTSU_READ, ///< CTSU READ + FSP_SIGNAL_CTSU_WRITE, ///< CTSU WRITE + FSP_SIGNAL_DALI_DEI = 0, ///< DALI DEI + FSP_SIGNAL_DALI_CLI, ///< DALI CLI + FSP_SIGNAL_DALI_SDI, ///< DALI SDI + FSP_SIGNAL_DALI_BPI, ///< DALI BPI + FSP_SIGNAL_DALI_FEI, ///< DALI FEI + FSP_SIGNAL_DALI_SDI_OR_BPI, ///< DALI SDI OR BPI + FSP_SIGNAL_DMAC_INT = 0, ///< DMAC INT + FSP_SIGNAL_DOC_INT = 0, ///< DOC INT + FSP_SIGNAL_DRW_INT = 0, ///< DRW INT + FSP_SIGNAL_DTC_COMPLETE = 0, ///< DTC COMPLETE + FSP_SIGNAL_DTC_END, ///< DTC END + FSP_SIGNAL_EDMAC_EINT = 0, ///< EDMAC EINT + FSP_SIGNAL_ELC_SOFTWARE_EVENT_0 = 0, ///< ELC SOFTWARE EVENT 0 + FSP_SIGNAL_ELC_SOFTWARE_EVENT_1, ///< ELC SOFTWARE EVENT 1 + FSP_SIGNAL_EPTPC_IPLS = 0, ///< EPTPC IPLS + FSP_SIGNAL_EPTPC_MINT, ///< EPTPC MINT + FSP_SIGNAL_EPTPC_PINT, ///< EPTPC PINT + FSP_SIGNAL_EPTPC_TIMER0_FALL, ///< EPTPC TIMER0 FALL + FSP_SIGNAL_EPTPC_TIMER0_RISE, ///< EPTPC TIMER0 RISE + FSP_SIGNAL_EPTPC_TIMER1_FALL, ///< EPTPC TIMER1 FALL + FSP_SIGNAL_EPTPC_TIMER1_RISE, ///< EPTPC TIMER1 RISE + FSP_SIGNAL_EPTPC_TIMER2_FALL, ///< EPTPC TIMER2 FALL + FSP_SIGNAL_EPTPC_TIMER2_RISE, ///< EPTPC TIMER2 RISE + FSP_SIGNAL_EPTPC_TIMER3_FALL, ///< EPTPC TIMER3 FALL + FSP_SIGNAL_EPTPC_TIMER3_RISE, ///< EPTPC TIMER3 RISE + FSP_SIGNAL_EPTPC_TIMER4_FALL, ///< EPTPC TIMER4 FALL + FSP_SIGNAL_EPTPC_TIMER4_RISE, ///< EPTPC TIMER4 RISE + FSP_SIGNAL_EPTPC_TIMER5_FALL, ///< EPTPC TIMER5 FALL + FSP_SIGNAL_EPTPC_TIMER5_RISE, ///< EPTPC TIMER5 RISE + FSP_SIGNAL_FCU_FIFERR = 0, ///< FCU FIFERR + FSP_SIGNAL_FCU_FRDYI, ///< FCU FRDYI + FSP_SIGNAL_GLCDC_LINE_DETECT = 0, ///< GLCDC LINE DETECT + FSP_SIGNAL_GLCDC_UNDERFLOW_1, ///< GLCDC UNDERFLOW 1 + FSP_SIGNAL_GLCDC_UNDERFLOW_2, ///< GLCDC UNDERFLOW 2 + FSP_SIGNAL_GPT_CAPTURE_COMPARE_A = 0, ///< GPT CAPTURE COMPARE A + FSP_SIGNAL_GPT_CAPTURE_COMPARE_B, ///< GPT CAPTURE COMPARE B + FSP_SIGNAL_GPT_COMPARE_C, ///< GPT COMPARE C + FSP_SIGNAL_GPT_COMPARE_D, ///< GPT COMPARE D + FSP_SIGNAL_GPT_COMPARE_E, ///< GPT COMPARE E + FSP_SIGNAL_GPT_COMPARE_F, ///< GPT COMPARE F + FSP_SIGNAL_GPT_COUNTER_OVERFLOW, ///< GPT COUNTER OVERFLOW + FSP_SIGNAL_GPT_COUNTER_UNDERFLOW, ///< GPT COUNTER UNDERFLOW + FSP_SIGNAL_GPT_AD_TRIG_A, ///< GPT AD TRIG A + FSP_SIGNAL_GPT_AD_TRIG_B, ///< GPT AD TRIG B + FSP_SIGNAL_OPS_UVW_EDGE, ///< OPS UVW EDGE + FSP_SIGNAL_ICU_IRQ0 = 0, ///< ICU IRQ0 + FSP_SIGNAL_ICU_IRQ1, ///< ICU IRQ1 + FSP_SIGNAL_ICU_IRQ2, ///< ICU IRQ2 + FSP_SIGNAL_ICU_IRQ3, ///< ICU IRQ3 + FSP_SIGNAL_ICU_IRQ4, ///< ICU IRQ4 + FSP_SIGNAL_ICU_IRQ5, ///< ICU IRQ5 + FSP_SIGNAL_ICU_IRQ6, ///< ICU IRQ6 + FSP_SIGNAL_ICU_IRQ7, ///< ICU IRQ7 + FSP_SIGNAL_ICU_IRQ8, ///< ICU IRQ8 + FSP_SIGNAL_ICU_IRQ9, ///< ICU IRQ9 + FSP_SIGNAL_ICU_IRQ10, ///< ICU IRQ10 + FSP_SIGNAL_ICU_IRQ11, ///< ICU IRQ11 + FSP_SIGNAL_ICU_IRQ12, ///< ICU IRQ12 + FSP_SIGNAL_ICU_IRQ13, ///< ICU IRQ13 + FSP_SIGNAL_ICU_IRQ14, ///< ICU IRQ14 + FSP_SIGNAL_ICU_IRQ15, ///< ICU IRQ15 + FSP_SIGNAL_ICU_SNOOZE_CANCEL, ///< ICU SNOOZE CANCEL + FSP_SIGNAL_IIC_ERI = 0, ///< IIC ERI + FSP_SIGNAL_IIC_RXI, ///< IIC RXI + FSP_SIGNAL_IIC_TEI, ///< IIC TEI + FSP_SIGNAL_IIC_TXI, ///< IIC TXI + FSP_SIGNAL_IIC_WUI, ///< IIC WUI + FSP_SIGNAL_IOPORT_EVENT_1 = 0, ///< IOPORT EVENT 1 + FSP_SIGNAL_IOPORT_EVENT_2, ///< IOPORT EVENT 2 + FSP_SIGNAL_IOPORT_EVENT_3, ///< IOPORT EVENT 3 + FSP_SIGNAL_IOPORT_EVENT_4, ///< IOPORT EVENT 4 + FSP_SIGNAL_IOPORT_EVENT_B = 0, ///< IOPORT EVENT B + FSP_SIGNAL_IOPORT_EVENT_C, ///< IOPORT EVENT C + FSP_SIGNAL_IOPORT_EVENT_D, ///< IOPORT EVENT D + FSP_SIGNAL_IOPORT_EVENT_E, ///< IOPORT EVENT E + FSP_SIGNAL_IWDT_UNDERFLOW = 0, ///< IWDT UNDERFLOW + FSP_SIGNAL_JPEG_JDTI = 0, ///< JPEG JDTI + FSP_SIGNAL_JPEG_JEDI, ///< JPEG JEDI + FSP_SIGNAL_KEY_INT = 0, ///< KEY INT + FSP_SIGNAL_PDC_FRAME_END = 0, ///< PDC FRAME END + FSP_SIGNAL_PDC_INT, ///< PDC INT + FSP_SIGNAL_PDC_RECEIVE_DATA_READY, ///< PDC RECEIVE DATA READY + FSP_SIGNAL_POEG_EVENT = 0, ///< POEG EVENT + FSP_SIGNAL_QSPI_INT = 0, ///< QSPI INT + FSP_SIGNAL_RTC_ALARM = 0, ///< RTC ALARM + FSP_SIGNAL_RTC_PERIOD, ///< RTC PERIOD + FSP_SIGNAL_RTC_CARRY, ///< RTC CARRY + FSP_SIGNAL_SCE_INTEGRATE_RDRDY = 0, ///< SCE INTEGRATE RDRDY + FSP_SIGNAL_SCE_INTEGRATE_WRRDY, ///< SCE INTEGRATE WRRDY + FSP_SIGNAL_SCE_LONG_PLG, ///< SCE LONG PLG + FSP_SIGNAL_SCE_PROC_BUSY, ///< SCE PROC BUSY + FSP_SIGNAL_SCE_RDRDY_0, ///< SCE RDRDY 0 + FSP_SIGNAL_SCE_RDRDY_1, ///< SCE RDRDY 1 + FSP_SIGNAL_SCE_ROMOK, ///< SCE ROMOK + FSP_SIGNAL_SCE_TEST_BUSY, ///< SCE TEST BUSY + FSP_SIGNAL_SCE_WRRDY_0, ///< SCE WRRDY 0 + FSP_SIGNAL_SCE_WRRDY_1, ///< SCE WRRDY 1 + FSP_SIGNAL_SCE_WRRDY_4, ///< SCE WRRDY 4 + FSP_SIGNAL_SCI_AM = 0, ///< SCI AM + FSP_SIGNAL_SCI_ERI, ///< SCI ERI + FSP_SIGNAL_SCI_RXI, ///< SCI RXI + FSP_SIGNAL_SCI_RXI_OR_ERI, ///< SCI RXI OR ERI + FSP_SIGNAL_SCI_TEI, ///< SCI TEI + FSP_SIGNAL_SCI_TXI, ///< SCI TXI + FSP_SIGNAL_SDADC_ADI = 0, ///< SDADC ADI + FSP_SIGNAL_SDADC_SCANEND, ///< SDADC SCANEND + FSP_SIGNAL_SDADC_CALIEND, ///< SDADC CALIEND + FSP_SIGNAL_SDHIMMC_ACCS = 0, ///< SDHIMMC ACCS + FSP_SIGNAL_SDHIMMC_CARD, ///< SDHIMMC CARD + FSP_SIGNAL_SDHIMMC_DMA_REQ, ///< SDHIMMC DMA REQ + FSP_SIGNAL_SDHIMMC_SDIO, ///< SDHIMMC SDIO + FSP_SIGNAL_SPI_ERI = 0, ///< SPI ERI + FSP_SIGNAL_SPI_IDLE, ///< SPI IDLE + FSP_SIGNAL_SPI_RXI, ///< SPI RXI + FSP_SIGNAL_SPI_TEI, ///< SPI TEI + FSP_SIGNAL_SPI_TXI, ///< SPI TXI + FSP_SIGNAL_SRC_CONVERSION_END = 0, ///< SRC CONVERSION END + FSP_SIGNAL_SRC_INPUT_FIFO_EMPTY, ///< SRC INPUT FIFO EMPTY + FSP_SIGNAL_SRC_OUTPUT_FIFO_FULL, ///< SRC OUTPUT FIFO FULL + FSP_SIGNAL_SRC_OUTPUT_FIFO_OVERFLOW, ///< SRC OUTPUT FIFO OVERFLOW + FSP_SIGNAL_SRC_OUTPUT_FIFO_UNDERFLOW, ///< SRC OUTPUT FIFO UNDERFLOW + FSP_SIGNAL_SSI_INT = 0, ///< SSI INT + FSP_SIGNAL_SSI_RXI, ///< SSI RXI + FSP_SIGNAL_SSI_TXI, ///< SSI TXI + FSP_SIGNAL_SSI_TXI_RXI, ///< SSI TXI RXI + FSP_SIGNAL_TRNG_RDREQ = 0, ///< TRNG RDREQ + FSP_SIGNAL_USB_FIFO_0 = 0, ///< USB FIFO 0 + FSP_SIGNAL_USB_FIFO_1, ///< USB FIFO 1 + FSP_SIGNAL_USB_INT, ///< USB INT + FSP_SIGNAL_USB_RESUME, ///< USB RESUME + FSP_SIGNAL_USB_USB_INT_RESUME, ///< USB USB INT RESUME + FSP_SIGNAL_WDT_UNDERFLOW = 0, ///< WDT UNDERFLOW + FSP_SIGNAL_ULPT_COMPARE_A = 0, ///< ULPT COMPARE A + FSP_SIGNAL_ULPT_COMPARE_B, ///< ULPT COMPARE B + FSP_SIGNAL_ULPT_INT, ///< ULPT INT +} fsp_signal_t; + +typedef void (* fsp_vector_t)(void); + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_version.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_version.h new file mode 100644 index 00000000000..f1b51809bbf --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/fsp_version.h @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef FSP_VERSION_H + #define FSP_VERSION_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ + +/* Includes board and MCU related header files. */ + #include "bsp_api.h" + +/*******************************************************************************************************************//** + * @addtogroup RENESAS_COMMON + * @{ + **********************************************************************************************************************/ + + #ifdef __cplusplus +extern "C" { + #endif + +/********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** FSP pack major version. */ + #define FSP_VERSION_MAJOR (6U) + +/** FSP pack minor version. */ + #define FSP_VERSION_MINOR (0U) + +/** FSP pack patch version. */ + #define FSP_VERSION_PATCH (0U) + +/** FSP pack version build number (currently unused). */ + #define FSP_VERSION_BUILD (0U) + +/** Public FSP version name. */ + #define FSP_VERSION_STRING ("6.0.0") + +/** Unique FSP version ID. */ + #define FSP_VERSION_BUILD_STRING ("Built with Renesas Advanced Flexible Software Package version 6.0.0") + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** FSP Pack version structure */ +typedef union st_fsp_pack_version +{ + /** Version id */ + uint32_t version_id; + + /** + * Code version parameters, little endian order. + */ + struct version_id_b_s + { + uint8_t build; ///< Build version of FSP Pack + uint8_t patch; ///< Patch version of FSP Pack + uint8_t minor; ///< Minor version of FSP Pack + uint8_t major; ///< Major version of FSP Pack + } version_id_b; +} fsp_pack_version_t; + +/** @} */ + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_ioport.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_ioport.h new file mode 100644 index 00000000000..24d7482f6f3 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_ioport.h @@ -0,0 +1,525 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup IOPORT + * @{ + **********************************************************************************************************************/ + +#ifndef R_IOPORT_H +#define R_IOPORT_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +#include "r_ioport_api.h" +#if __has_include("r_ioport_cfg.h") + #include "r_ioport_cfg.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Private definition to set enumeration values. */ +#define IOPORT_PRV_PFS_PSEL_OFFSET (24) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** IOPORT private control block. DO NOT MODIFY. Initialization occurs when R_IOPORT_Open() is called. */ +typedef struct st_ioport_instance_ctrl +{ + uint32_t open; + void * p_context; +} ioport_instance_ctrl_t; + +/* This typedef is here temporarily. See SWFLEX-144 for details. */ +/** Superset list of all possible IO port pins. */ +typedef enum e_ioport_port_pin_t +{ + IOPORT_PORT_00_PIN_00 = 0x0000, ///< IO port 0 pin 0 + IOPORT_PORT_00_PIN_01 = 0x0001, ///< IO port 0 pin 1 + IOPORT_PORT_00_PIN_02 = 0x0002, ///< IO port 0 pin 2 + IOPORT_PORT_00_PIN_03 = 0x0003, ///< IO port 0 pin 3 + IOPORT_PORT_00_PIN_04 = 0x0004, ///< IO port 0 pin 4 + IOPORT_PORT_00_PIN_05 = 0x0005, ///< IO port 0 pin 5 + IOPORT_PORT_00_PIN_06 = 0x0006, ///< IO port 0 pin 6 + IOPORT_PORT_00_PIN_07 = 0x0007, ///< IO port 0 pin 7 + IOPORT_PORT_00_PIN_08 = 0x0008, ///< IO port 0 pin 8 + IOPORT_PORT_00_PIN_09 = 0x0009, ///< IO port 0 pin 9 + IOPORT_PORT_00_PIN_10 = 0x000A, ///< IO port 0 pin 10 + IOPORT_PORT_00_PIN_11 = 0x000B, ///< IO port 0 pin 11 + IOPORT_PORT_00_PIN_12 = 0x000C, ///< IO port 0 pin 12 + IOPORT_PORT_00_PIN_13 = 0x000D, ///< IO port 0 pin 13 + IOPORT_PORT_00_PIN_14 = 0x000E, ///< IO port 0 pin 14 + IOPORT_PORT_00_PIN_15 = 0x000F, ///< IO port 0 pin 15 + + IOPORT_PORT_01_PIN_00 = 0x0100, ///< IO port 1 pin 0 + IOPORT_PORT_01_PIN_01 = 0x0101, ///< IO port 1 pin 1 + IOPORT_PORT_01_PIN_02 = 0x0102, ///< IO port 1 pin 2 + IOPORT_PORT_01_PIN_03 = 0x0103, ///< IO port 1 pin 3 + IOPORT_PORT_01_PIN_04 = 0x0104, ///< IO port 1 pin 4 + IOPORT_PORT_01_PIN_05 = 0x0105, ///< IO port 1 pin 5 + IOPORT_PORT_01_PIN_06 = 0x0106, ///< IO port 1 pin 6 + IOPORT_PORT_01_PIN_07 = 0x0107, ///< IO port 1 pin 7 + IOPORT_PORT_01_PIN_08 = 0x0108, ///< IO port 1 pin 8 + IOPORT_PORT_01_PIN_09 = 0x0109, ///< IO port 1 pin 9 + IOPORT_PORT_01_PIN_10 = 0x010A, ///< IO port 1 pin 10 + IOPORT_PORT_01_PIN_11 = 0x010B, ///< IO port 1 pin 11 + IOPORT_PORT_01_PIN_12 = 0x010C, ///< IO port 1 pin 12 + IOPORT_PORT_01_PIN_13 = 0x010D, ///< IO port 1 pin 13 + IOPORT_PORT_01_PIN_14 = 0x010E, ///< IO port 1 pin 14 + IOPORT_PORT_01_PIN_15 = 0x010F, ///< IO port 1 pin 15 + + IOPORT_PORT_02_PIN_00 = 0x0200, ///< IO port 2 pin 0 + IOPORT_PORT_02_PIN_01 = 0x0201, ///< IO port 2 pin 1 + IOPORT_PORT_02_PIN_02 = 0x0202, ///< IO port 2 pin 2 + IOPORT_PORT_02_PIN_03 = 0x0203, ///< IO port 2 pin 3 + IOPORT_PORT_02_PIN_04 = 0x0204, ///< IO port 2 pin 4 + IOPORT_PORT_02_PIN_05 = 0x0205, ///< IO port 2 pin 5 + IOPORT_PORT_02_PIN_06 = 0x0206, ///< IO port 2 pin 6 + IOPORT_PORT_02_PIN_07 = 0x0207, ///< IO port 2 pin 7 + IOPORT_PORT_02_PIN_08 = 0x0208, ///< IO port 2 pin 8 + IOPORT_PORT_02_PIN_09 = 0x0209, ///< IO port 2 pin 9 + IOPORT_PORT_02_PIN_10 = 0x020A, ///< IO port 2 pin 10 + IOPORT_PORT_02_PIN_11 = 0x020B, ///< IO port 2 pin 11 + IOPORT_PORT_02_PIN_12 = 0x020C, ///< IO port 2 pin 12 + IOPORT_PORT_02_PIN_13 = 0x020D, ///< IO port 2 pin 13 + IOPORT_PORT_02_PIN_14 = 0x020E, ///< IO port 2 pin 14 + IOPORT_PORT_02_PIN_15 = 0x020F, ///< IO port 2 pin 15 + + IOPORT_PORT_03_PIN_00 = 0x0300, ///< IO port 3 pin 0 + IOPORT_PORT_03_PIN_01 = 0x0301, ///< IO port 3 pin 1 + IOPORT_PORT_03_PIN_02 = 0x0302, ///< IO port 3 pin 2 + IOPORT_PORT_03_PIN_03 = 0x0303, ///< IO port 3 pin 3 + IOPORT_PORT_03_PIN_04 = 0x0304, ///< IO port 3 pin 4 + IOPORT_PORT_03_PIN_05 = 0x0305, ///< IO port 3 pin 5 + IOPORT_PORT_03_PIN_06 = 0x0306, ///< IO port 3 pin 6 + IOPORT_PORT_03_PIN_07 = 0x0307, ///< IO port 3 pin 7 + IOPORT_PORT_03_PIN_08 = 0x0308, ///< IO port 3 pin 8 + IOPORT_PORT_03_PIN_09 = 0x0309, ///< IO port 3 pin 9 + IOPORT_PORT_03_PIN_10 = 0x030A, ///< IO port 3 pin 10 + IOPORT_PORT_03_PIN_11 = 0x030B, ///< IO port 3 pin 11 + IOPORT_PORT_03_PIN_12 = 0x030C, ///< IO port 3 pin 12 + IOPORT_PORT_03_PIN_13 = 0x030D, ///< IO port 3 pin 13 + IOPORT_PORT_03_PIN_14 = 0x030E, ///< IO port 3 pin 14 + IOPORT_PORT_03_PIN_15 = 0x030F, ///< IO port 3 pin 15 + + IOPORT_PORT_04_PIN_00 = 0x0400, ///< IO port 4 pin 0 + IOPORT_PORT_04_PIN_01 = 0x0401, ///< IO port 4 pin 1 + IOPORT_PORT_04_PIN_02 = 0x0402, ///< IO port 4 pin 2 + IOPORT_PORT_04_PIN_03 = 0x0403, ///< IO port 4 pin 3 + IOPORT_PORT_04_PIN_04 = 0x0404, ///< IO port 4 pin 4 + IOPORT_PORT_04_PIN_05 = 0x0405, ///< IO port 4 pin 5 + IOPORT_PORT_04_PIN_06 = 0x0406, ///< IO port 4 pin 6 + IOPORT_PORT_04_PIN_07 = 0x0407, ///< IO port 4 pin 7 + IOPORT_PORT_04_PIN_08 = 0x0408, ///< IO port 4 pin 8 + IOPORT_PORT_04_PIN_09 = 0x0409, ///< IO port 4 pin 9 + IOPORT_PORT_04_PIN_10 = 0x040A, ///< IO port 4 pin 10 + IOPORT_PORT_04_PIN_11 = 0x040B, ///< IO port 4 pin 11 + IOPORT_PORT_04_PIN_12 = 0x040C, ///< IO port 4 pin 12 + IOPORT_PORT_04_PIN_13 = 0x040D, ///< IO port 4 pin 13 + IOPORT_PORT_04_PIN_14 = 0x040E, ///< IO port 4 pin 14 + IOPORT_PORT_04_PIN_15 = 0x040F, ///< IO port 4 pin 15 + + IOPORT_PORT_05_PIN_00 = 0x0500, ///< IO port 5 pin 0 + IOPORT_PORT_05_PIN_01 = 0x0501, ///< IO port 5 pin 1 + IOPORT_PORT_05_PIN_02 = 0x0502, ///< IO port 5 pin 2 + IOPORT_PORT_05_PIN_03 = 0x0503, ///< IO port 5 pin 3 + IOPORT_PORT_05_PIN_04 = 0x0504, ///< IO port 5 pin 4 + IOPORT_PORT_05_PIN_05 = 0x0505, ///< IO port 5 pin 5 + IOPORT_PORT_05_PIN_06 = 0x0506, ///< IO port 5 pin 6 + IOPORT_PORT_05_PIN_07 = 0x0507, ///< IO port 5 pin 7 + IOPORT_PORT_05_PIN_08 = 0x0508, ///< IO port 5 pin 8 + IOPORT_PORT_05_PIN_09 = 0x0509, ///< IO port 5 pin 9 + IOPORT_PORT_05_PIN_10 = 0x050A, ///< IO port 5 pin 10 + IOPORT_PORT_05_PIN_11 = 0x050B, ///< IO port 5 pin 11 + IOPORT_PORT_05_PIN_12 = 0x050C, ///< IO port 5 pin 12 + IOPORT_PORT_05_PIN_13 = 0x050D, ///< IO port 5 pin 13 + IOPORT_PORT_05_PIN_14 = 0x050E, ///< IO port 5 pin 14 + IOPORT_PORT_05_PIN_15 = 0x050F, ///< IO port 5 pin 15 + + IOPORT_PORT_06_PIN_00 = 0x0600, ///< IO port 6 pin 0 + IOPORT_PORT_06_PIN_01 = 0x0601, ///< IO port 6 pin 1 + IOPORT_PORT_06_PIN_02 = 0x0602, ///< IO port 6 pin 2 + IOPORT_PORT_06_PIN_03 = 0x0603, ///< IO port 6 pin 3 + IOPORT_PORT_06_PIN_04 = 0x0604, ///< IO port 6 pin 4 + IOPORT_PORT_06_PIN_05 = 0x0605, ///< IO port 6 pin 5 + IOPORT_PORT_06_PIN_06 = 0x0606, ///< IO port 6 pin 6 + IOPORT_PORT_06_PIN_07 = 0x0607, ///< IO port 6 pin 7 + IOPORT_PORT_06_PIN_08 = 0x0608, ///< IO port 6 pin 8 + IOPORT_PORT_06_PIN_09 = 0x0609, ///< IO port 6 pin 9 + IOPORT_PORT_06_PIN_10 = 0x060A, ///< IO port 6 pin 10 + IOPORT_PORT_06_PIN_11 = 0x060B, ///< IO port 6 pin 11 + IOPORT_PORT_06_PIN_12 = 0x060C, ///< IO port 6 pin 12 + IOPORT_PORT_06_PIN_13 = 0x060D, ///< IO port 6 pin 13 + IOPORT_PORT_06_PIN_14 = 0x060E, ///< IO port 6 pin 14 + IOPORT_PORT_06_PIN_15 = 0x060F, ///< IO port 6 pin 15 + + IOPORT_PORT_07_PIN_00 = 0x0700, ///< IO port 7 pin 0 + IOPORT_PORT_07_PIN_01 = 0x0701, ///< IO port 7 pin 1 + IOPORT_PORT_07_PIN_02 = 0x0702, ///< IO port 7 pin 2 + IOPORT_PORT_07_PIN_03 = 0x0703, ///< IO port 7 pin 3 + IOPORT_PORT_07_PIN_04 = 0x0704, ///< IO port 7 pin 4 + IOPORT_PORT_07_PIN_05 = 0x0705, ///< IO port 7 pin 5 + IOPORT_PORT_07_PIN_06 = 0x0706, ///< IO port 7 pin 6 + IOPORT_PORT_07_PIN_07 = 0x0707, ///< IO port 7 pin 7 + IOPORT_PORT_07_PIN_08 = 0x0708, ///< IO port 7 pin 8 + IOPORT_PORT_07_PIN_09 = 0x0709, ///< IO port 7 pin 9 + IOPORT_PORT_07_PIN_10 = 0x070A, ///< IO port 7 pin 10 + IOPORT_PORT_07_PIN_11 = 0x070B, ///< IO port 7 pin 11 + IOPORT_PORT_07_PIN_12 = 0x070C, ///< IO port 7 pin 12 + IOPORT_PORT_07_PIN_13 = 0x070D, ///< IO port 7 pin 13 + IOPORT_PORT_07_PIN_14 = 0x070E, ///< IO port 7 pin 14 + IOPORT_PORT_07_PIN_15 = 0x070F, ///< IO port 7 pin 15 + + IOPORT_PORT_08_PIN_00 = 0x0800, ///< IO port 8 pin 0 + IOPORT_PORT_08_PIN_01 = 0x0801, ///< IO port 8 pin 1 + IOPORT_PORT_08_PIN_02 = 0x0802, ///< IO port 8 pin 2 + IOPORT_PORT_08_PIN_03 = 0x0803, ///< IO port 8 pin 3 + IOPORT_PORT_08_PIN_04 = 0x0804, ///< IO port 8 pin 4 + IOPORT_PORT_08_PIN_05 = 0x0805, ///< IO port 8 pin 5 + IOPORT_PORT_08_PIN_06 = 0x0806, ///< IO port 8 pin 6 + IOPORT_PORT_08_PIN_07 = 0x0807, ///< IO port 8 pin 7 + IOPORT_PORT_08_PIN_08 = 0x0808, ///< IO port 8 pin 8 + IOPORT_PORT_08_PIN_09 = 0x0809, ///< IO port 8 pin 9 + IOPORT_PORT_08_PIN_10 = 0x080A, ///< IO port 8 pin 10 + IOPORT_PORT_08_PIN_11 = 0x080B, ///< IO port 8 pin 11 + IOPORT_PORT_08_PIN_12 = 0x080C, ///< IO port 8 pin 12 + IOPORT_PORT_08_PIN_13 = 0x080D, ///< IO port 8 pin 13 + IOPORT_PORT_08_PIN_14 = 0x080E, ///< IO port 8 pin 14 + IOPORT_PORT_08_PIN_15 = 0x080F, ///< IO port 8 pin 15 + + IOPORT_PORT_09_PIN_00 = 0x0900, ///< IO port 9 pin 0 + IOPORT_PORT_09_PIN_01 = 0x0901, ///< IO port 9 pin 1 + IOPORT_PORT_09_PIN_02 = 0x0902, ///< IO port 9 pin 2 + IOPORT_PORT_09_PIN_03 = 0x0903, ///< IO port 9 pin 3 + IOPORT_PORT_09_PIN_04 = 0x0904, ///< IO port 9 pin 4 + IOPORT_PORT_09_PIN_05 = 0x0905, ///< IO port 9 pin 5 + IOPORT_PORT_09_PIN_06 = 0x0906, ///< IO port 9 pin 6 + IOPORT_PORT_09_PIN_07 = 0x0907, ///< IO port 9 pin 7 + IOPORT_PORT_09_PIN_08 = 0x0908, ///< IO port 9 pin 8 + IOPORT_PORT_09_PIN_09 = 0x0909, ///< IO port 9 pin 9 + IOPORT_PORT_09_PIN_10 = 0x090A, ///< IO port 9 pin 10 + IOPORT_PORT_09_PIN_11 = 0x090B, ///< IO port 9 pin 11 + IOPORT_PORT_09_PIN_12 = 0x090C, ///< IO port 9 pin 12 + IOPORT_PORT_09_PIN_13 = 0x090D, ///< IO port 9 pin 13 + IOPORT_PORT_09_PIN_14 = 0x090E, ///< IO port 9 pin 14 + IOPORT_PORT_09_PIN_15 = 0x090F, ///< IO port 9 pin 15 + + IOPORT_PORT_10_PIN_00 = 0x0A00, ///< IO port 10 pin 0 + IOPORT_PORT_10_PIN_01 = 0x0A01, ///< IO port 10 pin 1 + IOPORT_PORT_10_PIN_02 = 0x0A02, ///< IO port 10 pin 2 + IOPORT_PORT_10_PIN_03 = 0x0A03, ///< IO port 10 pin 3 + IOPORT_PORT_10_PIN_04 = 0x0A04, ///< IO port 10 pin 4 + IOPORT_PORT_10_PIN_05 = 0x0A05, ///< IO port 10 pin 5 + IOPORT_PORT_10_PIN_06 = 0x0A06, ///< IO port 10 pin 6 + IOPORT_PORT_10_PIN_07 = 0x0A07, ///< IO port 10 pin 7 + IOPORT_PORT_10_PIN_08 = 0x0A08, ///< IO port 10 pin 8 + IOPORT_PORT_10_PIN_09 = 0x0A09, ///< IO port 10 pin 9 + IOPORT_PORT_10_PIN_10 = 0x0A0A, ///< IO port 10 pin 10 + IOPORT_PORT_10_PIN_11 = 0x0A0B, ///< IO port 10 pin 11 + IOPORT_PORT_10_PIN_12 = 0x0A0C, ///< IO port 10 pin 12 + IOPORT_PORT_10_PIN_13 = 0x0A0D, ///< IO port 10 pin 13 + IOPORT_PORT_10_PIN_14 = 0x0A0E, ///< IO port 10 pin 14 + IOPORT_PORT_10_PIN_15 = 0x0A0F, ///< IO port 10 pin 15 + + IOPORT_PORT_11_PIN_00 = 0x0B00, ///< IO port 11 pin 0 + IOPORT_PORT_11_PIN_01 = 0x0B01, ///< IO port 11 pin 1 + IOPORT_PORT_11_PIN_02 = 0x0B02, ///< IO port 11 pin 2 + IOPORT_PORT_11_PIN_03 = 0x0B03, ///< IO port 11 pin 3 + IOPORT_PORT_11_PIN_04 = 0x0B04, ///< IO port 11 pin 4 + IOPORT_PORT_11_PIN_05 = 0x0B05, ///< IO port 11 pin 5 + IOPORT_PORT_11_PIN_06 = 0x0B06, ///< IO port 11 pin 6 + IOPORT_PORT_11_PIN_07 = 0x0B07, ///< IO port 11 pin 7 + IOPORT_PORT_11_PIN_08 = 0x0B08, ///< IO port 11 pin 8 + IOPORT_PORT_11_PIN_09 = 0x0B09, ///< IO port 11 pin 9 + IOPORT_PORT_11_PIN_10 = 0x0B0A, ///< IO port 11 pin 10 + IOPORT_PORT_11_PIN_11 = 0x0B0B, ///< IO port 11 pin 11 + IOPORT_PORT_11_PIN_12 = 0x0B0C, ///< IO port 11 pin 12 + IOPORT_PORT_11_PIN_13 = 0x0B0D, ///< IO port 11 pin 13 + IOPORT_PORT_11_PIN_14 = 0x0B0E, ///< IO port 11 pin 14 + IOPORT_PORT_11_PIN_15 = 0x0B0F, ///< IO port 11 pin 15 + + IOPORT_PORT_12_PIN_00 = 0x0C00, ///< IO port 12 pin 0 + IOPORT_PORT_12_PIN_01 = 0x0C01, ///< IO port 12 pin 1 + IOPORT_PORT_12_PIN_02 = 0x0C02, ///< IO port 12 pin 2 + IOPORT_PORT_12_PIN_03 = 0x0C03, ///< IO port 12 pin 3 + IOPORT_PORT_12_PIN_04 = 0x0C04, ///< IO port 12 pin 4 + IOPORT_PORT_12_PIN_05 = 0x0C05, ///< IO port 12 pin 5 + IOPORT_PORT_12_PIN_06 = 0x0C06, ///< IO port 12 pin 6 + IOPORT_PORT_12_PIN_07 = 0x0C07, ///< IO port 12 pin 7 + IOPORT_PORT_12_PIN_08 = 0x0C08, ///< IO port 12 pin 8 + IOPORT_PORT_12_PIN_09 = 0x0C09, ///< IO port 12 pin 9 + IOPORT_PORT_12_PIN_10 = 0x0C0A, ///< IO port 12 pin 10 + IOPORT_PORT_12_PIN_11 = 0x0C0B, ///< IO port 12 pin 11 + IOPORT_PORT_12_PIN_12 = 0x0C0C, ///< IO port 12 pin 12 + IOPORT_PORT_12_PIN_13 = 0x0C0D, ///< IO port 12 pin 13 + IOPORT_PORT_12_PIN_14 = 0x0C0E, ///< IO port 12 pin 14 + IOPORT_PORT_12_PIN_15 = 0x0C0F, ///< IO port 12 pin 15 + + IOPORT_PORT_13_PIN_00 = 0x0D00, ///< IO port 13 pin 0 + IOPORT_PORT_13_PIN_01 = 0x0D01, ///< IO port 13 pin 1 + IOPORT_PORT_13_PIN_02 = 0x0D02, ///< IO port 13 pin 2 + IOPORT_PORT_13_PIN_03 = 0x0D03, ///< IO port 13 pin 3 + IOPORT_PORT_13_PIN_04 = 0x0D04, ///< IO port 13 pin 4 + IOPORT_PORT_13_PIN_05 = 0x0D05, ///< IO port 13 pin 5 + IOPORT_PORT_13_PIN_06 = 0x0D06, ///< IO port 13 pin 6 + IOPORT_PORT_13_PIN_07 = 0x0D07, ///< IO port 13 pin 7 + IOPORT_PORT_13_PIN_08 = 0x0D08, ///< IO port 13 pin 8 + IOPORT_PORT_13_PIN_09 = 0x0D09, ///< IO port 13 pin 9 + IOPORT_PORT_13_PIN_10 = 0x0D0A, ///< IO port 13 pin 10 + IOPORT_PORT_13_PIN_11 = 0x0D0B, ///< IO port 13 pin 11 + IOPORT_PORT_13_PIN_12 = 0x0D0C, ///< IO port 13 pin 12 + IOPORT_PORT_13_PIN_13 = 0x0D0D, ///< IO port 13 pin 13 + IOPORT_PORT_13_PIN_14 = 0x0D0E, ///< IO port 13 pin 14 + IOPORT_PORT_13_PIN_15 = 0x0D0F, ///< IO port 13 pin 15 + + IOPORT_PORT_14_PIN_00 = 0x0E00, ///< IO port 14 pin 0 + IOPORT_PORT_14_PIN_01 = 0x0E01, ///< IO port 14 pin 1 + IOPORT_PORT_14_PIN_02 = 0x0E02, ///< IO port 14 pin 2 + IOPORT_PORT_14_PIN_03 = 0x0E03, ///< IO port 14 pin 3 + IOPORT_PORT_14_PIN_04 = 0x0E04, ///< IO port 14 pin 4 + IOPORT_PORT_14_PIN_05 = 0x0E05, ///< IO port 14 pin 5 + IOPORT_PORT_14_PIN_06 = 0x0E06, ///< IO port 14 pin 6 + IOPORT_PORT_14_PIN_07 = 0x0E07, ///< IO port 14 pin 7 + IOPORT_PORT_14_PIN_08 = 0x0E08, ///< IO port 14 pin 8 + IOPORT_PORT_14_PIN_09 = 0x0E09, ///< IO port 14 pin 9 + IOPORT_PORT_14_PIN_10 = 0x0E0A, ///< IO port 14 pin 10 + IOPORT_PORT_14_PIN_11 = 0x0E0B, ///< IO port 14 pin 11 + IOPORT_PORT_14_PIN_12 = 0x0E0C, ///< IO port 14 pin 12 + IOPORT_PORT_14_PIN_13 = 0x0E0D, ///< IO port 14 pin 13 + IOPORT_PORT_14_PIN_14 = 0x0E0E, ///< IO port 14 pin 14 + IOPORT_PORT_14_PIN_15 = 0x0E0F, ///< IO port 14 pin 15 +} ioport_port_pin_t; + +#ifndef BSP_OVERRIDE_IOPORT_PERIPHERAL_T + +/** Superset of all peripheral functions. */ +typedef enum e_ioport_peripheral +{ + /** Pin will functions as an IO pin */ + IOPORT_PERIPHERAL_IO = 0x00, + + /** Pin will function as a DEBUG pin */ + IOPORT_PERIPHERAL_DEBUG = (0x00UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an AGT peripheral pin */ + IOPORT_PERIPHERAL_AGT = (0x01UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an AGT peripheral pin */ + IOPORT_PERIPHERAL_AGTW = (0x01UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an AGT peripheral pin */ + IOPORT_PERIPHERAL_AGT1 = (0x18UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT0 = (0x02UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT1 = (0x03UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SCI peripheral pin */ + IOPORT_PERIPHERAL_SCI0_2_4_6_8 = (0x04UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SCI peripheral pin */ + IOPORT_PERIPHERAL_SCI1_3_5_7_9 = (0x05UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a SPI peripheral pin */ + IOPORT_PERIPHERAL_SPI = (0x06UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a IIC peripheral pin */ + IOPORT_PERIPHERAL_IIC = (0x07UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a KEY peripheral pin */ + IOPORT_PERIPHERAL_KEY = (0x08UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a clock/comparator/RTC peripheral pin */ + IOPORT_PERIPHERAL_CLKOUT_COMP_RTC = (0x09UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CAC/ADC peripheral pin */ + IOPORT_PERIPHERAL_CAC_AD = (0x0AUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a BUS peripheral pin */ + IOPORT_PERIPHERAL_BUS = (0x0BUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CTSU peripheral pin */ + IOPORT_PERIPHERAL_CTSU = (0x0CUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CMPHS peripheral pin */ + IOPORT_PERIPHERAL_ACMPHS = (0x0CUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a segment LCD peripheral pin */ + IOPORT_PERIPHERAL_LCDC = (0x0DUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + #if BSP_FEATURE_SCI_UART_DE_IS_INVERTED + + /** Pin will function as an SCI peripheral DEn pin */ + IOPORT_PERIPHERAL_DE_SCI1_3_5_7_9 = (0x0DUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SCI DEn peripheral pin */ + IOPORT_PERIPHERAL_DE_SCI0_2_4_6_8 = (0x0EUL << IOPORT_PRV_PFS_PSEL_OFFSET), + #else + + /** Pin will function as an SCI peripheral DEn pin */ + IOPORT_PERIPHERAL_DE_SCI0_2_4_6_8 = (0x0DUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SCI DEn peripheral pin */ + IOPORT_PERIPHERAL_DE_SCI1_3_5_7_9 = (0x0EUL << IOPORT_PRV_PFS_PSEL_OFFSET), + #endif + + /** Pin will function as a DALI peripheral pin */ + IOPORT_PERIPHERAL_DALI = (0x0EUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CEU peripheral pin */ + IOPORT_PERIPHERAL_CEU = (0x0FUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CAN peripheral pin */ + IOPORT_PERIPHERAL_CAN = (0x10UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a QSPI peripheral pin */ + IOPORT_PERIPHERAL_QSPI = (0x11UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SSI peripheral pin */ + IOPORT_PERIPHERAL_SSI = (0x12UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a USB full speed peripheral pin */ + IOPORT_PERIPHERAL_USB_FS = (0x13UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a USB high speed peripheral pin */ + IOPORT_PERIPHERAL_USB_HS = (0x14UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT2 = (0x14UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an SD/MMC peripheral pin */ + IOPORT_PERIPHERAL_SDHI_MMC = (0x15UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT3 = (0x15UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an Ethernet MMI peripheral pin */ + IOPORT_PERIPHERAL_ETHER_MII = (0x16UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT4 = (0x16UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a GPT peripheral pin */ + IOPORT_PERIPHERAL_GPT5 = (0x1BUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an Ethernet RMMI peripheral pin */ + IOPORT_PERIPHERAL_ETHER_RMII = (0x17UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a PDC peripheral pin */ + IOPORT_PERIPHERAL_PDC = (0x18UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a graphics LCD peripheral pin */ + IOPORT_PERIPHERAL_LCD_GRAPHICS = (0x19UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CAC peripheral pin */ + IOPORT_PERIPHERAL_CAC = (0x19UL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a debug trace peripheral pin */ + IOPORT_PERIPHERAL_TRACE = (0x1AUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a OSPI peripheral pin */ + IOPORT_PERIPHERAL_OSPI = (0x1CUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a CEC peripheral pin */ + IOPORT_PERIPHERAL_CEC = (0x1DUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a PGAOUT peripheral pin */ + IOPORT_PERIPHERAL_PGAOUT0 = (0x1DUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a PGAOUT peripheral pin */ + IOPORT_PERIPHERAL_PGAOUT1 = (0x1EUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a ULPT peripheral pin */ + IOPORT_PERIPHERAL_ULPT = (0x1EUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as a MIPI DSI peripheral pin */ + IOPORT_PERIPHERAL_MIPI = (0x1FUL << IOPORT_PRV_PFS_PSEL_OFFSET), + + /** Pin will function as an UARTA peripheral pin */ + IOPORT_PERIPHERAL_UARTA = (0x16UL << IOPORT_PRV_PFS_PSEL_OFFSET), +} ioport_peripheral_t; +#endif + +#ifndef BSP_OVERRIDE_IOPORT_CFG_OPTIONS_T + +/** Options to configure pin functions */ +typedef enum e_ioport_cfg_options +{ + IOPORT_CFG_PORT_DIRECTION_INPUT = 0x00000000, ///< Sets the pin direction to input (default) + IOPORT_CFG_PORT_DIRECTION_OUTPUT = 0x00000004, ///< Sets the pin direction to output + IOPORT_CFG_PORT_OUTPUT_LOW = 0x00000000, ///< Sets the pin level to low + IOPORT_CFG_PORT_OUTPUT_HIGH = 0x00000001, ///< Sets the pin level to high + IOPORT_CFG_PULLUP_ENABLE = 0x00000010, ///< Enables the pin's internal pull-up + IOPORT_CFG_PIM_TTL = 0x00000020, ///< Enables the pin's input mode + IOPORT_CFG_NMOS_ENABLE = 0x00000040, ///< Enables the pin's NMOS open-drain output + IOPORT_CFG_PMOS_ENABLE = 0x00000080, ///< Enables the pin's PMOS open-drain output + IOPORT_CFG_DRIVE_MID = 0x00000400, ///< Sets pin drive output to medium + IOPORT_CFG_DRIVE_HS_HIGH = 0x00000800, ///< Sets pin drive output to high along with supporting high speed + IOPORT_CFG_DRIVE_MID_IIC = 0x00000800, ///< Sets pin to drive output needed for IIC on a 20mA port + IOPORT_CFG_DRIVE_HIGH = 0x00000C00, ///< Sets pin drive output to high + IOPORT_CFG_EVENT_RISING_EDGE = 0x00001000, ///< Sets pin event trigger to rising edge + IOPORT_CFG_EVENT_FALLING_EDGE = 0x00002000, ///< Sets pin event trigger to falling edge + IOPORT_CFG_EVENT_BOTH_EDGES = 0x00003000, ///< Sets pin event trigger to both edges + IOPORT_CFG_IRQ_ENABLE = 0x00004000, ///< Sets pin as an IRQ pin + IOPORT_CFG_ANALOG_ENABLE = 0x00008000, ///< Enables pin to operate as an analog pin + IOPORT_CFG_PERIPHERAL_PIN = 0x00010000 ///< Enables pin to operate as a peripheral pin +} ioport_cfg_options_t; +#endif + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const ioport_api_t g_ioport_on_ioport; + +/** @endcond */ + +/*********************************************************************************************************************** + * Public APIs + **********************************************************************************************************************/ + +fsp_err_t R_IOPORT_Open(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_IOPORT_Close(ioport_ctrl_t * const p_ctrl); +fsp_err_t R_IOPORT_PinsCfg(ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg); +fsp_err_t R_IOPORT_PinCfg(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg); +fsp_err_t R_IOPORT_PinEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event); +fsp_err_t R_IOPORT_PinEventOutputWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value); +fsp_err_t R_IOPORT_PinRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value); +fsp_err_t R_IOPORT_PinWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level); +fsp_err_t R_IOPORT_PortDirectionSet(ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t direction_values, + ioport_size_t mask); +fsp_err_t R_IOPORT_PortEventInputRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * event_data); +fsp_err_t R_IOPORT_PortEventOutputWrite(ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t event_data, + ioport_size_t mask_value); +fsp_err_t R_IOPORT_PortRead(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value); +fsp_err_t R_IOPORT_PortWrite(ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask); + +/*******************************************************************************************************************//** + * @} (end defgroup IOPORT) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif // R_IOPORT_H diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_sci_uart.h b/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_sci_uart.h new file mode 100644 index 00000000000..e37bae4deca --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/inc/instances/r_sci_uart.h @@ -0,0 +1,249 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef R_SCI_UART_H +#define R_SCI_UART_H + +/*******************************************************************************************************************//** + * @addtogroup SCI_UART + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_uart_api.h" +#include "r_sci_uart_cfg.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Enumeration for SCI clock source */ +typedef enum e_sci_clk_src +{ + SCI_UART_CLOCK_INT, ///< Use internal clock for baud generation + SCI_UART_CLOCK_INT_WITH_BAUDRATE_OUTPUT, ///< Use internal clock for baud generation and output on SCK + SCI_UART_CLOCK_EXT8X, ///< Use external clock 8x baud rate + SCI_UART_CLOCK_EXT16X ///< Use external clock 16x baud rate +} sci_clk_src_t; + +/** UART flow control mode definition */ +typedef enum e_sci_uart_flow_control +{ + SCI_UART_FLOW_CONTROL_RTS = 0U, ///< Use SCI pin for RTS + SCI_UART_FLOW_CONTROL_CTS = 1U, ///< Use SCI pin for CTS + SCI_UART_FLOW_CONTROL_CTSRTS = 3U, ///< Use SCI pin for CTS, external pin for RTS + SCI_UART_FLOW_CONTROL_HARDWARE_CTSRTS = 8U, ///< Use CTSn_RTSn pin for RTS and CTSn pin for CTS. Available only for some channels on selected MCUs. See hardware manual for channel specific options +} sci_uart_flow_control_t; + +/** UART instance control block. */ +typedef struct st_sci_uart_instance_ctrl +{ + /* Parameters to control UART peripheral device */ + uint8_t fifo_depth; // FIFO depth of the UART channel + uint8_t rx_transfer_in_progress; // Set to 1 if a receive transfer is in progress, 0 otherwise + uint8_t data_bytes : 2; // 1 byte for 7 or 8 bit data, 2 bytes for 9 bit data + uint8_t bitrate_modulation : 1; // 1 if bit rate modulation is enabled, 0 otherwise + uint32_t open; // Used to determine if the channel is configured + + bsp_io_port_pin_t flow_pin; + + /* Source buffer pointer used to fill hardware FIFO from transmit ISR. */ + uint8_t const * p_tx_src; + + /* Size of source buffer pointer used to fill hardware FIFO from transmit ISR. */ + uint32_t tx_src_bytes; + + /* Destination buffer pointer used for receiving data. */ + uint8_t const * p_rx_dest; + + /* Size of destination buffer pointer used for receiving data. */ + uint32_t rx_dest_bytes; + + /* Pointer to the configuration block. */ + uart_cfg_t const * p_cfg; + + /* Base register for this channel */ + R_SCI0_Type * p_reg; + + void (* p_callback)(uart_callback_args_t *); // Pointer to callback that is called when a uart_event_t occurs. + uart_callback_args_t * p_callback_memory; // Pointer to non-secure memory that can be used to pass arguments to a callback in non-secure memory. + + /* Pointer to context to be passed into callback function */ + void * p_context; +} sci_uart_instance_ctrl_t; + +/** Receive FIFO trigger configuration. */ +typedef enum e_sci_uart_rx_fifo_trigger +{ + SCI_UART_RX_FIFO_TRIGGER_1 = 0x1, ///< Callback after each byte is received without buffering + SCI_UART_RX_FIFO_TRIGGER_2 = 0x2, ///< Callback when FIFO having 2 bytes + SCI_UART_RX_FIFO_TRIGGER_3 = 0x3, ///< Callback when FIFO having 3 bytes + SCI_UART_RX_FIFO_TRIGGER_4 = 0x4, ///< Callback when FIFO having 4 bytes + SCI_UART_RX_FIFO_TRIGGER_5 = 0x5, ///< Callback when FIFO having 5 bytes + SCI_UART_RX_FIFO_TRIGGER_6 = 0x6, ///< Callback when FIFO having 6 bytes + SCI_UART_RX_FIFO_TRIGGER_7 = 0x7, ///< Callback when FIFO having 7 bytes + SCI_UART_RX_FIFO_TRIGGER_8 = 0x8, ///< Callback when FIFO having 8 bytes + SCI_UART_RX_FIFO_TRIGGER_9 = 0x9, ///< Callback when FIFO having 9 bytes + SCI_UART_RX_FIFO_TRIGGER_10 = 0xA, ///< Callback when FIFO having 10 bytes + SCI_UART_RX_FIFO_TRIGGER_11 = 0xB, ///< Callback when FIFO having 11 bytes + SCI_UART_RX_FIFO_TRIGGER_12 = 0xC, ///< Callback when FIFO having 12 bytes + SCI_UART_RX_FIFO_TRIGGER_13 = 0xD, ///< Callback when FIFO having 13 bytes + SCI_UART_RX_FIFO_TRIGGER_14 = 0xE, ///< Callback when FIFO having 14 bytes + SCI_UART_RX_FIFO_TRIGGER_MAX = 0xF, ///< Callback when FIFO is full or after 15 bit times with no data (fewer interrupts) +} sci_uart_rx_fifo_trigger_t; + +/** Asynchronous Start Bit Edge Detection configuration. */ +typedef enum e_sci_uart_start_bit_t +{ + SCI_UART_START_BIT_LOW_LEVEL = 0x0, ///< Detect low level on RXDn pin as start bit + SCI_UART_START_BIT_FALLING_EDGE = 0x1, ///< Detect falling level on RXDn pin as start bit +} sci_uart_start_bit_t; + +/** Noise cancellation configuration. */ +typedef enum e_sci_uart_noise_cancellation +{ + SCI_UART_NOISE_CANCELLATION_DISABLE = 0x0, ///< Disable noise cancellation + SCI_UART_NOISE_CANCELLATION_ENABLE = 0x1, ///< Enable noise cancellation +} sci_uart_noise_cancellation_t; + +/** RS-485 Enable/Disable. */ +typedef enum e_sci_uart_rs485_enable +{ + SCI_UART_RS485_DISABLE = 0, ///< RS-485 disabled. + SCI_UART_RS485_ENABLE = 1, ///< RS-485 enabled. +} sci_uart_rs485_enable_t; + +/** The polarity of the RS-485 DE signal. */ +typedef enum e_sci_uart_rs485_de_polarity +{ + SCI_UART_RS485_DE_POLARITY_HIGH = 0, ///< The DE signal is high when a write transfer is in progress. + SCI_UART_RS485_DE_POLARITY_LOW = 1, ///< The DE signal is low when a write transfer is in progress. +} sci_uart_rs485_de_polarity_t; + +/** Register settings to achieve a desired baud rate and modulation duty. */ +typedef struct st_baud_setting_t +{ + union + { + uint8_t semr_baudrate_bits; + + struct + { + uint8_t : 2; + uint8_t brme : 1; ///< Bit Rate Modulation Enable + uint8_t abcse : 1; ///< Asynchronous Mode Extended Base Clock Select 1 + uint8_t abcs : 1; ///< Asynchronous Mode Base Clock Select + uint8_t : 1; + uint8_t bgdm : 1; ///< Baud Rate Generator Double-Speed Mode Select + uint8_t : 1; + } semr_baudrate_bits_b; + }; + uint8_t cks : 2; ///< CKS value to get divisor (CKS = N) + uint8_t brr; ///< Bit Rate Register setting + uint8_t mddr; ///< Modulation Duty Register setting +} baud_setting_t; + +/** Configuration settings for controlling the DE signal for RS-485. */ +typedef struct st_sci_uart_rs485_setting +{ + sci_uart_rs485_enable_t enable; ///< Enable the DE signal. + sci_uart_rs485_de_polarity_t polarity; ///< DE signal polarity. + bsp_io_port_pin_t de_control_pin; ///< UART Driver Enable pin. +} sci_uart_rs485_setting_t; + +/** IrDA Enable/Disable. */ +typedef enum e_sci_uart_irda_enable +{ + SCI_UART_IRDA_DISABLED = 0, ///< IrDA disabled. + SCI_UART_IRDA_ENABLED = 1, ///< IrDA enabled. +} sci_uart_irda_enable_t; + +/** IrDA Polarity Switching. */ +typedef enum e_sci_uart_irda_polarity +{ + SCI_UART_IRDA_POLARITY_NORMAL = 0, ///< IrDA Tx/Rx polarity not inverted. + SCI_UART_IRDA_POLARITY_INVERTED = 1, ///< IrDA Tx/Rx polarity inverted. +} sci_uart_irda_polarity_t; + +/** Configuration settings for IrDA interface. */ +typedef struct st_sci_uart_irda_setting +{ + union + { + uint8_t ircr_bits; + + struct + { + uint8_t : 2; + uint8_t irrxinv : 1; ///< IRRXD Polarity Switching + uint8_t irtxinv : 1; ///< IRTXD Polarity Switching + uint8_t : 3; + uint8_t ire : 1; ///< Enable IrDA pulse encoding and decoding. + } ircr_bits_b; + }; +} sci_uart_irda_setting_t; + +/** UART on SCI device Configuration */ +typedef struct st_sci_uart_extended_cfg +{ + sci_clk_src_t clock; ///< The source clock for the baud-rate generator. If internal optionally output baud rate on SCK + sci_uart_start_bit_t rx_edge_start; ///< Start reception on falling edge + sci_uart_noise_cancellation_t noise_cancel; ///< Noise cancellation setting + baud_setting_t * p_baud_setting; ///< Register settings for a desired baud rate. + sci_uart_rx_fifo_trigger_t rx_fifo_trigger; ///< Receive FIFO trigger level, unused if channel has no FIFO or if DTC is used. + bsp_io_port_pin_t flow_control_pin; ///< UART Driver Enable pin + sci_uart_flow_control_t flow_control; ///< CTS/RTS function of the SSn pin + sci_uart_rs485_setting_t rs485_setting; ///< RS-485 settings. + sci_uart_irda_setting_t irda_setting; ///< IrDA settings +} sci_uart_extended_cfg_t; + +/********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/** @cond INC_HEADER_DEFS_SEC */ +/** Filled in Interface API structure for this Instance. */ +extern const uart_api_t g_uart_on_sci; + +/** @endcond */ + +fsp_err_t R_SCI_UART_Open(uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg); +fsp_err_t R_SCI_UART_Read(uart_ctrl_t * const p_api_ctrl, uint8_t * const p_dest, uint32_t const bytes); +fsp_err_t R_SCI_UART_Write(uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes); +fsp_err_t R_SCI_UART_BaudSet(uart_ctrl_t * const p_api_ctrl, void const * const p_baud_setting); +fsp_err_t R_SCI_UART_InfoGet(uart_ctrl_t * const p_api_ctrl, uart_info_t * const p_info); +fsp_err_t R_SCI_UART_Close(uart_ctrl_t * const p_api_ctrl); +fsp_err_t R_SCI_UART_Abort(uart_ctrl_t * const p_api_ctrl, uart_dir_t communication_to_abort); +fsp_err_t R_SCI_UART_BaudCalculate(uint32_t baudrate, + bool bitrate_modulation, + uint32_t baud_rate_error_x_1000, + baud_setting_t * const p_baud_setting); +fsp_err_t R_SCI_UART_CallbackSet(uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void * const p_context, + uart_callback_args_t * const p_callback_memory); +fsp_err_t R_SCI_UART_ReadStop(uart_ctrl_t * const p_api_ctrl, uint32_t * remaining_bytes); +fsp_err_t R_SCI_UART_ReceiveSuspend(uart_ctrl_t * const p_api_ctrl); +fsp_err_t R_SCI_UART_ReceiveResume(uart_ctrl_t * const p_api_ctrl); + +/*******************************************************************************************************************//** + * @} (end addtogroup SCI_UART) + **********************************************************************************************************************/ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA2A1AB.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA2A1AB.h new file mode 100644 index 00000000000..78bceb6f1c4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA2A1AB.h @@ -0,0 +1,20344 @@ +/* + * Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause + * + * @file ./out/R7FA2A1AB.h + * @brief CMSIS HeaderFile + * @version 1.1 + */ + +/** @addtogroup Renesas + * @{ + */ + +/** @addtogroup R7FA2A1AB + * @{ + */ + +#ifndef R7FA2A1AB_H + #define R7FA2A1AB_H + + #ifdef __cplusplus +extern "C" { + #endif + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/* ========================== Configuration of the ARM Cortex-M23 Processor and Core Peripherals =========================== */ + #define __CM23_REV 0x0100U /*!< CM23 Core Revision */ + #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ + #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ + #define __VTOR_PRESENT 1 /*!< Set to 1 if CPU supports Vector Table Offset Register */ + #define __MPU_PRESENT 1 /*!< MPU present */ + #define __FPU_PRESENT 0 /*!< FPU present */ + #define __SAUREGION_PRESENT 0 /*!< SAU region present */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + + #include "core_cm23.h" /*!< ARM Cortex-M23 processor and core peripherals */ + #include "system.h" /*!< R7FA2A1AB System */ + + #ifndef __IM /*!< Fallback for older CMSIS versions */ + #define __IM __I + #endif + #ifndef __OM /*!< Fallback for older CMSIS versions */ + #define __OM __O + #endif + #ifndef __IOM /*!< Fallback for older CMSIS versions */ + #define __IOM __IO + #endif + +/* ======================================== Start of section using anonymous unions ======================================== */ + #if defined(__CC_ARM) + #pragma push + #pragma anon_unions + #elif defined(__ICCARM__) + #pragma language=extended + #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wc11-extensions" + #pragma clang diagnostic ignored "-Wreserved-id-macro" + #pragma clang diagnostic ignored "-Wgnu-anonymous-struct" + #pragma clang diagnostic ignored "-Wnested-anon-types" + #elif defined(__GNUC__) + +/* anonymous unions are enabled by default */ + #elif defined(__TMS470__) + +/* anonymous unions are enabled by default */ + #elif defined(__TASKING__) + #pragma warning 586 + #elif defined(__CSMC__) + +/* anonymous unions are enabled by default */ + #else + #warning Not supported compiler type + #endif + +/* =========================================================================================================================== */ +/* ================ Device Specific Cluster Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_clusters + * @{ + */ + +/** + * @brief R_BUS_CSa [CSa] (CS Registers) + */ +typedef struct +{ + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t MOD; /*!< (@ 0x00000002) Mode Register */ + + struct + { + __IOM uint16_t WRMOD : 1; /*!< [0..0] Write Access Mode Select */ + uint16_t : 2; + __IOM uint16_t EWENB : 1; /*!< [3..3] External Wait Enable */ + uint16_t : 4; + __IOM uint16_t PRENB : 1; /*!< [8..8] Page Read Access Enable */ + __IOM uint16_t PWENB : 1; /*!< [9..9] Page Write Access Enable */ + uint16_t : 5; + __IOM uint16_t PRMOD : 1; /*!< [15..15] Page Read Access Mode Select */ + } MOD_b; + }; + + union + { + __IOM uint32_t WCR1; /*!< (@ 0x00000004) Wait Control Register 1 */ + + struct + { + __IOM uint32_t CSPWWAIT : 3; /*!< [2..0] Page Write Cycle Wait Select */ + uint32_t : 5; + __IOM uint32_t CSPRWAIT : 3; /*!< [10..8] Page Read Cycle Wait Select */ + uint32_t : 5; + __IOM uint32_t CSWWAIT : 5; /*!< [20..16] Normal Write Cycle Wait Select */ + uint32_t : 3; + __IOM uint32_t CSRWAIT : 5; /*!< [28..24] Normal Read Cycle Wait Select */ + uint32_t : 3; + } WCR1_b; + }; + + union + { + __IOM uint32_t WCR2; /*!< (@ 0x00000008) Wait Control Register 2 */ + + struct + { + __IOM uint32_t CSROFF : 3; /*!< [2..0] Read-Access CS Extension Cycle Select */ + uint32_t : 1; + __IOM uint32_t CSWOFF : 3; /*!< [6..4] Write-Access CS Extension Cycle Select */ + uint32_t : 1; + __IOM uint32_t WDOFF : 3; /*!< [10..8] Write Data Output Extension Cycle Select */ + uint32_t : 1; + __IOM uint32_t AWAIT : 2; /*!< [13..12] CS Assert Wait Select */ + uint32_t : 2; + __IOM uint32_t RDON : 3; /*!< [18..16] RD Assert Wait Select */ + uint32_t : 1; + __IOM uint32_t WRON : 3; /*!< [22..20] WR Assert Wait Select */ + uint32_t : 1; + __IOM uint32_t WDON : 3; /*!< [26..24] Write Data Output Wait Select */ + uint32_t : 1; + __IOM uint32_t CSON : 3; /*!< [30..28] CS Assert Wait Select */ + uint32_t : 1; + } WCR2_b; + }; + __IM uint32_t RESERVED1; +} R_BUS_CSa_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_CSb [CSb] (CS Registers) + */ +typedef struct +{ + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t CR; /*!< (@ 0x00000002) Control Register */ + + struct + { + __IOM uint16_t EXENB : 1; /*!< [0..0] Operation Enable */ + uint16_t : 3; + __IOM uint16_t BSIZE : 2; /*!< [5..4] External Bus Width Select */ + uint16_t : 2; + __IOM uint16_t EMODE : 1; /*!< [8..8] Endian Mode */ + uint16_t : 3; + __IOM uint16_t MPXEN : 1; /*!< [12..12] Address/Data Multiplexed I/O Interface Select */ + uint16_t : 3; + } CR_b; + }; + __IM uint16_t RESERVED1[3]; + + union + { + __IOM uint16_t REC; /*!< (@ 0x0000000A) Recovery Cycle Register */ + + struct + { + __IOM uint16_t RRCV : 4; /*!< [3..0] Read Recovery */ + uint16_t : 4; + __IOM uint16_t WRCV : 4; /*!< [11..8] Write Recovery */ + uint16_t : 4; + } REC_b; + }; + __IM uint16_t RESERVED2[2]; +} R_BUS_CSb_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_SDRAM [SDRAM] (SDRAM Registers) + */ +typedef struct +{ + union + { + __IOM uint8_t SDCCR; /*!< (@ 0x00000000) SDC Control Register */ + + struct + { + __IOM uint8_t EXENB : 1; /*!< [0..0] Operation Enable */ + uint8_t : 3; + __IOM uint8_t BSIZE : 2; /*!< [5..4] SDRAM Bus Width Select */ + uint8_t : 2; + } SDCCR_b; + }; + + union + { + __IOM uint8_t SDCMOD; /*!< (@ 0x00000001) SDC Mode Register */ + + struct + { + __IOM uint8_t EMODE : 1; /*!< [0..0] Endian Mode */ + uint8_t : 7; + } SDCMOD_b; + }; + + union + { + __IOM uint8_t SDAMOD; /*!< (@ 0x00000002) SDRAM Access Mode Register */ + + struct + { + __IOM uint8_t BE : 1; /*!< [0..0] Continuous Access Enable */ + uint8_t : 7; + } SDAMOD_b; + }; + __IM uint8_t RESERVED; + __IM uint32_t RESERVED1[3]; + + union + { + __IOM uint8_t SDSELF; /*!< (@ 0x00000010) SDRAM Self-Refresh Control Register */ + + struct + { + __IOM uint8_t SFEN : 1; /*!< [0..0] SDRAM Self-Refresh Enable */ + uint8_t : 7; + } SDSELF_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; + + union + { + __IOM uint16_t SDRFCR; /*!< (@ 0x00000014) SDRAM Refresh Control Register */ + + struct + { + __IOM uint16_t RFC : 12; /*!< [11..0] Auto-Refresh Request Interval Setting */ + __IOM uint16_t REFW : 4; /*!< [15..12] Auto-Refresh Cycle/ Self-Refresh Clearing Cycle Count + * Setting. ( REFW+1 Cycles ) */ + } SDRFCR_b; + }; + + union + { + __IOM uint8_t SDRFEN; /*!< (@ 0x00000016) SDRAM Auto-Refresh Control Register */ + + struct + { + __IOM uint8_t RFEN : 1; /*!< [0..0] Auto-Refresh Operation Enable */ + uint8_t : 7; + } SDRFEN_b; + }; + __IM uint8_t RESERVED4; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint8_t SDICR; /*!< (@ 0x00000020) SDRAM Initialization Sequence Control Register */ + + struct + { + __IOM uint8_t INIRQ : 1; /*!< [0..0] Initialization Sequence Start */ + uint8_t : 7; + } SDICR_b; + }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; + + union + { + __IOM uint16_t SDIR; /*!< (@ 0x00000024) SDRAM Initialization Register */ + + struct + { + __IOM uint16_t ARFI : 4; /*!< [3..0] Initialization Auto-Refresh Interval ( PRF+3 cycles ) */ + __IOM uint16_t ARFC : 4; /*!< [7..4] Initialization Auto-Refresh Count */ + __IOM uint16_t PRC : 3; /*!< [10..8] Initialization Precharge Cycle Count ( PRF+3 cycles + * ) */ + uint16_t : 5; + } SDIR_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9[6]; + + union + { + __IOM uint8_t SDADR; /*!< (@ 0x00000040) SDRAM Address Register */ + + struct + { + __IOM uint8_t MXC : 2; /*!< [1..0] Address Multiplex Select */ + uint8_t : 6; + } SDADR_b; + }; + __IM uint8_t RESERVED10; + __IM uint16_t RESERVED11; + + union + { + __IOM uint32_t SDTR; /*!< (@ 0x00000044) SDRAM Timing Register */ + + struct + { + __IOM uint32_t CL : 3; /*!< [2..0] SDRAMC Column Latency */ + uint32_t : 5; + __IOM uint32_t WR : 1; /*!< [8..8] Write Recovery Interval */ + __IOM uint32_t RP : 3; /*!< [11..9] Row Precharge Interval ( RP+1 cycles ) */ + __IOM uint32_t RCD : 2; /*!< [13..12] Row Column Latency ( RCD+1 cycles ) */ + uint32_t : 2; + __IOM uint32_t RAS : 3; /*!< [18..16] Row Active Interval */ + uint32_t : 13; + } SDTR_b; + }; + + union + { + __IOM uint16_t SDMOD; /*!< (@ 0x00000048) SDRAM Mode Register */ + + struct + { + __IOM uint16_t MR : 15; /*!< [14..0] Mode Register Setting */ + uint16_t : 1; + } SDMOD_b; + }; + __IM uint16_t RESERVED12; + __IM uint32_t RESERVED13; + + union + { + __IM uint8_t SDSR; /*!< (@ 0x00000050) SDRAM Status Register */ + + struct + { + __IM uint8_t MRSST : 1; /*!< [0..0] Mode Register Setting Status */ + uint8_t : 2; + __IM uint8_t INIST : 1; /*!< [3..3] Initialization Status */ + __IM uint8_t SRFST : 1; /*!< [4..4] Self-Refresh Transition/Recovery Status */ + uint8_t : 3; + } SDSR_b; + }; + __IM uint8_t RESERVED14; + __IM uint16_t RESERVED15; +} R_BUS_SDRAM_Type; /*!< Size = 84 (0x54) */ + +/** + * @brief R_BUS_BUSERRa [BUSERRa] (Bus Error Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ADD; /*!< (@ 0x00000000) Bus Error Address Register */ + + struct + { + __IM uint32_t BERAD : 32; /*!< [31..0] Bus Error Address */ + } ADD_b; + }; + + union + { + union + { + __IM uint8_t STAT; /*!< (@ 0x00000004) Bus Error Status Register */ + + struct + { + __IM uint8_t ACCSTAT : 1; /*!< [0..0] Error access status */ + uint8_t : 6; + __IM uint8_t ERRSTAT : 1; /*!< [7..7] Bus Error Status */ + } STAT_b; + }; + + union + { + __IM uint8_t RW; /*!< (@ 0x00000004) Bus Error Read Write */ + + struct + { + __IM uint8_t RWSTAT : 1; /*!< [0..0] Error access Read/Write Status */ + uint8_t : 7; + } RW_b; + }; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[2]; +} R_BUS_BUSERRa_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_BTZFERR [BTZFERR] (Bus TZF Error Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ADD; /*!< (@ 0x00000000) BUS TZF Error Address */ + + struct + { + __IM uint32_t BTZFERAD : 32; /*!< [31..0] Bus TrustZone Filter Error Address */ + } ADD_b; + }; + + union + { + __IM uint8_t RW; /*!< (@ 0x00000004) BUS TZF Error Read Write */ + + struct + { + __IM uint8_t TRWSTAT : 1; /*!< [0..0] TrustZone filter error access Read/Write Status */ + uint8_t : 7; + } RW_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[2]; +} R_BUS_BTZFERR_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_BUSERRb [BUSERRb] (Bus Error Registers) + */ +typedef struct +{ + union + { + __IM uint8_t STAT; /*!< (@ 0x00000000) Bus Error Status Register */ + + struct + { + __IM uint8_t SLERRSTAT : 1; /*!< [0..0] Slave Bus Error Status. */ + __IM uint8_t STERRSTAT : 1; /*!< [1..1] Slave TrustZone filter Error Status. */ + uint8_t : 1; + __IM uint8_t MMERRSTAT : 1; /*!< [3..3] Master MPU Error Status. */ + __IM uint8_t ILERRSTAT : 1; /*!< [4..4] Illegal Address Access Error Status. */ + __IM uint8_t MSERRSTAT : 1; /*!< [5..5] Master Security Attribution Unit Error Status. */ + uint8_t : 2; + } STAT_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; + + union + { + union + { + __IOM uint32_t IRQEN; /*!< (@ 0x00000008) BUS Error IRQ Enable */ + + struct + { + __IOM uint32_t EN : 1; /*!< [0..0] Bus interrupt request permission setting to ICU when + * a bus error occurs */ + uint32_t : 31; + } IRQEN_b; + }; + + union + { + __IOM uint8_t CLR; /*!< (@ 0x00000008) Bus Error Clear Register */ + + struct + { + __IOM uint8_t SLERRCLR : 1; /*!< [0..0] Slave Bus Error Clear. */ + __IOM uint8_t STERRCLR : 1; /*!< [1..1] Slave TrustZone filter Error Status. */ + uint8_t : 1; + __IOM uint8_t MMERRCLR : 1; /*!< [3..3] Master MPU Error Clear. */ + __IOM uint8_t ILERRCLR : 1; /*!< [4..4] Illegal Address Access Error Clear. */ + __IOM uint8_t MSERRCLR : 1; /*!< [5..5] Master Security Attribution Unit Error Clear. */ + uint8_t : 2; + } CLR_b; + }; + }; + __IM uint32_t RESERVED3; +} R_BUS_BUSERRb_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_DMACDTCERR [DMACDTCERR] (DMAC/DTC Error Registers) + */ +typedef struct +{ + __IM uint8_t RESERVED[36]; + + union + { + __IM uint8_t STAT; /*!< (@ 0x00000024) DMAC/DTC Error Status Register */ + + struct + { + __IM uint8_t MTERRSTAT : 1; /*!< [0..0] Master TrustZone Filter Error Status */ + uint8_t : 7; + } STAT_b; + }; + __IM uint8_t RESERVED1[7]; + + union + { + __IOM uint8_t CLR; /*!< (@ 0x0000002C) DMAC/DTC Error Clear Register */ + + struct + { + __IOM uint8_t MTERRCLR : 1; /*!< [0..0] Master TrustZone filter Error Clear */ + uint8_t : 7; + } CLR_b; + }; +} R_BUS_DMACDTCERR_Type; /*!< Size = 45 (0x2d) */ + +/** + * @brief R_BUS_BUSSABT0 [BUSSABT0] (Bus Slave Arbitration Control 0 Registers) + */ +typedef struct +{ + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t MRE0BI; /*!< (@ 0x00000008) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } MRE0BI_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t FLBI; /*!< (@ 0x00000010) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } FLBI_b; + }; + __IM uint32_t RESERVED2[3]; + + union + { + __IOM uint32_t S0BI; /*!< (@ 0x00000020) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } S0BI_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IOM uint32_t S1BI; /*!< (@ 0x00000028) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } S1BI_b; + }; + __IM uint32_t RESERVED4; + + union + { + __IOM uint32_t S2BI; /*!< (@ 0x00000030) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } S2BI_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint32_t S3BI; /*!< (@ 0x00000038) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } S3BI_b; + }; + __IM uint32_t RESERVED6[3]; + + union + { + __IOM uint32_t STBYSBI; /*!< (@ 0x00000048) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } STBYSBI_b; + }; + __IM uint32_t RESERVED7; + + union + { + union + { + __IOM uint32_t ECBI; /*!< (@ 0x00000050) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } ECBI_b; + }; + + union + { + __IOM uint32_t SPI0BI; /*!< (@ 0x00000050) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } SPI0BI_b; + }; + }; + __IM uint32_t RESERVED8; + + union + { + union + { + __IOM uint32_t EOBI; /*!< (@ 0x00000058) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } EOBI_b; + }; + + union + { + __IOM uint32_t SPI1BI; /*!< (@ 0x00000058) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } SPI1BI_b; + }; + }; + __IM uint32_t RESERVED9; + + union + { + __IOM uint32_t PBBI; /*!< (@ 0x00000060) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } PBBI_b; + }; + __IM uint32_t RESERVED10; + + union + { + union + { + __IOM uint32_t PABI; /*!< (@ 0x00000068) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } PABI_b; + }; + + union + { + __IOM uint32_t CPU0SAHBI; /*!< (@ 0x00000068) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } CPU0SAHBI_b; + }; + }; + __IM uint32_t RESERVED11; + + union + { + __IOM uint32_t PIBI; /*!< (@ 0x00000070) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } PIBI_b; + }; + __IM uint32_t RESERVED12; + + union + { + __IOM uint32_t PSBI; /*!< (@ 0x00000078) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for slave. */ + uint32_t : 31; + } PSBI_b; + }; +} R_BUS_BUSSABT0_Type; /*!< Size = 124 (0x7c) */ + +/** + * @brief R_BUS_BUSSABT1 [BUSSABT1] (Bus Slave Arbitration Control 1 Registers) + */ +typedef struct +{ + union + { + union + { + __IOM uint32_t FHBI; /*!< (@ 0x00000000) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 2; /*!< [1..0] Arbitration Select for slave. */ + uint32_t : 30; + } FHBI_b; + }; + + union + { + __IOM uint32_t MRC0BI; /*!< (@ 0x00000000) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 2; /*!< [1..0] Arbitration Select for slave. */ + uint32_t : 30; + } MRC0BI_b; + }; + }; + __IM uint32_t RESERVED[5]; + + union + { + __IOM uint32_t S0BI; /*!< (@ 0x00000018) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 2; /*!< [1..0] Arbitration Select for slave. */ + uint32_t : 30; + } S0BI_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t S1BI; /*!< (@ 0x00000020) Bus Slave Arbitration Control Register */ + + struct + { + __IOM uint32_t ARBS : 2; /*!< [1..0] Arbitration Select for slave. */ + uint32_t : 30; + } S1BI_b; + }; +} R_BUS_BUSSABT1_Type; /*!< Size = 36 (0x24) */ + +/** + * @brief R_BUS_BMSAERR [BMSAERR] (Bus Master Security Attribution Unit Error Address and Read/Write Status registers.) + */ +typedef struct +{ + union + { + __IM uint32_t ADD; /*!< (@ 0x00000000) Bus Master Security Attribution Unit Error Address. */ + + struct + { + __IM uint32_t MSERAD : 32; /*!< [31..0] Bus Master Security Attribution Unit Error Address. */ + } ADD_b; + }; + + union + { + __IM uint8_t RW; /*!< (@ 0x00000004) BUS Master Security Attribution Unit Error Read + * Write. */ + + struct + { + __IM uint8_t MSARWSTAT : 1; /*!< [0..0] Master Security Attribution Unit error access Read/Write + * Status. */ + uint8_t : 7; + } RW_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[2]; +} R_BUS_BMSAERR_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_BUS_OAD [OAD] (Bus Operation After Detection Registers) + */ +typedef struct +{ + union + { + __IOM uint16_t BUSOAD; /*!< (@ 0x00000000) Bus Operation After Detection Register */ + + struct + { + __IOM uint16_t ILERROAD : 1; /*!< [0..0] Illegal address access error operation after detection. */ + __IOM uint16_t SLERROAD : 1; /*!< [1..1] Slave bus error operation after detection. */ + __IOM uint16_t BWERROAD : 1; /*!< [2..2] Bufferable write error operation after detection. */ + uint16_t : 13; + } BUSOAD_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t BUSOADPT; /*!< (@ 0x00000004) BUS Operation After Detection Protect Register. */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of BUSOAD register. */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Key code */ + } BUSOADPT_b; + }; + __IM uint16_t RESERVED1[5]; + + union + { + __IOM uint16_t MSAOAD; /*!< (@ 0x00000010) Master Security Attribution Operation After Detection + * Register. */ + + struct + { + __IOM uint16_t OAD : 1; /*!< [0..0] Master Security Attribution operation after detection. */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Key Code. */ + } MSAOAD_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t MSAPT; /*!< (@ 0x00000014) Master Security Attribution Protect Register. */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of MSAOAD register. */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Key code */ + } MSAPT_b; + }; +} R_BUS_OAD_Type; /*!< Size = 22 (0x16) */ + +/** + * @brief R_BUS_MBWERR [MBWERR] (Master Bufferable Write Error Registers) + */ +typedef struct +{ + union + { + __IM uint32_t STAT; /*!< (@ 0x00000000) Bufferable Write Error Status Register */ + + struct + { + __IM uint32_t BWERR0 : 1; /*!< [0..0] Bufferable Write Error in 0. */ + __IM uint32_t BWERR1 : 1; /*!< [1..1] Bufferable Write Error in 1. */ + __IM uint32_t BWERR2 : 1; /*!< [2..2] Bufferable Write Error in 2. */ + __IM uint32_t BWERR3 : 1; /*!< [3..3] Bufferable Write Error in 3. */ + __IM uint32_t BWERR4 : 1; /*!< [4..4] Bufferable Write Error in 4. */ + __IM uint32_t BWERR5 : 1; /*!< [5..5] Bufferable Write Error in 5. */ + __IM uint32_t BWERR6 : 1; /*!< [6..6] Bufferable Write Error in 6. */ + __IM uint32_t BWERR7 : 1; /*!< [7..7] Bufferable Write Error in 7. */ + __IM uint32_t BWERR8 : 1; /*!< [8..8] Bufferable Write Error in 8. */ + __IM uint32_t BWERR9 : 1; /*!< [9..9] Bufferable Write Error in 9. */ + __IM uint32_t BWERR10 : 1; /*!< [10..10] Bufferable Write Error in 10. */ + __IM uint32_t BWERR11 : 1; /*!< [11..11] Bufferable Write Error in 11. */ + __IM uint32_t BWERR12 : 1; /*!< [12..12] Bufferable Write Error in 12. */ + __IM uint32_t BWERR13 : 1; /*!< [13..13] Bufferable Write Error in 13. */ + __IM uint32_t BWERR14 : 1; /*!< [14..14] Bufferable Write Error in 14. */ + __IM uint32_t BWERR15 : 1; /*!< [15..15] Bufferable Write Error in 15. */ + __IM uint32_t BWERR16 : 1; /*!< [16..16] Bufferable Write Error in 16. */ + __IM uint32_t BWERR17 : 1; /*!< [17..17] Bufferable Write Error in 17. */ + __IM uint32_t BWERR18 : 1; /*!< [18..18] Bufferable Write Error in 18. */ + __IM uint32_t BWERR19 : 1; /*!< [19..19] Bufferable Write Error in 19. */ + __IM uint32_t BWERR20 : 1; /*!< [20..20] Bufferable Write Error in 20. */ + __IM uint32_t BWERR21 : 1; /*!< [21..21] Bufferable Write Error in 21. */ + __IM uint32_t BWERR22 : 1; /*!< [22..22] Bufferable Write Error in 22. */ + __IM uint32_t BWERR23 : 1; /*!< [23..23] Bufferable Write Error in 23. */ + __IM uint32_t BWERR24 : 1; /*!< [24..24] Bufferable Write Error in 24. */ + __IM uint32_t BWERR25 : 1; /*!< [25..25] Bufferable Write Error in 25. */ + __IM uint32_t BWERR26 : 1; /*!< [26..26] Bufferable Write Error in 26. */ + __IM uint32_t BWERR27 : 1; /*!< [27..27] Bufferable Write Error in 27. */ + __IM uint32_t BWERR28 : 1; /*!< [28..28] Bufferable Write Error in 28. */ + __IM uint32_t BWERR29 : 1; /*!< [29..29] Bufferable Write Error in 29. */ + __IM uint32_t BWERR30 : 1; /*!< [30..30] Bufferable Write Error in 30. */ + __IM uint32_t BWERR31 : 1; /*!< [31..31] Bufferable Write Error in 31. */ + } STAT_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t CLR; /*!< (@ 0x00000008) Bufferable Write Error Clear Register. */ + + struct + { + __IOM uint32_t BWERR0 : 1; /*!< [0..0] Bufferable Write Error Clear for 0. */ + __IOM uint32_t BWERR1 : 1; /*!< [1..1] Bufferable Write Error Clear for 1. */ + __IOM uint32_t BWERR2 : 1; /*!< [2..2] Bufferable Write Error Clear for 2. */ + __IOM uint32_t BWERR3 : 1; /*!< [3..3] Bufferable Write Error Clear for 3. */ + __IOM uint32_t BWERR4 : 1; /*!< [4..4] Bufferable Write Error Clear for 4. */ + __IOM uint32_t BWERR5 : 1; /*!< [5..5] Bufferable Write Error Clear for 5. */ + __IOM uint32_t BWERR6 : 1; /*!< [6..6] Bufferable Write Error Clear for 6. */ + __IOM uint32_t BWERR7 : 1; /*!< [7..7] Bufferable Write Error Clear for 7. */ + __IOM uint32_t BWERR8 : 1; /*!< [8..8] Bufferable Write Error Clear for 8. */ + __IOM uint32_t BWERR9 : 1; /*!< [9..9] Bufferable Write Error Clear for 9. */ + __IOM uint32_t BWERR10 : 1; /*!< [10..10] Bufferable Write Error Clear for 10. */ + __IOM uint32_t BWERR11 : 1; /*!< [11..11] Bufferable Write Error Clear for 11. */ + __IOM uint32_t BWERR12 : 1; /*!< [12..12] Bufferable Write Error Clear for 12. */ + __IOM uint32_t BWERR13 : 1; /*!< [13..13] Bufferable Write Error Clear for 13. */ + __IOM uint32_t BWERR14 : 1; /*!< [14..14] Bufferable Write Error Clear for 14. */ + __IOM uint32_t BWERR15 : 1; /*!< [15..15] Bufferable Write Error Clear for 15. */ + __IOM uint32_t BWERR16 : 1; /*!< [16..16] Bufferable Write Error Clear for 16. */ + __IOM uint32_t BWERR17 : 1; /*!< [17..17] Bufferable Write Error Clear for 17. */ + __IOM uint32_t BWERR18 : 1; /*!< [18..18] Bufferable Write Error Clear for 18. */ + __IOM uint32_t BWERR19 : 1; /*!< [19..19] Bufferable Write Error Clear for 19. */ + __IOM uint32_t BWERR20 : 1; /*!< [20..20] Bufferable Write Error Clear for 20. */ + __IOM uint32_t BWERR21 : 1; /*!< [21..21] Bufferable Write Error Clear for 21. */ + __IOM uint32_t BWERR22 : 1; /*!< [22..22] Bufferable Write Error Clear for 22. */ + __IOM uint32_t BWERR23 : 1; /*!< [23..23] Bufferable Write Error Clear for 23. */ + __IOM uint32_t BWERR24 : 1; /*!< [24..24] Bufferable Write Error Clear for 24. */ + __IOM uint32_t BWERR25 : 1; /*!< [25..25] Bufferable Write Error Clear for 25. */ + __IOM uint32_t BWERR26 : 1; /*!< [26..26] Bufferable Write Error Clear for 26. */ + __IOM uint32_t BWERR27 : 1; /*!< [27..27] Bufferable Write Error Clear for 27. */ + __IOM uint32_t BWERR28 : 1; /*!< [28..28] Bufferable Write Error Clear for 28. */ + __IOM uint32_t BWERR29 : 1; /*!< [29..29] Bufferable Write Error Clear for 29. */ + __IOM uint32_t BWERR30 : 1; /*!< [30..30] Bufferable Write Error Clear for 30. */ + __IOM uint32_t BWERR31 : 1; /*!< [31..31] Bufferable Write Error Clear for 31. */ + } CLR_b; + }; +} R_BUS_MBWERR_Type; /*!< Size = 12 (0xc) */ + +/** + * @brief R_BUS_BUSM [BUSM] (Master Bus Control Registers) + */ +typedef struct +{ + union + { + __IOM uint16_t CNT; /*!< (@ 0x00000000) Master Bus Control Register */ + + struct + { + uint16_t : 15; + __IOM uint16_t IERES : 1; /*!< [15..15] Ignore Error Responses */ + } CNT_b; + }; + __IM uint16_t RESERVED; +} R_BUS_BUSM_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_BUS_BUSS [BUSS] (Slave Bus Control Register Array) + */ +typedef struct +{ + union + { + __IOM uint16_t CNT; /*!< (@ 0x00000000) Slave Bus Control Register */ + + struct + { + __IOM uint16_t ARBS : 2; /*!< [1..0] Arbitration Select */ + uint16_t : 2; + __IOM uint16_t ARBMET : 2; /*!< [5..4] Arbitration Method */ + uint16_t : 10; + } CNT_b; + }; + __IM uint16_t RESERVED; +} R_BUS_BUSS_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_CAN0_MB [MB] (Mailbox) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) Mailbox ID Register */ + + struct + { + __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ + __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ + uint32_t : 1; + __IOM uint32_t RTR : 1; /*!< [30..30] Remote Transmission Request */ + __IOM uint32_t IDE : 1; /*!< [31..31] ID Extension */ + } ID_b; + }; + + union + { + __IOM uint16_t DL; /*!< (@ 0x00000004) Mailbox DLC Register */ + + struct + { + __IOM uint16_t DLC : 4; /*!< [3..0] Data Length Code */ + uint16_t : 12; + } DL_b; + }; + + union + { + __IOM uint8_t D[8]; /*!< (@ 0x00000006) Mailbox Data Register */ + + struct + { + __IOM uint8_t DATA : 8; /*!< [7..0] DATA0 to DATA7 store the transmitted or received CAN + * message data. Transmission or reception starts from DATA0. + * The bit order on the CAN bus is MSB-first, and transmission + * or reception starts from bit 7 */ + } D_b[8]; + }; + + union + { + __IOM uint16_t TS; /*!< (@ 0x0000000E) Mailbox Timestamp Register */ + + struct + { + __IOM uint16_t TSL : 8; /*!< [7..0] Time Stamp Higher ByteBits TSL[7:0] store the counter + * value of the time stamp when received messages are stored + * in the mailbox. */ + __IOM uint16_t TSH : 8; /*!< [15..8] Time Stamp Lower ByteBits TSH[7:0] store the counter + * value of the time stamp when received messages are stored + * in the mailbox. */ + } TS_b; + }; +} R_CAN0_MB_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_ELC_ELSEGR [ELSEGR] (Event Link Software Event Generation Register) + */ +typedef struct +{ + union + { + __IOM uint8_t BY; /*!< (@ 0x00000000) Event Link Software Event Generation Register */ + + struct + { + __OM uint8_t SEG : 1; /*!< [0..0] Software Event Generation */ + uint8_t : 5; + __IOM uint8_t WE : 1; /*!< [6..6] SEG Bit Write Enable */ + __OM uint8_t WI : 1; /*!< [7..7] ELSEGR Register Write Disable */ + } BY_b; + }; + __IM uint8_t RESERVED; +} R_ELC_ELSEGR_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_ELC_ELSR [ELSR] (Event Link Setting Register [0..22]) + */ +typedef struct +{ + union + { + __IOM uint16_t HA; /*!< (@ 0x00000000) Event Link Setting Register */ + + struct + { + __IOM uint16_t ELS : 9; /*!< [8..0] Event Link Select */ + uint16_t : 7; + } HA_b; + }; + __IM uint16_t RESERVED; +} R_ELC_ELSR_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_IIC0_SAR [SAR] (Slave Address Registers) + */ +typedef struct +{ + union + { + __IOM uint8_t L; /*!< (@ 0x00000000) Slave Address Register L */ + + struct + { + __IOM uint8_t SVA : 8; /*!< [7..0] A slave address is set.7-Bit Address = SVA[7:1] 10-Bit + * Address = { SVA9,SVA8,SVA[7:0] } */ + } L_b; + }; + + union + { + __IOM uint8_t U; /*!< (@ 0x00000001) Slave Address Register U */ + + struct + { + __IOM uint8_t FS : 1; /*!< [0..0] 7-Bit/10-Bit Address Format Selection */ + __IOM uint8_t SVA8 : 1; /*!< [1..1] 10-Bit Address(bit8) */ + __IOM uint8_t SVA9 : 1; /*!< [2..2] 10-Bit Address(bit9) */ + uint8_t : 5; + } U_b; + }; +} R_IIC0_SAR_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_MPU_MMPU_MMPU_REGION [REGION] (Address Region registers) + */ +typedef struct +{ + union + { + __IOM uint16_t AC; /*!< (@ 0x00000000) Access Control Register */ + + struct + { + __IOM uint16_t ENABLE : 1; /*!< [0..0] Region enable */ + __IOM uint16_t RP : 1; /*!< [1..1] Read protection */ + __IOM uint16_t WP : 1; /*!< [2..2] Write protection */ + uint16_t : 13; + } AC_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint32_t S; /*!< (@ 0x00000004) Start Address Register */ + + struct + { + __IOM uint32_t MMPUS : 32; /*!< [31..0] Address where the region starts, for use in region determination. + * NOTE: Some low-order bits are fixed to 0. */ + } S_b; + }; + + union + { + __IOM uint32_t E; /*!< (@ 0x00000008) End Address Register */ + + struct + { + __IOM uint32_t MMPUE : 32; /*!< [31..0] Region end address registerAddress where the region + * end, for use in region determination. NOTE: Some low-order + * bits are fixed to 1. */ + } E_b; + }; + __IM uint32_t RESERVED1; +} R_MPU_MMPU_MMPU_REGION_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_MPU_MMPU_MMPU [MMPU] (Bus Master MPU Registers) + */ +typedef struct +{ + union + { + __IOM uint16_t CTL; /*!< (@ 0x00000000) Bus Master MPU Control Register */ + + struct + { + __IOM uint16_t ENABLE : 1; /*!< [0..0] Master Group enable */ + __IOM uint16_t OAD : 1; /*!< [1..1] Operation after detection */ + uint16_t : 6; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } CTL_b; + }; + __IM uint16_t RESERVED; + __IM uint32_t RESERVED1[63]; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t PT; /*!< (@ 0x00000102) Protection of Register */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of region register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } PT_b; + }; + __IM uint32_t RESERVED3[63]; + __IOM R_MPU_MMPU_MMPU_REGION_Type REGION[32]; /*!< (@ 0x00000200) Address Region registers */ +} R_MPU_MMPU_MMPU_Type; /*!< Size = 1024 (0x400) */ + +/** + * @brief R_MPU_SMPU_SMPU [SMPU] (Access Control Structure for MBIU) + */ +typedef struct +{ + union + { + __IOM uint16_t R; /*!< (@ 0x00000000) Access Control Register for MBIU */ + + struct + { + uint16_t : 2; + __IOM uint16_t RPGRPA : 1; /*!< [2..2] Master Group A Read protection */ + __IOM uint16_t WPGRPA : 1; /*!< [3..3] Master Group A Write protection */ + __IOM uint16_t RPGRPB : 1; /*!< [4..4] Master Group B Read protection */ + __IOM uint16_t WPGRPB : 1; /*!< [5..5] Master Group B Write protection */ + __IOM uint16_t RPGRPC : 1; /*!< [6..6] Master Group C Read protection */ + __IOM uint16_t WPGRPC : 1; /*!< [7..7] Master Group C Write protection */ + uint16_t : 4; + __IOM uint16_t RPFLI : 1; /*!< [12..12] Code Flash Memory Read Protection */ + __IOM uint16_t WPFLI : 1; /*!< [13..13] Code Flash Memory Write Protection (Note: This bit + * is read as 1. The write value should be 1.) */ + __IOM uint16_t RPSRAMHS : 1; /*!< [14..14] SRAMHS Read Protection */ + __IOM uint16_t WPSRAMHS : 1; /*!< [15..15] SRAMHS Write Protection */ + } R_b; + }; + __IM uint16_t RESERVED; +} R_MPU_SMPU_SMPU_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_MPU_SPMON_SP [SP] (Stack Pointer Monitor) + */ +typedef struct +{ + union + { + __IOM uint16_t OAD; /*!< (@ 0x00000000) Stack Pointer Monitor Operation After Detection + * Register */ + + struct + { + __IOM uint16_t OAD : 1; /*!< [0..0] Operation after detection */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } OAD_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t CTL; /*!< (@ 0x00000004) Stack Pointer Monitor Access Control Register */ + + struct + { + __IOM uint16_t ENABLE : 1; /*!< [0..0] Stack Pointer Monitor Enable */ + uint16_t : 7; + __IOM uint16_t ERROR : 1; /*!< [8..8] Stack Pointer Monitor Error Flag */ + uint16_t : 7; + } CTL_b; + }; + + union + { + __IOM uint16_t PT; /*!< (@ 0x00000006) Stack Pointer Monitor Protection Register */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register (MSPMPUAC, MSPMPUSA and MSPMPUSE) */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } PT_b; + }; + + union + { + __IOM uint32_t SA; /*!< (@ 0x00000008) Stack Pointer Monitor Start Address Register */ + + struct + { + __IOM uint32_t MSPMPUSA : 32; /*!< [31..0] Region start address register Address where the region + * starts, for use in region determination.NOTE: Range: 0x1FF00000-0x200FFFF + * The low-order 2 bits are fixed to 0. */ + } SA_b; + }; + + union + { + __IOM uint32_t EA; /*!< (@ 0x0000000C) Stack Pointer Monitor End Address Register */ + + struct + { + __IOM uint32_t MSPMPUEA : 32; /*!< [31..0] Region end address register Address where the region + * starts, for use in region determination.NOTE: Range: 0x1FF00003-0x200FFFF + * The low-order 2 bits are fixed to 1. */ + } EA_b; + }; +} R_MPU_SPMON_SP_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_OPAMP_AMP [AMP] (Input and Output Selectors for Operational Amplifier [0..3]) + */ +typedef struct +{ + __IOM uint8_t OS; /*!< (@ 0x00000000) Output Select Register */ + __IOM uint8_t MS; /*!< (@ 0x00000001) Minus Input Select Register */ + __IOM uint8_t PS; /*!< (@ 0x00000002) Plus Input Select Register */ +} R_OPAMP_AMP_Type; /*!< Size = 3 (0x3) */ + +/** + * @brief R_OPAMP_AMPOT [AMPOT] (Operational Amplifier n Offset Trimming Registers) + */ +typedef struct +{ + union + { + __IOM uint8_t P; /*!< (@ 0x00000000) Operational Amplifier n Offset Trimming Pch Register */ + + struct + { + __IOM uint8_t TRMP : 5; /*!< [4..0] AMPn input offset trimming Pch side */ + uint8_t : 3; + } P_b; + }; + + union + { + __IOM uint8_t N; /*!< (@ 0x00000001) Operational Amplifier n Offset Trimming Nch Register */ + + struct + { + __IOM uint8_t TRMN : 5; /*!< [4..0] AMPn input offset trimming Nch side */ + uint8_t : 3; + } N_b; + }; +} R_OPAMP_AMPOT_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_PFS_PORT_PIN [PIN] (Pin Function Selects) + */ +typedef struct +{ + union + { + union + { + __IOM uint32_t PmnPFS; /*!< (@ 0x00000000) Pin Function Control Register */ + + struct + { + __IOM uint32_t PODR : 1; /*!< [0..0] Port Output Data */ + __IM uint32_t PIDR : 1; /*!< [1..1] Port Input Data */ + __IOM uint32_t PDR : 1; /*!< [2..2] Port Direction */ + uint32_t : 1; + __IOM uint32_t PCR : 1; /*!< [4..4] Pull-up Control */ + __IOM uint32_t PIM : 1; /*!< [5..5] Port Input Mode Control */ + __IOM uint32_t NCODR : 1; /*!< [6..6] N-Channel Open Drain Control */ + uint32_t : 3; + __IOM uint32_t DSCR : 2; /*!< [11..10] Drive Strength Control Register */ + __IOM uint32_t EOFR : 2; /*!< [13..12] Event on Falling/Rising */ + __IOM uint32_t ISEL : 1; /*!< [14..14] IRQ input enable */ + __IOM uint32_t ASEL : 1; /*!< [15..15] Analog Input enable */ + __IOM uint32_t PMR : 1; /*!< [16..16] Port Mode Control */ + uint32_t : 7; + __IOM uint32_t PSEL : 5; /*!< [28..24] Port Function SelectThese bits select the peripheral + * function. For individual pin functions, see the MPC table */ + uint32_t : 3; + } PmnPFS_b; + }; + + struct + { + union + { + struct + { + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t PmnPFS_HA; /*!< (@ 0x00000002) Pin Function Control Register */ + + struct + { + __IOM uint16_t PODR : 1; /*!< [0..0] Port Output Data */ + __IM uint16_t PIDR : 1; /*!< [1..1] Port Input Data */ + __IOM uint16_t PDR : 1; /*!< [2..2] Port Direction */ + uint16_t : 1; + __IOM uint16_t PCR : 1; /*!< [4..4] Pull-up Control */ + __IOM uint16_t PIM : 1; /*!< [5..5] Port Input Mode Control */ + __IOM uint16_t NCODR : 1; /*!< [6..6] N-Channel Open Drain Control */ + uint16_t : 3; + __IOM uint16_t DSCR : 2; /*!< [11..10] Drive Strength Control Register */ + __IOM uint16_t EOFR : 2; /*!< [13..12] Event on Falling/Rising */ + __IOM uint16_t ISEL : 1; /*!< [14..14] IRQ input enable */ + __IOM uint16_t ASEL : 1; /*!< [15..15] Analog Input enable */ + } PmnPFS_HA_b; + }; + }; + + struct + { + __IM uint16_t RESERVED1; + __IM uint8_t RESERVED2; + + union + { + __IOM uint8_t PmnPFS_BY; /*!< (@ 0x00000003) Pin Function Control Register */ + + struct + { + __IOM uint8_t PODR : 1; /*!< [0..0] Port Output Data */ + __IM uint8_t PIDR : 1; /*!< [1..1] Port Input Data */ + __IOM uint8_t PDR : 1; /*!< [2..2] Port Direction */ + uint8_t : 1; + __IOM uint8_t PCR : 1; /*!< [4..4] Pull-up Control */ + __IOM uint8_t PIM : 1; /*!< [5..5] Port Input Mode Control */ + __IOM uint8_t NCODR : 1; /*!< [6..6] N-Channel Open Drain Control */ + uint8_t : 1; + } PmnPFS_BY_b; + }; + }; + }; + }; + }; +} R_PFS_PORT_PIN_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_PFS_PORT [PORT] (Port [0..14]) + */ +typedef struct +{ + __IOM R_PFS_PORT_PIN_Type PIN[16]; /*!< (@ 0x00000000) Pin Function Selects */ +} R_PFS_PORT_Type; /*!< Size = 64 (0x40) */ + +/** + * @brief R_PMISC_PMSAR [PMSAR] (Port Security Attribution Register) + */ +typedef struct +{ + __IOM uint16_t PMSAR; /*!< (@ 0x00000000) Port Security Attribution Register */ +} R_PMISC_PMSAR_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_RTC_RTCCR [RTCCR] (Time Capture Control Register) + */ +typedef struct +{ + union + { + __IOM uint8_t RTCCR; /*!< (@ 0x00000000) Time Capture Control Register */ + + struct + { + __IOM uint8_t TCCT : 2; /*!< [1..0] Time Capture Control */ + __IM uint8_t TCST : 1; /*!< [2..2] Time Capture Status */ + uint8_t : 1; + __IOM uint8_t TCNF : 2; /*!< [5..4] Time Capture Noise Filter Control */ + uint8_t : 1; + __IOM uint8_t TCEN : 1; /*!< [7..7] Time Capture Event Input Pin Enable */ + } RTCCR_b; + }; + __IM uint8_t RESERVED; +} R_RTC_RTCCR_Type; /*!< Size = 2 (0x2) */ + +/** + * @brief R_RTC_CP [CP] (Capture registers) + */ +typedef struct +{ + __IM uint8_t RESERVED[2]; + + union + { + union + { + __IM uint8_t RSEC; /*!< (@ 0x00000002) Second Capture Register */ + + struct + { + __IM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Capture Capture value for the ones place of + * seconds */ + __IM uint8_t SEC10 : 3; /*!< [6..4] 10-Second Capture Capture value for the tens place of + * seconds */ + uint8_t : 1; + } RSEC_b; + }; + + union + { + __IM uint8_t BCNT0; /*!< (@ 0x00000002) BCNT0 Capture Register */ + + struct + { + __IM uint8_t BCNT0CP : 8; /*!< [7..0] BCNT0CP is a read-only register that captures the BCNT0 + * value when a time capture event is detected. */ + } BCNT0_b; + }; + }; + __IM uint8_t RESERVED1; + + union + { + union + { + __IM uint8_t RMIN; /*!< (@ 0x00000004) Minute Capture Register */ + + struct + { + __IM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Capture Capture value for the ones place of + * minutes */ + __IM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Capture Capture value for the tens place of + * minutes */ + uint8_t : 1; + } RMIN_b; + }; + + union + { + __IM uint8_t BCNT1; /*!< (@ 0x00000004) BCNT1 Capture Register */ + + struct + { + __IM uint8_t BCNT1CP : 8; /*!< [7..0] BCNT1CP is a read-only register that captures the BCNT1 + * value when a time capture event is detected. */ + } BCNT1_b; + }; + }; + __IM uint8_t RESERVED2; + + union + { + union + { + __IM uint8_t RHR; /*!< (@ 0x00000006) Hour Capture Register */ + + struct + { + __IM uint8_t HR1 : 4; /*!< [3..0] 1-Minute Capture Capture value for the ones place of + * minutes */ + __IM uint8_t HR10 : 2; /*!< [5..4] 10-Minute Capture Capture value for the tens place of + * minutes */ + __IM uint8_t PM : 1; /*!< [6..6] A.m./p.m. select for time counter setting. */ + uint8_t : 1; + } RHR_b; + }; + + union + { + __IM uint8_t BCNT2; /*!< (@ 0x00000006) BCNT2 Capture Register */ + + struct + { + __IM uint8_t BCNT2CP : 8; /*!< [7..0] BCNT2CP is a read-only register that captures the BCNT2 + * value when a time capture event is detected. */ + } BCNT2_b; + }; + }; + __IM uint8_t RESERVED3[3]; + + union + { + union + { + __IM uint8_t RDAY; /*!< (@ 0x0000000A) Date Capture Register */ + + struct + { + __IM uint8_t DATE1 : 4; /*!< [3..0] 1-Day Capture Capture value for the ones place of minutes */ + __IM uint8_t DATE10 : 2; /*!< [5..4] 10-Day Capture Capture value for the tens place of minutes */ + uint8_t : 2; + } RDAY_b; + }; + + union + { + __IM uint8_t BCNT3; /*!< (@ 0x0000000A) BCNT3 Capture Register */ + + struct + { + __IM uint8_t BCNT3CP : 8; /*!< [7..0] BCNT3CP is a read-only register that captures the BCNT3 + * value when a time capture event is detected. */ + } BCNT3_b; + }; + }; + __IM uint8_t RESERVED4; + + union + { + __IM uint8_t RMON; /*!< (@ 0x0000000C) Month Capture Register */ + + struct + { + __IM uint8_t MON1 : 4; /*!< [3..0] 1-Month Capture Capture value for the ones place of months */ + __IM uint8_t MON10 : 1; /*!< [4..4] 10-Month Capture Capture value for the tens place of + * months */ + uint8_t : 3; + } RMON_b; + }; + __IM uint8_t RESERVED5[3]; +} R_RTC_CP_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_USB_FS0_PIPE_TR [PIPE_TR] (Pipe Transaction Counter Registers) + */ +typedef struct +{ + union + { + __IOM uint16_t E; /*!< (@ 0x00000000) Pipe Transaction Counter Enable Register */ + + struct + { + uint16_t : 8; + __IOM uint16_t TRCLR : 1; /*!< [8..8] Transaction Counter Clear */ + __IOM uint16_t TRENB : 1; /*!< [9..9] Transaction Counter Enable */ + uint16_t : 6; + } E_b; + }; + + union + { + __IOM uint16_t N; /*!< (@ 0x00000002) Pipe Transaction Counter Register */ + + struct + { + __IOM uint16_t TRNCNT : 16; /*!< [15..0] Transaction Counter */ + } N_b; + }; +} R_USB_FS0_PIPE_TR_Type; /*!< Size = 4 (0x4) */ + +/** + * @brief R_AGTX0_AGT16_CTRL [CTRL] (CTRL) + */ +typedef struct +{ + union + { + __IOM uint8_t AGTCR; /*!< (@ 0x00000000) AGT Control Register */ + + struct + { + __IOM uint8_t TSTART : 1; /*!< [0..0] AGT count start */ + __IM uint8_t TCSTF : 1; /*!< [1..1] AGT count status flag */ + __OM uint8_t TSTOP : 1; /*!< [2..2] AGT count forced stop */ + uint8_t : 1; + __IOM uint8_t TEDGF : 1; /*!< [4..4] Active edge judgment flag */ + __IOM uint8_t TUNDF : 1; /*!< [5..5] Underflow flag */ + __IOM uint8_t TCMAF : 1; /*!< [6..6] Compare match A flag */ + __IOM uint8_t TCMBF : 1; /*!< [7..7] Compare match B flag */ + } AGTCR_b; + }; + + union + { + __IOM uint8_t AGTMR1; /*!< (@ 0x00000001) AGT Mode Register 1 */ + + struct + { + __IOM uint8_t TMOD : 3; /*!< [2..0] Operating mode */ + __IOM uint8_t TEDGPL : 1; /*!< [3..3] Edge polarity */ + __IOM uint8_t TCK : 3; /*!< [6..4] Count source */ + uint8_t : 1; + } AGTMR1_b; + }; + + union + { + __IOM uint8_t AGTMR2; /*!< (@ 0x00000002) AGT Mode Register 2 */ + + struct + { + __IOM uint8_t CKS : 3; /*!< [2..0] AGTLCLK/AGTSCLK count source clock frequency division + * ratio */ + uint8_t : 4; + __IOM uint8_t LPM : 1; /*!< [7..7] Low Power Mode */ + } AGTMR2_b; + }; + + union + { + __IOM uint8_t AGTIOSEL_ALT; /*!< (@ 0x00000003) AGT Pin Select Register */ + + struct + { + __IOM uint8_t SEL : 2; /*!< [1..0] AGTIO pin select */ + uint8_t : 2; + __IOM uint8_t TIES : 1; /*!< [4..4] AGTIO input enable */ + uint8_t : 3; + } AGTIOSEL_ALT_b; + }; + + union + { + __IOM uint8_t AGTIOC; /*!< (@ 0x00000004) AGT I/O Control Register */ + + struct + { + __IOM uint8_t TEDGSEL : 1; /*!< [0..0] I/O polarity switchFunction varies depending on the operating + * mode. */ + uint8_t : 1; + __IOM uint8_t TOE : 1; /*!< [2..2] AGTOn output enable */ + uint8_t : 1; + __IOM uint8_t TIPF : 2; /*!< [5..4] Input filter */ + __IOM uint8_t TIOGT : 2; /*!< [7..6] Count control */ + } AGTIOC_b; + }; + + union + { + __IOM uint8_t AGTISR; /*!< (@ 0x00000005) AGT Event Pin Select Register */ + + struct + { + uint8_t : 2; + __IOM uint8_t EEPS : 1; /*!< [2..2] AGTEE polarty selection */ + uint8_t : 5; + } AGTISR_b; + }; + + union + { + __IOM uint8_t AGTCMSR; /*!< (@ 0x00000006) AGT Compare Match Function Select Register */ + + struct + { + __IOM uint8_t TCMEA : 1; /*!< [0..0] Compare match A register enable */ + __IOM uint8_t TOEA : 1; /*!< [1..1] AGTOA output enable */ + __IOM uint8_t TOPOLA : 1; /*!< [2..2] AGTOA polarity select */ + uint8_t : 1; + __IOM uint8_t TCMEB : 1; /*!< [4..4] Compare match B register enable */ + __IOM uint8_t TOEB : 1; /*!< [5..5] AGTOB output enable */ + __IOM uint8_t TOPOLB : 1; /*!< [6..6] AGTOB polarity select */ + uint8_t : 1; + } AGTCMSR_b; + }; + + union + { + __IOM uint8_t AGTIOSEL; /*!< (@ 0x00000007) AGT Pin Select Register */ + + struct + { + __IOM uint8_t SEL : 2; /*!< [1..0] AGTIO pin select */ + uint8_t : 2; + __IOM uint8_t TIES : 1; /*!< [4..4] AGTIO input enable */ + uint8_t : 3; + } AGTIOSEL_b; + }; +} R_AGTX0_AGT16_CTRL_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_AGTX0_AGT16 [AGT16] (AGT (16-bit) peripheral registers) + */ +typedef struct +{ + union + { + __IOM uint16_t AGT; /*!< (@ 0x00000000) AGT Counter Register */ + + struct + { + __IOM uint16_t AGT : 16; /*!< [15..0] 16bit counter and reload register. NOTE : When 1 is + * written to the TSTOP bit in the AGTCRn register, the 16-bit + * counter is forcibly stopped and set to FFFFH. */ + } AGT_b; + }; + + union + { + __IOM uint16_t AGTCMA; /*!< (@ 0x00000002) AGT Compare Match A Register */ + + struct + { + __IOM uint16_t AGTCMA : 16; /*!< [15..0] AGT Compare Match A data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCRn register, set to + * FFFFH */ + } AGTCMA_b; + }; + + union + { + __IOM uint16_t AGTCMB; /*!< (@ 0x00000004) AGT Compare Match B Register */ + + struct + { + __IOM uint16_t AGTCMB : 16; /*!< [15..0] AGT Compare Match B data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCR register, set to + * FFFFH */ + } AGTCMB_b; + }; + __IM uint16_t RESERVED; + __IOM R_AGTX0_AGT16_CTRL_Type CTRL; /*!< (@ 0x00000008) CTRL */ +} R_AGTX0_AGT16_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_AGTX0_AGT32 [AGT32] (AGTW (32-bit) peripheral registers) + */ +typedef struct +{ + union + { + __IOM uint32_t AGT; /*!< (@ 0x00000000) AGT 32-bit Counter Register */ + + struct + { + __IOM uint32_t AGT : 32; /*!< [31..0] 32bit counter and reload register. NOTE : When 1 is + * written to the TSTOP bit in the AGTCRn register, the 16-bit + * counter is forcibly stopped and set to FFFFH. */ + } AGT_b; + }; + + union + { + __IOM uint32_t AGTCMA; /*!< (@ 0x00000004) AGT Compare Match A Register */ + + struct + { + __IOM uint32_t AGTCMA : 32; /*!< [31..0] AGT Compare Match A data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCRn register, set to + * FFFFH */ + } AGTCMA_b; + }; + + union + { + __IOM uint32_t AGTCMB; /*!< (@ 0x00000008) AGT Compare Match B Register */ + + struct + { + __IOM uint32_t AGTCMB : 32; /*!< [31..0] AGT Compare Match B data is stored.NOTE : When 1 is + * written to the TSTOP bit in the AGTCR register, set to + * FFFFH */ + } AGTCMB_b; + }; + __IOM R_AGTX0_AGT16_CTRL_Type CTRL; /*!< (@ 0x0000000C) CTRL */ +} R_AGTX0_AGT32_Type; /*!< Size = 20 (0x14) */ + +/** @} */ /* End of group Device_Peripheral_clusters */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ R_ACMPHS0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief High-Speed Analog Comparator (R_ACMPHS0) + */ + +typedef struct /*!< (@ 0x40085000) R_ACMPHS0 Structure */ +{ + union + { + __IOM uint8_t CMPCTL; /*!< (@ 0x00000000) Comparator Control Register */ + + struct + { + __IOM uint8_t CINV : 1; /*!< [0..0] Comparator output polarity selection */ + __IOM uint8_t COE : 1; /*!< [1..1] Comparator output enable */ + __IOM uint8_t CSTEN : 1; /*!< [2..2] Interrupt Select */ + __IOM uint8_t CEG : 2; /*!< [4..3] Selection of valid edge (Edge selector) */ + __IOM uint8_t CDFS : 2; /*!< [6..5] Noise filter selection */ + __IOM uint8_t HCMPON : 1; /*!< [7..7] Comparator operation control */ + } CMPCTL_b; + }; + __IM uint8_t RESERVED[3]; + + union + { + __IOM uint8_t CMPSEL0; /*!< (@ 0x00000004) Comparator Input Select Register */ + + struct + { + __IOM uint8_t CMPSEL : 4; /*!< [3..0] Comparator Input Selection */ + uint8_t : 4; + } CMPSEL0_b; + }; + __IM uint8_t RESERVED1[3]; + + union + { + __IOM uint8_t CMPSEL1; /*!< (@ 0x00000008) Comparator Reference Voltage Select Register */ + + struct + { + __IOM uint8_t CRVS : 6; /*!< [5..0] Reference Voltage Selection */ + uint8_t : 2; + } CMPSEL1_b; + }; + __IM uint8_t RESERVED2[3]; + + union + { + __IM uint8_t CMPMON; /*!< (@ 0x0000000C) Comparator Output Monitor Register */ + + struct + { + __IM uint8_t CMPMON : 1; /*!< [0..0] Comparator output monitor */ + uint8_t : 7; + } CMPMON_b; + }; + __IM uint8_t RESERVED3[3]; + + union + { + __IOM uint8_t CPIOC; /*!< (@ 0x00000010) Comparator Output Control Register */ + + struct + { + __IOM uint8_t CPOE : 1; /*!< [0..0] Comparator output selection */ + uint8_t : 6; + __IOM uint8_t VREFEN : 1; /*!< [7..7] Internal Vref enable */ + } CPIOC_b; + }; + __IM uint8_t RESERVED4[47]; + + union + { + __IOM uint8_t CPINTCTL; /*!< (@ 0x00000040) Comparator Interrupt Control Register */ + + struct + { + __IOM uint8_t MSKE : 1; /*!< [0..0] Comparator Interrupt Periodic Mask Enable */ + uint8_t : 7; + } CPINTCTL_b; + }; + __IM uint8_t RESERVED5[3]; + + union + { + __IOM uint8_t CPMSKCTL; /*!< (@ 0x00000044) Comparator Interrupt Mask Control Register */ + + struct + { + __IOM uint8_t MSKSEL : 3; /*!< [2..0] Comparator Interrupt Periodic Mask Enable */ + uint8_t : 5; + } CPMSKCTL_b; + }; +} R_ACMPHS0_Type; /*!< Size = 69 (0x45) */ + +/* =========================================================================================================================== */ +/* ================ R_ACMPLP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Low-Power Analog Comparator (R_ACMPLP) + */ + +typedef struct /*!< (@ 0x40085E00) R_ACMPLP Structure */ +{ + union + { + __IOM uint8_t COMPMDR; /*!< (@ 0x00000000) ACMPLP Mode Setting Register */ + + struct + { + __IOM uint8_t C0ENB : 1; /*!< [0..0] ACMPLP0 Operation Enable */ + __IOM uint8_t C0WDE : 1; /*!< [1..1] ACMPLP0 Window Function Mode Enable */ + __IOM uint8_t C0VRF : 1; /*!< [2..2] ACMPLP0 Reference Voltage Selection */ + __IM uint8_t C0MON : 1; /*!< [3..3] ACMPLP0 Monitor Flag */ + __IOM uint8_t C1ENB : 1; /*!< [4..4] ACMPLP1 Operation Enable */ + __IOM uint8_t C1WDE : 1; /*!< [5..5] ACMPLP1 Window Function Mode Enable */ + __IOM uint8_t C1VRF : 1; /*!< [6..6] ACMPLP1 Reference Voltage Selection */ + __IM uint8_t C1MON : 1; /*!< [7..7] ACMPLP1 Monitor Flag */ + } COMPMDR_b; + }; + + union + { + __IOM uint8_t COMPFIR; /*!< (@ 0x00000001) ACMPLP Filter Control Register */ + + struct + { + __IOM uint8_t C0FCK : 2; /*!< [1..0] ACMPLP0 Filter Select */ + __IOM uint8_t C0EPO : 1; /*!< [2..2] ACMPLP0 Edge Polarity Switching */ + __IOM uint8_t C0EDG : 1; /*!< [3..3] ACMPLP0 Edge Detection Selection */ + __IOM uint8_t C1FCK : 2; /*!< [5..4] ACMPLP1 Filter Select */ + __IOM uint8_t C1EPO : 1; /*!< [6..6] ACMPLP1 Edge Polarity Switching */ + __IOM uint8_t C1EDG : 1; /*!< [7..7] ACMPLP1 Edge Detection Selection */ + } COMPFIR_b; + }; + + union + { + __IOM uint8_t COMPOCR; /*!< (@ 0x00000002) ACMPLP Output Control Register */ + + struct + { + uint8_t : 1; + __IOM uint8_t C0OE : 1; /*!< [1..1] ACMPLP0 VCOUT Pin Output Enable */ + __IOM uint8_t C0OP : 1; /*!< [2..2] ACMPLP0 VCOUT Output Polarity Selection */ + uint8_t : 2; + __IOM uint8_t C1OE : 1; /*!< [5..5] ACMPLP1 VCOUT Pin Output Enable */ + __IOM uint8_t C1OP : 1; /*!< [6..6] ACMPLP1 VCOUT Output Polarity Selection */ + __IOM uint8_t SPDMD : 1; /*!< [7..7] ACMPLP0/ACMPLP1 Speed Selection */ + } COMPOCR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t COMPSEL0; /*!< (@ 0x00000004) Comparator Input Select Register */ + + struct + { + __IOM uint8_t IVCMP0 : 3; /*!< [2..0] ACMPLP0 Input (IVCMP0) Selection */ + uint8_t : 1; + __IOM uint8_t IVCMP1 : 3; /*!< [6..4] ACMPLP1 Input (IVCMP1) Selection */ + uint8_t : 1; + } COMPSEL0_b; + }; + + union + { + __IOM uint8_t COMPSEL1; /*!< (@ 0x00000005) Comparator Reference voltage Select Register */ + + struct + { + __IOM uint8_t IVREF0 : 3; /*!< [2..0] ACMPLP0 Reference Voltage (IVREF0) Selection */ + uint8_t : 1; + __IOM uint8_t IVREF1 : 3; /*!< [6..4] ACMPLP1 Reference Voltage(IVREF1) Selection */ + __IOM uint8_t C1VRF2 : 1; /*!< [7..7] ACMPLP1 Reference Voltage Selection */ + } COMPSEL1_b; + }; +} R_ACMPLP_Type; /*!< Size = 6 (0x6) */ + +/* =========================================================================================================================== */ +/* ================ R_ADC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief A/D Converter (R_ADC0) + */ + +typedef struct /*!< (@ 0x4005C000) R_ADC0 Structure */ +{ + union + { + __IOM uint16_t ADCSR; /*!< (@ 0x00000000) A/D Control Register */ + + struct + { + __IOM uint16_t DBLANS : 5; /*!< [4..0] Double Trigger Channel SelectThese bits select one analog + * input channel for double triggered operation. The setting + * is only effective while double trigger mode is selected. */ + uint16_t : 1; + __IOM uint16_t GBADIE : 1; /*!< [6..6] Group B Scan End Interrupt Enable */ + __IOM uint16_t DBLE : 1; /*!< [7..7] Double Trigger Mode Select */ + __IOM uint16_t EXTRG : 1; /*!< [8..8] Trigger Select */ + __IOM uint16_t TRGE : 1; /*!< [9..9] Trigger Start Enable */ + __IOM uint16_t ADHSC : 1; /*!< [10..10] A/D Conversion Operation Mode Select */ + uint16_t : 1; + __IOM uint16_t ADIE : 1; /*!< [12..12] Scan End Interrupt Enable */ + __IOM uint16_t ADCS : 2; /*!< [14..13] Scan Mode Select */ + __IOM uint16_t ADST : 1; /*!< [15..15] A/D Conversion Start */ + } ADCSR_b; + }; + + union + { + __IOM uint8_t ADREF; /*!< (@ 0x00000002) A/D status register */ + + struct + { + __IOM uint8_t ADF : 1; /*!< [0..0] Scanning end flag bitThis bit is a status bit that becomes + * '1' while scanning. */ + uint8_t : 6; + __IM uint8_t ADSCACT : 1; /*!< [7..7] Scanning status bit */ + } ADREF_b; + }; + + union + { + __IOM uint8_t ADEXREF; /*!< (@ 0x00000003) A/D enhancing status register */ + + struct + { + __IOM uint8_t GBADF : 1; /*!< [0..0] Group B scanning end flag bit. */ + uint8_t : 7; + } ADEXREF_b; + }; + + union + { + __IOM uint16_t ADANSA[2]; /*!< (@ 0x00000004) A/D Channel Select Register */ + + struct + { + __IOM uint16_t ANSA0 : 1; /*!< [0..0] AN Input Select */ + __IOM uint16_t ANSA1 : 1; /*!< [1..1] AN Input Select */ + __IOM uint16_t ANSA2 : 1; /*!< [2..2] AN Input Select */ + __IOM uint16_t ANSA3 : 1; /*!< [3..3] AN Input Select */ + __IOM uint16_t ANSA4 : 1; /*!< [4..4] AN Input Select */ + __IOM uint16_t ANSA5 : 1; /*!< [5..5] AN Input Select */ + __IOM uint16_t ANSA6 : 1; /*!< [6..6] AN Input Select */ + __IOM uint16_t ANSA7 : 1; /*!< [7..7] AN Input Select */ + __IOM uint16_t ANSA8 : 1; /*!< [8..8] AN Input Select */ + __IOM uint16_t ANSA9 : 1; /*!< [9..9] AN Input Select */ + __IOM uint16_t ANSA10 : 1; /*!< [10..10] AN Input Select */ + __IOM uint16_t ANSA11 : 1; /*!< [11..11] AN Input Select */ + __IOM uint16_t ANSA12 : 1; /*!< [12..12] AN Input Select */ + __IOM uint16_t ANSA13 : 1; /*!< [13..13] AN Input Select */ + __IOM uint16_t ANSA14 : 1; /*!< [14..14] AN Input Select */ + __IOM uint16_t ANSA15 : 1; /*!< [15..15] AN Input Select */ + } ADANSA_b[2]; + }; + + union + { + __IOM uint16_t ADADS[2]; /*!< (@ 0x00000008) A/D-Converted Value Addition/Average Channel + * Select Register */ + + struct + { + __IOM uint16_t ADS0 : 1; /*!< [0..0] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS1 : 1; /*!< [1..1] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS2 : 1; /*!< [2..2] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS3 : 1; /*!< [3..3] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS4 : 1; /*!< [4..4] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS5 : 1; /*!< [5..5] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS6 : 1; /*!< [6..6] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS7 : 1; /*!< [7..7] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS8 : 1; /*!< [8..8] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS9 : 1; /*!< [9..9] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS10 : 1; /*!< [10..10] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS11 : 1; /*!< [11..11] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS12 : 1; /*!< [12..12] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS13 : 1; /*!< [13..13] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS14 : 1; /*!< [14..14] A/D-Converted Value Addition/Average Channel Select */ + __IOM uint16_t ADS15 : 1; /*!< [15..15] A/D-Converted Value Addition/Average Channel Select */ + } ADADS_b[2]; + }; + + union + { + __IOM uint8_t ADADC; /*!< (@ 0x0000000C) A/D-Converted Value Addition/Average Count Select + * Register */ + + struct + { + __IOM uint8_t ADC : 3; /*!< [2..0] Addition frequency selection bit.NOTE: AVEE bit is valid + * at the only setting of ADC[2:0] bits = 001b or 011b. When + * average mode is selected by setting the ADADC.AVEE bit + * to 1, do not set the addition count to three times (ADADC.ADC[2:0] + * = 010b) */ + uint8_t : 4; + __IOM uint8_t AVEE : 1; /*!< [7..7] Average Mode Enable. NOTE:When average mode is deselected + * by setting the ADADC.AVEE bit to 0, set the addition count + * to 1, 2, 3, 4 or 16-time conversion. 16-time conversion + * can only be used with 12-bit accuracy selected. NOTE: AVEE + * bit is valid at the only setting of ADC[2:0] bits = 001b + * or 011b. When average mode is selected by setting the ADADC.AVEE + * bit to 1, do not set the addition count to three times + * (ADADC.ADC[2:0] = 010b) */ + } ADADC_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t ADCER; /*!< (@ 0x0000000E) A/D Control Extended Register */ + + struct + { + uint16_t : 1; + __IOM uint16_t ADPRC : 2; /*!< [2..1] A/D Conversion Accuracy Specify */ + uint16_t : 1; + __IOM uint16_t DCE : 1; /*!< [4..4] Discharge Enable */ + __IOM uint16_t ACE : 1; /*!< [5..5] A/D Data Register Automatic Clearing Enable */ + uint16_t : 2; + __IOM uint16_t DIAGVAL : 2; /*!< [9..8] Self-Diagnosis Conversion Voltage Select */ + __IOM uint16_t DIAGLD : 1; /*!< [10..10] Self-Diagnosis Mode Select */ + __IOM uint16_t DIAGM : 1; /*!< [11..11] Self-Diagnosis Enable */ + uint16_t : 2; + __IOM uint16_t ADINV : 1; /*!< [14..14] Single-Ended Input A/D Converted Data Inversion Select */ + __IOM uint16_t ADRFMT : 1; /*!< [15..15] A/D Data Register Format Select */ + } ADCER_b; + }; + + union + { + __IOM uint16_t ADSTRGR; /*!< (@ 0x00000010) A/D Conversion Start Trigger Select Register */ + + struct + { + __IOM uint16_t TRSB : 6; /*!< [5..0] A/D Conversion Start Trigger Select for Group BSelect + * the A/D conversion start trigger for group B in group scan + * mode. */ + uint16_t : 2; + __IOM uint16_t TRSA : 6; /*!< [13..8] A/D Conversion Start Trigger SelectSelect the A/D conversion + * start trigger in single scan mode and continuous mode. + * In group scan mode, the A/D conversion start trigger for + * group A is selected. */ + uint16_t : 2; + } ADSTRGR_b; + }; + + union + { + __IOM uint16_t ADEXICR; /*!< (@ 0x00000012) A/D Conversion Extended Input Control Register */ + + struct + { + __IOM uint16_t TSSAD : 1; /*!< [0..0] Temperature Sensor Output A/D converted Value Addition/Average + * Mode Select */ + __IOM uint16_t OCSAD : 1; /*!< [1..1] Internal Reference Voltage A/D converted Value Addition/Average + * Mode Select */ + uint16_t : 6; + __IOM uint16_t TSSA : 1; /*!< [8..8] Temperature Sensor Output A/D Conversion Select */ + __IOM uint16_t OCSA : 1; /*!< [9..9] Internal Reference Voltage A/D Conversion Select */ + __IOM uint16_t TSSB : 1; /*!< [10..10] Temperature Sensor Output A/D Conversion Select for + * Group B in group scan mode. */ + __IOM uint16_t OCSB : 1; /*!< [11..11] Internal Reference Voltage A/D Conversion Select for + * Group B in group scan mode. */ + uint16_t : 2; + __IOM uint16_t EXSEL : 1; /*!< [14..14] Extended Analog Input Select */ + __IOM uint16_t EXOEN : 1; /*!< [15..15] Extended Analog Output Control */ + } ADEXICR_b; + }; + + union + { + __IOM uint16_t ADANSB[2]; /*!< (@ 0x00000014) A/D Channel Select Register B */ + + struct + { + __IOM uint16_t ANSB0 : 1; /*!< [0..0] AN Input Select */ + __IOM uint16_t ANSB1 : 1; /*!< [1..1] AN Input Select */ + __IOM uint16_t ANSB2 : 1; /*!< [2..2] AN Input Select */ + __IOM uint16_t ANSB3 : 1; /*!< [3..3] AN Input Select */ + __IOM uint16_t ANSB4 : 1; /*!< [4..4] AN Input Select */ + __IOM uint16_t ANSB5 : 1; /*!< [5..5] AN Input Select */ + __IOM uint16_t ANSB6 : 1; /*!< [6..6] AN Input Select */ + __IOM uint16_t ANSB7 : 1; /*!< [7..7] AN Input Select */ + __IOM uint16_t ANSB8 : 1; /*!< [8..8] AN Input Select */ + __IOM uint16_t ANSB9 : 1; /*!< [9..9] AN Input Select */ + __IOM uint16_t ANSB10 : 1; /*!< [10..10] AN Input Select */ + __IOM uint16_t ANSB11 : 1; /*!< [11..11] AN Input Select */ + __IOM uint16_t ANSB12 : 1; /*!< [12..12] AN Input Select */ + __IOM uint16_t ANSB13 : 1; /*!< [13..13] AN Input Select */ + __IOM uint16_t ANSB14 : 1; /*!< [14..14] AN Input Select */ + __IOM uint16_t ANSB15 : 1; /*!< [15..15] AN Input Select */ + } ADANSB_b[2]; + }; + + union + { + __IM uint16_t ADDBLDR; /*!< (@ 0x00000018) A/D Data Duplication Register */ + + struct + { + __IM uint16_t ADDBLDR : 16; /*!< [15..0] This is a 16-bit read-only register for storing the + * result of A/D conversion in response to the second trigger + * in double trigger mode. */ + } ADDBLDR_b; + }; + + union + { + __IM uint16_t ADTSDR; /*!< (@ 0x0000001A) A/D Temperature Sensor Data Register */ + + struct + { + __IM uint16_t ADTSDR : 16; /*!< [15..0] This is a 16-bit read-only register for storing the + * A/D conversion result of temperature sensor output. */ + } ADTSDR_b; + }; + + union + { + __IM uint16_t ADOCDR; /*!< (@ 0x0000001C) A/D Internal Reference Voltage Data Register */ + + struct + { + __IM uint16_t ADOCDR : 16; /*!< [15..0] This is a 16-bit read-only register for storing the + * A/D result of internal reference voltage. */ + } ADOCDR_b; + }; + + union + { + union + { + __IM uint16_t ADRD_RIGHT; /*!< (@ 0x0000001E) A/D Self-Diagnosis Data Register Right Justified */ + + struct + { + __IM uint16_t AD : 14; /*!< [13..0] A/D-converted value (right-justified). The format for + * data determine ADCER.ADRFMT and ADCER.ADPRC. */ + __IM uint16_t DIAGST : 2; /*!< [15..14] Self-Diagnosis Status */ + } ADRD_RIGHT_b; + }; + + union + { + __IM uint16_t ADRD_LEFT; /*!< (@ 0x0000001E) A/D Self-Diagnosis Data Register Left Justified */ + + struct + { + __IM uint16_t DIAGST : 2; /*!< [1..0] Self-Diagnosis Status */ + __IM uint16_t AD : 14; /*!< [15..2] A/D-converted value (left-justified). The format for + * data determine ADCER.ADRFMT and ADCER.ADPRC. */ + } ADRD_LEFT_b; + }; + }; + + union + { + __IM uint16_t ADDR[29]; /*!< (@ 0x00000020) A/D Data Register */ + + struct + { + __IM uint16_t ADDR : 16; /*!< [15..0] The ADDR register is a 16-bit read-only registers for + * storing the result of A/D conversion. */ + } ADDR_b[29]; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; + __IM uint16_t RESERVED3; + + union + { + __IOM uint8_t ADAMPOFF; /*!< (@ 0x00000062) A/D RRAMP off state register */ + + struct + { + __IOM uint8_t OPOFF : 8; /*!< [7..0] OPOFF */ + } ADAMPOFF_b; + }; + + union + { + __IOM uint8_t ADTSTPR; /*!< (@ 0x00000063) A/D Test Protecting Release Register */ + + struct + { + __IOM uint8_t PRO : 1; /*!< [0..0] Test register protecting bit. */ + __IOM uint8_t B0WI : 1; /*!< [1..1] Bit 0 writing permission bit. */ + uint8_t : 6; + } ADTSTPR_b; + }; + + union + { + __IOM uint16_t ADDDACER; /*!< (@ 0x00000064) A/D RRAMP Discharge Period Register */ + + struct + { + __IOM uint16_t WRION : 5; /*!< [4..0] WRION */ + uint16_t : 3; + __IOM uint16_t WRIOFF : 5; /*!< [12..8] WRIOFF */ + uint16_t : 2; + __IOM uint16_t ADHS : 1; /*!< [15..15] ADHS */ + } ADDDACER_b; + }; + + union + { + __IOM uint16_t ADSHCR; /*!< (@ 0x00000066) A/D Sample and Hold Circuit Control Register */ + + struct + { + __IOM uint16_t SSTSH : 8; /*!< [7..0] Channel-Dedicated Sample-and-Hold Circuit Sampling Time + * Setting Set the sampling time (4 to 255 states) */ + __IOM uint16_t SHANS0 : 1; /*!< [8..8] AN000 sample-and-hold circuit Select */ + __IOM uint16_t SHANS1 : 1; /*!< [9..9] AN001 sample-and-hold circuit Select */ + __IOM uint16_t SHANS2 : 1; /*!< [10..10] AN002 sample-and-hold circuit Select */ + uint16_t : 5; + } ADSHCR_b; + }; + + union + { + __IOM uint16_t ADEXTSTR; /*!< (@ 0x00000068) A/D Enhancing Test Register */ + + struct + { + __IOM uint16_t SHTEST : 3; /*!< [2..0] Test mode bit for S&H circuit.Test mode bit of S&H circuit + * only for channel. */ + uint16_t : 1; + __IOM uint16_t SWTST : 2; /*!< [5..4] Test selection bit for pressure switch. */ + uint16_t : 2; + __IOM uint16_t SHTRM : 2; /*!< [9..8] Current adjustment trim bit for S&H circuit.Trim bit + * for adjustment to hardening of process. */ + uint16_t : 1; + __IOM uint16_t ADTRM3 : 1; /*!< [11..11] Trim bit 3 for A/D hard macro.3bit Flash comparator + * power save bit for A/D hard macro to hardening of process. */ + __IOM uint16_t ADTRM2 : 2; /*!< [13..12] Trim bit 2 for A/D hard macro.Bias adjustment trim + * bit for A/D hard macro to hardening of process. */ + __IOM uint16_t ADTRM1 : 2; /*!< [15..14] Trim bit 1 for A/D hard macro.Timing adjustment trim + * bit for A/D hard macro to hardening of process. */ + } ADEXTSTR_b; + }; + + union + { + __IOM uint16_t ADTSTRA; /*!< (@ 0x0000006A) A/D Test Register A */ + + struct + { + __IOM uint16_t ATBUSSEL : 1; /*!< [0..0] Analog test bus selection bit. */ + __IOM uint16_t TSTSWREF : 3; /*!< [3..1] Pressure switch refreshing setting bit for S&H circuit + * amplifier test.Refreshing the pressure switch that opens + * for the DAC output voltage charge period when the amplifier + * of the S&H circuit is tested only for the channel is set. */ + uint16_t : 1; + __IOM uint16_t OCSW : 1; /*!< [5..5] Internal reference voltage analog switch test control + * bit. */ + __IOM uint16_t TSSW : 1; /*!< [6..6] Temperature sensor output analogue switch test control + * bit */ + uint16_t : 1; + __IOM uint16_t ADTEST_AD : 4; /*!< [11..8] Test bit for A/D analog module Bit for test of A/D analog + * module Details are described to the bit explanation. */ + __IOM uint16_t ADTEST_IO : 4; /*!< [15..12] Test bit for analog I/ODetails are described to the + * bit explanation. */ + } ADTSTRA_b; + }; + + union + { + __IOM uint16_t ADTSTRB; /*!< (@ 0x0000006C) A/D Test Register B */ + + struct + { + __IOM uint16_t ADVAL : 15; /*!< [14..0] Signal input bit bit14-0 for A/D analog module test.It + * corresponds to ADVAL 14:0 input of A/D analog module. */ + uint16_t : 1; + } ADTSTRB_b; + }; + + union + { + __IOM uint16_t ADTSTRC; /*!< (@ 0x0000006E) A/D Test Register C */ + + struct + { + __IOM uint16_t ADMD : 8; /*!< [7..0] Bit for A/D analog module test.ADMODE 6:0 input of A/D + * analog module. */ + uint16_t : 4; + __IOM uint16_t SYNCERR : 1; /*!< [12..12] Synchronous analog to digital conversion error bit. */ + uint16_t : 3; + } ADTSTRC_b; + }; + + union + { + __IOM uint16_t ADTSTRD; /*!< (@ 0x00000070) A/D Test Register D */ + + struct + { + __IOM uint16_t ADVAL16 : 1; /*!< [0..0] Signal input bit bit16 for A/D analog module test.It + * corresponds to ADVAL 16 input of A/D analog module. */ + uint16_t : 15; + } ADTSTRD_b; + }; + + union + { + __IOM uint16_t ADSWTSTR0; /*!< (@ 0x00000072) A/D Channel Switch Test Control Register 0 */ + + struct + { + __IOM uint16_t CHSW00 : 1; /*!< [0..0] Channel switch test control bit. */ + __IOM uint16_t CHSW01 : 1; /*!< [1..1] Channel switch test control bit. */ + __IOM uint16_t CHSW02 : 1; /*!< [2..2] Channel switch test control bit. */ + __IOM uint16_t CHSW03 : 1; /*!< [3..3] Channel switch test control bit. */ + __IOM uint16_t CHSW04 : 1; /*!< [4..4] Channel switch test control bit. */ + __IOM uint16_t CHSW05 : 1; /*!< [5..5] Channel switch test control bit. */ + uint16_t : 10; + } ADSWTSTR0_b; + }; + + union + { + __IOM uint16_t ADSWTSTR1; /*!< (@ 0x00000074) A/D Channel Switch Test Control Register 1 */ + + struct + { + __IOM uint16_t CHSW16 : 1; /*!< [0..0] Channel switch test control bit. */ + __IOM uint16_t CHSW17 : 1; /*!< [1..1] Channel switch test control bit. */ + __IOM uint16_t CHSW18 : 1; /*!< [2..2] Channel switch test control bit. */ + __IOM uint16_t CHSW19 : 1; /*!< [3..3] Channel switch test control bit. */ + __IOM uint16_t CHSW20 : 1; /*!< [4..4] Channel switch test control bit. */ + __IOM uint16_t CHSW21 : 1; /*!< [5..5] Channel switch test control bit. */ + uint16_t : 10; + } ADSWTSTR1_b; + }; + + union + { + __IOM uint16_t ADSWTSTR2; /*!< (@ 0x00000076) A/D Channel Switch Test Control Register 2 */ + + struct + { + __IOM uint16_t EX0SW : 1; /*!< [0..0] Test control of 0 enhancing input channel switches bit + * (ANEX0 switch) */ + __IOM uint16_t EX1SW : 1; /*!< [1..1] Test control of one enhancing input channel switch bit + * (ANEX1 switch). */ + uint16_t : 2; + __IOM uint16_t SHBYPS0 : 1; /*!< [4..4] S&H circuit by-pass switch control bit 0. */ + __IOM uint16_t SHBYPS1 : 1; /*!< [5..5] S&H circuit by-pass switch control bit 1. */ + __IOM uint16_t SHBYPS2 : 1; /*!< [6..6] S&H circuit by-pass switch control bit 2. */ + uint16_t : 1; + __IOM uint16_t GRP0SW : 1; /*!< [8..8] Test control of 0 group switches bit. */ + __IOM uint16_t GRP1SW : 1; /*!< [9..9] Test control of one group switch bit. */ + __IOM uint16_t GRP2SW : 1; /*!< [10..10] Test control of two group switches bit */ + __IOM uint16_t GRP3SW : 1; /*!< [11..11] Test control of two group switches bit */ + __IOM uint16_t GRPEX1SW : 1; /*!< [12..12] Switch test control bit of enhancing analog ANEX1 */ + uint16_t : 3; + } ADSWTSTR2_b; + }; + __IM uint16_t RESERVED4; + + union + { + __IOM uint8_t ADDISCR; /*!< (@ 0x0000007A) A/D Disconnection Detection Control Register */ + + struct + { + __IOM uint8_t ADNDIS : 4; /*!< [3..0] The charging time */ + __IOM uint8_t CHARGE : 1; /*!< [4..4] Selection of Precharge or Discharge */ + uint8_t : 3; + } ADDISCR_b; + }; + + union + { + __IOM uint8_t ADSWCR; /*!< (@ 0x0000007B) A/D Pressure Switch Control Register */ + + struct + { + __IOM uint8_t ADSWREF : 3; /*!< [2..0] These bits are read as 0. The write value should be 0.Refreshing + * the pressure switch in A/D analog module is set. */ + uint8_t : 1; + __IOM uint8_t SHSWREF : 3; /*!< [6..4] S&H Boost Switch Refresh Interval Setting */ + uint8_t : 1; + } ADSWCR_b; + }; + + union + { + __IOM uint8_t ADSHMSR; /*!< (@ 0x0000007C) A/D Sample and Hold Operation Mode Select Register */ + + struct + { + __IOM uint8_t SHMD : 1; /*!< [0..0] Channel-Dedicated Sample-and-Hold Circuit Operation Mode + * Select */ + uint8_t : 7; + } ADSHMSR_b; + }; + + union + { + __IOM uint8_t ADICR; /*!< (@ 0x0000007D) A/D Interrupt Control Register */ + + struct + { + __IOM uint8_t ADIC : 2; /*!< [1..0] A/D Interrupt Control */ + uint8_t : 6; + } ADICR_b; + }; + + union + { + __IOM uint8_t ADACSR; /*!< (@ 0x0000007E) A/D Conversion Operation Mode Select Register */ + + struct + { + uint8_t : 1; + __IOM uint8_t ADSAC : 1; /*!< [1..1] Successive Approximation Control Setting */ + uint8_t : 6; + } ADACSR_b; + }; + __IM uint8_t RESERVED5; + + union + { + __IOM uint16_t ADGSPCR; /*!< (@ 0x00000080) A/D Group Scan Priority Control Register */ + + struct + { + __IOM uint16_t PGS : 1; /*!< [0..0] Group A priority control setting bit.Note: When the PGS + * bit is to be set to 1, the ADCSR.ADCS[1:0] bits must be + * set to 01b (group scan mode). If the bits are set to any + * other values, proper operation is not guaranteed. */ + __IOM uint16_t GBRSCN : 1; /*!< [1..1] Group B Restart Setting(Enabled only when PGS = 1. Reserved + * when PGS = 0.) */ + uint16_t : 6; + __IOM uint16_t GBEXTRG : 1; /*!< [8..8] External trigger selection bit for group B. */ + uint16_t : 6; + __IOM uint16_t GBRP : 1; /*!< [15..15] Group B Single Scan Continuous Start(Enabled only when + * PGS = 1. Reserved when PGS = 0.)Note: When the GBRP bit + * has been set to 1, single scan is performed continuously + * for group B regardless of the setting of the GBRSCN bit. */ + } ADGSPCR_b; + }; + + union + { + __IM uint16_t ADGSCS; /*!< (@ 0x00000082) A/D Conversion Channel Status Register (for Group + * Scan) */ + + struct + { + __IM uint16_t CHSELGB : 8; /*!< [7..0] Channel status of Group B scan */ + __IM uint16_t CHSELGA : 8; /*!< [15..8] Channel status of Group A scan */ + } ADGSCS_b; + }; + + union + { + __IM uint16_t ADDBLDRA; /*!< (@ 0x00000084) A/D Data Duplexing Register A */ + + struct + { + __IM uint16_t ADDBLDRA : 16; /*!< [15..0] This register is a 16-bit read-only registers for storing + * the result of A/D conversion in response to the respective + * triggers during extended operation in double trigger mode. */ + } ADDBLDRA_b; + }; + + union + { + __IM uint16_t ADDBLDRB; /*!< (@ 0x00000086) A/D Data Duplexing Register B */ + + struct + { + __IM uint16_t ADDBLDRB : 16; /*!< [15..0] This register is a 16-bit read-only registers for storing + * the result of A/D conversion in response to the respective + * triggers during extended operation in double trigger mode. */ + } ADDBLDRB_b; + }; + + union + { + __IOM uint8_t ADSER; /*!< (@ 0x00000088) A/D Sampling Extension Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t SMPEX : 1; /*!< [7..7] Sampling extension control */ + } ADSER_b; + }; + __IM uint8_t RESERVED6; + + union + { + __IOM uint8_t ADHVREFCNT; /*!< (@ 0x0000008A) A/D High-Potential/Low-Potential Reference Voltage + * Control Register */ + + struct + { + __IOM uint8_t HVSEL : 2; /*!< [1..0] High-Potential Reference Voltage Select */ + uint8_t : 2; + __IOM uint8_t LVSEL : 1; /*!< [4..4] Low-Potential Reference Voltage Select */ + uint8_t : 2; + __IOM uint8_t ADSLP : 1; /*!< [7..7] Sleep */ + } ADHVREFCNT_b; + }; + __IM uint8_t RESERVED7; + + union + { + __IM uint8_t ADWINMON; /*!< (@ 0x0000008C) A/D Compare Function Window A/B Status Monitor + * Register */ + + struct + { + __IM uint8_t MONCOMB : 1; /*!< [0..0] Combination result monitorThis bit indicates the combination + * result.This bit is valid when both window A operation and + * window B operation are enabled. */ + uint8_t : 3; + __IM uint8_t MONCMPA : 1; /*!< [4..4] Comparison Result Monitor A */ + __IM uint8_t MONCMPB : 1; /*!< [5..5] Comparison Result Monitor B */ + uint8_t : 2; + } ADWINMON_b; + }; + __IM uint8_t RESERVED8; + __IM uint16_t RESERVED9; + + union + { + __IOM uint16_t ADCMPCR; /*!< (@ 0x00000090) A/D Compare Function Control Register */ + + struct + { + __IOM uint16_t CMPAB : 2; /*!< [1..0] Window A/B Composite Conditions SettingNOTE: These bits + * are valid when both window A and window B are enabled (CMPAE + * = 1 and CMPBE = 1). */ + uint16_t : 7; + __IOM uint16_t CMPBE : 1; /*!< [9..9] Compare Window B Operation Enable */ + uint16_t : 1; + __IOM uint16_t CMPAE : 1; /*!< [11..11] Compare Window A Operation Enable */ + uint16_t : 1; + __IOM uint16_t CMPBIE : 1; /*!< [13..13] Compare B Interrupt Enable */ + __IOM uint16_t WCMPE : 1; /*!< [14..14] Window Function Setting */ + __IOM uint16_t CMPAIE : 1; /*!< [15..15] Compare A Interrupt Enable */ + } ADCMPCR_b; + }; + + union + { + __IOM uint8_t ADCMPANSER; /*!< (@ 0x00000092) A/D Compare Function Window A Extended Input + * Select Register */ + + struct + { + __IOM uint8_t CMPTSA : 1; /*!< [0..0] Temperature sensor output Compare selection bit. */ + __IOM uint8_t CMPOCA : 1; /*!< [1..1] Internal reference voltage Compare selection bit. */ + uint8_t : 6; + } ADCMPANSER_b; + }; + + union + { + __IOM uint8_t ADCMPLER; /*!< (@ 0x00000093) A/D Compare Function Window A Extended Input + * Comparison Condition Setting Register */ + + struct + { + __IOM uint8_t CMPLTSA : 1; /*!< [0..0] Compare Window A Temperature Sensor Output Comparison + * Condition Select */ + __IOM uint8_t CMPLOCA : 1; /*!< [1..1] Compare Window A Internal Reference Voltage ComparisonCondition + * Select */ + uint8_t : 6; + } ADCMPLER_b; + }; + + union + { + __IOM uint16_t ADCMPANSR[2]; /*!< (@ 0x00000094) A/D Compare Function Window A Channel Select + * Register */ + + struct + { + __IOM uint16_t CMPCHA0 : 1; /*!< [0..0] AN Input Select */ + __IOM uint16_t CMPCHA1 : 1; /*!< [1..1] AN Input Select */ + __IOM uint16_t CMPCHA2 : 1; /*!< [2..2] AN Input Select */ + __IOM uint16_t CMPCHA3 : 1; /*!< [3..3] AN Input Select */ + __IOM uint16_t CMPCHA4 : 1; /*!< [4..4] AN Input Select */ + __IOM uint16_t CMPCHA5 : 1; /*!< [5..5] AN Input Select */ + __IOM uint16_t CMPCHA6 : 1; /*!< [6..6] AN Input Select */ + __IOM uint16_t CMPCHA7 : 1; /*!< [7..7] AN Input Select */ + __IOM uint16_t CMPCHA8 : 1; /*!< [8..8] AN Input Select */ + __IOM uint16_t CMPCHA9 : 1; /*!< [9..9] AN Input Select */ + __IOM uint16_t CMPCHA10 : 1; /*!< [10..10] AN Input Select */ + __IOM uint16_t CMPCHA11 : 1; /*!< [11..11] AN Input Select */ + __IOM uint16_t CMPCHA12 : 1; /*!< [12..12] AN Input Select */ + __IOM uint16_t CMPCHA13 : 1; /*!< [13..13] AN Input Select */ + __IOM uint16_t CMPCHA14 : 1; /*!< [14..14] AN Input Select */ + __IOM uint16_t CMPCHA15 : 1; /*!< [15..15] AN Input Select */ + } ADCMPANSR_b[2]; + }; + + union + { + __IOM uint16_t ADCMPLR[2]; /*!< (@ 0x00000098) A/D Compare Function Window A Comparison Condition + * Setting Register */ + + struct + { + __IOM uint16_t CMPLCHA0 : 1; /*!< [0..0] Comparison condition of input */ + __IOM uint16_t CMPLCHA1 : 1; /*!< [1..1] Comparison condition of input */ + __IOM uint16_t CMPLCHA2 : 1; /*!< [2..2] Comparison condition of input */ + __IOM uint16_t CMPLCHA3 : 1; /*!< [3..3] Comparison condition of input */ + __IOM uint16_t CMPLCHA4 : 1; /*!< [4..4] Comparison condition of input */ + __IOM uint16_t CMPLCHA5 : 1; /*!< [5..5] Comparison condition of input */ + __IOM uint16_t CMPLCHA6 : 1; /*!< [6..6] Comparison condition of input */ + __IOM uint16_t CMPLCHA7 : 1; /*!< [7..7] Comparison condition of input */ + __IOM uint16_t CMPLCHA8 : 1; /*!< [8..8] Comparison condition of input */ + __IOM uint16_t CMPLCHA9 : 1; /*!< [9..9] Comparison condition of input */ + __IOM uint16_t CMPLCHA10 : 1; /*!< [10..10] Comparison condition of input */ + __IOM uint16_t CMPLCHA11 : 1; /*!< [11..11] Comparison condition of input */ + __IOM uint16_t CMPLCHA12 : 1; /*!< [12..12] Comparison condition of input */ + __IOM uint16_t CMPLCHA13 : 1; /*!< [13..13] Comparison condition of input */ + __IOM uint16_t CMPLCHA14 : 1; /*!< [14..14] Comparison condition of input */ + __IOM uint16_t CMPLCHA15 : 1; /*!< [15..15] Comparison condition of input */ + } ADCMPLR_b[2]; + }; + + union + { + __IOM uint16_t ADCMPDR0; /*!< (@ 0x0000009C) A/D Compare Function Window A Lower-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t ADCMPDR0 : 16; /*!< [15..0] The ADCMPDR0 register sets the reference data when the + * compare window A function is used. ADCMPDR0 sets the lower-side + * level of window A. */ + } ADCMPDR0_b; + }; + + union + { + __IOM uint16_t ADCMPDR1; /*!< (@ 0x0000009E) A/D Compare Function Window A Upper-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t ADCMPDR1 : 16; /*!< [15..0] The ADCMPDR1 register sets the reference data when the + * compare window A function is used. ADCMPDR1 sets the upper-side + * level of window A.. */ + } ADCMPDR1_b; + }; + + union + { + __IOM uint16_t ADCMPSR[2]; /*!< (@ 0x000000A0) A/D Compare Function Window A Channel Status + * Register */ + + struct + { + __IOM uint16_t CMPSTCHA0 : 1; /*!< [0..0] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA1 : 1; /*!< [1..1] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA2 : 1; /*!< [2..2] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA3 : 1; /*!< [3..3] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA4 : 1; /*!< [4..4] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA5 : 1; /*!< [5..5] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA6 : 1; /*!< [6..6] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA7 : 1; /*!< [7..7] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA8 : 1; /*!< [8..8] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA9 : 1; /*!< [9..9] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA10 : 1; /*!< [10..10] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA11 : 1; /*!< [11..11] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA12 : 1; /*!< [12..12] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA13 : 1; /*!< [13..13] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA14 : 1; /*!< [14..14] Compare window A flag of input */ + __IOM uint16_t CMPSTCHA15 : 1; /*!< [15..15] Compare window A flag of input */ + } ADCMPSR_b[2]; + }; + + union + { + __IOM uint8_t ADCMPSER; /*!< (@ 0x000000A4) A/D Compare Function Window A Extended Input + * Channel Status Register */ + + struct + { + __IOM uint8_t CMPSTTSA : 1; /*!< [0..0] Compare Window A Temperature Sensor Output Compare Flag + * When window A operation is enabled (ADCMPCR.CMPAE = 1b), + * this bit indicates the temperature sensor output comparison + * result. When window A operation is disabled (ADCMPCR.CMPAE + * = 0b), comparison conditions for CMPSTTSA are not met any + * time. */ + __IOM uint8_t CMPSTOCA : 1; /*!< [1..1] Compare Window A Internal Reference Voltage Compare Flag + * When window A operation is enabled (ADCMPCR.CMPAE = 1b), + * this bit indicates the temperature sensor output comparison + * result. When window A operation is disabled (ADCMPCR.CMPAE + * = 0b), comparison conditions for CMPSTTSA are not met any + * time. */ + uint8_t : 6; + } ADCMPSER_b; + }; + __IM uint8_t RESERVED10; + + union + { + __IOM uint8_t ADCMPBNSR; /*!< (@ 0x000000A6) A/D Compare Function Window B Channel Selection + * Register */ + + struct + { + __IOM uint8_t CMPCHB : 6; /*!< [5..0] Compare window B channel selection bit.The channel that + * compares it on the condition of compare window B is selected. */ + uint8_t : 1; + __IOM uint8_t CMPLB : 1; /*!< [7..7] Compare window B Compare condition setting bit. */ + } ADCMPBNSR_b; + }; + __IM uint8_t RESERVED11; + + union + { + __IOM uint16_t ADWINLLB; /*!< (@ 0x000000A8) A/D Compare Function Window B Lower-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t ADWINLLB : 16; /*!< [15..0] This register is used to compare A window function is + * used to set the lower level of the window B. */ + } ADWINLLB_b; + }; + + union + { + __IOM uint16_t ADWINULB; /*!< (@ 0x000000AA) A/D Compare Function Window B Upper-Side Level + * Setting Register */ + + struct + { + __IOM uint16_t ADWINULB : 16; /*!< [15..0] This register is used to compare A window function is + * used to set the higher level of the window B. */ + } ADWINULB_b; + }; + + union + { + __IOM uint8_t ADCMPBSR; /*!< (@ 0x000000AC) A/D Compare Function Window B Status Register */ + + struct + { + __IOM uint8_t CMPSTB : 1; /*!< [0..0] Compare window B flag.It is a status flag that shows + * the comparative result of CH (AN000-AN027, temperature + * sensor, and internal reference voltage) made the object + * of window B relation condition. */ + uint8_t : 7; + } ADCMPBSR_b; + }; + __IM uint8_t RESERVED12; + __IM uint16_t RESERVED13; + + union + { + __IM uint16_t ADBUF0; /*!< (@ 0x000000B0) A/D Data Buffer Register 0 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF0_b; + }; + + union + { + __IM uint16_t ADBUF1; /*!< (@ 0x000000B2) A/D Data Buffer Register 1 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF1_b; + }; + + union + { + __IM uint16_t ADBUF2; /*!< (@ 0x000000B4) A/D Data Buffer Register 2 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF2_b; + }; + + union + { + __IM uint16_t ADBUF3; /*!< (@ 0x000000B6) A/D Data Buffer Register 3 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF3_b; + }; + + union + { + __IM uint16_t ADBUF4; /*!< (@ 0x000000B8) A/D Data Buffer Register 4 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF4_b; + }; + + union + { + __IM uint16_t ADBUF5; /*!< (@ 0x000000BA) A/D Data Buffer Register 5 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF5_b; + }; + + union + { + __IM uint16_t ADBUF6; /*!< (@ 0x000000BC) A/D Data Buffer Register 6 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF6_b; + }; + + union + { + __IM uint16_t ADBUF7; /*!< (@ 0x000000BE) A/D Data Buffer Register 7 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF7_b; + }; + + union + { + __IM uint16_t ADBUF8; /*!< (@ 0x000000C0) A/D Data Buffer Register 8 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF8_b; + }; + + union + { + __IM uint16_t ADBUF9; /*!< (@ 0x000000C2) A/D Data Buffer Register 9 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF9_b; + }; + + union + { + __IM uint16_t ADBUF10; /*!< (@ 0x000000C4) A/D Data Buffer Register 10 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF10_b; + }; + + union + { + __IM uint16_t ADBUF11; /*!< (@ 0x000000C6) A/D Data Buffer Register 11 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF11_b; + }; + + union + { + __IM uint16_t ADBUF12; /*!< (@ 0x000000C8) A/D Data Buffer Register 12 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF12_b; + }; + + union + { + __IM uint16_t ADBUF13; /*!< (@ 0x000000CA) A/D Data Buffer Register 13 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF13_b; + }; + + union + { + __IM uint16_t ADBUF14; /*!< (@ 0x000000CC) A/D Data Buffer Register 14 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF14_b; + }; + + union + { + __IM uint16_t ADBUF15; /*!< (@ 0x000000CE) A/D Data Buffer Register 15 */ + + struct + { + __IM uint16_t ADBUF : 16; /*!< [15..0] A/D data buffer registers (ADBUF) are 16-bit read-only + * registers that sequentially store all A/D converted values. + * The automatic clear function is not applied to these registers. */ + } ADBUF15_b; + }; + + union + { + __IOM uint8_t ADBUFEN; /*!< (@ 0x000000D0) A/D Data Buffer Enable Register */ + + struct + { + __IOM uint8_t BUFEN : 1; /*!< [0..0] Data Buffer Enable */ + uint8_t : 7; + } ADBUFEN_b; + }; + __IM uint8_t RESERVED14; + + union + { + __IOM uint8_t ADBUFPTR; /*!< (@ 0x000000D2) A/D Data Buffer Pointer Register */ + + struct + { + __IM uint8_t BUFPTR : 4; /*!< [3..0] Data Buffer PointerThese bits indicate the number of + * data buffer to which the next A/D converted data is transferred. */ + __IM uint8_t PTROVF : 1; /*!< [4..4] Pointer Overflow Flag */ + uint8_t : 3; + } ADBUFPTR_b; + }; + __IM uint8_t RESERVED15; + __IM uint32_t RESERVED16[2]; + __IM uint8_t RESERVED17; + + union + { + __IOM uint8_t ADSSTRL; /*!< (@ 0x000000DD) A/D Sampling State Register L */ + + struct + { + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (AN016-AN027) */ + } ADSSTRL_b; + }; + + union + { + __IOM uint8_t ADSSTRT; /*!< (@ 0x000000DE) A/D Sampling State Register T */ + + struct + { + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (temperature sensor output) */ + } ADSSTRT_b; + }; + + union + { + __IOM uint8_t ADSSTRO; /*!< (@ 0x000000DF) A/D Sampling State Register O */ + + struct + { + __IOM uint8_t SST : 8; /*!< [7..0] Sampling Time Setting (Internal reference voltage) */ + } ADSSTRO_b; + }; + + union + { + __IOM uint8_t ADSSTR[16]; /*!< (@ 0x000000E0) A/D Sampling State Registers */ + + struct + { + __IOM uint8_t SST : 8; /*!< [7..0] Sampling time setting */ + } ADSSTR_b[16]; + }; + + union + { + __IOM uint16_t ADANIM; /*!< (@ 0x000000F0) A/D Channel Input Mode Select Register */ + + struct + { + __IOM uint16_t ANIM0 : 1; /*!< [0..0] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM1 : 1; /*!< [1..1] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM2 : 1; /*!< [2..2] Analog Channel Input Mode Select */ + __IOM uint16_t ANIM3 : 1; /*!< [3..3] Analog Channel Input Mode Select */ + uint16_t : 12; + } ADANIM_b; + }; + + union + { + __IOM uint8_t ADCALEXE; /*!< (@ 0x000000F2) A/D Calibration Execution Register */ + + struct + { + uint8_t : 6; + __IM uint8_t CALMON : 1; /*!< [6..6] Calibration Status Flag */ + __IOM uint8_t CALEXE : 1; /*!< [7..7] Calibration Start */ + } ADCALEXE_b; + }; + __IM uint8_t RESERVED18; + + union + { + __IOM uint8_t VREFAMPCNT; /*!< (@ 0x000000F4) A/D Dedicated Reference Voltage Circuit Control + * Register */ + + struct + { + __IOM uint8_t OLDETEN : 1; /*!< [0..0] OLDET Enable */ + __IOM uint8_t VREFADCG : 2; /*!< [2..1] VREFADC Output Voltage Control */ + __IOM uint8_t VREFADCEN : 1; /*!< [3..3] VREFADCG Enable */ + __IOM uint8_t BGREN : 1; /*!< [4..4] BGR Enable */ + uint8_t : 2; + __IOM uint8_t ADSLP : 1; /*!< [7..7] Sleep */ + } VREFAMPCNT_b; + }; + __IM uint8_t RESERVED19; + __IM uint16_t RESERVED20; + + union + { + __IOM uint16_t ADRD; /*!< (@ 0x000000F8) A/D Self-Diagnosis Data Register */ + + struct + { + __IM uint16_t AD : 16; /*!< [15..0] Converted Value 15 to 0 */ + } ADRD_b; + }; + + union + { + __IM uint8_t ADRST; /*!< (@ 0x000000FA) A/D Self-Diagnostic Status Register */ + + struct + { + __IM uint8_t DIAGST : 2; /*!< [1..0] Self-Diagnosis Status */ + uint8_t : 6; + } ADRST_b; + }; + __IM uint8_t RESERVED21; + __IM uint32_t RESERVED22[41]; + + union + { + __IOM uint16_t ADPGACR; /*!< (@ 0x000001A0) A/D Programmable Gain Amplifier Control Register */ + + struct + { + __IOM uint16_t P000SEL0 : 1; /*!< [0..0] A through amplifier is enable for PGA P000 */ + __IOM uint16_t P000SEL1 : 1; /*!< [1..1] The amplifier passing is enable for PGA P000 */ + __IOM uint16_t P000ENAMP : 1; /*!< [2..2] Amplifier enable bit for PGA P000 */ + __IOM uint16_t P000GEN : 1; /*!< [3..3] PGA P000 gain setting and enable bit */ + __IOM uint16_t P001SEL0 : 1; /*!< [4..4] A through amplifier is enable for PGA P001 */ + __IOM uint16_t P001SEL1 : 1; /*!< [5..5] The amplifier passing is enable for PGA P001 */ + __IOM uint16_t P001ENAMP : 1; /*!< [6..6] Amplifier enable bit for PGA P001 */ + __IOM uint16_t P001GEN : 1; /*!< [7..7] PGA P001 gain setting and enable bit */ + __IOM uint16_t P002SEL0 : 1; /*!< [8..8] A through amplifier is enable for PGA P002 */ + __IOM uint16_t P002SEL1 : 1; /*!< [9..9] The amplifier passing is enable for PGA P002 */ + __IOM uint16_t P002ENAMP : 1; /*!< [10..10] Amplifier enable bit for PGA P002 */ + __IOM uint16_t P002GEN : 1; /*!< [11..11] PGA P002 gain setting and enable bit */ + __IOM uint16_t P003SEL0 : 1; /*!< [12..12] A through amplifier is enable for PGA P003 */ + __IOM uint16_t P003SEL1 : 1; /*!< [13..13] The amplifier passing is enable for PGA P003 */ + __IOM uint16_t P003ENAMP : 1; /*!< [14..14] Amplifier enable bit for PGA P003 */ + __IOM uint16_t P003GEN : 1; /*!< [15..15] PGA P003 gain setting and enable bit */ + } ADPGACR_b; + }; + + union + { + __IOM uint16_t ADPGAGS0; /*!< (@ 0x000001A2) A/D Programmable Gain Amplifier Gain Setting + * Register 0 */ + + struct + { + __IOM uint16_t P000GAIN : 4; /*!< [3..0] PGA P000 gain setting bit.The gain magnification of (ADPGSDCR0.P000GEN= + * b) when the shingle end is input and each PGA P000 is set. + * When the differential motion is input, (ADPGSDCR0.P000GEN=1b) + * sets the gain magnification when the differential motion + * is input by the combination with ADPGSDCR0.P000DG 1:0. */ + __IOM uint16_t P001GAIN : 4; /*!< [7..4] PGA P001 gain setting bit.The gain magnification of (ADPGSDCR0.P001GEN= + * b) when the shingle end is input and each PGA P001 is set. + * When the differential motion is input, (ADPGSDCR0.P001GEN=1b) + * sets the gain magnification when the differential motion + * is input by the combination with ADPGSDCR0.P001DG 1:0. */ + __IOM uint16_t P002GAIN : 4; /*!< [11..8] PGA P002 gain setting bit.The gain magnification of + * (ADPGSDCR0.P002GEN=0b) when the shingle end is input and + * each PGA P002 is set. When the differential motion is input, + * (ADPGSDCR0.P002GEN=1b) sets the gain magnification when + * the differential motion is input by the combination with + * ADPGSDCR0.P002DG 1:0. */ + __IOM uint16_t P003GAIN : 4; /*!< [15..12] PGA P003 gain setting bit.The gain magnification of + * (ADPGSDCR0.P003GEN=0b) when the shingle end is input and + * each PGA P003 is set. When the differential motion is input, + * (ADPGSDCR0.P003GEN=1b) sets the gain magnification when + * the differential motion is input by the combination with + * ADPGSDCR0.P003DG 1:0. */ + } ADPGAGS0_b; + }; + __IM uint32_t RESERVED23[3]; + + union + { + __IOM uint16_t ADPGADCR0; /*!< (@ 0x000001B0) A/D Programmable Gain Amplifier Differential + * Input Control Register */ + + struct + { + __IOM uint16_t P000DG : 2; /*!< [1..0] P000 Differential Input Gain SettingNOTE: When these + * bits are used, set {P000DEN, P000GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P000DEN : 1; /*!< [3..3] P000 Differential Input Enable */ + __IOM uint16_t P001DG : 2; /*!< [5..4] P001 Differential Input Gain SettingNOTE: When these + * bits are used, set {P001DEN, P001GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P001DEN : 1; /*!< [7..7] P001 Differential Input Enable */ + __IOM uint16_t P002DG : 2; /*!< [9..8] P002 Differential Input Gain SettingNOTE: When these + * bits are used, set {P002DEN, P002GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P002DEN : 1; /*!< [11..11] P002 Differential Input Enable */ + __IOM uint16_t P003DG : 2; /*!< [13..12] P003 Differential Input Gain SettingNOTE: When these + * bits are used, set {P003DEN, P003GEN} to 11b. */ + uint16_t : 1; + __IOM uint16_t P003DEN : 1; /*!< [15..15] P003 Differential Input Enable */ + } ADPGADCR0_b; + }; + __IM uint16_t RESERVED24; + + union + { + __IOM uint8_t ADPGADBS0; /*!< (@ 0x000001B4) A/D Programmable Gain Amplifier Differential + * Input Bias Select Register 0 */ + + struct + { + __IOM uint8_t P0BIAS : 1; /*!< [0..0] Programmable Gain Amplifiers P000 to P002 Bias Voltage + * SelectNOTE: This bit selects the input bias voltage value + * when differential inputs are used. */ + uint8_t : 7; + } ADPGADBS0_b; + }; + + union + { + __IOM uint8_t ADPGADBS1; /*!< (@ 0x000001B5) A/D Programmable Gain Amplifier Differential + * Input Bias Select Register 1 */ + + struct + { + __IOM uint8_t P3BIAS : 1; /*!< [0..0] Programmable Gain Amplifiers P003 Bias Voltage SelectNOTE: + * This bit selects the input bias voltage value when differential + * inputs are used. */ + uint8_t : 7; + } ADPGADBS1_b; + }; + __IM uint16_t RESERVED25; + __IM uint32_t RESERVED26[10]; + + union + { + __IOM uint32_t ADREFMON; /*!< (@ 0x000001E0) A/D External Reference Voltage Monitor Register */ + + struct + { + __IOM uint32_t PGAMON : 3; /*!< [2..0] PGA Monitor Output Enable */ + uint32_t : 13; + __IOM uint32_t MONSEL : 4; /*!< [19..16] Monitor output selection bit. */ + uint32_t : 12; + } ADREFMON_b; + }; +} R_ADC0_Type; /*!< Size = 484 (0x1e4) */ + +/* =========================================================================================================================== */ +/* ================ R_BUS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Interface (R_BUS) + */ + +typedef struct /*!< (@ 0x40003000) R_BUS Structure */ +{ + __IOM R_BUS_CSa_Type CSa[8]; /*!< (@ 0x00000000) CS Registers */ + __IM uint32_t RESERVED[480]; + __IOM R_BUS_CSb_Type CSb[8]; /*!< (@ 0x00000800) CS Registers */ + + union + { + __IOM uint16_t CSRECEN; /*!< (@ 0x00000880) CS Recovery Cycle Insertion Enable Register */ + + struct + { + __IOM uint16_t RCVEN0 : 1; /*!< [0..0] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN1 : 1; /*!< [1..1] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN2 : 1; /*!< [2..2] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN3 : 1; /*!< [3..3] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN4 : 1; /*!< [4..4] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN5 : 1; /*!< [5..5] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN6 : 1; /*!< [6..6] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVEN7 : 1; /*!< [7..7] Separate Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM0 : 1; /*!< [8..8] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM1 : 1; /*!< [9..9] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM2 : 1; /*!< [10..10] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM3 : 1; /*!< [11..11] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM4 : 1; /*!< [12..12] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM5 : 1; /*!< [13..13] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM6 : 1; /*!< [14..14] Multiplexed Bus Recovery Cycle Insertion Enable */ + __IOM uint16_t RCVENM7 : 1; /*!< [15..15] Multiplexed Bus Recovery Cycle Insertion Enable */ + } CSRECEN_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[223]; + __IOM R_BUS_SDRAM_Type SDRAM; /*!< (@ 0x00000C00) SDRAM Registers */ + __IM uint32_t RESERVED3[235]; + + union + { + __IOM R_BUS_OAD_Type OAD; /*!< (@ 0x00001000) Bus Operation After Detection Registers */ + __IOM R_BUS_BUSM_Type BUSM[6]; /*!< (@ 0x00001000) Master Bus Control Registers */ + }; + __IM uint32_t RESERVED4[58]; + + union + { + union + { + __IOM uint32_t BUSMABT; /*!< (@ 0x00001100) Bus Master Arbitration Control Register. */ + + struct + { + __IOM uint32_t ARBS : 1; /*!< [0..0] Arbitration Select for GDSSBI. */ + uint32_t : 31; + } BUSMABT_b; + }; + __IOM R_BUS_BUSS_Type BUSS[18]; /*!< (@ 0x00001100) Slave Bus Control Register Array */ + }; + __IM uint32_t RESERVED5[46]; + + union + { + __IOM R_BUS_BUSSABT0_Type BUSSABT0; /*!< (@ 0x00001200) Bus Slave Arbitration Control 0 Registers */ + __IOM R_BUS_BUSSABT1_Type BUSSABT1; /*!< (@ 0x00001200) Bus Slave Arbitration Control 1 Registers */ + }; + __IM uint32_t RESERVED6[33]; + + union + { + __IOM uint32_t BUSDIVBYP; /*!< (@ 0x00001300) Bus Divider Bypass Register. */ + + struct + { + __IOM uint32_t EDMABPE : 1; /*!< [0..0] Divider for EDMACBI bypass enable. */ + uint32_t : 2; + __IOM uint32_t GDSSBPE : 1; /*!< [3..3] Divider for GDSSBI bypass enable. */ + uint32_t : 12; + __IOM uint32_t CPU0SBPE : 1; /*!< [16..16] Divider for CPUSAHBI bypass enable. */ + uint32_t : 15; + } BUSDIVBYP_b; + }; + __IM uint32_t RESERVED7[63]; + + union + { + __IOM uint16_t BUSTHRPUT; /*!< (@ 0x00001400) Graphic Bus Throughput Control Register */ + + struct + { + __IOM uint16_t DIS : 1; /*!< [0..0] Bandwidth Control Function */ + uint16_t : 15; + } BUSTHRPUT_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9[255]; + __IOM R_BUS_BUSERRa_Type BUSERRa[12]; /*!< (@ 0x00001800) Bus Error Registers */ + __IM uint32_t RESERVED10[16]; + + union + { + __IOM R_BUS_BTZFERR_Type BTZFERR[4]; /*!< (@ 0x00001900) Bus TZF Error Registers */ + __IOM R_BUS_BMSAERR_Type BMSAERR[9]; /*!< (@ 0x00001900) Bus Master Security Attribution Unit Error Address + * and Read/Write Status registers. */ + }; + __IM uint32_t RESERVED11[28]; + + union + { + __IOM R_BUS_BUSERRb_Type BUSERRb[12]; /*!< (@ 0x00001A00) Bus Error Registers */ + __IOM R_BUS_DMACDTCERR_Type DMACDTCERR; /*!< (@ 0x00001A00) DMAC/DTC Error Registers */ + }; + __IM uint32_t RESERVED12[16]; + __IOM R_BUS_MBWERR_Type MBWERR; /*!< (@ 0x00001B00) Master Bufferable Write Error Registers */ + __IM uint32_t RESERVED13[5]; + __IOM R_BUS_MBWERR_Type SBWERR; /*!< (@ 0x00001B20) Slave Bufferable Write Error Registers */ +} R_BUS_Type; /*!< Size = 6956 (0x1b2c) */ + +/* =========================================================================================================================== */ +/* ================ R_CAC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Clock Frequency Accuracy Measurement Circuit (R_CAC) + */ + +typedef struct /*!< (@ 0x40044600) R_CAC Structure */ +{ + union + { + __IOM uint8_t CACR0; /*!< (@ 0x00000000) CAC Control Register 0 */ + + struct + { + __IOM uint8_t CFME : 1; /*!< [0..0] Clock Frequency Measurement Enable. */ + uint8_t : 7; + } CACR0_b; + }; + + union + { + __IOM uint8_t CACR1; /*!< (@ 0x00000001) CAC Control Register 1 */ + + struct + { + __IOM uint8_t CACREFE : 1; /*!< [0..0] CACREF Pin Input Enable */ + __IOM uint8_t FMCS : 3; /*!< [3..1] Measurement Target Clock Select */ + __IOM uint8_t TCSS : 2; /*!< [5..4] Measurement Target Clock Frequency Division Ratio Select */ + __IOM uint8_t EDGES : 2; /*!< [7..6] Valid Edge Select */ + } CACR1_b; + }; + + union + { + __IOM uint8_t CACR2; /*!< (@ 0x00000002) CAC Control Register 2 */ + + struct + { + __IOM uint8_t RPS : 1; /*!< [0..0] Reference Signal Select */ + __IOM uint8_t RSCS : 3; /*!< [3..1] Measurement Reference Clock Select */ + __IOM uint8_t RCDS : 2; /*!< [5..4] Measurement Reference Clock Frequency Division Ratio + * Select */ + __IOM uint8_t DFS : 2; /*!< [7..6] Digital Filter Selection */ + } CACR2_b; + }; + + union + { + __IOM uint8_t CAICR; /*!< (@ 0x00000003) CAC Interrupt Control Register */ + + struct + { + __IOM uint8_t FERRIE : 1; /*!< [0..0] Frequency Error Interrupt Request Enable */ + __IOM uint8_t MENDIE : 1; /*!< [1..1] Measurement End Interrupt Request Enable */ + __IOM uint8_t OVFIE : 1; /*!< [2..2] Overflow Interrupt Request Enable */ + uint8_t : 1; + __OM uint8_t FERRFCL : 1; /*!< [4..4] FERRF Clear */ + __OM uint8_t MENDFCL : 1; /*!< [5..5] MENDF Clear */ + __OM uint8_t OVFFCL : 1; /*!< [6..6] OVFF Clear */ + uint8_t : 1; + } CAICR_b; + }; + + union + { + __IM uint8_t CASTR; /*!< (@ 0x00000004) CAC Status Register */ + + struct + { + __IM uint8_t FERRF : 1; /*!< [0..0] Frequency Error Flag */ + __IM uint8_t MENDF : 1; /*!< [1..1] Measurement End Flag */ + __IM uint8_t OVFF : 1; /*!< [2..2] Counter Overflow Flag */ + uint8_t : 5; + } CASTR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t CAULVR; /*!< (@ 0x00000006) CAC Upper-Limit Value Setting Register */ + + struct + { + __IOM uint16_t CAULVR : 16; /*!< [15..0] CAULVR is a 16-bit readable/writable register that stores + * the upper-limit value of the frequency. */ + } CAULVR_b; + }; + + union + { + __IOM uint16_t CALLVR; /*!< (@ 0x00000008) CAC Lower-Limit Value Setting Register */ + + struct + { + __IOM uint16_t CALLVR : 16; /*!< [15..0] CALLVR is a 16-bit readable/writable register that stores + * the lower-limit value of the frequency. */ + } CALLVR_b; + }; + + union + { + __IM uint16_t CACNTBR; /*!< (@ 0x0000000A) CAC Counter Buffer Register */ + + struct + { + __IM uint16_t CACNTBR : 16; /*!< [15..0] CACNTBR is a 16-bit read-only register that retains + * the counter value at the time a valid reference signal + * edge is input */ + } CACNTBR_b; + }; +} R_CAC_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_CAN0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Controller Area Network (CAN) Module (R_CAN0) + */ + +typedef struct /*!< (@ 0x40050000) R_CAN0 Structure */ +{ + __IM uint32_t RESERVED[128]; + __IOM R_CAN0_MB_Type MB[32]; /*!< (@ 0x00000200) Mailbox */ + + union + { + __IOM uint32_t MKR[8]; /*!< (@ 0x00000400) Mask Register */ + + struct + { + __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ + __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ + uint32_t : 3; + } MKR_b[8]; + }; + + union + { + __IOM uint32_t FIDCR[2]; /*!< (@ 0x00000420) FIFO Received ID Compare Registers */ + + struct + { + __IOM uint32_t EID : 18; /*!< [17..0] Extended ID */ + __IOM uint32_t SID : 11; /*!< [28..18] Standard ID */ + uint32_t : 1; + __IOM uint32_t RTR : 1; /*!< [30..30] Remote Transmission Request */ + __IOM uint32_t IDE : 1; /*!< [31..31] ID Extension */ + } FIDCR_b[2]; + }; + + union + { + __IOM uint32_t MKIVLR; /*!< (@ 0x00000428) Mask Invalid Register */ + + struct + { + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Mask Invalid */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Mask Invalid */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Mask Invalid */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Mask Invalid */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Mask Invalid */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Mask Invalid */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Mask Invalid */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Mask Invalid */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Mask Invalid */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Mask Invalid */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Mask Invalid */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Mask Invalid */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Mask Invalid */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Mask Invalid */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Mask Invalid */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Mask Invalid */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Mask Invalid */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Mask Invalid */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Mask Invalid */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Mask Invalid */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Mask Invalid */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Mask Invalid */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Mask Invalid */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Mask Invalid */ + __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Mask Invalid */ + __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Mask Invalid */ + __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Mask Invalid */ + __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Mask Invalid */ + __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Mask Invalid */ + __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Mask Invalid */ + __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Mask Invalid */ + __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Mask Invalid */ + } MKIVLR_b; + }; + + union + { + union + { + __IOM uint32_t MIER; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register */ + + struct + { + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ + __IOM uint32_t MB24 : 1; /*!< [24..24] mailbox 24 Interrupt Enable */ + __IOM uint32_t MB25 : 1; /*!< [25..25] mailbox 25 Interrupt Enable */ + __IOM uint32_t MB26 : 1; /*!< [26..26] mailbox 26 Interrupt Enable */ + __IOM uint32_t MB27 : 1; /*!< [27..27] mailbox 27 Interrupt Enable */ + __IOM uint32_t MB28 : 1; /*!< [28..28] mailbox 28 Interrupt Enable */ + __IOM uint32_t MB29 : 1; /*!< [29..29] mailbox 29 Interrupt Enable */ + __IOM uint32_t MB30 : 1; /*!< [30..30] mailbox 30 Interrupt Enable */ + __IOM uint32_t MB31 : 1; /*!< [31..31] mailbox 31 Interrupt Enable */ + } MIER_b; + }; + + union + { + __IOM uint32_t MIER_FIFO; /*!< (@ 0x0000042C) Mailbox Interrupt Enable Register for FIFO Mailbox + * Mode */ + + struct + { + __IOM uint32_t MB0 : 1; /*!< [0..0] mailbox 0 Interrupt Enable */ + __IOM uint32_t MB1 : 1; /*!< [1..1] mailbox 1 Interrupt Enable */ + __IOM uint32_t MB2 : 1; /*!< [2..2] mailbox 2 Interrupt Enable */ + __IOM uint32_t MB3 : 1; /*!< [3..3] mailbox 3 Interrupt Enable */ + __IOM uint32_t MB4 : 1; /*!< [4..4] mailbox 4 Interrupt Enable */ + __IOM uint32_t MB5 : 1; /*!< [5..5] mailbox 5 Interrupt Enable */ + __IOM uint32_t MB6 : 1; /*!< [6..6] mailbox 6 Interrupt Enable */ + __IOM uint32_t MB7 : 1; /*!< [7..7] mailbox 7 Interrupt Enable */ + __IOM uint32_t MB8 : 1; /*!< [8..8] mailbox 8 Interrupt Enable */ + __IOM uint32_t MB9 : 1; /*!< [9..9] mailbox 9 Interrupt Enable */ + __IOM uint32_t MB10 : 1; /*!< [10..10] mailbox 10 Interrupt Enable */ + __IOM uint32_t MB11 : 1; /*!< [11..11] mailbox 11 Interrupt Enable */ + __IOM uint32_t MB12 : 1; /*!< [12..12] mailbox 12 Interrupt Enable */ + __IOM uint32_t MB13 : 1; /*!< [13..13] mailbox 13 Interrupt Enable */ + __IOM uint32_t MB14 : 1; /*!< [14..14] mailbox 14 Interrupt Enable */ + __IOM uint32_t MB15 : 1; /*!< [15..15] mailbox 15 Interrupt Enable */ + __IOM uint32_t MB16 : 1; /*!< [16..16] mailbox 16 Interrupt Enable */ + __IOM uint32_t MB17 : 1; /*!< [17..17] mailbox 17 Interrupt Enable */ + __IOM uint32_t MB18 : 1; /*!< [18..18] mailbox 18 Interrupt Enable */ + __IOM uint32_t MB19 : 1; /*!< [19..19] mailbox 19 Interrupt Enable */ + __IOM uint32_t MB20 : 1; /*!< [20..20] mailbox 20 Interrupt Enable */ + __IOM uint32_t MB21 : 1; /*!< [21..21] mailbox 21 Interrupt Enable */ + __IOM uint32_t MB22 : 1; /*!< [22..22] mailbox 22 Interrupt Enable */ + __IOM uint32_t MB23 : 1; /*!< [23..23] mailbox 23 Interrupt Enable */ + __IOM uint32_t MB24 : 1; /*!< [24..24] Transmit FIFO Interrupt Enable */ + __IOM uint32_t MB25 : 1; /*!< [25..25] Transmit FIFO Interrupt Generation Timing Control */ + uint32_t : 2; + __IOM uint32_t MB28 : 1; /*!< [28..28] Receive FIFO Interrupt Enable */ + __IOM uint32_t MB29 : 1; /*!< [29..29] Receive FIFO Interrupt Generation Timing Control */ + uint32_t : 2; + } MIER_FIFO_b; + }; + }; + __IM uint32_t RESERVED1[252]; + + union + { + union + { + __IOM uint8_t MCTL_TX[32]; /*!< (@ 0x00000820) Message Control Register for Transmit */ + + struct + { + __IOM uint8_t SENTDATA : 1; /*!< [0..0] Transmission Complete Flag */ + __IM uint8_t TRMACTIVE : 1; /*!< [1..1] Transmission-in-Progress Status Flag (Transmit mailbox + * setting enabled) */ + __IOM uint8_t TRMABT : 1; /*!< [2..2] Transmission Abort Complete Flag (Transmit mailbox setting + * enabled) */ + uint8_t : 1; + __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ + uint8_t : 1; + __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ + __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ + } MCTL_TX_b[32]; + }; + + union + { + __IOM uint8_t MCTL_RX[32]; /*!< (@ 0x00000820) Message Control Register for Receive */ + + struct + { + __IOM uint8_t NEWDATA : 1; /*!< [0..0] Reception Complete Flag */ + __IM uint8_t INVALDATA : 1; /*!< [1..1] Reception-in-Progress Status Flag (Receive mailbox setting + * enabled) */ + __IOM uint8_t MSGLOST : 1; /*!< [2..2] Message Lost Flag(Receive mailbox setting enabled) */ + uint8_t : 1; + __IOM uint8_t ONESHOT : 1; /*!< [4..4] One-Shot Enable */ + uint8_t : 1; + __IOM uint8_t RECREQ : 1; /*!< [6..6] Receive Mailbox Request */ + __IOM uint8_t TRMREQ : 1; /*!< [7..7] Transmit Mailbox Request */ + } MCTL_RX_b[32]; + }; + }; + + union + { + __IOM uint16_t CTLR; /*!< (@ 0x00000840) Control Register */ + + struct + { + __IOM uint16_t MBM : 1; /*!< [0..0] CAN Mailbox Mode Select */ + __IOM uint16_t IDFM : 2; /*!< [2..1] ID Format Mode Select */ + __IOM uint16_t MLM : 1; /*!< [3..3] Message Lost Mode Select */ + __IOM uint16_t TPM : 1; /*!< [4..4] Transmission Priority Mode Select */ + __IOM uint16_t TSRC : 1; /*!< [5..5] Time Stamp Counter Reset Command */ + __IOM uint16_t TSPS : 2; /*!< [7..6] Time Stamp Prescaler Select */ + __IOM uint16_t CANM : 2; /*!< [9..8] CAN Operating Mode Select */ + __IOM uint16_t SLPM : 1; /*!< [10..10] CAN Sleep Mode */ + __IOM uint16_t BOM : 2; /*!< [12..11] Bus-Off Recovery Mode by a program request */ + __IOM uint16_t RBOC : 1; /*!< [13..13] Forcible Return From Bus-Off */ + uint16_t : 2; + } CTLR_b; + }; + + union + { + __IM uint16_t STR; /*!< (@ 0x00000842) Status Register */ + + struct + { + __IM uint16_t NDST : 1; /*!< [0..0] NEWDATA Status Flag */ + __IM uint16_t SDST : 1; /*!< [1..1] SENTDATA Status Flag */ + __IM uint16_t RFST : 1; /*!< [2..2] Receive FIFO Status Flag */ + __IM uint16_t TFST : 1; /*!< [3..3] Transmit FIFO Status Flag */ + __IM uint16_t NMLST : 1; /*!< [4..4] Normal Mailbox Message Lost Status Flag */ + __IM uint16_t FMLST : 1; /*!< [5..5] FIFO Mailbox Message Lost Status Flag */ + __IM uint16_t TABST : 1; /*!< [6..6] Transmission Abort Status Flag */ + __IM uint16_t EST : 1; /*!< [7..7] Error Status Flag */ + __IM uint16_t RSTST : 1; /*!< [8..8] CAN Reset Status Flag */ + __IM uint16_t HLTST : 1; /*!< [9..9] CAN Halt Status Flag */ + __IM uint16_t SLPST : 1; /*!< [10..10] CAN Sleep Status Flag */ + __IM uint16_t EPST : 1; /*!< [11..11] Error-Passive Status Flag */ + __IM uint16_t BOST : 1; /*!< [12..12] Bus-Off Status Flag */ + __IM uint16_t TRMST : 1; /*!< [13..13] Transmit Status Flag (transmitter) */ + __IM uint16_t RECST : 1; /*!< [14..14] Receive Status Flag (receiver) */ + uint16_t : 1; + } STR_b; + }; + + union + { + __IOM uint32_t BCR; /*!< (@ 0x00000844) Bit Configuration Register */ + + struct + { + __IOM uint32_t CCLKS : 1; /*!< [0..0] CAN Clock Source Selection */ + uint32_t : 7; + __IOM uint32_t TSEG2 : 3; /*!< [10..8] Time Segment 2 Control */ + uint32_t : 1; + __IOM uint32_t SJW : 2; /*!< [13..12] Resynchronization Jump Width Control */ + uint32_t : 2; + __IOM uint32_t BRP : 10; /*!< [25..16] Prescaler Division Ratio Select . These bits set the + * frequency of the CAN communication clock (fCANCLK). */ + uint32_t : 2; + __IOM uint32_t TSEG1 : 4; /*!< [31..28] Time Segment 1 Control */ + } BCR_b; + }; + + union + { + __IOM uint8_t RFCR; /*!< (@ 0x00000848) Receive FIFO Control Register */ + + struct + { + __IOM uint8_t RFE : 1; /*!< [0..0] Receive FIFO Enable */ + __IM uint8_t RFUST : 3; /*!< [3..1] Receive FIFO Unread Message Number Status */ + __IOM uint8_t RFMLF : 1; /*!< [4..4] Receive FIFO Message Lost Flag */ + __IM uint8_t RFFST : 1; /*!< [5..5] Receive FIFO Full Status Flag */ + __IM uint8_t RFWST : 1; /*!< [6..6] Receive FIFO Buffer Warning Status Flag */ + __IM uint8_t RFEST : 1; /*!< [7..7] Receive FIFO Empty Status Flag */ + } RFCR_b; + }; + + union + { + __OM uint8_t RFPCR; /*!< (@ 0x00000849) Receive FIFO Pointer Control Register */ + + struct + { + __OM uint8_t RFPCR : 8; /*!< [7..0] The CPU-side pointer for the receive FIFO is incremented + * by writing FFh to RFPCR. */ + } RFPCR_b; + }; + + union + { + __IOM uint8_t TFCR; /*!< (@ 0x0000084A) Transmit FIFO Control Register */ + + struct + { + __IOM uint8_t TFE : 1; /*!< [0..0] Transmit FIFO Enable */ + __IM uint8_t TFUST : 3; /*!< [3..1] Transmit FIFO Unsent Message Number Status */ + uint8_t : 2; + __IM uint8_t TFFST : 1; /*!< [6..6] Transmit FIFO Full Status */ + __IM uint8_t TFEST : 1; /*!< [7..7] Transmit FIFO Empty Status */ + } TFCR_b; + }; + + union + { + __OM uint8_t TFPCR; /*!< (@ 0x0000084B) Transmit FIFO Pointer Control Register */ + + struct + { + __OM uint8_t TFPCR : 8; /*!< [7..0] The CPU-side pointer for the transmit FIFO is incremented + * by writing FFh to TFPCR. */ + } TFPCR_b; + }; + + union + { + __IOM uint8_t EIER; /*!< (@ 0x0000084C) Error Interrupt Enable Register */ + + struct + { + __IOM uint8_t BEIE : 1; /*!< [0..0] Bus Error Interrupt Enable */ + __IOM uint8_t EWIE : 1; /*!< [1..1] Error-Warning Interrupt Enable */ + __IOM uint8_t EPIE : 1; /*!< [2..2] Error-Passive Interrupt Enable */ + __IOM uint8_t BOEIE : 1; /*!< [3..3] Bus-Off Entry Interrupt Enable */ + __IOM uint8_t BORIE : 1; /*!< [4..4] Bus-Off Recovery Interrupt Enable */ + __IOM uint8_t ORIE : 1; /*!< [5..5] Overrun Interrupt Enable */ + __IOM uint8_t OLIE : 1; /*!< [6..6] Overload Frame Transmit Interrupt Enable */ + __IOM uint8_t BLIE : 1; /*!< [7..7] Bus Lock Interrupt Enable */ + } EIER_b; + }; + + union + { + __IOM uint8_t EIFR; /*!< (@ 0x0000084D) Error Interrupt Factor Judge Register */ + + struct + { + __IOM uint8_t BEIF : 1; /*!< [0..0] Bus Error Detect Flag */ + __IOM uint8_t EWIF : 1; /*!< [1..1] Error-Warning Detect Flag */ + __IOM uint8_t EPIF : 1; /*!< [2..2] Error-Passive Detect Flag */ + __IOM uint8_t BOEIF : 1; /*!< [3..3] Bus-Off Entry Detect Flag */ + __IOM uint8_t BORIF : 1; /*!< [4..4] Bus-Off Recovery Detect Flag */ + __IOM uint8_t ORIF : 1; /*!< [5..5] Receive Overrun Detect Flag */ + __IOM uint8_t OLIF : 1; /*!< [6..6] Overload Frame Transmission Detect Flag */ + __IOM uint8_t BLIF : 1; /*!< [7..7] Bus Lock Detect Flag */ + } EIFR_b; + }; + + union + { + __IM uint8_t RECR; /*!< (@ 0x0000084E) Receive Error Count Register */ + + struct + { + __IM uint8_t RECR : 8; /*!< [7..0] Receive error count functionRECR increments or decrements + * the counter value according to the error status of the + * CAN module during reception. */ + } RECR_b; + }; + + union + { + __IM uint8_t TECR; /*!< (@ 0x0000084F) Transmit Error Count Register */ + + struct + { + __IM uint8_t TECR : 8; /*!< [7..0] Transmit error count functionTECR increments or decrements + * the counter value according to the error status of the + * CAN module during transmission. */ + } TECR_b; + }; + + union + { + __IOM uint8_t ECSR; /*!< (@ 0x00000850) Error Code Store Register */ + + struct + { + __IOM uint8_t SEF : 1; /*!< [0..0] Stuff Error Flag */ + __IOM uint8_t FEF : 1; /*!< [1..1] Form Error Flag */ + __IOM uint8_t AEF : 1; /*!< [2..2] ACK Error Flag */ + __IOM uint8_t CEF : 1; /*!< [3..3] CRC Error Flag */ + __IOM uint8_t BE1F : 1; /*!< [4..4] Bit Error (recessive) Flag */ + __IOM uint8_t BE0F : 1; /*!< [5..5] Bit Error (dominant) Flag */ + __IOM uint8_t ADEF : 1; /*!< [6..6] ACK Delimiter Error Flag */ + __IOM uint8_t EDPM : 1; /*!< [7..7] Error Display Mode Select */ + } ECSR_b; + }; + + union + { + __IOM uint8_t CSSR; /*!< (@ 0x00000851) Channel Search Support Register */ + + struct + { + __IOM uint8_t CSSR : 8; /*!< [7..0] When the value for the channel search is input, the channel + * number is output to MSSR. */ + } CSSR_b; + }; + + union + { + __IM uint8_t MSSR; /*!< (@ 0x00000852) Mailbox Search Status Register */ + + struct + { + __IM uint8_t MBNST : 5; /*!< [4..0] Search Result Mailbox Number Status These bits output + * the smallest mailbox number that is searched in each mode + * of MSMR. */ + uint8_t : 2; + __IM uint8_t SEST : 1; /*!< [7..7] Search Result Status */ + } MSSR_b; + }; + + union + { + __IOM uint8_t MSMR; /*!< (@ 0x00000853) Mailbox Search Mode Register */ + + struct + { + __IOM uint8_t MBSM : 2; /*!< [1..0] Mailbox Search Mode Select */ + uint8_t : 6; + } MSMR_b; + }; + + union + { + __IM uint16_t TSR; /*!< (@ 0x00000854) Time Stamp Register */ + + struct + { + __IM uint16_t TSR : 16; /*!< [15..0] Free-running counter value for the time stamp function */ + } TSR_b; + }; + + union + { + __IOM uint16_t AFSR; /*!< (@ 0x00000856) Acceptance Filter Support Register */ + + struct + { + __IOM uint16_t AFSR : 16; /*!< [15..0] After the standard ID of a received message is written, + * the value converted for data table search can be read. */ + } AFSR_b; + }; + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000858) Test Control Register */ + + struct + { + __IOM uint8_t TSTE : 1; /*!< [0..0] CAN Test Mode Enable */ + __IOM uint8_t TSTM : 2; /*!< [2..1] CAN Test Mode Select */ + uint8_t : 5; + } TCR_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_CAN0_Type; /*!< Size = 2140 (0x85c) */ + +/* =========================================================================================================================== */ +/* ================ R_CRC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Cyclic Redundancy Check (CRC) Calculator (R_CRC) + */ + +typedef struct /*!< (@ 0x40074000) R_CRC Structure */ +{ + union + { + __IOM uint8_t CRCCR0; /*!< (@ 0x00000000) CRC Control Register0 */ + + struct + { + __IOM uint8_t GPS : 3; /*!< [2..0] CRC Generating Polynomial Switching */ + uint8_t : 3; + __IOM uint8_t LMS : 1; /*!< [6..6] CRC Calculation Switching */ + __OM uint8_t DORCLR : 1; /*!< [7..7] CRCDOR Register Clear */ + } CRCCR0_b; + }; + + union + { + __IOM uint8_t CRCCR1; /*!< (@ 0x00000001) CRC Control Register1 */ + + struct + { + uint8_t : 6; + __IOM uint8_t CRCSWR : 1; /*!< [6..6] Snoop-on-write/read switch bit */ + __IOM uint8_t CRCSEN : 1; /*!< [7..7] Snoop enable bit */ + } CRCCR1_b; + }; + __IM uint16_t RESERVED; + + union + { + union + { + __IOM uint32_t CRCDIR; /*!< (@ 0x00000004) CRC Data Input Register */ + + struct + { + __IOM uint32_t CRCDIR : 32; /*!< [31..0] Calculation input Data (Case of CRC-32, CRC-32C ) */ + } CRCDIR_b; + }; + + union + { + __IOM uint8_t CRCDIR_BY; /*!< (@ 0x00000004) CRC Data Input Register (byte access) */ + + struct + { + __IOM uint8_t CRCDIR_BY : 8; /*!< [7..0] Calculation input Data ( Case of CRC-8, CRC-16 or CRC-CCITT + * ) */ + } CRCDIR_BY_b; + }; + }; + + union + { + union + { + __IOM uint32_t CRCDOR; /*!< (@ 0x00000008) CRC Data Output Register */ + + struct + { + __IOM uint32_t CRCDOR : 32; /*!< [31..0] Calculation output Data (Case of CRC-32, CRC-32C ) */ + } CRCDOR_b; + }; + + union + { + __IOM uint16_t CRCDOR_HA; /*!< (@ 0x00000008) CRC Data Output Register (halfword access) */ + + struct + { + __IOM uint16_t CRCDOR_HA : 16; /*!< [15..0] Calculation output Data (Case of CRC-16 or CRC-CCITT + * ) */ + } CRCDOR_HA_b; + }; + + union + { + __IOM uint8_t CRCDOR_BY; /*!< (@ 0x00000008) CRC Data Output Register(byte access) */ + + struct + { + __IOM uint8_t CRCDOR_BY : 8; /*!< [7..0] Calculation output Data (Case of CRC-8 ) */ + } CRCDOR_BY_b; + }; + }; + + union + { + __IOM uint16_t CRCSAR; /*!< (@ 0x0000000C) Snoop Address Register */ + + struct + { + __IOM uint16_t CRCSA : 14; /*!< [13..0] snoop address bitSet the I/O register address to snoop */ + uint16_t : 2; + } CRCSAR_b; + }; + __IM uint16_t RESERVED1; +} R_CRC_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_CTSU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Capacitive Touch Sensing Unit (R_CTSU) + */ + +typedef struct /*!< (@ 0x40081000) R_CTSU Structure */ +{ + union + { + __IOM uint8_t CTSUCR0; /*!< (@ 0x00000000) CTSU Control Register 0 */ + + struct + { + __IOM uint8_t CTSUSTRT : 1; /*!< [0..0] CTSU Measurement Operation Start */ + __IOM uint8_t CTSUCAP : 1; /*!< [1..1] CTSU Measurement Operation Start Trigger Select */ + __IOM uint8_t CTSUSNZ : 1; /*!< [2..2] CTSU Wait State Power-Saving Enable */ + __IOM uint8_t CTSUIOC : 1; /*!< [3..3] CTSU Transmit Pin Control */ + __IOM uint8_t CTSUINIT : 1; /*!< [4..4] CTSU Control Block Initialization */ + uint8_t : 2; + __IOM uint8_t CTSUTXVSEL : 1; /*!< [7..7] CTSU Transmission power supply selection */ + } CTSUCR0_b; + }; + + union + { + __IOM uint8_t CTSUCR1; /*!< (@ 0x00000001) CTSU Control Register 1 */ + + struct + { + __IOM uint8_t CTSUPON : 1; /*!< [0..0] CTSU Power Supply Enable */ + __IOM uint8_t CTSUCSW : 1; /*!< [1..1] CTSU LPF Capacitance Charging Control */ + __IOM uint8_t CTSUATUNE0 : 1; /*!< [2..2] CTSU Power Supply Operating Mode Setting */ + __IOM uint8_t CTSUATUNE1 : 1; /*!< [3..3] CTSU Power Supply Capacity Adjustment */ + __IOM uint8_t CTSUCLK : 2; /*!< [5..4] CTSU Operating Clock Select */ + __IOM uint8_t CTSUMD : 2; /*!< [7..6] CTSU Measurement Mode Select */ + } CTSUCR1_b; + }; + + union + { + __IOM uint8_t CTSUSDPRS; /*!< (@ 0x00000002) CTSU Synchronous Noise Reduction Setting Register */ + + struct + { + __IOM uint8_t CTSUPRRATIO : 4; /*!< [3..0] CTSU Measurement Time and Pulse Count AdjustmentRecommended + * setting: 3 (0011b) */ + __IOM uint8_t CTSUPRMODE : 2; /*!< [5..4] CTSU Base Period and Pulse Count Setting */ + __IOM uint8_t CTSUSOFF : 1; /*!< [6..6] CTSU High-Pass Noise Reduction Function Off Setting */ + uint8_t : 1; + } CTSUSDPRS_b; + }; + + union + { + __IOM uint8_t CTSUSST; /*!< (@ 0x00000003) CTSU Sensor Stabilization Wait Control Register */ + + struct + { + __IOM uint8_t CTSUSST : 8; /*!< [7..0] CTSU Sensor Stabilization Wait ControlNOTE: The value + * of these bits should be fixed to 00010000b. */ + } CTSUSST_b; + }; + + union + { + __IOM uint8_t CTSUMCH0; /*!< (@ 0x00000004) CTSU Measurement Channel Register 0 */ + + struct + { + __IOM uint8_t CTSUMCH0 : 6; /*!< [5..0] CTSU Measurement Channel 0.Note1: Writing to these bits + * is only enabled in self-capacitance single-scan mode (CTSUCR1.CTSUMD[1:0] + * bits = 00b).Note2: If the value of CTSUMCH0 was set to + * b'111111 in mode other than self-capacitor single scan + * mode, the measurement is stopped. */ + uint8_t : 2; + } CTSUMCH0_b; + }; + + union + { + __IOM uint8_t CTSUMCH1; /*!< (@ 0x00000005) CTSU Measurement Channel Register 1 */ + + struct + { + __IM uint8_t CTSUMCH1 : 6; /*!< [5..0] CTSU Measurement Channel 1Note1: If the value of CTSUMCH1 + * was set to b'111111, the measurement is stopped. */ + uint8_t : 2; + } CTSUMCH1_b; + }; + + union + { + __IOM uint8_t CTSUCHAC[5]; /*!< (@ 0x00000006) CTSU Channel Enable Control Register */ + + struct + { + __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Enable Control */ + __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Enable Control */ + __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Enable Control */ + __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Enable Control */ + __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Enable Control */ + __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Enable Control */ + __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Enable Control */ + __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Enable Control */ + } CTSUCHAC_b[5]; + }; + + union + { + __IOM uint8_t CTSUCHTRC[5]; /*!< (@ 0x0000000B) CTSU Channel Transmit/Receive Control Register */ + + struct + { + __IOM uint8_t TS0 : 1; /*!< [0..0] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS1 : 1; /*!< [1..1] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS2 : 1; /*!< [2..2] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS3 : 1; /*!< [3..3] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS4 : 1; /*!< [4..4] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS5 : 1; /*!< [5..5] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS6 : 1; /*!< [6..6] CTSU Channel Transmit/Receive Control */ + __IOM uint8_t TS7 : 1; /*!< [7..7] CTSU Channel Transmit/Receive Control */ + } CTSUCHTRC_b[5]; + }; + + union + { + __IOM uint8_t CTSUDCLKC; /*!< (@ 0x00000010) CTSU High-Pass Noise Reduction Control Register */ + + struct + { + __IOM uint8_t CTSUSSMOD : 2; /*!< [1..0] CTSU Diffusion Clock Mode SelectNOTE: This bit should + * be set to 00b. */ + uint8_t : 2; + __IOM uint8_t CTSUSSCNT : 2; /*!< [5..4] CTSU Diffusion Clock Mode ControlNOTE: This bit should + * be set to 11b. */ + uint8_t : 2; + } CTSUDCLKC_b; + }; + + union + { + __IOM uint8_t CTSUST; /*!< (@ 0x00000011) CTSU Status Register */ + + struct + { + __IM uint8_t CTSUSTC : 3; /*!< [2..0] CTSU Measurement Status Counter */ + uint8_t : 1; + __IM uint8_t CTSUDTSR : 1; /*!< [4..4] CTSU Data Transfer Status Flag */ + __IOM uint8_t CTSUSOVF : 1; /*!< [5..5] CTSU Sensor Counter Overflow Flag */ + __IOM uint8_t CTSUROVF : 1; /*!< [6..6] CTSU Reference Counter Overflow Flag */ + __IM uint8_t CTSUPS : 1; /*!< [7..7] CTSU Mutual Capacitance Status Flag */ + } CTSUST_b; + }; + + union + { + __IOM uint16_t CTSUSSC; /*!< (@ 0x00000012) CTSU High-Pass Noise Reduction Spectrum Diffusion + * Control Register */ + + struct + { + uint16_t : 8; + __IOM uint16_t CTSUSSDIV : 4; /*!< [11..8] CTSU Spectrum Diffusion Frequency Division Setting */ + uint16_t : 4; + } CTSUSSC_b; + }; + + union + { + __IOM uint16_t CTSUSO0; /*!< (@ 0x00000014) CTSU Sensor Offset Register 0 */ + + struct + { + __IOM uint16_t CTSUSO : 10; /*!< [9..0] CTSU Sensor Offset AdjustmentCurrent offset amount is + * CTSUSO ( 0 to 1023 ) */ + __IOM uint16_t CTSUSNUM : 6; /*!< [15..10] CTSU Measurement Count Setting */ + } CTSUSO0_b; + }; + + union + { + __IOM uint16_t CTSUSO1; /*!< (@ 0x00000016) CTSU Sensor Offset Register 1 */ + + struct + { + __IOM uint16_t CTSURICOA : 8; /*!< [7..0] CTSU Reference ICO Current AdjustmentCurrent offset amount + * is CTSUSO ( 0 to 255 ) */ + __IOM uint16_t CTSUSDPA : 5; /*!< [12..8] CTSU Base Clock SettingOperating clock divided by ( + * CTSUSDPA + 1 ) x 2 */ + __IOM uint16_t CTSUICOG : 2; /*!< [14..13] CTSU ICO Gain Adjustment */ + uint16_t : 1; + } CTSUSO1_b; + }; + + union + { + __IM uint16_t CTSUSC; /*!< (@ 0x00000018) CTSU Sensor Counter */ + + struct + { + __IM uint16_t CTSUSC : 16; /*!< [15..0] CTSU Sensor CounterThese bits indicate the measurement + * result of the CTSU. These bits indicate FFFFh when an overflow + * occurs. */ + } CTSUSC_b; + }; + + union + { + __IM uint16_t CTSURC; /*!< (@ 0x0000001A) CTSU Reference Counter */ + + struct + { + __IM uint16_t CTSURC : 16; /*!< [15..0] CTSU Reference CounterThese bits indicate the measurement + * result of the reference ICO.These bits indicate FFFFh when + * an overflow occurs. */ + } CTSURC_b; + }; + + union + { + __IM uint16_t CTSUERRS; /*!< (@ 0x0000001C) CTSU Error Status Register */ + + struct + { + __IOM uint16_t CTSUSPMD : 2; /*!< [1..0] Calibration Mode */ + __IOM uint16_t CTSUTSOD : 1; /*!< [2..2] TS Pin Fixed Output */ + __IOM uint16_t CTSUDRV : 1; /*!< [3..3] Calibration Setting 1 */ + uint16_t : 2; + __IOM uint16_t CTSUCLKSEL1 : 1; /*!< [6..6] Calibration Setting 3 */ + __IOM uint16_t CTSUTSOC : 1; /*!< [7..7] Calibration Setting 2 */ + uint16_t : 7; + __IM uint16_t CTSUICOMP : 1; /*!< [15..15] TSCAP Voltage Error Monitor */ + } CTSUERRS_b; + }; + __IM uint16_t RESERVED; + __IOM uint8_t CTSUTRMR; /*!< (@ 0x00000020) CTSU Reference Current Calibration Register */ + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; +} R_CTSU_Type; /*!< Size = 36 (0x24) */ + +/* =========================================================================================================================== */ +/* ================ R_DAC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief D/A Converter (R_DAC) + */ + +typedef struct /*!< (@ 0x4005E000) R_DAC Structure */ +{ + union + { + __IOM uint16_t DADR[2]; /*!< (@ 0x00000000) D/A Data Register */ + + struct + { + __IOM uint16_t DADR : 16; /*!< [15..0] D/A Data RegisterNOTE: When DADPR.DPSEL = 0, the high-order + * 4 bits are fixed to 0: right justified format. When DADPR.DPSEL + * = 1, the low-order 4 bits are fixed to 0: left justified + * format. */ + } DADR_b[2]; + }; + + union + { + __IOM uint8_t DACR; /*!< (@ 0x00000004) D/A Control Register */ + + struct + { + uint8_t : 5; + __IOM uint8_t DAE : 1; /*!< [5..5] D/A Enable */ + __IOM uint8_t DAOE0 : 1; /*!< [6..6] D/A Output Enable 0 */ + __IOM uint8_t DAOE1 : 1; /*!< [7..7] D/A Output Enable 0 */ + } DACR_b; + }; + + union + { + __IOM uint8_t DADPR; /*!< (@ 0x00000005) DADR0 Format Select Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t DPSEL : 1; /*!< [7..7] DADRm Format Select */ + } DADPR_b; + }; + + union + { + __IOM uint8_t DAADSCR; /*!< (@ 0x00000006) D/A-A/D Synchronous Start Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t DAADST : 1; /*!< [7..7] D/A-A/D Synchronous Conversion */ + } DAADSCR_b; + }; + + union + { + __IOM uint8_t DAVREFCR; /*!< (@ 0x00000007) D/A VREF Control Register */ + + struct + { + __IOM uint8_t REF : 3; /*!< [2..0] D/A Reference Voltage Select */ + uint8_t : 5; + } DAVREFCR_b; + }; + + union + { + __IOM uint8_t DAAMPCR; /*!< (@ 0x00000008) D/A Output Amplifier Control Register */ + + struct + { + uint8_t : 6; + __IOM uint8_t DAAMP0 : 1; /*!< [6..6] Amplifier Control */ + __IOM uint8_t DAAMP1 : 1; /*!< [7..7] Amplifier Control */ + } DAAMPCR_b; + }; + + union + { + __IOM uint8_t DAPC; /*!< (@ 0x00000009) D/A Switch Charge Pump Control Register */ + + struct + { + __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge Pump Enable */ + uint8_t : 7; + } DAPC_b; + }; + __IM uint16_t RESERVED[9]; + + union + { + __IOM uint8_t DAASWCR; /*!< (@ 0x0000001C) D/A Amplifier Stabilization Wait Control Register */ + + struct + { + uint8_t : 6; + __IOM uint8_t DAASW0 : 1; /*!< [6..6] Set the DAASW0 bit to 1 in the initialization procedure + * to wait for stabilization of the output amplifier of D/A + * channel 0. When DAASW0 is set to 1, D/A conversion operates, + * but the conversion result D/A is not output from channel + * 0. When the DAASW0 bit is 0, the stabilization wait time + * stops, and the D/A conversion result of channel 0 is output + * through the output amplifier. */ + __IOM uint8_t DAASW1 : 1; /*!< [7..7] Set the DAASW1 bit to 1 in the initialization procedure + * to wait for stabilization of the output amplifier of D/A + * channel 1. When DAASW1 is set to 1, D/A conversion operates, + * but the conversion result D/A is not output from channel + * 1. When the DAASW1 bit is 0, the stabilization wait time + * stops, and the D/A conversion result of channel 1 is output + * through the output amplifier. */ + } DAASWCR_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2[2129]; + + union + { + __IOM uint8_t DAADUSR; /*!< (@ 0x000010C0) D/A A/D Synchronous Unit Select Register */ + + struct + { + __IOM uint8_t AMADSEL0 : 1; /*!< [0..0] The DAADUSR register selects the target ADC12 unit for + * D/A and A/D synchronous conversions. Set bit [0] to 1 to + * select unit 0 as the target synchronous unit for the MCU. + * When setting the DAADSCR.DAADST bit to 1 for synchronous + * conversions, select the target unit in this register in + * advance. Only set the DAADUSR register while the ADCSR.ADST + * bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit + * is set to 0. */ + __IOM uint8_t AMADSEL1 : 1; /*!< [1..1] The DAADUSR register selects the target ADC12 unit for + * D/A and A/D synchronous conversions. Set bit [1] to 1 to + * select unit 1 as the target synchronous unit for the MCU. + * When setting the DAADSCR.DAADST bit to 1 for synchronous + * conversions, select the target unit in this register in + * advance. Only set the DAADUSR register while the ADCSR.ADST + * bit of the ADC12 is set to 0 and the DAADSCR.DAADST bit + * is set to 0. */ + uint8_t : 6; + } DAADUSR_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; +} R_DAC_Type; /*!< Size = 4292 (0x10c4) */ + +/* =========================================================================================================================== */ +/* ================ R_DAC8 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief 8-Bit D/A Converter (R_DAC8) + */ + +typedef struct /*!< (@ 0x4009E000) R_DAC8 Structure */ +{ + union + { + __IOM uint8_t DACS[2]; /*!< (@ 0x00000000) D/A Conversion Value Setting Register [0..1] */ + + struct + { + __IOM uint8_t DACS : 8; /*!< [7..0] DACS D/A conversion store data */ + } DACS_b[2]; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t DAM; /*!< (@ 0x00000003) D/A Converter Mode Register */ + + struct + { + __IOM uint8_t DAMD0 : 1; /*!< [0..0] D/A operation mode select 0 */ + __IOM uint8_t DAMD1 : 1; /*!< [1..1] D/A operation mode select 1 */ + uint8_t : 2; + __IOM uint8_t DACE0 : 1; /*!< [4..4] D/A operation enable 0 */ + __IOM uint8_t DACE1 : 1; /*!< [5..5] D/A operation enable 1 */ + uint8_t : 2; + } DAM_b; + }; + __IM uint8_t RESERVED1[2]; + + union + { + __IOM uint8_t DACADSCR; /*!< (@ 0x00000006) D/A A/D Synchronous Start Control Register */ + + struct + { + __IOM uint8_t DACADST : 1; /*!< [0..0] D/A A/D Synchronous Conversion */ + uint8_t : 7; + } DACADSCR_b; + }; + + union + { + __IOM uint8_t DACPC; /*!< (@ 0x00000007) D/A SW Charge Pump Control Register */ + + struct + { + __IOM uint8_t PUMPEN : 1; /*!< [0..0] Charge pump enable */ + uint8_t : 7; + } DACPC_b; + }; +} R_DAC8_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ R_DEBUG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Debug Function (R_DEBUG) + */ + +typedef struct /*!< (@ 0x4001B000) R_DEBUG Structure */ +{ + union + { + __IM uint32_t DBGSTR; /*!< (@ 0x00000000) Debug Status Register */ + + struct + { + uint32_t : 28; + __IM uint32_t CDBGPWRUPREQ : 1; /*!< [28..28] Debug power-up request */ + __IM uint32_t CDBGPWRUPACK : 1; /*!< [29..29] Debug power-up acknowledge */ + uint32_t : 2; + } DBGSTR_b; + }; + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t DBGSTOPCR; /*!< (@ 0x00000010) Debug Stop Control Register */ + + struct + { + __IOM uint32_t DBGSTOP_IWDT : 1; /*!< [0..0] Mask bit for IWDT reset/interrupt */ + __IOM uint32_t DBGSTOP_WDT : 1; /*!< [1..1] Mask bit for WDT reset/interrupt */ + uint32_t : 12; + __IOM uint32_t DBGSTOP_TIM : 1; /*!< [14..14] Mask bit for RTC, TAU reset/interrupt */ + __IOM uint32_t DBGSTOP_SIR : 1; /*!< [15..15] Mask bit for SAU, IICA, PORT_IRQ0-5 reset/interrupt */ + __IOM uint32_t DBGSTOP_LVD0 : 1; /*!< [16..16] Mask bit for LVD reset/interrupt */ + __IOM uint32_t DBGSTOP_LVD1 : 1; /*!< [17..17] Mask bit for LVD reset/interrupt */ + __IOM uint32_t DBGSTOP_LVD2 : 1; /*!< [18..18] Mask bit for LVD reset/interrupt */ + uint32_t : 5; + __IOM uint32_t DBGSTOP_RPER : 1; /*!< [24..24] Mask bit for SRAM parity error */ + __IOM uint32_t DBGSTOP_RECCR : 1; /*!< [25..25] Mask bit for SRAM ECC error */ + uint32_t : 5; + __IOM uint32_t DBGSTOP_CPER : 1; /*!< [31..31] Mask bit for Cache SRAM parity error reset/interrupt */ + } DBGSTOPCR_b; + }; + __IM uint32_t RESERVED1[123]; + + union + { + __IOM uint32_t FSBLSTAT; /*!< (@ 0x00000200) First Stage Boot Loader Status Register */ + + struct + { + __IOM uint32_t CS : 1; /*!< [0..0] FSBL completion status. */ + __IOM uint32_t RS : 1; /*!< [1..1] FSBL result status. */ + uint32_t : 6; + __IM uint32_t FSBLCLK : 3; /*!< [10..8] System clock frequency selection during FSBL execution */ + uint32_t : 21; + } FSBLSTAT_b; + }; +} R_DEBUG_Type; /*!< Size = 516 (0x204) */ + +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Data Operation Circuit (R_DOC) + */ + +typedef struct /*!< (@ 0x40054100) R_DOC Structure */ +{ + union + { + __IOM uint8_t DOCR; /*!< (@ 0x00000000) DOC Control Register */ + + struct + { + __IOM uint8_t OMS : 2; /*!< [1..0] Operating Mode Select */ + __IOM uint8_t DCSEL : 1; /*!< [2..2] Detection Condition Select */ + uint8_t : 2; + __IM uint8_t DOPCF : 1; /*!< [5..5] Data Operation Circuit Flag */ + __IOM uint8_t DOPCFCL : 1; /*!< [6..6] DOPCF Clear */ + uint8_t : 1; + } DOCR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t DODIR; /*!< (@ 0x00000002) DOC Data Input Register */ + + struct + { + __IOM uint16_t DODIR : 16; /*!< [15..0] 16-bit read-write register in which 16-bit data for + * use in the operations are stored. */ + } DODIR_b; + }; + + union + { + __IOM uint16_t DODSR; /*!< (@ 0x00000004) DOC Data Setting Register */ + + struct + { + __IOM uint16_t DODSR : 16; /*!< [15..0] This register stores 16-bit data for use as a reference + * in data comparison mode. This register also stores the + * results of operations in data addition and data subtraction + * modes. */ + } DODSR_b; + }; +} R_DOC_Type; /*!< Size = 6 (0x6) */ + +/* =========================================================================================================================== */ +/* ================ R_DTC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Data Transfer Controller (R_DTC) + */ + +typedef struct /*!< (@ 0x40005400) R_DTC Structure */ +{ + union + { + __IOM uint8_t DTCCR; /*!< (@ 0x00000000) DTC Control Register */ + + struct + { + uint8_t : 4; + __IOM uint8_t RRS : 1; /*!< [4..4] DTC Transfer Information Read Skip Enable. */ + uint8_t : 3; + } DTCCR_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + + union + { + __IOM uint32_t DTCVBR; /*!< (@ 0x00000004) DTC Vector Base Register */ + + struct + { + __IOM uint32_t DTCVBR : 32; /*!< [31..0] DTC Vector Base Address. */ + } DTCVBR_b; + }; + + union + { + __IOM uint8_t DTCADMOD; /*!< (@ 0x00000008) DTC Address Mode Register */ + + struct + { + __IOM uint8_t SHORT : 1; /*!< [0..0] Short-Address Mode Set */ + uint8_t : 7; + } DTCADMOD_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; + + union + { + __IOM uint8_t DTCST; /*!< (@ 0x0000000C) DTC Module Start Register */ + + struct + { + __IOM uint8_t DTCST : 1; /*!< [0..0] DTC Module Start */ + uint8_t : 7; + } DTCST_b; + }; + __IM uint8_t RESERVED4; + + union + { + __IM uint16_t DTCSTS; /*!< (@ 0x0000000E) DTC Status Register */ + + struct + { + __IM uint16_t VECN : 8; /*!< [7..0] DTC-Activating Vector Number MonitoringThese bits indicate + * the vector number for the activating source when DTC transfer + * is in progress.The value is only valid if DTC transfer + * is in progress (the value of the ACT flag is 1) */ + uint16_t : 7; + __IM uint16_t ACT : 1; /*!< [15..15] DTC Active Flag */ + } DTCSTS_b; + }; + + union + { + __IOM uint8_t DTCCR_SEC; /*!< (@ 0x00000010) DTC Control Register for secure Region */ + + struct + { + uint8_t : 4; + __IOM uint8_t RRS : 1; /*!< [4..4] DTC Transfer Information Read Skip Enable. */ + uint8_t : 3; + } DTCCR_SEC_b; + }; + __IM uint8_t RESERVED5; + __IM uint16_t RESERVED6; + + union + { + __IOM uint32_t DTCVBR_SEC; /*!< (@ 0x00000014) DTC Vector Base Register for secure Region */ + + struct + { + __IOM uint32_t DTCVBR : 32; /*!< [31..0] DTC Vector Base Address. */ + } DTCVBR_SEC_b; + }; + + union + { + __IOM uint32_t DTCDISP; /*!< (@ 0x00000018) DTC Address Displacement Register */ + + struct + { + __IOM uint32_t DTCDISP : 32; /*!< [31..0] DTC Address Displacement */ + } DTCDISP_b; + }; + __IM uint32_t RESERVED7; + + union + { + __IOM uint32_t DTEVR; /*!< (@ 0x00000020) DTC Error Vector Register */ + + struct + { + __IM uint32_t DTEV : 8; /*!< [7..0] DTC Error Vector Number */ + __IM uint32_t DTEVSAM : 1; /*!< [8..8] DTC Error Vector Number SA Monitor */ + uint32_t : 7; + __IOM uint32_t DTESTA : 1; /*!< [16..16] DTC Error Status Flag */ + uint32_t : 15; + } DTEVR_b; + }; + + union + { + __IOM uint32_t DTCIBR; /*!< (@ 0x00000024) DTC Index Table Base Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t DTCIBR : 22; /*!< [31..10] DTC Index Table Base Address */ + } DTCIBR_b; + }; + + union + { + __IOM uint8_t DTCOR; /*!< (@ 0x00000028) DTC Operation Register */ + + struct + { + __IOM uint8_t SQTFRL : 1; /*!< [0..0] Sequence Transfer Stop */ + uint8_t : 7; + } DTCOR_b; + }; + __IM uint8_t RESERVED8; + __IM uint16_t RESERVED9; + + union + { + __IOM uint16_t DTCSQE; /*!< (@ 0x0000002C) DTC Sequence Transfer Enable Register */ + + struct + { + __IOM uint16_t VECN : 8; /*!< [7..0] DTC Sequence Transfer Vector Number Specified */ + uint16_t : 7; + __IOM uint16_t ESPSEL : 1; /*!< [15..15] DTC Sequence Transfer Enable */ + } DTCSQE_b; + }; + __IM uint16_t RESERVED10; +} R_DTC_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ R_ELC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Event Link Controller (R_ELC) + */ + +typedef struct /*!< (@ 0x40041000) R_ELC Structure */ +{ + union + { + __IOM uint8_t ELCR; /*!< (@ 0x00000000) Event Link Controller Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t ELCON : 1; /*!< [7..7] All Event Link Enable */ + } ELCR_b; + }; + __IM uint8_t RESERVED; + __IOM R_ELC_ELSEGR_Type ELSEGR[2]; /*!< (@ 0x00000002) Event Link Software Event Generation Register */ + __IM uint16_t RESERVED1[5]; + __IOM R_ELC_ELSR_Type ELSR[23]; /*!< (@ 0x00000010) Event Link Setting Register [0..22] */ + __IM uint16_t RESERVED2[4]; + + union + { + __IOM uint16_t ELCSARA; /*!< (@ 0x00000074) Event Link Controller Security Attribution Register + * A */ + + struct + { + __IOM uint16_t ELCR : 1; /*!< [0..0] Event Link Controller RegisterSecurity Attribution */ + __IOM uint16_t ELSEGR0 : 1; /*!< [1..1] Event Link Software Event Generation Register 0 Security + * Attribution */ + __IOM uint16_t ELSEGR1 : 1; /*!< [2..2] Event Link Software Event Generation Register 1Security + * Attribution */ + uint16_t : 13; + } ELCSARA_b; + }; + __IM uint16_t RESERVED3; + + union + { + __IOM uint16_t ELCSARB; /*!< (@ 0x00000078) Event Link Controller Security Attribution Register + * B */ + + struct + { + __IOM uint16_t ELSR0 : 1; /*!< [0..0] Event Link Setting Register 0Security Attribution */ + __IOM uint16_t ELSR1 : 1; /*!< [1..1] Event Link Setting Register 1Security Attribution */ + __IOM uint16_t ELSR2 : 1; /*!< [2..2] Event Link Setting Register 2Security Attribution */ + __IOM uint16_t ELSR3 : 1; /*!< [3..3] Event Link Setting Register 3Security Attribution */ + __IOM uint16_t ELSR4 : 1; /*!< [4..4] Event Link Setting Register 4Security Attribution */ + __IOM uint16_t ELSR5 : 1; /*!< [5..5] Event Link Setting Register 5Security Attribution */ + __IOM uint16_t ELSR6 : 1; /*!< [6..6] Event Link Setting Register 6Security Attribution */ + __IOM uint16_t ELSR7 : 1; /*!< [7..7] Event Link Setting Register 7Security Attribution */ + __IOM uint16_t ELSR8 : 1; /*!< [8..8] Event Link Setting Register 8Security Attribution */ + __IOM uint16_t ELSR9 : 1; /*!< [9..9] Event Link Setting Register 9Security Attribution */ + __IOM uint16_t ELSR10 : 1; /*!< [10..10] Event Link Setting Register 10Security Attribution */ + __IOM uint16_t ELSR11 : 1; /*!< [11..11] Event Link Setting Register 11Security Attribution */ + __IOM uint16_t ELSR12 : 1; /*!< [12..12] Event Link Setting Register 12Security Attribution */ + __IOM uint16_t ELSR13 : 1; /*!< [13..13] Event Link Setting Register 13Security Attribution */ + __IOM uint16_t ELSR14 : 1; /*!< [14..14] Event Link Setting Register 14Security Attribution */ + __IOM uint16_t ELSR15 : 1; /*!< [15..15] Event Link Setting Register 15Security Attribution */ + } ELCSARB_b; + }; + __IM uint16_t RESERVED4; + + union + { + __IOM uint16_t ELCSARC; /*!< (@ 0x0000007C) Event Link Controller Security Attribution Register + * C */ + + struct + { + __IOM uint16_t ELSR16 : 1; /*!< [0..0] Event Link Setting Register 16Security Attribution */ + __IOM uint16_t ELSR17 : 1; /*!< [1..1] Event Link Setting Register 17Security Attribution */ + __IOM uint16_t ELSR18 : 1; /*!< [2..2] Event Link Setting Register 18Security Attribution */ + uint16_t : 13; + } ELCSARC_b; + }; +} R_ELC_Type; /*!< Size = 126 (0x7e) */ + +/* =========================================================================================================================== */ +/* ================ R_FACI_LP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Application Command Interface (R_FACI_LP) + */ + +typedef struct /*!< (@ 0x407EC000) R_FACI_LP Structure */ +{ + __IM uint32_t RESERVED[36]; + __IOM uint8_t DFLCTL; /*!< (@ 0x00000090) Flash P/E Mode Control Register */ + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3[27]; + + union + { + __IOM uint8_t FPMCR; /*!< (@ 0x00000100) Flash P/E Mode Control Register */ + + struct + { + uint8_t : 1; + __IOM uint8_t FMS0 : 1; /*!< [1..1] Flash Operating Mode Select 0FMS2,1,0: 000: Read mode + * 011: Discharge mode 1 111: Discharge mode 2 101: Code Flash + * P/E mode 010: Data flash P/E mode Others: Setting prohibited. */ + uint8_t : 1; + __IOM uint8_t RPDIS : 1; /*!< [3..3] Code Flash P/E Disable */ + __IOM uint8_t FMS1 : 1; /*!< [4..4] The bit to make data flash a programming modeRefer to + * the description of the FMS0 bit. */ + uint8_t : 1; + __IOM uint8_t VLPE : 1; /*!< [6..6] Low-Voltage P/E Mode Enable */ + __IOM uint8_t FMS2 : 1; /*!< [7..7] Flash Operating Mode Select 2.Refer to the description + * of the FMS0 bit. */ + } FPMCR_b; + }; + __IM uint8_t RESERVED4; + __IM uint16_t RESERVED5; + + union + { + __IOM uint8_t FASR; /*!< (@ 0x00000104) Flash Area Select Register */ + + struct + { + __IOM uint8_t EXS : 1; /*!< [0..0] Extra area select */ + uint8_t : 7; + } FASR_b; + }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; + + union + { + __IOM uint16_t FSARL; /*!< (@ 0x00000108) Flash Processing Start Address Register L */ + + struct + { + __IOM uint16_t FSAR15_0 : 16; /*!< [15..0] Start address */ + } FSARL_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9; + + union + { + __IOM uint16_t FSARH; /*!< (@ 0x00000110) Flash Processing Start Address Register H */ + + struct + { + __IOM uint16_t FSAR20_16 : 5; /*!< [4..0] Start address */ + uint16_t : 4; + __IOM uint16_t FSAR31_25 : 7; /*!< [15..9] Start address */ + } FSARH_b; + }; + __IM uint16_t RESERVED10; + + union + { + __IOM uint8_t FCR; /*!< (@ 0x00000114) Flash Control Register */ + + struct + { + __IOM uint8_t CMD : 4; /*!< [3..0] Software Command Setting */ + __IOM uint8_t DRC : 1; /*!< [4..4] Data Read Completion */ + uint8_t : 1; + __IOM uint8_t STOP : 1; /*!< [6..6] Forced Processing Stop */ + __IOM uint8_t OPST : 1; /*!< [7..7] Processing Start */ + } FCR_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12; + + union + { + __IOM uint16_t FEARL; /*!< (@ 0x00000118) Flash Processing End Address Register L */ + + struct + { + __IOM uint16_t FEAR15_0 : 16; /*!< [15..0] End address */ + } FEARL_b; + }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14; + + union + { + __IOM uint32_t FEARH; /*!< (@ 0x00000120) Flash Processing End Address Register H */ + + struct + { + __IOM uint32_t FEAR20_16 : 5; /*!< [4..0] End address */ + uint32_t : 4; + __IOM uint32_t FEAR31_25 : 7; /*!< [15..9] End address */ + uint32_t : 16; + } FEARH_b; + }; + + union + { + __IOM uint32_t FRESETR; /*!< (@ 0x00000124) Flash Reset Register */ + + struct + { + __IOM uint32_t FRESET : 1; /*!< [0..0] Software Reset of the registers */ + uint32_t : 31; + } FRESETR_b; + }; + + union + { + __IM uint32_t FSTATR00; /*!< (@ 0x00000128) Flash Status Register00 */ + + struct + { + __IM uint32_t ERERR0 : 1; /*!< [0..0] Erase Error Flag0 */ + __IM uint32_t PRGERR0 : 1; /*!< [1..1] Program Error Flag0 */ + __IM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ + __IM uint32_t BCERR0 : 1; /*!< [3..3] Blank Check Error Flag0 */ + __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ + __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ + uint32_t : 26; + } FSTATR00_b; + }; + + union + { + __IM uint32_t FSTATR1; /*!< (@ 0x0000012C) Flash Status Register1 */ + + struct + { + uint32_t : 1; + __IM uint32_t DRRDY : 1; /*!< [1..1] Data read request */ + uint32_t : 4; + __IM uint32_t FRDY : 1; /*!< [6..6] End status signal of a sequencer */ + __IM uint32_t EXRDY : 1; /*!< [7..7] End status signal of a Extra programming sequencer */ + uint32_t : 24; + } FSTATR1_b; + }; + + union + { + __IOM uint32_t FWBL0; /*!< (@ 0x00000130) Flash Write Buffer Register L0 */ + + struct + { + __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBL0_b; + }; + __IM uint32_t RESERVED15; + + union + { + __IOM uint32_t FWBH0; /*!< (@ 0x00000138) Flash Write Buffer Register H0 */ + + struct + { + __IOM uint32_t WDATA : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBH0_b; + }; + + union + { + __IM uint32_t FSTATR01; /*!< (@ 0x0000013C) Flash Status Register01 */ + + struct + { + __IM uint32_t ERERR1 : 1; /*!< [0..0] Erase Error Flag1 */ + __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag1 */ + uint32_t : 1; + __IM uint32_t BCERR1 : 1; /*!< [3..3] Blank Check Error Flag1 */ + uint32_t : 28; + } FSTATR01_b; + }; + + union + { + __IOM uint32_t FWBL1; /*!< (@ 0x00000140) Flash Write Buffer Register L1 */ + + struct + { + __IOM uint32_t WDATA47_32 : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBL1_b; + }; + + union + { + __IOM uint32_t FWBH1; /*!< (@ 0x00000144) Flash Write Buffer Register H1 */ + + struct + { + __IOM uint32_t WDATA63_48 : 16; /*!< [15..0] Program data of the program command */ + uint32_t : 16; + } FWBH1_b; + }; + + union + { + __IM uint32_t FRBL1; /*!< (@ 0x00000148) Flash Read Buffer Register L1 */ + + struct + { + __IM uint32_t RDATA47_32 : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBL1_b; + }; + + union + { + __IM uint32_t FRBH1; /*!< (@ 0x0000014C) Flash Read Buffer Register H1 */ + + struct + { + __IM uint32_t RDATA63_48 : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBH1_b; + }; + __IM uint32_t RESERVED16[12]; + + union + { + __OM uint32_t FPR; /*!< (@ 0x00000180) Protection Unlock Register */ + + struct + { + __OM uint32_t FPR : 8; /*!< [7..0] Protection Unlock Register */ + uint32_t : 24; + } FPR_b; + }; + + union + { + __IM uint32_t FPSR; /*!< (@ 0x00000184) Protection Unlock Status Register */ + + struct + { + __IM uint32_t PERR : 1; /*!< [0..0] Protect Error Flag */ + uint32_t : 31; + } FPSR_b; + }; + + union + { + __IM uint32_t FRBL0; /*!< (@ 0x00000188) Flash Read Buffer Register L0 */ + + struct + { + __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBL0_b; + }; + __IM uint32_t RESERVED17; + + union + { + __IM uint32_t FRBH0; /*!< (@ 0x00000190) Flash Read Buffer Register H0 */ + + struct + { + __IM uint32_t RDATA : 16; /*!< [15..0] Read data of the consecutive read command */ + uint32_t : 16; + } FRBH0_b; + }; + __IM uint32_t RESERVED18[11]; + + union + { + __IM uint32_t FSCMR; /*!< (@ 0x000001C0) Flash Start-Up Setting Monitor Register */ + + struct + { + uint32_t : 8; + __IM uint32_t SASMF : 1; /*!< [8..8] Start-up Area Setting Monitor Flag */ + uint32_t : 5; + __IM uint32_t FSPR : 1; /*!< [14..14] Access Window Protection Flag */ + uint32_t : 17; + } FSCMR_b; + }; + __IM uint32_t RESERVED19; + + union + { + __IM uint32_t FAWSMR; /*!< (@ 0x000001C8) Flash Access Window Start Address Monitor Register */ + + struct + { + __IM uint32_t FAWS : 12; /*!< [11..0] Flash Access Window Start Address */ + uint32_t : 20; + } FAWSMR_b; + }; + __IM uint32_t RESERVED20; + + union + { + __IM uint32_t FAWEMR; /*!< (@ 0x000001D0) Flash Access Window End Address Monitor Register */ + + struct + { + __IM uint32_t FAWE : 12; /*!< [11..0] Flash Access Window End Address */ + uint32_t : 20; + } FAWEMR_b; + }; + __IM uint32_t RESERVED21; + + union + { + __IOM uint32_t FISR; /*!< (@ 0x000001D8) Flash Initial Setting Register */ + + struct + { + __IOM uint32_t PCKA : 6; /*!< [5..0] Peripheral Clock Notification */ + __IOM uint32_t SAS : 2; /*!< [7..6] Temporary boot swap mode */ + uint32_t : 24; + } FISR_b; + }; + + union + { + __IOM uint32_t FEXCR; /*!< (@ 0x000001DC) Flash Extra Area Control Register */ + + struct + { + __IOM uint32_t CMD : 3; /*!< [2..0] Processing Start) */ + uint32_t : 4; + __IOM uint32_t OPST : 1; /*!< [7..7] Software Command Setting */ + uint32_t : 24; + } FEXCR_b; + }; + + union + { + __IM uint32_t FEAML; /*!< (@ 0x000001E0) Flash Error Address Monitor Register L */ + + struct + { + __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ + uint32_t : 16; + } FEAML_b; + }; + __IM uint32_t RESERVED22; + + union + { + __IM uint32_t FEAMH; /*!< (@ 0x000001E8) Flash Error Address Monitor Register H */ + + struct + { + __IM uint32_t FEAM : 16; /*!< [15..0] Flash Error Address Monitor Register */ + uint32_t : 16; + } FEAMH_b; + }; + __IM uint32_t RESERVED23; + + union + { + __IM uint32_t FSTATR2; /*!< (@ 0x000001F0) Flash Status Register2 */ + + struct + { + __IM uint32_t ERERR : 1; /*!< [0..0] Erase Error Flag */ + __IM uint32_t PRGERR1 : 1; /*!< [1..1] Program Error Flag */ + __IOM uint32_t PRGERR01 : 1; /*!< [2..2] Program Error Flag 01 */ + __IM uint32_t BCERR : 1; /*!< [3..3] Blank Check Error Flag */ + __IM uint32_t ILGLERR : 1; /*!< [4..4] Illegal Command Error Flag */ + __IM uint32_t EILGLERR : 1; /*!< [5..5] Extra Area Illegal Command Error Flag */ + uint32_t : 26; + } FSTATR2_b; + }; + __IM uint32_t RESERVED24[3]; + + union + { + __IOM uint8_t HIOTRM; /*!< (@ 0x00000200) High-speed On-chip Oscillator Trimming Register */ + + struct + { + __IOM uint8_t HIOTRM : 6; /*!< [5..0] HOCO User Trimming */ + uint8_t : 2; + } HIOTRM_b; + }; + __IM uint8_t RESERVED25; + __IM uint16_t RESERVED26; + __IM uint32_t RESERVED27; + __IM uint16_t RESERVED28; + + union + { + __IOM uint8_t FLMODE; /*!< (@ 0x0000020A) Flash Operating Mode Control Register */ + + struct + { + uint8_t : 6; + __IOM uint8_t MODE : 2; /*!< [7..6] Operating Mode Select */ + } FLMODE_b; + }; + + union + { + __IOM uint8_t FLMWRP; /*!< (@ 0x0000020B) Flash Operating Mode Protect Register */ + + struct + { + __IOM uint8_t FLMWEN : 1; /*!< [0..0] Control of Flash Operation Mode Select Register */ + uint8_t : 7; + } FLMWRP_b; + }; + __IM uint32_t RESERVED29[89]; + + union + { + __IOM uint32_t FCTLFR; /*!< (@ 0x00000370) Flash Control Flag Register */ + + struct + { + __IOM uint32_t BANKSWP : 3; /*!< [2..0] Bank Swap Setting */ + uint32_t : 29; + } FCTLFR_b; + }; + __IM uint32_t RESERVED30[3855]; + __IOM uint16_t FENTRYR_MF4; /*!< (@ 0x00003FB0) Flash P/E Mode Entry Register for MF4 */ + __IOM uint16_t FENTRYR; /*!< (@ 0x00003FB2) Flash P/E Mode Entry Register */ + __IM uint32_t RESERVED31[3]; + __IOM uint8_t FLWAITR; /*!< (@ 0x00003FC0) Flash Wait Cycle Register */ + __IM uint8_t RESERVED32; + __IM uint16_t RESERVED33; + + union + { + __IOM uint8_t FLDWAITR; /*!< (@ 0x00003FC4) Memory Wait Cycle Control Register for Data Flash */ + + struct + { + __IOM uint8_t FLDWAIT1 : 1; /*!< [0..0] Memory Wait Cycle Select for Data Flash */ + uint8_t : 7; + } FLDWAITR_b; + }; + __IM uint8_t RESERVED34; + __IM uint16_t RESERVED35; + __IOM uint8_t PFBER; /*!< (@ 0x00003FC8) Prefetch Buffer Enable Register */ + __IM uint8_t RESERVED36; + __IM uint16_t RESERVED37; + __IM uint32_t RESERVED38; + + union + { + __IOM uint16_t FBKPGCR; /*!< (@ 0x00003FD0) Flash Bank Program Control Register */ + + struct + { + __IOM uint16_t BKPGEN : 1; /*!< [0..0] Bank Programming Setting Enable */ + uint16_t : 7; + __OM uint16_t FEKEY : 8; /*!< [15..8] Key Code */ + } FBKPGCR_b; + }; + __IM uint16_t RESERVED39; + + union + { + __IOM uint16_t FBKSWCR; /*!< (@ 0x00003FD4) Flash Bank Swap Control Register */ + + struct + { + __IOM uint16_t BKSWUPEN : 1; /*!< [0..0] Bank Swap Update Enable */ + uint16_t : 7; + __OM uint16_t FEKEY : 8; /*!< [15..8] Key Code */ + } FBKSWCR_b; + }; + __IM uint16_t RESERVED40; +} R_FACI_LP_Type; /*!< Size = 16344 (0x3fd8) */ + +/* =========================================================================================================================== */ +/* ================ R_FCACHE ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Memory Cache (R_FCACHE) + */ + +typedef struct /*!< (@ 0x4001C000) R_FCACHE Structure */ +{ + __IM uint16_t RESERVED[128]; + + union + { + __IOM uint16_t FCACHEE; /*!< (@ 0x00000100) Flash Cache Enable Register */ + + struct + { + __IOM uint16_t FCACHEEN : 1; /*!< [0..0] FCACHE Enable */ + uint16_t : 15; + } FCACHEE_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t FCACHEIV; /*!< (@ 0x00000104) Flash Cache Invalidate Register */ + + struct + { + __IOM uint16_t FCACHEIV : 1; /*!< [0..0] Flash Cache Invalidate Register */ + uint16_t : 15; + } FCACHEIV_b; + }; + __IM uint16_t RESERVED2[11]; + + union + { + __IOM uint8_t FLWT; /*!< (@ 0x0000011C) Flash Wait Cycle Register */ + + struct + { + __IOM uint8_t FLWT : 3; /*!< [2..0] Flash Wait Cycle */ + uint8_t : 5; + } FLWT_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4[17]; + + union + { + __IOM uint16_t FSAR; /*!< (@ 0x00000140) Flash Security Attribution Register */ + + struct + { + __IOM uint16_t FLWTSA : 1; /*!< [0..0] FLWT Security Attribution */ + __IOM uint16_t PFBERSA : 1; /*!< [1..1] PFBERSA Security Attribution */ + uint16_t : 6; + __IOM uint16_t FCKMHZSA : 1; /*!< [8..8] FCKMHZ Security Attribution */ + __IOM uint16_t FACICOMISA : 1; /*!< [9..9] FACI Command Issuing Security Attribution */ + __IOM uint16_t FACICOMRSA : 1; /*!< [10..10] FACI Command registera Security Attribution */ + uint16_t : 4; + __IOM uint16_t DFLCTLSA : 1; /*!< [15..15] DFLCTL Security Attribution */ + } FSAR_b; + }; +} R_FCACHE_Type; /*!< Size = 322 (0x142) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief General PWM Timer (R_GPT0) + */ + +typedef struct /*!< (@ 0x40078000) R_GPT0 Structure */ +{ + union + { + __IOM uint32_t GTWP; /*!< (@ 0x00000000) General PWM Timer Write-Protection Register */ + + struct + { + __IOM uint32_t WP : 1; /*!< [0..0] Register Write Disable */ + __IOM uint32_t STRWP : 1; /*!< [1..1] GTSTR.CSTRT Bit Write Disable */ + __IOM uint32_t STPWP : 1; /*!< [2..2] GTSTP.CSTOP Bit Write Disable */ + __IOM uint32_t CLRWP : 1; /*!< [3..3] GTCLR.CCLR Bit Write Disable */ + __IOM uint32_t CMNWP : 1; /*!< [4..4] Common Register Write Disabled */ + uint32_t : 3; + __OM uint32_t PRKEY : 8; /*!< [15..8] GTWP Key Code */ + uint32_t : 16; + } GTWP_b; + }; + + union + { + __IOM uint32_t GTSTR; /*!< (@ 0x00000004) General PWM Timer Software Start Register */ + + struct + { + __IOM uint32_t CSTRT0 : 1; /*!< [0..0] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT1 : 1; /*!< [1..1] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT2 : 1; /*!< [2..2] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT3 : 1; /*!< [3..3] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT4 : 1; /*!< [4..4] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT5 : 1; /*!< [5..5] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT6 : 1; /*!< [6..6] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT7 : 1; /*!< [7..7] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT8 : 1; /*!< [8..8] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT9 : 1; /*!< [9..9] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT10 : 1; /*!< [10..10] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT11 : 1; /*!< [11..11] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT12 : 1; /*!< [12..12] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT13 : 1; /*!< [13..13] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT14 : 1; /*!< [14..14] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT15 : 1; /*!< [15..15] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT16 : 1; /*!< [16..16] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT17 : 1; /*!< [17..17] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT18 : 1; /*!< [18..18] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT19 : 1; /*!< [19..19] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT20 : 1; /*!< [20..20] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT21 : 1; /*!< [21..21] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT22 : 1; /*!< [22..22] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT23 : 1; /*!< [23..23] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT24 : 1; /*!< [24..24] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT25 : 1; /*!< [25..25] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT26 : 1; /*!< [26..26] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT27 : 1; /*!< [27..27] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT28 : 1; /*!< [28..28] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT29 : 1; /*!< [29..29] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT30 : 1; /*!< [30..30] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + __IOM uint32_t CSTRT31 : 1; /*!< [31..31] Channel GTCNT Count StartRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter stop. 1 + * means counter running. */ + } GTSTR_b; + }; + + union + { + __IOM uint32_t GTSTP; /*!< (@ 0x00000008) General PWM Timer Software Stop Register */ + + struct + { + __IOM uint32_t CSTOP0 : 1; /*!< [0..0] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP1 : 1; /*!< [1..1] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP2 : 1; /*!< [2..2] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP3 : 1; /*!< [3..3] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP4 : 1; /*!< [4..4] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP5 : 1; /*!< [5..5] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP6 : 1; /*!< [6..6] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP7 : 1; /*!< [7..7] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP8 : 1; /*!< [8..8] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP9 : 1; /*!< [9..9] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP10 : 1; /*!< [10..10] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP11 : 1; /*!< [11..11] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP12 : 1; /*!< [12..12] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP13 : 1; /*!< [13..13] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP14 : 1; /*!< [14..14] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP15 : 1; /*!< [15..15] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP16 : 1; /*!< [16..16] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP17 : 1; /*!< [17..17] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP18 : 1; /*!< [18..18] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP19 : 1; /*!< [19..19] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP20 : 1; /*!< [20..20] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP21 : 1; /*!< [21..21] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP22 : 1; /*!< [22..22] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP23 : 1; /*!< [23..23] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP24 : 1; /*!< [24..24] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP25 : 1; /*!< [25..25] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP26 : 1; /*!< [26..26] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP27 : 1; /*!< [27..27] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP28 : 1; /*!< [28..28] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP29 : 1; /*!< [29..29] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP30 : 1; /*!< [30..30] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + __IOM uint32_t CSTOP31 : 1; /*!< [31..31] Channel GTCNT Count StopRead data shows each channel's + * counter status (GTCR.CST bit). 0 means counter runnning. + * 1 means counter stop. */ + } GTSTP_b; + }; + + union + { + __OM uint32_t GTCLR; /*!< (@ 0x0000000C) General PWM Timer Software Clear Register */ + + struct + { + __OM uint32_t CCLR0 : 1; /*!< [0..0] Channel GTCNT Count Clear */ + __OM uint32_t CCLR1 : 1; /*!< [1..1] Channel GTCNT Count Clear */ + __OM uint32_t CCLR2 : 1; /*!< [2..2] Channel GTCNT Count Clear */ + __OM uint32_t CCLR3 : 1; /*!< [3..3] Channel GTCNT Count Clear */ + __OM uint32_t CCLR4 : 1; /*!< [4..4] Channel GTCNT Count Clear */ + __OM uint32_t CCLR5 : 1; /*!< [5..5] Channel GTCNT Count Clear */ + __OM uint32_t CCLR6 : 1; /*!< [6..6] Channel GTCNT Count Clear */ + __OM uint32_t CCLR7 : 1; /*!< [7..7] Channel GTCNT Count Clear */ + __OM uint32_t CCLR8 : 1; /*!< [8..8] Channel GTCNT Count Clear */ + __OM uint32_t CCLR9 : 1; /*!< [9..9] Channel GTCNT Count Clear */ + __OM uint32_t CCLR10 : 1; /*!< [10..10] Channel GTCNT Count Clear */ + __OM uint32_t CCLR11 : 1; /*!< [11..11] Channel GTCNT Count Clear */ + __OM uint32_t CCLR12 : 1; /*!< [12..12] Channel GTCNT Count Clear */ + __OM uint32_t CCLR13 : 1; /*!< [13..13] Channel GTCNT Count Clear */ + __OM uint32_t CCLR14 : 1; /*!< [14..14] Channel GTCNT Count Clear */ + __OM uint32_t CCLR15 : 1; /*!< [15..15] Channel GTCNT Count Clear */ + __OM uint32_t CCLR16 : 1; /*!< [16..16] Channel GTCNT Count Clear */ + __OM uint32_t CCLR17 : 1; /*!< [17..17] Channel GTCNT Count Clear */ + __OM uint32_t CCLR18 : 1; /*!< [18..18] Channel GTCNT Count Clear */ + __OM uint32_t CCLR19 : 1; /*!< [19..19] Channel GTCNT Count Clear */ + __OM uint32_t CCLR20 : 1; /*!< [20..20] Channel GTCNT Count Clear */ + __OM uint32_t CCLR21 : 1; /*!< [21..21] Channel GTCNT Count Clear */ + __OM uint32_t CCLR22 : 1; /*!< [22..22] Channel GTCNT Count Clear */ + __OM uint32_t CCLR23 : 1; /*!< [23..23] Channel GTCNT Count Clear */ + __OM uint32_t CCLR24 : 1; /*!< [24..24] Channel GTCNT Count Clear */ + __OM uint32_t CCLR25 : 1; /*!< [25..25] Channel GTCNT Count Clear */ + __OM uint32_t CCLR26 : 1; /*!< [26..26] Channel GTCNT Count Clear */ + __OM uint32_t CCLR27 : 1; /*!< [27..27] Channel GTCNT Count Clear */ + __OM uint32_t CCLR28 : 1; /*!< [28..28] Channel GTCNT Count Clear */ + __OM uint32_t CCLR29 : 1; /*!< [29..29] Channel GTCNT Count Clear */ + __OM uint32_t CCLR30 : 1; /*!< [30..30] Channel GTCNT Count Clear */ + __OM uint32_t CCLR31 : 1; /*!< [31..31] Channel GTCNT Count Clear */ + } GTCLR_b; + }; + + union + { + __IOM uint32_t GTSSR; /*!< (@ 0x00000010) General PWM Timer Start Source Select Register */ + + struct + { + __IOM uint32_t SSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Start Enable */ + __IOM uint32_t SSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Start Enable */ + __IOM uint32_t SSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Start Enable */ + __IOM uint32_t SSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Start Enable */ + __IOM uint32_t SSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Start Enable */ + __IOM uint32_t SSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Start Enable */ + __IOM uint32_t SSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Start Enable */ + uint32_t : 7; + __IOM uint32_t CSTRT : 1; /*!< [31..31] Software Source Counter Start Enable */ + } GTSSR_b; + }; + + union + { + __IOM uint32_t GTPSR; /*!< (@ 0x00000014) General PWM Timer Stop Source Select Register */ + + struct + { + __IOM uint32_t PSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Stop Enable */ + __IOM uint32_t PSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Stop Enable */ + __IOM uint32_t PSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Stop Enable */ + __IOM uint32_t PSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Stop Enable */ + __IOM uint32_t PSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Stop Enable */ + __IOM uint32_t PSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Stop Enable */ + uint32_t : 7; + __IOM uint32_t CSTOP : 1; /*!< [31..31] Software Source Counter Stop Enable */ + } GTPSR_b; + }; + + union + { + __IOM uint32_t GTCSR; /*!< (@ 0x00000018) General PWM Timer Clear Source Select Register */ + + struct + { + __IOM uint32_t CSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Clear Enable */ + __IOM uint32_t CSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Clear Enable */ + __IOM uint32_t CSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Clear Enable */ + __IOM uint32_t CSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Clear Enable */ + __IOM uint32_t CSELCA : 1; /*!< [16..16] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCB : 1; /*!< [17..17] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCC : 1; /*!< [18..18] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCD : 1; /*!< [19..19] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCE : 1; /*!< [20..20] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCF : 1; /*!< [21..21] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCG : 1; /*!< [22..22] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSELCH : 1; /*!< [23..23] ELC_GPTA Event Source Counter Clear Enable */ + __IOM uint32_t CSCMSC : 3; /*!< [26..24] Compare Match/Input Capture/Synchronous counter clearing + * Source Counter Clear Enable. */ + __IOM uint32_t CP1CCE : 1; /*!< [27..27] Complementary PWM mode1 Crest Source Counter Clear + * Enable (This bit is only available in GPT324 to GPT329. + * In GPT320 to GPT323, this bit is read as 0. The write value + * should be 0.) */ + uint32_t : 3; + __IOM uint32_t CCLR : 1; /*!< [31..31] Software Source Counter Clear Enable */ + } GTCSR_b; + }; + + union + { + __IOM uint32_t GTUPSR; /*!< (@ 0x0000001C) General PWM Timer Up Count Source Select Register */ + + struct + { + __IOM uint32_t USGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Up Enable */ + __IOM uint32_t USGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Up Enable */ + __IOM uint32_t USCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Count Up Enable */ + __IOM uint32_t USCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Count Up Enable */ + __IOM uint32_t USELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Up Enable */ + __IOM uint32_t USILVL : 4; /*!< [27..24] External Input Level Source Count-Up Enable */ + uint32_t : 4; + } GTUPSR_b; + }; + + union + { + __IOM uint32_t GTDNSR; /*!< (@ 0x00000020) General PWM Timer Down Count Source Select Register */ + + struct + { + __IOM uint32_t DSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source Counter Count Down Enable */ + __IOM uint32_t DSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source Counter Count Down Enable */ + __IOM uint32_t DSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * Counter Count Down Enable */ + __IOM uint32_t DSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * Counter Count Down Enable */ + __IOM uint32_t DSELCA : 1; /*!< [16..16] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCB : 1; /*!< [17..17] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCC : 1; /*!< [18..18] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCD : 1; /*!< [19..19] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCE : 1; /*!< [20..20] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCF : 1; /*!< [21..21] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCG : 1; /*!< [22..22] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSELCH : 1; /*!< [23..23] ELC_GPT Event Source Counter Count Down Enable */ + __IOM uint32_t DSILVL : 4; /*!< [27..24] External Input Level Source Count-Down Enable */ + uint32_t : 4; + } GTDNSR_b; + }; + + union + { + __IOM uint32_t GTICASR; /*!< (@ 0x00000024) General PWM Timer Input Capture Source Select + * Register A */ + + struct + { + __IOM uint32_t ASGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRA Input Capture + * Enable */ + __IOM uint32_t ASCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRA Input Capture Enable */ + __IOM uint32_t ASOC : 1; /*!< [24..24] Other channel Source GTCCRA Input Capture Enable */ + uint32_t : 7; + } GTICASR_b; + }; + + union + { + __IOM uint32_t GTICBSR; /*!< (@ 0x00000028) General PWM Timer Input Capture Source Select + * Register B */ + + struct + { + __IOM uint32_t BSGTRGAR : 1; /*!< [0..0] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGAF : 1; /*!< [1..1] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGBR : 1; /*!< [2..2] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGBF : 1; /*!< [3..3] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGCR : 1; /*!< [4..4] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGCF : 1; /*!< [5..5] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSGTRGDR : 1; /*!< [6..6] GTETRG Pin Rising Input Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSGTRGDF : 1; /*!< [7..7] GTETRG Pin Falling Input Source GTCCRB Input Capture + * Enable */ + __IOM uint32_t BSCARBL : 1; /*!< [8..8] GTIOCA Pin Rising Input during GTIOCB Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCARBH : 1; /*!< [9..9] GTIOCA Pin Rising Input during GTIOCB Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCAFBL : 1; /*!< [10..10] GTIOCA Pin Falling Input during GTIOCB Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCAFBH : 1; /*!< [11..11] GTIOCA Pin Falling Input during GTIOCB Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBRAL : 1; /*!< [12..12] GTIOCB Pin Rising Input during GTIOCA Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBRAH : 1; /*!< [13..13] GTIOCB Pin Rising Input during GTIOCA Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBFAL : 1; /*!< [14..14] GTIOCB Pin Falling Input during GTIOCA Value Low Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSCBFAH : 1; /*!< [15..15] GTIOCB Pin Falling Input during GTIOCA Value High Source + * GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCA : 1; /*!< [16..16] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCB : 1; /*!< [17..17] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCC : 1; /*!< [18..18] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCD : 1; /*!< [19..19] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCE : 1; /*!< [20..20] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCF : 1; /*!< [21..21] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCG : 1; /*!< [22..22] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSELCH : 1; /*!< [23..23] ELC_GPT Event Source GTCCRB Input Capture Enable */ + __IOM uint32_t BSOC : 1; /*!< [24..24] Other channel Source GTCCRB Input Capture Enable */ + uint32_t : 7; + } GTICBSR_b; + }; + + union + { + __IOM uint32_t GTCR; /*!< (@ 0x0000002C) General PWM Timer Control Register */ + + struct + { + __IOM uint32_t CST : 1; /*!< [0..0] Count Start */ + uint32_t : 3; + __IOM uint32_t AINV : 1; /*!< [4..4] GTIOCnA input/output pin polarity reversal control */ + __IOM uint32_t BINV : 1; /*!< [5..5] GTIOCnB input/output pin polarity reversal control */ + uint32_t : 2; + __IOM uint32_t ICDS : 1; /*!< [8..8] Input Capture Operation Select During Count Stop */ + __IOM uint32_t SCGTIOC : 1; /*!< [9..9] GTIOC input Source Synchronous Clear Enable */ + __IOM uint32_t SSCGRP : 2; /*!< [11..10] Synchronous Set/Clear Group Select */ + __IOM uint32_t CPSCD : 1; /*!< [12..12] Complementary PWM Mode Synchronous Clear Disable */ + uint32_t : 2; + __IOM uint32_t SSCEN : 1; /*!< [15..15] Synchronous Set/Clear Enable */ + __IOM uint32_t MD : 4; /*!< [19..16] Mode Select */ + uint32_t : 4; + __IOM uint32_t TPCS : 3; /*!< [26..24] Timer Prescaler Select */ + __IOM uint32_t CKEG : 2; /*!< [28..27] Clock Edge Select */ + uint32_t : 3; + } GTCR_b; + }; + + union + { + __IOM uint32_t GTUDDTYC; /*!< (@ 0x00000030) General PWM Timer Count Direction and Duty Setting + * Register */ + + struct + { + __IOM uint32_t UD : 1; /*!< [0..0] Count Direction Setting */ + __IOM uint32_t UDF : 1; /*!< [1..1] Forcible Count Direction Setting */ + uint32_t : 14; + __IOM uint32_t OADTY : 2; /*!< [17..16] GTIOCA Output Duty Setting */ + __IOM uint32_t OADTYF : 1; /*!< [18..18] Forcible GTIOCA Output Duty Setting */ + __IOM uint32_t OADTYR : 1; /*!< [19..19] GTIOCA Output Value Selecting after Releasing 0 percent/100 + * percent Duty Setting */ + uint32_t : 4; + __IOM uint32_t OBDTY : 2; /*!< [25..24] GTIOCB Output Duty Setting */ + __IOM uint32_t OBDTYF : 1; /*!< [26..26] Forcible GTIOCB Output Duty Setting */ + __IOM uint32_t OBDTYR : 1; /*!< [27..27] GTIOCB Output Value Selecting after Releasing 0 percent/100 + * percent Duty Setting */ + __IOM uint32_t OABDTYT : 1; /*!< [28..28] GTIOCnA,B pin output 0%/100% duty setting reflection + * timing setting */ + uint32_t : 3; + } GTUDDTYC_b; + }; + + union + { + __IOM uint32_t GTIOR; /*!< (@ 0x00000034) General PWM Timer I/O Control Register */ + + struct + { + __IOM uint32_t GTIOA : 5; /*!< [4..0] GTIOCA Pin Function Select */ + __IOM uint32_t CPSCIR : 1; /*!< [5..5] Complementary PWM Mode Initial Output at Synchronous + * Clear Disable.(This bit is only available in GPT324 to + * GPT329. In GPT320 to GPT323, this bit is read as 0. The + * write value should be 0.) */ + __IOM uint32_t OADFLT : 1; /*!< [6..6] GTIOCA Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OAHLD : 1; /*!< [7..7] GTIOCA Pin Output Setting at the Start/Stop Count */ + __IOM uint32_t OAE : 1; /*!< [8..8] GTIOCA Pin Output Enable */ + __IOM uint32_t OADF : 2; /*!< [10..9] GTIOCA Pin Disable Value Setting */ + __IOM uint32_t OAEOCD : 1; /*!< [11..11] GTCCRA Compare Match Cycle End Output Invalidate.(This + * bit is only available in GPT324 to GPT329. In GPT320 to + * GPT323, this bit is read as 0. The write value should be + * 0.) */ + __IOM uint32_t PSYE : 1; /*!< [12..12] PWM Synchronous output Enable */ + __IOM uint32_t NFAEN : 1; /*!< [13..13] Noise Filter A Enable */ + __IOM uint32_t NFCSA : 2; /*!< [15..14] Noise Filter A Sampling Clock Select */ + __IOM uint32_t GTIOB : 5; /*!< [20..16] GTIOCB Pin Function Select */ + uint32_t : 1; + __IOM uint32_t OBDFLT : 1; /*!< [22..22] GTIOCB Pin Output Value Setting at the Count Stop */ + __IOM uint32_t OBHLD : 1; /*!< [23..23] GTIOCB Pin Output Setting at the Start/Stop Count */ + __IOM uint32_t OBE : 1; /*!< [24..24] GTIOCB Pin Output Enable */ + __IOM uint32_t OBDF : 2; /*!< [26..25] GTIOCB Pin Disable Value Setting */ + __IOM uint32_t OBEOCD : 1; /*!< [27..27] GTCCRB Compare Match Cycle End Output Invalidate.(This + * bit is only available in GPT324 to GPT329. In GPT320 to + * GPT323, this bit is read as 0. The write value should be + * 0.) */ + uint32_t : 1; + __IOM uint32_t NFBEN : 1; /*!< [29..29] Noise Filter B Enable */ + __IOM uint32_t NFCSB : 2; /*!< [31..30] Noise Filter B Sampling Clock Select */ + } GTIOR_b; + }; + + union + { + __IOM uint32_t GTINTAD; /*!< (@ 0x00000038) General PWM Timer Interrupt Output Setting Register */ + + struct + { + __IOM uint32_t GTINTA : 1; /*!< [0..0] GTCCRA Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTB : 1; /*!< [1..1] GTCCRB Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTC : 1; /*!< [2..2] GTCCRC Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTD : 1; /*!< [3..3] GTCCRD Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTE : 1; /*!< [4..4] GTCCRE Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTF : 1; /*!< [5..5] GTCCRF Register Compare Match/Input Capture Interrupt + * Enable */ + __IOM uint32_t GTINTPR : 2; /*!< [7..6] GTPR Register Compare Match Interrupt Enable */ + __IOM uint32_t SCFA : 1; /*!< [8..8] GTCCRn Register Compare Match/Input Capture Source Synchronous + * Clear Enable */ + __IOM uint32_t SCFB : 1; /*!< [9..9] GTCCRn Register Compare Match/Input Capture Source Synchronous + * Clear Enable */ + __IOM uint32_t SCFC : 1; /*!< [10..10] GTCCRn Register Compare Match/Input Capture Source + * Synchronous Clear Enable */ + __IOM uint32_t SCFD : 1; /*!< [11..11] GTCCRn Register Compare Match/Input Capture Source + * Synchronous Clear Enable */ + __IOM uint32_t SCFE : 1; /*!< [12..12] GTCCRn Register Compare Match/Input Capture Source + * Synchronous Clear Enable */ + __IOM uint32_t SCFF : 1; /*!< [13..13] GTCCRn Register Compare Match/Input Capture Source + * Synchronous Clear Enable */ + __IOM uint32_t SCFPO : 1; /*!< [14..14] Overflow Source Synchronous Clear Enable */ + __IOM uint32_t SCFPU : 1; /*!< [15..15] Underflow Source Synchronous Clear Enable */ + __IOM uint32_t ADTRAUEN : 1; /*!< [16..16] GTADTRn Register Compare Match (Up-Counting) A/D Conversion + * Start Request Enable */ + __IOM uint32_t ADTRADEN : 1; /*!< [17..17] GTADTRn Register Compare Match (Down-Counting) A/D + * Conversion Start Request Enable */ + __IOM uint32_t ADTRBUEN : 1; /*!< [18..18] GTADTRn Register Compare Match (Up-Counting) A/D Conversion + * Start Request Enable */ + __IOM uint32_t ADTRBDEN : 1; /*!< [19..19] GTADTRn Register Compare Match (Down-Counting) A/D + * Conversion Start Request Enable */ + uint32_t : 4; + __IOM uint32_t GRP : 2; /*!< [25..24] Output Disable Source Select */ + uint32_t : 2; + __IOM uint32_t GRPDTE : 1; /*!< [28..28] Dead Time Error Output Disable Request Enable */ + __IOM uint32_t GRPABH : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ + __IOM uint32_t GRPABL : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ + __IOM uint32_t GTINTPC : 1; /*!< [31..31] Period Count Function Finish Interrupt Enable */ + } GTINTAD_b; + }; + + union + { + __IOM uint32_t GTST; /*!< (@ 0x0000003C) General PWM Timer Status Register */ + + struct + { + __IOM uint32_t TCFA : 1; /*!< [0..0] Input Capture/Compare Match Flag A */ + __IOM uint32_t TCFB : 1; /*!< [1..1] Input Capture/Compare Match Flag B */ + __IOM uint32_t TCFC : 1; /*!< [2..2] Input Compare Match Flag C */ + __IOM uint32_t TCFD : 1; /*!< [3..3] Input Compare Match Flag D */ + __IOM uint32_t TCFE : 1; /*!< [4..4] Input Compare Match Flag E */ + __IOM uint32_t TCFF : 1; /*!< [5..5] Input Compare Match Flag F */ + __IOM uint32_t TCFPO : 1; /*!< [6..6] Overflow Flag */ + __IOM uint32_t TCFPU : 1; /*!< [7..7] Underflow Flag */ + __IM uint32_t ITCNT : 3; /*!< [10..8] GTCIV/GTCIU Interrupt Skipping Count Counter(Counter + * for counting the number of times a timer interrupt has + * been skipped.) */ + uint32_t : 4; + __IM uint32_t TUCF : 1; /*!< [15..15] Count Direction Flag */ + __IOM uint32_t ADTRAUF : 1; /*!< [16..16] GTADTRA Compare Match (Up-Counting) A/D Converter Start + * Request Interrupt Enable */ + __IOM uint32_t ADTRADF : 1; /*!< [17..17] GTADTRA Compare Match(Down-Counting) A/D Convertor + * Start Request Flag */ + __IOM uint32_t ADTRBUF : 1; /*!< [18..18] GTADTRB Compare Match(Up-Counting) A/D Convertor Start + * Request Flag */ + __IOM uint32_t ADTRBDF : 1; /*!< [19..19] GTADTRB Compare Match(Down-Counting) A/D Convertor + * Start Request Flag */ + uint32_t : 4; + __IM uint32_t ODF : 1; /*!< [24..24] Output Disable Flag */ + uint32_t : 3; + __IM uint32_t DTEF : 1; /*!< [28..28] Dead Time Error Flag */ + __IM uint32_t OABHF : 1; /*!< [29..29] Same Time Output Level High Disable Request Enable */ + __IM uint32_t OABLF : 1; /*!< [30..30] Same Time Output Level Low Disable Request Enable */ + __IOM uint32_t PCF : 1; /*!< [31..31] Period Count Function Finish Flag */ + } GTST_b; + }; + + union + { + __IOM uint32_t GTBER; /*!< (@ 0x00000040) General PWM Timer Buffer Enable Register */ + + struct + { + __IOM uint32_t BD0 : 1; /*!< [0..0] BD[0]: GTCCR Buffer Operation Disable */ + __IOM uint32_t BD1 : 1; /*!< [1..1] BD[1]: GTPR Buffer Operation Disable */ + __IOM uint32_t BD2 : 1; /*!< [2..2] BD[2]: GTADTR Buffer Operation DisableBD */ + __IOM uint32_t BD3 : 1; /*!< [3..3] BD[3]: GTDV Buffer Operation DisableBD[2] */ + uint32_t : 4; + __IOM uint32_t DBRTECA : 1; /*!< [8..8] GTCCRn Register Double Buffer Repeat Operation Enable */ + uint32_t : 1; + __IOM uint32_t DBRTECB : 1; /*!< [10..10] GTCCRn Register Double Buffer Repeat Operation Enable */ + uint32_t : 5; + __IOM uint32_t CCRA : 2; /*!< [17..16] GTCCRA Buffer Operation */ + __IOM uint32_t CCRB : 2; /*!< [19..18] GTCCRB Buffer Operation */ + __IOM uint32_t PR : 2; /*!< [21..20] GTPR Buffer Operation */ + __OM uint32_t CCRSWT : 1; /*!< [22..22] GTCCRA and GTCCRB Forcible Buffer OperationThis bit + * is read as 0. */ + uint32_t : 1; + __IOM uint32_t ADTTA : 2; /*!< [25..24] GTADTRA Buffer Transfer Timing Select in the Triangle + * wavesNOTE: In the Saw waves, values other than 0 0: Transfer + * at an underflow (in down-counting) or overflow (in up-counting) + * is performed. */ + __IOM uint32_t ADTDA : 1; /*!< [26..26] GTADTRA Double Buffer Operation */ + uint32_t : 1; + __IOM uint32_t ADTTB : 2; /*!< [29..28] GTADTRB Buffer Transfer Timing Select in the Triangle + * wavesNOTE: In the Saw waves, values other than 0 0: Transfer + * at an underflow (in down-counting) or overflow (in up-counting) + * is performed. */ + __IOM uint32_t ADTDB : 1; /*!< [30..30] GTADTRB Double Buffer Operation */ + uint32_t : 1; + } GTBER_b; + }; + + union + { + __IOM uint32_t GTITC; /*!< (@ 0x00000044) General PWM Timer Interrupt and A/D Converter + * Start Request Skipping Setting Register */ + + struct + { + __IOM uint32_t ITLA : 1; /*!< [0..0] GTCCRA Compare Match/Input Capture Interrupt Link */ + __IOM uint32_t ITLB : 1; /*!< [1..1] GTCCRB Compare Match/Input Capture Interrupt Link */ + __IOM uint32_t ITLC : 1; /*!< [2..2] GTCCRC Compare Match Interrupt Link */ + __IOM uint32_t ITLD : 1; /*!< [3..3] GTCCRD Compare Match Interrupt Link */ + __IOM uint32_t ITLE : 1; /*!< [4..4] GTCCRE Compare Match Interrupt Link */ + __IOM uint32_t ITLF : 1; /*!< [5..5] GTCCRF Compare Match Interrupt Link */ + __IOM uint32_t IVTC : 2; /*!< [7..6] GPT_OVF/GPT_UDF Interrupt Skipping Function Select */ + __IOM uint32_t IVTT : 3; /*!< [10..8] GPT_OVF/GPT_UDF Interrupt Skipping Count Select */ + uint32_t : 1; + __IOM uint32_t ADTAL : 1; /*!< [12..12] GTADTRA A/D Converter Start Request Link */ + uint32_t : 1; + __IOM uint32_t ADTBL : 1; /*!< [14..14] GTADTRB A/D Converter Start Request Link */ + uint32_t : 17; + } GTITC_b; + }; + + union + { + __IOM uint32_t GTCNT; /*!< (@ 0x00000048) General PWM Timer Counter */ + + struct + { + __IOM uint32_t GTCNT : 32; /*!< [31..0] Counter */ + } GTCNT_b; + }; + + union + { + __IOM uint32_t GTCCR[6]; /*!< (@ 0x0000004C) General PWM Timer Compare Capture Register */ + + struct + { + __IOM uint32_t GTCCR : 32; /*!< [31..0] Compare Capture Register A */ + } GTCCR_b[6]; + }; + + union + { + __IOM uint32_t GTPR; /*!< (@ 0x00000064) General PWM Timer Cycle Setting Register */ + + struct + { + __IOM uint32_t GTPR : 32; /*!< [31..0] Cycle Setting Register */ + } GTPR_b; + }; + + union + { + __IOM uint32_t GTPBR; /*!< (@ 0x00000068) General PWM Timer Cycle Setting Buffer Register */ + + struct + { + __IOM uint32_t GTPBR : 32; /*!< [31..0] Cycle Setting Buffer Register */ + } GTPBR_b; + }; + + union + { + __IOM uint32_t GTPDBR; /*!< (@ 0x0000006C) General PWM Timer Cycle Setting Double-Buffer + * Register */ + + struct + { + __IOM uint32_t GTPDBR : 32; /*!< [31..0] Cycle Setting Double-Buffer Register */ + } GTPDBR_b; + }; + + union + { + __IOM uint32_t GTADTRA; /*!< (@ 0x00000070) A/D Converter Start Request Timing Register A */ + + struct + { + __IOM uint32_t GTADTRA : 32; /*!< [31..0] A/D Converter Start Request Timing Register A */ + } GTADTRA_b; + }; + + union + { + __IOM uint32_t GTADTBRA; /*!< (@ 0x00000074) A/D Converter Start Request Timing Buffer Register + * A */ + + struct + { + __IOM uint32_t GTADTBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register A */ + } GTADTBRA_b; + }; + + union + { + __IOM uint32_t GTADTDBRA; /*!< (@ 0x00000078) A/D Converter Start Request Timing Double-Buffer + * Register A */ + + struct + { + __IOM uint32_t GTADTDBRA : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register + * A */ + } GTADTDBRA_b; + }; + + union + { + __IOM uint32_t GTADTRB; /*!< (@ 0x0000007C) A/D Converter Start Request Timing Register B */ + + struct + { + __IOM uint32_t GTADTRB : 32; /*!< [31..0] A/D Converter Start Request Timing Register B */ + } GTADTRB_b; + }; + + union + { + __IOM uint32_t GTADTBRB; /*!< (@ 0x00000080) A/D Converter Start Request Timing Buffer Register + * B */ + + struct + { + __IOM uint32_t GTADTBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Buffer Register B */ + } GTADTBRB_b; + }; + + union + { + __IOM uint32_t GTADTDBRB; /*!< (@ 0x00000084) A/D Converter Start Request Timing Double-Buffer + * Register B */ + + struct + { + __IOM uint32_t GTADTDBRB : 32; /*!< [31..0] A/D Converter Start Request Timing Double-Buffer Register + * B */ + } GTADTDBRB_b; + }; + + union + { + __IOM uint32_t GTDTCR; /*!< (@ 0x00000088) General PWM Timer Dead Time Control Register */ + + struct + { + __IOM uint32_t TDE : 1; /*!< [0..0] Negative-Phase Waveform Setting */ + uint32_t : 3; + __IOM uint32_t TDBUE : 1; /*!< [4..4] GTDVU Buffer Operation Enable */ + __IOM uint32_t TDBDE : 1; /*!< [5..5] GTDVD Buffer Operation Enable */ + uint32_t : 2; + __IOM uint32_t TDFER : 1; /*!< [8..8] GTDVD Setting */ + uint32_t : 23; + } GTDTCR_b; + }; + + union + { + __IOM uint32_t GTDVU; /*!< (@ 0x0000008C) General PWM Timer Dead Time Value Register U */ + + struct + { + __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Value Register U */ + } GTDVU_b; + }; + + union + { + __IOM uint32_t GTDVD; /*!< (@ 0x00000090) General PWM Timer Dead Time Value Register D */ + + struct + { + __IOM uint32_t GTDVD : 32; /*!< [31..0] Dead Time Value Register D */ + } GTDVD_b; + }; + + union + { + __IOM uint32_t GTDBU; /*!< (@ 0x00000094) General PWM Timer Dead Time Buffer Register U */ + + struct + { + __IOM uint32_t GTDVU : 32; /*!< [31..0] Dead Time Buffer Register U */ + } GTDBU_b; + }; + + union + { + __IOM uint32_t GTDBD; /*!< (@ 0x00000098) General PWM Timer Dead Time Buffer Register D */ + + struct + { + __IOM uint32_t GTDBD : 32; /*!< [31..0] Dead Time Buffer Register D */ + } GTDBD_b; + }; + + union + { + __IM uint32_t GTSOS; /*!< (@ 0x0000009C) General PWM Timer Output Protection Function + * Status Register */ + + struct + { + __IM uint32_t SOS : 2; /*!< [1..0] Output Protection Function Status */ + uint32_t : 30; + } GTSOS_b; + }; + + union + { + __IOM uint32_t GTSOTR; /*!< (@ 0x000000A0) General PWM Timer Output Protection Function + * Temporary Release Register */ + + struct + { + __IOM uint32_t SOTR : 1; /*!< [0..0] Output Protection Function Temporary Release */ + uint32_t : 31; + } GTSOTR_b; + }; + + union + { + __IOM uint32_t GTADSMR; /*!< (@ 0x000000A4) General PWM Timer A/D Conversion Start Request + * Signal Monitoring Register */ + + struct + { + __IOM uint32_t ADSMS0 : 2; /*!< [1..0] A/D Conversion Start Request Signal Monitor 0 Selection */ + uint32_t : 6; + __IOM uint32_t ADSMEN0 : 1; /*!< [8..8] A/D Conversion Start Request Signal Monitor 0 Output + * Enabling */ + uint32_t : 7; + __IOM uint32_t ADSMS1 : 2; /*!< [17..16] A/D Conversion Start Request Signal Monitor 1 Selection */ + uint32_t : 6; + __IOM uint32_t ADSMEN1 : 1; /*!< [24..24] A/D Conversion Start Request Signal Monitor 1 Output + * Enabling */ + uint32_t : 7; + } GTADSMR_b; + }; + + union + { + __IOM uint32_t GTEITC; /*!< (@ 0x000000A8) General PWM Timer Extended Interrupt Skipping + * Counter Control Register */ + + struct + { + __IOM uint32_t EIVTC1 : 2; /*!< [1..0] Extended Interrupt Skipping Counter 1 Count Source Select */ + uint32_t : 2; + __IOM uint32_t EIVTT1 : 4; /*!< [7..4] Extended Interrupt Skipping 1 Skipping Count Setting */ + uint32_t : 4; + __IM uint32_t EITCNT1 : 4; /*!< [15..12] Extended Interrupt Skipping Counter 1 */ + __IOM uint32_t EIVTC2 : 2; /*!< [17..16] Extended Interrupt Skipping Counter 2 Count Source + * select */ + uint32_t : 2; + __IOM uint32_t EIVTT2 : 4; /*!< [23..20] Extended Interrupt Skipping 2 Skipping Count Setting */ + __IOM uint32_t EITCNT2IV : 4; /*!< [27..24] Extended Interrupt Skipping Counter 2 Initial Value */ + __IM uint32_t EITCNT2 : 4; /*!< [31..28] Extended Interrupt Skipping Counter 2 */ + } GTEITC_b; + }; + + union + { + __IOM uint32_t GTEITLI1; /*!< (@ 0x000000AC) General PWM Timer Extended Interrupt Skipping + * Setting Register 1 */ + + struct + { + __IOM uint32_t EITLA : 3; /*!< [2..0] GTCCRA Register Compare Match/Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLB : 3; /*!< [6..4] GTCCRB Register Compare Match/Input Capture Interrupt + * Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLC : 3; /*!< [10..8] GTCCRC Register Compare Match Interrupt Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EITLD : 3; /*!< [14..12] GTCCRD Register Compare Match Interrupt Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EITLE : 3; /*!< [18..16] GTCCRE Register Compare Match Interrupt Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EITLF : 3; /*!< [22..20] GTCCRF Register Compare Match Interrupt Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EITLV : 3; /*!< [26..24] Overflow Interrupt Extended Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EITLU : 3; /*!< [30..28] Underflow Interrupt Extended Skipping Function Select */ + uint32_t : 1; + } GTEITLI1_b; + }; + + union + { + __IOM uint32_t GTEITLI2; /*!< (@ 0x000000B0) General PWM Timer Extended Interrupt Skipping + * Setting Register 2 */ + + struct + { + __IOM uint32_t EADTAL : 3; /*!< [2..0] GTADTRA Register A/D Conversion Start Request Extended + * Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t EADTBL : 3; /*!< [6..4] GTADTRB Register A/D Conversion Start Request Extended + * Skipping Function Select */ + uint32_t : 25; + } GTEITLI2_b; + }; + + union + { + __IOM uint32_t GTEITLB; /*!< (@ 0x000000B4) General PWM Timer Extended Buffer Transfer Skipping + * Setting Register */ + + struct + { + __IOM uint32_t EBTLCA : 3; /*!< [2..0] GTCCRA Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLCB : 3; /*!< [6..4] GTCCRB Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLPR : 3; /*!< [10..8] GTPR Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 5; + __IOM uint32_t EBTLADA : 3; /*!< [18..16] GTADTRA Register Buffer Transfer Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EBTLADB : 3; /*!< [22..20] GTADTRB Register Buffer Transfer Extended Skipping + * Function Select */ + uint32_t : 1; + __IOM uint32_t EBTLDVU : 3; /*!< [26..24] GTDVU Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + __IOM uint32_t EBTLDVD : 3; /*!< [30..28] GTDVD Register Buffer Transfer Extended Skipping Function + * Select */ + uint32_t : 1; + } GTEITLB_b; + }; + + union + { + __IOM uint32_t GTICLF; /*!< (@ 0x000000B8) General PWM Timer Inter Channel Logical Operation + * Function Setting Register */ + + struct + { + __IOM uint32_t ICLFA : 3; /*!< [2..0] GTIOCnA Output Logical Operation Function Select */ + uint32_t : 1; + __IOM uint32_t ICLFSELC : 6; /*!< [9..4] Inter Channel Signal C Select */ + uint32_t : 6; + __IOM uint32_t ICLFB : 3; /*!< [18..16] GTIOCnB Output Logical Operation Function Select */ + uint32_t : 1; + __IOM uint32_t ICLFSELD : 6; /*!< [25..20] Inter Channel Signal D Select */ + uint32_t : 6; + } GTICLF_b; + }; + + union + { + __IOM uint32_t GTPC; /*!< (@ 0x000000BC) General PWM Timer Period Count Register */ + + struct + { + __IOM uint32_t PCEN : 1; /*!< [0..0] Period Count Function Enable */ + uint32_t : 7; + __IOM uint32_t ASTP : 1; /*!< [8..8] Automatic Stop Function Enable */ + uint32_t : 7; + __IOM uint32_t PCNT : 12; /*!< [27..16] Period Counter */ + uint32_t : 4; + } GTPC_b; + }; + + union + { + __IOM uint32_t GTADCMSC; /*!< (@ 0x000000C0) General PWM Timer A/D Conversion Start Request + * Compare Match Skipping Control Register */ + + struct + { + __IOM uint32_t ADCMSC1 : 2; /*!< [1..0] A/D Conversion Start Request Compare Match Skipping Counter + * 1 Count Source Select */ + uint32_t : 2; + __IOM uint32_t ADCMST1 : 4; /*!< [7..4] A/D Conversion Start Request Compare Match Skipping 1 + * Skipping Count Setting */ + __IOM uint32_t ADCMSCNT1IV : 4; /*!< [11..8] A/D Conversion Start Request Compare Match Skipping + * Counter 1 Initial Value */ + __IM uint32_t ADCMSCNT1 : 4; /*!< [15..12] A/D Conversion Start Request Compare Match Skipping + * Counter 1 */ + __IOM uint32_t ADCMSC2 : 2; /*!< [17..16] A/D Conversion Start Request Compare Match Skipping + * Counter 2 Count Source Select */ + uint32_t : 2; + __IOM uint32_t ADCMST2 : 4; /*!< [23..20] A/D Conversion Start Request Compare Match Skipping + * 2 Skipping Count Setting */ + __IOM uint32_t ADCMSCNT2IV : 4; /*!< [27..24] A/D Conversion Start Request Compare Match Skipping + * Counter 2 Initial Value */ + __IM uint32_t ADCMSCNT2 : 4; /*!< [31..28] A/D Conversion Start Request Compare Match Skipping + * Counter 2 */ + } GTADCMSC_b; + }; + + union + { + __IOM uint32_t GTADCMSS; /*!< (@ 0x000000C4) General PWM Timer A/D Conversion Start Request + * Compare Match Skipping Setting Register */ + + struct + { + __IOM uint32_t ADCMSAL : 3; /*!< [2..0] GTADTRA Register A/D Conversion Start Request Compare + * Match Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t ADCMSBL : 3; /*!< [6..4] GTADTRB Register A/D Conversion Start Request Compare + * Match Skipping Function Select */ + uint32_t : 9; + __IOM uint32_t ADCMBSA : 3; /*!< [18..16] GTADTRA Register Buffer Transfer by A/D Conversion + * Start Request Compare Match Skipping Function Select */ + uint32_t : 1; + __IOM uint32_t ADCMBSB : 3; /*!< [22..20] GTADTRB Register Buffer Transfer by A/D Conversion + * Start Request Compare Match Skipping Function Select */ + uint32_t : 9; + } GTADCMSS_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t GTSECSR; /*!< (@ 0x000000D0) General PWM Timer Operation Enable Bit Simultaneous + * Control Channel Select Register */ + + struct + { + __IOM uint32_t SECSEL0 : 1; /*!< [0..0] Channel 0 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL1 : 1; /*!< [1..1] Channel 1 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL2 : 1; /*!< [2..2] Channel 2 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL3 : 1; /*!< [3..3] Channel 3 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL4 : 1; /*!< [4..4] Channel 4 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL5 : 1; /*!< [5..5] Channel 5 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL6 : 1; /*!< [6..6] Channel 6 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL7 : 1; /*!< [7..7] Channel 7 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL8 : 1; /*!< [8..8] Channel 8 Operation Enable Bit Simultaneous Control Channel + * Select */ + __IOM uint32_t SECSEL9 : 1; /*!< [9..9] Channel 9 Operation Enable Bit Simultaneous Control Channel + * Select */ + uint32_t : 22; + } GTSECSR_b; + }; + + union + { + __IOM uint32_t GTSECR; /*!< (@ 0x000000D4) General PWM Timer Operation Enable Bit Simultaneous + * Control Register */ + + struct + { + __IOM uint32_t SBDCE : 1; /*!< [0..0] GTCCR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDPE : 1; /*!< [1..1] GTPR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDAE : 1; /*!< [2..2] GTADTR Register Buffer Operation Simultaneous Enable */ + __IOM uint32_t SBDDE : 1; /*!< [3..3] GTDV Register Buffer Operation Simultaneous Enable */ + uint32_t : 4; + __IOM uint32_t SBDCD : 1; /*!< [8..8] GTCCR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDPD : 1; /*!< [9..9] GTPR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDAD : 1; /*!< [10..10] GTADTR Register Buffer Operation Simultaneous Disable */ + __IOM uint32_t SBDDD : 1; /*!< [11..11] GTDV Register Buffer Operation Simultaneous Disable */ + uint32_t : 4; + __IOM uint32_t SPCE : 1; /*!< [16..16] Period Count Function Simultaneous Enable */ + __IOM uint32_t SSCE : 1; /*!< [17..17] Synchronous Set/Clear Simultaneous Enable */ + uint32_t : 6; + __IOM uint32_t SPCD : 1; /*!< [24..24] Period Count Function Simultaneous Disable */ + __IOM uint32_t SSCD : 1; /*!< [25..25] Synchronous Set/Clear Simultaneous Disable */ + uint32_t : 6; + } GTSECR_b; + }; + __IM uint32_t RESERVED1[2]; + + union + { + __IOM uint32_t GTBER2; /*!< (@ 0x000000E0) General PWM Timer Buffer Enable Register 2 */ + + struct + { + __IOM uint32_t CCTCA : 1; /*!< [0..0] Counter Clear Source GTCCRA Register Buffer Transfer + * Disable */ + __IOM uint32_t CCTCB : 1; /*!< [1..1] Counter Clear Source GTCCRB Register Buffer Transfer + * Disable */ + __IOM uint32_t CCTPR : 1; /*!< [2..2] Counter Clear Source GTPR Register Buffer Transfer Disable */ + __IOM uint32_t CCTADA : 1; /*!< [3..3] Counter Clear Source GTADTRA Register Buffer Transfer + * Disable */ + __IOM uint32_t CCTADB : 1; /*!< [4..4] Counter Clear Source GTADTRB Register Buffer Transfer + * Disable */ + __IOM uint32_t CCTDV : 1; /*!< [5..5] Counter Clear Source GTDVU/GTDVD Register Buffer Transfer + * Disable */ + uint32_t : 2; + __IOM uint32_t CMTCA : 2; /*!< [9..8] Compare Match Source GTCCRA Register Buffer Transfer + * Enable */ + __IOM uint32_t CMTCB : 2; /*!< [11..10] Compare Match Source GTCCRB Register Buffer Transfer + * Enable */ + uint32_t : 1; + __IOM uint32_t CMTADA : 1; /*!< [13..13] Compare Match Source GTADTRA Register Buffer Transfer + * Enable */ + __IOM uint32_t CMTADB : 1; /*!< [14..14] Compare Match Source GTADTRA Register Buffer Transfer + * Enable */ + uint32_t : 1; + __IOM uint32_t CPTCA : 1; /*!< [16..16] Overflow/Underflow Source GTCCRA Register Buffer Transfer + * Disable */ + __IOM uint32_t CPTCB : 1; /*!< [17..17] Overflow/Underflow Source GTCCRB Register Buffer Transfer + * Disable */ + __IOM uint32_t CPTPR : 1; /*!< [18..18] Overflow/Underflow Source GTPR Register Buffer Transfer + * Disable */ + __IOM uint32_t CPTADA : 1; /*!< [19..19] Overflow/Underflow Source GTADTRA Register Buffer Transfer + * Disable */ + __IOM uint32_t CPTADB : 1; /*!< [20..20] Overflow/Underflow Source GTADTRB Register Buffer Transfer + * Disable */ + __IOM uint32_t CPTDV : 1; /*!< [21..21] Overflow/Underflow Source GTDVU/GTDVD Register Buffer + * Transfer Disable */ + uint32_t : 2; + __IOM uint32_t CP3DB : 1; /*!< [24..24] Complementary PWM mode 3,4 Double Buffer select */ + __IOM uint32_t CPBTD : 1; /*!< [25..25] Complementary PWM mode Buffer Transfer Disable */ + __IOM uint32_t OLTTA : 2; /*!< [27..26] GTIOCnA Output Level Buffer Transfer Timing Select */ + __IOM uint32_t OLTTB : 2; /*!< [29..28] GTIOCnB Output Level Buffer Transfer Timing Select */ + uint32_t : 2; + } GTBER2_b; + }; + + union + { + __IOM uint32_t GTOLBR; /*!< (@ 0x000000E4) General PWM Timer Output Level Buffer Register */ + + struct + { + __IOM uint32_t GTIOAB : 5; /*!< [4..0] GTIOA buffer bits */ + uint32_t : 11; + __IOM uint32_t GTIOBB : 5; /*!< [20..16] GTIOBB buffer bits */ + uint32_t : 11; + } GTOLBR_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t GTICCR; /*!< (@ 0x000000EC) General PWM Timer Inter Channel Cooperation Input + * Capture Control Register */ + + struct + { + __IOM uint32_t ICAFA : 1; /*!< [0..0] Forwarding GTCCRA register Compare Match/Input Capture + * to Other Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFB : 1; /*!< [1..1] Forwarding GTCCRB register Compare Match/Input Capture + * to Other Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFC : 1; /*!< [2..2] Forwarding GTCCRC register Compare Match Capture to Other + * Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFD : 1; /*!< [3..3] Forwarding GTCCRD register Compare Match Capture to Other + * Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFE : 1; /*!< [4..4] Forwarding GTCCRE register Compare Match Capture to Other + * Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFF : 1; /*!< [5..5] Forwarding GTCCRF register Compare Match Capture to Other + * Channel GTCCRA Input Capture Source Enable */ + __IOM uint32_t ICAFPO : 1; /*!< [6..6] Forwarding Overflow to Other Channel GTCCRA Input Capture + * Source Enable */ + __IOM uint32_t ICAFPU : 1; /*!< [7..7] Forwarding Underflow to Other Channel GTCCRA Input Capture + * Source Enable */ + __IOM uint32_t ICACLK : 1; /*!< [8..8] Forwarding Count Clock to Other Channel GTCCRA Input + * Capture Source Enable */ + uint32_t : 5; + __IOM uint32_t ICAGRP : 2; /*!< [15..14] GTCCRA Input Capture Group Select */ + __IOM uint32_t ICBFA : 1; /*!< [16..16] Forwarding GTCCRA register Compare Match/Input Capture + * to Other Channel GTCCRB Input Capture Source Enable */ + __IOM uint32_t ICBFB : 1; /*!< [17..17] Forwarding GTCCRB register Compare Match/Input Capture + * to Other Channel GTCCRB Input Capture Source Enable */ + __IOM uint32_t ICBFC : 1; /*!< [18..18] Forwarding GTCCRC register Compare Match Capture to + * Other Channel GTCCRB Input Capture Source Enable */ + __IOM uint32_t ICBFD : 1; /*!< [19..19] Forwarding GTCCRD register Compare Match Capture to + * Other Channel GTCCRB Input Capture Source Enable */ + __IOM uint32_t ICBFE : 1; /*!< [20..20] Forwarding GTCCRE register Compare Match Capture to + * Other Channel GTCCRb Input Capture Source Enable */ + __IOM uint32_t ICBFF : 1; /*!< [21..21] Forwarding GTCCRF register Compare Match Capture to + * Other Channel GTCCRB Input Capture Source Enable */ + __IOM uint32_t ICBFPO : 1; /*!< [22..22] Forwarding Overflow to Other Channel GTCCRB Input Capture + * Source Enable */ + __IOM uint32_t ICBFPU : 1; /*!< [23..23] Forwarding Underflow to Other Channel GTCCRB Input + * Capture Source Enable */ + __IOM uint32_t ICBCLK : 1; /*!< [24..24] Forwarding Count Clock to Other Channel GTCCRB Input + * Capture Source Enable */ + uint32_t : 5; + __IOM uint32_t ICBGRP : 2; /*!< [31..30] GTCCRB Input Capture Group Select */ + } GTICCR_b; + }; +} R_GPT0_Type; /*!< Size = 240 (0xf0) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_OPS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Output Phase Switching for GPT (R_GPT_OPS) + */ + +typedef struct /*!< (@ 0x40078FF0) R_GPT_OPS Structure */ +{ + union + { + __IOM uint32_t OPSCR; /*!< (@ 0x00000000) Output Phase Switching Control Register */ + + struct + { + __IOM uint32_t UF : 1; /*!< [0..0] Input Phase Soft Setting WFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + __IOM uint32_t VF : 1; /*!< [1..1] Input Phase Soft Setting VFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + __IOM uint32_t WF : 1; /*!< [2..2] Input Phase Soft Setting UFThis bit sets the input phase + * by the software settings.This bit setting is valid when + * the OPSCR.FB bit = 1. */ + uint32_t : 1; + __IM uint32_t U : 1; /*!< [4..4] Input U-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + __IM uint32_t V : 1; /*!< [5..5] Input V-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + __IM uint32_t W : 1; /*!< [6..6] Input W-Phase MonitorThis bit monitors the state of the + * input phase.OPSCR.FB=0:External input monitoring by PCLKOPSCR.FB=1:Softwa + * e settings (UF/VF/WF) */ + uint32_t : 1; + __IOM uint32_t EN : 1; /*!< [8..8] Enable-Phase Output Control */ + uint32_t : 7; + __IOM uint32_t FB : 1; /*!< [16..16] External Feedback Signal EnableThis bit selects the + * input phase from the software settings and external input. */ + __IOM uint32_t P : 1; /*!< [17..17] Positive-Phase Output (P) Control */ + __IOM uint32_t N : 1; /*!< [18..18] Negative-Phase Output (N) Control */ + __IOM uint32_t INV : 1; /*!< [19..19] Invert-Phase Output Control */ + __IOM uint32_t RV : 1; /*!< [20..20] Output phase rotation direction reversal */ + __IOM uint32_t ALIGN : 1; /*!< [21..21] Input phase alignment */ + uint32_t : 2; + __IOM uint32_t GRP : 2; /*!< [25..24] Output disabled source selection */ + __IOM uint32_t GODF : 1; /*!< [26..26] Group output disable function */ + uint32_t : 2; + __IOM uint32_t NFEN : 1; /*!< [29..29] External Input Noise Filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] External Input Noise Filter Clock selectionNoise filter + * sampling clock setting of the external input. */ + } OPSCR_b; + }; +} R_GPT_OPS_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_POEG0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Port Output Enable for GPT (R_GPT_POEG0) + */ + +typedef struct /*!< (@ 0x40042000) R_GPT_POEG0 Structure */ +{ + union + { + __IOM uint32_t POEGG; /*!< (@ 0x00000000) POEG Group Setting Register */ + + struct + { + __IOM uint32_t PIDF : 1; /*!< [0..0] Port Input Detection Flag */ + __IOM uint32_t IOCF : 1; /*!< [1..1] Real Time Overcurrent Detection Flag */ + __IOM uint32_t OSTPF : 1; /*!< [2..2] Oscillation Stop Detection Flag */ + __IOM uint32_t SSF : 1; /*!< [3..3] Software Stop Flag */ + __IOM uint32_t PIDE : 1; /*!< [4..4] Port Input Detection Enable. Note: Can be modified only + * once after a reset. */ + __IOM uint32_t IOCE : 1; /*!< [5..5] Enable for GPT Output-Disable Request. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t OSTPE : 1; /*!< [6..6] Oscillation Stop Detection Enable. Note: Can be modified + * only once after a reset. */ + uint32_t : 1; + __IOM uint32_t CDRE0 : 1; /*!< [8..8] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE1 : 1; /*!< [9..9] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE2 : 1; /*!< [10..10] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE3 : 1; /*!< [11..11] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE4 : 1; /*!< [12..12] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + __IOM uint32_t CDRE5 : 1; /*!< [13..13] Comparator Disable Request Enable. Note: Can be modified + * only once after a reset. */ + uint32_t : 2; + __IM uint32_t ST : 1; /*!< [16..16] GTETRG Input Status Flag */ + uint32_t : 11; + __IOM uint32_t INV : 1; /*!< [28..28] GTETRG Input Reverse */ + __IOM uint32_t NFEN : 1; /*!< [29..29] Noise Filter Enable */ + __IOM uint32_t NFCS : 2; /*!< [31..30] Noise Filter Clock Select */ + } POEGG_b; + }; + __IM uint32_t RESERVED[15]; + + union + { + __IOM uint16_t GTONCWP; /*!< (@ 0x00000040) GPT Output Stopping Control Group Write Protection + * Register */ + + struct + { + __IOM uint16_t WP : 1; /*!< [0..0] Register Writing Disable */ + uint16_t : 7; + __IOM uint16_t PRKEY : 8; /*!< [15..8] Key Code */ + } GTONCWP_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t GTONCCR; /*!< (@ 0x00000044) GPT Output Stopping Control Group Controlling + * Register */ + + struct + { + __IOM uint16_t NE : 1; /*!< [0..0] Direct Stopping Request Setting */ + uint16_t : 3; + __IOM uint16_t NFS : 4; /*!< [7..4] Direct Stopping Request Selection */ + __IOM uint16_t NFV : 1; /*!< [8..8] Direct Stopping Request Active Sense */ + uint16_t : 7; + } GTONCCR_b; + }; + __IM uint16_t RESERVED2; +} R_GPT_POEG0_Type; /*!< Size = 72 (0x48) */ + +/* =========================================================================================================================== */ +/* ================ R_ICU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Interrupt Controller Unit (R_ICU) + */ + +typedef struct /*!< (@ 0x40006000) R_ICU Structure */ +{ + union + { + __IOM uint8_t IRQCR[16]; /*!< (@ 0x00000000) IRQ Control Register [0..15] */ + + struct + { + __IOM uint8_t IRQMD : 2; /*!< [1..0] IRQ Detection Sense Select */ + uint8_t : 1; + __IOM uint8_t LOCOSEL : 1; /*!< [3..3] IRQi Digital Filter Sampling LOCO Clock Select */ + __IOM uint8_t FCLKSEL : 2; /*!< [5..4] IRQ Digital Filter Sampling Clock Select */ + uint8_t : 1; + __IOM uint8_t FLTEN : 1; /*!< [7..7] IRQ Digital Filter Enable */ + } IRQCR_b[16]; + }; + __IM uint32_t RESERVED[60]; + + union + { + __IOM uint8_t NMICR; /*!< (@ 0x00000100) NMI Pin Interrupt Control Register */ + + struct + { + __IOM uint8_t NMIMD : 1; /*!< [0..0] NMI Detection Set */ + uint8_t : 3; + __IOM uint8_t NFCLKSEL : 2; /*!< [5..4] NMI Digital Filter Sampling Clock Select */ + uint8_t : 1; + __IOM uint8_t NFLTEN : 1; /*!< [7..7] NMI Digital Filter Enable */ + } NMICR_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + __IM uint32_t RESERVED3[7]; + + union + { + __IOM uint16_t NMIER; /*!< (@ 0x00000120) Non-Maskable Interrupt Enable Register */ + + struct + { + __IOM uint16_t IWDTEN : 1; /*!< [0..0] IWDT Underflow/Refresh Error Interrupt Enable */ + __IOM uint16_t WDTEN : 1; /*!< [1..1] WDT Underflow/Refresh Error Interrupt Enable */ + __IOM uint16_t LVD1EN : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Enable */ + __IOM uint16_t LVD2EN : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Enable */ + __IOM uint16_t VBATTEN : 1; /*!< [4..4] VBATT monitor Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t OSTEN : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Enable */ + __IOM uint16_t NMIEN : 1; /*!< [7..7] NMI Pin Interrupt Enable */ + __IOM uint16_t RPEEN : 1; /*!< [8..8] RAM Parity Error Interrupt Enable */ + __IOM uint16_t RECCEN : 1; /*!< [9..9] RAM ECC Error Interrupt Enable */ + __IOM uint16_t BUSSEN : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Enable */ + __IOM uint16_t BUSMEN : 1; /*!< [11..11] MPU Bus Master Error Interrupt Enable */ + __IOM uint16_t SPEEN : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Enable */ + __IOM uint16_t TZFEN : 1; /*!< [13..13] TZFEN */ + uint16_t : 1; + __IOM uint16_t CPEEN : 1; /*!< [15..15] CPEEN */ + } NMIER_b; + }; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[3]; + + union + { + __IOM uint16_t NMICLR; /*!< (@ 0x00000130) Non-Maskable Interrupt Status Clear Register */ + + struct + { + __OM uint16_t IWDTCLR : 1; /*!< [0..0] IWDT Clear */ + __OM uint16_t WDTCLR : 1; /*!< [1..1] WDT Clear */ + __OM uint16_t LVD1CLR : 1; /*!< [2..2] LVD1 Clear */ + __OM uint16_t LVD2CLR : 1; /*!< [3..3] LVD2 Clear */ + __OM uint16_t VBATTCLR : 1; /*!< [4..4] VBATT Clear */ + uint16_t : 1; + __OM uint16_t OSTCLR : 1; /*!< [6..6] OST Clear */ + __OM uint16_t NMICLR : 1; /*!< [7..7] NMI Clear */ + __OM uint16_t RPECLR : 1; /*!< [8..8] SRAM Parity Error Clear */ + __OM uint16_t RECCCLR : 1; /*!< [9..9] SRAM ECC Error Clear */ + __OM uint16_t BUSSCLR : 1; /*!< [10..10] Bus Slave Error Clear */ + __OM uint16_t BUSMCLR : 1; /*!< [11..11] Bus Master Error Clear */ + __OM uint16_t SPECLR : 1; /*!< [12..12] CPU Stack Pointer Monitor Interrupt Clear */ + __IOM uint16_t TZFCLR : 1; /*!< [13..13] TZFCLR */ + uint16_t : 1; + __IOM uint16_t CPECLR : 1; /*!< [15..15] CPECLR */ + } NMICLR_b; + }; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[3]; + + union + { + __IM uint16_t NMISR; /*!< (@ 0x00000140) Non-Maskable Interrupt Status Register */ + + struct + { + __IM uint16_t IWDTST : 1; /*!< [0..0] IWDT Underflow/Refresh Error Status Flag */ + __IM uint16_t WDTST : 1; /*!< [1..1] WDT Underflow/Refresh Error Status Flag */ + __IM uint16_t LVD1ST : 1; /*!< [2..2] Voltage-Monitoring 1 Interrupt Status Flag */ + __IM uint16_t LVD2ST : 1; /*!< [3..3] Voltage-Monitoring 2 Interrupt Status Flag */ + __IM uint16_t VBATTST : 1; /*!< [4..4] VBATT monitor Interrupt Status Flag */ + uint16_t : 1; + __IM uint16_t OSTST : 1; /*!< [6..6] Oscillation Stop Detection Interrupt Status Flag */ + __IM uint16_t NMIST : 1; /*!< [7..7] NMI Status Flag */ + __IM uint16_t RPEST : 1; /*!< [8..8] RAM Parity Error Interrupt Status Flag */ + __IM uint16_t RECCST : 1; /*!< [9..9] RAM ECC Error Interrupt Status Flag */ + __IM uint16_t BUSSST : 1; /*!< [10..10] MPU Bus Slave Error Interrupt Status Flag */ + __IM uint16_t BUSMST : 1; /*!< [11..11] MPU Bus Master Error Interrupt Status Flag */ + __IM uint16_t SPEST : 1; /*!< [12..12] CPU Stack pointer monitor Interrupt Status Flag */ + __IM uint16_t TZFST : 1; /*!< [13..13] TZFST */ + uint16_t : 1; + __IM uint16_t CPEST : 1; /*!< [15..15] CPEST */ + } NMISR_b; + }; + __IM uint16_t RESERVED8; + __IM uint32_t RESERVED9[23]; + + union + { + __IOM uint32_t WUPEN; /*!< (@ 0x000001A0) Wake Up Interrupt Enable Register */ + + struct + { + __IOM uint32_t IRQWUPEN0 : 1; /*!< [0..0] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN1 : 1; /*!< [1..1] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN2 : 1; /*!< [2..2] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN3 : 1; /*!< [3..3] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN4 : 1; /*!< [4..4] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN5 : 1; /*!< [5..5] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN6 : 1; /*!< [6..6] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN7 : 1; /*!< [7..7] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN8 : 1; /*!< [8..8] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN9 : 1; /*!< [9..9] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN10 : 1; /*!< [10..10] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN11 : 1; /*!< [11..11] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN12 : 1; /*!< [12..12] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN13 : 1; /*!< [13..13] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN14 : 1; /*!< [14..14] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IRQWUPEN15 : 1; /*!< [15..15] IRQ interrupt S/W standby returns enable */ + __IOM uint32_t IWDTWUPEN : 1; /*!< [16..16] IWDT interrupt S/W standby returns enable */ + __IOM uint32_t KEYWUPEN : 1; /*!< [17..17] Key interrupt S/W standby returns enable */ + __IOM uint32_t LVD1WUPEN : 1; /*!< [18..18] LVD1 interrupt S/W standby returns enable */ + __IOM uint32_t LVD2WUPEN : 1; /*!< [19..19] LVD2 interrupt S/W standby returns enable */ + __IOM uint32_t VBATTWUPEN : 1; /*!< [20..20] VBATT monitor interrupt S/W standby returns enable */ + uint32_t : 1; + __IOM uint32_t ACMPHS0WUPEN : 1; /*!< [22..22] ACMPHS0 interrupt S/W standby returns enable bit */ + __IOM uint32_t ACMPLP0WUPEN : 1; /*!< [23..23] ACMPLP0 interrupt S/W standby returns enable */ + __IOM uint32_t RTCALMWUPEN : 1; /*!< [24..24] RTC alarm interrupt S/W standby returns enable */ + __IOM uint32_t RTCPRDWUPEN : 1; /*!< [25..25] RCT period interrupt S/W standby returns enable */ + __IOM uint32_t USBHSWUPEN : 1; /*!< [26..26] USBHS interrupt S/W standby returns enable bit */ + __IOM uint32_t USBFSWUPEN : 1; /*!< [27..27] USBFS interrupt S/W standby returns enable */ + __IOM uint32_t AGT1UDWUPEN : 1; /*!< [28..28] AGT1 underflow interrupt S/W standby returns enable */ + __IOM uint32_t AGT1CAWUPEN : 1; /*!< [29..29] AGT1 compare match A interrupt S/W standby returns + * enable */ + __IOM uint32_t AGT1CBWUPEN : 1; /*!< [30..30] AGT1 compare match B interrupt S/W standby returns + * enable */ + __IOM uint32_t IIC0WUPEN : 1; /*!< [31..31] IIC0 address match interrupt S/W standby returns enable */ + } WUPEN_b; + }; + + union + { + __IOM uint32_t WUPEN1; /*!< (@ 0x000001A4) Wake Up interrupt enable register 1 */ + + struct + { + __IOM uint32_t AGT3UDWUPEN : 1; /*!< [0..0] AGT3 underflow interrupt S/W standby returns enable bit */ + __IOM uint32_t AGT3CAWUPEN : 1; /*!< [1..1] AGT3 compare match A interrupt S/W standby returns enable + * bit */ + __IOM uint32_t AGT3CBWUPEN : 1; /*!< [2..2] AGT3 compare match B interrupt S/W standby returns enable + * bit */ + uint32_t : 29; + } WUPEN1_b; + }; + + union + { + __IOM uint32_t WUPEN2; /*!< (@ 0x000001A8) Wake Up Interrupt Enable Register 2 */ + + struct + { + __IOM uint32_t INTUR0WUPEN : 1; /*!< [0..0] UARTA0_INTUR Interrupt Software Standby/Snooze Mode Return + * Enable */ + __IOM uint32_t INTURE0WUPEN : 1; /*!< [1..1] UARTA0_INTURE Interrupt Software Standby/Snooze Mode + * Return Enable */ + __IOM uint32_t INTUR1WUPEN : 1; /*!< [2..2] UARTA1_INTUR Interrupt Software Standby/Snooze Mode Return + * Enable */ + __IOM uint32_t INTURE1WUPEN : 1; /*!< [3..3] UARTA1_INTURE Interrupt Software Standby/Snooze Mode + * Return Enable */ + __IOM uint32_t USBCCSWUPEN : 1; /*!< [4..4] USBCC Status Change Interrupt Software Standby/Snooze + * Mode */ + uint32_t : 27; + } WUPEN2_b; + }; + __IM uint32_t RESERVED10[5]; + + union + { + __IOM uint8_t IELEN; /*!< (@ 0x000001C0) ICU event Enable Register */ + + struct + { + __IOM uint8_t RTCINTEN : 1; /*!< [0..0] RTCALM and RTCPRD Interrupts Enable (when LPOPTEN bit + * = 1) */ + __IOM uint8_t IELEN : 1; /*!< [1..1] Parts Asynchronous Interrupts Enable except RTC (when + * LPOPTEN bit = 1) */ + uint8_t : 6; + } IELEN_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12; + __IM uint32_t RESERVED13[15]; + + union + { + __IOM uint16_t SELSR0; /*!< (@ 0x00000200) Snooze Event Link Setting Register */ + + struct + { + __IOM uint16_t SELS : 9; /*!< [8..0] SYS Event Link Select */ + uint16_t : 7; + } SELSR0_b; + }; + __IM uint16_t RESERVED14; + __IM uint32_t RESERVED15[31]; + + union + { + __IOM uint32_t DELSR[8]; /*!< (@ 0x00000280) DMAC Event Link Setting Register */ + + struct + { + __IOM uint32_t DELS : 9; /*!< [8..0] Event selection to DMAC Start request */ + uint32_t : 7; + __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag for DMAC NOTE: Writing 1 to the + * IR flag is prohibited. */ + uint32_t : 15; + } DELSR_b[8]; + }; + __IM uint32_t RESERVED16[24]; + + union + { + __IOM uint32_t IELSR[96]; /*!< (@ 0x00000300) ICU Event Link Setting Register [0..95] */ + + struct + { + __IOM uint32_t IELS : 9; /*!< [8..0] ICU Event selection to NVICSet the number for the event + * signal to be linked . */ + uint32_t : 7; + __IOM uint32_t IR : 1; /*!< [16..16] Interrupt Status Flag */ + uint32_t : 7; + __IOM uint32_t DTCE : 1; /*!< [24..24] DTC Activation Enable */ + uint32_t : 7; + } IELSR_b[96]; + }; +} R_ICU_Type; /*!< Size = 1152 (0x480) */ + +/* =========================================================================================================================== */ +/* ================ R_IIC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I2C Bus Interface (R_IIC0) + */ + +typedef struct /*!< (@ 0x40053000) R_IIC0 Structure */ +{ + union + { + __IOM uint8_t ICCR1; /*!< (@ 0x00000000) I2C Bus Control Register 1 */ + + struct + { + __IM uint8_t SDAI : 1; /*!< [0..0] SDA Line Monitor */ + __IM uint8_t SCLI : 1; /*!< [1..1] SCL Line Monitor */ + __IOM uint8_t SDAO : 1; /*!< [2..2] SDA Output Control/Monitor */ + __IOM uint8_t SCLO : 1; /*!< [3..3] SCL Output Control/Monitor */ + __IOM uint8_t SOWP : 1; /*!< [4..4] SCLO/SDAO Write Protect */ + __IOM uint8_t CLO : 1; /*!< [5..5] Extra SCL Clock Cycle Output */ + __IOM uint8_t IICRST : 1; /*!< [6..6] I2C Bus Interface Internal ResetNote:If an internal reset + * is initiated using the IICRST bit for a bus hang-up occurred + * during communication with the master device in slave mode, + * the states may become different between the slave device + * and the master device (due to the difference in the bit + * counter information). */ + __IOM uint8_t ICE : 1; /*!< [7..7] I2C Bus Interface Enable */ + } ICCR1_b; + }; + + union + { + __IOM uint8_t ICCR2; /*!< (@ 0x00000001) I2C Bus Control Register 2 */ + + struct + { + uint8_t : 1; + __IOM uint8_t ST : 1; /*!< [1..1] Start Condition Issuance RequestSet the ST bit to 1 (start + * condition issuance request) when the BBSY flag is set to + * 0 (bus free state). */ + __IOM uint8_t RS : 1; /*!< [2..2] Restart Condition Issuance RequestNote: Do not set the + * RS bit to 1 while issuing a stop condition. */ + __IOM uint8_t SP : 1; /*!< [3..3] Stop Condition Issuance RequestNote: Writing to the SP + * bit is not possible while the setting of the BBSY flag + * is 0 (bus free state).Note: Do not set the SP bit to 1 + * while a restart condition is being issued. */ + uint8_t : 1; + __IOM uint8_t TRS : 1; /*!< [5..5] Transmit/Receive Mode */ + __IOM uint8_t MST : 1; /*!< [6..6] Master/Slave Mode */ + __IM uint8_t BBSY : 1; /*!< [7..7] Bus Busy Detection Flag */ + } ICCR2_b; + }; + + union + { + __IOM uint8_t ICMR1; /*!< (@ 0x00000002) I2C Bus Mode Register 1 */ + + struct + { + __IOM uint8_t BC : 3; /*!< [2..0] Bit Counter */ + __OM uint8_t BCWP : 1; /*!< [3..3] BC Write Protect(This bit is read as 1.) */ + __IOM uint8_t CKS : 3; /*!< [6..4] Internal Reference Clock (fIIC) Selection ( fIIC = PCLKB + * / 2^CKS ) */ + __IOM uint8_t MTWP : 1; /*!< [7..7] MST/TRS Write Protect */ + } ICMR1_b; + }; + + union + { + __IOM uint8_t ICMR2; /*!< (@ 0x00000003) I2C Bus Mode Register 2 */ + + struct + { + __IOM uint8_t TMOS : 1; /*!< [0..0] Timeout Detection Time Select */ + __IOM uint8_t TMOL : 1; /*!< [1..1] Timeout L Count Control */ + __IOM uint8_t TMOH : 1; /*!< [2..2] Timeout H Count Control */ + uint8_t : 1; + __IOM uint8_t SDDL : 3; /*!< [6..4] SDA Output Delay Counter */ + __IOM uint8_t DLCS : 1; /*!< [7..7] SDA Output Delay Clock Source Select */ + } ICMR2_b; + }; + + union + { + __IOM uint8_t ICMR3; /*!< (@ 0x00000004) I2C Bus Mode Register 3 */ + + struct + { + __IOM uint8_t NF : 2; /*!< [1..0] Noise Filter Stage Selection */ + __IM uint8_t ACKBR : 1; /*!< [2..2] Receive Acknowledge */ + __IOM uint8_t ACKBT : 1; /*!< [3..3] Transmit Acknowledge */ + __IOM uint8_t ACKWP : 1; /*!< [4..4] ACKBT Write Protect */ + __IOM uint8_t RDRFS : 1; /*!< [5..5] RDRF Flag Set Timing Selection */ + __IOM uint8_t WAIT : 1; /*!< [6..6] WAITNote: When the value of the WAIT bit is to be read, + * be sure to read the ICDRR beforehand. */ + __IOM uint8_t SMBS : 1; /*!< [7..7] SMBus/I2C Bus Selection */ + } ICMR3_b; + }; + + union + { + __IOM uint8_t ICFER; /*!< (@ 0x00000005) I2C Bus Function Enable Register */ + + struct + { + __IOM uint8_t TMOE : 1; /*!< [0..0] Timeout Function Enable */ + __IOM uint8_t MALE : 1; /*!< [1..1] Master Arbitration-Lost Detection Enable */ + __IOM uint8_t NALE : 1; /*!< [2..2] NACK Transmission Arbitration-Lost Detection Enable */ + __IOM uint8_t SALE : 1; /*!< [3..3] Slave Arbitration-Lost Detection Enable */ + __IOM uint8_t NACKE : 1; /*!< [4..4] NACK Reception Transfer Suspension Enable */ + __IOM uint8_t NFE : 1; /*!< [5..5] Digital Noise Filter Circuit Enable */ + __IOM uint8_t SCLE : 1; /*!< [6..6] SCL Synchronous Circuit Enable */ + __IOM uint8_t FMPE : 1; /*!< [7..7] Fast-mode Plus Enable */ + } ICFER_b; + }; + + union + { + __IOM uint8_t ICSER; /*!< (@ 0x00000006) I2C Bus Status Enable Register */ + + struct + { + __IOM uint8_t SAR0E : 1; /*!< [0..0] Slave Address Register 0 Enable */ + __IOM uint8_t SAR1E : 1; /*!< [1..1] Slave Address Register 1 Enable */ + __IOM uint8_t SAR2E : 1; /*!< [2..2] Slave Address Register 2 Enable */ + __IOM uint8_t GCAE : 1; /*!< [3..3] General Call Address Enable */ + uint8_t : 1; + __IOM uint8_t DIDE : 1; /*!< [5..5] Device-ID Address Detection Enable */ + uint8_t : 1; + __IOM uint8_t HOAE : 1; /*!< [7..7] Host Address Enable */ + } ICSER_b; + }; + + union + { + __IOM uint8_t ICIER; /*!< (@ 0x00000007) I2C Bus Interrupt Enable Register */ + + struct + { + __IOM uint8_t TMOIE : 1; /*!< [0..0] Timeout Interrupt Request Enable */ + __IOM uint8_t ALIE : 1; /*!< [1..1] Arbitration-Lost Interrupt Request Enable */ + __IOM uint8_t STIE : 1; /*!< [2..2] Start Condition Detection Interrupt Request Enable */ + __IOM uint8_t SPIE : 1; /*!< [3..3] Stop Condition Detection Interrupt Request Enable */ + __IOM uint8_t NAKIE : 1; /*!< [4..4] NACK Reception Interrupt Request Enable */ + __IOM uint8_t RIE : 1; /*!< [5..5] Receive Data Full Interrupt Request Enable */ + __IOM uint8_t TEIE : 1; /*!< [6..6] Transmit End Interrupt Request Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Data Empty Interrupt Request Enable */ + } ICIER_b; + }; + + union + { + __IOM uint8_t ICSR1; /*!< (@ 0x00000008) I2C Bus Status Register 1 */ + + struct + { + __IOM uint8_t AAS0 : 1; /*!< [0..0] Slave Address 0 Detection Flag */ + __IOM uint8_t AAS1 : 1; /*!< [1..1] Slave Address 1 Detection Flag */ + __IOM uint8_t AAS2 : 1; /*!< [2..2] Slave Address 2 Detection Flag */ + __IOM uint8_t GCA : 1; /*!< [3..3] General Call Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t DID : 1; /*!< [5..5] Device-ID Address Detection Flag */ + uint8_t : 1; + __IOM uint8_t HOA : 1; /*!< [7..7] Host Address Detection Flag */ + } ICSR1_b; + }; + + union + { + __IOM uint8_t ICSR2; /*!< (@ 0x00000009) I2C Bus Status Register 2 */ + + struct + { + __IOM uint8_t TMOF : 1; /*!< [0..0] Timeout Detection Flag */ + __IOM uint8_t AL : 1; /*!< [1..1] Arbitration-Lost Flag */ + __IOM uint8_t START : 1; /*!< [2..2] Start Condition Detection Flag */ + __IOM uint8_t STOP : 1; /*!< [3..3] Stop Condition Detection Flag */ + __IOM uint8_t NACKF : 1; /*!< [4..4] NACK Detection Flag */ + __IOM uint8_t RDRF : 1; /*!< [5..5] Receive Data Full Flag */ + __IOM uint8_t TEND : 1; /*!< [6..6] Transmit End Flag */ + __IM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } ICSR2_b; + }; + __IOM R_IIC0_SAR_Type SAR[3]; /*!< (@ 0x0000000A) Slave Address Registers */ + + union + { + __IOM uint8_t ICBRL; /*!< (@ 0x00000010) I2C Bus Bit Rate Low-Level Register */ + + struct + { + __IOM uint8_t BRL : 5; /*!< [4..0] Bit Rate Low-Level Period(Low-level period of SCL clock) */ + uint8_t : 3; + } ICBRL_b; + }; + + union + { + __IOM uint8_t ICBRH; /*!< (@ 0x00000011) I2C Bus Bit Rate High-Level Register */ + + struct + { + __IOM uint8_t BRH : 5; /*!< [4..0] Bit Rate High-Level Period(High-level period of SCL clock) */ + uint8_t : 3; + } ICBRH_b; + }; + + union + { + __IOM uint8_t ICDRT; /*!< (@ 0x00000012) I2C Bus Transmit Data Register */ + + struct + { + __IOM uint8_t ICDRT : 8; /*!< [7..0] 8-bit read-write register that stores transmit data. */ + } ICDRT_b; + }; + + union + { + __IM uint8_t ICDRR; /*!< (@ 0x00000013) I2C Bus Receive Data Register */ + + struct + { + __IM uint8_t ICDRR : 8; /*!< [7..0] 8-bit register that stores the received data */ + } ICDRR_b; + }; + __IM uint8_t RESERVED[2]; + + union + { + __IOM uint8_t ICWUR; /*!< (@ 0x00000016) I2C Bus Wake Up Unit Register */ + + struct + { + __IOM uint8_t WUAFA : 1; /*!< [0..0] Wakeup Analog Filter Additional Selection */ + uint8_t : 3; + __IOM uint8_t WUACK : 1; /*!< [4..4] ACK bit for Wakeup Mode */ + __IOM uint8_t WUF : 1; /*!< [5..5] Wakeup Event Occurrence Flag */ + __IOM uint8_t WUIE : 1; /*!< [6..6] Wakeup Interrupt Request Enable */ + __IOM uint8_t WUE : 1; /*!< [7..7] Wakeup Function Enable */ + } ICWUR_b; + }; + + union + { + __IOM uint8_t ICWUR2; /*!< (@ 0x00000017) I2C Bus Wake up Unit Register 2 */ + + struct + { + __IOM uint8_t WUSEN : 1; /*!< [0..0] Wake-up Function Synchronous Enable */ + __IM uint8_t WUASYF : 1; /*!< [1..1] Wake-up Function Asynchronous Operation Status Flag */ + __IM uint8_t WUSYF : 1; /*!< [2..2] Wake-up Function Synchronous Operation Status Flag */ + uint8_t : 5; + } ICWUR2_b; + }; +} R_IIC0_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ R_IWDT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Independent Watchdog Timer (R_IWDT) + */ + +typedef struct /*!< (@ 0x40044400) R_IWDT Structure */ +{ + union + { + __IOM uint8_t IWDTRR; /*!< (@ 0x00000000) IWDT Refresh Register */ + + struct + { + __IOM uint8_t IWDTRR : 8; /*!< [7..0] The counter is refreshed by writing 0x00 and then writing + * 0xFF to this register. */ + } IWDTRR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t IWDTCR; /*!< (@ 0x00000002) IWDT Control Register */ + + struct + { + __IOM uint16_t TOPS : 2; /*!< [1..0] Timeout Period Selection */ + uint16_t : 2; + __IOM uint16_t CKS : 4; /*!< [7..4] Clock Division Ratio Selection */ + __IOM uint16_t RPES : 2; /*!< [9..8] Window End Position Selection */ + uint16_t : 2; + __IOM uint16_t RPSS : 2; /*!< [13..12] Window Start Position Selection */ + uint16_t : 2; + } IWDTCR_b; + }; + + union + { + __IOM uint16_t IWDTSR; /*!< (@ 0x00000004) IWDT Status Register */ + + struct + { + __IM uint16_t CNTVAL : 14; /*!< [13..0] Down-Counter Value */ + __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ + __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ + } IWDTSR_b; + }; + + union + { + __IOM uint8_t IWDTRCR; /*!< (@ 0x00000006) IWDT Reset Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t RSTIRQS : 1; /*!< [7..7] Reset Interrupt Request Selection */ + } IWDTRCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t IWDTCSTPR; /*!< (@ 0x00000008) IWDT Count Stop Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t SLCSTP : 1; /*!< [7..7] Sleep-Mode Count Stop Control */ + } IWDTCSTPR_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_IWDT_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_KINT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Key Interrupt Function (R_KINT) + */ + +typedef struct /*!< (@ 0x40080000) R_KINT Structure */ +{ + union + { + __IOM uint8_t KRCTL; /*!< (@ 0x00000000) KEY Return Control Register */ + + struct + { + __IOM uint8_t KREG : 1; /*!< [0..0] Detection Edge Selection (KRF0 to KRF7) */ + uint8_t : 6; + __IOM uint8_t KRMD : 1; /*!< [7..7] Usage of Key Interrupt Flags(KR0 to KR7) */ + } KRCTL_b; + }; + __IM uint8_t RESERVED[3]; + + union + { + __IOM uint8_t KRF; /*!< (@ 0x00000004) KEY Return Flag Register */ + + struct + { + __IOM uint8_t KRF0 : 1; /*!< [0..0] Key interrupt flag 0 */ + __IOM uint8_t KRF1 : 1; /*!< [1..1] Key interrupt flag 1 */ + __IOM uint8_t KRF2 : 1; /*!< [2..2] Key interrupt flag 2 */ + __IOM uint8_t KRF3 : 1; /*!< [3..3] Key interrupt flag 3 */ + __IOM uint8_t KRF4 : 1; /*!< [4..4] Key interrupt flag 4 */ + __IOM uint8_t KRF5 : 1; /*!< [5..5] Key interrupt flag 5 */ + __IOM uint8_t KRF6 : 1; /*!< [6..6] Key interrupt flag 6 */ + __IOM uint8_t KRF7 : 1; /*!< [7..7] Key interrupt flag 7 */ + } KRF_b; + }; + __IM uint8_t RESERVED1[3]; + + union + { + __IOM uint8_t KRM; /*!< (@ 0x00000008) KEY Return Mode Register */ + + struct + { + __IOM uint8_t KRM0 : 1; /*!< [0..0] Key interrupt mode control 0 */ + __IOM uint8_t KRM1 : 1; /*!< [1..1] Key interrupt mode control 1 */ + __IOM uint8_t KRM2 : 1; /*!< [2..2] Key interrupt mode control 2 */ + __IOM uint8_t KRM3 : 1; /*!< [3..3] Key interrupt mode control 3 */ + __IOM uint8_t KRM4 : 1; /*!< [4..4] Key interrupt mode control 4 */ + __IOM uint8_t KRM5 : 1; /*!< [5..5] Key interrupt mode control 5 */ + __IOM uint8_t KRM6 : 1; /*!< [6..6] Key interrupt mode control 6 */ + __IOM uint8_t KRM7 : 1; /*!< [7..7] Key interrupt mode control 7 */ + } KRM_b; + }; +} R_KINT_Type; /*!< Size = 9 (0x9) */ + +/* =========================================================================================================================== */ +/* ================ R_MMF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Memory Mirror Function (R_MMF) + */ + +typedef struct /*!< (@ 0x40001000) R_MMF Structure */ +{ + union + { + __IOM uint32_t MMSFR; /*!< (@ 0x00000000) MemMirror Special Function Register */ + + struct + { + uint32_t : 7; + __IOM uint32_t MEMMIRADDR : 16; /*!< [22..7] Specifies the memory mirror address.NOTE: A value cannot + * be set in the low-order 7 bits. These bits are fixed to + * 0. */ + uint32_t : 1; + __OM uint32_t KEY : 8; /*!< [31..24] MMSFR Key Code */ + } MMSFR_b; + }; + + union + { + __IOM uint32_t MMEN; /*!< (@ 0x00000004) MemMirror Enable Register */ + + struct + { + __IOM uint32_t EN : 1; /*!< [0..0] Memory Mirror Function Enable */ + uint32_t : 23; + __OM uint32_t KEY : 8; /*!< [31..24] MMEN Key Code */ + } MMEN_b; + }; +} R_MMF_Type; /*!< Size = 8 (0x8) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_MMPU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Master MPU (R_MPU_MMPU) + */ + +typedef struct /*!< (@ 0x40000000) R_MPU_MMPU Structure */ +{ + __IOM R_MPU_MMPU_MMPU_Type MMPU[3]; /*!< (@ 0x00000000) Bus Master MPU Registers */ +} R_MPU_MMPU_Type; /*!< Size = 3072 (0xc00) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SMPU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Slave MPU (R_MPU_SMPU) + */ + +typedef struct /*!< (@ 0x40000C00) R_MPU_SMPU Structure */ +{ + union + { + __IOM uint16_t SMPUCTL; /*!< (@ 0x00000000) Slave MPU Control Register */ + + struct + { + __IOM uint16_t OAD : 1; /*!< [0..0] Master Group enable */ + __IOM uint16_t PROTECT : 1; /*!< [1..1] Protection of register */ + uint16_t : 6; + __OM uint16_t KEY : 8; /*!< [15..8] Key Code This bit is used to enable or disable rewriting + * of the PROTECT and OAD bit. */ + } SMPUCTL_b; + }; + __IM uint16_t RESERVED[7]; + __IOM R_MPU_SMPU_SMPU_Type SMPU[10]; /*!< (@ 0x00000010) Access Control Structure for MBIU */ +} R_MPU_SMPU_Type; /*!< Size = 56 (0x38) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SPMON ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CPU Stack Pointer Monitor (R_MPU_SPMON) + */ + +typedef struct /*!< (@ 0x40000D00) R_MPU_SPMON Structure */ +{ + __IOM R_MPU_SPMON_SP_Type SP[2]; /*!< (@ 0x00000000) Stack Pointer Monitor */ +} R_MPU_SPMON_Type; /*!< Size = 32 (0x20) */ + +/* =========================================================================================================================== */ +/* ================ R_MSTP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System-Module Stop (R_MSTP) + */ + +typedef struct /*!< (@ 0x40047000) R_MSTP Structure */ +{ + union + { + __IOM uint32_t MSTPCRA; /*!< (@ 0x00000000) Module Stop Control Register A */ + + struct + { + __IOM uint32_t MSTPA0 : 1; /*!< [0..0] Module stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPA1 : 1; /*!< [1..1] Module stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPA2 : 1; /*!< [2..2] Module stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPA3 : 1; /*!< [3..3] Module stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPA4 : 1; /*!< [4..4] Module stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPA5 : 1; /*!< [5..5] Module stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPA6 : 1; /*!< [6..6] Module stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPA7 : 1; /*!< [7..7] Module stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPA8 : 1; /*!< [8..8] Module stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPA9 : 1; /*!< [9..9] Module stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPA10 : 1; /*!< [10..10] Module stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA11 : 1; /*!< [11..11] Module stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA12 : 1; /*!< [12..12] Module stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA13 : 1; /*!< [13..13] Module stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA14 : 1; /*!< [14..14] Module stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA15 : 1; /*!< [15..15] Module stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA16 : 1; /*!< [16..16] Module stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA17 : 1; /*!< [17..17] Module stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA18 : 1; /*!< [18..18] Module stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA19 : 1; /*!< [19..19] Module stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA20 : 1; /*!< [20..20] Module stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA21 : 1; /*!< [21..21] Module stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA22 : 1; /*!< [22..22] Module stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA23 : 1; /*!< [23..23] Module stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA24 : 1; /*!< [24..24] Module stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA25 : 1; /*!< [25..25] Module stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA26 : 1; /*!< [26..26] Module stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA27 : 1; /*!< [27..27] Module stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA28 : 1; /*!< [28..28] Module stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA29 : 1; /*!< [29..29] Module stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA30 : 1; /*!< [30..30] Module stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA31 : 1; /*!< [31..31] Module stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRA_b; + }; + + union + { + __IOM uint32_t MSTPCRB; /*!< (@ 0x00000004) Module Stop Control Register B */ + + struct + { + __IOM uint32_t MSTPB0 : 1; /*!< [0..0] Module stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPB1 : 1; /*!< [1..1] Module stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPB2 : 1; /*!< [2..2] Module stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPB3 : 1; /*!< [3..3] Module stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPB4 : 1; /*!< [4..4] Module stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPB5 : 1; /*!< [5..5] Module stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPB6 : 1; /*!< [6..6] Module stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPB7 : 1; /*!< [7..7] Module stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPB8 : 1; /*!< [8..8] Module stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPB9 : 1; /*!< [9..9] Module stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPB10 : 1; /*!< [10..10] Module stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB11 : 1; /*!< [11..11] Module stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB12 : 1; /*!< [12..12] Module stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB13 : 1; /*!< [13..13] Module stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB14 : 1; /*!< [14..14] Module stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB15 : 1; /*!< [15..15] Module stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB16 : 1; /*!< [16..16] Module stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB17 : 1; /*!< [17..17] Module stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB18 : 1; /*!< [18..18] Module stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB19 : 1; /*!< [19..19] Module stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB20 : 1; /*!< [20..20] Module stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB21 : 1; /*!< [21..21] Module stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB22 : 1; /*!< [22..22] Module stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB23 : 1; /*!< [23..23] Module stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB24 : 1; /*!< [24..24] Module stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB25 : 1; /*!< [25..25] Module stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB26 : 1; /*!< [26..26] Module stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB27 : 1; /*!< [27..27] Module stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB28 : 1; /*!< [28..28] Module stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB29 : 1; /*!< [29..29] Module stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB30 : 1; /*!< [30..30] Module stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPB31 : 1; /*!< [31..31] Module stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRB_b; + }; + + union + { + __IOM uint32_t MSTPCRC; /*!< (@ 0x00000008) Module Stop Control Register C */ + + struct + { + __IOM uint32_t MSTPC0 : 1; /*!< [0..0] Module stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPC1 : 1; /*!< [1..1] Module stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPC2 : 1; /*!< [2..2] Module stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPC3 : 1; /*!< [3..3] Module stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPC4 : 1; /*!< [4..4] Module stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPC5 : 1; /*!< [5..5] Module stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPC6 : 1; /*!< [6..6] Module stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPC7 : 1; /*!< [7..7] Module stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPC8 : 1; /*!< [8..8] Module stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPC9 : 1; /*!< [9..9] Module stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPC10 : 1; /*!< [10..10] Module stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC11 : 1; /*!< [11..11] Module stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC12 : 1; /*!< [12..12] Module stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC13 : 1; /*!< [13..13] Module stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC14 : 1; /*!< [14..14] Module stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC15 : 1; /*!< [15..15] Module stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC16 : 1; /*!< [16..16] Module stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC17 : 1; /*!< [17..17] Module stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC18 : 1; /*!< [18..18] Module stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC19 : 1; /*!< [19..19] Module stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC20 : 1; /*!< [20..20] Module stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC21 : 1; /*!< [21..21] Module stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC22 : 1; /*!< [22..22] Module stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC23 : 1; /*!< [23..23] Module stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC24 : 1; /*!< [24..24] Module stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC25 : 1; /*!< [25..25] Module stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC26 : 1; /*!< [26..26] Module stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC27 : 1; /*!< [27..27] Module stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC28 : 1; /*!< [28..28] Module stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC29 : 1; /*!< [29..29] Module stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC30 : 1; /*!< [30..30] Module stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPC31 : 1; /*!< [31..31] Module stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRC_b; + }; + + union + { + __IOM uint32_t MSTPCRD; /*!< (@ 0x0000000C) Module Stop Control Register D */ + + struct + { + __IOM uint32_t MSTPD0 : 1; /*!< [0..0] Module stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPD1 : 1; /*!< [1..1] Module stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPD2 : 1; /*!< [2..2] Module stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPD3 : 1; /*!< [3..3] Module stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPD4 : 1; /*!< [4..4] Module stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPD5 : 1; /*!< [5..5] Module stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPD6 : 1; /*!< [6..6] Module stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPD7 : 1; /*!< [7..7] Module stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPD8 : 1; /*!< [8..8] Module stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPD9 : 1; /*!< [9..9] Module stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPD10 : 1; /*!< [10..10] Module stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD11 : 1; /*!< [11..11] Module stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD12 : 1; /*!< [12..12] Module stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD13 : 1; /*!< [13..13] Module stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD14 : 1; /*!< [14..14] Module stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD15 : 1; /*!< [15..15] Module stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD16 : 1; /*!< [16..16] Module stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD17 : 1; /*!< [17..17] Module stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD18 : 1; /*!< [18..18] Module stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD19 : 1; /*!< [19..19] Module stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD20 : 1; /*!< [20..20] Module stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD21 : 1; /*!< [21..21] Module stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD22 : 1; /*!< [22..22] Module stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD23 : 1; /*!< [23..23] Module stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD24 : 1; /*!< [24..24] Module stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD25 : 1; /*!< [25..25] Module stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD26 : 1; /*!< [26..26] Module stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD27 : 1; /*!< [27..27] Module stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD28 : 1; /*!< [28..28] Module stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD29 : 1; /*!< [29..29] Module stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD30 : 1; /*!< [30..30] Module stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPD31 : 1; /*!< [31..31] Module stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRD_b; + }; + + union + { + union + { + __IOM uint32_t MSTPCRE; /*!< (@ 0x00000010) Module Stop Control Register E */ + + struct + { + __IOM uint32_t MSTPE0 : 1; /*!< [0..0] Module stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPE1 : 1; /*!< [1..1] Module stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPE2 : 1; /*!< [2..2] Module stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPE3 : 1; /*!< [3..3] Module stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPE4 : 1; /*!< [4..4] Module stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPE5 : 1; /*!< [5..5] Module stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPE6 : 1; /*!< [6..6] Module stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPE7 : 1; /*!< [7..7] Module stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPE8 : 1; /*!< [8..8] Module stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPE9 : 1; /*!< [9..9] Module stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPE10 : 1; /*!< [10..10] Module stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE11 : 1; /*!< [11..11] Module stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE12 : 1; /*!< [12..12] Module stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE13 : 1; /*!< [13..13] Module stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE14 : 1; /*!< [14..14] Module stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE15 : 1; /*!< [15..15] Module stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE16 : 1; /*!< [16..16] Module stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE17 : 1; /*!< [17..17] Module stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE18 : 1; /*!< [18..18] Module stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE19 : 1; /*!< [19..19] Module stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE20 : 1; /*!< [20..20] Module stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE21 : 1; /*!< [21..21] Module stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE22 : 1; /*!< [22..22] Module stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE23 : 1; /*!< [23..23] Module stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE24 : 1; /*!< [24..24] Module stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE25 : 1; /*!< [25..25] Module stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE26 : 1; /*!< [26..26] Module stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE27 : 1; /*!< [27..27] Module stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE28 : 1; /*!< [28..28] Module stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE29 : 1; /*!< [29..29] Module stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE30 : 1; /*!< [30..30] Module stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPE31 : 1; /*!< [31..31] Module stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRE_b; + }; + + union + { + __IOM uint16_t LSMRWDIS; /*!< (@ 0x00000010) Low Speed Module R/W Disable Control Register */ + + struct + { + __IOM uint16_t RTCRWDIS : 1; /*!< [0..0] RTC Register R/W Enable Control */ + __IOM uint16_t WDTDIS : 1; /*!< [1..1] WDT Operate Clock Control */ + __IOM uint16_t IWDTIDS : 1; /*!< [2..2] IWDT Register Clock Control */ + uint16_t : 4; + __IOM uint16_t WREN : 1; /*!< [7..7] Write Enable for bits [2:0] */ + __OM uint16_t PRKEY : 8; /*!< [15..8] LSMRWDIS Key Code */ + } LSMRWDIS_b; + }; + }; +} R_MSTP_Type; /*!< Size = 20 (0x14) */ + +/* =========================================================================================================================== */ +/* ================ R_OPAMP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Operational Amplifier (R_OPAMP) + */ + +typedef struct /*!< (@ 0x400867F8) R_OPAMP Structure */ +{ + __IM uint8_t RESERVED[8]; + + union + { + __IOM uint8_t AMPMC; /*!< (@ 0x00000008) Operational amplifier mode control register */ + + struct + { + __IOM uint8_t AMPPC0 : 1; /*!< [0..0] Operational amplifier precharge control status */ + __IOM uint8_t AMPPC1 : 1; /*!< [1..1] Operational amplifier precharge control status */ + __IOM uint8_t AMPPC2 : 1; /*!< [2..2] Operational amplifier precharge control status */ + uint8_t : 4; + __IOM uint8_t AMPSP : 1; /*!< [7..7] Operation mode selection */ + } AMPMC_b; + }; + + union + { + __IOM uint8_t AMPTRM; /*!< (@ 0x00000009) Operational amplifier trigger mode control register */ + + struct + { + __IOM uint8_t AMPTRM0 : 2; /*!< [1..0] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM1 : 2; /*!< [3..2] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM2 : 2; /*!< [5..4] Operational amplifier function activation/stop trigger + * control */ + __IOM uint8_t AMPTRM3 : 2; /*!< [7..6] Operational amplifier function activation/stop trigger + * control */ + } AMPTRM_b; + }; + + union + { + __IOM uint8_t AMPTRS; /*!< (@ 0x0000000A) Operational Amplifier Activation Trigger Select + * Register */ + + struct + { + __IOM uint8_t AMPTRS : 2; /*!< [1..0] ELC trigger selection Do not change the value of the + * AMPTRS register after setting the AMPTRM register. */ + uint8_t : 6; + } AMPTRS_b; + }; + + union + { + __IOM uint8_t AMPC; /*!< (@ 0x0000000B) Operational amplifier control register */ + + struct + { + __IOM uint8_t AMPE0 : 1; /*!< [0..0] Operation control of operational amplifier */ + __IOM uint8_t AMPE1 : 1; /*!< [1..1] Operation control of operational amplifier */ + __IOM uint8_t AMPE2 : 1; /*!< [2..2] Operation control of operational amplifier */ + __IOM uint8_t AMPE3 : 1; /*!< [3..3] Operation control of operational amplifier */ + uint8_t : 3; + __IOM uint8_t IREFE : 1; /*!< [7..7] Operation control of operational amplifier reference + * current circuit */ + } AMPC_b; + }; + + union + { + __IM uint8_t AMPMON; /*!< (@ 0x0000000C) Operational amplifier monitor register */ + + struct + { + __IM uint8_t AMPMON0 : 1; /*!< [0..0] Operational amplifier status */ + __IM uint8_t AMPMON1 : 1; /*!< [1..1] Operational amplifier status */ + __IM uint8_t AMPMON2 : 1; /*!< [2..2] Operational amplifier status */ + __IM uint8_t AMPMON3 : 1; /*!< [3..3] Operational amplifier status */ + uint8_t : 4; + } AMPMON_b; + }; + __IM uint8_t RESERVED1; + __IOM R_OPAMP_AMP_Type AMP[4]; /*!< (@ 0x0000000E) Input and Output Selectors for Operational Amplifier + * [0..3] */ + + union + { + __IOM uint8_t AMPCPC; /*!< (@ 0x0000001A) Operational amplifier switch charge pump control + * register */ + + struct + { + __IOM uint8_t PUMP0EN : 1; /*!< [0..0] charge pump for AMP0 enable/disable */ + __IOM uint8_t PUMP1EN : 1; /*!< [1..1] charge pump for AMP1 enable/disable */ + __IOM uint8_t PUMP2EN : 1; /*!< [2..2] charge pump for AMP2 enable/disable */ + uint8_t : 5; + } AMPCPC_b; + }; + __IM uint8_t RESERVED2[4]; + + union + { + __IOM uint8_t AMPUOTE; /*!< (@ 0x0000001F) Operational Amplifier User Offset Trimming Enable + * Register */ + + struct + { + __IOM uint8_t AMP0TE : 1; /*!< [0..0] AMP0OT write enable */ + __IOM uint8_t AMP1TE : 1; /*!< [1..1] AMP1OT write enable */ + __IOM uint8_t AMP2TE : 1; /*!< [2..2] AMP2OT write enable */ + uint8_t : 5; + } AMPUOTE_b; + }; + __IOM R_OPAMP_AMPOT_Type AMPOT[3]; /*!< (@ 0x00000020) Operational Amplifier n Offset Trimming Registers */ +} R_OPAMP_Type; /*!< Size = 38 (0x26) */ + +/* =========================================================================================================================== */ +/* ================ R_PORT0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports (R_PORT0) + */ + +typedef struct /*!< (@ 0x40040000) R_PORT0 Structure */ +{ + union + { + union + { + __IOM uint32_t PCNTR1; /*!< (@ 0x00000000) Port Control Register 1 */ + + struct + { + __IOM uint32_t PDR : 16; /*!< [15..0] Pmn Direction */ + __IOM uint32_t PODR : 16; /*!< [31..16] Pmn Output Data */ + } PCNTR1_b; + }; + + struct + { + union + { + __IOM uint16_t PODR; /*!< (@ 0x00000000) Output data register */ + + struct + { + __IOM uint16_t PODR0 : 1; /*!< [0..0] Pmn Output Data */ + __IOM uint16_t PODR1 : 1; /*!< [1..1] Pmn Output Data */ + __IOM uint16_t PODR2 : 1; /*!< [2..2] Pmn Output Data */ + __IOM uint16_t PODR3 : 1; /*!< [3..3] Pmn Output Data */ + __IOM uint16_t PODR4 : 1; /*!< [4..4] Pmn Output Data */ + __IOM uint16_t PODR5 : 1; /*!< [5..5] Pmn Output Data */ + __IOM uint16_t PODR6 : 1; /*!< [6..6] Pmn Output Data */ + __IOM uint16_t PODR7 : 1; /*!< [7..7] Pmn Output Data */ + __IOM uint16_t PODR8 : 1; /*!< [8..8] Pmn Output Data */ + __IOM uint16_t PODR9 : 1; /*!< [9..9] Pmn Output Data */ + __IOM uint16_t PODR10 : 1; /*!< [10..10] Pmn Output Data */ + __IOM uint16_t PODR11 : 1; /*!< [11..11] Pmn Output Data */ + __IOM uint16_t PODR12 : 1; /*!< [12..12] Pmn Output Data */ + __IOM uint16_t PODR13 : 1; /*!< [13..13] Pmn Output Data */ + __IOM uint16_t PODR14 : 1; /*!< [14..14] Pmn Output Data */ + __IOM uint16_t PODR15 : 1; /*!< [15..15] Pmn Output Data */ + } PODR_b; + }; + + union + { + __IOM uint16_t PDR; /*!< (@ 0x00000002) Data direction register */ + + struct + { + __IOM uint16_t PDR0 : 1; /*!< [0..0] Pmn Direction */ + __IOM uint16_t PDR1 : 1; /*!< [1..1] Pmn Direction */ + __IOM uint16_t PDR2 : 1; /*!< [2..2] Pmn Direction */ + __IOM uint16_t PDR3 : 1; /*!< [3..3] Pmn Direction */ + __IOM uint16_t PDR4 : 1; /*!< [4..4] Pmn Direction */ + __IOM uint16_t PDR5 : 1; /*!< [5..5] Pmn Direction */ + __IOM uint16_t PDR6 : 1; /*!< [6..6] Pmn Direction */ + __IOM uint16_t PDR7 : 1; /*!< [7..7] Pmn Direction */ + __IOM uint16_t PDR8 : 1; /*!< [8..8] Pmn Direction */ + __IOM uint16_t PDR9 : 1; /*!< [9..9] Pmn Direction */ + __IOM uint16_t PDR10 : 1; /*!< [10..10] Pmn Direction */ + __IOM uint16_t PDR11 : 1; /*!< [11..11] Pmn Direction */ + __IOM uint16_t PDR12 : 1; /*!< [12..12] Pmn Direction */ + __IOM uint16_t PDR13 : 1; /*!< [13..13] Pmn Direction */ + __IOM uint16_t PDR14 : 1; /*!< [14..14] Pmn Direction */ + __IOM uint16_t PDR15 : 1; /*!< [15..15] Pmn Direction */ + } PDR_b; + }; + }; + }; + + union + { + union + { + __IM uint32_t PCNTR2; /*!< (@ 0x00000004) Port Control Register 2 */ + + struct + { + __IM uint32_t PIDR : 16; /*!< [15..0] Pmn Input Data */ + __IM uint32_t EIDR : 16; /*!< [31..16] Pmn Event Input Data */ + } PCNTR2_b; + }; + + struct + { + union + { + __IM uint16_t EIDR; /*!< (@ 0x00000004) Event input data register */ + + struct + { + __IM uint16_t EIDR0 : 1; /*!< [0..0] Pmn Event Input Data */ + __IM uint16_t EIDR1 : 1; /*!< [1..1] Pmn Event Input Data */ + __IM uint16_t EIDR2 : 1; /*!< [2..2] Pmn Event Input Data */ + __IM uint16_t EIDR3 : 1; /*!< [3..3] Pmn Event Input Data */ + __IM uint16_t EIDR4 : 1; /*!< [4..4] Pmn Event Input Data */ + __IM uint16_t EIDR5 : 1; /*!< [5..5] Pmn Event Input Data */ + __IM uint16_t EIDR6 : 1; /*!< [6..6] Pmn Event Input Data */ + __IM uint16_t EIDR7 : 1; /*!< [7..7] Pmn Event Input Data */ + __IM uint16_t EIDR8 : 1; /*!< [8..8] Pmn Event Input Data */ + __IM uint16_t EIDR9 : 1; /*!< [9..9] Pmn Event Input Data */ + __IM uint16_t EIDR10 : 1; /*!< [10..10] Pmn Event Input Data */ + __IM uint16_t EIDR11 : 1; /*!< [11..11] Pmn Event Input Data */ + __IM uint16_t EIDR12 : 1; /*!< [12..12] Pmn Event Input Data */ + __IM uint16_t EIDR13 : 1; /*!< [13..13] Pmn Event Input Data */ + __IM uint16_t EIDR14 : 1; /*!< [14..14] Pmn Event Input Data */ + __IM uint16_t EIDR15 : 1; /*!< [15..15] Pmn Event Input Data */ + } EIDR_b; + }; + + union + { + __IM uint16_t PIDR; /*!< (@ 0x00000006) Input data register */ + + struct + { + __IM uint16_t PIDR0 : 1; /*!< [0..0] Pmn Input Data */ + __IM uint16_t PIDR1 : 1; /*!< [1..1] Pmn Input Data */ + __IM uint16_t PIDR2 : 1; /*!< [2..2] Pmn Input Data */ + __IM uint16_t PIDR3 : 1; /*!< [3..3] Pmn Input Data */ + __IM uint16_t PIDR4 : 1; /*!< [4..4] Pmn Input Data */ + __IM uint16_t PIDR5 : 1; /*!< [5..5] Pmn Input Data */ + __IM uint16_t PIDR6 : 1; /*!< [6..6] Pmn Input Data */ + __IM uint16_t PIDR7 : 1; /*!< [7..7] Pmn Input Data */ + __IM uint16_t PIDR8 : 1; /*!< [8..8] Pmn Input Data */ + __IM uint16_t PIDR9 : 1; /*!< [9..9] Pmn Input Data */ + __IM uint16_t PIDR10 : 1; /*!< [10..10] Pmn Input Data */ + __IM uint16_t PIDR11 : 1; /*!< [11..11] Pmn Input Data */ + __IM uint16_t PIDR12 : 1; /*!< [12..12] Pmn Input Data */ + __IM uint16_t PIDR13 : 1; /*!< [13..13] Pmn Input Data */ + __IM uint16_t PIDR14 : 1; /*!< [14..14] Pmn Input Data */ + __IM uint16_t PIDR15 : 1; /*!< [15..15] Pmn Input Data */ + } PIDR_b; + }; + }; + }; + + union + { + union + { + __OM uint32_t PCNTR3; /*!< (@ 0x00000008) Port Control Register 3 */ + + struct + { + __OM uint32_t POSR : 16; /*!< [15..0] Pmn Output Set */ + __OM uint32_t PORR : 16; /*!< [31..16] Pmn Output Reset */ + } PCNTR3_b; + }; + + struct + { + union + { + __OM uint16_t PORR; /*!< (@ 0x00000008) Output set register */ + + struct + { + __OM uint16_t PORR0 : 1; /*!< [0..0] Pmn Output Reset */ + __OM uint16_t PORR1 : 1; /*!< [1..1] Pmn Output Reset */ + __OM uint16_t PORR2 : 1; /*!< [2..2] Pmn Output Reset */ + __OM uint16_t PORR3 : 1; /*!< [3..3] Pmn Output Reset */ + __OM uint16_t PORR4 : 1; /*!< [4..4] Pmn Output Reset */ + __OM uint16_t PORR5 : 1; /*!< [5..5] Pmn Output Reset */ + __OM uint16_t PORR6 : 1; /*!< [6..6] Pmn Output Reset */ + __OM uint16_t PORR7 : 1; /*!< [7..7] Pmn Output Reset */ + __OM uint16_t PORR8 : 1; /*!< [8..8] Pmn Output Reset */ + __OM uint16_t PORR9 : 1; /*!< [9..9] Pmn Output Reset */ + __OM uint16_t PORR10 : 1; /*!< [10..10] Pmn Output Reset */ + __OM uint16_t PORR11 : 1; /*!< [11..11] Pmn Output Reset */ + __OM uint16_t PORR12 : 1; /*!< [12..12] Pmn Output Reset */ + __OM uint16_t PORR13 : 1; /*!< [13..13] Pmn Output Reset */ + __OM uint16_t PORR14 : 1; /*!< [14..14] Pmn Output Reset */ + __OM uint16_t PORR15 : 1; /*!< [15..15] Pmn Output Reset */ + } PORR_b; + }; + + union + { + __OM uint16_t POSR; /*!< (@ 0x0000000A) Output reset register */ + + struct + { + __OM uint16_t POSR0 : 1; /*!< [0..0] Pmn Output Set */ + __OM uint16_t POSR1 : 1; /*!< [1..1] Pmn Output Set */ + __OM uint16_t POSR2 : 1; /*!< [2..2] Pmn Output Set */ + __OM uint16_t POSR3 : 1; /*!< [3..3] Pmn Output Set */ + __OM uint16_t POSR4 : 1; /*!< [4..4] Pmn Output Set */ + __OM uint16_t POSR5 : 1; /*!< [5..5] Pmn Output Set */ + __OM uint16_t POSR6 : 1; /*!< [6..6] Pmn Output Set */ + __OM uint16_t POSR7 : 1; /*!< [7..7] Pmn Output Set */ + __OM uint16_t POSR8 : 1; /*!< [8..8] Pmn Output Set */ + __OM uint16_t POSR9 : 1; /*!< [9..9] Pmn Output Set */ + __OM uint16_t POSR10 : 1; /*!< [10..10] Pmn Output Set */ + __OM uint16_t POSR11 : 1; /*!< [11..11] Pmn Output Set */ + __OM uint16_t POSR12 : 1; /*!< [12..12] Pmn Output Set */ + __OM uint16_t POSR13 : 1; /*!< [13..13] Pmn Output Set */ + __OM uint16_t POSR14 : 1; /*!< [14..14] Pmn Output Set */ + __OM uint16_t POSR15 : 1; /*!< [15..15] Pmn Output Set */ + } POSR_b; + }; + }; + }; + + union + { + union + { + __IOM uint32_t PCNTR4; /*!< (@ 0x0000000C) Port Control Register 4 */ + + struct + { + __IOM uint32_t EOSR : 16; /*!< [15..0] Pmn Event Output Set */ + __IOM uint32_t EORR : 16; /*!< [31..16] Pmn Event Output Reset */ + } PCNTR4_b; + }; + + struct + { + union + { + __IOM uint16_t EORR; /*!< (@ 0x0000000C) Event output set register */ + + struct + { + __IOM uint16_t EORR0 : 1; /*!< [0..0] Pmn Event Output Reset */ + __IOM uint16_t EORR1 : 1; /*!< [1..1] Pmn Event Output Reset */ + __IOM uint16_t EORR2 : 1; /*!< [2..2] Pmn Event Output Reset */ + __IOM uint16_t EORR3 : 1; /*!< [3..3] Pmn Event Output Reset */ + __IOM uint16_t EORR4 : 1; /*!< [4..4] Pmn Event Output Reset */ + __IOM uint16_t EORR5 : 1; /*!< [5..5] Pmn Event Output Reset */ + __IOM uint16_t EORR6 : 1; /*!< [6..6] Pmn Event Output Reset */ + __IOM uint16_t EORR7 : 1; /*!< [7..7] Pmn Event Output Reset */ + __IOM uint16_t EORR8 : 1; /*!< [8..8] Pmn Event Output Reset */ + __IOM uint16_t EORR9 : 1; /*!< [9..9] Pmn Event Output Reset */ + __IOM uint16_t EORR10 : 1; /*!< [10..10] Pmn Event Output Reset */ + __IOM uint16_t EORR11 : 1; /*!< [11..11] Pmn Event Output Reset */ + __IOM uint16_t EORR12 : 1; /*!< [12..12] Pmn Event Output Reset */ + __IOM uint16_t EORR13 : 1; /*!< [13..13] Pmn Event Output Reset */ + __IOM uint16_t EORR14 : 1; /*!< [14..14] Pmn Event Output Reset */ + __IOM uint16_t EORR15 : 1; /*!< [15..15] Pmn Event Output Reset */ + } EORR_b; + }; + + union + { + __IOM uint16_t EOSR; /*!< (@ 0x0000000E) Event output reset register */ + + struct + { + __IOM uint16_t EOSR0 : 1; /*!< [0..0] Pmn Event Output Set */ + __IOM uint16_t EOSR1 : 1; /*!< [1..1] Pmn Event Output Set */ + __IOM uint16_t EOSR2 : 1; /*!< [2..2] Pmn Event Output Set */ + __IOM uint16_t EOSR3 : 1; /*!< [3..3] Pmn Event Output Set */ + __IOM uint16_t EOSR4 : 1; /*!< [4..4] Pmn Event Output Set */ + __IOM uint16_t EOSR5 : 1; /*!< [5..5] Pmn Event Output Set */ + __IOM uint16_t EOSR6 : 1; /*!< [6..6] Pmn Event Output Set */ + __IOM uint16_t EOSR7 : 1; /*!< [7..7] Pmn Event Output Set */ + __IOM uint16_t EOSR8 : 1; /*!< [8..8] Pmn Event Output Set */ + __IOM uint16_t EOSR9 : 1; /*!< [9..9] Pmn Event Output Set */ + __IOM uint16_t EOSR10 : 1; /*!< [10..10] Pmn Event Output Set */ + __IOM uint16_t EOSR11 : 1; /*!< [11..11] Pmn Event Output Set */ + __IOM uint16_t EOSR12 : 1; /*!< [12..12] Pmn Event Output Set */ + __IOM uint16_t EOSR13 : 1; /*!< [13..13] Pmn Event Output Set */ + __IOM uint16_t EOSR14 : 1; /*!< [14..14] Pmn Event Output Set */ + __IOM uint16_t EOSR15 : 1; /*!< [15..15] Pmn Event Output Set */ + } EOSR_b; + }; + }; + }; +} R_PORT0_Type; /*!< Size = 16 (0x10) */ + +/* =========================================================================================================================== */ +/* ================ R_PFS ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports-PFS (R_PFS) + */ + +typedef struct /*!< (@ 0x40040800) R_PFS Structure */ +{ + __IOM R_PFS_PORT_Type PORT[15]; /*!< (@ 0x00000000) Port [0..14] */ +} R_PFS_Type; /*!< Size = 960 (0x3c0) */ + +/* =========================================================================================================================== */ +/* ================ R_PMISC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports-MISC (R_PMISC) + */ + +typedef struct /*!< (@ 0x40040D00) R_PMISC Structure */ +{ + union + { + __IOM uint8_t PFENET; /*!< (@ 0x00000000) Ethernet Control Register */ + + struct + { + uint8_t : 4; + __IOM uint8_t PHYMODE0 : 1; /*!< [4..4] Ethernet Mode Setting ch0 */ + __IOM uint8_t PHYMODE1 : 1; /*!< [5..5] Ethernet Mode Setting ch1 */ + uint8_t : 2; + } PFENET_b; + }; + __IM uint8_t RESERVED[2]; + + union + { + __IOM uint8_t PWPR; /*!< (@ 0x00000003) Write-Protect Register */ + + struct + { + uint8_t : 6; + __IOM uint8_t PFSWE : 1; /*!< [6..6] PmnPFS Register Write */ + __IOM uint8_t B0WI : 1; /*!< [7..7] PFSWE Bit Write Disable */ + } PWPR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t PWPRS; /*!< (@ 0x00000005) Write-Protect Register for Secure */ + + struct + { + uint8_t : 6; + __IOM uint8_t PFSWE : 1; /*!< [6..6] PmnPFS Register Write */ + __IOM uint8_t B0WI : 1; /*!< [7..7] PFSWE Bit Write Disable */ + } PWPRS_b; + }; + __IM uint16_t RESERVED2[4]; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t PRWCNTR; /*!< (@ 0x0000000F) Port Read Wait Control Register */ + + struct + { + __IOM uint8_t WAIT : 2; /*!< [1..0] Wait Cycle Control */ + uint8_t : 6; + } PRWCNTR_b; + }; + __IOM R_PMISC_PMSAR_Type PMSAR[12]; /*!< (@ 0x00000010) Port Security Attribution Register */ +} R_PMISC_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Realtime Clock (R_RTC) + */ + +typedef struct /*!< (@ 0x40044000) R_RTC Structure */ +{ + union + { + __IM uint8_t R64CNT; /*!< (@ 0x00000000) 64-Hz Counter */ + + struct + { + __IM uint8_t F64HZ : 1; /*!< [0..0] 64Hz Flag */ + __IM uint8_t F32HZ : 1; /*!< [1..1] 32Hz Flag */ + __IM uint8_t F16HZ : 1; /*!< [2..2] 16Hz Flag */ + __IM uint8_t F8HZ : 1; /*!< [3..3] 8Hz Flag */ + __IM uint8_t F4HZ : 1; /*!< [4..4] 4Hz Flag */ + __IM uint8_t F2HZ : 1; /*!< [5..5] 2Hz Flag */ + __IM uint8_t F1HZ : 1; /*!< [6..6] 1Hz Flag */ + __IM uint8_t R64OVF : 1; /*!< [7..7] This bit indicates the overflow of F1HZ only when using + * time error adjustment function inlow-consumption clock + * mode. */ + } R64CNT_b; + }; + __IM uint8_t RESERVED; + + union + { + union + { + __IOM uint8_t BCNT0; /*!< (@ 0x00000002) Binary Counter 0 */ + + struct + { + __IOM uint8_t BCNT0 : 8; /*!< [7..0] The BCNT0 counter is a readable/writable 32-bit binary + * counter b7 to b0. */ + } BCNT0_b; + }; + + union + { + __IOM uint8_t RSECCNT; /*!< (@ 0x00000002) Second Counter */ + + struct + { + __IOM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Count Counts from 0 to 9 every second. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Second Count Counts from 0 to 5 for 60-second counting. */ + uint8_t : 1; + } RSECCNT_b; + }; + }; + __IM uint8_t RESERVED1; + + union + { + union + { + __IOM uint8_t BCNT1; /*!< (@ 0x00000004) Binary Counter 1 */ + + struct + { + __IOM uint8_t BCNT1 : 8; /*!< [7..0] The BCNT1 counter is a readable/writable 32-bit binary + * counter b15 to b8. */ + } BCNT1_b; + }; + + union + { + __IOM uint8_t RMINCNT; /*!< (@ 0x00000004) Minute Counter */ + + struct + { + __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Counts from 0 to 9 every minute. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Counts from 0 to 5 for 60-minute counting. */ + uint8_t : 1; + } RMINCNT_b; + }; + }; + __IM uint8_t RESERVED2; + + union + { + union + { + __IOM uint8_t BCNT2; /*!< (@ 0x00000006) Binary Counter 2 */ + + struct + { + __IOM uint8_t BCNT2 : 8; /*!< [7..0] The BCNT2 counter is a readable/writable 32-bit binary + * counter b23 to b16. */ + } BCNT2_b; + }; + + union + { + __IOM uint8_t RHRCNT; /*!< (@ 0x00000006) Hour Counter */ + + struct + { + __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Counts from 0 to 9 once per hour. When a + * carry is generated, 1 is added to the tens place. */ + __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Counts from 0 to 2 once per carry from + * the ones place. */ + __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ + uint8_t : 1; + } RHRCNT_b; + }; + }; + __IM uint8_t RESERVED3; + + union + { + union + { + __IOM uint8_t BCNT3; /*!< (@ 0x00000008) Binary Counter 3 */ + + struct + { + __IOM uint8_t BCNT3 : 8; /*!< [7..0] The BCNT3 counter is a readable/writable 32-bit binary + * counter b31 to b24. */ + } BCNT3_b; + }; + + union + { + __IOM uint8_t RWKCNT; /*!< (@ 0x00000008) Day-of-Week Counter */ + + struct + { + __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ + uint8_t : 5; + } RWKCNT_b; + }; + }; + __IM uint8_t RESERVED4; + + union + { + __IOM uint8_t RDAYCNT; /*!< (@ 0x0000000A) Day Counter */ + + struct + { + __IOM uint8_t DATE1 : 4; /*!< [3..0] 1-Day Count Counts from 0 to 9 once per day. When a carry + * is generated, 1 is added to the tens place. */ + __IOM uint8_t DATE10 : 2; /*!< [5..4] 10-Day Count Counts from 0 to 3 once per carry from the + * ones place. */ + uint8_t : 2; + } RDAYCNT_b; + }; + __IM uint8_t RESERVED5; + + union + { + __IOM uint8_t RMONCNT; /*!< (@ 0x0000000C) Month Counter */ + + struct + { + __IOM uint8_t MON1 : 4; /*!< [3..0] 1-Month Count Counts from 0 to 9 once per month. When + * a carry is generated, 1 is added to the tens place. */ + __IOM uint8_t MON10 : 1; /*!< [4..4] 10-Month Count Counts from 0 to 1 once per carry from + * the ones place. */ + uint8_t : 3; + } RMONCNT_b; + }; + __IM uint8_t RESERVED6; + + union + { + __IOM uint16_t RYRCNT; /*!< (@ 0x0000000E) Year Counter */ + + struct + { + __IOM uint16_t YR1 : 4; /*!< [3..0] 1-Year Count Counts from 0 to 9 once per year. When a + * carry is generated, 1 is added to the tens place. */ + __IOM uint16_t YR10 : 4; /*!< [7..4] 10-Year Count Counts from 0 to 9 once per carry from + * ones place. When a carry is generated in the tens place, + * 1 is added to the hundreds place. */ + uint16_t : 8; + } RYRCNT_b; + }; + + union + { + union + { + __IOM uint8_t BCNT0AR; /*!< (@ 0x00000010) Binary Counter 0 Alarm Register */ + + struct + { + __IOM uint8_t BCNT0AR : 8; /*!< [7..0] he BCNT0AR counter is a readable/writable alarm register + * corresponding to 32-bit binary counter b7 to b0. */ + } BCNT0AR_b; + }; + + union + { + __IOM uint8_t RSECAR; /*!< (@ 0x00000010) Second Alarm Register */ + + struct + { + __OM uint8_t SEC1 : 4; /*!< [3..0] 1-Second Value for the ones place of seconds */ + __IOM uint8_t SEC10 : 3; /*!< [6..4] 10-Seconds Value for the tens place of seconds */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RSECAR_b; + }; + }; + __IM uint8_t RESERVED7; + + union + { + union + { + __IOM uint8_t BCNT1AR; /*!< (@ 0x00000012) Binary Counter 1 Alarm Register */ + + struct + { + __IOM uint8_t BCNT1AR : 8; /*!< [7..0] he BCNT1AR counter is a readable/writable alarm register + * corresponding to 32-bit binary counter b15 to b8. */ + } BCNT1AR_b; + }; + + union + { + __IOM uint8_t RMINAR; /*!< (@ 0x00000012) Minute Alarm Register */ + + struct + { + __IOM uint8_t MIN1 : 4; /*!< [3..0] 1-Minute Count Value for the ones place of minutes */ + __IOM uint8_t MIN10 : 3; /*!< [6..4] 10-Minute Count Value for the tens place of minutes */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RMINAR_b; + }; + }; + __IM uint8_t RESERVED8; + + union + { + union + { + __IOM uint8_t BCNT2AR; /*!< (@ 0x00000014) Binary Counter 2 Alarm Register */ + + struct + { + __IOM uint8_t BCNT2AR : 8; /*!< [7..0] The BCNT2AR counter is a readable/writable 32-bit binary + * counter b23 to b16. */ + } BCNT2AR_b; + }; + + union + { + __IOM uint8_t RHRAR; /*!< (@ 0x00000014) Hour Alarm Register */ + + struct + { + __IOM uint8_t HR1 : 4; /*!< [3..0] 1-Hour Count Value for the ones place of hours */ + __IOM uint8_t HR10 : 2; /*!< [5..4] 10-Hour Count Value for the tens place of hours */ + __IOM uint8_t PM : 1; /*!< [6..6] Time Counter Setting for a.m./p.m. */ + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RHRAR_b; + }; + }; + __IM uint8_t RESERVED9; + + union + { + union + { + __IOM uint8_t BCNT3AR; /*!< (@ 0x00000016) Binary Counter 3 Alarm Register */ + + struct + { + __IOM uint8_t BCNT3AR : 8; /*!< [7..0] The BCNT3AR counter is a readable/writable 32-bit binary + * counter b31 to b24. */ + } BCNT3AR_b; + }; + + union + { + __IOM uint8_t RWKAR; /*!< (@ 0x00000016) Day-of-Week Alarm Register */ + + struct + { + __IOM uint8_t DAYW : 3; /*!< [2..0] Day-of-Week Counting */ + uint8_t : 4; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RWKAR_b; + }; + }; + __IM uint8_t RESERVED10; + + union + { + union + { + __IOM uint8_t BCNT0AER; /*!< (@ 0x00000018) Binary Counter 0 Alarm Enable Register */ + + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT0AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b7 to b0. */ + } BCNT0AER_b; + }; + + union + { + __IOM uint8_t RDAYAR; /*!< (@ 0x00000018) Date Alarm Register */ + + struct + { + __IOM uint8_t DATE1 : 4; /*!< [3..0] 1 Day Value for the ones place of days */ + __IOM uint8_t DATE10 : 2; /*!< [5..4] 10 Days Value for the tens place of days */ + uint8_t : 1; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RDAYAR_b; + }; + }; + __IM uint8_t RESERVED11; + + union + { + union + { + __IOM uint8_t BCNT1AER; /*!< (@ 0x0000001A) Binary Counter 1 Alarm Enable Register */ + + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT1AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b15 to b8. */ + } BCNT1AER_b; + }; + + union + { + __IOM uint8_t RMONAR; /*!< (@ 0x0000001A) Month Alarm Register */ + + struct + { + __IOM uint8_t MON1 : 4; /*!< [3..0] 1 Month Value for the ones place of months */ + __IOM uint8_t MON10 : 1; /*!< [4..4] 10 Months Value for the tens place of months */ + uint8_t : 2; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RMONAR_b; + }; + }; + __IM uint8_t RESERVED12; + + union + { + union + { + __IOM uint16_t BCNT2AER; /*!< (@ 0x0000001C) Binary Counter 2 Alarm Enable Register */ + + struct + { + __IOM uint16_t ENB : 8; /*!< [7..0] The BCNT2AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b23 to b16. */ + uint16_t : 8; + } BCNT2AER_b; + }; + + union + { + __IOM uint16_t RYRAR; /*!< (@ 0x0000001C) Year Alarm Register */ + + struct + { + __IOM uint16_t YR1 : 4; /*!< [3..0] 1 Year Value for the ones place of years */ + __IOM uint16_t YR10 : 4; /*!< [7..4] 10 Years Value for the tens place of years */ + uint16_t : 8; + } RYRAR_b; + }; + }; + + union + { + union + { + __IOM uint8_t BCNT3AER; /*!< (@ 0x0000001E) Binary Counter 3 Alarm Enable Register */ + + struct + { + __IOM uint8_t ENB : 8; /*!< [7..0] The BCNT3AER register is a readable/writable register + * for setting the alarm enable corresponding to 32-bit binary + * counter b31 to b24. */ + } BCNT3AER_b; + }; + + union + { + __IOM uint8_t RYRAREN; /*!< (@ 0x0000001E) Year Alarm Enable Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t ENB : 1; /*!< [7..7] Compare enable */ + } RYRAREN_b; + }; + }; + __IM uint8_t RESERVED13; + __IM uint16_t RESERVED14; + + union + { + __IOM uint8_t RCR1; /*!< (@ 0x00000022) RTC Control Register 1 */ + + struct + { + __IOM uint8_t AIE : 1; /*!< [0..0] Alarm Interrupt Enable */ + __IOM uint8_t CIE : 1; /*!< [1..1] Carry Interrupt Enable */ + __IOM uint8_t PIE : 1; /*!< [2..2] Periodic Interrupt Enable */ + __IOM uint8_t RTCOS : 1; /*!< [3..3] RTCOUT Output Select */ + __IOM uint8_t PES : 4; /*!< [7..4] Periodic Interrupt Select */ + } RCR1_b; + }; + __IM uint8_t RESERVED15; + + union + { + __IOM uint8_t RCR2; /*!< (@ 0x00000024) RTC Control Register 2 */ + + struct + { + __IOM uint8_t START : 1; /*!< [0..0] Start */ + __IOM uint8_t RESET : 1; /*!< [1..1] RTC Software Reset */ + __IOM uint8_t ADJ30 : 1; /*!< [2..2] 30-Second Adjustment */ + __IOM uint8_t RTCOE : 1; /*!< [3..3] RTCOUT Output Enable */ + __IOM uint8_t AADJE : 1; /*!< [4..4] Automatic Adjustment Enable (When the LOCO clock is selected, + * the setting of this bit is disabled.) */ + __IOM uint8_t AADJP : 1; /*!< [5..5] Automatic Adjustment Period Select (When the LOCO clock + * is selected, the setting of this bit is disabled.) */ + __IOM uint8_t HR24 : 1; /*!< [6..6] Hours Mode */ + __IOM uint8_t CNTMD : 1; /*!< [7..7] Count Mode Select */ + } RCR2_b; + }; + __IM uint8_t RESERVED16; + __IM uint16_t RESERVED17; + + union + { + __IOM uint8_t RCR4; /*!< (@ 0x00000028) RTC Control Register 4 */ + + struct + { + __IOM uint8_t RCKSEL : 1; /*!< [0..0] Count Source Select */ + uint8_t : 6; + __IOM uint8_t ROPSEL : 1; /*!< [7..7] RTC Operation Mode Select */ + } RCR4_b; + }; + __IM uint8_t RESERVED18; + + union + { + __IOM uint16_t RFRH; /*!< (@ 0x0000002A) Frequency Register H */ + + struct + { + __IOM uint16_t RFC16 : 1; /*!< [0..0] Frequency Comparison Value (b16) To generate the operating + * clock from the LOCOclock, this bit sets the comparison + * value of the 128-Hz clock cycle. */ + uint16_t : 15; + } RFRH_b; + }; + + union + { + __IOM uint16_t RFRL; /*!< (@ 0x0000002C) Frequency Register L */ + + struct + { + __IOM uint16_t RFC : 16; /*!< [15..0] Frequency Comparison Value(b15-b0) To generate the operating + * clock from the main clock, this bit sets the comparison + * value of the 128-Hz clock cycle. */ + } RFRL_b; + }; + + union + { + __IOM uint8_t RADJ; /*!< (@ 0x0000002E) Time Error Adjustment Register */ + + struct + { + __IOM uint8_t ADJ : 6; /*!< [5..0] Adjustment Value These bits specify the adjustment value + * from the prescaler. */ + __IOM uint8_t PMADJ : 2; /*!< [7..6] Plus-Minus */ + } RADJ_b; + }; + __IM uint8_t RESERVED19; + + union + { + __IOM uint16_t RADJ2; /*!< (@ 0x00000030) Time Error Adjustment Register 2 */ + + struct + { + uint16_t : 5; + __IOM uint16_t FADJ : 11; /*!< [15..5] Fractional Adjust Value */ + } RADJ2_b; + }; + __IM uint16_t RESERVED20[7]; + __IOM R_RTC_RTCCR_Type RTCCR[3]; /*!< (@ 0x00000040) Time Capture Control Register */ + __IM uint16_t RESERVED21[5]; + __IOM R_RTC_CP_Type CP[3]; /*!< (@ 0x00000050) Capture registers */ +} R_RTC_Type; /*!< Size = 128 (0x80) */ + +/* =========================================================================================================================== */ +/* ================ R_SCI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Communications Interface (R_SCI0) + */ + +typedef struct /*!< (@ 0x40070000) R_SCI0 Structure */ +{ + union + { + union + { + __IOM uint8_t SMR; /*!< (@ 0x00000000) Serial Mode Register (SCMR.SMIF = 0) */ + + struct + { + __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ + __IOM uint8_t MP : 1; /*!< [2..2] Multi-Processor Mode(Valid only in asynchronous mode) */ + __IOM uint8_t STOP : 1; /*!< [3..3] Stop Bit Length(Valid only in asynchronous mode) */ + __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ + __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ + __IOM uint8_t CHR : 1; /*!< [6..6] Character Length(Valid only in asynchronous mode) */ + __IOM uint8_t CM : 1; /*!< [7..7] Communication Mode */ + } SMR_b; + }; + + union + { + __IOM uint8_t SMR_SMCI; /*!< (@ 0x00000000) Serial mode register (SCMR.SMIF = 1) */ + + struct + { + __IOM uint8_t CKS : 2; /*!< [1..0] Clock Select */ + __IOM uint8_t BCP : 2; /*!< [3..2] Base Clock Pulse(Valid only in asynchronous mode) */ + __IOM uint8_t PM : 1; /*!< [4..4] Parity Mode (Valid only when the PE bit is 1) */ + __IOM uint8_t PE : 1; /*!< [5..5] Parity Enable(Valid only in asynchronous mode) */ + __IOM uint8_t BLK : 1; /*!< [6..6] Block Transfer Mode */ + __IOM uint8_t GM : 1; /*!< [7..7] GSM Mode */ + } SMR_SMCI_b; + }; + }; + + union + { + __IOM uint8_t BRR; /*!< (@ 0x00000001) Bit Rate Register */ + + struct + { + __IOM uint8_t BRR : 8; /*!< [7..0] BRR is an 8-bit register that adjusts the bit rate. */ + } BRR_b; + }; + + union + { + union + { + __IOM uint8_t SCR; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF = 0) */ + + struct + { + __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ + __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ + __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable(Valid in asynchronous + * mode when SMR.MP = 1) */ + __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ + __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ + __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ + } SCR_b; + }; + + union + { + __IOM uint8_t SCR_SMCI; /*!< (@ 0x00000002) Serial Control Register (SCMR.SMIF =1) */ + + struct + { + __IOM uint8_t CKE : 2; /*!< [1..0] Clock Enable */ + __IOM uint8_t TEIE : 1; /*!< [2..2] Transmit End Interrupt Enable */ + __IOM uint8_t MPIE : 1; /*!< [3..3] Multi-Processor Interrupt Enable */ + __IOM uint8_t RE : 1; /*!< [4..4] Receive Enable */ + __IOM uint8_t TE : 1; /*!< [5..5] Transmit Enable */ + __IOM uint8_t RIE : 1; /*!< [6..6] Receive Interrupt Enable */ + __IOM uint8_t TIE : 1; /*!< [7..7] Transmit Interrupt Enable */ + } SCR_SMCI_b; + }; + }; + + union + { + __IOM uint8_t TDR; /*!< (@ 0x00000003) Transmit Data Register */ + + struct + { + __IOM uint8_t TDR : 8; /*!< [7..0] TDR is an 8-bit register that stores transmit data. */ + } TDR_b; + }; + + union + { + union + { + __IOM uint8_t SSR; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=0) */ + + struct + { + __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit Transfer */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-Processor */ + __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ + __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } SSR_b; + }; + + union + { + __IOM uint8_t SSR_FIFO; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 0 and FCR.FM=1) */ + + struct + { + __IOM uint8_t DR : 1; /*!< [0..0] Receive Data Ready flag(Valid only in asynchronous mode(including + * multi-processor) and FIFO selected) */ + uint8_t : 1; + __IOM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag */ + __IOM uint8_t TDFE : 1; /*!< [7..7] Transmit FIFO data empty flag */ + } SSR_FIFO_b; + }; + + union + { + __IOM uint8_t SSR_MANC; /*!< (@ 0x00000004) Serial Status Register for Manchester Mode (SCMR.SMIF + * = 0, and MMR.MANEN = 1) */ + + struct + { + __IOM uint8_t MER : 1; /*!< [0..0] Manchester Error Flag Valid for Manchester mode only */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-Processor */ + __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t FER : 1; /*!< [4..4] Framing Error Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ + __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } SSR_MANC_b; + }; + + union + { + __IOM uint8_t SSR_SMCI; /*!< (@ 0x00000004) Serial Status Register(SCMR.SMIF = 1) */ + + struct + { + __IOM uint8_t MPBT : 1; /*!< [0..0] Multi-Processor Bit TransferThis bit should be 0 in smart + * card interface mode. */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-ProcessorThis bit should be 0 in smart card interface + * mode. */ + __IM uint8_t TEND : 1; /*!< [2..2] Transmit End Flag */ + __IOM uint8_t PER : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t ERS : 1; /*!< [4..4] Error Signal Status Flag */ + __IOM uint8_t ORER : 1; /*!< [5..5] Overrun Error Flag */ + __IOM uint8_t RDRF : 1; /*!< [6..6] Receive Data Full Flag */ + __IOM uint8_t TDRE : 1; /*!< [7..7] Transmit Data Empty Flag */ + } SSR_SMCI_b; + }; + }; + + union + { + __IM uint8_t RDR; /*!< (@ 0x00000005) Receive Data Register */ + + struct + { + __IM uint8_t RDR : 8; /*!< [7..0] RDR is an 8-bit register that stores receive data. */ + } RDR_b; + }; + + union + { + __IOM uint8_t SCMR; /*!< (@ 0x00000006) Smart Card Mode Register */ + + struct + { + __IOM uint8_t SMIF : 1; /*!< [0..0] Smart Card Interface Mode Select */ + uint8_t : 1; + __IOM uint8_t SINV : 1; /*!< [2..2] Transmitted/Received Data InvertSet this bit to 0 if + * operation is to be in simple I2C mode. */ + __IOM uint8_t SDIR : 1; /*!< [3..3] Transmitted/Received Data Transfer DirectionNOTE: The + * setting is invalid and a fixed data length of 8 bits is + * used in modes other than asynchronous mode.Set this bit + * to 1 if operation is to be in simple I2C mode. */ + __IOM uint8_t CHR1 : 1; /*!< [4..4] Character Length 1(Only valid in asynchronous mode) */ + uint8_t : 2; + __IOM uint8_t BCP2 : 1; /*!< [7..7] Base Clock Pulse 2Selects the number of base clock cycles + * in combination with the SMR.BCP[1:0] bits */ + } SCMR_b; + }; + + union + { + __IOM uint8_t SEMR; /*!< (@ 0x00000007) Serial Extended Mode Register */ + + struct + { + __IOM uint8_t ACS0 : 1; /*!< [0..0] Asynchronous Mode Clock Source Select (Valid only in + * asynchronous mode). */ + __IOM uint8_t PADIS : 1; /*!< [1..1] Preamble function Disable (Valid only in asynchronous + * mode). */ + __IOM uint8_t BRME : 1; /*!< [2..2] Bit Rate Modulation Enable */ + __IOM uint8_t ABCSE : 1; /*!< [3..3] Asynchronous Mode Extended Base Clock Select 1(Valid + * only in asynchronous mode and SCR.CKE[1]=0) */ + __IOM uint8_t ABCS : 1; /*!< [4..4] Asynchronous Mode Base Clock Select(Valid only in asynchronous + * mode) */ + __IOM uint8_t NFEN : 1; /*!< [5..5] Digital Noise Filter Function Enable(The NFEN bit should + * be 0 without simple I2C mode and asynchronous mode.)In + * asynchronous mode, for RXDn input only. In simple I2C mode, + * for RXDn/TxDn input. */ + __IOM uint8_t BGDM : 1; /*!< [6..6] Baud Rate Generator Double-Speed Mode Select(Only valid + * the CKE[1] bit in SCR is 0 in asynchronous mode). */ + __IOM uint8_t RXDESEL : 1; /*!< [7..7] Asynchronous Start Bit Edge Detection Select(Valid only + * in asynchronous mode) */ + } SEMR_b; + }; + + union + { + __IOM uint8_t SNFR; /*!< (@ 0x00000008) Noise Filter Setting Register */ + + struct + { + __IOM uint8_t NFCS : 3; /*!< [2..0] Noise Filter Clock Select */ + uint8_t : 5; + } SNFR_b; + }; + + union + { + __IOM uint8_t SIMR1; /*!< (@ 0x00000009) I2C Mode Register 1 */ + + struct + { + __IOM uint8_t IICM : 1; /*!< [0..0] Simple I2C Mode Select */ + uint8_t : 2; + __IOM uint8_t IICDL : 5; /*!< [7..3] SDA Delay Output SelectCycles below are of the clock + * signal from the on-chip baud rate generator. */ + } SIMR1_b; + }; + + union + { + __IOM uint8_t SIMR2; /*!< (@ 0x0000000A) I2C Mode Register 2 */ + + struct + { + __IOM uint8_t IICINTM : 1; /*!< [0..0] I2C Interrupt Mode Select */ + __IOM uint8_t IICCSC : 1; /*!< [1..1] Clock Synchronization */ + uint8_t : 3; + __IOM uint8_t IICACKT : 1; /*!< [5..5] ACK Transmission Data */ + uint8_t : 2; + } SIMR2_b; + }; + + union + { + __IOM uint8_t SIMR3; /*!< (@ 0x0000000B) I2C Mode Register 3 */ + + struct + { + __IOM uint8_t IICSTAREQ : 1; /*!< [0..0] Start Condition Generation */ + __IOM uint8_t IICRSTAREQ : 1; /*!< [1..1] Restart Condition Generation */ + __IOM uint8_t IICSTPREQ : 1; /*!< [2..2] Stop Condition Generation */ + __IOM uint8_t IICSTIF : 1; /*!< [3..3] Issuing of Start, Restart, or Stop Condition Completed + * Flag(When 0 is written to IICSTIF, it is cleared to 0.) */ + __IOM uint8_t IICSDAS : 2; /*!< [5..4] SDA Output Select */ + __IOM uint8_t IICSCLS : 2; /*!< [7..6] SCL Output Select */ + } SIMR3_b; + }; + + union + { + __IM uint8_t SISR; /*!< (@ 0x0000000C) I2C Status Register */ + + struct + { + __IM uint8_t IICACKR : 1; /*!< [0..0] ACK Reception Data Flag */ + uint8_t : 7; + } SISR_b; + }; + + union + { + __IOM uint8_t SPMR; /*!< (@ 0x0000000D) SPI Mode Register */ + + struct + { + __IOM uint8_t SSE : 1; /*!< [0..0] SSn Pin Function Enable */ + __IOM uint8_t CTSE : 1; /*!< [1..1] CTS Enable */ + __IOM uint8_t MSS : 1; /*!< [2..2] Master Slave Select */ + __IOM uint8_t CSTPEN : 1; /*!< [3..3] CTS external pin Enable */ + __IOM uint8_t MFF : 1; /*!< [4..4] Mode Fault Flag */ + uint8_t : 1; + __IOM uint8_t CKPOL : 1; /*!< [6..6] Clock Polarity Select */ + __IOM uint8_t CKPH : 1; /*!< [7..7] Clock Phase Select */ + } SPMR_b; + }; + + union + { + union + { + __IOM uint16_t TDRHL; /*!< (@ 0x0000000E) Transmit 9-bit Data Register */ + + struct + { + __OM uint16_t TDRHL : 16; /*!< [15..0] TDRHL is a 16-bit register that stores transmit data. */ + } TDRHL_b; + }; + + union + { + __OM uint16_t FTDRHL; /*!< (@ 0x0000000E) Transmit FIFO Data Register HL */ + + struct + { + __OM uint16_t TDAT : 9; /*!< [8..0] Serial transmit data (Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __OM uint16_t MPBT : 1; /*!< [9..9] Multi-processor transfer bit flag(Valid only in asynchronous + * mode and SMR.MP=1 and FIFO selected) */ + uint16_t : 6; + } FTDRHL_b; + }; + + union + { + __IOM uint16_t TDRHL_MAN; /*!< (@ 0x0000000E) Transmit Data Register for Manchester Mode (MMR.MANEN + * = 1) */ + + struct + { + __IOM uint16_t TDAT : 9; /*!< [8..0] Serial transmit data */ + __IOM uint16_t MPBT : 1; /*!< [9..9] Multi-processor Transfer Bit Flag */ + uint16_t : 2; + __IOM uint16_t TSYNC : 1; /*!< [12..12] Transmit SYNC data bit */ + uint16_t : 3; + } TDRHL_MAN_b; + }; + + struct + { + union + { + __OM uint8_t FTDRH; /*!< (@ 0x0000000E) Transmit FIFO Data Register H */ + + struct + { + __OM uint8_t TDATH : 1; /*!< [0..0] Serial transmit data (b8) (Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * and FIFO selected) */ + __OM uint8_t MPBT : 1; /*!< [1..1] Multi-processor transfer bit flag(Valid only in asynchronous + * mode and SMR.MP=1 and FIFO selected) */ + uint8_t : 6; + } FTDRH_b; + }; + + union + { + __OM uint8_t FTDRL; /*!< (@ 0x0000000F) Transmit FIFO Data Register L */ + + struct + { + __OM uint8_t TDATL : 8; /*!< [7..0] Serial transmit data(b7-b0) (Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * and FIFO selected) */ + } FTDRL_b; + }; + }; + }; + + union + { + union + { + __IM uint16_t RDRHL; /*!< (@ 0x00000010) Receive 9-bit Data Register */ + + struct + { + __IM uint16_t RDRHL : 16; /*!< [15..0] RDRHL is an 16-bit register that stores receive data. */ + } RDRHL_b; + }; + + union + { + __IM uint16_t FRDRHL; /*!< (@ 0x00000010) Receive FIFO Data Register HL */ + + struct + { + __IM uint16_t RDAT : 9; /*!< [8..0] Serial receive data(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __IM uint16_t MPB : 1; /*!< [9..9] Multi-processor bit flag(Valid only in asynchronous mode + * with SMR.MP=1 and FIFO selected) It can read multi-processor + * bit corresponded to serial receive data(RDATA[8:0]) */ + __IM uint16_t DR : 1; /*!< [10..10] Receive data ready flag(It is same as SSR.DR) */ + __IM uint16_t PER : 1; /*!< [11..11] Parity error flag */ + __IM uint16_t FER : 1; /*!< [12..12] Framing error flag */ + __IM uint16_t ORER : 1; /*!< [13..13] Overrun error flag(It is same as SSR.ORER) */ + __IM uint16_t RDF : 1; /*!< [14..14] Receive FIFO data full flag(It is same as SSR.RDF) */ + uint16_t : 1; + } FRDRHL_b; + }; + + union + { + __IM uint16_t RDRHL_MAN; /*!< (@ 0x00000010) Receive Data Register for Manchester Mode (MMR.MANEN + * = 1) */ + + struct + { + __IM uint16_t RDAT : 9; /*!< [8..0] Serial Receive Data */ + __IM uint16_t MPB : 1; /*!< [9..9] Multi-processor Bit */ + uint16_t : 2; + __IM uint16_t RSYNC : 1; /*!< [12..12] Receive SYNC data bit */ + uint16_t : 3; + } RDRHL_MAN_b; + }; + + struct + { + union + { + __IM uint8_t FRDRH; /*!< (@ 0x00000010) Receive FIFO Data Register H */ + + struct + { + __IM uint8_t RDATH : 1; /*!< [0..0] Serial receive data(b8)(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + __IM uint8_t MPB : 1; /*!< [1..1] Multi-processor bit flag(Valid only in asynchronous mode + * with SMR.MP=1 and FIFO selected) It can read multi-processor + * bit corresponded to serial receive data(RDATA[8:0]) */ + __IM uint8_t DR : 1; /*!< [2..2] Receive data ready flag(It is same as SSR.DR) */ + __IM uint8_t PER : 1; /*!< [3..3] Parity error flag */ + __IM uint8_t FER : 1; /*!< [4..4] Framing error flag */ + __IM uint8_t ORER : 1; /*!< [5..5] Overrun error flag(It is same as SSR.ORER) */ + __IM uint8_t RDF : 1; /*!< [6..6] Receive FIFO data full flag(It is same as SSR.RDF) */ + uint8_t : 1; + } FRDRH_b; + }; + + union + { + __IM uint8_t FRDRL; /*!< (@ 0x00000011) Receive FIFO Data Register L */ + + struct + { + __IM uint8_t RDATL : 8; /*!< [7..0] Serial receive data(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected)NOTE: + * When reading both of FRDRH register and FRDRL register, + * please read by an order of the FRDRH register and the FRDRL + * register. */ + } FRDRL_b; + }; + }; + }; + + union + { + __IOM uint8_t MDDR; /*!< (@ 0x00000012) Modulation Duty Register */ + + struct + { + __IOM uint8_t MDDR : 8; /*!< [7..0] MDDR corrects the bit rate adjusted by the BRR register. */ + } MDDR_b; + }; + + union + { + __IOM uint8_t DCCR; /*!< (@ 0x00000013) Data Compare Match Control Register */ + + struct + { + __IOM uint8_t DCMF : 1; /*!< [0..0] Data Compare Match Flag */ + uint8_t : 2; + __IOM uint8_t DPER : 1; /*!< [3..3] Data Compare Match Parity Error Flag */ + __IOM uint8_t DFER : 1; /*!< [4..4] Data Compare Match Framing Error Flag */ + uint8_t : 1; + __IOM uint8_t IDSEL : 1; /*!< [6..6] ID frame select(Valid only in asynchronous mode(including + * multi-processor) */ + __IOM uint8_t DCME : 1; /*!< [7..7] Data Compare Match Enable(Valid only in asynchronous + * mode(including multi-processor) */ + } DCCR_b; + }; + + union + { + __IOM uint16_t FCR; /*!< (@ 0x00000014) FIFO Control Register */ + + struct + { + __IOM uint16_t FM : 1; /*!< [0..0] FIFO Mode Select(Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode) */ + __IOM uint16_t RFRST : 1; /*!< [1..1] Receive FIFO Data Register Reset(Valid only in FCR.FM=1) */ + __IOM uint16_t TFRST : 1; /*!< [2..2] Transmit FIFO Data Register Reset(Valid only in FCR.FM=1) */ + __IOM uint16_t DRES : 1; /*!< [3..3] Receive data ready error select bit(When detecting a + * reception data ready, the interrupt request is selected.) */ + __IOM uint16_t TTRG : 4; /*!< [7..4] Transmit FIFO data trigger number(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode) */ + __IOM uint16_t RTRG : 4; /*!< [11..8] Receive FIFO data trigger number(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode) */ + __IOM uint16_t RSTRG : 4; /*!< [15..12] RTS Output Active Trigger Number Select(Valid only + * in asynchronous mode(including multi-processor) or clock + * synchronous mode) */ + } FCR_b; + }; + + union + { + __IM uint16_t FDR; /*!< (@ 0x00000016) FIFO Data Count Register */ + + struct + { + __IM uint16_t R : 5; /*!< [4..0] Receive FIFO Data CountIndicate the quantity of receive + * data stored in FRDRH and FRDRL(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * while FCR.FM=1) */ + uint16_t : 3; + __IM uint16_t T : 5; /*!< [12..8] Transmit FIFO Data CountIndicate the quantity of non-transmit + * data stored in FTDRH and FTDRL(Valid only in asynchronous + * mode(including multi-processor) or clock synchronous mode, + * while FCR.FM=1) */ + uint16_t : 3; + } FDR_b; + }; + + union + { + __IM uint16_t LSR; /*!< (@ 0x00000018) Line Status Register */ + + struct + { + __IM uint16_t ORER : 1; /*!< [0..0] Overrun Error Flag (Valid only in asynchronous mode(including + * multi-processor) or clock synchronous mode, and FIFO selected) */ + uint16_t : 1; + __IM uint16_t FNUM : 5; /*!< [6..2] Framing Error CountIndicates the quantity of data with + * a framing error among the receive data stored in the receive + * FIFO data register (FRDRH and FRDRL). */ + uint16_t : 1; + __IM uint16_t PNUM : 5; /*!< [12..8] Parity Error CountIndicates the quantity of data with + * a parity error among the receive data stored in the receive + * FIFO data register (FRDRH and FRDRL). */ + uint16_t : 3; + } LSR_b; + }; + + union + { + __IOM uint16_t CDR; /*!< (@ 0x0000001A) Compare Match Data Register */ + + struct + { + __IOM uint16_t CMPD : 9; /*!< [8..0] Compare Match DataCompare data pattern for address match + * wake-up function */ + uint16_t : 7; + } CDR_b; + }; + + union + { + __IOM uint8_t SPTR; /*!< (@ 0x0000001C) Serial Port Register */ + + struct + { + __IM uint8_t RXDMON : 1; /*!< [0..0] Serial input data monitor bit(The state of the RXD terminal + * is shown.) */ + __IOM uint8_t SPB2DT : 1; /*!< [1..1] Serial port break data select bit(The output level of + * TxD terminal is selected when SCR.TE = 0.) */ + __IOM uint8_t SPB2IO : 1; /*!< [2..2] Serial port break I/O bit(It's selected whether the value + * of SPB2DT is output to TxD terminal.) */ + uint8_t : 1; + __IOM uint8_t RINV : 1; /*!< [4..4] RXD invert bit */ + __IOM uint8_t TINV : 1; /*!< [5..5] TXD invert bit */ + __IOM uint8_t ASEN : 1; /*!< [6..6] Adjust receive sampling timing enable */ + __IOM uint8_t ATEN : 1; /*!< [7..7] Adjust transmit timing enable */ + } SPTR_b; + }; + + union + { + __IOM uint8_t ACTR; /*!< (@ 0x0000001D) Adjustment Communication Timing Register */ + + struct + { + __IOM uint8_t AST : 3; /*!< [2..0] Adjustment value for receive Sampling Timing */ + __IOM uint8_t AJD : 1; /*!< [3..3] Adjustment Direction for receive sampling timing */ + __IOM uint8_t ATT : 3; /*!< [6..4] Adjustment value for Transmit timing */ + __IOM uint8_t AET : 1; /*!< [7..7] Adjustment edge for transmit timing */ + } ACTR_b; + }; + __IM uint16_t RESERVED; + + union + { + union + { + __IOM uint8_t ESMER; /*!< (@ 0x00000020) Extended Serial Module Enable Register */ + + struct + { + __IOM uint8_t ESME : 1; /*!< [0..0] Extended Serial Mode Enable */ + uint8_t : 7; + } ESMER_b; + }; + + union + { + __IOM uint8_t MMR; /*!< (@ 0x00000020) Manchester Mode Register */ + + struct + { + __IOM uint8_t RMPOL : 1; /*!< [0..0] Polarity of Received Manchester Code */ + __IOM uint8_t TMPOL : 1; /*!< [1..1] Polarity of Transmit Manchester Code */ + __IOM uint8_t ERTEN : 1; /*!< [2..2] Manchester Edge Retiming Enable */ + uint8_t : 1; + __IOM uint8_t SYNVAL : 1; /*!< [4..4] SYNC Value Setting */ + __IOM uint8_t SYNSEL : 1; /*!< [5..5] SYNC Select */ + __IOM uint8_t SBSEL : 1; /*!< [6..6] Start Bit Select */ + __IOM uint8_t MANEN : 1; /*!< [7..7] Manchester Mode Enable */ + } MMR_b; + }; + }; + + union + { + __IOM uint8_t CR0; /*!< (@ 0x00000021) Control Register 0 */ + + struct + { + uint8_t : 1; + __IM uint8_t SFSF : 1; /*!< [1..1] Start Frame Status Flag */ + __IM uint8_t RXDSF : 1; /*!< [2..2] RXDXn Input Status Flag */ + __IOM uint8_t BRME : 1; /*!< [3..3] Bit Rate Measurement Enable */ + uint8_t : 4; + } CR0_b; + }; + + union + { + union + { + __IOM uint8_t CR1; /*!< (@ 0x00000022) Control Register 1 */ + + struct + { + __IOM uint8_t BFE : 1; /*!< [0..0] Break Field Enable */ + __IOM uint8_t CF0RE : 1; /*!< [1..1] Control Field 0 Reception Enable */ + __IOM uint8_t CF1DS : 2; /*!< [3..2] Control Field 1 Data Register Select */ + __IOM uint8_t PIBE : 1; /*!< [4..4] Priority Interrupt Bit Enable */ + __IOM uint8_t PIBS : 3; /*!< [7..5] Priority Interrupt Bit Select */ + } CR1_b; + }; + + union + { + __IOM uint8_t TMPR; /*!< (@ 0x00000022) Transmit Manchester Preface Setting Register */ + + struct + { + __IOM uint8_t TPLEN : 4; /*!< [3..0] Transmit Preface Length */ + __IOM uint8_t TPPAT : 2; /*!< [5..4] Transmit Preface Pattern */ + uint8_t : 2; + } TMPR_b; + }; + }; + + union + { + union + { + __IOM uint8_t CR2; /*!< (@ 0x00000023) Control Register 2 */ + + struct + { + __IOM uint8_t DFCS : 3; /*!< [2..0] RXDXn Signal Digital Filter Clock Select */ + uint8_t : 1; + __IOM uint8_t BCCS : 2; /*!< [5..4] Bus Collision Detection Clock Select */ + __IOM uint8_t RTS : 2; /*!< [7..6] RXDXn Reception Sampling Timing Select */ + } CR2_b; + }; + + union + { + __IOM uint8_t RMPR; /*!< (@ 0x00000023) Receive Manchester Preface Setting Register */ + + struct + { + __IOM uint8_t RPLEN : 4; /*!< [3..0] Receive Preface Length */ + __IOM uint8_t RPPAT : 2; /*!< [5..4] Receive Preface Pattern */ + uint8_t : 2; + } RMPR_b; + }; + }; + + union + { + union + { + __IOM uint8_t CR3; /*!< (@ 0x00000024) Control Register 3 */ + + struct + { + __IOM uint8_t SDST : 1; /*!< [0..0] Start Frame Detection Start */ + uint8_t : 7; + } CR3_b; + }; + + union + { + __IOM uint8_t MESR; /*!< (@ 0x00000024) Manchester Extended Error Status Register */ + + struct + { + __IOM uint8_t PFER : 1; /*!< [0..0] Preface Error Flag */ + __IOM uint8_t SYER : 1; /*!< [1..1] SYNC Error Flag */ + __IOM uint8_t SBER : 1; /*!< [2..2] Start Bit Error Flag */ + uint8_t : 5; + } MESR_b; + }; + }; + + union + { + union + { + __IOM uint8_t PCR; /*!< (@ 0x00000025) Port Control Register */ + + struct + { + __IOM uint8_t TXDXPS : 1; /*!< [0..0] TXDXn Signal Polarity Select */ + __IOM uint8_t RXDXPS : 1; /*!< [1..1] RXDXn Signal Polarity Select */ + uint8_t : 2; + __IOM uint8_t SHARPS : 1; /*!< [4..4] TXDXn/RXDXn Pin Multiplexing Select */ + uint8_t : 3; + } PCR_b; + }; + + union + { + __IOM uint8_t MECR; /*!< (@ 0x00000025) Manchester Extended Error Control Register */ + + struct + { + __IOM uint8_t PFEREN : 1; /*!< [0..0] Preface Error Flag */ + __IOM uint8_t SYEREN : 1; /*!< [1..1] Receive SYNC Error Enable */ + __IOM uint8_t SBEREN : 1; /*!< [2..2] Start Bit Error Enable */ + uint8_t : 5; + } MECR_b; + }; + }; + + union + { + __IOM uint8_t ICR; /*!< (@ 0x00000026) Interrupt Control Register */ + + struct + { + __IOM uint8_t BFDIE : 1; /*!< [0..0] Break Field Low Width Detected Interrupt Enable */ + __IOM uint8_t CF0MIE : 1; /*!< [1..1] Control Field 0 Match Detected Interrupt Enable */ + __IOM uint8_t CF1MIE : 1; /*!< [2..2] Control Field 1 Match Detected Interrupt Enable */ + __IOM uint8_t PIBDIE : 1; /*!< [3..3] Priority Interrupt Bit Detected Interrupt Enable */ + __IOM uint8_t BCDIE : 1; /*!< [4..4] Bus Collision Detected Interrupt Enable */ + __IOM uint8_t AEDIE : 1; /*!< [5..5] Valid Edge Detected Interrupt Enable */ + uint8_t : 2; + } ICR_b; + }; + + union + { + __IM uint8_t STR; /*!< (@ 0x00000027) Status Register */ + + struct + { + __IM uint8_t BFDF : 1; /*!< [0..0] Break Field Low Width Detection Flag */ + __IM uint8_t CF0MF : 1; /*!< [1..1] Control Field 0 Match Flag */ + __IM uint8_t CF1MF : 1; /*!< [2..2] Control Field 1 Match Flag */ + __IM uint8_t PIBDF : 1; /*!< [3..3] Priority Interrupt Bit Detection Flag */ + __IM uint8_t BCDF : 1; /*!< [4..4] Bus Collision Detected Flag */ + __IM uint8_t AEDF : 1; /*!< [5..5] Valid Edge Detection Flag */ + uint8_t : 2; + } STR_b; + }; + + union + { + __IOM uint8_t STCR; /*!< (@ 0x00000028) Status Clear Register */ + + struct + { + __IOM uint8_t BFDCL : 1; /*!< [0..0] BFDF Clear */ + __IOM uint8_t CF0MCL : 1; /*!< [1..1] CF0MF Clear */ + __IOM uint8_t CF1MCL : 1; /*!< [2..2] CF1MF Clear */ + __IOM uint8_t PIBDCL : 1; /*!< [3..3] PIBDF Clear */ + __IOM uint8_t BCDCL : 1; /*!< [4..4] BCDF Clear */ + __IOM uint8_t AEDCL : 1; /*!< [5..5] AEDF Clear */ + uint8_t : 2; + } STCR_b; + }; + __IOM uint8_t CF0DR; /*!< (@ 0x00000029) Control Field 0 Data Register */ + + union + { + __IOM uint8_t CF0CR; /*!< (@ 0x0000002A) Control Field 0 Compare Enable Register */ + + struct + { + __IOM uint8_t CF0CE0 : 1; /*!< [0..0] Control Field 0 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE1 : 1; /*!< [1..1] Control Field 1 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE2 : 1; /*!< [2..2] Control Field 2 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE3 : 1; /*!< [3..3] Control Field 3 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE4 : 1; /*!< [4..4] Control Field 4 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE5 : 1; /*!< [5..5] Control Field 5 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE6 : 1; /*!< [6..6] Control Field 6 Bit 0 Compare Enable */ + __IOM uint8_t CF0CE7 : 1; /*!< [7..7] Control Field 7 Bit 0 Compare Enable */ + } CF0CR_b; + }; + __IOM uint8_t CF0RR; /*!< (@ 0x0000002B) Control Field 0 Receive Data Register */ + __IOM uint8_t PCF1DR; /*!< (@ 0x0000002C) Primary Control Field 1 Data Register */ + __IOM uint8_t SCF1DR; /*!< (@ 0x0000002D) Secondary Control Field 1 Data Register */ + + union + { + __IOM uint8_t CF1CR; /*!< (@ 0x0000002E) Control Field 1 Compare Enable Register */ + + struct + { + __IOM uint8_t CF1CE0 : 1; /*!< [0..0] Control Field 1 Bit 0 Compare Enable */ + __IOM uint8_t CF1CE1 : 1; /*!< [1..1] Control Field 1 Bit 1 Compare Enable */ + __IOM uint8_t CF1CE2 : 1; /*!< [2..2] Control Field 1 Bit 2 Compare Enable */ + __IOM uint8_t CF1CE3 : 1; /*!< [3..3] Control Field 1 Bit 3 Compare Enable */ + __IOM uint8_t CF1CE4 : 1; /*!< [4..4] Control Field 1 Bit 4 Compare Enable */ + __IOM uint8_t CF1CE5 : 1; /*!< [5..5] Control Field 1 Bit 5 Compare Enable */ + __IOM uint8_t CF1CE6 : 1; /*!< [6..6] Control Field 1 Bit 6 Compare Enable */ + __IOM uint8_t CF1CE7 : 1; /*!< [7..7] Control Field 1 Bit 7 Compare Enable */ + } CF1CR_b; + }; + __IOM uint8_t CF1RR; /*!< (@ 0x0000002F) Control Field 1 Receive Data Register */ + + union + { + __IOM uint8_t TCR; /*!< (@ 0x00000030) Timer Control Register */ + + struct + { + __IOM uint8_t TCST : 1; /*!< [0..0] Timer Count Start */ + uint8_t : 7; + } TCR_b; + }; + + union + { + __IOM uint8_t TMR; /*!< (@ 0x00000031) Timer Mode Register */ + + struct + { + __IOM uint8_t TOMS : 2; /*!< [1..0] Timer Operating Mode Select */ + uint8_t : 1; + __IOM uint8_t TWRC : 1; /*!< [3..3] Counter Write Control */ + __IOM uint8_t TCSS : 3; /*!< [6..4] Timer Count Clock Source Select */ + uint8_t : 1; + } TMR_b; + }; + __IOM uint8_t TPRE; /*!< (@ 0x00000032) Timer Prescaler Register */ + __IOM uint8_t TCNT; /*!< (@ 0x00000033) Timer Count Register */ + __IM uint16_t RESERVED1[4]; + + union + { + __IOM uint8_t SCIMSKEN; /*!< (@ 0x0000003C) SCI5 TXD Output Mask Enable Register */ + + struct + { + __IOM uint8_t MSKEN : 1; /*!< [0..0] SCI5 TXD Output Mask Enable */ + uint8_t : 7; + } SCIMSKEN_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_SCI0_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ R_SDADC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief R_SDADC0 (R_SDADC0) + */ + +typedef struct /*!< (@ 0x4009C000) R_SDADC0 Structure */ +{ + union + { + __IOM uint16_t STC1; /*!< (@ 0x00000000) Startup Control Register 1 */ + + struct + { + __IOM uint16_t CLKDIV : 4; /*!< [3..0] SDADC24 Reference Clock Division */ + uint16_t : 3; + __IOM uint16_t SDADLPM : 1; /*!< [7..7] A/D conversion operation model select */ + __IOM uint16_t VSBIAS : 4; /*!< [11..8] Reference voltage select */ + uint16_t : 3; + __IOM uint16_t VREFSEL : 1; /*!< [15..15] VREF mode select */ + } STC1_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint8_t STC2; /*!< (@ 0x00000004) Startup Control Register 2 */ + + struct + { + __IOM uint8_t BGRPON : 1; /*!< [0..0] BGR part power control */ + __IOM uint8_t ADCPON : 1; /*!< [1..1] ADREG forced power-down */ + __IOM uint8_t ADFPWDS : 1; /*!< [2..2] ADC reference supply part */ + uint8_t : 5; + } STC2_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + + union + { + __IOM uint32_t PGAC[5]; /*!< (@ 0x00000008) Input Multiplexer [0..4] Setting Register */ + + struct + { + __IOM uint32_t PGAGC : 5; /*!< [4..0] Gain selection of a programmable gain instrumentation + * amplifier ( Gset1, Gset2, Gtotal ) */ + __IOM uint32_t PGAOSR : 3; /*!< [7..5] Oversampling ratio select */ + __IOM uint32_t PGAOFS : 5; /*!< [12..8] Offset voltage select */ + uint32_t : 1; + __IOM uint32_t PGAPOL : 1; /*!< [14..14] Polarity select */ + __IOM uint32_t PGASEL : 1; /*!< [15..15] Analog Channel Input Mode Select */ + __IOM uint32_t PGACTM : 5; /*!< [20..16] Coefficient (m) selection of the A/D conversion count + * (N) in AUTOSCAN */ + __IOM uint32_t PGACTN : 3; /*!< [23..21] Coefficient (n) selection of the A/D conversion count + * (N) in AUTOSCAN */ + __IOM uint32_t PGAAVN : 2; /*!< [25..24] Selection of the number of data to be averaged */ + __IOM uint32_t PGAAVE : 2; /*!< [27..26] Selection of averaging processing */ + __IOM uint32_t PGAREV : 1; /*!< [28..28] Single-End Input A/D Converted Data Inversion Select */ + uint32_t : 1; + __IOM uint32_t PGACVE : 1; /*!< [30..30] Calibration enable */ + __IOM uint32_t PGAASN : 1; /*!< [31..31] Selection of the mode for specifying the number of + * A/D conversions in ADSCAN */ + } PGAC_b[5]; + }; + + union + { + __IOM uint32_t ADC1; /*!< (@ 0x0000001C) Sigma-Delta A/D Converter Control Register 1 */ + + struct + { + __IOM uint32_t SDADSCM : 1; /*!< [0..0] Selection of autoscan mode */ + uint32_t : 3; + __IOM uint32_t SDADTMD : 1; /*!< [4..4] Selection of A/D conversion trigger signal */ + uint32_t : 3; + __IOM uint32_t SDADBMP : 5; /*!< [12..8] A/D conversion control of the signal from input multiplexer */ + uint32_t : 3; + __IOM uint32_t PGADISA : 1; /*!< [16..16] Control of disconnection detection */ + __IOM uint32_t PGADISC : 1; /*!< [17..17] Disconnection Detection Assist Setting */ + uint32_t : 2; + __IOM uint32_t PGASLFT : 1; /*!< [20..20] PGA offset self-diagnosis enable */ + uint32_t : 11; + } ADC1_b; + }; + + union + { + __IOM uint8_t ADC2; /*!< (@ 0x00000020) Sigma-Delta A/D Converter Control Register 2 */ + + struct + { + __IOM uint8_t SDADST : 1; /*!< [0..0] Control of A/D conversion */ + uint8_t : 7; + } ADC2_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; + + union + { + __IOM uint32_t ADCR; /*!< (@ 0x00000024) Sigma-delta A/D Converter Conversion Result Register */ + + struct + { + __IM uint32_t SDADCRD : 24; /*!< [23..0] The 24-bit A/D conversion result */ + __IM uint32_t SDADCRS : 1; /*!< [24..24] Status of an A/D conversion result */ + __IM uint32_t SDADCRC : 3; /*!< [27..25] Channel number for an A/D conversion result */ + uint32_t : 4; + } ADCR_b; + }; + + union + { + __IM uint32_t ADAR; /*!< (@ 0x00000028) Sigma-delta A/D Converter Average Value Register */ + + struct + { + __IM uint32_t SDADMVD : 24; /*!< [23..0] The 24-bit A/D average value */ + __IM uint32_t SDADMVS : 1; /*!< [24..24] Status of an A/D conversion result */ + __IM uint32_t SDADMVC : 3; /*!< [27..25] Channel number for an A/D conversion result */ + uint32_t : 4; + } ADAR_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint8_t CLBC; /*!< (@ 0x00000030) Calibration Control Register */ + + struct + { + __IOM uint8_t CLBMD : 2; /*!< [1..0] These bits are read as 0. The write value should be 0. */ + uint8_t : 6; + } CLBC_b; + }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; + + union + { + __IOM uint8_t CLBSTR; /*!< (@ 0x00000034) Calibration Start Control Register */ + + struct + { + __IOM uint8_t CLBST : 1; /*!< [0..0] Calibration start control */ + uint8_t : 7; + } CLBSTR_b; + }; + __IM uint8_t RESERVED8; + __IM uint16_t RESERVED9; + __IM uint32_t RESERVED10; + + union + { + __IM uint8_t CLBSSR; /*!< (@ 0x0000003C) Calibration Status Register */ + + struct + { + __IM uint8_t CLBSS : 1; /*!< [0..0] Calibration status */ + uint8_t : 7; + } CLBSSR_b; + }; + __IM uint8_t RESERVED11; + __IM uint16_t RESERVED12; +} R_SDADC0_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Peripheral Interface (R_SPI0) + */ + +typedef struct /*!< (@ 0x40072000) R_SPI0 Structure */ +{ + union + { + __IOM uint8_t SPCR; /*!< (@ 0x00000000) SPI Control Register */ + + struct + { + __IOM uint8_t SPMS : 1; /*!< [0..0] SPI Mode Select */ + __IOM uint8_t TXMD : 1; /*!< [1..1] Communications Operating Mode Select */ + __IOM uint8_t MODFEN : 1; /*!< [2..2] Mode Fault Error Detection Enable */ + __IOM uint8_t MSTR : 1; /*!< [3..3] SPI Master/Slave Mode Select */ + __IOM uint8_t SPEIE : 1; /*!< [4..4] SPI Error Interrupt Enable */ + __IOM uint8_t SPTIE : 1; /*!< [5..5] Transmit Buffer Empty Interrupt Enable */ + __IOM uint8_t SPE : 1; /*!< [6..6] SPI Function Enable */ + __IOM uint8_t SPRIE : 1; /*!< [7..7] SPI Receive Buffer Full Interrupt Enable */ + } SPCR_b; + }; + + union + { + __IOM uint8_t SSLP; /*!< (@ 0x00000001) SPI Slave Select Polarity Register */ + + struct + { + __IOM uint8_t SSL0P : 1; /*!< [0..0] SSL0 Signal Polarity Setting */ + __IOM uint8_t SSL1P : 1; /*!< [1..1] SSL1 Signal Polarity Setting */ + __IOM uint8_t SSL2P : 1; /*!< [2..2] SSL2 Signal Polarity Setting */ + __IOM uint8_t SSL3P : 1; /*!< [3..3] SSL3 Signal Polarity Setting */ + __IOM uint8_t SSL4P : 1; /*!< [4..4] SSL4 Signal Polarity Setting */ + __IOM uint8_t SSL5P : 1; /*!< [5..5] SSL5 Signal Polarity Setting */ + __IOM uint8_t SSL6P : 1; /*!< [6..6] SSL6 Signal Polarity Setting */ + __IOM uint8_t SSL7P : 1; /*!< [7..7] SSL7 Signal Polarity Setting */ + } SSLP_b; + }; + + union + { + __IOM uint8_t SPPCR; /*!< (@ 0x00000002) SPI Pin Control Register */ + + struct + { + __IOM uint8_t SPLP : 1; /*!< [0..0] SPI Loopback */ + __IOM uint8_t SPLP2 : 1; /*!< [1..1] SPI Loopback 2 */ + uint8_t : 2; + __IOM uint8_t MOIFV : 1; /*!< [4..4] MOSI Idle Fixed Value */ + __IOM uint8_t MOIFE : 1; /*!< [5..5] MOSI Idle Value Fixing Enable */ + uint8_t : 2; + } SPPCR_b; + }; + + union + { + __IOM uint8_t SPSR; /*!< (@ 0x00000003) SPI Status Register */ + + struct + { + __IOM uint8_t OVRF : 1; /*!< [0..0] Overrun Error Flag */ + __IM uint8_t IDLNF : 1; /*!< [1..1] SPI Idle Flag */ + __IOM uint8_t MODF : 1; /*!< [2..2] Mode Fault Error Flag */ + __IOM uint8_t PERF : 1; /*!< [3..3] Parity Error Flag */ + __IOM uint8_t UDRF : 1; /*!< [4..4] Underrun Error Flag(When MODF is 0, This bit is invalid.) */ + __IOM uint8_t SPTEF : 1; /*!< [5..5] SPI Transmit Buffer Empty Flag */ + __IOM uint8_t CENDF : 1; /*!< [6..6] Communication End Flag */ + __IOM uint8_t SPRF : 1; /*!< [7..7] SPI Receive Buffer Full Flag */ + } SPSR_b; + }; + + union + { + __IOM uint32_t SPDR; /*!< (@ 0x00000004) SPI Data Register */ + __IOM uint16_t SPDR_HA; /*!< (@ 0x00000004) SPI Data Register ( halfword access ) */ + __IOM uint8_t SPDR_BY; /*!< (@ 0x00000004) SPI Data Register ( byte access ) */ + }; + + union + { + __IOM uint8_t SPSCR; /*!< (@ 0x00000008) SPI Sequence Control Register */ + + struct + { + __IOM uint8_t SPSLN : 3; /*!< [2..0] RSPI Sequence Length SpecificationThe order in which + * the SPCMD0 to SPCMD07 registers are to be referenced is + * changed in accordance with the sequence length that is + * set in these bits. The relationship among the setting of + * these bits, sequence length, and SPCMD0 to SPCMD7 registers + * referenced by the RSPI is shown above. However, the RSPI + * in slave mode always references SPCMD0. */ + uint8_t : 5; + } SPSCR_b; + }; + + union + { + __IM uint8_t SPSSR; /*!< (@ 0x00000009) SPI Sequence Status Register */ + + struct + { + __IM uint8_t SPCP : 3; /*!< [2..0] RSPI Command Pointer */ + uint8_t : 1; + __IM uint8_t SPECM : 3; /*!< [6..4] RSPI Error Command */ + uint8_t : 1; + } SPSSR_b; + }; + + union + { + __IOM uint8_t SPBR; /*!< (@ 0x0000000A) SPI Bit Rate Register */ + + struct + { + __IOM uint8_t SPR : 8; /*!< [7..0] SPBR sets the bit rate in master mode. */ + } SPBR_b; + }; + + union + { + __IOM uint8_t SPDCR; /*!< (@ 0x0000000B) SPI Data Control Register */ + + struct + { + __IOM uint8_t SPFC : 2; /*!< [1..0] Number of Frames Specification */ + __IOM uint8_t SLSEL : 2; /*!< [3..2] SSL Pin Output Select */ + __IOM uint8_t SPRDTD : 1; /*!< [4..4] SPI Receive/Transmit Data Selection */ + __IOM uint8_t SPLW : 1; /*!< [5..5] SPI Word Access/Halfword Access Specification */ + __IOM uint8_t SPBYT : 1; /*!< [6..6] SPI Byte Access Specification */ + uint8_t : 1; + } SPDCR_b; + }; + + union + { + __IOM uint8_t SPCKD; /*!< (@ 0x0000000C) SPI Clock Delay Register */ + + struct + { + __IOM uint8_t SCKDL : 3; /*!< [2..0] RSPCK Delay Setting */ + uint8_t : 5; + } SPCKD_b; + }; + + union + { + __IOM uint8_t SSLND; /*!< (@ 0x0000000D) SPI Slave Select Negation Delay Register */ + + struct + { + __IOM uint8_t SLNDL : 3; /*!< [2..0] SSL Negation Delay Setting */ + uint8_t : 5; + } SSLND_b; + }; + + union + { + __IOM uint8_t SPND; /*!< (@ 0x0000000E) SPI Next-Access Delay Register */ + + struct + { + __IOM uint8_t SPNDL : 3; /*!< [2..0] SPI Next-Access Delay Setting */ + uint8_t : 5; + } SPND_b; + }; + + union + { + __IOM uint8_t SPCR2; /*!< (@ 0x0000000F) SPI Control Register 2 */ + + struct + { + __IOM uint8_t SPPE : 1; /*!< [0..0] Parity Enable */ + __IOM uint8_t SPOE : 1; /*!< [1..1] Parity Mode */ + __IOM uint8_t SPIIE : 1; /*!< [2..2] SPI Idle Interrupt Enable */ + __IOM uint8_t PTE : 1; /*!< [3..3] Parity Self-Testing */ + __IOM uint8_t SCKASE : 1; /*!< [4..4] RSPCK Auto-Stop Function Enable */ + __IOM uint8_t SPTDDL : 3; /*!< [7..5] RSPI Transmit Data Delay */ + } SPCR2_b; + }; + + union + { + __IOM uint16_t SPCMD[8]; /*!< (@ 0x00000010) SPI Command Register [0..7] */ + + struct + { + __IOM uint16_t CPHA : 1; /*!< [0..0] RSPCK Phase Setting */ + __IOM uint16_t CPOL : 1; /*!< [1..1] RSPCK Polarity Setting */ + __IOM uint16_t BRDV : 2; /*!< [3..2] Bit Rate Division Setting */ + __IOM uint16_t SSLA : 3; /*!< [6..4] SSL Signal Assertion Setting */ + __IOM uint16_t SSLKP : 1; /*!< [7..7] SSL Signal Level Keeping */ + __IOM uint16_t SPB : 4; /*!< [11..8] SPI Data Length Setting */ + __IOM uint16_t LSBF : 1; /*!< [12..12] SPI LSB First */ + __IOM uint16_t SPNDEN : 1; /*!< [13..13] SPI Next-Access Delay Enable */ + __IOM uint16_t SLNDEN : 1; /*!< [14..14] SSL Negation Delay Setting Enable */ + __IOM uint16_t SCKDEN : 1; /*!< [15..15] RSPCK Delay Setting Enable */ + } SPCMD_b[8]; + }; + + union + { + __IOM uint8_t SPDCR2; /*!< (@ 0x00000020) SPI Data Control Register 2 */ + + struct + { + __IOM uint8_t BYSW : 1; /*!< [0..0] Byte Swap Operating Mode Select */ + __IOM uint8_t SINV : 1; /*!< [1..1] Serial data invert bit */ + uint8_t : 6; + } SPDCR2_b; + }; + + union + { + __IOM uint8_t SPCR3; /*!< (@ 0x00000021) RSPI Control Register 3 */ + + struct + { + __IOM uint8_t ETXMD : 1; /*!< [0..0] Extended Communication Mode Select */ + __IOM uint8_t BFDS : 1; /*!< [1..1] Between Burst Transfer Frames Delay Select */ + uint8_t : 2; + __IOM uint8_t CENDIE : 1; /*!< [4..4] RSPI Communication End Interrupt Enable */ + uint8_t : 3; + } SPCR3_b; + }; + __IM uint16_t RESERVED; + __IM uint32_t RESERVED1[6]; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t SPPR; /*!< (@ 0x0000003E) RSPI Parameter Read Register */ + + struct + { + uint16_t : 4; + __IOM uint16_t BUFWID : 1; /*!< [4..4] Buffer Width check */ + uint16_t : 3; + __IOM uint16_t BUFNUM : 3; /*!< [10..8] Buffer Number check */ + uint16_t : 1; + __IOM uint16_t CMDNUM : 4; /*!< [15..12] Command Number check */ + } SPPR_b; + }; +} R_SPI0_Type; /*!< Size = 64 (0x40) */ + +/* =========================================================================================================================== */ +/* ================ R_SRAM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief SRAM (R_SRAM) + */ + +typedef struct /*!< (@ 0x40002000) R_SRAM Structure */ +{ + union + { + __IOM uint8_t PARIOAD; /*!< (@ 0x00000000) SRAM Parity Error Operation After Detection Register */ + + struct + { + __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ + uint8_t : 7; + } PARIOAD_b; + }; + __IM uint8_t RESERVED[3]; + + union + { + __IOM uint8_t SRAMPRCR; /*!< (@ 0x00000004) SRAM Protection Register */ + + struct + { + __IOM uint8_t SRAMPRCR : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } SRAMPRCR_b; + }; + __IM uint8_t RESERVED1[3]; + __IOM uint8_t SRAMWTSC; /*!< (@ 0x00000008) RAM Wait State Control Register */ + __IM uint8_t RESERVED2[3]; + + union + { + __IOM uint8_t SRAMPRCR2; /*!< (@ 0x0000000C) SRAM Protection Register 2 */ + + struct + { + __IOM uint8_t SRAMPRCR2 : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } SRAMPRCR2_b; + }; + __IM uint8_t RESERVED3[179]; + + union + { + __IOM uint8_t ECCMODE; /*!< (@ 0x000000C0) ECC Operating Mode Control Register */ + + struct + { + __IOM uint8_t ECCMOD : 2; /*!< [1..0] ECC Operating Mode Select */ + uint8_t : 6; + } ECCMODE_b; + }; + + union + { + __IOM uint8_t ECC2STS; /*!< (@ 0x000000C1) ECC 2-Bit Error Status Register */ + + struct + { + __IOM uint8_t ECC2ERR : 1; /*!< [0..0] ECC 2-Bit Error Status */ + uint8_t : 7; + } ECC2STS_b; + }; + + union + { + __IOM uint8_t ECC1STSEN; /*!< (@ 0x000000C2) ECC 1-Bit Error Information Update Enable Register */ + + struct + { + __IOM uint8_t E1STSEN : 1; /*!< [0..0] ECC 1-Bit Error Information Update Enable */ + uint8_t : 7; + } ECC1STSEN_b; + }; + + union + { + __IOM uint8_t ECC1STS; /*!< (@ 0x000000C3) ECC 1-Bit Error Status Register */ + + struct + { + __IOM uint8_t ECC1ERR : 1; /*!< [0..0] ECC 1-Bit Error Status */ + uint8_t : 7; + } ECC1STS_b; + }; + + union + { + __IOM uint8_t ECCPRCR; /*!< (@ 0x000000C4) ECC Protection Register */ + + struct + { + __IOM uint8_t ECCPRCR : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW : 7; /*!< [7..1] Write Key Code */ + } ECCPRCR_b; + }; + __IM uint8_t RESERVED4[11]; + + union + { + __IOM uint8_t ECCPRCR2; /*!< (@ 0x000000D0) ECC Protection Register 2 */ + + struct + { + __IOM uint8_t ECCPRCR2 : 1; /*!< [0..0] Register Write Control */ + __OM uint8_t KW2 : 7; /*!< [7..1] Write Key Code */ + } ECCPRCR2_b; + }; + __IM uint8_t RESERVED5[3]; + + union + { + __IOM uint8_t ECCETST; /*!< (@ 0x000000D4) ECC Test Control Register */ + + struct + { + __IOM uint8_t TSTBYP : 1; /*!< [0..0] ECC Bypass Select */ + uint8_t : 7; + } ECCETST_b; + }; + __IM uint8_t RESERVED6[3]; + + union + { + __IOM uint8_t ECCOAD; /*!< (@ 0x000000D8) SRAM ECC Error Operation After Detection Register */ + + struct + { + __IOM uint8_t OAD : 1; /*!< [0..0] Operation after Detection */ + uint8_t : 7; + } ECCOAD_b; + }; +} R_SRAM_Type; /*!< Size = 217 (0xd9) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSTEM ================ */ +/* =========================================================================================================================== */ + +/** + * @brief System Pins (R_SYSTEM) + */ + +typedef struct /*!< (@ 0x4001E000) R_SYSTEM Structure */ +{ + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint16_t SBYCR; /*!< (@ 0x0000000C) Standby Control Register */ + + struct + { + uint16_t : 14; + __IOM uint16_t OPE : 1; /*!< [14..14] Output Port Enable */ + __IOM uint16_t SSBY : 1; /*!< [15..15] Software Standby */ + } SBYCR_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[3]; + + union + { + __IOM uint32_t MSTPCRA; /*!< (@ 0x0000001C) Module Stop Control Register A */ + + struct + { + __IOM uint32_t MSTPA0 : 1; /*!< [0..0] Module Stop bit 0. See device hardware manual for usage. */ + __IOM uint32_t MSTPA1 : 1; /*!< [1..1] Module Stop bit 1. See device hardware manual for usage. */ + __IOM uint32_t MSTPA2 : 1; /*!< [2..2] Module Stop bit 2. See device hardware manual for usage. */ + __IOM uint32_t MSTPA3 : 1; /*!< [3..3] Module Stop bit 3. See device hardware manual for usage. */ + __IOM uint32_t MSTPA4 : 1; /*!< [4..4] Module Stop bit 4. See device hardware manual for usage. */ + __IOM uint32_t MSTPA5 : 1; /*!< [5..5] Module Stop bit 5. See device hardware manual for usage. */ + __IOM uint32_t MSTPA6 : 1; /*!< [6..6] Module Stop bit 6. See device hardware manual for usage. */ + __IOM uint32_t MSTPA7 : 1; /*!< [7..7] Module Stop bit 7. See device hardware manual for usage. */ + __IOM uint32_t MSTPA8 : 1; /*!< [8..8] Module Stop bit 8. See device hardware manual for usage. */ + __IOM uint32_t MSTPA9 : 1; /*!< [9..9] Module Stop bit 9. See device hardware manual for usage. */ + __IOM uint32_t MSTPA10 : 1; /*!< [10..10] Module Stop bit 10. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA11 : 1; /*!< [11..11] Module Stop bit 11. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA12 : 1; /*!< [12..12] Module Stop bit 12. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA13 : 1; /*!< [13..13] Module Stop bit 13. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA14 : 1; /*!< [14..14] Module Stop bit 14. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA15 : 1; /*!< [15..15] Module Stop bit 15. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA16 : 1; /*!< [16..16] Module Stop bit 16. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA17 : 1; /*!< [17..17] Module Stop bit 17. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA18 : 1; /*!< [18..18] Module Stop bit 18. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA19 : 1; /*!< [19..19] Module Stop bit 19. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA20 : 1; /*!< [20..20] Module Stop bit 20. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA21 : 1; /*!< [21..21] Module Stop bit 21. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA22 : 1; /*!< [22..22] Module Stop bit 22. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA23 : 1; /*!< [23..23] Module Stop bit 23. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA24 : 1; /*!< [24..24] Module Stop bit 24. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA25 : 1; /*!< [25..25] Module Stop bit 25. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA26 : 1; /*!< [26..26] Module Stop bit 26. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA27 : 1; /*!< [27..27] Module Stop bit 27. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA28 : 1; /*!< [28..28] Module Stop bit 28. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA29 : 1; /*!< [29..29] Module Stop bit 29. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA30 : 1; /*!< [30..30] Module Stop bit 30. See device hardware manual for + * usage. */ + __IOM uint32_t MSTPA31 : 1; /*!< [31..31] Module Stop bit 31. See device hardware manual for + * usage. */ + } MSTPCRA_b; + }; + + union + { + __IOM uint32_t SCKDIVCR; /*!< (@ 0x00000020) System Clock Division Control Register */ + + struct + { + __IOM uint32_t PCKD : 3; /*!< [2..0] Peripheral Module Clock D (PCLKD) Select */ + uint32_t : 1; + __IOM uint32_t PCKC : 3; /*!< [6..4] Peripheral Module Clock C (PCLKC) Select */ + uint32_t : 1; + __IOM uint32_t PCKB : 3; /*!< [10..8] Peripheral Module Clock B (PCLKB) Select */ + uint32_t : 1; + __IOM uint32_t PCKA : 3; /*!< [14..12] Peripheral Module Clock A (PCLKA) Select */ + uint32_t : 1; + __IOM uint32_t BCK : 3; /*!< [18..16] External Bus Clock (BCLK) Select */ + uint32_t : 5; + __IOM uint32_t ICK : 3; /*!< [26..24] System Clock (ICLK) Select */ + uint32_t : 1; + __IOM uint32_t FCK : 3; /*!< [30..28] Flash IF Clock (FCLK) Select */ + uint32_t : 1; + } SCKDIVCR_b; + }; + + union + { + __IOM uint8_t SCKDIVCR2; /*!< (@ 0x00000024) System Clock Division Control Register 2 */ + + struct + { + uint8_t : 4; + __IOM uint8_t UCK : 3; /*!< [6..4] USB Clock (UCLK) Select */ + uint8_t : 1; + } SCKDIVCR2_b; + }; + __IM uint8_t RESERVED3; + + union + { + __IOM uint8_t SCKSCR; /*!< (@ 0x00000026) System Clock Source Control Register */ + + struct + { + __IOM uint8_t CKSEL : 3; /*!< [2..0] Clock Source Select */ + uint8_t : 5; + } SCKSCR_b; + }; + __IM uint8_t RESERVED4; + + union + { + __IOM uint16_t PLLCCR; /*!< (@ 0x00000028) PLL Clock Control Register */ + + struct + { + __IOM uint16_t PLIDIV : 2; /*!< [1..0] PLL Input Frequency Division Ratio Select */ + uint16_t : 2; + __IOM uint16_t PLSRCSEL : 1; /*!< [4..4] PLL Clock Source Select */ + uint16_t : 3; + __IOM uint16_t PLLMUL : 6; /*!< [13..8] PLL Frequency Multiplication Factor Select [PLL Frequency + * Multiplication Factor] = (PLLUMUL+1) / 2 Range: 0x23 - + * 0x3B for example 010011: x10.0 010100: x10.5 010101: x11.0 + * : 011100: x14.5 011101: x15.0 011110: x15.5 : 111010: x29.5 + * 111011: x30.0 */ + uint16_t : 2; + } PLLCCR_b; + }; + + union + { + __IOM uint8_t PLLCR; /*!< (@ 0x0000002A) PLL Control Register */ + + struct + { + __IOM uint8_t PLLSTP : 1; /*!< [0..0] PLL Stop Control */ + uint8_t : 7; + } PLLCR_b; + }; + + union + { + __IOM uint8_t PLLCCR2; /*!< (@ 0x0000002B) PLL Clock Control Register2 */ + + struct + { + __IOM uint8_t PLLMUL : 5; /*!< [4..0] PLL Frequency Multiplication Factor Select */ + uint8_t : 1; + __IOM uint8_t PLODIV : 2; /*!< [7..6] PLL Output Frequency Division Ratio Select */ + } PLLCCR2_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint8_t BCKCR; /*!< (@ 0x00000030) External Bus Clock Control Register */ + + struct + { + __IOM uint8_t BCLKDIV : 1; /*!< [0..0] BCLK Pin Output Select */ + uint8_t : 7; + } BCKCR_b; + }; + + union + { + __IOM uint8_t MEMWAIT; /*!< (@ 0x00000031) Memory Wait Cycle Control Register */ + + struct + { + __IOM uint8_t MEMWAIT : 1; /*!< [0..0] Memory Wait Cycle SelectNote: Writing 0 to the MEMWAIT + * is prohibited when SCKDIVCR.ICK selects division by 1 and + * SCKSCR.CKSEL[2:0] bits select thesystem clock source that + * is faster than 32 MHz (ICLK > 32 MHz). */ + uint8_t : 7; + } MEMWAIT_b; + }; + + union + { + __IOM uint8_t MOSCCR; /*!< (@ 0x00000032) Main Clock Oscillator Control Register */ + + struct + { + __IOM uint8_t MOSTP : 1; /*!< [0..0] Main Clock Oscillator Stop */ + uint8_t : 7; + } MOSCCR_b; + }; + __IM uint8_t RESERVED6; + __IM uint16_t RESERVED7; + + union + { + __IOM uint8_t HOCOCR; /*!< (@ 0x00000036) High-Speed On-Chip Oscillator Control Register */ + + struct + { + __IOM uint8_t HCSTP : 1; /*!< [0..0] HOCO Stop */ + uint8_t : 7; + } HOCOCR_b; + }; + + union + { + __IOM uint8_t HOCOCR2; /*!< (@ 0x00000037) High-Speed On-Chip Oscillator Control Register + * 2 */ + + struct + { + __IOM uint8_t HCFRQ0 : 2; /*!< [1..0] HOCO Frequency Setting 0 */ + uint8_t : 1; + __IOM uint8_t HCFRQ1 : 3; /*!< [5..3] HOCO Frequency Setting 1 */ + uint8_t : 2; + } HOCOCR2_b; + }; + + union + { + __IOM uint8_t MOCOCR; /*!< (@ 0x00000038) Middle-Speed On-Chip Oscillator Control Register */ + + struct + { + __IOM uint8_t MCSTP : 1; /*!< [0..0] MOCO Stop */ + uint8_t : 7; + } MOCOCR_b; + }; + + union + { + __IOM uint8_t FLLCR1; /*!< (@ 0x00000039) FLL Control Register 1 */ + + struct + { + __IOM uint8_t FLLEN : 1; /*!< [0..0] FLL Enable */ + uint8_t : 7; + } FLLCR1_b; + }; + + union + { + __IOM uint16_t FLLCR2; /*!< (@ 0x0000003A) FLL Control Register 2 */ + + struct + { + __IOM uint16_t FLLCNTL : 11; /*!< [10..0] FLL Multiplication ControlMultiplication ratio of the + * FLL reference clock select */ + uint16_t : 5; + } FLLCR2_b; + }; + + union + { + __IM uint8_t OSCSF; /*!< (@ 0x0000003C) Oscillation Stabilization Flag Register */ + + struct + { + __IM uint8_t HOCOSF : 1; /*!< [0..0] HOCO Clock Oscillation Stabilization FlagNOTE: The HOCOSF + * bit value after a reset is 1 when the OFS1.HOCOEN bit is + * 0. It is 0 when the OFS1.HOCOEN bit is 1. */ + uint8_t : 2; + __IM uint8_t MOSCSF : 1; /*!< [3..3] Main Clock Oscillation Stabilization Flag */ + uint8_t : 1; + __IM uint8_t PLLSF : 1; /*!< [5..5] PLL Clock Oscillation Stabilization Flag */ + __IM uint8_t PLL2SF : 1; /*!< [6..6] PLL2 Clock Oscillation Stabilization Flag */ + uint8_t : 1; + } OSCSF_b; + }; + __IM uint8_t RESERVED8; + + union + { + __IOM uint8_t CKOCR; /*!< (@ 0x0000003E) Clock Out Control Register */ + + struct + { + __IOM uint8_t CKOSEL : 3; /*!< [2..0] Clock out source select */ + uint8_t : 1; + __IOM uint8_t CKODIV : 3; /*!< [6..4] Clock out input frequency Division Select */ + __IOM uint8_t CKOEN : 1; /*!< [7..7] Clock out enable */ + } CKOCR_b; + }; + + union + { + __IOM uint8_t TRCKCR; /*!< (@ 0x0000003F) Trace Clock Control Register */ + + struct + { + __IOM uint8_t TRCK : 4; /*!< [3..0] Trace Clock operating frequency select */ + uint8_t : 3; + __IOM uint8_t TRCKEN : 1; /*!< [7..7] Trace Clock operating Enable */ + } TRCKCR_b; + }; + + union + { + __IOM uint8_t OSTDCR; /*!< (@ 0x00000040) Oscillation Stop Detection Control Register */ + + struct + { + __IOM uint8_t OSTDIE : 1; /*!< [0..0] Oscillation Stop Detection Interrupt Enable */ + uint8_t : 6; + __IOM uint8_t OSTDE : 1; /*!< [7..7] Oscillation Stop Detection Function Enable */ + } OSTDCR_b; + }; + + union + { + __IOM uint8_t OSTDSR; /*!< (@ 0x00000041) Oscillation Stop Detection Status Register */ + + struct + { + __IOM uint8_t OSTDF : 1; /*!< [0..0] Oscillation Stop Detection Flag */ + uint8_t : 7; + } OSTDSR_b; + }; + __IM uint16_t RESERVED9; + __IM uint32_t RESERVED10; + + union + { + __IOM uint16_t PLL2CCR; /*!< (@ 0x00000048) PLL2 Clock Control Register */ + + struct + { + __IOM uint16_t PL2IDIV : 2; /*!< [1..0] PLL2 Input Frequency Division Ratio Select */ + uint16_t : 2; + __IOM uint16_t PL2SRCSEL : 1; /*!< [4..4] PLL2 Clock Source Select */ + uint16_t : 3; + __IOM uint16_t PLL2MUL : 6; /*!< [13..8] PLL2 Frequency Multiplication Factor Select */ + uint16_t : 2; + } PLL2CCR_b; + }; + + union + { + __IOM uint8_t PLL2CR; /*!< (@ 0x0000004A) PLL2 Control Register */ + + struct + { + __IOM uint8_t PLL2STP : 1; /*!< [0..0] PLL2 Stop Control */ + uint8_t : 7; + } PLL2CR_b; + }; + __IM uint8_t RESERVED11; + + union + { + __IOM uint8_t LPOPT; /*!< (@ 0x0000004C) Lower Power Operation Control Register */ + + struct + { + __IOM uint8_t MPUDIS : 1; /*!< [0..0] MPU Clock Disable Control. Stop the MPU operate clock + * (valid only when LPOPTEN = 1) */ + __IOM uint8_t DCLKDIS : 2; /*!< [2..1] Debug Clock Disable Control */ + __IOM uint8_t BPFCLKDIS : 1; /*!< [3..3] BPF Clock Disable Control. Stop the Flash register R/W + * clock (valid only when LPOPT.LPOPTEN = 1) */ + uint8_t : 3; + __IOM uint8_t LPOPTEN : 1; /*!< [7..7] Lower Power Operation Enable */ + } LPOPT_b; + }; + __IM uint8_t RESERVED12; + __IM uint16_t RESERVED13; + + union + { + __IOM uint8_t SLCDSCKCR; /*!< (@ 0x00000050) Segment LCD Source Clock Control Register */ + + struct + { + __IOM uint8_t LCDSCKSEL : 3; /*!< [2..0] LCD Source Clock (LCDSRCCLK) Select */ + uint8_t : 4; + __IOM uint8_t LCDSCKEN : 1; /*!< [7..7] LCD Source Clock Out Enable */ + } SLCDSCKCR_b; + }; + __IM uint8_t RESERVED14; + + union + { + __IOM uint8_t EBCKOCR; /*!< (@ 0x00000052) External Bus Clock Output Control Register */ + + struct + { + __IOM uint8_t EBCKOEN : 1; /*!< [0..0] BCLK Pin Output Control */ + uint8_t : 7; + } EBCKOCR_b; + }; + + union + { + __IOM uint8_t SDCKOCR; /*!< (@ 0x00000053) SDRAM Clock Output Control Register */ + + struct + { + __IOM uint8_t SDCKOEN : 1; /*!< [0..0] SDCLK Pin Output Control */ + uint8_t : 7; + } SDCKOCR_b; + }; + __IM uint32_t RESERVED15[3]; + __IM uint8_t RESERVED16; + + union + { + __IOM uint8_t MOCOUTCR; /*!< (@ 0x00000061) MOCO User Trimming Control Register */ + + struct + { + __IOM uint8_t MOCOUTRM : 8; /*!< [7..0] MOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center + * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : + +126 0111_1111 : +127These bits are added to original MOCO + * trimming bits */ + } MOCOUTCR_b; + }; + + union + { + __IOM uint8_t HOCOUTCR; /*!< (@ 0x00000062) HOCO User Trimming Control Register */ + + struct + { + __IOM uint8_t HOCOUTRM : 8; /*!< [7..0] HOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center + * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : + +126 0111_1111 : +127These bits are added to original HOCO + * trimming bits */ + } HOCOUTCR_b; + }; + __IM uint8_t RESERVED17; + __IM uint32_t RESERVED18[2]; + + union + { + __IOM uint8_t USBCKDIVCR; /*!< (@ 0x0000006C) USB Clock Division Control Register */ + + struct + { + __IOM uint8_t USBCKDIV : 3; /*!< [2..0] USB Clock (USBCLK) Division Select */ + uint8_t : 5; + } USBCKDIVCR_b; + }; + + union + { + union + { + __IOM uint8_t OCTACKDIVCR; /*!< (@ 0x0000006D) Octal-SPI Clock Division Control Register */ + + struct + { + __IOM uint8_t OCTACKDIV : 3; /*!< [2..0] Octal-SPI Clock (OCTACLK) Division Select */ + uint8_t : 5; + } OCTACKDIVCR_b; + }; + + union + { + __IOM uint8_t SCISPICKDIVCR; /*!< (@ 0x0000006D) SCI SPI Clock Division Control Register */ + + struct + { + __IOM uint8_t SCISPICKDIV : 3; /*!< [2..0] SCI SPI Clock (SCISPICLK) Division Select */ + uint8_t : 5; + } SCISPICKDIVCR_b; + }; + }; + + union + { + __IOM uint8_t CANFDCKDIVCR; /*!< (@ 0x0000006E) CANFD Clock Division Control Register */ + + struct + { + __IOM uint8_t CANFDCKDIV : 3; /*!< [2..0] CANFD Clock (CANFDCLK) Division Select */ + uint8_t : 5; + } CANFDCKDIVCR_b; + }; + + union + { + union + { + __IOM uint8_t GPTCKDIVCR; /*!< (@ 0x0000006F) GPT Clock Division Control Register */ + + struct + { + __IOM uint8_t GPTCKDIV : 3; /*!< [2..0] GPT Clock (GPTCLK) Division Select */ + uint8_t : 5; + } GPTCKDIVCR_b; + }; + + union + { + __IOM uint8_t USB60CKDIVCR; /*!< (@ 0x0000006F) USB60 Clock Division Control Register */ + + struct + { + __IOM uint8_t USB60CKDIV : 3; /*!< [2..0] USB clock (USB60CLK) Division Select */ + uint8_t : 5; + } USB60CKDIVCR_b; + }; + }; + + union + { + union + { + __IOM uint8_t CECCKDIVCR; /*!< (@ 0x00000070) CEC Clock Division Control Register */ + + struct + { + __IOM uint8_t CECCKDIV : 3; /*!< [2..0] CEC clock (CECCLK) Division Select */ + uint8_t : 5; + } CECCKDIVCR_b; + }; + + union + { + __IOM uint8_t IICCKDIVCR; /*!< (@ 0x00000070) IIC Clock Division Control Register */ + + struct + { + __IOM uint8_t IICCKDIV : 3; /*!< [2..0] IIC Clock (IICCLK) Division Select */ + uint8_t : 5; + } IICCKDIVCR_b; + }; + }; + + union + { + __IOM uint8_t I3CCKDIVCR; /*!< (@ 0x00000071) I3C clock Division control register */ + + struct + { + __IOM uint8_t I3CCKDIV : 3; /*!< [2..0] I3C clock (I3CCLK) Division Select */ + uint8_t : 5; + } I3CCKDIVCR_b; + }; + __IM uint16_t RESERVED19; + + union + { + __IOM uint8_t USBCKCR; /*!< (@ 0x00000074) USB Clock Control Register */ + + struct + { + __IOM uint8_t USBCKSEL : 3; /*!< [2..0] USB Clock (USBCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t USBCKSREQ : 1; /*!< [6..6] USB Clock (USBCLK) Switching Request */ + __IM uint8_t USBCKSRDY : 1; /*!< [7..7] USB Clock (USBCLK) Switching Ready state flag */ + } USBCKCR_b; + }; + + union + { + union + { + __IOM uint8_t OCTACKCR; /*!< (@ 0x00000075) Octal-SPI Clock Control Register */ + + struct + { + __IOM uint8_t OCTACKSEL : 3; /*!< [2..0] Octal-SPI Clock (OCTACLK) Source Select */ + uint8_t : 3; + __IOM uint8_t OCTACKSREQ : 1; /*!< [6..6] Octal-SPI Clock (OCTACLK) Switching Request */ + __IM uint8_t OCTACKSRDY : 1; /*!< [7..7] Octal-SPI Clock (OCTACLK) Switching Ready state flag */ + } OCTACKCR_b; + }; + + union + { + __IOM uint8_t SCISPICKCR; /*!< (@ 0x00000075) SCI SPI Clock Control Register */ + + struct + { + __IOM uint8_t SCISPICKSEL : 3; /*!< [2..0] SCI SPI Clock (SCISPICLK) Source Select */ + uint8_t : 3; + __IOM uint8_t SCISPICKSREQ : 1; /*!< [6..6] SCI SPI Clock (SCISPICLK) Switching Request */ + __IM uint8_t SCISPICKSRDY : 1; /*!< [7..7] SCI SPI Clock (SCISPICLK) Switching Ready state flag */ + } SCISPICKCR_b; + }; + }; + + union + { + __IOM uint8_t CANFDCKCR; /*!< (@ 0x00000076) CANFD Clock Control Register */ + + struct + { + __IOM uint8_t CANFDCKSEL : 3; /*!< [2..0] CANFD Clock (CANFDCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t CANFDCKSREQ : 1; /*!< [6..6] CANFD Clock (CANFDCLK) Switching Request */ + __IM uint8_t CANFDCKSRDY : 1; /*!< [7..7] CANFD Clock (CANFDCLK) Switching Ready state flag */ + } CANFDCKCR_b; + }; + + union + { + union + { + __IOM uint8_t GPTCKCR; /*!< (@ 0x00000077) GPT Clock Control Register */ + + struct + { + __IOM uint8_t GPTCKSEL : 3; /*!< [2..0] GPT Clock (GPTCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t GPTCKSREQ : 1; /*!< [6..6] GPT Clock (GPTCLK) Switching Request */ + __IM uint8_t GPTCKSRDY : 1; /*!< [7..7] GPT Clock (GPTCLK) Switching Ready state flag */ + } GPTCKCR_b; + }; + + union + { + __IOM uint8_t USB60CKCR; /*!< (@ 0x00000077) USB60 clock control register */ + + struct + { + __IOM uint8_t USB60CKSEL : 4; /*!< [3..0] USB clock (USB60CLK) Source Select */ + uint8_t : 2; + __IOM uint8_t USB60CKSREQ : 1; /*!< [6..6] USB clock (USB60CLK) Switching Request */ + __IOM uint8_t USB60CKSRDY : 1; /*!< [7..7] USB clock (USB60CLK) Switching Ready state flag */ + } USB60CKCR_b; + }; + }; + + union + { + union + { + __IOM uint8_t CECCKCR; /*!< (@ 0x00000078) CEC Clock Control Register */ + + struct + { + __IOM uint8_t CECCKSEL : 3; /*!< [2..0] CEC clock (CECCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t CECCKSREQ : 1; /*!< [6..6] CEC clock (CECCLK) Switching Request */ + __IM uint8_t CECCKSRDY : 1; /*!< [7..7] CEC clock (CECCLK) Switching Ready state flag */ + } CECCKCR_b; + }; + + union + { + __IOM uint8_t IICCKCR; /*!< (@ 0x00000078) IIC Clock Control Register */ + + struct + { + __IOM uint8_t IICCKSEL : 3; /*!< [2..0] IIC Clock (IICCLK) Source Select */ + uint8_t : 3; + __IOM uint8_t IICCKSREQ : 1; /*!< [6..6] IIC Clock (IICCLK) Switching Request */ + __IM uint8_t IICCKSRDY : 1; /*!< [7..7] IIC Clock (IICCLK) Switching Ready state flag */ + } IICCKCR_b; + }; + }; + + union + { + __IOM uint8_t I3CCKCR; /*!< (@ 0x00000079) I3C Clock Control Register */ + + struct + { + __IOM uint8_t I3CCKSEL : 3; /*!< [2..0] I3C clock (I3CCLK) source select */ + uint8_t : 3; + __IOM uint8_t I3CCKSREQ : 1; /*!< [6..6] I3C clock (I3CCLK) switching request */ + __IM uint8_t I3CCKSRDY : 1; /*!< [7..7] I3C clock (I3CCLK) switching ready state flag */ + } I3CCKCR_b; + }; + __IM uint16_t RESERVED20; + __IM uint32_t RESERVED21[3]; + + union + { + __IOM uint32_t SNZREQCR1; /*!< (@ 0x00000088) Snooze Request Control Register 1 */ + + struct + { + __IOM uint32_t SNZREQEN0 : 1; /*!< [0..0] Enable AGT3 underflow snooze request */ + __IOM uint32_t SNZREQEN1 : 1; /*!< [1..1] Enable AGT3 underflow snooze request */ + __IOM uint32_t SNZREQEN2 : 1; /*!< [2..2] Enable AGT3 underflow snooze request */ + uint32_t : 29; + } SNZREQCR1_b; + }; + __IM uint32_t RESERVED22; + __IM uint16_t RESERVED23; + + union + { + __IOM uint8_t SNZCR; /*!< (@ 0x00000092) Snooze Control Register */ + + struct + { + __IOM uint8_t RXDREQEN : 1; /*!< [0..0] RXD0 Snooze Request Enable NOTE: Do not set to 1 other + * than in asynchronous mode. */ + __IOM uint8_t SNZDTCEN : 1; /*!< [1..1] DTC Enable in Snooze Mode */ + uint8_t : 5; + __IOM uint8_t SNZE : 1; /*!< [7..7] Snooze Mode Enable */ + } SNZCR_b; + }; + __IM uint8_t RESERVED24; + + union + { + __IOM uint8_t SNZEDCR; /*!< (@ 0x00000094) Snooze End Control Register */ + + struct + { + __IOM uint8_t AGT1UNFED : 1; /*!< [0..0] AGT1 underflow Snooze End Enable */ + __IOM uint8_t DTCZRED : 1; /*!< [1..1] Last DTC transmission completion Snooze End Enable */ + __IOM uint8_t DTCNZRED : 1; /*!< [2..2] Not Last DTC transmission completion Snooze End Enable */ + __IOM uint8_t AD0MATED : 1; /*!< [3..3] AD compare match 0 Snooze End Enable */ + __IOM uint8_t AD0UMTED : 1; /*!< [4..4] AD compare mismatch 0 Snooze End Enable */ + __IOM uint8_t AD1MATED : 1; /*!< [5..5] AD compare match 1 Snooze End Enable */ + __IOM uint8_t AD1UMTED : 1; /*!< [6..6] AD compare mismatch 1 Snooze End Enable */ + __IOM uint8_t SCI0UMTED : 1; /*!< [7..7] SCI0 address unmatch Snooze End EnableNote: Do not set + * to 1 other than in asynchronous mode. */ + } SNZEDCR_b; + }; + + union + { + __IOM uint8_t SNZEDCR1; /*!< (@ 0x00000095) Snooze End Control Register 1 */ + + struct + { + __IOM uint8_t AGT3UNFED : 1; /*!< [0..0] AGT3 underflow Snooze End Enable */ + uint8_t : 7; + } SNZEDCR1_b; + }; + __IM uint16_t RESERVED25; + + union + { + __IOM uint32_t SNZREQCR; /*!< (@ 0x00000098) Snooze Request Control Register */ + + struct + { + __IOM uint32_t SNZREQEN0 : 1; /*!< [0..0] Snooze Request Enable 0Enable IRQ 0 pin snooze request */ + __IOM uint32_t SNZREQEN1 : 1; /*!< [1..1] Snooze Request Enable 0Enable IRQ 1 pin snooze request */ + __IOM uint32_t SNZREQEN2 : 1; /*!< [2..2] Snooze Request Enable 0Enable IRQ 2 pin snooze request */ + __IOM uint32_t SNZREQEN3 : 1; /*!< [3..3] Snooze Request Enable 0Enable IRQ 3 pin snooze request */ + __IOM uint32_t SNZREQEN4 : 1; /*!< [4..4] Snooze Request Enable 0Enable IRQ 4 pin snooze request */ + __IOM uint32_t SNZREQEN5 : 1; /*!< [5..5] Snooze Request Enable 0Enable IRQ 5 pin snooze request */ + __IOM uint32_t SNZREQEN6 : 1; /*!< [6..6] Snooze Request Enable 0Enable IRQ 6 pin snooze request */ + __IOM uint32_t SNZREQEN7 : 1; /*!< [7..7] Snooze Request Enable 0Enable IRQ 7 pin snooze request */ + __IOM uint32_t SNZREQEN8 : 1; /*!< [8..8] Snooze Request Enable 0Enable IRQ 8 pin snooze request */ + __IOM uint32_t SNZREQEN9 : 1; /*!< [9..9] Snooze Request Enable 0Enable IRQ 9 pin snooze request */ + __IOM uint32_t SNZREQEN10 : 1; /*!< [10..10] Snooze Request Enable 0Enable IRQ 10 pin snooze request */ + __IOM uint32_t SNZREQEN11 : 1; /*!< [11..11] Snooze Request Enable 0Enable IRQ 11 pin snooze request */ + __IOM uint32_t SNZREQEN12 : 1; /*!< [12..12] Snooze Request Enable 0Enable IRQ 12 pin snooze request */ + __IOM uint32_t SNZREQEN13 : 1; /*!< [13..13] Snooze Request Enable 0Enable IRQ 13 pin snooze request */ + __IOM uint32_t SNZREQEN14 : 1; /*!< [14..14] Snooze Request Enable 0Enable IRQ 14 pin snooze request */ + __IOM uint32_t SNZREQEN15 : 1; /*!< [15..15] Snooze Request Enable 0Enable IRQ 15 pin snooze request */ + uint32_t : 1; + __IOM uint32_t SNZREQEN17 : 1; /*!< [17..17] Snooze Request Enable 17Enable KR snooze request */ + uint32_t : 4; + __IOM uint32_t SNZREQEN22 : 1; /*!< [22..22] Snooze Request Enable 22Enable Comparator-HS0 snooze + * request */ + __IOM uint32_t SNZREQEN23 : 1; /*!< [23..23] Snooze Request Enable 23Enable Comparator-LP0 snooze + * request */ + __IOM uint32_t SNZREQEN24 : 1; /*!< [24..24] Snooze Request Enable 24Enable RTC alarm snooze request */ + __IOM uint32_t SNZREQEN25 : 1; /*!< [25..25] Snooze Request Enable 25Enable RTC period snooze request */ + uint32_t : 2; + __IOM uint32_t SNZREQEN28 : 1; /*!< [28..28] Snooze Request Enable 28Enable AGT1 underflow snooze + * request */ + __IOM uint32_t SNZREQEN29 : 1; /*!< [29..29] Snooze Request Enable 29Enable AGT1 compare match A + * snooze request */ + __IOM uint32_t SNZREQEN30 : 1; /*!< [30..30] Snooze Request Enable 30Enable AGT1 compare match B + * snooze request */ + uint32_t : 1; + } SNZREQCR_b; + }; + __IM uint16_t RESERVED26; + + union + { + __IOM uint8_t FLSTOP; /*!< (@ 0x0000009E) Flash Operation Control Register */ + + struct + { + __IOM uint8_t FLSTOP : 1; /*!< [0..0] Selecting ON/OFF of the Flash Memory Operation */ + uint8_t : 3; + __IOM uint8_t FLSTPF : 1; /*!< [4..4] Flash Memory Operation Status Flag */ + uint8_t : 3; + } FLSTOP_b; + }; + + union + { + __IOM uint8_t PSMCR; /*!< (@ 0x0000009F) Power Save Memory Control Register */ + + struct + { + __IOM uint8_t PSMC : 2; /*!< [1..0] Power save memory control. */ + uint8_t : 6; + } PSMCR_b; + }; + + union + { + __IOM uint8_t OPCCR; /*!< (@ 0x000000A0) Operating Power Control Register */ + + struct + { + __IOM uint8_t OPCM : 2; /*!< [1..0] Operating Power Control Mode Select */ + uint8_t : 2; + __IM uint8_t OPCMTSF : 1; /*!< [4..4] Operating Power Control Mode Transition Status Flag */ + uint8_t : 3; + } OPCCR_b; + }; + __IM uint8_t RESERVED27; + + union + { + __IOM uint8_t MOSCWTCR; /*!< (@ 0x000000A2) Main Clock Oscillator Wait Control Register */ + + struct + { + __IOM uint8_t MSTS : 4; /*!< [3..0] Main clock oscillator wait time setting */ + uint8_t : 4; + } MOSCWTCR_b; + }; + __IM uint8_t RESERVED28[2]; + + union + { + __IOM uint8_t HOCOWTCR; /*!< (@ 0x000000A5) High-speed on-chip oscillator wait control register */ + + struct + { + __IOM uint8_t HSTS : 3; /*!< [2..0] HOCO wait time settingWaiting time (sec) = setting of + * the HSTS[2:0] bits/fLOCO(Trimmed) + 3/fLOC(Untrimmed) */ + uint8_t : 5; + } HOCOWTCR_b; + }; + __IM uint16_t RESERVED29[2]; + + union + { + __IOM uint8_t SOPCCR; /*!< (@ 0x000000AA) Sub Operating Power Control Register */ + + struct + { + __IOM uint8_t SOPCM : 1; /*!< [0..0] Sub Operating Power Control Mode Select */ + uint8_t : 3; + __IM uint8_t SOPCMTSF : 1; /*!< [4..4] Sub Operating Power Control Mode Transition Status Flag */ + uint8_t : 3; + } SOPCCR_b; + }; + __IM uint8_t RESERVED30; + __IM uint32_t RESERVED31[5]; + + union + { + __IOM uint16_t RSTSR1; /*!< (@ 0x000000C0) Reset Status Register 1 */ + + struct + { + __IOM uint16_t IWDTRF : 1; /*!< [0..0] Independent Watchdog Timer Reset Detect FlagNOTE: Writable + * only to clear the flag. Confirm the value is 1 and then + * write 0. */ + __IOM uint16_t WDTRF : 1; /*!< [1..1] Watchdog Timer Reset Detect FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t SWRF : 1; /*!< [2..2] Software Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + uint16_t : 5; + __IOM uint16_t RPERF : 1; /*!< [8..8] RAM Parity Error Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t REERF : 1; /*!< [9..9] RAM ECC Error Reset Detect FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t BUSSRF : 1; /*!< [10..10] Bus Slave MPU Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t BUSMRF : 1; /*!< [11..11] Bus Master MPU Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint16_t SPERF : 1; /*!< [12..12] SP Error Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + __IOM uint16_t TZERF : 1; /*!< [13..13] Trust Zone Error Reset Detect Flag */ + uint16_t : 1; + __IOM uint16_t CPERF : 1; /*!< [15..15] Cache Parity Error Reset Detect Flag */ + } RSTSR1_b; + }; + __IM uint16_t RESERVED32; + __IM uint32_t RESERVED33[3]; + + union + { + __IOM uint8_t USBCKCR_ALT; /*!< (@ 0x000000D0) USB Clock Control Register */ + + struct + { + __IOM uint8_t USBCLKSEL : 1; /*!< [0..0] The USBCLKSEL bit selects the source of the USB clock + * (UCLK). */ + uint8_t : 7; + } USBCKCR_ALT_b; + }; + + union + { + __IOM uint8_t SDADCCKCR; /*!< (@ 0x000000D1) 24-bit Sigma-Delta A/D Converter Clock Control + * Register */ + + struct + { + __IOM uint8_t SDADCCKSEL : 1; /*!< [0..0] 24-bit Sigma-Delta A/D Converter Clock Select */ + uint8_t : 6; + __IOM uint8_t SDADCCKEN : 1; /*!< [7..7] 24-bit Sigma-Delta A/D Converter Clock Enable */ + } SDADCCKCR_b; + }; + __IM uint16_t RESERVED34; + __IM uint32_t RESERVED35[3]; + + union + { + __IOM uint8_t LVD1CR1; /*!< (@ 0x000000E0) Voltage Monitor 1 Circuit Control Register 1 */ + + struct + { + __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ + __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ + uint8_t : 5; + } LVD1CR1_b; + }; + + union + { + __IOM uint8_t LVD1SR; /*!< (@ 0x000000E1) Voltage Monitor 1 Circuit Status Register */ + + struct + { + __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only + * 0 can be written to this bit. After writing 0 to this bit, + * it takes 2 system clock cycles for the bit to be read as + * 0. */ + __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ + uint8_t : 6; + } LVD1SR_b; + }; + + union + { + __IOM uint8_t LVD2CR1; /*!< (@ 0x000000E2) Voltage Monitor 2 Circuit Control Register 1 */ + + struct + { + __IOM uint8_t IDTSEL : 2; /*!< [1..0] Voltage Monitor Interrupt Generation Condition Select */ + __IOM uint8_t IRQSEL : 1; /*!< [2..2] Voltage Monitor Interrupt Type Select */ + uint8_t : 5; + } LVD2CR1_b; + }; + + union + { + __IOM uint8_t LVD2SR; /*!< (@ 0x000000E3) Voltage Monitor 2 Circuit Status Register */ + + struct + { + __IOM uint8_t DET : 1; /*!< [0..0] Voltage Monitor Voltage Change Detection Flag NOTE: Only + * 0 can be written to this bit. After writing 0 to this bit, + * it takes 2 system clock cycles for the bit to be read as + * 0. */ + __IM uint8_t MON : 1; /*!< [1..1] Voltage Monitor 1 Signal Monitor Flag */ + uint8_t : 6; + } LVD2SR_b; + }; + __IM uint32_t RESERVED36[183]; + + union + { + __IOM uint32_t CGFSAR; /*!< (@ 0x000003C0) Clock Generation Function Security Attribute + * Register */ + + struct + { + __IOM uint32_t NONSEC00 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC01 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + __IOM uint32_t NONSEC02 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + __IOM uint32_t NONSEC03 : 1; /*!< [3..3] Non Secure Attribute bit 3 */ + __IOM uint32_t NONSEC04 : 1; /*!< [4..4] Non Secure Attribute bit 4 */ + __IOM uint32_t NONSEC05 : 1; /*!< [5..5] Non Secure Attribute bit 5 */ + __IOM uint32_t NONSEC06 : 1; /*!< [6..6] Non Secure Attribute bit 6 */ + __IOM uint32_t NONSEC07 : 1; /*!< [7..7] Non Secure Attribute bit 7 */ + __IOM uint32_t NONSEC08 : 1; /*!< [8..8] Non Secure Attribute bit 8 */ + __IOM uint32_t NONSEC09 : 1; /*!< [9..9] Non Secure Attribute bit 9 */ + __IOM uint32_t NONSEC10 : 1; /*!< [10..10] Non Secure Attribute bit 10 */ + __IOM uint32_t NONSEC11 : 1; /*!< [11..11] Non Secure Attribute bit 11 */ + __IOM uint32_t NONSEC12 : 1; /*!< [12..12] Non Secure Attribute bit 12 */ + __IOM uint32_t NONSEC13 : 1; /*!< [13..13] Non Secure Attribute bit 13 */ + __IOM uint32_t NONSEC14 : 1; /*!< [14..14] Non Secure Attribute bit 14 */ + __IOM uint32_t NONSEC15 : 1; /*!< [15..15] Non Secure Attribute bit 15 */ + __IOM uint32_t NONSEC16 : 1; /*!< [16..16] Non Secure Attribute bit 16 */ + __IOM uint32_t NONSEC17 : 1; /*!< [17..17] Non Secure Attribute bit 17 */ + __IOM uint32_t NONSEC18 : 1; /*!< [18..18] Non Secure Attribute bit 18 */ + __IOM uint32_t NONSEC19 : 1; /*!< [19..19] Non Secure Attribute bit 19 */ + __IOM uint32_t NONSEC20 : 1; /*!< [20..20] Non Secure Attribute bit 20 */ + __IOM uint32_t NONSEC21 : 1; /*!< [21..21] Non Secure Attribute bit 21 */ + __IOM uint32_t NONSEC22 : 1; /*!< [22..22] Non Secure Attribute bit 22 */ + __IOM uint32_t NONSEC23 : 1; /*!< [23..23] Non Secure Attribute bit 23 */ + __IOM uint32_t NONSEC24 : 1; /*!< [24..24] Non Secure Attribute bit 24 */ + __IOM uint32_t NONSEC25 : 1; /*!< [25..25] Non Secure Attribute bit 25 */ + __IOM uint32_t NONSEC26 : 1; /*!< [26..26] Non Secure Attribute bit 26 */ + __IOM uint32_t NONSEC27 : 1; /*!< [27..27] Non Secure Attribute bit 27 */ + __IOM uint32_t NONSEC28 : 1; /*!< [28..28] Non Secure Attribute bit 28 */ + __IOM uint32_t NONSEC29 : 1; /*!< [29..29] Non Secure Attribute bit 29 */ + __IOM uint32_t NONSEC30 : 1; /*!< [30..30] Non Secure Attribute bit 30 */ + __IOM uint32_t NONSEC31 : 1; /*!< [31..31] Non Secure Attribute bit 31 */ + } CGFSAR_b; + }; + __IM uint32_t RESERVED37; + + union + { + __IOM uint32_t LPMSAR; /*!< (@ 0x000003C8) Low Power Mode Security Attribution Register */ + + struct + { + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + uint32_t : 1; + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 1; + __IOM uint32_t NONSEC4 : 1; /*!< [4..4] Non Secure Attribute bit 4 */ + uint32_t : 3; + __IOM uint32_t NONSEC8 : 1; /*!< [8..8] Non Secure Attribute bit 8 */ + __IOM uint32_t NONSEC9 : 1; /*!< [9..9] Non Secure Attribute bit 9 */ + uint32_t : 22; + } LPMSAR_b; + }; + + union + { + union + { + __IOM uint32_t LVDSAR; /*!< (@ 0x000003CC) Low Voltage Detection Security Attribution Register */ + + struct + { + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + uint32_t : 30; + } LVDSAR_b; + }; + + union + { + __IOM uint32_t RSTSAR; /*!< (@ 0x000003CC) Reset Security Attribution Register */ + + struct + { + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 29; + } RSTSAR_b; + }; + }; + + union + { + __IOM uint32_t BBFSAR; /*!< (@ 0x000003D0) Battery Backup Function Security Attribute Register */ + + struct + { + __IOM uint32_t NONSEC0 : 1; /*!< [0..0] Non Secure Attribute bit 0 */ + __IOM uint32_t NONSEC1 : 1; /*!< [1..1] Non Secure Attribute bit 1 */ + __IOM uint32_t NONSEC2 : 1; /*!< [2..2] Non Secure Attribute bit 2 */ + uint32_t : 13; + __IOM uint32_t NONSEC16 : 1; /*!< [16..16] Non Secure Attribute bit 16 */ + __IOM uint32_t NONSEC17 : 1; /*!< [17..17] Non Secure Attribute bit 17 */ + __IOM uint32_t NONSEC18 : 1; /*!< [18..18] Non Secure Attribute bit 18 */ + __IOM uint32_t NONSEC19 : 1; /*!< [19..19] Non Secure Attribute bit 19 */ + __IOM uint32_t NONSEC20 : 1; /*!< [20..20] Non Secure Attribute bit 20 */ + __IOM uint32_t NONSEC21 : 1; /*!< [21..21] Non Secure Attribute bit 21 */ + __IOM uint32_t NONSEC22 : 1; /*!< [22..22] Non Secure Attribute bit 22 */ + __IOM uint32_t NONSEC23 : 1; /*!< [23..23] Non Secure Attribute bit 23 */ + uint32_t : 8; + } BBFSAR_b; + }; + __IM uint32_t RESERVED38[3]; + + union + { + __IOM uint32_t DPFSAR; /*!< (@ 0x000003E0) Deep Standby Interrupt Factor Security Attribution + * Register */ + + struct + { + __IOM uint32_t DPFSA0 : 1; /*!< [0..0] Deep Standby Interrupt Factor Security Attribute bit + * 0 */ + __IOM uint32_t DPFSA1 : 1; /*!< [1..1] Deep Standby Interrupt Factor Security Attribute bit + * 1 */ + __IOM uint32_t DPFSA2 : 1; /*!< [2..2] Deep Standby Interrupt Factor Security Attribute bit + * 2 */ + __IOM uint32_t DPFSA3 : 1; /*!< [3..3] Deep Standby Interrupt Factor Security Attribute bit + * 3 */ + __IOM uint32_t DPFSA4 : 1; /*!< [4..4] Deep Standby Interrupt Factor Security Attribute bit + * 4 */ + __IOM uint32_t DPFSA5 : 1; /*!< [5..5] Deep Standby Interrupt Factor Security Attribute bit + * 5 */ + __IOM uint32_t DPFSA6 : 1; /*!< [6..6] Deep Standby Interrupt Factor Security Attribute bit + * 6 */ + __IOM uint32_t DPFSA7 : 1; /*!< [7..7] Deep Standby Interrupt Factor Security Attribute bit + * 7 */ + __IOM uint32_t DPFSA8 : 1; /*!< [8..8] Deep Standby Interrupt Factor Security Attribute bit + * 8 */ + __IOM uint32_t DPFSA9 : 1; /*!< [9..9] Deep Standby Interrupt Factor Security Attribute bit + * 9 */ + __IOM uint32_t DPFSA10 : 1; /*!< [10..10] Deep Standby Interrupt Factor Security Attribute bit + * 10 */ + __IOM uint32_t DPFSA11 : 1; /*!< [11..11] Deep Standby Interrupt Factor Security Attribute bit + * 11 */ + __IOM uint32_t DPFSA12 : 1; /*!< [12..12] Deep Standby Interrupt Factor Security Attribute bit + * 12 */ + __IOM uint32_t DPFSA13 : 1; /*!< [13..13] Deep Standby Interrupt Factor Security Attribute bit + * 13 */ + __IOM uint32_t DPFSA14 : 1; /*!< [14..14] Deep Standby Interrupt Factor Security Attribute bit + * 14 */ + __IOM uint32_t DPFSA15 : 1; /*!< [15..15] Deep Standby Interrupt Factor Security Attribute bit + * 15 */ + __IOM uint32_t DPFSA16 : 1; /*!< [16..16] Deep Standby Interrupt Factor Security Attribute bit + * 16 */ + __IOM uint32_t DPFSA17 : 1; /*!< [17..17] Deep Standby Interrupt Factor Security Attribute bit + * 17 */ + __IOM uint32_t DPFSA18 : 1; /*!< [18..18] Deep Standby Interrupt Factor Security Attribute bit + * 18 */ + __IOM uint32_t DPFSA19 : 1; /*!< [19..19] Deep Standby Interrupt Factor Security Attribute bit + * 19 */ + __IOM uint32_t DPFSA20 : 1; /*!< [20..20] Deep Standby Interrupt Factor Security Attribute bit + * 20 */ + uint32_t : 3; + __IOM uint32_t DPFSA24 : 1; /*!< [24..24] Deep Standby Interrupt Factor Security Attribute bit + * 24 */ + uint32_t : 1; + __IOM uint32_t DPFSA26 : 1; /*!< [26..26] Deep Standby Interrupt Factor Security Attribute bit + * 26 */ + __IOM uint32_t DPFSA27 : 1; /*!< [27..27] Deep Standby Interrupt Factor Security Attribute bit + * 27 */ + uint32_t : 4; + } DPFSAR_b; + }; + __IM uint32_t RESERVED39[6]; + __IM uint16_t RESERVED40; + + union + { + __IOM uint16_t PRCR; /*!< (@ 0x000003FE) Protect Register */ + + struct + { + __IOM uint16_t PRC0 : 1; /*!< [0..0] Enables writing to the registers related to the clock + * generation circuit. */ + __IOM uint16_t PRC1 : 1; /*!< [1..1] Enables writing to the registers related to the operating + * modes, the low power consumption modes and the battery + * backup function. */ + uint16_t : 1; + __IOM uint16_t PRC3 : 1; /*!< [3..3] Enables writing to the registers related to the LVD. */ + __IOM uint16_t PRC4 : 1; /*!< [4..4] PRC4 */ + uint16_t : 3; + __OM uint16_t PRKEY : 8; /*!< [15..8] PRKEY Key Code */ + } PRCR_b; + }; + + union + { + __IOM uint8_t DPSBYCR; /*!< (@ 0x00000400) Deep Standby Control Register */ + + struct + { + __IOM uint8_t DEEPCUT : 2; /*!< [1..0] Power-Supply Control */ + uint8_t : 4; + __IOM uint8_t IOKEEP : 1; /*!< [6..6] I/O Port Retention */ + __IOM uint8_t DPSBY : 1; /*!< [7..7] Deep Software Standby */ + } DPSBYCR_b; + }; + + union + { + __IOM uint8_t DPSWCR; /*!< (@ 0x00000401) Deep Standby Wait Control Register */ + + struct + { + __IOM uint8_t WTSTS : 6; /*!< [5..0] Deep Software Wait Standby Time Setting Bit */ + uint8_t : 2; + } DPSWCR_b; + }; + + union + { + __IOM uint8_t DPSIER0; /*!< (@ 0x00000402) Deep Standby Interrupt Enable Register 0 */ + + struct + { + __IOM uint8_t DIRQ0E : 1; /*!< [0..0] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ1E : 1; /*!< [1..1] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ2E : 1; /*!< [2..2] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ3E : 1; /*!< [3..3] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ4E : 1; /*!< [4..4] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ5E : 1; /*!< [5..5] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ6E : 1; /*!< [6..6] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ7E : 1; /*!< [7..7] IRQ-DS Pin Enable */ + } DPSIER0_b; + }; + + union + { + __IOM uint8_t DPSIER1; /*!< (@ 0x00000403) Deep Standby Interrupt Enable Register 1 */ + + struct + { + __IOM uint8_t DIRQ8E : 1; /*!< [0..0] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ9E : 1; /*!< [1..1] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ10E : 1; /*!< [2..2] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ11E : 1; /*!< [3..3] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ12E : 1; /*!< [4..4] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ13E : 1; /*!< [5..5] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ14E : 1; /*!< [6..6] IRQ-DS Pin Enable */ + __IOM uint8_t DIRQ15E : 1; /*!< [7..7] IRQ-DS Pin Enable */ + } DPSIER1_b; + }; + + union + { + __IOM uint8_t DPSIER2; /*!< (@ 0x00000404) Deep Standby Interrupt Enable Register 2 */ + + struct + { + __IOM uint8_t DLVD1IE : 1; /*!< [0..0] LVD1 Deep Standby Cancel Signal Enable */ + __IOM uint8_t DLVD2IE : 1; /*!< [1..1] LVD2 Deep Standby Cancel Signal Enable */ + __IOM uint8_t DTRTCIIE : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Signal Enable */ + __IOM uint8_t DRTCAIE : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Signal Enable */ + __IOM uint8_t DNMIE : 1; /*!< [4..4] NMI Pin Enable */ + uint8_t : 3; + } DPSIER2_b; + }; + + union + { + __IOM uint8_t DPSIER3; /*!< (@ 0x00000405) Deep Standby Interrupt Enable Register 3 */ + + struct + { + __IOM uint8_t DUSBFSIE : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Signal Enable */ + __IOM uint8_t DUSBHSIE : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Signal Enable */ + __IOM uint8_t DAGT1IE : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Signal Enable */ + __IOM uint8_t DAGT3IE : 1; /*!< [3..3] AGT3 Underflow Deep Standby Cancel Signal Enable */ + uint8_t : 4; + } DPSIER3_b; + }; + + union + { + __IOM uint8_t DPSIFR0; /*!< (@ 0x00000406) Deep Standby Interrupt Flag Register 0 */ + + struct + { + __IOM uint8_t DIRQ0F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ1F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ2F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ3F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ4F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ5F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ6F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ7F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ + } DPSIFR0_b; + }; + + union + { + __IOM uint8_t DPSIFR1; /*!< (@ 0x00000407) Deep Standby Interrupt Flag Register 1 */ + + struct + { + __IOM uint8_t DIRQ8F : 1; /*!< [0..0] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ9F : 1; /*!< [1..1] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ10F : 1; /*!< [2..2] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ11F : 1; /*!< [3..3] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ12F : 1; /*!< [4..4] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ13F : 1; /*!< [5..5] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ14F : 1; /*!< [6..6] IRQ-DS Pin Deep Standby Cancel Flag */ + __IOM uint8_t DIRQ15F : 1; /*!< [7..7] IRQ-DS Pin Deep Standby Cancel Flag */ + } DPSIFR1_b; + }; + + union + { + __IOM uint8_t DPSIFR2; /*!< (@ 0x00000408) Deep Standby Interrupt Flag Register 2 */ + + struct + { + __IOM uint8_t DLVD1IF : 1; /*!< [0..0] LVD1 Deep Standby Cancel Flag */ + __IOM uint8_t DLVD2IF : 1; /*!< [1..1] LVD2 Deep Standby Cancel Flag */ + __IOM uint8_t DTRTCIIF : 1; /*!< [2..2] RTC Interval interrupt Deep Standby Cancel Flag */ + __IOM uint8_t DRTCAIF : 1; /*!< [3..3] RTC Alarm interrupt Deep Standby Cancel Flag */ + __IOM uint8_t DNMIF : 1; /*!< [4..4] NMI Pin Deep Standby Cancel Flag */ + uint8_t : 3; + } DPSIFR2_b; + }; + + union + { + __IOM uint8_t DPSIFR3; /*!< (@ 0x00000409) Deep Standby Interrupt Flag Register 3 */ + + struct + { + __IOM uint8_t DUSBFSIF : 1; /*!< [0..0] USBFS Suspend/Resume Deep Standby Cancel Flag */ + __IOM uint8_t DUSBHSIF : 1; /*!< [1..1] USBHS Suspend/Resume Deep Standby Cancel Flag */ + __IOM uint8_t DAGT1IF : 1; /*!< [2..2] AGT1 Underflow Deep Standby Cancel Flag */ + __IOM uint8_t DAGT3IF : 1; /*!< [3..3] AGT3 Underflow Deep Standby Cancel Flag */ + uint8_t : 4; + } DPSIFR3_b; + }; + + union + { + __IOM uint8_t DPSIEGR0; /*!< (@ 0x0000040A) Deep Standby Interrupt Edge Register 0 */ + + struct + { + __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ + } DPSIEGR0_b; + }; + + union + { + __IOM uint8_t DPSIEGR1; /*!< (@ 0x0000040B) Deep Standby Interrupt Edge Register 1 */ + + struct + { + __IOM uint8_t DIRQ0EG : 1; /*!< [0..0] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ1EG : 1; /*!< [1..1] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ2EG : 1; /*!< [2..2] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ3EG : 1; /*!< [3..3] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ4EG : 1; /*!< [4..4] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ5EG : 1; /*!< [5..5] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ6EG : 1; /*!< [6..6] IRQ-DS Pin Edge Select */ + __IOM uint8_t DIRQ7EG : 1; /*!< [7..7] IRQ-DS Pin Edge Select */ + } DPSIEGR1_b; + }; + + union + { + __IOM uint8_t DPSIEGR2; /*!< (@ 0x0000040C) Deep Standby Interrupt Edge Register 2 */ + + struct + { + __IOM uint8_t DLVD1IEG : 1; /*!< [0..0] LVD1 Edge Select */ + __IOM uint8_t DLVD2IEG : 1; /*!< [1..1] LVD2 Edge Select */ + uint8_t : 2; + __IOM uint8_t DNMIEG : 1; /*!< [4..4] NMI Pin Edge Select */ + uint8_t : 3; + } DPSIEGR2_b; + }; + __IM uint8_t RESERVED41; + + union + { + __IOM uint8_t SYOCDCR; /*!< (@ 0x0000040E) System Control OCD Control Register */ + + struct + { + __IOM uint8_t DOCDF : 1; /*!< [0..0] Deep Standby OCD flag */ + uint8_t : 6; + __IOM uint8_t DBGEN : 1; /*!< [7..7] Debugger Enable bit */ + } SYOCDCR_b; + }; + + union + { + __IOM uint8_t STCONR; /*!< (@ 0x0000040F) Standby Condition Register */ + + struct + { + __IOM uint8_t STCON : 2; /*!< [1..0] SSTBY condition bit */ + uint8_t : 6; + } STCONR_b; + }; + + union + { + __IOM uint8_t RSTSR0; /*!< (@ 0x00000410) Reset Status Register 0 */ + + struct + { + __IOM uint8_t PORF : 1; /*!< [0..0] Power-On Reset Detect FlagNOTE: Writable only to clear + * the flag. Confirm the value is 1 and then write 0. */ + __IOM uint8_t LVD0RF : 1; /*!< [1..1] Voltage Monitor 0 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint8_t LVD1RF : 1; /*!< [2..2] Voltage Monitor 1 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + __IOM uint8_t LVD2RF : 1; /*!< [3..3] Voltage Monitor 2 Reset Detect FlagNOTE: Writable only + * to clear the flag. Confirm the value is 1 and then write + * 0. */ + uint8_t : 3; + __IOM uint8_t DPSRSTF : 1; /*!< [7..7] Deep Software Standby Reset FlagNOTE: Writable only to + * clear the flag. Confirm the value is 1 and then write 0. */ + } RSTSR0_b; + }; + + union + { + __IOM uint8_t RSTSR2; /*!< (@ 0x00000411) Reset Status Register 2 */ + + struct + { + __IOM uint8_t CWSF : 1; /*!< [0..0] Cold/Warm Start Determination Flag */ + uint8_t : 7; + } RSTSR2_b; + }; + __IM uint8_t RESERVED42; + + union + { + __IOM uint8_t MOMCR; /*!< (@ 0x00000413) Main Clock Oscillator Mode Oscillation Control + * Register */ + + struct + { + uint8_t : 3; + __IOM uint8_t MODRV1 : 1; /*!< [3..3] Main Clock Oscillator Drive Capability 1 Switching */ + __IOM uint8_t MODRV0 : 2; /*!< [5..4] Main Clock Oscillator Drive Capability 0 Switching */ + __IOM uint8_t MOSEL : 1; /*!< [6..6] Main Clock Oscillator Switching */ + __IOM uint8_t AUTODRVEN : 1; /*!< [7..7] Main Clock Oscillator Drive Capability Auto Switching + * Enable */ + } MOMCR_b; + }; + __IM uint16_t RESERVED43; + + union + { + __IOM uint8_t FWEPROR; /*!< (@ 0x00000416) Flash P/E Protect Register */ + + struct + { + __IOM uint8_t FLWE : 2; /*!< [1..0] Flash Programming and Erasure */ + uint8_t : 6; + } FWEPROR_b; + }; + + union + { + union + { + __IOM uint8_t LVCMPCR; /*!< (@ 0x00000417) Voltage Monitor Circuit Control Register */ + + struct + { + uint8_t : 5; + __IOM uint8_t LVD1E : 1; /*!< [5..5] Voltage Detection 1 Enable */ + __IOM uint8_t LVD2E : 1; /*!< [6..6] Voltage Detection 2 Enable */ + uint8_t : 1; + } LVCMPCR_b; + }; + + union + { + __IOM uint8_t LVD1CMPCR; /*!< (@ 0x00000417) Voltage Monitoring 1 Comparator Control Register */ + + struct + { + __IOM uint8_t LVDLVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 2; + __IOM uint8_t LVDE : 1; /*!< [7..7] Voltage Detection 1 Enable */ + } LVD1CMPCR_b; + }; + }; + + union + { + union + { + __IOM uint8_t LVDLVLR; /*!< (@ 0x00000418) Voltage Detection Level Select Register */ + + struct + { + __IOM uint8_t LVD1LVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during + * fall in voltage) */ + __IOM uint8_t LVD2LVL : 3; /*!< [7..5] Voltage Detection 2 Level Select (Standard voltage during + * fall in voltage) */ + } LVDLVLR_b; + }; + + union + { + __IOM uint8_t LVD2CMPCR; /*!< (@ 0x00000418) Voltage Monitoring 2 Comparator Control Register */ + + struct + { + __IOM uint8_t LVDLVL : 3; /*!< [2..0] Voltage Detection 2 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 4; + __IOM uint8_t LVDE : 1; /*!< [7..7] Voltage Detection 2 Enable */ + } LVD2CMPCR_b; + }; + }; + __IM uint8_t RESERVED44; + + union + { + __IOM uint8_t LVD1CR0; /*!< (@ 0x0000041A) Voltage Monitor 1 Circuit Control Register 0 */ + + struct + { + __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ + __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ + __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ + uint8_t : 1; + __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ + __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ + __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ + } LVD1CR0_b; + }; + + union + { + __IOM uint8_t LVD2CR0; /*!< (@ 0x0000041B) Voltage Monitor 2 Circuit Control Register 0 */ + + struct + { + __IOM uint8_t RIE : 1; /*!< [0..0] Voltage Monitor Interrupt/Reset Enable */ + __IOM uint8_t DFDIS : 1; /*!< [1..1] Voltage Monitor Digital Filter Disable Mode Select */ + __IOM uint8_t CMPE : 1; /*!< [2..2] Voltage Monitor Circuit Comparison Result Output Enable */ + uint8_t : 1; + __IOM uint8_t FSAMP : 2; /*!< [5..4] Sampling Clock Select */ + __IOM uint8_t RI : 1; /*!< [6..6] Voltage Monitor Circuit Mode Select */ + __IOM uint8_t RN : 1; /*!< [7..7] Voltage Monitor Reset Negate Select */ + } LVD2CR0_b; + }; + __IM uint8_t RESERVED45; + + union + { + __IOM uint8_t VBATTMNSELR; /*!< (@ 0x0000041D) Battery Backup Voltage Monitor Function Select + * Register */ + + struct + { + __IOM uint8_t VBATTMNSEL : 1; /*!< [0..0] VBATT Low Voltage Detect Function Select Bit */ + uint8_t : 7; + } VBATTMNSELR_b; + }; + + union + { + __IM uint8_t VBATTMONR; /*!< (@ 0x0000041E) Battery Backup Voltage Monitor Register */ + + struct + { + __IM uint8_t VBATTMON : 1; /*!< [0..0] VBATT Voltage Monitor Bit */ + uint8_t : 7; + } VBATTMONR_b; + }; + + union + { + __IOM uint8_t VBTCR1; /*!< (@ 0x0000041F) VBATT Control Register1 */ + + struct + { + __IOM uint8_t BPWSWSTP : 1; /*!< [0..0] Battery Power supply Switch Stop */ + uint8_t : 7; + } VBTCR1_b; + }; + __IM uint32_t RESERVED46[8]; + + union + { + union + { + __IOM uint8_t DCDCCTL; /*!< (@ 0x00000440) DCDC/LDO Control Register */ + + struct + { + __IOM uint8_t DCDCON : 1; /*!< [0..0] LDO/DCDC on/off Control bit */ + __IOM uint8_t OCPEN : 1; /*!< [1..1] DCDC OCP Function Enable bit */ + uint8_t : 2; + __IOM uint8_t STOPZA : 1; /*!< [4..4] DCDC IO Buffer Power Control bit */ + __IOM uint8_t LCBOOST : 1; /*!< [5..5] LDO LCBOOST Mode Control bit */ + __IOM uint8_t FST : 1; /*!< [6..6] DCDC Fast Startup */ + __IOM uint8_t PD : 1; /*!< [7..7] DCDC VREF Generate Disable bit */ + } DCDCCTL_b; + }; + + union + { + __IOM uint8_t LDOSCR; /*!< (@ 0x00000440) LDO Stop Control Register */ + + struct + { + __IOM uint8_t LDOSTP0 : 1; /*!< [0..0] LDO0 Stop */ + __IOM uint8_t LDOSTP1 : 1; /*!< [1..1] LDO1 Stop */ + uint8_t : 6; + } LDOSCR_b; + }; + }; + + union + { + __IOM uint8_t VCCSEL; /*!< (@ 0x00000441) Voltage Level Selection Control Register */ + + struct + { + __IOM uint8_t VCCSEL : 2; /*!< [1..0] DCDC Working Voltage Level Selection */ + uint8_t : 6; + } VCCSEL_b; + }; + __IM uint16_t RESERVED47; + + union + { + __IOM uint8_t PL2LDOSCR; /*!< (@ 0x00000444) PLL2-LDO Stop Control Register */ + + struct + { + __IOM uint8_t PL2LDOSTP : 1; /*!< [0..0] LDO0 Stop */ + uint8_t : 7; + } PL2LDOSCR_b; + }; + __IM uint8_t RESERVED48; + __IM uint16_t RESERVED49; + __IM uint32_t RESERVED50[14]; + + union + { + __IOM uint8_t SOSCCR; /*!< (@ 0x00000480) Sub-Clock Oscillator Control Register */ + + struct + { + __IOM uint8_t SOSTP : 1; /*!< [0..0] Sub-Clock Oscillator Stop */ + uint8_t : 7; + } SOSCCR_b; + }; + + union + { + __IOM uint8_t SOMCR; /*!< (@ 0x00000481) Sub Clock Oscillator Mode Control Register */ + + struct + { + __IOM uint8_t SODRV : 2; /*!< [1..0] Sub-Clock Oscillator Drive Capability Switching */ + uint8_t : 6; + } SOMCR_b; + }; + + union + { + __IOM uint8_t SOMRG; /*!< (@ 0x00000482) Sub Clock Oscillator Margin Check Register */ + + struct + { + __IOM uint8_t SOSCMRG : 2; /*!< [1..0] Sub Clock Oscillator Margin check Switching */ + uint8_t : 6; + } SOMRG_b; + }; + __IM uint8_t RESERVED51; + __IM uint32_t RESERVED52[3]; + + union + { + __IOM uint8_t LOCOCR; /*!< (@ 0x00000490) Low-Speed On-Chip Oscillator Control Register */ + + struct + { + __IOM uint8_t LCSTP : 1; /*!< [0..0] LOCO Stop */ + uint8_t : 7; + } LOCOCR_b; + }; + __IM uint8_t RESERVED53; + + union + { + __IOM uint8_t LOCOUTCR; /*!< (@ 0x00000492) LOCO User Trimming Control Register */ + + struct + { + __IOM uint8_t LOCOUTRM : 8; /*!< [7..0] LOCO User Trimming 1000_0000 : -128 1000_0001 : -127 + * 1000_0010 : -126 . . . 1111_1111 : -1 0000_0000 : Center + * Code 0000_0001 : +1 . . . 0111_1101 : +125 0111_1110 : + +126 0111_1111 : +127These bits are added to original LOCO + * trimming bits */ + } LOCOUTCR_b; + }; + __IM uint8_t RESERVED54; + __IM uint32_t RESERVED55[7]; + + union + { + __IOM uint8_t VBTCR2; /*!< (@ 0x000004B0) VBATT Control Register2 */ + + struct + { + uint8_t : 4; + __IOM uint8_t VBTLVDEN : 1; /*!< [4..4] VBATT Pin Low Voltage Detect Enable Bit */ + uint8_t : 1; + __IOM uint8_t VBTLVDLVL : 2; /*!< [7..6] VBATT Pin Voltage Low Voltage Detect Level Select Bit */ + } VBTCR2_b; + }; + + union + { + __IOM uint8_t VBTSR; /*!< (@ 0x000004B1) VBATT Status Register */ + + struct + { + __IOM uint8_t VBTRDF : 1; /*!< [0..0] VBAT_R Reset Detect Flag */ + __IOM uint8_t VBTBLDF : 1; /*!< [1..1] VBATT Battery Low voltage Detect Flag */ + uint8_t : 2; + __IM uint8_t VBTRVLD : 1; /*!< [4..4] VBATT_R Valid */ + uint8_t : 3; + } VBTSR_b; + }; + + union + { + __IOM uint8_t VBTCMPCR; /*!< (@ 0x000004B2) VBATT Comparator Control Register */ + + struct + { + __IOM uint8_t VBTCMPE : 1; /*!< [0..0] VBATT pin low voltage detect circuit output enable */ + uint8_t : 7; + } VBTCMPCR_b; + }; + __IM uint8_t RESERVED56; + + union + { + __IOM uint8_t VBTLVDICR; /*!< (@ 0x000004B4) VBATT Pin Low Voltage Detect Interrupt Control + * Register */ + + struct + { + __IOM uint8_t VBTLVDIE : 1; /*!< [0..0] VBATT Pin Low Voltage Detect Interrupt Enable bit */ + __IOM uint8_t VBTLVDISEL : 1; /*!< [1..1] Pin Low Voltage Detect Interrupt Select bit */ + uint8_t : 6; + } VBTLVDICR_b; + }; + __IM uint8_t RESERVED57; + + union + { + __IOM uint8_t VBTWCTLR; /*!< (@ 0x000004B6) VBATT Wakeup function Control Register */ + + struct + { + __IOM uint8_t VWEN : 1; /*!< [0..0] VBATT wakeup enable */ + uint8_t : 7; + } VBTWCTLR_b; + }; + __IM uint8_t RESERVED58; + + union + { + __IOM uint8_t VBTWCH0OTSR; /*!< (@ 0x000004B8) VBATT Wakeup I/O 0 Output Trigger Select Register */ + + struct + { + uint8_t : 1; + __IOM uint8_t CH0VCH1TE : 1; /*!< [1..1] VBATWIO0 Output VBATWIO1 Trigger Enable */ + __IOM uint8_t CH0VCH2TE : 1; /*!< [2..2] VBATWIO0 Output VBATWIO2 Trigger Enable */ + __IOM uint8_t CH0VRTCTE : 1; /*!< [3..3] VBATWIO0 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH0VRTCATE : 1; /*!< [4..4] VBATWIO0 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH0VAGTUTE : 1; /*!< [5..5] CH0 Output AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH0OTSR_b; + }; + + union + { + __IOM uint8_t VBTWCH1OTSR; /*!< (@ 0x000004B9) VBATT Wakeup I/O 1 Output Trigger Select Register */ + + struct + { + __IOM uint8_t CH1VCH0TE : 1; /*!< [0..0] VBATWIO1 Output VBATWIO0 Trigger Enable */ + uint8_t : 1; + __IOM uint8_t CH1VCH2TE : 1; /*!< [2..2] VBATWIO1 Output VBATWIO2 Trigger Enable */ + __IOM uint8_t CH1VRTCTE : 1; /*!< [3..3] VBATWIO1 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH1VRTCATE : 1; /*!< [4..4] VBATWIO1 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH1VAGTUTE : 1; /*!< [5..5] CH1 Output AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH1OTSR_b; + }; + + union + { + __IOM uint8_t VBTWCH2OTSR; /*!< (@ 0x000004BA) VBATT Wakeup I/O 2 Output Trigger Select Register */ + + struct + { + __IOM uint8_t CH2VCH0TE : 1; /*!< [0..0] VBATWIO2 Output VBATWIO0 Trigger Enable */ + __IOM uint8_t CH2VCH1TE : 1; /*!< [1..1] VBATWIO2 Output VBATWIO1 Trigger Enable */ + uint8_t : 1; + __IOM uint8_t CH2VRTCTE : 1; /*!< [3..3] VBATWIO2 Output RTC Periodic Signal Enable */ + __IOM uint8_t CH2VRTCATE : 1; /*!< [4..4] VBATWIO2 Output RTC Alarm Signal Enable */ + __IOM uint8_t CH2VAGTUTE : 1; /*!< [5..5] CH2 Output AGT(CH2) underflow Signal Enable */ + uint8_t : 2; + } VBTWCH2OTSR_b; + }; + + union + { + __IOM uint8_t VBTICTLR; /*!< (@ 0x000004BB) VBATT Input Control Register */ + + struct + { + __IOM uint8_t VCH0INEN : 1; /*!< [0..0] RTCIC0 Input Enable */ + __IOM uint8_t VCH1INEN : 1; /*!< [1..1] RTCIC1 Input Enable */ + __IOM uint8_t VCH2INEN : 1; /*!< [2..2] RTCIC2 Input Enable */ + uint8_t : 5; + } VBTICTLR_b; + }; + + union + { + __IOM uint8_t VBTOCTLR; /*!< (@ 0x000004BC) VBATT Output Control Register */ + + struct + { + __IOM uint8_t VCH0OEN : 1; /*!< [0..0] VBATT Wakeup I/O 0 Output Enable */ + __IOM uint8_t VCH1OEN : 1; /*!< [1..1] VBATT Wakeup I/O 1 Output Enable */ + __IOM uint8_t VCH2OEN : 1; /*!< [2..2] VBATT Wakeup I/O 2 Output Enable */ + __IOM uint8_t VOUT0LSEL : 1; /*!< [3..3] VBATT Wakeup I/O 0 Output Level Selection */ + __IOM uint8_t VCOU1LSEL : 1; /*!< [4..4] VBATT Wakeup I/O 1 Output Level Selection */ + __IOM uint8_t VOUT2LSEL : 1; /*!< [5..5] VBATT Wakeup I/O 2 Output Level Selection */ + uint8_t : 2; + } VBTOCTLR_b; + }; + + union + { + __IOM uint8_t VBTWTER; /*!< (@ 0x000004BD) VBATT Wakeup Trigger source Enable Register */ + + struct + { + __IOM uint8_t VCH0E : 1; /*!< [0..0] VBATWIO0 Pin Enable */ + __IOM uint8_t VCH1E : 1; /*!< [1..1] VBATWIO1 Pin Enable */ + __IOM uint8_t VCH2E : 1; /*!< [2..2] VBATWIO2 Pin Enable */ + __IOM uint8_t VRTCIE : 1; /*!< [3..3] RTC Periodic Signal Enable */ + __IOM uint8_t VRTCAE : 1; /*!< [4..4] RTC Alarm Signal Enable */ + __IOM uint8_t VAGTUE : 1; /*!< [5..5] AGT(ch1) underflow Signal Enable */ + uint8_t : 2; + } VBTWTER_b; + }; + + union + { + __IOM uint8_t VBTWEGR; /*!< (@ 0x000004BE) VBATT Wakeup Trigger source Edge Register */ + + struct + { + __IOM uint8_t VCH0EG : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Source Edge Select */ + __IOM uint8_t VCH1EG : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Source Edge Select */ + __IOM uint8_t VCH2EG : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Source Edge Select */ + uint8_t : 5; + } VBTWEGR_b; + }; + + union + { + __IOM uint8_t VBTWFR; /*!< (@ 0x000004BF) VBATT Wakeup trigger source Flag Register */ + + struct + { + __IOM uint8_t VCH0F : 1; /*!< [0..0] VBATWIO0 Wakeup Trigger Flag */ + __IOM uint8_t VCH1F : 1; /*!< [1..1] VBATWIO1 Wakeup Trigger Flag */ + __IOM uint8_t VCH2F : 1; /*!< [2..2] VBATWIO2 Wakeup Trigger Flag */ + __IOM uint8_t VRTCIF : 1; /*!< [3..3] VBATT RTC-Interval Wakeup Trigger Flag */ + __IOM uint8_t VRTCAF : 1; /*!< [4..4] VBATT RTC-Alarm Wakeup Trigger Flag */ + __IOM uint8_t VAGTUF : 1; /*!< [5..5] AGT(ch1) underflow VBATT Wakeup Trigger Flag */ + uint8_t : 2; + } VBTWFR_b; + }; + + union + { + __IOM uint8_t VBTBER; /*!< (@ 0x000004C0) VBATT Backup Enable Register */ + + struct + { + uint8_t : 3; + __IOM uint8_t VBAE : 1; /*!< [3..3] VBATT backup register access enable bit */ + uint8_t : 4; + } VBTBER_b; + }; + __IM uint8_t RESERVED59; + __IM uint16_t RESERVED60; + __IM uint32_t RESERVED61[15]; + + union + { + __IOM uint8_t VBTBKR[512]; /*!< (@ 0x00000500) VBATT Backup Register [0..511] */ + + struct + { + __IOM uint8_t VBTBKR : 8; /*!< [7..0] VBTBKR is a 512-byte readable/writable register to store + * data powered by VBATT.The value of this register is retained + * even when VCC is not powered but VBATT is powered.VBTBKR + * is initialized by VBATT selected voltage power-on-reset. */ + } VBTBKR_b[512]; + }; +} R_SYSTEM_Type; /*!< Size = 1792 (0x700) */ + +/* =========================================================================================================================== */ +/* ================ R_TRNG ================ */ +/* =========================================================================================================================== */ + +/** + * @brief True Random Number Generator (R_TRNG) + */ + +typedef struct /*!< (@ 0x400D1000) R_TRNG Structure */ +{ + union + { + __IM uint8_t TRNGSDR; /*!< (@ 0x00000000) TRNG SEED Data Register */ + + struct + { + __IM uint8_t SDATA : 8; /*!< [7..0] When RDRDY bit is 1, these bits hold the generated SEED. + * When RDRDY bit is 0, these bits are read as 00h.The SEED + * is generated as 32-bit data. When TRNGSDR is read 4 times + * while RDRDY = 1, SEED reading is completed and RDRDY bit + * changes to 0 */ + } TRNGSDR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t TRNGSCR0; /*!< (@ 0x00000002) TRNG SEED Command Register 0 */ + + struct + { + uint8_t : 2; + __OM uint8_t SGSTART : 1; /*!< [2..2] SEED Generation Start */ + __IOM uint8_t SGCEN : 1; /*!< [3..3] SEED Generation Circuit Enable */ + uint8_t : 3; + __IM uint8_t RDRDY : 1; /*!< [7..7] When SEED geenration is completed, this bit changes to + * 0 */ + } TRNGSCR0_b; + }; + + union + { + __IOM uint8_t TRNGSCR1; /*!< (@ 0x00000003) TRNG SEED Command Register 1 */ + + struct + { + __IOM uint8_t INTEN : 1; /*!< [0..0] TRNG Interrupt Enable */ + uint8_t : 7; + } TRNGSCR1_b; + }; +} R_TRNG_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN) + */ + +typedef struct /*!< (@ 0x407EC000) R_TSN Structure */ +{ + __IM uint16_t RESERVED[276]; + + union + { + __IM uint16_t TSCDR; /*!< (@ 0x00000228) Temperature Sensor Calibration Data Register */ + + struct + { + union + { + __IM uint8_t TSCDRL; /*!< (@ 0x00000228) Temperature Sensor Calibration Data Register + * L */ + + struct + { + __IM uint8_t TSCDRL : 8; /*!< [7..0] The calibration data stores the lower 8 bits of the convertedvalue. */ + } TSCDRL_b; + }; + + union + { + __IM uint8_t TSCDRH; /*!< (@ 0x00000229) Temperature Sensor Calibration Data Register + * H */ + + struct + { + __IM uint8_t TSCDRH : 8; /*!< [7..0] The calibration data stores the higher 8 bits of the + * convertedvalue. */ + } TSCDRH_b; + }; + }; + }; + __IM uint16_t TSCDRR; /*!< (@ 0x0000022A) Temperature Sensor Calibration Data Register + * (Room Temperature) */ +} R_TSN_Type; /*!< Size = 556 (0x22c) */ + +/* =========================================================================================================================== */ +/* ================ R_USB_FS0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief USB 2.0 Module (R_USB_FS0) + */ + +typedef struct /*!< (@ 0x40090000) R_USB_FS0 Structure */ +{ + union + { + __IOM uint16_t SYSCFG; /*!< (@ 0x00000000) System Configuration Control Register */ + + struct + { + __IOM uint16_t USBE : 1; /*!< [0..0] USB Operation Enable */ + uint16_t : 2; + __IOM uint16_t DMRPU : 1; /*!< [3..3] D- Line Resistor Control */ + __IOM uint16_t DPRPU : 1; /*!< [4..4] D+ Line Resistor Control */ + __IOM uint16_t DRPD : 1; /*!< [5..5] D+/D- Line Resistor Control */ + __IOM uint16_t DCFM : 1; /*!< [6..6] Controller Function Select */ + uint16_t : 1; + __IOM uint16_t CNEN : 1; /*!< [8..8] CNEN Single End Receiver Enable */ + uint16_t : 1; + __IOM uint16_t SCKE : 1; /*!< [10..10] USB Clock Enable */ + uint16_t : 5; + } SYSCFG_b; + }; + + union + { + __IOM uint16_t BUSWAIT; /*!< (@ 0x00000002) CPU Bus Wait Register */ + + struct + { + __IOM uint16_t BWAIT : 4; /*!< [3..0] CPU Bus Access Wait Specification BWAIT waits (BWAIT+2 + * access cycles) */ + uint16_t : 12; + } BUSWAIT_b; + }; + + union + { + __IM uint16_t SYSSTS0; /*!< (@ 0x00000004) System Configuration Status Register 0 */ + + struct + { + __IM uint16_t LNST : 2; /*!< [1..0] USB Data Line Status Monitor */ + __IM uint16_t IDMON : 1; /*!< [2..2] External ID0 Input Pin Monitor */ + uint16_t : 2; + __IM uint16_t SOFEA : 1; /*!< [5..5] SOF Active Monitor While Host Controller Function is + * Selected. */ + __IM uint16_t HTACT : 1; /*!< [6..6] USB Host Sequencer Status Monitor */ + uint16_t : 7; + __IM uint16_t OVCMON : 2; /*!< [15..14] External USB0_OVRCURA/ USB0_OVRCURB Input Pin MonitorThe + * OCVMON[1] bit indicates the status of the USBHS_OVRCURA + * pin. The OCVMON[0] bit indicates the status of the USBHS_OVRCURB + * pin. */ + } SYSSTS0_b; + }; + + union + { + __IM uint16_t PLLSTA; /*!< (@ 0x00000006) PLL Status Register */ + + struct + { + __IM uint16_t PLLLOCK : 1; /*!< [0..0] PLL Lock Flag */ + uint16_t : 15; + } PLLSTA_b; + }; + + union + { + __IOM uint16_t DVSTCTR0; /*!< (@ 0x00000008) Device State Control Register 0 */ + + struct + { + __IM uint16_t RHST : 3; /*!< [2..0] USB Bus Reset Status */ + uint16_t : 1; + __IOM uint16_t UACT : 1; /*!< [4..4] USB Bus Enable */ + __IOM uint16_t RESUME : 1; /*!< [5..5] Resume Output */ + __IOM uint16_t USBRST : 1; /*!< [6..6] USB Bus Reset Output */ + __IOM uint16_t RWUPE : 1; /*!< [7..7] Wakeup Detection Enable */ + __IOM uint16_t WKUP : 1; /*!< [8..8] Wakeup Output */ + __IOM uint16_t VBUSEN : 1; /*!< [9..9] USB_VBUSEN Output Pin Control */ + __IOM uint16_t EXICEN : 1; /*!< [10..10] USB_EXICEN Output Pin Control */ + __IOM uint16_t HNPBTOA : 1; /*!< [11..11] Host Negotiation Protocol (HNP) Control This bit is + * used when switching from device B to device A while in + * OTG mode. If the HNPBTOA bit is 1, the internal function + * control keeps the suspended state until the HNP processing + * ends even though SYSCFG.DPRPU = 0 or SYSCFG.DCFM = 1 is + * set. */ + uint16_t : 4; + } DVSTCTR0_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t TESTMODE; /*!< (@ 0x0000000C) USB Test Mode Register */ + + struct + { + __IOM uint16_t UTST : 4; /*!< [3..0] Test Mode */ + uint16_t : 12; + } TESTMODE_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t CFIFO; /*!< (@ 0x00000014) CFIFO Port Register */ + + struct + { + union + { + __IOM uint16_t CFIFOL; /*!< (@ 0x00000014) CFIFO Port Register L */ + __IOM uint8_t CFIFOLL; /*!< (@ 0x00000014) CFIFO Port Register LL */ + }; + + union + { + __IOM uint16_t CFIFOH; /*!< (@ 0x00000016) CFIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED3; + __IOM uint8_t CFIFOHH; /*!< (@ 0x00000017) CFIFO Port Register HH */ + }; + }; + }; + }; + + union + { + __IOM uint32_t D0FIFO; /*!< (@ 0x00000018) D0FIFO Port Register */ + + struct + { + union + { + __IOM uint16_t D0FIFOL; /*!< (@ 0x00000018) D0FIFO Port Register L */ + __IOM uint8_t D0FIFOLL; /*!< (@ 0x00000018) D0FIFO Port Register LL */ + }; + + union + { + __IOM uint16_t D0FIFOH; /*!< (@ 0x0000001A) D0FIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED4; + __IOM uint8_t D0FIFOHH; /*!< (@ 0x0000001B) D0FIFO Port Register HH */ + }; + }; + }; + }; + + union + { + __IOM uint32_t D1FIFO; /*!< (@ 0x0000001C) D1FIFO Port Register */ + + struct + { + union + { + __IOM uint16_t D1FIFOL; /*!< (@ 0x0000001C) D1FIFO Port Register L */ + __IOM uint8_t D1FIFOLL; /*!< (@ 0x0000001C) D1FIFO Port Register LL */ + }; + + union + { + __IOM uint16_t D1FIFOH; /*!< (@ 0x0000001E) D1FIFO Port Register H */ + + struct + { + __IM uint8_t RESERVED5; + __IOM uint8_t D1FIFOHH; /*!< (@ 0x0000001F) D1FIFO Port Register HH */ + }; + }; + }; + }; + + union + { + __IOM uint16_t CFIFOSEL; /*!< (@ 0x00000020) CFIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] CFIFO Port Access Pipe Specification */ + uint16_t : 1; + __IOM uint16_t ISEL : 1; /*!< [5..5] CFIFO Port Access Direction When DCP is Selected */ + uint16_t : 2; + __IOM uint16_t BIGEND : 1; /*!< [8..8] CFIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] CFIFO Port Access Bit Width */ + uint16_t : 2; + __IOM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } CFIFOSEL_b; + }; + + union + { + __IOM uint16_t CFIFOCTR; /*!< (@ 0x00000022) CFIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __OM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } CFIFOCTR_b; + }; + __IM uint32_t RESERVED6; + + union + { + __IOM uint16_t D0FIFOSEL; /*!< (@ 0x00000028) D0FIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __OM uint16_t REW : 1; /*!< [14..14] Buffer Pointer RewindNote: Only 0 can be read. */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D0FIFOSEL_b; + }; + + union + { + __IOM uint16_t D0FIFOCTR; /*!< (@ 0x0000002A) D0FIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D0FIFOCTR_b; + }; + + union + { + __IOM uint16_t D1FIFOSEL; /*!< (@ 0x0000002C) D1FIFO Port Select Register */ + + struct + { + __IOM uint16_t CURPIPE : 4; /*!< [3..0] FIFO Port Access Pipe Specification */ + uint16_t : 4; + __IOM uint16_t BIGEND : 1; /*!< [8..8] FIFO Port Endian Control */ + uint16_t : 1; + __IOM uint16_t MBW : 2; /*!< [11..10] FIFO Port Access Bit Width */ + __IOM uint16_t DREQE : 1; /*!< [12..12] DMA/DTC Transfer Request Enable */ + __IOM uint16_t DCLRM : 1; /*!< [13..13] Auto Buffer Memory Clear Mode Accessed after Specified + * Pipe Data is Read */ + __OM uint16_t REW : 1; /*!< [14..14] Buffer Pointer Rewind */ + __IOM uint16_t RCNT : 1; /*!< [15..15] Read Count Mode */ + } D1FIFOSEL_b; + }; + + union + { + __IOM uint16_t D1FIFOCTR; /*!< (@ 0x0000002E) D1FIFO Port Control Register */ + + struct + { + __IM uint16_t DTLN : 12; /*!< [11..0] Receive Data LengthIndicates the length of the receive + * data. */ + uint16_t : 1; + __IM uint16_t FRDY : 1; /*!< [13..13] FIFO Port Ready */ + __IOM uint16_t BCLR : 1; /*!< [14..14] CPU Buffer ClearNote: Only 0 can be read. */ + __IOM uint16_t BVAL : 1; /*!< [15..15] Buffer Memory Valid Flag */ + } D1FIFOCTR_b; + }; + + union + { + __IOM uint16_t INTENB0; /*!< (@ 0x00000030) Interrupt Enable Register 0 */ + + struct + { + uint16_t : 8; + __IOM uint16_t BRDYE : 1; /*!< [8..8] Buffer Ready Interrupt Enable */ + __IOM uint16_t NRDYE : 1; /*!< [9..9] Buffer Not Ready Response Interrupt Enable */ + __IOM uint16_t BEMPE : 1; /*!< [10..10] Buffer Empty Interrupt Enable */ + __IOM uint16_t CTRE : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Enable */ + __IOM uint16_t DVSE : 1; /*!< [12..12] Device State Transition Interrupt Enable */ + __IOM uint16_t SOFE : 1; /*!< [13..13] Frame Number Update Interrupt Enable */ + __IOM uint16_t RSME : 1; /*!< [14..14] Resume Interrupt Enable */ + __IOM uint16_t VBSE : 1; /*!< [15..15] VBUS Interrupt Enable */ + } INTENB0_b; + }; + + union + { + __IOM uint16_t INTENB1; /*!< (@ 0x00000032) Interrupt Enable Register 1 */ + + struct + { + __IOM uint16_t PDDETINTE0 : 1; /*!< [0..0] PDDETINT0 Detection Interrupt Enable */ + uint16_t : 3; + __IOM uint16_t SACKE : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Enable */ + __IOM uint16_t SIGNE : 1; /*!< [5..5] Setup Transaction Error Interrupt Enable */ + __IOM uint16_t EOFERRE : 1; /*!< [6..6] EOF Error Detection Interrupt Enable */ + uint16_t : 4; + __IOM uint16_t ATTCHE : 1; /*!< [11..11] Connection Detection Interrupt Enable */ + __IOM uint16_t DTCHE : 1; /*!< [12..12] Disconnection Detection Interrupt Enable */ + uint16_t : 1; + __IOM uint16_t BCHGE : 1; /*!< [14..14] USB Bus Change Interrupt Enable */ + __IOM uint16_t OVRCRE : 1; /*!< [15..15] Overcurrent Input Change Interrupt Enable */ + } INTENB1_b; + }; + __IM uint16_t RESERVED7; + + union + { + __IOM uint16_t BRDYENB; /*!< (@ 0x00000036) BRDY Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPE0BRDYE : 1; /*!< [0..0] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BRDYE : 1; /*!< [1..1] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BRDYE : 1; /*!< [2..2] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BRDYE : 1; /*!< [3..3] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BRDYE : 1; /*!< [4..4] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BRDYE : 1; /*!< [5..5] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BRDYE : 1; /*!< [6..6] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BRDYE : 1; /*!< [7..7] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BRDYE : 1; /*!< [8..8] BRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BRDYE : 1; /*!< [9..9] BRDY Interrupt Enable for PIPE */ + uint16_t : 6; + } BRDYENB_b; + }; + + union + { + __IOM uint16_t NRDYENB; /*!< (@ 0x00000038) NRDY Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPE0NRDYE : 1; /*!< [0..0] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1NRDYE : 1; /*!< [1..1] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2NRDYE : 1; /*!< [2..2] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3NRDYE : 1; /*!< [3..3] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4NRDYE : 1; /*!< [4..4] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5NRDYE : 1; /*!< [5..5] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6NRDYE : 1; /*!< [6..6] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7NRDYE : 1; /*!< [7..7] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8NRDYE : 1; /*!< [8..8] NRDY Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9NRDYE : 1; /*!< [9..9] NRDY Interrupt Enable for PIPE */ + uint16_t : 6; + } NRDYENB_b; + }; + + union + { + __IOM uint16_t BEMPENB; /*!< (@ 0x0000003A) BEMP Interrupt Enable Register */ + + struct + { + __IOM uint16_t PIPE0BEMPE : 1; /*!< [0..0] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE1BEMPE : 1; /*!< [1..1] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE2BEMPE : 1; /*!< [2..2] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE3BEMPE : 1; /*!< [3..3] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE4BEMPE : 1; /*!< [4..4] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE5BEMPE : 1; /*!< [5..5] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE6BEMPE : 1; /*!< [6..6] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE7BEMPE : 1; /*!< [7..7] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE8BEMPE : 1; /*!< [8..8] BEMP Interrupt Enable for PIPE */ + __IOM uint16_t PIPE9BEMPE : 1; /*!< [9..9] BEMP Interrupt Enable for PIPE */ + uint16_t : 6; + } BEMPENB_b; + }; + + union + { + __IOM uint16_t SOFCFG; /*!< (@ 0x0000003C) SOF Output Configuration Register */ + + struct + { + uint16_t : 4; + __IM uint16_t EDGESTS : 1; /*!< [4..4] Edge Interrupt Output Status Monitor */ + __IOM uint16_t INTL : 1; /*!< [5..5] Interrupt Output Sense Select */ + __IOM uint16_t BRDYM : 1; /*!< [6..6] BRDY Interrupt Status Clear Timing */ + uint16_t : 1; + __IOM uint16_t TRNENSEL : 1; /*!< [8..8] Transaction-Enabled Time Select */ + uint16_t : 7; + } SOFCFG_b; + }; + + union + { + __IOM uint16_t PHYSET; /*!< (@ 0x0000003E) PHY Setting Register */ + + struct + { + __IOM uint16_t DIRPD : 1; /*!< [0..0] Power-Down Control */ + __IOM uint16_t PLLRESET : 1; /*!< [1..1] PLL Reset Control */ + uint16_t : 1; + __IOM uint16_t CDPEN : 1; /*!< [3..3] Charging Downstream Port Enable */ + __IOM uint16_t CLKSEL : 2; /*!< [5..4] Input System Clock Frequency */ + uint16_t : 2; + __IOM uint16_t REPSEL : 2; /*!< [9..8] Terminating Resistance Adjustment Cycle */ + uint16_t : 1; + __IOM uint16_t REPSTART : 1; /*!< [11..11] Forcibly Start Terminating Resistance Adjustment */ + uint16_t : 3; + __IOM uint16_t HSEB : 1; /*!< [15..15] CL-Only Mode */ + } PHYSET_b; + }; + + union + { + __IOM uint16_t INTSTS0; /*!< (@ 0x00000040) Interrupt Status Register 0 */ + + struct + { + __IM uint16_t CTSQ : 3; /*!< [2..0] Control Transfer Stage */ + __IOM uint16_t VALID : 1; /*!< [3..3] USB Request Reception */ + __IM uint16_t DVSQ : 3; /*!< [6..4] Device State */ + __IM uint16_t VBSTS : 1; /*!< [7..7] VBUS Input Status */ + __IM uint16_t BRDY : 1; /*!< [8..8] Buffer Ready Interrupt Status */ + __IM uint16_t NRDY : 1; /*!< [9..9] Buffer Not Ready Interrupt Status */ + __IM uint16_t BEMP : 1; /*!< [10..10] Buffer Empty Interrupt Status */ + __IOM uint16_t CTRT : 1; /*!< [11..11] Control Transfer Stage Transition Interrupt Status */ + __IOM uint16_t DVST : 1; /*!< [12..12] Device State Transition Interrupt Status */ + __IOM uint16_t SOFR : 1; /*!< [13..13] Frame Number Refresh Interrupt Status */ + __IOM uint16_t RESM : 1; /*!< [14..14] Resume Interrupt Status */ + __IOM uint16_t VBINT : 1; /*!< [15..15] VBUS Interrupt Status */ + } INTSTS0_b; + }; + + union + { + __IOM uint16_t INTSTS1; /*!< (@ 0x00000042) Interrupt Status Register 1 */ + + struct + { + __IOM uint16_t PDDETINT0 : 1; /*!< [0..0] PDDET0 Detection Interrupt Status */ + uint16_t : 3; + __IOM uint16_t SACK : 1; /*!< [4..4] Setup Transaction Normal Response Interrupt Status */ + __IOM uint16_t SIGN : 1; /*!< [5..5] Setup Transaction Error Interrupt Status */ + __IOM uint16_t EOFERR : 1; /*!< [6..6] EOF Error Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t LPMEND : 1; /*!< [8..8] LPM Transaction End Interrupt Status */ + __IOM uint16_t L1RSMEND : 1; /*!< [9..9] L1 Resume End Interrupt Status */ + uint16_t : 1; + __IOM uint16_t ATTCH : 1; /*!< [11..11] ATTCH Interrupt Status */ + __IOM uint16_t DTCH : 1; /*!< [12..12] USB Disconnection Detection Interrupt Status */ + uint16_t : 1; + __IOM uint16_t BCHG : 1; /*!< [14..14] USB Bus Change Interrupt Status */ + __IOM uint16_t OVRCR : 1; /*!< [15..15] Overcurrent Input Change Interrupt Status */ + } INTSTS1_b; + }; + __IM uint16_t RESERVED8; + + union + { + __IOM uint16_t BRDYSTS; /*!< (@ 0x00000046) BRDY Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPE0BRDY : 1; /*!< [0..0] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BRDY : 1; /*!< [1..1] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BRDY : 1; /*!< [2..2] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BRDY : 1; /*!< [3..3] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BRDY : 1; /*!< [4..4] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BRDY : 1; /*!< [5..5] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BRDY : 1; /*!< [6..6] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BRDY : 1; /*!< [7..7] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BRDY : 1; /*!< [8..8] BRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BRDY : 1; /*!< [9..9] BRDY Interrupt Status for PIPE */ + uint16_t : 6; + } BRDYSTS_b; + }; + + union + { + __IOM uint16_t NRDYSTS; /*!< (@ 0x00000048) NRDY Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPE0NRDY : 1; /*!< [0..0] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE1NRDY : 1; /*!< [1..1] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE2NRDY : 1; /*!< [2..2] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE3NRDY : 1; /*!< [3..3] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE4NRDY : 1; /*!< [4..4] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE5NRDY : 1; /*!< [5..5] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE6NRDY : 1; /*!< [6..6] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE7NRDY : 1; /*!< [7..7] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE8NRDY : 1; /*!< [8..8] NRDY Interrupt Status for PIPE */ + __IOM uint16_t PIPE9NRDY : 1; /*!< [9..9] NRDY Interrupt Status for PIPE */ + uint16_t : 6; + } NRDYSTS_b; + }; + + union + { + __IOM uint16_t BEMPSTS; /*!< (@ 0x0000004A) BEMP Interrupt Status Register */ + + struct + { + __IOM uint16_t PIPE0BEMP : 1; /*!< [0..0] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE1BEMP : 1; /*!< [1..1] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE2BEMP : 1; /*!< [2..2] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE3BEMP : 1; /*!< [3..3] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE4BEMP : 1; /*!< [4..4] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE5BEMP : 1; /*!< [5..5] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE6BEMP : 1; /*!< [6..6] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE7BEMP : 1; /*!< [7..7] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE8BEMP : 1; /*!< [8..8] BEMP Interrupt Status for PIPE */ + __IOM uint16_t PIPE9BEMP : 1; /*!< [9..9] BEMP Interrupt Status for PIPE */ + uint16_t : 6; + } BEMPSTS_b; + }; + + union + { + __IOM uint16_t FRMNUM; /*!< (@ 0x0000004C) Frame Number Register */ + + struct + { + __IM uint16_t FRNM : 11; /*!< [10..0] Frame NumberLatest frame number */ + uint16_t : 3; + __IOM uint16_t CRCE : 1; /*!< [14..14] Receive Data Error */ + __IOM uint16_t OVRN : 1; /*!< [15..15] Overrun/Underrun Detection Status */ + } FRMNUM_b; + }; + + union + { + __IOM uint16_t DVCHGR; /*!< (@ 0x0000004E) Device State Change Register */ + + struct + { + uint16_t : 15; + __IOM uint16_t DVCHG : 1; /*!< [15..15] Device State Change */ + } DVCHGR_b; + }; + + union + { + __IOM uint16_t USBADDR; /*!< (@ 0x00000050) USB Address Register */ + + struct + { + __IM uint16_t USBADDR : 7; /*!< [6..0] USB Address In device controller mode, these flags indicate + * the USB address assigned by the host when the USBHS processed + * the SET_ADDRESS request successfully. */ + uint16_t : 1; + __IOM uint16_t STSRECOV0 : 4; /*!< [11..8] Status Recovery */ + uint16_t : 4; + } USBADDR_b; + }; + __IM uint16_t RESERVED9; + + union + { + __IOM uint16_t USBREQ; /*!< (@ 0x00000054) USB Request Type Register */ + + struct + { + __IOM uint16_t BMREQUESTTYPE : 8; /*!< [7..0] Request TypeThese bits store the USB request bmRequestType + * value. */ + __IOM uint16_t BREQUEST : 8; /*!< [15..8] RequestThese bits store the USB request bRequest value. */ + } USBREQ_b; + }; + + union + { + __IOM uint16_t USBVAL; /*!< (@ 0x00000056) USB Request Value Register */ + + struct + { + __IOM uint16_t WVALUE : 16; /*!< [15..0] ValueThese bits store the USB request Value value. */ + } USBVAL_b; + }; + + union + { + __IOM uint16_t USBINDX; /*!< (@ 0x00000058) USB Request Index Register */ + + struct + { + __IOM uint16_t WINDEX : 16; /*!< [15..0] IndexThese bits store the USB request wIndex value. */ + } USBINDX_b; + }; + + union + { + __IOM uint16_t USBLENG; /*!< (@ 0x0000005A) USB Request Length Register */ + + struct + { + __IOM uint16_t WLENGTH : 16; /*!< [15..0] LengthThese bits store the USB request wLength value. */ + } USBLENG_b; + }; + + union + { + __IOM uint16_t DCPCFG; /*!< (@ 0x0000005C) DCP Configuration Register */ + + struct + { + uint16_t : 4; + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + __IOM uint16_t CNTMD : 1; /*!< [8..8] Continuous Transfer Mode */ + uint16_t : 7; + } DCPCFG_b; + }; + + union + { + __IOM uint16_t DCPMAXP; /*!< (@ 0x0000005E) DCP Maximum Packet Size Register */ + + struct + { + __IOM uint16_t MXPS : 7; /*!< [6..0] Maximum Packet SizeThese bits set the maximum amount + * of data (maximum packet size) in payloads for the DCP. */ + uint16_t : 5; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } DCPMAXP_b; + }; + + union + { + __IOM uint16_t DCPCTR; /*!< (@ 0x00000060) DCP Control Register */ + + struct + { + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + __IOM uint16_t CCPL : 1; /*!< [2..2] Control Transfer End Enable */ + uint16_t : 2; + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Monitor */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + uint16_t : 2; + __IOM uint16_t SUREQCLR : 1; /*!< [11..11] SUREQ Bit Clear */ + uint16_t : 2; + __IOM uint16_t SUREQ : 1; /*!< [14..14] Setup Token Transmission */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } DCPCTR_b; + }; + __IM uint16_t RESERVED10; + + union + { + __IOM uint16_t PIPESEL; /*!< (@ 0x00000064) Pipe Window Select Register */ + + struct + { + __IOM uint16_t PIPESEL : 4; /*!< [3..0] Pipe Window Select */ + uint16_t : 12; + } PIPESEL_b; + }; + __IM uint16_t RESERVED11; + + union + { + __IOM uint16_t PIPECFG; /*!< (@ 0x00000068) Pipe Configuration Register */ + + struct + { + __IOM uint16_t EPNUM : 4; /*!< [3..0] Endpoint NumberThese bits specify the endpoint number + * for the selected pipe.Setting 0000b means unused pipe. */ + __IOM uint16_t DIR : 1; /*!< [4..4] Transfer Direction */ + uint16_t : 2; + __IOM uint16_t SHTNAK : 1; /*!< [7..7] Pipe Disabled at End of Transfer */ + uint16_t : 1; + __IOM uint16_t DBLB : 1; /*!< [9..9] Double Buffer Mode */ + __IOM uint16_t BFRE : 1; /*!< [10..10] BRDY Interrupt Operation Specification */ + uint16_t : 3; + __IOM uint16_t TYPE : 2; /*!< [15..14] Transfer Type */ + } PIPECFG_b; + }; + __IM uint16_t RESERVED12; + + union + { + __IOM uint16_t PIPEMAXP; /*!< (@ 0x0000006C) Pipe Maximum Packet Size Register */ + + struct + { + __IOM uint16_t MXPS : 9; /*!< [8..0] Maximum Packet SizePIPE1 and PIPE2: 1 byte (001h) to + * 256 bytes (100h)PIPE3 to PIPE5: 8 bytes (008h), 16 bytes + * (010h), 32 bytes (020h), 64 bytes (040h) (Bits [8:7] and + * [2:0] are not provided.)PIPE6 to PIPE9: 1 byte (001h) to + * 64 bytes (040h) (Bits [8:7] are not provided.) */ + uint16_t : 3; + __IOM uint16_t DEVSEL : 4; /*!< [15..12] Device Select */ + } PIPEMAXP_b; + }; + + union + { + __IOM uint16_t PIPEPERI; /*!< (@ 0x0000006E) Pipe Cycle Control Register */ + + struct + { + __IOM uint16_t IITV : 3; /*!< [2..0] Interval Error Detection IntervalSpecifies the interval + * error detection timing for the selected pipe in terms of + * frames, which is expressed as nth power of 2. */ + uint16_t : 9; + __IOM uint16_t IFIS : 1; /*!< [12..12] Isochronous IN Buffer Flush */ + uint16_t : 3; + } PIPEPERI_b; + }; + + union + { + __IOM uint16_t PIPE_CTR[9]; /*!< (@ 0x00000070) Pipe [0..8] Control Register */ + + struct + { + __IOM uint16_t PID : 2; /*!< [1..0] Response PID */ + uint16_t : 3; + __IM uint16_t PBUSY : 1; /*!< [5..5] Pipe Busy */ + __IM uint16_t SQMON : 1; /*!< [6..6] Sequence Toggle Bit Confirmation */ + __IOM uint16_t SQSET : 1; /*!< [7..7] Sequence Toggle Bit Set */ + __IOM uint16_t SQCLR : 1; /*!< [8..8] Sequence Toggle Bit Clear */ + __IOM uint16_t ACLRM : 1; /*!< [9..9] Auto Buffer Clear Mode */ + __IOM uint16_t ATREPM : 1; /*!< [10..10] Auto Response Mode */ + uint16_t : 1; + __IM uint16_t CSSTS : 1; /*!< [12..12] CSSTS StatusThis bit indicates the CSPLIT status of + * Split Transaction of the relevant pipe */ + __IOM uint16_t CSCLR : 1; /*!< [13..13] CSPLIT Status ClearSet this bit to 1 when clearing + * the CSSTS bit of the relevant pipe */ + __IM uint16_t INBUFM : 1; /*!< [14..14] Transmit Buffer Monitor */ + __IM uint16_t BSTS : 1; /*!< [15..15] Buffer Status */ + } PIPE_CTR_b[9]; + }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14[3]; + __IOM R_USB_FS0_PIPE_TR_Type PIPE_TR[5]; /*!< (@ 0x00000090) Pipe Transaction Counter Registers */ + __IM uint32_t RESERVED15[3]; + + union + { + __IOM uint16_t USBBCCTRL0; /*!< (@ 0x000000B0) BC Control Register 0 */ + + struct + { + __IOM uint16_t RPDME0 : 1; /*!< [0..0] D- Pin Pull-Down Control */ + __IOM uint16_t IDPSRCE0 : 1; /*!< [1..1] D+ Pin IDPSRC Output Control */ + __IOM uint16_t IDMSINKE0 : 1; /*!< [2..2] D- Pin 0.6 V Input Detection (Comparator and Sink) Control */ + __IOM uint16_t VDPSRCE0 : 1; /*!< [3..3] D+ Pin VDPSRC (0.6 V) Output Control */ + __IOM uint16_t IDPSINKE0 : 1; /*!< [4..4] D+ Pin 0.6 V Input Detection (Comparator and Sink) Control */ + __IOM uint16_t VDMSRCE0 : 1; /*!< [5..5] D- Pin VDMSRC (0.6 V) Output Control */ + uint16_t : 1; + __IOM uint16_t BATCHGE0 : 1; /*!< [7..7] BC (Battery Charger) Function Ch0 General Enable Control */ + __IM uint16_t CHGDETSTS0 : 1; /*!< [8..8] D- Pin 0.6 V Input Detection Status */ + __IM uint16_t PDDETSTS0 : 1; /*!< [9..9] D+ Pin 0.6 V Input Detection Status */ + uint16_t : 6; + } USBBCCTRL0_b; + }; + __IM uint16_t RESERVED16; + __IM uint32_t RESERVED17[4]; + + union + { + __IOM uint16_t UCKSEL; /*!< (@ 0x000000C4) USB Clock Selection Register */ + + struct + { + __IOM uint16_t UCKSELC : 1; /*!< [0..0] USB Clock Selection */ + uint16_t : 15; + } UCKSEL_b; + }; + __IM uint16_t RESERVED18; + __IM uint32_t RESERVED19; + + union + { + __IOM uint16_t USBMC; /*!< (@ 0x000000CC) USB Module Control Register */ + + struct + { + __IOM uint16_t VDDUSBE : 1; /*!< [0..0] USB Reference Power Supply Circuit On/Off Control */ + uint16_t : 6; + __IOM uint16_t VDCEN : 1; /*!< [7..7] USB Regulator On/Off Control */ + uint16_t : 8; + } USBMC_b; + }; + __IM uint16_t RESERVED20; + + union + { + __IOM uint16_t DEVADD[10]; /*!< (@ 0x000000D0) Device Address Configuration Register */ + + struct + { + uint16_t : 6; + __IOM uint16_t USBSPD : 2; /*!< [7..6] Transfer Speed of Communication Target Device */ + __IOM uint16_t HUBPORT : 3; /*!< [10..8] Communication Target Connecting Hub Port */ + __IOM uint16_t UPPHUB : 4; /*!< [14..11] Communication Target Connecting Hub Register */ + uint16_t : 1; + } DEVADD_b[10]; + }; + __IM uint32_t RESERVED21[3]; + + union + { + __IOM uint32_t PHYSLEW; /*!< (@ 0x000000F0) PHY Cross Point Adjustment Register */ + + struct + { + __IOM uint32_t SLEWR00 : 1; /*!< [0..0] Receiver Cross Point Adjustment 00 */ + __IOM uint32_t SLEWR01 : 1; /*!< [1..1] Receiver Cross Point Adjustment 01 */ + __IOM uint32_t SLEWF00 : 1; /*!< [2..2] Receiver Cross Point Adjustment 00 */ + __IOM uint32_t SLEWF01 : 1; /*!< [3..3] Receiver Cross Point Adjustment 01 */ + uint32_t : 28; + } PHYSLEW_b; + }; + __IM uint32_t RESERVED22[3]; + + union + { + __IOM uint16_t LPCTRL; /*!< (@ 0x00000100) Low Power Control Register */ + + struct + { + uint16_t : 7; + __IOM uint16_t HWUPM : 1; /*!< [7..7] Resume Return Mode Setting */ + uint16_t : 8; + } LPCTRL_b; + }; + + union + { + __IOM uint16_t LPSTS; /*!< (@ 0x00000102) Low Power Status Register */ + + struct + { + uint16_t : 14; + __IOM uint16_t SUSPENDM : 1; /*!< [14..14] UTMI SuspendM Control */ + uint16_t : 1; + } LPSTS_b; + }; + __IM uint32_t RESERVED23[15]; + + union + { + __IOM uint16_t BCCTRL; /*!< (@ 0x00000140) Battery Charging Control Register */ + + struct + { + __IOM uint16_t IDPSRCE : 1; /*!< [0..0] IDPSRC Control */ + __IOM uint16_t IDMSINKE : 1; /*!< [1..1] IDMSINK Control */ + __IOM uint16_t VDPSRCE : 1; /*!< [2..2] VDPSRC Control */ + __IOM uint16_t IDPSINKE : 1; /*!< [3..3] IDPSINK Control */ + __IOM uint16_t VDMSRCE : 1; /*!< [4..4] VDMSRC Control */ + __IOM uint16_t DCPMODE : 1; /*!< [5..5] DCP Mode Control */ + uint16_t : 2; + __IM uint16_t CHGDETSTS : 1; /*!< [8..8] CHGDET Status */ + __IM uint16_t PDDETSTS : 1; /*!< [9..9] PDDET Status */ + uint16_t : 6; + } BCCTRL_b; + }; + __IM uint16_t RESERVED24; + + union + { + __IOM uint16_t PL1CTRL1; /*!< (@ 0x00000144) Function L1 Control Register 1 */ + + struct + { + __IOM uint16_t L1RESPEN : 1; /*!< [0..0] L1 Response Enable */ + __IOM uint16_t L1RESPMD : 2; /*!< [2..1] L1 Response Mode */ + __IOM uint16_t L1NEGOMD : 1; /*!< [3..3] L1 Response Negotiation Control.NOTE: This bit is valid + * only when the L1RESPMD[1:0] value is 2'b11. */ + __IM uint16_t DVSQ : 4; /*!< [7..4] DVSQ Extension.DVSQ[3] is Mirror of DVSQ[2:0] in INTSTS0.Indicates + * the L1 state together with the device state bits DVSQ[2:0]. */ + __IOM uint16_t HIRDTHR : 4; /*!< [11..8] L1 Response Negotiation Threshold ValueHIRD threshold + * value used for L1NEGOMD.The format is the same as the HIRD + * field in HL1CTRL. */ + uint16_t : 2; + __IOM uint16_t L1EXTMD : 1; /*!< [14..14] PHY Control Mode at L1 Return */ + uint16_t : 1; + } PL1CTRL1_b; + }; + + union + { + __IOM uint16_t PL1CTRL2; /*!< (@ 0x00000146) Function L1 Control Register 2 */ + + struct + { + uint16_t : 8; + __IOM uint16_t HIRDMON : 4; /*!< [11..8] HIRD Value Monitor */ + __IOM uint16_t RWEMON : 1; /*!< [12..12] RWE Value Monitor */ + uint16_t : 3; + } PL1CTRL2_b; + }; + + union + { + __IOM uint16_t HL1CTRL1; /*!< (@ 0x00000148) Host L1 Control Register 1 */ + + struct + { + __IOM uint16_t L1REQ : 1; /*!< [0..0] L1 Transition Request */ + __IM uint16_t L1STATUS : 2; /*!< [2..1] L1 Request Completion Status */ + uint16_t : 13; + } HL1CTRL1_b; + }; + + union + { + __IOM uint16_t HL1CTRL2; /*!< (@ 0x0000014A) Host L1 Control Register 2 */ + + struct + { + __IOM uint16_t L1ADDR : 4; /*!< [3..0] LPM Token DeviceAddressThese bits specify the value to + * be set in the ADDR field of LPM token. */ + uint16_t : 4; + __IOM uint16_t HIRD : 4; /*!< [11..8] LPM Token HIRD */ + __IOM uint16_t L1RWE : 1; /*!< [12..12] LPM Token L1 RemoteWake EnableThese bits specify the + * value to be set in the RWE field of LPM token. */ + uint16_t : 2; + __IOM uint16_t BESL : 1; /*!< [15..15] BESL & Alternate HIRDThis bit selects the K-State drive + * period at the time of L1 Resume. */ + } HL1CTRL2_b; + }; + __IM uint32_t RESERVED25[5]; + + union + { + __IM uint32_t DPUSR0R; /*!< (@ 0x00000160) Deep Standby USB Transceiver Control/Pin Monitor + * Register */ + + struct + { + uint32_t : 20; + __IM uint32_t DOVCAHM : 1; /*!< [20..20] OVRCURA InputIndicates OVRCURA input signal on the + * HS side of USB port. */ + __IM uint32_t DOVCBHM : 1; /*!< [21..21] OVRCURB InputIndicates OVRCURB input signal on the + * HS side of USB port. */ + uint32_t : 1; + __IM uint32_t DVBSTSHM : 1; /*!< [23..23] VBUS InputIndicates VBUS input signal on the HS side + * of USB port. */ + uint32_t : 8; + } DPUSR0R_b; + }; + + union + { + __IOM uint32_t DPUSR1R; /*!< (@ 0x00000164) Deep Standby USB Suspend/Resume Interrupt Register */ + + struct + { + uint32_t : 4; + __IOM uint32_t DOVCAHE : 1; /*!< [4..4] OVRCURA Interrupt Enable Clear */ + __IOM uint32_t DOVCBHE : 1; /*!< [5..5] OVRCURB Interrupt Enable Clear */ + uint32_t : 1; + __IOM uint32_t DVBSTSHE : 1; /*!< [7..7] VBUS Interrupt Enable/Clear */ + uint32_t : 12; + __IM uint32_t DOVCAH : 1; /*!< [20..20] Indication of Return from OVRCURA Interrupt Source */ + __IM uint32_t DOVCBH : 1; /*!< [21..21] Indication of Return from OVRCURB Interrupt Source */ + uint32_t : 1; + __IM uint32_t DVBSTSH : 1; /*!< [23..23] Indication of Return from VBUS Interrupt Source */ + uint32_t : 8; + } DPUSR1R_b; + }; + + union + { + __IOM uint16_t DPUSR2R; /*!< (@ 0x00000168) Deep Standby USB Suspend/Resume Interrupt Register */ + + struct + { + __IM uint16_t DPINT : 1; /*!< [0..0] Indication of Return from DP Interrupt Source */ + __IM uint16_t DMINT : 1; /*!< [1..1] Indication of Return from DM Interrupt Source */ + uint16_t : 2; + __IM uint16_t DPVAL : 1; /*!< [4..4] DP InputIndicates DP input signal on the HS side of USB + * port. */ + __IM uint16_t DMVAL : 1; /*!< [5..5] DM InputIndicates DM input signal on the HS side of USB + * port. */ + uint16_t : 2; + __IOM uint16_t DPINTE : 1; /*!< [8..8] DP Interrupt Enable Clear */ + __IOM uint16_t DMINTE : 1; /*!< [9..9] DM Interrupt Enable Clear */ + uint16_t : 6; + } DPUSR2R_b; + }; + + union + { + __IOM uint16_t DPUSRCR; /*!< (@ 0x0000016A) Deep Standby USB Suspend/Resume Command Register */ + + struct + { + __IOM uint16_t FIXPHY : 1; /*!< [0..0] USB Transceiver Control Fix */ + __IOM uint16_t FIXPHYPD : 1; /*!< [1..1] USB Transceiver Control Fix for PLL */ + uint16_t : 14; + } DPUSRCR_b; + }; + __IM uint32_t RESERVED26[165]; + + union + { + __IOM uint32_t DPUSR0R_FS; /*!< (@ 0x00000400) Deep Software Standby USB Transceiver Control/Pin + * Monitor Register */ + + struct + { + __IOM uint32_t SRPC0 : 1; /*!< [0..0] USB Single End Receiver Control */ + __IOM uint32_t RPUE0 : 1; /*!< [1..1] DP Pull-Up Resistor Control */ + uint32_t : 1; + __IOM uint32_t DRPD0 : 1; /*!< [3..3] D+/D- Pull-Down Resistor Control */ + __IOM uint32_t FIXPHY0 : 1; /*!< [4..4] USB Transceiver Output Fix */ + uint32_t : 11; + __IM uint32_t DP0 : 1; /*!< [16..16] USB0 D+ InputIndicates the D+ input signal of the USB. */ + __IM uint32_t DM0 : 1; /*!< [17..17] USB D-InputIndicates the D- input signal of the USB. */ + uint32_t : 2; + __IM uint32_t DOVCA0 : 1; /*!< [20..20] USB OVRCURA InputIndicates the OVRCURA input signal + * of the USB. */ + __IM uint32_t DOVCB0 : 1; /*!< [21..21] USB OVRCURB InputIndicates the OVRCURB input signal + * of the USB. */ + uint32_t : 1; + __IM uint32_t DVBSTS0 : 1; /*!< [23..23] USB VBUS InputIndicates the VBUS input signal of the + * USB. */ + uint32_t : 8; + } DPUSR0R_FS_b; + }; + + union + { + __IOM uint32_t DPUSR1R_FS; /*!< (@ 0x00000404) Deep Software Standby USB Suspend/Resume Interrupt + * Register */ + + struct + { + __IOM uint32_t DPINTE0 : 1; /*!< [0..0] USB DP Interrupt Enable/Clear */ + __IOM uint32_t DMINTE0 : 1; /*!< [1..1] USB DM Interrupt Enable/Clear */ + uint32_t : 2; + __IOM uint32_t DOVRCRAE0 : 1; /*!< [4..4] USB OVRCURA Interrupt Enable/Clear */ + __IOM uint32_t DOVRCRBE0 : 1; /*!< [5..5] USB OVRCURB Interrupt Enable/Clear */ + uint32_t : 1; + __IOM uint32_t DVBSE0 : 1; /*!< [7..7] USB VBUS Interrupt Enable/Clear */ + uint32_t : 8; + __IM uint32_t DPINT0 : 1; /*!< [16..16] USB DP Interrupt Source Recovery */ + __IM uint32_t DMINT0 : 1; /*!< [17..17] USB DM Interrupt Source Recovery */ + uint32_t : 2; + __IM uint32_t DOVRCRA0 : 1; /*!< [20..20] USB OVRCURA Interrupt Source Recovery */ + __IM uint32_t DOVRCRB0 : 1; /*!< [21..21] USB OVRCURB Interrupt Source Recovery */ + uint32_t : 1; + __IM uint32_t DVBINT0 : 1; /*!< [23..23] USB VBUS Interrupt Source Recovery */ + uint32_t : 8; + } DPUSR1R_FS_b; + }; +} R_USB_FS0_Type; /*!< Size = 1032 (0x408) */ + +/* =========================================================================================================================== */ +/* ================ R_WDT ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Watchdog Timer (R_WDT) + */ + +typedef struct /*!< (@ 0x40044200) R_WDT Structure */ +{ + union + { + __IOM uint8_t WDTRR; /*!< (@ 0x00000000) WDT Refresh Register */ + + struct + { + __IOM uint8_t WDTRR : 8; /*!< [7..0] WDTRR is an 8-bit register that refreshes the down-counter + * of the WDT. */ + } WDTRR_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t WDTCR; /*!< (@ 0x00000002) WDT Control Register */ + + struct + { + __IOM uint16_t TOPS : 2; /*!< [1..0] Timeout Period Selection */ + uint16_t : 2; + __IOM uint16_t CKS : 4; /*!< [7..4] Clock Division Ratio Selection */ + __IOM uint16_t RPES : 2; /*!< [9..8] Window End Position Selection */ + uint16_t : 2; + __IOM uint16_t RPSS : 2; /*!< [13..12] Window Start Position Selection */ + uint16_t : 2; + } WDTCR_b; + }; + + union + { + __IOM uint16_t WDTSR; /*!< (@ 0x00000004) WDT Status Register */ + + struct + { + __IM uint16_t CNTVAL : 14; /*!< [13..0] Down-Counter Value */ + __IOM uint16_t UNDFF : 1; /*!< [14..14] Underflow Flag */ + __IOM uint16_t REFEF : 1; /*!< [15..15] Refresh Error Flag */ + } WDTSR_b; + }; + + union + { + __IOM uint8_t WDTRCR; /*!< (@ 0x00000006) WDT Reset Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t RSTIRQS : 1; /*!< [7..7] Reset Interrupt Request Selection */ + } WDTRCR_b; + }; + __IM uint8_t RESERVED1; + + union + { + __IOM uint8_t WDTCSTPR; /*!< (@ 0x00000008) WDT Count Stop Control Register */ + + struct + { + uint8_t : 7; + __IOM uint8_t SLCSTP : 1; /*!< [7..7] Sleep-Mode Count Stop Control */ + } WDTCSTPR_b; + }; + __IM uint8_t RESERVED2; + __IM uint16_t RESERVED3; +} R_WDT_Type; /*!< Size = 12 (0xc) */ + +/* =========================================================================================================================== */ +/* ================ R_AES ================ */ +/* =========================================================================================================================== */ + +/** + * @brief AES Engine (R_AES) + */ + +typedef struct /*!< (@ 0x400D0000) R_AES Structure */ +{ + union + { + __IOM uint16_t AESMOD; /*!< (@ 0x00000000) AES Mode Register */ + + struct + { + __IOM uint16_t MODEN : 1; /*!< [0..0] Read Request Enable */ + uint16_t : 7; + __IOM uint16_t RDRQEN : 1; /*!< [8..8] Read Request Enable */ + __IOM uint16_t WRRQEN : 1; /*!< [9..9] Write Request Enable */ + uint16_t : 6; + } AESMOD_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint32_t AESCMD; /*!< (@ 0x00000004) AES Command Register */ + + struct + { + __IOM uint32_t INVCIP : 1; /*!< [0..0] Select data encryption/decryption */ + __IOM uint32_t KEYLN : 1; /*!< [1..1] Select the Key Length */ + uint32_t : 2; + __IOM uint32_t CHAIN : 2; /*!< [5..4] Select the chaining mode */ + uint32_t : 2; + __IOM uint32_t STORESEL : 2; /*!< [9..8] Read Request Enable */ + uint32_t : 2; + __IOM uint32_t KEYSEL : 1; /*!< [12..12] Select the Key Register */ + uint32_t : 11; + __IM uint32_t DWRDY : 1; /*!< [24..24] This bit indicates that AESDW is ready to write or + * is writing */ + __IM uint32_t DRRDY : 1; /*!< [25..25] This bit indicates that AESDW is ready to read or is + * reading */ + __IM uint32_t CWRDY : 1; /*!< [26..26] This bit indicates that AESCMD is ready to write */ + __IM uint32_t IWRDY : 1; /*!< [27..27] This bit indicates that AESIVW is ready to write or + * is writing */ + __IM uint32_t IRRDY : 1; /*!< [28..28] This bit indicates that AESIVW is ready to read or + * is reading */ + __IM uint32_t KWRDY0 : 1; /*!< [29..29] This bit indicates that AESKW0 is ready to write or + * is writing */ + __IM uint32_t KWRDY1 : 1; /*!< [30..30] This bit indicates that AESKW1 is ready to write or + * is writing */ + __IM uint32_t ILOP : 1; /*!< [31..31] This bit shows that the relation of Key Register 0 + * and Key Register1 is not correct (for 256-bit key-length) */ + } AESCMD_b; + }; + __IOM uint32_t AESDW; /*!< (@ 0x00000008) AES Data Window Register */ + __IOM uint32_t AESIVW; /*!< (@ 0x0000000C) AES IV Window Register */ + __IOM uint32_t AESKW0; /*!< (@ 0x00000010) AES Key Window 0 Register */ + __IOM uint32_t AESKW1; /*!< (@ 0x00000014) AES Key Window 1 Register */ +} R_AES_Type; /*!< Size = 24 (0x18) */ + +/* =========================================================================================================================== */ +/* ================ R_AGTX0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Asynchronous General Purpose Timer (R_AGTX0) + */ + +typedef struct /*!< (@ 0x40084000) R_AGTX0 Structure */ +{ + union + { + __IOM R_AGTX0_AGT32_Type AGT32; /*!< (@ 0x00000000) AGTW (32-bit) peripheral registers */ + __IOM R_AGTX0_AGT16_Type AGT16; /*!< (@ 0x00000000) AGT (16-bit) peripheral registers */ + }; +} R_AGTX0_Type; /*!< Size = 20 (0x14) */ + +/** @} */ /* End of group Device_Peripheral_peripherals */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define R_ACMPHS0_BASE 0x40085000UL + #define R_ACMPHS1_BASE 0x40085100UL + #define R_ACMPHS2_BASE 0x40085200UL + #define R_ACMPHS3_BASE 0x40085300UL + #define R_ACMPHS4_BASE 0x40085400UL + #define R_ACMPHS5_BASE 0x40085500UL + #define R_ACMPLP_BASE 0x40085E00UL + #define R_ADC0_BASE 0x4005C000UL + #define R_ADC1_BASE 0x4005C200UL + #define R_BUS_BASE 0x40003000UL + #define R_CAC_BASE 0x40044600UL + #define R_CAN0_BASE 0x40050000UL + #define R_CAN1_BASE 0x40051000UL + #define R_CRC_BASE 0x40074000UL + #define R_CTSU_BASE 0x40081000UL + #define R_DAC_BASE 0x4005E000UL + #define R_DAC8_BASE 0x4009E000UL + #define R_DEBUG_BASE 0x4001B000UL + #define R_DOC_BASE 0x40054100UL + #define R_DTC_BASE 0x40005400UL + #define R_ELC_BASE 0x40041000UL + #define R_FACI_LP_BASE 0x407EC000UL + #define R_FCACHE_BASE 0x4001C000UL + #define R_GPT0_BASE 0x40078000UL + #define R_GPT1_BASE 0x40078100UL + #define R_GPT2_BASE 0x40078200UL + #define R_GPT3_BASE 0x40078300UL + #define R_GPT4_BASE 0x40078400UL + #define R_GPT5_BASE 0x40078500UL + #define R_GPT6_BASE 0x40078600UL + #define R_GPT7_BASE 0x40078700UL + #define R_GPT8_BASE 0x40078800UL + #define R_GPT9_BASE 0x40078900UL + #define R_GPT10_BASE 0x40078A00UL + #define R_GPT11_BASE 0x40078B00UL + #define R_GPT12_BASE 0x40078C00UL + #define R_GPT13_BASE 0x40078D00UL + #define R_GPT_OPS_BASE 0x40078FF0UL + #define R_GPT_POEG0_BASE 0x40042000UL + #define R_GPT_POEG1_BASE 0x40042100UL + #define R_GPT_POEG2_BASE 0x40042200UL + #define R_GPT_POEG3_BASE 0x40042300UL + #define R_ICU_BASE 0x40006000UL + #define R_IIC0_BASE 0x40053000UL + #define R_IIC1_BASE 0x40053100UL + #define R_IIC2_BASE 0x40053200UL + #define R_IWDT_BASE 0x40044400UL + #define R_KINT_BASE 0x40080000UL + #define R_MMF_BASE 0x40001000UL + #define R_MPU_MMPU_BASE 0x40000000UL + #define R_MPU_SMPU_BASE 0x40000C00UL + #define R_MPU_SPMON_BASE 0x40000D00UL + #define R_MSTP_BASE (0x40047000UL - 4UL) /* MSTPCRA is not located in R_MSTP so the base address must be moved so that MSTPCRB is located at 0x40047000. */ + #define R_OPAMP_BASE 0x400867F8UL + #define R_PORT0_BASE 0x40040000UL + #define R_PORT1_BASE 0x40040020UL + #define R_PORT2_BASE 0x40040040UL + #define R_PORT3_BASE 0x40040060UL + #define R_PORT4_BASE 0x40040080UL + #define R_PORT5_BASE 0x400400A0UL + #define R_PORT6_BASE 0x400400C0UL + #define R_PORT7_BASE 0x400400E0UL + #define R_PORT8_BASE 0x40040100UL + #define R_PORT9_BASE 0x40040120UL + #define R_PORT10_BASE 0x40040140UL + #define R_PORT11_BASE 0x40040160UL + #define R_PORT12_BASE 0x40040180UL + #define R_PORT13_BASE 0x400401A0UL + #define R_PORT14_BASE 0x400401C0UL + #define R_PFS_BASE 0x40040800UL + #define R_PMISC_BASE 0x40040D00UL + #define R_RTC_BASE 0x40044000UL + #define R_SCI0_BASE 0x40070000UL + #define R_SCI1_BASE 0x40070020UL + #define R_SCI2_BASE 0x40070040UL + #define R_SCI3_BASE 0x40070060UL + #define R_SCI4_BASE 0x40070080UL + #define R_SCI5_BASE 0x400700A0UL + #define R_SCI6_BASE 0x400700C0UL + #define R_SCI7_BASE 0x400700E0UL + #define R_SCI8_BASE 0x40070100UL + #define R_SCI9_BASE 0x40070120UL + #define R_SDADC0_BASE 0x4009C000UL + #define R_SPI0_BASE 0x40072000UL + #define R_SPI1_BASE 0x40072100UL + #define R_SPI2_BASE 0x40072200UL + #define R_SRAM_BASE 0x40002000UL + #define R_SYSTEM_BASE 0x4001E000UL + #define R_TRNG_BASE 0x400D1000UL + #define R_TSN_BASE 0x407EC000UL + #define R_USB_FS0_BASE 0x40090000UL + #define R_WDT_BASE 0x40044200UL + #define R_AES_BASE 0x400D0000UL + #define R_AGTX0_BASE 0x40084000UL + #define R_AGTX1_BASE 0x40084100UL + #define R_AGTX2_BASE 0x40084200UL + #define R_AGTX3_BASE 0x40084300UL + #define R_AGTX4_BASE 0x40084400UL + #define R_AGTX5_BASE 0x40084500UL + #define R_AGTX6_BASE 0x40084600UL + #define R_AGTX7_BASE 0x40084700UL + #define R_AGTX8_BASE 0x40084800UL + #define R_AGTX9_BASE 0x40084900UL + #define R_WDT1_BASE 0x40044300UL + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + + #define R_ACMPHS0 ((R_ACMPHS0_Type *) R_ACMPHS0_BASE) + #define R_ACMPHS1 ((R_ACMPHS0_Type *) R_ACMPHS1_BASE) + #define R_ACMPHS2 ((R_ACMPHS0_Type *) R_ACMPHS2_BASE) + #define R_ACMPHS3 ((R_ACMPHS0_Type *) R_ACMPHS3_BASE) + #define R_ACMPHS4 ((R_ACMPHS0_Type *) R_ACMPHS4_BASE) + #define R_ACMPHS5 ((R_ACMPHS0_Type *) R_ACMPHS5_BASE) + #define R_ACMPLP ((R_ACMPLP_Type *) R_ACMPLP_BASE) + #define R_ADC0 ((R_ADC0_Type *) R_ADC0_BASE) + #define R_ADC1 ((R_ADC0_Type *) R_ADC1_BASE) + #define R_BUS ((R_BUS_Type *) R_BUS_BASE) + #define R_CAC ((R_CAC_Type *) R_CAC_BASE) + #define R_CAN0 ((R_CAN0_Type *) R_CAN0_BASE) + #define R_CAN1 ((R_CAN0_Type *) R_CAN1_BASE) + #define R_CRC ((R_CRC_Type *) R_CRC_BASE) + #define R_CTSU ((R_CTSU_Type *) R_CTSU_BASE) + #define R_DAC ((R_DAC_Type *) R_DAC_BASE) + #define R_DAC8 ((R_DAC8_Type *) R_DAC8_BASE) + #define R_DEBUG ((R_DEBUG_Type *) R_DEBUG_BASE) + #define R_DOC ((R_DOC_Type *) R_DOC_BASE) + #define R_DTC ((R_DTC_Type *) R_DTC_BASE) + #define R_ELC ((R_ELC_Type *) R_ELC_BASE) + #define R_FACI_LP ((R_FACI_LP_Type *) R_FACI_LP_BASE) + #define R_FCACHE ((R_FCACHE_Type *) R_FCACHE_BASE) + #define R_GPT0 ((R_GPT0_Type *) R_GPT0_BASE) + #define R_GPT1 ((R_GPT0_Type *) R_GPT1_BASE) + #define R_GPT2 ((R_GPT0_Type *) R_GPT2_BASE) + #define R_GPT3 ((R_GPT0_Type *) R_GPT3_BASE) + #define R_GPT4 ((R_GPT0_Type *) R_GPT4_BASE) + #define R_GPT5 ((R_GPT0_Type *) R_GPT5_BASE) + #define R_GPT6 ((R_GPT0_Type *) R_GPT6_BASE) + #define R_GPT7 ((R_GPT0_Type *) R_GPT7_BASE) + #define R_GPT8 ((R_GPT0_Type *) R_GPT8_BASE) + #define R_GPT9 ((R_GPT0_Type *) R_GPT9_BASE) + #define R_GPT10 ((R_GPT0_Type *) R_GPT10_BASE) + #define R_GPT11 ((R_GPT0_Type *) R_GPT11_BASE) + #define R_GPT12 ((R_GPT0_Type *) R_GPT12_BASE) + #define R_GPT13 ((R_GPT0_Type *) R_GPT13_BASE) + #define R_GPT_OPS ((R_GPT_OPS_Type *) R_GPT_OPS_BASE) + #define R_GPT_POEG0 ((R_GPT_POEG0_Type *) R_GPT_POEG0_BASE) + #define R_GPT_POEG1 ((R_GPT_POEG0_Type *) R_GPT_POEG1_BASE) + #define R_GPT_POEG2 ((R_GPT_POEG0_Type *) R_GPT_POEG2_BASE) + #define R_GPT_POEG3 ((R_GPT_POEG0_Type *) R_GPT_POEG3_BASE) + #define R_ICU ((R_ICU_Type *) R_ICU_BASE) + #define R_IIC0 ((R_IIC0_Type *) R_IIC0_BASE) + #define R_IIC1 ((R_IIC0_Type *) R_IIC1_BASE) + #define R_IIC2 ((R_IIC0_Type *) R_IIC2_BASE) + #define R_IWDT ((R_IWDT_Type *) R_IWDT_BASE) + #define R_KINT ((R_KINT_Type *) R_KINT_BASE) + #define R_MMF ((R_MMF_Type *) R_MMF_BASE) + #define R_MPU_MMPU ((R_MPU_MMPU_Type *) R_MPU_MMPU_BASE) + #define R_MPU_SMPU ((R_MPU_SMPU_Type *) R_MPU_SMPU_BASE) + #define R_MPU_SPMON ((R_MPU_SPMON_Type *) R_MPU_SPMON_BASE) + #define R_MSTP ((R_MSTP_Type *) R_MSTP_BASE) + #define R_OPAMP ((R_OPAMP_Type *) R_OPAMP_BASE) + #define R_PORT0 ((R_PORT0_Type *) R_PORT0_BASE) + #define R_PORT1 ((R_PORT0_Type *) R_PORT1_BASE) + #define R_PORT2 ((R_PORT0_Type *) R_PORT2_BASE) + #define R_PORT3 ((R_PORT0_Type *) R_PORT3_BASE) + #define R_PORT4 ((R_PORT0_Type *) R_PORT4_BASE) + #define R_PORT5 ((R_PORT0_Type *) R_PORT5_BASE) + #define R_PORT6 ((R_PORT0_Type *) R_PORT6_BASE) + #define R_PORT7 ((R_PORT0_Type *) R_PORT7_BASE) + #define R_PORT8 ((R_PORT0_Type *) R_PORT8_BASE) + #define R_PORT9 ((R_PORT0_Type *) R_PORT9_BASE) + #define R_PORT10 ((R_PORT0_Type *) R_PORT10_BASE) + #define R_PORT11 ((R_PORT0_Type *) R_PORT11_BASE) + #define R_PORT12 ((R_PORT0_Type *) R_PORT12_BASE) + #define R_PORT13 ((R_PORT0_Type *) R_PORT13_BASE) + #define R_PORT14 ((R_PORT0_Type *) R_PORT14_BASE) + #define R_PFS ((R_PFS_Type *) R_PFS_BASE) + #define R_PMISC ((R_PMISC_Type *) R_PMISC_BASE) + #define R_RTC ((R_RTC_Type *) R_RTC_BASE) + #define R_SCI0 ((R_SCI0_Type *) R_SCI0_BASE) + #define R_SCI1 ((R_SCI0_Type *) R_SCI1_BASE) + #define R_SCI2 ((R_SCI0_Type *) R_SCI2_BASE) + #define R_SCI3 ((R_SCI0_Type *) R_SCI3_BASE) + #define R_SCI4 ((R_SCI0_Type *) R_SCI4_BASE) + #define R_SCI5 ((R_SCI0_Type *) R_SCI5_BASE) + #define R_SCI6 ((R_SCI0_Type *) R_SCI6_BASE) + #define R_SCI7 ((R_SCI0_Type *) R_SCI7_BASE) + #define R_SCI8 ((R_SCI0_Type *) R_SCI8_BASE) + #define R_SCI9 ((R_SCI0_Type *) R_SCI9_BASE) + #define R_SDADC0 ((R_SDADC0_Type *) R_SDADC0_BASE) + #define R_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) + #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) + #define R_SPI2 ((R_SPI0_Type *) R_SPI2_BASE) + #define R_SRAM ((R_SRAM_Type *) R_SRAM_BASE) + #define R_SYSTEM ((R_SYSTEM_Type *) R_SYSTEM_BASE) + #define R_TRNG ((R_TRNG_Type *) R_TRNG_BASE) + #define R_TSN ((R_TSN_Type *) R_TSN_BASE) + #define R_USB_FS0 ((R_USB_FS0_Type *) R_USB_FS0_BASE) + #define R_WDT ((R_WDT_Type *) R_WDT_BASE) + #define R_AES ((R_AES_Type *) R_AES_BASE) + #define R_AGT0 ((R_AGTX0_Type *) R_AGTX0_BASE) + #define R_AGT1 ((R_AGTX0_Type *) R_AGTX1_BASE) + #define R_AGT2 ((R_AGTX0_Type *) R_AGTX2_BASE) + #define R_AGT3 ((R_AGTX0_Type *) R_AGTX3_BASE) + #define R_AGT4 ((R_AGTX0_Type *) R_AGTX4_BASE) + #define R_AGT5 ((R_AGTX0_Type *) R_AGTX5_BASE) + #define R_AGT6 ((R_AGTX0_Type *) R_AGTX6_BASE) + #define R_AGT7 ((R_AGTX0_Type *) R_AGTX7_BASE) + #define R_AGT8 ((R_AGTX0_Type *) R_AGTX8_BASE) + #define R_AGT9 ((R_AGTX0_Type *) R_AGTX9_BASE) + #define R_WDT1 ((R_WDT_Type *) R_WDT1_BASE) + +/** @} */ /* End of group Device_Peripheral_declaration */ + +/* ========================================= End of section using anonymous unions ========================================= */ + #if defined(__CC_ARM) + #pragma pop + #elif defined(__ICCARM__) + +/* leave anonymous unions enabled */ + #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #pragma clang diagnostic pop + #elif defined(__GNUC__) + +/* anonymous unions are enabled by default */ + #elif defined(__TMS470__) + +/* anonymous unions are enabled by default */ + #elif defined(__TASKING__) + #pragma warning restore + #elif defined(__CSMC__) + +/* anonymous unions are enabled by default */ + #endif + +/* =========================================================================================================================== */ +/* ================ Pos/Mask Cluster Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup PosMask_clusters + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ CSa ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== MOD ========================================================== */ + #define R_BUS_CSa_MOD_PRMOD_Pos (15UL) /*!< PRMOD (Bit 15) */ + #define R_BUS_CSa_MOD_PRMOD_Msk (0x8000UL) /*!< PRMOD (Bitfield-Mask: 0x01) */ + #define R_BUS_CSa_MOD_PWENB_Pos (9UL) /*!< PWENB (Bit 9) */ + #define R_BUS_CSa_MOD_PWENB_Msk (0x200UL) /*!< PWENB (Bitfield-Mask: 0x01) */ + #define R_BUS_CSa_MOD_PRENB_Pos (8UL) /*!< PRENB (Bit 8) */ + #define R_BUS_CSa_MOD_PRENB_Msk (0x100UL) /*!< PRENB (Bitfield-Mask: 0x01) */ + #define R_BUS_CSa_MOD_EWENB_Pos (3UL) /*!< EWENB (Bit 3) */ + #define R_BUS_CSa_MOD_EWENB_Msk (0x8UL) /*!< EWENB (Bitfield-Mask: 0x01) */ + #define R_BUS_CSa_MOD_WRMOD_Pos (0UL) /*!< WRMOD (Bit 0) */ + #define R_BUS_CSa_MOD_WRMOD_Msk (0x1UL) /*!< WRMOD (Bitfield-Mask: 0x01) */ +/* ========================================================= WCR1 ========================================================== */ + #define R_BUS_CSa_WCR1_CSRWAIT_Pos (24UL) /*!< CSRWAIT (Bit 24) */ + #define R_BUS_CSa_WCR1_CSRWAIT_Msk (0x1f000000UL) /*!< CSRWAIT (Bitfield-Mask: 0x1f) */ + #define R_BUS_CSa_WCR1_CSWWAIT_Pos (16UL) /*!< CSWWAIT (Bit 16) */ + #define R_BUS_CSa_WCR1_CSWWAIT_Msk (0x1f0000UL) /*!< CSWWAIT (Bitfield-Mask: 0x1f) */ + #define R_BUS_CSa_WCR1_CSPRWAIT_Pos (8UL) /*!< CSPRWAIT (Bit 8) */ + #define R_BUS_CSa_WCR1_CSPRWAIT_Msk (0x700UL) /*!< CSPRWAIT (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR1_CSPWWAIT_Pos (0UL) /*!< CSPWWAIT (Bit 0) */ + #define R_BUS_CSa_WCR1_CSPWWAIT_Msk (0x7UL) /*!< CSPWWAIT (Bitfield-Mask: 0x07) */ +/* ========================================================= WCR2 ========================================================== */ + #define R_BUS_CSa_WCR2_CSON_Pos (28UL) /*!< CSON (Bit 28) */ + #define R_BUS_CSa_WCR2_CSON_Msk (0x70000000UL) /*!< CSON (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_WDON_Pos (24UL) /*!< WDON (Bit 24) */ + #define R_BUS_CSa_WCR2_WDON_Msk (0x7000000UL) /*!< WDON (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_WRON_Pos (20UL) /*!< WRON (Bit 20) */ + #define R_BUS_CSa_WCR2_WRON_Msk (0x700000UL) /*!< WRON (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_RDON_Pos (16UL) /*!< RDON (Bit 16) */ + #define R_BUS_CSa_WCR2_RDON_Msk (0x70000UL) /*!< RDON (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_AWAIT_Pos (12UL) /*!< AWAIT (Bit 12) */ + #define R_BUS_CSa_WCR2_AWAIT_Msk (0x3000UL) /*!< AWAIT (Bitfield-Mask: 0x03) */ + #define R_BUS_CSa_WCR2_WDOFF_Pos (8UL) /*!< WDOFF (Bit 8) */ + #define R_BUS_CSa_WCR2_WDOFF_Msk (0x700UL) /*!< WDOFF (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_CSWOFF_Pos (4UL) /*!< CSWOFF (Bit 4) */ + #define R_BUS_CSa_WCR2_CSWOFF_Msk (0x70UL) /*!< CSWOFF (Bitfield-Mask: 0x07) */ + #define R_BUS_CSa_WCR2_CSROFF_Pos (0UL) /*!< CSROFF (Bit 0) */ + #define R_BUS_CSa_WCR2_CSROFF_Msk (0x7UL) /*!< CSROFF (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ CSb ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CR =========================================================== */ + #define R_BUS_CSb_CR_MPXEN_Pos (12UL) /*!< MPXEN (Bit 12) */ + #define R_BUS_CSb_CR_MPXEN_Msk (0x1000UL) /*!< MPXEN (Bitfield-Mask: 0x01) */ + #define R_BUS_CSb_CR_EMODE_Pos (8UL) /*!< EMODE (Bit 8) */ + #define R_BUS_CSb_CR_EMODE_Msk (0x100UL) /*!< EMODE (Bitfield-Mask: 0x01) */ + #define R_BUS_CSb_CR_BSIZE_Pos (4UL) /*!< BSIZE (Bit 4) */ + #define R_BUS_CSb_CR_BSIZE_Msk (0x30UL) /*!< BSIZE (Bitfield-Mask: 0x03) */ + #define R_BUS_CSb_CR_EXENB_Pos (0UL) /*!< EXENB (Bit 0) */ + #define R_BUS_CSb_CR_EXENB_Msk (0x1UL) /*!< EXENB (Bitfield-Mask: 0x01) */ +/* ========================================================== REC ========================================================== */ + #define R_BUS_CSb_REC_WRCV_Pos (8UL) /*!< WRCV (Bit 8) */ + #define R_BUS_CSb_REC_WRCV_Msk (0xf00UL) /*!< WRCV (Bitfield-Mask: 0x0f) */ + #define R_BUS_CSb_REC_RRCV_Pos (0UL) /*!< RRCV (Bit 0) */ + #define R_BUS_CSb_REC_RRCV_Msk (0xfUL) /*!< RRCV (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ SDRAM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SDCCR ========================================================= */ + #define R_BUS_SDRAM_SDCCR_BSIZE_Pos (4UL) /*!< BSIZE (Bit 4) */ + #define R_BUS_SDRAM_SDCCR_BSIZE_Msk (0x30UL) /*!< BSIZE (Bitfield-Mask: 0x03) */ + #define R_BUS_SDRAM_SDCCR_EXENB_Pos (0UL) /*!< EXENB (Bit 0) */ + #define R_BUS_SDRAM_SDCCR_EXENB_Msk (0x1UL) /*!< EXENB (Bitfield-Mask: 0x01) */ +/* ======================================================== SDCMOD ========================================================= */ + #define R_BUS_SDRAM_SDCMOD_EMODE_Pos (0UL) /*!< EMODE (Bit 0) */ + #define R_BUS_SDRAM_SDCMOD_EMODE_Msk (0x1UL) /*!< EMODE (Bitfield-Mask: 0x01) */ +/* ======================================================== SDAMOD ========================================================= */ + #define R_BUS_SDRAM_SDAMOD_BE_Pos (0UL) /*!< BE (Bit 0) */ + #define R_BUS_SDRAM_SDAMOD_BE_Msk (0x1UL) /*!< BE (Bitfield-Mask: 0x01) */ +/* ======================================================== SDSELF ========================================================= */ + #define R_BUS_SDRAM_SDSELF_SFEN_Pos (0UL) /*!< SFEN (Bit 0) */ + #define R_BUS_SDRAM_SDSELF_SFEN_Msk (0x1UL) /*!< SFEN (Bitfield-Mask: 0x01) */ +/* ======================================================== SDRFCR ========================================================= */ + #define R_BUS_SDRAM_SDRFCR_REFW_Pos (12UL) /*!< REFW (Bit 12) */ + #define R_BUS_SDRAM_SDRFCR_REFW_Msk (0xf000UL) /*!< REFW (Bitfield-Mask: 0x0f) */ + #define R_BUS_SDRAM_SDRFCR_RFC_Pos (0UL) /*!< RFC (Bit 0) */ + #define R_BUS_SDRAM_SDRFCR_RFC_Msk (0xfffUL) /*!< RFC (Bitfield-Mask: 0xfff) */ +/* ======================================================== SDRFEN ========================================================= */ + #define R_BUS_SDRAM_SDRFEN_RFEN_Pos (0UL) /*!< RFEN (Bit 0) */ + #define R_BUS_SDRAM_SDRFEN_RFEN_Msk (0x1UL) /*!< RFEN (Bitfield-Mask: 0x01) */ +/* ========================================================= SDICR ========================================================= */ + #define R_BUS_SDRAM_SDICR_INIRQ_Pos (0UL) /*!< INIRQ (Bit 0) */ + #define R_BUS_SDRAM_SDICR_INIRQ_Msk (0x1UL) /*!< INIRQ (Bitfield-Mask: 0x01) */ +/* ========================================================= SDIR ========================================================== */ + #define R_BUS_SDRAM_SDIR_PRC_Pos (8UL) /*!< PRC (Bit 8) */ + #define R_BUS_SDRAM_SDIR_PRC_Msk (0x700UL) /*!< PRC (Bitfield-Mask: 0x07) */ + #define R_BUS_SDRAM_SDIR_ARFC_Pos (4UL) /*!< ARFC (Bit 4) */ + #define R_BUS_SDRAM_SDIR_ARFC_Msk (0xf0UL) /*!< ARFC (Bitfield-Mask: 0x0f) */ + #define R_BUS_SDRAM_SDIR_ARFI_Pos (0UL) /*!< ARFI (Bit 0) */ + #define R_BUS_SDRAM_SDIR_ARFI_Msk (0xfUL) /*!< ARFI (Bitfield-Mask: 0x0f) */ +/* ========================================================= SDADR ========================================================= */ + #define R_BUS_SDRAM_SDADR_MXC_Pos (0UL) /*!< MXC (Bit 0) */ + #define R_BUS_SDRAM_SDADR_MXC_Msk (0x3UL) /*!< MXC (Bitfield-Mask: 0x03) */ +/* ========================================================= SDTR ========================================================== */ + #define R_BUS_SDRAM_SDTR_RAS_Pos (16UL) /*!< RAS (Bit 16) */ + #define R_BUS_SDRAM_SDTR_RAS_Msk (0x70000UL) /*!< RAS (Bitfield-Mask: 0x07) */ + #define R_BUS_SDRAM_SDTR_RCD_Pos (12UL) /*!< RCD (Bit 12) */ + #define R_BUS_SDRAM_SDTR_RCD_Msk (0x3000UL) /*!< RCD (Bitfield-Mask: 0x03) */ + #define R_BUS_SDRAM_SDTR_RP_Pos (9UL) /*!< RP (Bit 9) */ + #define R_BUS_SDRAM_SDTR_RP_Msk (0xe00UL) /*!< RP (Bitfield-Mask: 0x07) */ + #define R_BUS_SDRAM_SDTR_WR_Pos (8UL) /*!< WR (Bit 8) */ + #define R_BUS_SDRAM_SDTR_WR_Msk (0x100UL) /*!< WR (Bitfield-Mask: 0x01) */ + #define R_BUS_SDRAM_SDTR_CL_Pos (0UL) /*!< CL (Bit 0) */ + #define R_BUS_SDRAM_SDTR_CL_Msk (0x7UL) /*!< CL (Bitfield-Mask: 0x07) */ +/* ========================================================= SDMOD ========================================================= */ + #define R_BUS_SDRAM_SDMOD_MR_Pos (0UL) /*!< MR (Bit 0) */ + #define R_BUS_SDRAM_SDMOD_MR_Msk (0x7fffUL) /*!< MR (Bitfield-Mask: 0x7fff) */ +/* ========================================================= SDSR ========================================================== */ + #define R_BUS_SDRAM_SDSR_SRFST_Pos (4UL) /*!< SRFST (Bit 4) */ + #define R_BUS_SDRAM_SDSR_SRFST_Msk (0x10UL) /*!< SRFST (Bitfield-Mask: 0x01) */ + #define R_BUS_SDRAM_SDSR_INIST_Pos (3UL) /*!< INIST (Bit 3) */ + #define R_BUS_SDRAM_SDSR_INIST_Msk (0x8UL) /*!< INIST (Bitfield-Mask: 0x01) */ + #define R_BUS_SDRAM_SDSR_MRSST_Pos (0UL) /*!< MRSST (Bit 0) */ + #define R_BUS_SDRAM_SDSR_MRSST_Msk (0x1UL) /*!< MRSST (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSERRa ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ADD ========================================================== */ + #define R_BUS_BUSERRa_ADD_BERAD_Pos (0UL) /*!< BERAD (Bit 0) */ + #define R_BUS_BUSERRa_ADD_BERAD_Msk (0xffffffffUL) /*!< BERAD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= STAT ========================================================== */ + #define R_BUS_BUSERRa_STAT_ERRSTAT_Pos (7UL) /*!< ERRSTAT (Bit 7) */ + #define R_BUS_BUSERRa_STAT_ERRSTAT_Msk (0x80UL) /*!< ERRSTAT (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRa_STAT_ACCSTAT_Pos (0UL) /*!< ACCSTAT (Bit 0) */ + #define R_BUS_BUSERRa_STAT_ACCSTAT_Msk (0x1UL) /*!< ACCSTAT (Bitfield-Mask: 0x01) */ +/* ========================================================== RW =========================================================== */ + #define R_BUS_BUSERRa_RW_RWSTAT_Pos (0UL) /*!< RWSTAT (Bit 0) */ + #define R_BUS_BUSERRa_RW_RWSTAT_Msk (0x1UL) /*!< RWSTAT (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BTZFERR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ADD ========================================================== */ + #define R_BUS_BTZFERR_ADD_BTZFERAD_Pos (0UL) /*!< BTZFERAD (Bit 0) */ + #define R_BUS_BTZFERR_ADD_BTZFERAD_Msk (0xffffffffUL) /*!< BTZFERAD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== RW =========================================================== */ + #define R_BUS_BTZFERR_RW_TRWSTAT_Pos (0UL) /*!< TRWSTAT (Bit 0) */ + #define R_BUS_BTZFERR_RW_TRWSTAT_Msk (0x1UL) /*!< TRWSTAT (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSERRb ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= STAT ========================================================== */ + #define R_BUS_BUSERRb_STAT_MSERRSTAT_Pos (5UL) /*!< MSERRSTAT (Bit 5) */ + #define R_BUS_BUSERRb_STAT_MSERRSTAT_Msk (0x20UL) /*!< MSERRSTAT (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_STAT_ILERRSTAT_Pos (4UL) /*!< ILERRSTAT (Bit 4) */ + #define R_BUS_BUSERRb_STAT_ILERRSTAT_Msk (0x10UL) /*!< ILERRSTAT (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_STAT_MMERRSTAT_Pos (3UL) /*!< MMERRSTAT (Bit 3) */ + #define R_BUS_BUSERRb_STAT_MMERRSTAT_Msk (0x8UL) /*!< MMERRSTAT (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_STAT_STERRSTAT_Pos (1UL) /*!< STERRSTAT (Bit 1) */ + #define R_BUS_BUSERRb_STAT_STERRSTAT_Msk (0x2UL) /*!< STERRSTAT (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_STAT_SLERRSTAT_Pos (0UL) /*!< SLERRSTAT (Bit 0) */ + #define R_BUS_BUSERRb_STAT_SLERRSTAT_Msk (0x1UL) /*!< SLERRSTAT (Bitfield-Mask: 0x01) */ +/* ========================================================== CLR ========================================================== */ + #define R_BUS_BUSERRb_CLR_MSERRCLR_Pos (5UL) /*!< MSERRCLR (Bit 5) */ + #define R_BUS_BUSERRb_CLR_MSERRCLR_Msk (0x20UL) /*!< MSERRCLR (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_CLR_ILERRCLR_Pos (4UL) /*!< ILERRCLR (Bit 4) */ + #define R_BUS_BUSERRb_CLR_ILERRCLR_Msk (0x10UL) /*!< ILERRCLR (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_CLR_MMERRCLR_Pos (3UL) /*!< MMERRCLR (Bit 3) */ + #define R_BUS_BUSERRb_CLR_MMERRCLR_Msk (0x8UL) /*!< MMERRCLR (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_CLR_STERRCLR_Pos (1UL) /*!< STERRCLR (Bit 1) */ + #define R_BUS_BUSERRb_CLR_STERRCLR_Msk (0x2UL) /*!< STERRCLR (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSERRb_CLR_SLERRCLR_Pos (0UL) /*!< SLERRCLR (Bit 0) */ + #define R_BUS_BUSERRb_CLR_SLERRCLR_Msk (0x1UL) /*!< SLERRCLR (Bitfield-Mask: 0x01) */ +/* ========================================================= IRQEN ========================================================= */ + #define R_BUS_BUSERRb_IRQEN_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define R_BUS_BUSERRb_IRQEN_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ DMACDTCERR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= STAT ========================================================== */ + #define R_BUS_DMACDTCERR_STAT_MTERRSTAT_Pos (0UL) /*!< MTERRSTAT (Bit 0) */ + #define R_BUS_DMACDTCERR_STAT_MTERRSTAT_Msk (0x1UL) /*!< MTERRSTAT (Bitfield-Mask: 0x01) */ +/* ========================================================== CLR ========================================================== */ + #define R_BUS_DMACDTCERR_CLR_MTERRCLR_Pos (0UL) /*!< MTERRCLR (Bit 0) */ + #define R_BUS_DMACDTCERR_CLR_MTERRCLR_Msk (0x1UL) /*!< MTERRCLR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSSABT0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= FLBI ========================================================== */ + #define R_BUS_BUSSABT0_FLBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_FLBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================== MRE0BI ========================================================= */ + #define R_BUS_BUSSABT0_MRE0BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_MRE0BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= S0BI ========================================================== */ + #define R_BUS_BUSSABT0_S0BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_S0BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= S1BI ========================================================== */ + #define R_BUS_BUSSABT0_S1BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_S1BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= S2BI ========================================================== */ + #define R_BUS_BUSSABT0_S2BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_S2BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= S3BI ========================================================== */ + #define R_BUS_BUSSABT0_S3BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_S3BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================== STBYSBI ======================================================== */ + #define R_BUS_BUSSABT0_STBYSBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_STBYSBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= ECBI ========================================================== */ + #define R_BUS_BUSSABT0_ECBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_ECBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= EOBI ========================================================== */ + #define R_BUS_BUSSABT0_EOBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_EOBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================== SPI0BI ========================================================= */ + #define R_BUS_BUSSABT0_SPI0BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_SPI0BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================== SPI1BI ========================================================= */ + #define R_BUS_BUSSABT0_SPI1BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_SPI1BI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= PBBI ========================================================== */ + #define R_BUS_BUSSABT0_PBBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_PBBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= PABI ========================================================== */ + #define R_BUS_BUSSABT0_PABI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_PABI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= PIBI ========================================================== */ + #define R_BUS_BUSSABT0_PIBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_PIBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ========================================================= PSBI ========================================================== */ + #define R_BUS_BUSSABT0_PSBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_PSBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================= CPU0SAHBI ======================================================= */ + #define R_BUS_BUSSABT0_CPU0SAHBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT0_CPU0SAHBI_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSSABT1 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= FHBI ========================================================== */ + #define R_BUS_BUSSABT1_FHBI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT1_FHBI_ARBS_Msk (0x3UL) /*!< ARBS (Bitfield-Mask: 0x03) */ +/* ======================================================== MRC0BI ========================================================= */ + #define R_BUS_BUSSABT1_MRC0BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT1_MRC0BI_ARBS_Msk (0x3UL) /*!< ARBS (Bitfield-Mask: 0x03) */ +/* ========================================================= S0BI ========================================================== */ + #define R_BUS_BUSSABT1_S0BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT1_S0BI_ARBS_Msk (0x3UL) /*!< ARBS (Bitfield-Mask: 0x03) */ +/* ========================================================= S1BI ========================================================== */ + #define R_BUS_BUSSABT1_S1BI_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSSABT1_S1BI_ARBS_Msk (0x3UL) /*!< ARBS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ BMSAERR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ADD ========================================================== */ + #define R_BUS_BMSAERR_ADD_MSERAD_Pos (0UL) /*!< MSERAD (Bit 0) */ + #define R_BUS_BMSAERR_ADD_MSERAD_Msk (0xffffffffUL) /*!< MSERAD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== RW =========================================================== */ + #define R_BUS_BMSAERR_RW_MSARWSTAT_Pos (0UL) /*!< MSARWSTAT (Bit 0) */ + #define R_BUS_BMSAERR_RW_MSARWSTAT_Msk (0x1UL) /*!< MSARWSTAT (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ OAD ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== BUSOAD ========================================================= */ + #define R_BUS_OAD_BUSOAD_BWERROAD_Pos (2UL) /*!< BWERROAD (Bit 2) */ + #define R_BUS_OAD_BUSOAD_BWERROAD_Msk (0x4UL) /*!< BWERROAD (Bitfield-Mask: 0x01) */ + #define R_BUS_OAD_BUSOAD_SLERROAD_Pos (1UL) /*!< SLERROAD (Bit 1) */ + #define R_BUS_OAD_BUSOAD_SLERROAD_Msk (0x2UL) /*!< SLERROAD (Bitfield-Mask: 0x01) */ + #define R_BUS_OAD_BUSOAD_ILERROAD_Pos (0UL) /*!< ILERROAD (Bit 0) */ + #define R_BUS_OAD_BUSOAD_ILERROAD_Msk (0x1UL) /*!< ILERROAD (Bitfield-Mask: 0x01) */ +/* ======================================================= BUSOADPT ======================================================== */ + #define R_BUS_OAD_BUSOADPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_BUS_OAD_BUSOADPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_BUS_OAD_BUSOADPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_BUS_OAD_BUSOADPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* ======================================================== MSAOAD ========================================================= */ + #define R_BUS_OAD_MSAOAD_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_BUS_OAD_MSAOAD_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_BUS_OAD_MSAOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_BUS_OAD_MSAOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ========================================================= MSAPT ========================================================= */ + #define R_BUS_OAD_MSAPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_BUS_OAD_MSAPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_BUS_OAD_MSAPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_BUS_OAD_MSAPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ MBWERR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= STAT ========================================================== */ + #define R_BUS_MBWERR_STAT_BWERR_Pos (0UL) /*!< BWERR (Bit 0) */ + #define R_BUS_MBWERR_STAT_BWERR_Msk (0x1UL) /*!< BWERR (Bitfield-Mask: 0x01) */ +/* ========================================================== CLR ========================================================== */ + #define R_BUS_MBWERR_CLR_BWERR_Pos (0UL) /*!< BWERR (Bit 0) */ + #define R_BUS_MBWERR_CLR_BWERR_Msk (0x1UL) /*!< BWERR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CNT ========================================================== */ + #define R_BUS_BUSM_CNT_IERES_Pos (15UL) /*!< IERES (Bit 15) */ + #define R_BUS_BUSM_CNT_IERES_Msk (0x8000UL) /*!< IERES (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ BUSS ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CNT ========================================================== */ + #define R_BUS_BUSS_CNT_ARBMET_Pos (4UL) /*!< ARBMET (Bit 4) */ + #define R_BUS_BUSS_CNT_ARBMET_Msk (0x30UL) /*!< ARBMET (Bitfield-Mask: 0x03) */ + #define R_BUS_BUSS_CNT_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSS_CNT_ARBS_Msk (0x3UL) /*!< ARBS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ MB ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CAN0_MB_ID_IDE_Pos (31UL) /*!< IDE (Bit 31) */ + #define R_CAN0_MB_ID_IDE_Msk (0x80000000UL) /*!< IDE (Bitfield-Mask: 0x01) */ + #define R_CAN0_MB_ID_RTR_Pos (30UL) /*!< RTR (Bit 30) */ + #define R_CAN0_MB_ID_RTR_Msk (0x40000000UL) /*!< RTR (Bitfield-Mask: 0x01) */ + #define R_CAN0_MB_ID_SID_Pos (18UL) /*!< SID (Bit 18) */ + #define R_CAN0_MB_ID_SID_Msk (0x1ffc0000UL) /*!< SID (Bitfield-Mask: 0x7ff) */ + #define R_CAN0_MB_ID_EID_Pos (0UL) /*!< EID (Bit 0) */ + #define R_CAN0_MB_ID_EID_Msk (0x3ffffUL) /*!< EID (Bitfield-Mask: 0x3ffff) */ +/* ========================================================== DL =========================================================== */ + #define R_CAN0_MB_DL_DLC_Pos (0UL) /*!< DLC (Bit 0) */ + #define R_CAN0_MB_DL_DLC_Msk (0xfUL) /*!< DLC (Bitfield-Mask: 0x0f) */ +/* =========================================================== D =========================================================== */ + #define R_CAN0_MB_D_DATA_Pos (0UL) /*!< DATA (Bit 0) */ + #define R_CAN0_MB_D_DATA_Msk (0xffUL) /*!< DATA (Bitfield-Mask: 0xff) */ +/* ========================================================== TS =========================================================== */ + #define R_CAN0_MB_TS_TSH_Pos (8UL) /*!< TSH (Bit 8) */ + #define R_CAN0_MB_TS_TSH_Msk (0xff00UL) /*!< TSH (Bitfield-Mask: 0xff) */ + #define R_CAN0_MB_TS_TSL_Pos (0UL) /*!< TSL (Bit 0) */ + #define R_CAN0_MB_TS_TSL_Msk (0xffUL) /*!< TSL (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ ELSEGR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== BY =========================================================== */ + #define R_ELC_ELSEGR_BY_WI_Pos (7UL) /*!< WI (Bit 7) */ + #define R_ELC_ELSEGR_BY_WI_Msk (0x80UL) /*!< WI (Bitfield-Mask: 0x01) */ + #define R_ELC_ELSEGR_BY_WE_Pos (6UL) /*!< WE (Bit 6) */ + #define R_ELC_ELSEGR_BY_WE_Msk (0x40UL) /*!< WE (Bitfield-Mask: 0x01) */ + #define R_ELC_ELSEGR_BY_SEG_Pos (0UL) /*!< SEG (Bit 0) */ + #define R_ELC_ELSEGR_BY_SEG_Msk (0x1UL) /*!< SEG (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ ELSR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== HA =========================================================== */ + #define R_ELC_ELSR_HA_ELS_Pos (0UL) /*!< ELS (Bit 0) */ + #define R_ELC_ELSR_HA_ELS_Msk (0x1ffUL) /*!< ELS (Bitfield-Mask: 0x1ff) */ + +/* =========================================================================================================================== */ +/* ================ SAR ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== L =========================================================== */ + #define R_IIC0_SAR_L_SVA_Pos (0UL) /*!< SVA (Bit 0) */ + #define R_IIC0_SAR_L_SVA_Msk (0xffUL) /*!< SVA (Bitfield-Mask: 0xff) */ +/* =========================================================== U =========================================================== */ + #define R_IIC0_SAR_U_SVA9_Pos (2UL) /*!< SVA9 (Bit 2) */ + #define R_IIC0_SAR_U_SVA9_Msk (0x4UL) /*!< SVA9 (Bitfield-Mask: 0x01) */ + #define R_IIC0_SAR_U_SVA8_Pos (1UL) /*!< SVA8 (Bit 1) */ + #define R_IIC0_SAR_U_SVA8_Msk (0x2UL) /*!< SVA8 (Bitfield-Mask: 0x01) */ + #define R_IIC0_SAR_U_FS_Pos (0UL) /*!< FS (Bit 0) */ + #define R_IIC0_SAR_U_FS_Msk (0x1UL) /*!< FS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ REGION ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== AC =========================================================== */ + #define R_MPU_MMPU_MMPU_REGION_AC_WP_Pos (2UL) /*!< WP (Bit 2) */ + #define R_MPU_MMPU_MMPU_REGION_AC_WP_Msk (0x4UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_MMPU_REGION_AC_RP_Pos (1UL) /*!< RP (Bit 1) */ + #define R_MPU_MMPU_MMPU_REGION_AC_RP_Msk (0x2UL) /*!< RP (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_MMPU_REGION_AC_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_MPU_MMPU_MMPU_REGION_AC_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* =========================================================== S =========================================================== */ + #define R_MPU_MMPU_MMPU_REGION_S_MMPUS_Pos (0UL) /*!< MMPUS (Bit 0) */ + #define R_MPU_MMPU_MMPU_REGION_S_MMPUS_Msk (0xffffffffUL) /*!< MMPUS (Bitfield-Mask: 0xffffffff) */ +/* =========================================================== E =========================================================== */ + #define R_MPU_MMPU_MMPU_REGION_E_MMPUE_Pos (0UL) /*!< MMPUE (Bit 0) */ + #define R_MPU_MMPU_MMPU_REGION_E_MMPUE_Msk (0xffffffffUL) /*!< MMPUE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ MMPU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CTL ========================================================== */ + #define R_MPU_MMPU_MMPU_CTL_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_MMPU_CTL_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_MMPU_CTL_OAD_Pos (1UL) /*!< OAD (Bit 1) */ + #define R_MPU_MMPU_MMPU_CTL_OAD_Msk (0x2UL) /*!< OAD (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_MMPU_CTL_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_MPU_MMPU_MMPU_CTL_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ========================================================== PT =========================================================== */ + #define R_MPU_MMPU_MMPU_PT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_MMPU_PT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_MMPU_PT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_MMPU_MMPU_PT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SMPU ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== R =========================================================== */ + #define R_MPU_SMPU_SMPU_R_WPSRAMHS_Pos (15UL) /*!< WPSRAMHS (Bit 15) */ + #define R_MPU_SMPU_SMPU_R_WPSRAMHS_Msk (0x8000UL) /*!< WPSRAMHS (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_RPSRAMHS_Pos (14UL) /*!< RPSRAMHS (Bit 14) */ + #define R_MPU_SMPU_SMPU_R_RPSRAMHS_Msk (0x4000UL) /*!< RPSRAMHS (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_WPFLI_Pos (13UL) /*!< WPFLI (Bit 13) */ + #define R_MPU_SMPU_SMPU_R_WPFLI_Msk (0x2000UL) /*!< WPFLI (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_RPFLI_Pos (12UL) /*!< RPFLI (Bit 12) */ + #define R_MPU_SMPU_SMPU_R_RPFLI_Msk (0x1000UL) /*!< RPFLI (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_WPGRPC_Pos (7UL) /*!< WPGRPC (Bit 7) */ + #define R_MPU_SMPU_SMPU_R_WPGRPC_Msk (0x80UL) /*!< WPGRPC (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_RPGRPC_Pos (6UL) /*!< RPGRPC (Bit 6) */ + #define R_MPU_SMPU_SMPU_R_RPGRPC_Msk (0x40UL) /*!< RPGRPC (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_WPGRPB_Pos (5UL) /*!< WPGRPB (Bit 5) */ + #define R_MPU_SMPU_SMPU_R_WPGRPB_Msk (0x20UL) /*!< WPGRPB (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_RPGRPB_Pos (4UL) /*!< RPGRPB (Bit 4) */ + #define R_MPU_SMPU_SMPU_R_RPGRPB_Msk (0x10UL) /*!< RPGRPB (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_WPGRPA_Pos (3UL) /*!< WPGRPA (Bit 3) */ + #define R_MPU_SMPU_SMPU_R_WPGRPA_Msk (0x8UL) /*!< WPGRPA (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPU_R_RPGRPA_Pos (2UL) /*!< RPGRPA (Bit 2) */ + #define R_MPU_SMPU_SMPU_R_RPGRPA_Msk (0x4UL) /*!< RPGRPA (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ SP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== OAD ========================================================== */ + #define R_MPU_SPMON_SP_OAD_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_SPMON_SP_OAD_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_SPMON_SP_OAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_MPU_SPMON_SP_OAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ========================================================== CTL ========================================================== */ + #define R_MPU_SPMON_SP_CTL_ERROR_Pos (8UL) /*!< ERROR (Bit 8) */ + #define R_MPU_SPMON_SP_CTL_ERROR_Msk (0x100UL) /*!< ERROR (Bitfield-Mask: 0x01) */ + #define R_MPU_SPMON_SP_CTL_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_MPU_SPMON_SP_CTL_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ========================================================== PT =========================================================== */ + #define R_MPU_SPMON_SP_PT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_SPMON_SP_PT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_SPMON_SP_PT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_SPMON_SP_PT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* ========================================================== SA =========================================================== */ + #define R_MPU_SPMON_SP_SA_MSPMPUSA_Pos (0UL) /*!< MSPMPUSA (Bit 0) */ + #define R_MPU_SPMON_SP_SA_MSPMPUSA_Msk (0xffffffffUL) /*!< MSPMPUSA (Bitfield-Mask: 0xffffffff) */ +/* ========================================================== EA =========================================================== */ + #define R_MPU_SPMON_SP_EA_MSPMPUEA_Pos (0UL) /*!< MSPMPUEA (Bit 0) */ + #define R_MPU_SPMON_SP_EA_MSPMPUEA_Msk (0xffffffffUL) /*!< MSPMPUEA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ AMP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== OS =========================================================== */ +/* ========================================================== PS =========================================================== */ +/* ========================================================== MS =========================================================== */ + +/* =========================================================================================================================== */ +/* ================ AMPOT ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== P =========================================================== */ + #define R_OPAMP_AMPOT_P_TRMP_Pos (0UL) /*!< TRMP (Bit 0) */ + #define R_OPAMP_AMPOT_P_TRMP_Msk (0x1fUL) /*!< TRMP (Bitfield-Mask: 0x1f) */ +/* =========================================================== N =========================================================== */ + #define R_OPAMP_AMPOT_N_TRMN_Pos (0UL) /*!< TRMN (Bit 0) */ + #define R_OPAMP_AMPOT_N_TRMN_Msk (0x1fUL) /*!< TRMN (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ PIN ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= PmnPFS_BY ======================================================= */ + #define R_PFS_PORT_PIN_PmnPFS_BY_NCODR_Pos (6UL) /*!< NCODR (Bit 6) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_NCODR_Msk (0x40UL) /*!< NCODR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PIM_Pos (5UL) /*!< PIM (Bit 5) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PIM_Msk (0x20UL) /*!< PIM (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PCR_Pos (4UL) /*!< PCR (Bit 4) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PCR_Msk (0x10UL) /*!< PCR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PDR_Pos (2UL) /*!< PDR (Bit 2) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PDR_Msk (0x4UL) /*!< PDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PIDR_Pos (1UL) /*!< PIDR (Bit 1) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PIDR_Msk (0x2UL) /*!< PIDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PODR_Pos (0UL) /*!< PODR (Bit 0) */ + #define R_PFS_PORT_PIN_PmnPFS_BY_PODR_Msk (0x1UL) /*!< PODR (Bitfield-Mask: 0x01) */ +/* ======================================================= PmnPFS_HA ======================================================= */ + #define R_PFS_PORT_PIN_PmnPFS_HA_NCODR_Pos (6UL) /*!< NCODR (Bit 6) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_NCODR_Msk (0x40UL) /*!< NCODR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PIM_Pos (5UL) /*!< PIM (Bit 5) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PIM_Msk (0x20UL) /*!< PIM (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PCR_Pos (4UL) /*!< PCR (Bit 4) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PCR_Msk (0x10UL) /*!< PCR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PDR_Pos (2UL) /*!< PDR (Bit 2) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PDR_Msk (0x4UL) /*!< PDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PIDR_Pos (1UL) /*!< PIDR (Bit 1) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PIDR_Msk (0x2UL) /*!< PIDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PODR_Pos (0UL) /*!< PODR (Bit 0) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_PODR_Msk (0x1UL) /*!< PODR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_ASEL_Pos (15UL) /*!< ASEL (Bit 15) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_ASEL_Msk (0x8000UL) /*!< ASEL (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_ISEL_Pos (14UL) /*!< ISEL (Bit 14) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_ISEL_Msk (0x4000UL) /*!< ISEL (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_EOFR_Pos (12UL) /*!< EOFR (Bit 12) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_EOFR_Msk (0x3000UL) /*!< EOFR (Bitfield-Mask: 0x03) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_DSCR_Pos (10UL) /*!< DSCR (Bit 10) */ + #define R_PFS_PORT_PIN_PmnPFS_HA_DSCR_Msk (0xc00UL) /*!< DSCR (Bitfield-Mask: 0x03) */ +/* ======================================================== PmnPFS ========================================================= */ + #define R_PFS_PORT_PIN_PmnPFS_NCODR_Pos (6UL) /*!< NCODR (Bit 6) */ + #define R_PFS_PORT_PIN_PmnPFS_NCODR_Msk (0x40UL) /*!< NCODR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_PIM_Pos (5UL) /*!< PIM (Bit 5) */ + #define R_PFS_PORT_PIN_PmnPFS_PIM_Msk (0x20UL) /*!< PIM (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_PCR_Pos (4UL) /*!< PCR (Bit 4) */ + #define R_PFS_PORT_PIN_PmnPFS_PCR_Msk (0x10UL) /*!< PCR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_PDR_Pos (2UL) /*!< PDR (Bit 2) */ + #define R_PFS_PORT_PIN_PmnPFS_PDR_Msk (0x4UL) /*!< PDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_PIDR_Pos (1UL) /*!< PIDR (Bit 1) */ + #define R_PFS_PORT_PIN_PmnPFS_PIDR_Msk (0x2UL) /*!< PIDR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_PODR_Pos (0UL) /*!< PODR (Bit 0) */ + #define R_PFS_PORT_PIN_PmnPFS_PODR_Msk (0x1UL) /*!< PODR (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_ASEL_Pos (15UL) /*!< ASEL (Bit 15) */ + #define R_PFS_PORT_PIN_PmnPFS_ASEL_Msk (0x8000UL) /*!< ASEL (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_ISEL_Pos (14UL) /*!< ISEL (Bit 14) */ + #define R_PFS_PORT_PIN_PmnPFS_ISEL_Msk (0x4000UL) /*!< ISEL (Bitfield-Mask: 0x01) */ + #define R_PFS_PORT_PIN_PmnPFS_EOFR_Pos (12UL) /*!< EOFR (Bit 12) */ + #define R_PFS_PORT_PIN_PmnPFS_EOFR_Msk (0x3000UL) /*!< EOFR (Bitfield-Mask: 0x03) */ + #define R_PFS_PORT_PIN_PmnPFS_DSCR_Pos (10UL) /*!< DSCR (Bit 10) */ + #define R_PFS_PORT_PIN_PmnPFS_DSCR_Msk (0xc00UL) /*!< DSCR (Bitfield-Mask: 0x03) */ + #define R_PFS_PORT_PIN_PmnPFS_PSEL_Pos (24UL) /*!< PSEL (Bit 24) */ + #define R_PFS_PORT_PIN_PmnPFS_PSEL_Msk (0x1f000000UL) /*!< PSEL (Bitfield-Mask: 0x1f) */ + #define R_PFS_PORT_PIN_PmnPFS_PMR_Pos (16UL) /*!< PMR (Bit 16) */ + #define R_PFS_PORT_PIN_PmnPFS_PMR_Msk (0x10000UL) /*!< PMR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ PORT ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ PMSAR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PMSAR ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ RTCCR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= RTCCR ========================================================= */ + #define R_RTC_RTCCR_RTCCR_TCEN_Pos (7UL) /*!< TCEN (Bit 7) */ + #define R_RTC_RTCCR_RTCCR_TCEN_Msk (0x80UL) /*!< TCEN (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCCR_RTCCR_TCNF_Pos (4UL) /*!< TCNF (Bit 4) */ + #define R_RTC_RTCCR_RTCCR_TCNF_Msk (0x30UL) /*!< TCNF (Bitfield-Mask: 0x03) */ + #define R_RTC_RTCCR_RTCCR_TCST_Pos (2UL) /*!< TCST (Bit 2) */ + #define R_RTC_RTCCR_RTCCR_TCST_Msk (0x4UL) /*!< TCST (Bitfield-Mask: 0x01) */ + #define R_RTC_RTCCR_RTCCR_TCCT_Pos (0UL) /*!< TCCT (Bit 0) */ + #define R_RTC_RTCCR_RTCCR_TCCT_Msk (0x3UL) /*!< TCCT (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ CP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= RSEC ========================================================== */ + #define R_RTC_CP_RSEC_SEC10_Pos (4UL) /*!< SEC10 (Bit 4) */ + #define R_RTC_CP_RSEC_SEC10_Msk (0x70UL) /*!< SEC10 (Bitfield-Mask: 0x07) */ + #define R_RTC_CP_RSEC_SEC1_Pos (0UL) /*!< SEC1 (Bit 0) */ + #define R_RTC_CP_RSEC_SEC1_Msk (0xfUL) /*!< SEC1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT0 ========================================================= */ + #define R_RTC_CP_BCNT0_BCNT0CP_Pos (0UL) /*!< BCNT0CP (Bit 0) */ + #define R_RTC_CP_BCNT0_BCNT0CP_Msk (0xffUL) /*!< BCNT0CP (Bitfield-Mask: 0xff) */ +/* ========================================================= RMIN ========================================================== */ + #define R_RTC_CP_RMIN_MIN10_Pos (4UL) /*!< MIN10 (Bit 4) */ + #define R_RTC_CP_RMIN_MIN10_Msk (0x70UL) /*!< MIN10 (Bitfield-Mask: 0x07) */ + #define R_RTC_CP_RMIN_MIN1_Pos (0UL) /*!< MIN1 (Bit 0) */ + #define R_RTC_CP_RMIN_MIN1_Msk (0xfUL) /*!< MIN1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT1 ========================================================= */ + #define R_RTC_CP_BCNT1_BCNT1CP_Pos (0UL) /*!< BCNT1CP (Bit 0) */ + #define R_RTC_CP_BCNT1_BCNT1CP_Msk (0xffUL) /*!< BCNT1CP (Bitfield-Mask: 0xff) */ +/* ========================================================== RHR ========================================================== */ + #define R_RTC_CP_RHR_PM_Pos (6UL) /*!< PM (Bit 6) */ + #define R_RTC_CP_RHR_PM_Msk (0x40UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_RTC_CP_RHR_HR10_Pos (4UL) /*!< HR10 (Bit 4) */ + #define R_RTC_CP_RHR_HR10_Msk (0x30UL) /*!< HR10 (Bitfield-Mask: 0x03) */ + #define R_RTC_CP_RHR_HR1_Pos (0UL) /*!< HR1 (Bit 0) */ + #define R_RTC_CP_RHR_HR1_Msk (0xfUL) /*!< HR1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT2 ========================================================= */ + #define R_RTC_CP_BCNT2_BCNT2CP_Pos (0UL) /*!< BCNT2CP (Bit 0) */ + #define R_RTC_CP_BCNT2_BCNT2CP_Msk (0xffUL) /*!< BCNT2CP (Bitfield-Mask: 0xff) */ +/* ========================================================= RDAY ========================================================== */ + #define R_RTC_CP_RDAY_DATE10_Pos (4UL) /*!< DATE10 (Bit 4) */ + #define R_RTC_CP_RDAY_DATE10_Msk (0x30UL) /*!< DATE10 (Bitfield-Mask: 0x03) */ + #define R_RTC_CP_RDAY_DATE1_Pos (0UL) /*!< DATE1 (Bit 0) */ + #define R_RTC_CP_RDAY_DATE1_Msk (0xfUL) /*!< DATE1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT3 ========================================================= */ + #define R_RTC_CP_BCNT3_BCNT3CP_Pos (0UL) /*!< BCNT3CP (Bit 0) */ + #define R_RTC_CP_BCNT3_BCNT3CP_Msk (0xffUL) /*!< BCNT3CP (Bitfield-Mask: 0xff) */ +/* ========================================================= RMON ========================================================== */ + #define R_RTC_CP_RMON_MON10_Pos (4UL) /*!< MON10 (Bit 4) */ + #define R_RTC_CP_RMON_MON10_Msk (0x10UL) /*!< MON10 (Bitfield-Mask: 0x01) */ + #define R_RTC_CP_RMON_MON1_Pos (0UL) /*!< MON1 (Bit 0) */ + #define R_RTC_CP_RMON_MON1_Msk (0xfUL) /*!< MON1 (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ PIPE_TR ================ */ +/* =========================================================================================================================== */ + +/* =========================================================== E =========================================================== */ + #define R_USB_FS0_PIPE_TR_E_TRENB_Pos (9UL) /*!< TRENB (Bit 9) */ + #define R_USB_FS0_PIPE_TR_E_TRENB_Msk (0x200UL) /*!< TRENB (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_TR_E_TRCLR_Pos (8UL) /*!< TRCLR (Bit 8) */ + #define R_USB_FS0_PIPE_TR_E_TRCLR_Msk (0x100UL) /*!< TRCLR (Bitfield-Mask: 0x01) */ +/* =========================================================== N =========================================================== */ + #define R_USB_FS0_PIPE_TR_N_TRNCNT_Pos (0UL) /*!< TRNCNT (Bit 0) */ + #define R_USB_FS0_PIPE_TR_N_TRNCNT_Msk (0xffffUL) /*!< TRNCNT (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ CTRL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= AGTCR ========================================================= */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCMBF_Pos (7UL) /*!< TCMBF (Bit 7) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCMBF_Msk (0x80UL) /*!< TCMBF (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCMAF_Pos (6UL) /*!< TCMAF (Bit 6) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCMAF_Msk (0x40UL) /*!< TCMAF (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TUNDF_Pos (5UL) /*!< TUNDF (Bit 5) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TUNDF_Msk (0x20UL) /*!< TUNDF (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TEDGF_Pos (4UL) /*!< TEDGF (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TEDGF_Msk (0x10UL) /*!< TEDGF (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TSTOP_Pos (2UL) /*!< TSTOP (Bit 2) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TSTOP_Msk (0x4UL) /*!< TSTOP (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCSTF_Pos (1UL) /*!< TCSTF (Bit 1) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TCSTF_Msk (0x2UL) /*!< TCSTF (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TSTART_Pos (0UL) /*!< TSTART (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTCR_TSTART_Msk (0x1UL) /*!< TSTART (Bitfield-Mask: 0x01) */ +/* ======================================================== AGTMR1 ========================================================= */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TCK_Pos (4UL) /*!< TCK (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TCK_Msk (0x70UL) /*!< TCK (Bitfield-Mask: 0x07) */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TEDGPL_Pos (3UL) /*!< TEDGPL (Bit 3) */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TEDGPL_Msk (0x8UL) /*!< TEDGPL (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TMOD_Pos (0UL) /*!< TMOD (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTMR1_TMOD_Msk (0x7UL) /*!< TMOD (Bitfield-Mask: 0x07) */ +/* ======================================================== AGTMR2 ========================================================= */ + #define R_AGTX0_AGT16_CTRL_AGTMR2_LPM_Pos (7UL) /*!< LPM (Bit 7) */ + #define R_AGTX0_AGT16_CTRL_AGTMR2_LPM_Msk (0x80UL) /*!< LPM (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTMR2_CKS_Pos (0UL) /*!< CKS (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTMR2_CKS_Msk (0x7UL) /*!< CKS (Bitfield-Mask: 0x07) */ +/* ===================================================== AGTIOSEL_ALT ====================================================== */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_ALT_TIES_Pos (4UL) /*!< TIES (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_ALT_TIES_Msk (0x10UL) /*!< TIES (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_ALT_SEL_Pos (0UL) /*!< SEL (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_ALT_SEL_Msk (0x3UL) /*!< SEL (Bitfield-Mask: 0x03) */ +/* ======================================================== AGTIOC ========================================================= */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TIOGT_Pos (6UL) /*!< TIOGT (Bit 6) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TIOGT_Msk (0xc0UL) /*!< TIOGT (Bitfield-Mask: 0x03) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TIPF_Pos (4UL) /*!< TIPF (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TIPF_Msk (0x30UL) /*!< TIPF (Bitfield-Mask: 0x03) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TOE_Pos (2UL) /*!< TOE (Bit 2) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TOE_Msk (0x4UL) /*!< TOE (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TEDGSEL_Pos (0UL) /*!< TEDGSEL (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTIOC_TEDGSEL_Msk (0x1UL) /*!< TEDGSEL (Bitfield-Mask: 0x01) */ +/* ======================================================== AGTISR ========================================================= */ + #define R_AGTX0_AGT16_CTRL_AGTISR_EEPS_Pos (2UL) /*!< EEPS (Bit 2) */ + #define R_AGTX0_AGT16_CTRL_AGTISR_EEPS_Msk (0x4UL) /*!< EEPS (Bitfield-Mask: 0x01) */ +/* ======================================================== AGTCMSR ======================================================== */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOPOLB_Pos (6UL) /*!< TOPOLB (Bit 6) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOPOLB_Msk (0x40UL) /*!< TOPOLB (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOEB_Pos (5UL) /*!< TOEB (Bit 5) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOEB_Msk (0x20UL) /*!< TOEB (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TCMEB_Pos (4UL) /*!< TCMEB (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TCMEB_Msk (0x10UL) /*!< TCMEB (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOPOLA_Pos (2UL) /*!< TOPOLA (Bit 2) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOPOLA_Msk (0x4UL) /*!< TOPOLA (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOEA_Pos (1UL) /*!< TOEA (Bit 1) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TOEA_Msk (0x2UL) /*!< TOEA (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TCMEA_Pos (0UL) /*!< TCMEA (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTCMSR_TCMEA_Msk (0x1UL) /*!< TCMEA (Bitfield-Mask: 0x01) */ +/* ======================================================= AGTIOSEL ======================================================== */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_TIES_Pos (4UL) /*!< TIES (Bit 4) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_TIES_Msk (0x10UL) /*!< TIES (Bitfield-Mask: 0x01) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_SEL_Pos (0UL) /*!< SEL (Bit 0) */ + #define R_AGTX0_AGT16_CTRL_AGTIOSEL_SEL_Msk (0x3UL) /*!< SEL (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ AGT16 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== AGT ========================================================== */ + #define R_AGTX0_AGT16_AGT_AGT_Pos (0UL) /*!< AGT (Bit 0) */ + #define R_AGTX0_AGT16_AGT_AGT_Msk (0xffffUL) /*!< AGT (Bitfield-Mask: 0xffff) */ +/* ======================================================== AGTCMA ========================================================= */ + #define R_AGTX0_AGT16_AGTCMA_AGTCMA_Pos (0UL) /*!< AGTCMA (Bit 0) */ + #define R_AGTX0_AGT16_AGTCMA_AGTCMA_Msk (0xffffUL) /*!< AGTCMA (Bitfield-Mask: 0xffff) */ +/* ======================================================== AGTCMB ========================================================= */ + #define R_AGTX0_AGT16_AGTCMB_AGTCMB_Pos (0UL) /*!< AGTCMB (Bit 0) */ + #define R_AGTX0_AGT16_AGTCMB_AGTCMB_Msk (0xffffUL) /*!< AGTCMB (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ AGT32 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== AGT ========================================================== */ + #define R_AGTX0_AGT32_AGT_AGT_Pos (0UL) /*!< AGT (Bit 0) */ + #define R_AGTX0_AGT32_AGT_AGT_Msk (0xffffffffUL) /*!< AGT (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== AGTCMA ========================================================= */ + #define R_AGTX0_AGT32_AGTCMA_AGTCMA_Pos (0UL) /*!< AGTCMA (Bit 0) */ + #define R_AGTX0_AGT32_AGTCMA_AGTCMA_Msk (0xffffffffUL) /*!< AGTCMA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== AGTCMB ========================================================= */ + #define R_AGTX0_AGT32_AGTCMB_AGTCMB_Pos (0UL) /*!< AGTCMB (Bit 0) */ + #define R_AGTX0_AGT32_AGTCMB_AGTCMB_Msk (0xffffffffUL) /*!< AGTCMB (Bitfield-Mask: 0xffffffff) */ + +/** @} */ /* End of group PosMask_clusters */ + +/* =========================================================================================================================== */ +/* ================ Pos/Mask Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup PosMask_peripherals + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ R_ACMPHS0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CMPCTL ========================================================= */ + #define R_ACMPHS0_CMPCTL_HCMPON_Pos (7UL) /*!< HCMPON (Bit 7) */ + #define R_ACMPHS0_CMPCTL_HCMPON_Msk (0x80UL) /*!< HCMPON (Bitfield-Mask: 0x01) */ + #define R_ACMPHS0_CMPCTL_CDFS_Pos (5UL) /*!< CDFS (Bit 5) */ + #define R_ACMPHS0_CMPCTL_CDFS_Msk (0x60UL) /*!< CDFS (Bitfield-Mask: 0x03) */ + #define R_ACMPHS0_CMPCTL_CEG_Pos (3UL) /*!< CEG (Bit 3) */ + #define R_ACMPHS0_CMPCTL_CEG_Msk (0x18UL) /*!< CEG (Bitfield-Mask: 0x03) */ + #define R_ACMPHS0_CMPCTL_CSTEN_Pos (2UL) /*!< CSTEN (Bit 2) */ + #define R_ACMPHS0_CMPCTL_CSTEN_Msk (0x4UL) /*!< CSTEN (Bitfield-Mask: 0x01) */ + #define R_ACMPHS0_CMPCTL_COE_Pos (1UL) /*!< COE (Bit 1) */ + #define R_ACMPHS0_CMPCTL_COE_Msk (0x2UL) /*!< COE (Bitfield-Mask: 0x01) */ + #define R_ACMPHS0_CMPCTL_CINV_Pos (0UL) /*!< CINV (Bit 0) */ + #define R_ACMPHS0_CMPCTL_CINV_Msk (0x1UL) /*!< CINV (Bitfield-Mask: 0x01) */ +/* ======================================================== CMPSEL0 ======================================================== */ + #define R_ACMPHS0_CMPSEL0_CMPSEL_Pos (0UL) /*!< CMPSEL (Bit 0) */ + #define R_ACMPHS0_CMPSEL0_CMPSEL_Msk (0xfUL) /*!< CMPSEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== CMPSEL1 ======================================================== */ + #define R_ACMPHS0_CMPSEL1_CRVS_Pos (0UL) /*!< CRVS (Bit 0) */ + #define R_ACMPHS0_CMPSEL1_CRVS_Msk (0x3fUL) /*!< CRVS (Bitfield-Mask: 0x3f) */ +/* ======================================================== CMPMON ========================================================= */ + #define R_ACMPHS0_CMPMON_CMPMON_Pos (0UL) /*!< CMPMON (Bit 0) */ + #define R_ACMPHS0_CMPMON_CMPMON_Msk (0x1UL) /*!< CMPMON (Bitfield-Mask: 0x01) */ +/* ========================================================= CPIOC ========================================================= */ + #define R_ACMPHS0_CPIOC_VREFEN_Pos (7UL) /*!< VREFEN (Bit 7) */ + #define R_ACMPHS0_CPIOC_VREFEN_Msk (0x80UL) /*!< VREFEN (Bitfield-Mask: 0x01) */ + #define R_ACMPHS0_CPIOC_CPOE_Pos (0UL) /*!< CPOE (Bit 0) */ + #define R_ACMPHS0_CPIOC_CPOE_Msk (0x1UL) /*!< CPOE (Bitfield-Mask: 0x01) */ +/* ======================================================= CPINTCTL ======================================================== */ + #define R_ACMPHS0_CPINTCTL_MSKE_Pos (0UL) /*!< MSKE (Bit 0) */ + #define R_ACMPHS0_CPINTCTL_MSKE_Msk (0x1UL) /*!< MSKE (Bitfield-Mask: 0x01) */ +/* ======================================================= CPMSKCTL ======================================================== */ + #define R_ACMPHS0_CPMSKCTL_MSKSEL_Pos (0UL) /*!< MSKSEL (Bit 0) */ + #define R_ACMPHS0_CPMSKCTL_MSKSEL_Msk (0x7UL) /*!< MSKSEL (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ R_ACMPLP ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== COMPMDR ======================================================== */ + #define R_ACMPLP_COMPMDR_C1MON_Pos (7UL) /*!< C1MON (Bit 7) */ + #define R_ACMPLP_COMPMDR_C1MON_Msk (0x80UL) /*!< C1MON (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C1VRF_Pos (6UL) /*!< C1VRF (Bit 6) */ + #define R_ACMPLP_COMPMDR_C1VRF_Msk (0x40UL) /*!< C1VRF (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C1WDE_Pos (5UL) /*!< C1WDE (Bit 5) */ + #define R_ACMPLP_COMPMDR_C1WDE_Msk (0x20UL) /*!< C1WDE (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C1ENB_Pos (4UL) /*!< C1ENB (Bit 4) */ + #define R_ACMPLP_COMPMDR_C1ENB_Msk (0x10UL) /*!< C1ENB (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C0MON_Pos (3UL) /*!< C0MON (Bit 3) */ + #define R_ACMPLP_COMPMDR_C0MON_Msk (0x8UL) /*!< C0MON (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C0WDE_Pos (1UL) /*!< C0WDE (Bit 1) */ + #define R_ACMPLP_COMPMDR_C0WDE_Msk (0x2UL) /*!< C0WDE (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C0VRF_Pos (2UL) /*!< C0VRF (Bit 2) */ + #define R_ACMPLP_COMPMDR_C0VRF_Msk (0x4UL) /*!< C0VRF (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPMDR_C0ENB_Pos (0UL) /*!< C0ENB (Bit 0) */ + #define R_ACMPLP_COMPMDR_C0ENB_Msk (0x1UL) /*!< C0ENB (Bitfield-Mask: 0x01) */ +/* ======================================================== COMPFIR ======================================================== */ + #define R_ACMPLP_COMPFIR_C1EDG_Pos (7UL) /*!< C1EDG (Bit 7) */ + #define R_ACMPLP_COMPFIR_C1EDG_Msk (0x80UL) /*!< C1EDG (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPFIR_C1EPO_Pos (6UL) /*!< C1EPO (Bit 6) */ + #define R_ACMPLP_COMPFIR_C1EPO_Msk (0x40UL) /*!< C1EPO (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPFIR_C1FCK_Pos (4UL) /*!< C1FCK (Bit 4) */ + #define R_ACMPLP_COMPFIR_C1FCK_Msk (0x30UL) /*!< C1FCK (Bitfield-Mask: 0x03) */ + #define R_ACMPLP_COMPFIR_C0EDG_Pos (3UL) /*!< C0EDG (Bit 3) */ + #define R_ACMPLP_COMPFIR_C0EDG_Msk (0x8UL) /*!< C0EDG (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPFIR_C0EPO_Pos (2UL) /*!< C0EPO (Bit 2) */ + #define R_ACMPLP_COMPFIR_C0EPO_Msk (0x4UL) /*!< C0EPO (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPFIR_C0FCK_Pos (0UL) /*!< C0FCK (Bit 0) */ + #define R_ACMPLP_COMPFIR_C0FCK_Msk (0x3UL) /*!< C0FCK (Bitfield-Mask: 0x03) */ +/* ======================================================== COMPOCR ======================================================== */ + #define R_ACMPLP_COMPOCR_SPDMD_Pos (7UL) /*!< SPDMD (Bit 7) */ + #define R_ACMPLP_COMPOCR_SPDMD_Msk (0x80UL) /*!< SPDMD (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPOCR_C1OP_Pos (6UL) /*!< C1OP (Bit 6) */ + #define R_ACMPLP_COMPOCR_C1OP_Msk (0x40UL) /*!< C1OP (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPOCR_C1OE_Pos (5UL) /*!< C1OE (Bit 5) */ + #define R_ACMPLP_COMPOCR_C1OE_Msk (0x20UL) /*!< C1OE (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPOCR_C0OP_Pos (2UL) /*!< C0OP (Bit 2) */ + #define R_ACMPLP_COMPOCR_C0OP_Msk (0x4UL) /*!< C0OP (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPOCR_C0OE_Pos (1UL) /*!< C0OE (Bit 1) */ + #define R_ACMPLP_COMPOCR_C0OE_Msk (0x2UL) /*!< C0OE (Bitfield-Mask: 0x01) */ +/* ======================================================= COMPSEL0 ======================================================== */ + #define R_ACMPLP_COMPSEL0_IVCMP1_Pos (4UL) /*!< IVCMP1 (Bit 4) */ + #define R_ACMPLP_COMPSEL0_IVCMP1_Msk (0x70UL) /*!< IVCMP1 (Bitfield-Mask: 0x07) */ + #define R_ACMPLP_COMPSEL0_IVCMP0_Pos (0UL) /*!< IVCMP0 (Bit 0) */ + #define R_ACMPLP_COMPSEL0_IVCMP0_Msk (0x7UL) /*!< IVCMP0 (Bitfield-Mask: 0x07) */ +/* ======================================================= COMPSEL1 ======================================================== */ + #define R_ACMPLP_COMPSEL1_C1VRF2_Pos (7UL) /*!< C1VRF2 (Bit 7) */ + #define R_ACMPLP_COMPSEL1_C1VRF2_Msk (0x80UL) /*!< C1VRF2 (Bitfield-Mask: 0x01) */ + #define R_ACMPLP_COMPSEL1_IVREF1_Pos (4UL) /*!< IVREF1 (Bit 4) */ + #define R_ACMPLP_COMPSEL1_IVREF1_Msk (0x70UL) /*!< IVREF1 (Bitfield-Mask: 0x07) */ + #define R_ACMPLP_COMPSEL1_IVREF0_Pos (0UL) /*!< IVREF0 (Bit 0) */ + #define R_ACMPLP_COMPSEL1_IVREF0_Msk (0x7UL) /*!< IVREF0 (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ R_ADC0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ADCSR ========================================================= */ + #define R_ADC0_ADCSR_ADST_Pos (15UL) /*!< ADST (Bit 15) */ + #define R_ADC0_ADCSR_ADST_Msk (0x8000UL) /*!< ADST (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_ADCS_Pos (13UL) /*!< ADCS (Bit 13) */ + #define R_ADC0_ADCSR_ADCS_Msk (0x6000UL) /*!< ADCS (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADCSR_ADHSC_Pos (10UL) /*!< ADHSC (Bit 10) */ + #define R_ADC0_ADCSR_ADHSC_Msk (0x400UL) /*!< ADHSC (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_TRGE_Pos (9UL) /*!< TRGE (Bit 9) */ + #define R_ADC0_ADCSR_TRGE_Msk (0x200UL) /*!< TRGE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_EXTRG_Pos (8UL) /*!< EXTRG (Bit 8) */ + #define R_ADC0_ADCSR_EXTRG_Msk (0x100UL) /*!< EXTRG (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_DBLE_Pos (7UL) /*!< DBLE (Bit 7) */ + #define R_ADC0_ADCSR_DBLE_Msk (0x80UL) /*!< DBLE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_GBADIE_Pos (6UL) /*!< GBADIE (Bit 6) */ + #define R_ADC0_ADCSR_GBADIE_Msk (0x40UL) /*!< GBADIE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCSR_DBLANS_Pos (0UL) /*!< DBLANS (Bit 0) */ + #define R_ADC0_ADCSR_DBLANS_Msk (0x1fUL) /*!< DBLANS (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADCSR_ADIE_Pos (12UL) /*!< ADIE (Bit 12) */ + #define R_ADC0_ADCSR_ADIE_Msk (0x1000UL) /*!< ADIE (Bitfield-Mask: 0x01) */ +/* ======================================================== ADANSA ========================================================= */ + #define R_ADC0_ADANSA_ANSA_Pos (0UL) /*!< ANSA (Bit 0) */ + #define R_ADC0_ADANSA_ANSA_Msk (0x1UL) /*!< ANSA (Bitfield-Mask: 0x01) */ +/* ========================================================= ADADS ========================================================= */ + #define R_ADC0_ADADS_ADS_Pos (0UL) /*!< ADS (Bit 0) */ + #define R_ADC0_ADADS_ADS_Msk (0x1UL) /*!< ADS (Bitfield-Mask: 0x01) */ +/* ========================================================= ADADC ========================================================= */ + #define R_ADC0_ADADC_ADC_Pos (0UL) /*!< ADC (Bit 0) */ + #define R_ADC0_ADADC_ADC_Msk (0x7UL) /*!< ADC (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADADC_AVEE_Pos (7UL) /*!< AVEE (Bit 7) */ + #define R_ADC0_ADADC_AVEE_Msk (0x80UL) /*!< AVEE (Bitfield-Mask: 0x01) */ +/* ========================================================= ADCER ========================================================= */ + #define R_ADC0_ADCER_ADRFMT_Pos (15UL) /*!< ADRFMT (Bit 15) */ + #define R_ADC0_ADCER_ADRFMT_Msk (0x8000UL) /*!< ADRFMT (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCER_ADINV_Pos (14UL) /*!< ADINV (Bit 14) */ + #define R_ADC0_ADCER_ADINV_Msk (0x4000UL) /*!< ADINV (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCER_DIAGM_Pos (11UL) /*!< DIAGM (Bit 11) */ + #define R_ADC0_ADCER_DIAGM_Msk (0x800UL) /*!< DIAGM (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCER_DIAGLD_Pos (10UL) /*!< DIAGLD (Bit 10) */ + #define R_ADC0_ADCER_DIAGLD_Msk (0x400UL) /*!< DIAGLD (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCER_DIAGVAL_Pos (8UL) /*!< DIAGVAL (Bit 8) */ + #define R_ADC0_ADCER_DIAGVAL_Msk (0x300UL) /*!< DIAGVAL (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADCER_ACE_Pos (5UL) /*!< ACE (Bit 5) */ + #define R_ADC0_ADCER_ACE_Msk (0x20UL) /*!< ACE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCER_ADPRC_Pos (1UL) /*!< ADPRC (Bit 1) */ + #define R_ADC0_ADCER_ADPRC_Msk (0x6UL) /*!< ADPRC (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADCER_DCE_Pos (4UL) /*!< DCE (Bit 4) */ + #define R_ADC0_ADCER_DCE_Msk (0x10UL) /*!< DCE (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSTRGR ======================================================== */ + #define R_ADC0_ADSTRGR_TRSA_Pos (8UL) /*!< TRSA (Bit 8) */ + #define R_ADC0_ADSTRGR_TRSA_Msk (0x3f00UL) /*!< TRSA (Bitfield-Mask: 0x3f) */ + #define R_ADC0_ADSTRGR_TRSB_Pos (0UL) /*!< TRSB (Bit 0) */ + #define R_ADC0_ADSTRGR_TRSB_Msk (0x3fUL) /*!< TRSB (Bitfield-Mask: 0x3f) */ +/* ======================================================== ADEXICR ======================================================== */ + #define R_ADC0_ADEXICR_OCSB_Pos (11UL) /*!< OCSB (Bit 11) */ + #define R_ADC0_ADEXICR_OCSB_Msk (0x800UL) /*!< OCSB (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_TSSB_Pos (10UL) /*!< TSSB (Bit 10) */ + #define R_ADC0_ADEXICR_TSSB_Msk (0x400UL) /*!< TSSB (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_OCSA_Pos (9UL) /*!< OCSA (Bit 9) */ + #define R_ADC0_ADEXICR_OCSA_Msk (0x200UL) /*!< OCSA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_TSSA_Pos (8UL) /*!< TSSA (Bit 8) */ + #define R_ADC0_ADEXICR_TSSA_Msk (0x100UL) /*!< TSSA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_OCSAD_Pos (1UL) /*!< OCSAD (Bit 1) */ + #define R_ADC0_ADEXICR_OCSAD_Msk (0x2UL) /*!< OCSAD (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_TSSAD_Pos (0UL) /*!< TSSAD (Bit 0) */ + #define R_ADC0_ADEXICR_TSSAD_Msk (0x1UL) /*!< TSSAD (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_EXSEL_Pos (14UL) /*!< EXSEL (Bit 14) */ + #define R_ADC0_ADEXICR_EXSEL_Msk (0x4000UL) /*!< EXSEL (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXICR_EXOEN_Pos (15UL) /*!< EXOEN (Bit 15) */ + #define R_ADC0_ADEXICR_EXOEN_Msk (0x8000UL) /*!< EXOEN (Bitfield-Mask: 0x01) */ +/* ======================================================== ADANSB ========================================================= */ + #define R_ADC0_ADANSB_ANSB_Pos (0UL) /*!< ANSB (Bit 0) */ + #define R_ADC0_ADANSB_ANSB_Msk (0x1UL) /*!< ANSB (Bitfield-Mask: 0x01) */ +/* ======================================================== ADDBLDR ======================================================== */ + #define R_ADC0_ADDBLDR_ADDBLDR_Pos (0UL) /*!< ADDBLDR (Bit 0) */ + #define R_ADC0_ADDBLDR_ADDBLDR_Msk (0xffffUL) /*!< ADDBLDR (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADTSDR ========================================================= */ + #define R_ADC0_ADTSDR_ADTSDR_Pos (0UL) /*!< ADTSDR (Bit 0) */ + #define R_ADC0_ADTSDR_ADTSDR_Msk (0xffffUL) /*!< ADTSDR (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADOCDR ========================================================= */ + #define R_ADC0_ADOCDR_ADOCDR_Pos (0UL) /*!< ADOCDR (Bit 0) */ + #define R_ADC0_ADOCDR_ADOCDR_Msk (0xffffUL) /*!< ADOCDR (Bitfield-Mask: 0xffff) */ +/* ====================================================== ADRD_RIGHT ======================================================= */ + #define R_ADC0_ADRD_RIGHT_DIAGST_Pos (14UL) /*!< DIAGST (Bit 14) */ + #define R_ADC0_ADRD_RIGHT_DIAGST_Msk (0xc000UL) /*!< DIAGST (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADRD_RIGHT_AD_Pos (0UL) /*!< AD (Bit 0) */ + #define R_ADC0_ADRD_RIGHT_AD_Msk (0x3fffUL) /*!< AD (Bitfield-Mask: 0x3fff) */ +/* ======================================================= ADRD_LEFT ======================================================= */ + #define R_ADC0_ADRD_LEFT_AD_Pos (2UL) /*!< AD (Bit 2) */ + #define R_ADC0_ADRD_LEFT_AD_Msk (0xfffcUL) /*!< AD (Bitfield-Mask: 0x3fff) */ + #define R_ADC0_ADRD_LEFT_DIAGST_Pos (0UL) /*!< DIAGST (Bit 0) */ + #define R_ADC0_ADRD_LEFT_DIAGST_Msk (0x3UL) /*!< DIAGST (Bitfield-Mask: 0x03) */ +/* ========================================================= ADDR ========================================================== */ + #define R_ADC0_ADDR_ADDR_Pos (0UL) /*!< ADDR (Bit 0) */ + #define R_ADC0_ADDR_ADDR_Msk (0xffffUL) /*!< ADDR (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADSHCR ========================================================= */ + #define R_ADC0_ADSHCR_SHANS2_Pos (10UL) /*!< SHANS2 (Bit 10) */ + #define R_ADC0_ADSHCR_SHANS2_Msk (0x400UL) /*!< SHANS2 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSHCR_SHANS1_Pos (9UL) /*!< SHANS1 (Bit 9) */ + #define R_ADC0_ADSHCR_SHANS1_Msk (0x200UL) /*!< SHANS1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSHCR_SHANS0_Pos (8UL) /*!< SHANS0 (Bit 8) */ + #define R_ADC0_ADSHCR_SHANS0_Msk (0x100UL) /*!< SHANS0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSHCR_SSTSH_Pos (0UL) /*!< SSTSH (Bit 0) */ + #define R_ADC0_ADSHCR_SSTSH_Msk (0xffUL) /*!< SSTSH (Bitfield-Mask: 0xff) */ +/* ======================================================== ADDISCR ======================================================== */ + #define R_ADC0_ADDISCR_CHARGE_Pos (4UL) /*!< CHARGE (Bit 4) */ + #define R_ADC0_ADDISCR_CHARGE_Msk (0x10UL) /*!< CHARGE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADDISCR_ADNDIS_Pos (0UL) /*!< ADNDIS (Bit 0) */ + #define R_ADC0_ADDISCR_ADNDIS_Msk (0xfUL) /*!< ADNDIS (Bitfield-Mask: 0x0f) */ +/* ======================================================== ADSHMSR ======================================================== */ + #define R_ADC0_ADSHMSR_SHMD_Pos (0UL) /*!< SHMD (Bit 0) */ + #define R_ADC0_ADSHMSR_SHMD_Msk (0x1UL) /*!< SHMD (Bitfield-Mask: 0x01) */ +/* ======================================================== ADACSR ========================================================= */ + #define R_ADC0_ADACSR_ADSAC_Pos (1UL) /*!< ADSAC (Bit 1) */ + #define R_ADC0_ADACSR_ADSAC_Msk (0x2UL) /*!< ADSAC (Bitfield-Mask: 0x01) */ +/* ======================================================== ADGSPCR ======================================================== */ + #define R_ADC0_ADGSPCR_GBRP_Pos (15UL) /*!< GBRP (Bit 15) */ + #define R_ADC0_ADGSPCR_GBRP_Msk (0x8000UL) /*!< GBRP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADGSPCR_GBRSCN_Pos (1UL) /*!< GBRSCN (Bit 1) */ + #define R_ADC0_ADGSPCR_GBRSCN_Msk (0x2UL) /*!< GBRSCN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADGSPCR_PGS_Pos (0UL) /*!< PGS (Bit 0) */ + #define R_ADC0_ADGSPCR_PGS_Msk (0x1UL) /*!< PGS (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADGSPCR_GBEXTRG_Pos (8UL) /*!< GBEXTRG (Bit 8) */ + #define R_ADC0_ADGSPCR_GBEXTRG_Msk (0x100UL) /*!< GBEXTRG (Bitfield-Mask: 0x01) */ +/* ========================================================= ADICR ========================================================= */ + #define R_ADC0_ADICR_ADIC_Pos (0UL) /*!< ADIC (Bit 0) */ + #define R_ADC0_ADICR_ADIC_Msk (0x3UL) /*!< ADIC (Bitfield-Mask: 0x03) */ +/* ======================================================= ADDBLDRA ======================================================== */ + #define R_ADC0_ADDBLDRA_ADDBLDRA_Pos (0UL) /*!< ADDBLDRA (Bit 0) */ + #define R_ADC0_ADDBLDRA_ADDBLDRA_Msk (0xffffUL) /*!< ADDBLDRA (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADDBLDRB ======================================================== */ + #define R_ADC0_ADDBLDRB_ADDBLDRB_Pos (0UL) /*!< ADDBLDRB (Bit 0) */ + #define R_ADC0_ADDBLDRB_ADDBLDRB_Msk (0xffffUL) /*!< ADDBLDRB (Bitfield-Mask: 0xffff) */ +/* ====================================================== ADHVREFCNT ======================================================= */ + #define R_ADC0_ADHVREFCNT_ADSLP_Pos (7UL) /*!< ADSLP (Bit 7) */ + #define R_ADC0_ADHVREFCNT_ADSLP_Msk (0x80UL) /*!< ADSLP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADHVREFCNT_LVSEL_Pos (4UL) /*!< LVSEL (Bit 4) */ + #define R_ADC0_ADHVREFCNT_LVSEL_Msk (0x10UL) /*!< LVSEL (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADHVREFCNT_HVSEL_Pos (0UL) /*!< HVSEL (Bit 0) */ + #define R_ADC0_ADHVREFCNT_HVSEL_Msk (0x3UL) /*!< HVSEL (Bitfield-Mask: 0x03) */ +/* ======================================================= ADWINMON ======================================================== */ + #define R_ADC0_ADWINMON_MONCMPB_Pos (5UL) /*!< MONCMPB (Bit 5) */ + #define R_ADC0_ADWINMON_MONCMPB_Msk (0x20UL) /*!< MONCMPB (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADWINMON_MONCMPA_Pos (4UL) /*!< MONCMPA (Bit 4) */ + #define R_ADC0_ADWINMON_MONCMPA_Msk (0x10UL) /*!< MONCMPA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADWINMON_MONCOMB_Pos (0UL) /*!< MONCOMB (Bit 0) */ + #define R_ADC0_ADWINMON_MONCOMB_Msk (0x1UL) /*!< MONCOMB (Bitfield-Mask: 0x01) */ +/* ======================================================== ADCMPCR ======================================================== */ + #define R_ADC0_ADCMPCR_CMPAIE_Pos (15UL) /*!< CMPAIE (Bit 15) */ + #define R_ADC0_ADCMPCR_CMPAIE_Msk (0x8000UL) /*!< CMPAIE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPCR_WCMPE_Pos (14UL) /*!< WCMPE (Bit 14) */ + #define R_ADC0_ADCMPCR_WCMPE_Msk (0x4000UL) /*!< WCMPE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPCR_CMPBIE_Pos (13UL) /*!< CMPBIE (Bit 13) */ + #define R_ADC0_ADCMPCR_CMPBIE_Msk (0x2000UL) /*!< CMPBIE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPCR_CMPAE_Pos (11UL) /*!< CMPAE (Bit 11) */ + #define R_ADC0_ADCMPCR_CMPAE_Msk (0x800UL) /*!< CMPAE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPCR_CMPBE_Pos (9UL) /*!< CMPBE (Bit 9) */ + #define R_ADC0_ADCMPCR_CMPBE_Msk (0x200UL) /*!< CMPBE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPCR_CMPAB_Pos (0UL) /*!< CMPAB (Bit 0) */ + #define R_ADC0_ADCMPCR_CMPAB_Msk (0x3UL) /*!< CMPAB (Bitfield-Mask: 0x03) */ +/* ====================================================== ADCMPANSER ======================================================= */ + #define R_ADC0_ADCMPANSER_CMPOCA_Pos (1UL) /*!< CMPOCA (Bit 1) */ + #define R_ADC0_ADCMPANSER_CMPOCA_Msk (0x2UL) /*!< CMPOCA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPANSER_CMPTSA_Pos (0UL) /*!< CMPTSA (Bit 0) */ + #define R_ADC0_ADCMPANSER_CMPTSA_Msk (0x1UL) /*!< CMPTSA (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCMPLER ======================================================== */ + #define R_ADC0_ADCMPLER_CMPLOCA_Pos (1UL) /*!< CMPLOCA (Bit 1) */ + #define R_ADC0_ADCMPLER_CMPLOCA_Msk (0x2UL) /*!< CMPLOCA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPLER_CMPLTSA_Pos (0UL) /*!< CMPLTSA (Bit 0) */ + #define R_ADC0_ADCMPLER_CMPLTSA_Msk (0x1UL) /*!< CMPLTSA (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCMPANSR ======================================================= */ + #define R_ADC0_ADCMPANSR_CMPCHA_Pos (0UL) /*!< CMPCHA (Bit 0) */ + #define R_ADC0_ADCMPANSR_CMPCHA_Msk (0x1UL) /*!< CMPCHA (Bitfield-Mask: 0x01) */ +/* ======================================================== ADCMPLR ======================================================== */ + #define R_ADC0_ADCMPLR_CMPLCHA_Pos (0UL) /*!< CMPLCHA (Bit 0) */ + #define R_ADC0_ADCMPLR_CMPLCHA_Msk (0x1UL) /*!< CMPLCHA (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCMPDR0 ======================================================== */ + #define R_ADC0_ADCMPDR0_ADCMPDR0_Pos (0UL) /*!< ADCMPDR0 (Bit 0) */ + #define R_ADC0_ADCMPDR0_ADCMPDR0_Msk (0xffffUL) /*!< ADCMPDR0 (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADCMPDR1 ======================================================== */ + #define R_ADC0_ADCMPDR1_ADCMPDR1_Pos (0UL) /*!< ADCMPDR1 (Bit 0) */ + #define R_ADC0_ADCMPDR1_ADCMPDR1_Msk (0xffffUL) /*!< ADCMPDR1 (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADCMPSR ======================================================== */ + #define R_ADC0_ADCMPSR_CMPSTCHA_Pos (0UL) /*!< CMPSTCHA (Bit 0) */ + #define R_ADC0_ADCMPSR_CMPSTCHA_Msk (0x1UL) /*!< CMPSTCHA (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCMPSER ======================================================== */ + #define R_ADC0_ADCMPSER_CMPSTOCA_Pos (1UL) /*!< CMPSTOCA (Bit 1) */ + #define R_ADC0_ADCMPSER_CMPSTOCA_Msk (0x2UL) /*!< CMPSTOCA (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPSER_CMPSTTSA_Pos (0UL) /*!< CMPSTTSA (Bit 0) */ + #define R_ADC0_ADCMPSER_CMPSTTSA_Msk (0x1UL) /*!< CMPSTTSA (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCMPBNSR ======================================================= */ + #define R_ADC0_ADCMPBNSR_CMPLB_Pos (7UL) /*!< CMPLB (Bit 7) */ + #define R_ADC0_ADCMPBNSR_CMPLB_Msk (0x80UL) /*!< CMPLB (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCMPBNSR_CMPCHB_Pos (0UL) /*!< CMPCHB (Bit 0) */ + #define R_ADC0_ADCMPBNSR_CMPCHB_Msk (0x3fUL) /*!< CMPCHB (Bitfield-Mask: 0x3f) */ +/* ======================================================= ADWINLLB ======================================================== */ + #define R_ADC0_ADWINLLB_ADWINLLB_Pos (0UL) /*!< ADWINLLB (Bit 0) */ + #define R_ADC0_ADWINLLB_ADWINLLB_Msk (0xffffUL) /*!< ADWINLLB (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADWINULB ======================================================== */ + #define R_ADC0_ADWINULB_ADWINULB_Pos (0UL) /*!< ADWINULB (Bit 0) */ + #define R_ADC0_ADWINULB_ADWINULB_Msk (0xffffUL) /*!< ADWINULB (Bitfield-Mask: 0xffff) */ +/* ======================================================= ADCMPBSR ======================================================== */ + #define R_ADC0_ADCMPBSR_CMPSTB_Pos (0UL) /*!< CMPSTB (Bit 0) */ + #define R_ADC0_ADCMPBSR_CMPSTB_Msk (0x1UL) /*!< CMPSTB (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSSTRL ======================================================== */ + #define R_ADC0_ADSSTRL_SST_Pos (0UL) /*!< SST (Bit 0) */ + #define R_ADC0_ADSSTRL_SST_Msk (0xffUL) /*!< SST (Bitfield-Mask: 0xff) */ +/* ======================================================== ADSSTRT ======================================================== */ + #define R_ADC0_ADSSTRT_SST_Pos (0UL) /*!< SST (Bit 0) */ + #define R_ADC0_ADSSTRT_SST_Msk (0xffUL) /*!< SST (Bitfield-Mask: 0xff) */ +/* ======================================================== ADSSTRO ======================================================== */ + #define R_ADC0_ADSSTRO_SST_Pos (0UL) /*!< SST (Bit 0) */ + #define R_ADC0_ADSSTRO_SST_Msk (0xffUL) /*!< SST (Bitfield-Mask: 0xff) */ +/* ======================================================== ADSSTR ========================================================= */ + #define R_ADC0_ADSSTR_SST_Pos (0UL) /*!< SST (Bit 0) */ + #define R_ADC0_ADSSTR_SST_Msk (0xffUL) /*!< SST (Bitfield-Mask: 0xff) */ +/* ======================================================== ADPGACR ======================================================== */ + #define R_ADC0_ADPGACR_P002GEN_Pos (11UL) /*!< P002GEN (Bit 11) */ + #define R_ADC0_ADPGACR_P002GEN_Msk (0x800UL) /*!< P002GEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P002ENAMP_Pos (10UL) /*!< P002ENAMP (Bit 10) */ + #define R_ADC0_ADPGACR_P002ENAMP_Msk (0x400UL) /*!< P002ENAMP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P002SEL1_Pos (9UL) /*!< P002SEL1 (Bit 9) */ + #define R_ADC0_ADPGACR_P002SEL1_Msk (0x200UL) /*!< P002SEL1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P002SEL0_Pos (8UL) /*!< P002SEL0 (Bit 8) */ + #define R_ADC0_ADPGACR_P002SEL0_Msk (0x100UL) /*!< P002SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P001GEN_Pos (7UL) /*!< P001GEN (Bit 7) */ + #define R_ADC0_ADPGACR_P001GEN_Msk (0x80UL) /*!< P001GEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P001ENAMP_Pos (6UL) /*!< P001ENAMP (Bit 6) */ + #define R_ADC0_ADPGACR_P001ENAMP_Msk (0x40UL) /*!< P001ENAMP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P001SEL1_Pos (5UL) /*!< P001SEL1 (Bit 5) */ + #define R_ADC0_ADPGACR_P001SEL1_Msk (0x20UL) /*!< P001SEL1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P001SEL0_Pos (4UL) /*!< P001SEL0 (Bit 4) */ + #define R_ADC0_ADPGACR_P001SEL0_Msk (0x10UL) /*!< P001SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P000GEN_Pos (3UL) /*!< P000GEN (Bit 3) */ + #define R_ADC0_ADPGACR_P000GEN_Msk (0x8UL) /*!< P000GEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P000ENAMP_Pos (2UL) /*!< P000ENAMP (Bit 2) */ + #define R_ADC0_ADPGACR_P000ENAMP_Msk (0x4UL) /*!< P000ENAMP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P000SEL1_Pos (1UL) /*!< P000SEL1 (Bit 1) */ + #define R_ADC0_ADPGACR_P000SEL1_Msk (0x2UL) /*!< P000SEL1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P000SEL0_Pos (0UL) /*!< P000SEL0 (Bit 0) */ + #define R_ADC0_ADPGACR_P000SEL0_Msk (0x1UL) /*!< P000SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003SEL0_Pos (12UL) /*!< P003SEL0 (Bit 12) */ + #define R_ADC0_ADPGACR_P003SEL0_Msk (0x1000UL) /*!< P003SEL0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003SEL1_Pos (13UL) /*!< P003SEL1 (Bit 13) */ + #define R_ADC0_ADPGACR_P003SEL1_Msk (0x2000UL) /*!< P003SEL1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003ENAMP_Pos (14UL) /*!< P003ENAMP (Bit 14) */ + #define R_ADC0_ADPGACR_P003ENAMP_Msk (0x4000UL) /*!< P003ENAMP (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGACR_P003GEN_Pos (15UL) /*!< P003GEN (Bit 15) */ + #define R_ADC0_ADPGACR_P003GEN_Msk (0x8000UL) /*!< P003GEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ADRD ========================================================== */ + #define R_ADC0_ADRD_AD_Pos (0UL) /*!< AD (Bit 0) */ + #define R_ADC0_ADRD_AD_Msk (0xffffUL) /*!< AD (Bitfield-Mask: 0xffff) */ +/* ========================================================= ADRST ========================================================= */ + #define R_ADC0_ADRST_DIAGST_Pos (0UL) /*!< DIAGST (Bit 0) */ + #define R_ADC0_ADRST_DIAGST_Msk (0x3UL) /*!< DIAGST (Bitfield-Mask: 0x03) */ +/* ====================================================== VREFAMPCNT ======================================================= */ + #define R_ADC0_VREFAMPCNT_VREFADCG_Pos (1UL) /*!< VREFADCG (Bit 1) */ + #define R_ADC0_VREFAMPCNT_VREFADCG_Msk (0x6UL) /*!< VREFADCG (Bitfield-Mask: 0x03) */ + #define R_ADC0_VREFAMPCNT_VREFADCEN_Pos (3UL) /*!< VREFADCEN (Bit 3) */ + #define R_ADC0_VREFAMPCNT_VREFADCEN_Msk (0x8UL) /*!< VREFADCEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_VREFAMPCNT_ADSLP_Pos (7UL) /*!< ADSLP (Bit 7) */ + #define R_ADC0_VREFAMPCNT_ADSLP_Msk (0x80UL) /*!< ADSLP (Bitfield-Mask: 0x01) */ + #define R_ADC0_VREFAMPCNT_OLDETEN_Pos (0UL) /*!< OLDETEN (Bit 0) */ + #define R_ADC0_VREFAMPCNT_OLDETEN_Msk (0x1UL) /*!< OLDETEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_VREFAMPCNT_BGREN_Pos (4UL) /*!< BGREN (Bit 4) */ + #define R_ADC0_VREFAMPCNT_BGREN_Msk (0x10UL) /*!< BGREN (Bitfield-Mask: 0x01) */ +/* ======================================================= ADCALEXE ======================================================== */ + #define R_ADC0_ADCALEXE_CALEXE_Pos (7UL) /*!< CALEXE (Bit 7) */ + #define R_ADC0_ADCALEXE_CALEXE_Msk (0x80UL) /*!< CALEXE (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADCALEXE_CALMON_Pos (6UL) /*!< CALMON (Bit 6) */ + #define R_ADC0_ADCALEXE_CALMON_Msk (0x40UL) /*!< CALMON (Bitfield-Mask: 0x01) */ +/* ======================================================== ADANIM ========================================================= */ + #define R_ADC0_ADANIM_ANIM_Pos (0UL) /*!< ANIM (Bit 0) */ + #define R_ADC0_ADANIM_ANIM_Msk (0x1UL) /*!< ANIM (Bitfield-Mask: 0x01) */ +/* ======================================================= ADPGAGS0 ======================================================== */ + #define R_ADC0_ADPGAGS0_P002GAIN_Pos (8UL) /*!< P002GAIN (Bit 8) */ + #define R_ADC0_ADPGAGS0_P002GAIN_Msk (0xf00UL) /*!< P002GAIN (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADPGAGS0_P001GAIN_Pos (4UL) /*!< P001GAIN (Bit 4) */ + #define R_ADC0_ADPGAGS0_P001GAIN_Msk (0xf0UL) /*!< P001GAIN (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADPGAGS0_P000GAIN_Pos (0UL) /*!< P000GAIN (Bit 0) */ + #define R_ADC0_ADPGAGS0_P000GAIN_Msk (0xfUL) /*!< P000GAIN (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADPGAGS0_P003GAIN_Pos (12UL) /*!< P003GAIN (Bit 12) */ + #define R_ADC0_ADPGAGS0_P003GAIN_Msk (0xf000UL) /*!< P003GAIN (Bitfield-Mask: 0x0f) */ +/* ======================================================= ADPGADCR0 ======================================================= */ + #define R_ADC0_ADPGADCR0_P003DG_Pos (12UL) /*!< P003DG (Bit 12) */ + #define R_ADC0_ADPGADCR0_P003DG_Msk (0x3000UL) /*!< P003DG (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADPGADCR0_P002DEN_Pos (11UL) /*!< P002DEN (Bit 11) */ + #define R_ADC0_ADPGADCR0_P002DEN_Msk (0x800UL) /*!< P002DEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGADCR0_P002DG_Pos (8UL) /*!< P002DG (Bit 8) */ + #define R_ADC0_ADPGADCR0_P002DG_Msk (0x300UL) /*!< P002DG (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADPGADCR0_P001DEN_Pos (7UL) /*!< P001DEN (Bit 7) */ + #define R_ADC0_ADPGADCR0_P001DEN_Msk (0x80UL) /*!< P001DEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGADCR0_P001DG_Pos (4UL) /*!< P001DG (Bit 4) */ + #define R_ADC0_ADPGADCR0_P001DG_Msk (0x30UL) /*!< P001DG (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADPGADCR0_P000DEN_Pos (3UL) /*!< P000DEN (Bit 3) */ + #define R_ADC0_ADPGADCR0_P000DEN_Msk (0x8UL) /*!< P000DEN (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADPGADCR0_P000DG_Pos (0UL) /*!< P000DG (Bit 0) */ + #define R_ADC0_ADPGADCR0_P000DG_Msk (0x3UL) /*!< P000DG (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADPGADCR0_P003DEN_Pos (15UL) /*!< P003DEN (Bit 15) */ + #define R_ADC0_ADPGADCR0_P003DEN_Msk (0x8000UL) /*!< P003DEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ADREF ========================================================= */ + #define R_ADC0_ADREF_ADF_Pos (0UL) /*!< ADF (Bit 0) */ + #define R_ADC0_ADREF_ADF_Msk (0x1UL) /*!< ADF (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADREF_ADSCACT_Pos (7UL) /*!< ADSCACT (Bit 7) */ + #define R_ADC0_ADREF_ADSCACT_Msk (0x80UL) /*!< ADSCACT (Bitfield-Mask: 0x01) */ +/* ======================================================== ADEXREF ======================================================== */ + #define R_ADC0_ADEXREF_GBADF_Pos (0UL) /*!< GBADF (Bit 0) */ + #define R_ADC0_ADEXREF_GBADF_Msk (0x1UL) /*!< GBADF (Bitfield-Mask: 0x01) */ +/* ======================================================= ADAMPOFF ======================================================== */ + #define R_ADC0_ADAMPOFF_OPOFF_Pos (0UL) /*!< OPOFF (Bit 0) */ + #define R_ADC0_ADAMPOFF_OPOFF_Msk (0xffUL) /*!< OPOFF (Bitfield-Mask: 0xff) */ +/* ======================================================== ADTSTPR ======================================================== */ + #define R_ADC0_ADTSTPR_PRO_Pos (0UL) /*!< PRO (Bit 0) */ + #define R_ADC0_ADTSTPR_PRO_Msk (0x1UL) /*!< PRO (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTPR_B0WI_Pos (1UL) /*!< B0WI (Bit 1) */ + #define R_ADC0_ADTSTPR_B0WI_Msk (0x2UL) /*!< B0WI (Bitfield-Mask: 0x01) */ +/* ======================================================= ADDDACER ======================================================== */ + #define R_ADC0_ADDDACER_WRION_Pos (0UL) /*!< WRION (Bit 0) */ + #define R_ADC0_ADDDACER_WRION_Msk (0x1fUL) /*!< WRION (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADDDACER_WRIOFF_Pos (8UL) /*!< WRIOFF (Bit 8) */ + #define R_ADC0_ADDDACER_WRIOFF_Msk (0x1f00UL) /*!< WRIOFF (Bitfield-Mask: 0x1f) */ + #define R_ADC0_ADDDACER_ADHS_Pos (15UL) /*!< ADHS (Bit 15) */ + #define R_ADC0_ADDDACER_ADHS_Msk (0x8000UL) /*!< ADHS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADEXTSTR ======================================================== */ + #define R_ADC0_ADEXTSTR_SHTEST_Pos (0UL) /*!< SHTEST (Bit 0) */ + #define R_ADC0_ADEXTSTR_SHTEST_Msk (0x7UL) /*!< SHTEST (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADEXTSTR_SWTST_Pos (4UL) /*!< SWTST (Bit 4) */ + #define R_ADC0_ADEXTSTR_SWTST_Msk (0x30UL) /*!< SWTST (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_SHTRM_Pos (8UL) /*!< SHTRM (Bit 8) */ + #define R_ADC0_ADEXTSTR_SHTRM_Msk (0x300UL) /*!< SHTRM (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_ADTRM3_Pos (11UL) /*!< ADTRM3 (Bit 11) */ + #define R_ADC0_ADEXTSTR_ADTRM3_Msk (0x800UL) /*!< ADTRM3 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADEXTSTR_ADTRM2_Pos (12UL) /*!< ADTRM2 (Bit 12) */ + #define R_ADC0_ADEXTSTR_ADTRM2_Msk (0x3000UL) /*!< ADTRM2 (Bitfield-Mask: 0x03) */ + #define R_ADC0_ADEXTSTR_ADTRM1_Pos (14UL) /*!< ADTRM1 (Bit 14) */ + #define R_ADC0_ADEXTSTR_ADTRM1_Msk (0xc000UL) /*!< ADTRM1 (Bitfield-Mask: 0x03) */ +/* ======================================================== ADTSTRA ======================================================== */ + #define R_ADC0_ADTSTRA_ATBUSSEL_Pos (0UL) /*!< ATBUSSEL (Bit 0) */ + #define R_ADC0_ADTSTRA_ATBUSSEL_Msk (0x1UL) /*!< ATBUSSEL (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_TSTSWREF_Pos (1UL) /*!< TSTSWREF (Bit 1) */ + #define R_ADC0_ADTSTRA_TSTSWREF_Msk (0xeUL) /*!< TSTSWREF (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADTSTRA_OCSW_Pos (5UL) /*!< OCSW (Bit 5) */ + #define R_ADC0_ADTSTRA_OCSW_Msk (0x20UL) /*!< OCSW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_TSSW_Pos (6UL) /*!< TSSW (Bit 6) */ + #define R_ADC0_ADTSTRA_TSSW_Msk (0x40UL) /*!< TSSW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADTSTRA_ADTEST_AD_Pos (8UL) /*!< ADTEST_AD (Bit 8) */ + #define R_ADC0_ADTSTRA_ADTEST_AD_Msk (0xf00UL) /*!< ADTEST_AD (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADTSTRA_ADTEST_IO_Pos (12UL) /*!< ADTEST_IO (Bit 12) */ + #define R_ADC0_ADTSTRA_ADTEST_IO_Msk (0xf000UL) /*!< ADTEST_IO (Bitfield-Mask: 0x0f) */ +/* ======================================================== ADTSTRB ======================================================== */ + #define R_ADC0_ADTSTRB_ADVAL_Pos (0UL) /*!< ADVAL (Bit 0) */ + #define R_ADC0_ADTSTRB_ADVAL_Msk (0x7fffUL) /*!< ADVAL (Bitfield-Mask: 0x7fff) */ +/* ======================================================== ADTSTRC ======================================================== */ + #define R_ADC0_ADTSTRC_ADMD_Pos (0UL) /*!< ADMD (Bit 0) */ + #define R_ADC0_ADTSTRC_ADMD_Msk (0xffUL) /*!< ADMD (Bitfield-Mask: 0xff) */ + #define R_ADC0_ADTSTRC_SYNCERR_Pos (12UL) /*!< SYNCERR (Bit 12) */ + #define R_ADC0_ADTSTRC_SYNCERR_Msk (0x1000UL) /*!< SYNCERR (Bitfield-Mask: 0x01) */ +/* ======================================================== ADTSTRD ======================================================== */ + #define R_ADC0_ADTSTRD_ADVAL16_Pos (0UL) /*!< ADVAL16 (Bit 0) */ + #define R_ADC0_ADTSTRD_ADVAL16_Msk (0x1UL) /*!< ADVAL16 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR0 ======================================================= */ + #define R_ADC0_ADSWTSTR0_CHSW00_Pos (0UL) /*!< CHSW00 (Bit 0) */ + #define R_ADC0_ADSWTSTR0_CHSW00_Msk (0x1UL) /*!< CHSW00 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW01_Pos (1UL) /*!< CHSW01 (Bit 1) */ + #define R_ADC0_ADSWTSTR0_CHSW01_Msk (0x2UL) /*!< CHSW01 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW02_Pos (2UL) /*!< CHSW02 (Bit 2) */ + #define R_ADC0_ADSWTSTR0_CHSW02_Msk (0x4UL) /*!< CHSW02 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW03_Pos (3UL) /*!< CHSW03 (Bit 3) */ + #define R_ADC0_ADSWTSTR0_CHSW03_Msk (0x8UL) /*!< CHSW03 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW04_Pos (4UL) /*!< CHSW04 (Bit 4) */ + #define R_ADC0_ADSWTSTR0_CHSW04_Msk (0x10UL) /*!< CHSW04 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR0_CHSW05_Pos (5UL) /*!< CHSW05 (Bit 5) */ + #define R_ADC0_ADSWTSTR0_CHSW05_Msk (0x20UL) /*!< CHSW05 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR1 ======================================================= */ + #define R_ADC0_ADSWTSTR1_CHSW16_Pos (0UL) /*!< CHSW16 (Bit 0) */ + #define R_ADC0_ADSWTSTR1_CHSW16_Msk (0x1UL) /*!< CHSW16 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW17_Pos (1UL) /*!< CHSW17 (Bit 1) */ + #define R_ADC0_ADSWTSTR1_CHSW17_Msk (0x2UL) /*!< CHSW17 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW18_Pos (2UL) /*!< CHSW18 (Bit 2) */ + #define R_ADC0_ADSWTSTR1_CHSW18_Msk (0x4UL) /*!< CHSW18 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW19_Pos (3UL) /*!< CHSW19 (Bit 3) */ + #define R_ADC0_ADSWTSTR1_CHSW19_Msk (0x8UL) /*!< CHSW19 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW20_Pos (4UL) /*!< CHSW20 (Bit 4) */ + #define R_ADC0_ADSWTSTR1_CHSW20_Msk (0x10UL) /*!< CHSW20 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR1_CHSW21_Pos (5UL) /*!< CHSW21 (Bit 5) */ + #define R_ADC0_ADSWTSTR1_CHSW21_Msk (0x20UL) /*!< CHSW21 (Bitfield-Mask: 0x01) */ +/* ======================================================= ADSWTSTR2 ======================================================= */ + #define R_ADC0_ADSWTSTR2_EX0SW_Pos (0UL) /*!< EX0SW (Bit 0) */ + #define R_ADC0_ADSWTSTR2_EX0SW_Msk (0x1UL) /*!< EX0SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_EX1SW_Pos (1UL) /*!< EX1SW (Bit 1) */ + #define R_ADC0_ADSWTSTR2_EX1SW_Msk (0x2UL) /*!< EX1SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS0_Pos (4UL) /*!< SHBYPS0 (Bit 4) */ + #define R_ADC0_ADSWTSTR2_SHBYPS0_Msk (0x10UL) /*!< SHBYPS0 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS1_Pos (5UL) /*!< SHBYPS1 (Bit 5) */ + #define R_ADC0_ADSWTSTR2_SHBYPS1_Msk (0x20UL) /*!< SHBYPS1 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_SHBYPS2_Pos (6UL) /*!< SHBYPS2 (Bit 6) */ + #define R_ADC0_ADSWTSTR2_SHBYPS2_Msk (0x40UL) /*!< SHBYPS2 (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP0SW_Pos (8UL) /*!< GRP0SW (Bit 8) */ + #define R_ADC0_ADSWTSTR2_GRP0SW_Msk (0x100UL) /*!< GRP0SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP1SW_Pos (9UL) /*!< GRP1SW (Bit 9) */ + #define R_ADC0_ADSWTSTR2_GRP1SW_Msk (0x200UL) /*!< GRP1SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP2SW_Pos (10UL) /*!< GRP2SW (Bit 10) */ + #define R_ADC0_ADSWTSTR2_GRP2SW_Msk (0x400UL) /*!< GRP2SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRP3SW_Pos (11UL) /*!< GRP3SW (Bit 11) */ + #define R_ADC0_ADSWTSTR2_GRP3SW_Msk (0x800UL) /*!< GRP3SW (Bitfield-Mask: 0x01) */ + #define R_ADC0_ADSWTSTR2_GRPEX1SW_Pos (12UL) /*!< GRPEX1SW (Bit 12) */ + #define R_ADC0_ADSWTSTR2_GRPEX1SW_Msk (0x1000UL) /*!< GRPEX1SW (Bitfield-Mask: 0x01) */ +/* ======================================================== ADSWCR ========================================================= */ + #define R_ADC0_ADSWCR_ADSWREF_Pos (0UL) /*!< ADSWREF (Bit 0) */ + #define R_ADC0_ADSWCR_ADSWREF_Msk (0x7UL) /*!< ADSWREF (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADSWCR_SHSWREF_Pos (4UL) /*!< SHSWREF (Bit 4) */ + #define R_ADC0_ADSWCR_SHSWREF_Msk (0x70UL) /*!< SHSWREF (Bitfield-Mask: 0x07) */ +/* ======================================================== ADGSCS ========================================================= */ + #define R_ADC0_ADGSCS_CHSELGB_Pos (0UL) /*!< CHSELGB (Bit 0) */ + #define R_ADC0_ADGSCS_CHSELGB_Msk (0xffUL) /*!< CHSELGB (Bitfield-Mask: 0xff) */ + #define R_ADC0_ADGSCS_CHSELGA_Pos (8UL) /*!< CHSELGA (Bit 8) */ + #define R_ADC0_ADGSCS_CHSELGA_Msk (0xff00UL) /*!< CHSELGA (Bitfield-Mask: 0xff) */ +/* ========================================================= ADSER ========================================================= */ + #define R_ADC0_ADSER_SMPEX_Pos (7UL) /*!< SMPEX (Bit 7) */ + #define R_ADC0_ADSER_SMPEX_Msk (0x80UL) /*!< SMPEX (Bitfield-Mask: 0x01) */ +/* ======================================================== ADBUF0 ========================================================= */ + #define R_ADC0_ADBUF0_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF0_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF1 ========================================================= */ + #define R_ADC0_ADBUF1_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF1_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF2 ========================================================= */ + #define R_ADC0_ADBUF2_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF2_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF3 ========================================================= */ + #define R_ADC0_ADBUF3_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF3_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF4 ========================================================= */ + #define R_ADC0_ADBUF4_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF4_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF5 ========================================================= */ + #define R_ADC0_ADBUF5_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF5_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF6 ========================================================= */ + #define R_ADC0_ADBUF6_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF6_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF7 ========================================================= */ + #define R_ADC0_ADBUF7_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF7_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF8 ========================================================= */ + #define R_ADC0_ADBUF8_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF8_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF9 ========================================================= */ + #define R_ADC0_ADBUF9_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF9_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF10 ======================================================== */ + #define R_ADC0_ADBUF10_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF10_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF11 ======================================================== */ + #define R_ADC0_ADBUF11_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF11_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF12 ======================================================== */ + #define R_ADC0_ADBUF12_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF12_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF13 ======================================================== */ + #define R_ADC0_ADBUF13_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF13_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF14 ======================================================== */ + #define R_ADC0_ADBUF14_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF14_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUF15 ======================================================== */ + #define R_ADC0_ADBUF15_ADBUF_Pos (0UL) /*!< ADBUF (Bit 0) */ + #define R_ADC0_ADBUF15_ADBUF_Msk (0xffffUL) /*!< ADBUF (Bitfield-Mask: 0xffff) */ +/* ======================================================== ADBUFEN ======================================================== */ + #define R_ADC0_ADBUFEN_BUFEN_Pos (0UL) /*!< BUFEN (Bit 0) */ + #define R_ADC0_ADBUFEN_BUFEN_Msk (0x1UL) /*!< BUFEN (Bitfield-Mask: 0x01) */ +/* ======================================================= ADBUFPTR ======================================================== */ + #define R_ADC0_ADBUFPTR_BUFPTR_Pos (0UL) /*!< BUFPTR (Bit 0) */ + #define R_ADC0_ADBUFPTR_BUFPTR_Msk (0xfUL) /*!< BUFPTR (Bitfield-Mask: 0x0f) */ + #define R_ADC0_ADBUFPTR_PTROVF_Pos (4UL) /*!< PTROVF (Bit 4) */ + #define R_ADC0_ADBUFPTR_PTROVF_Msk (0x10UL) /*!< PTROVF (Bitfield-Mask: 0x01) */ +/* ======================================================= ADPGADBS0 ======================================================= */ + #define R_ADC0_ADPGADBS0_P0BIAS_Pos (0UL) /*!< P0BIAS (Bit 0) */ + #define R_ADC0_ADPGADBS0_P0BIAS_Msk (0x1UL) /*!< P0BIAS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADPGADBS1 ======================================================= */ + #define R_ADC0_ADPGADBS1_P3BIAS_Pos (0UL) /*!< P3BIAS (Bit 0) */ + #define R_ADC0_ADPGADBS1_P3BIAS_Msk (0x1UL) /*!< P3BIAS (Bitfield-Mask: 0x01) */ +/* ======================================================= ADREFMON ======================================================== */ + #define R_ADC0_ADREFMON_PGAMON_Pos (0UL) /*!< PGAMON (Bit 0) */ + #define R_ADC0_ADREFMON_PGAMON_Msk (0x7UL) /*!< PGAMON (Bitfield-Mask: 0x07) */ + #define R_ADC0_ADREFMON_MONSEL_Pos (16UL) /*!< MONSEL (Bit 16) */ + #define R_ADC0_ADREFMON_MONSEL_Msk (0xf0000UL) /*!< MONSEL (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ R_BUS ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CSRECEN ======================================================== */ + #define R_BUS_CSRECEN_RCVENM_Pos (8UL) /*!< RCVENM (Bit 8) */ + #define R_BUS_CSRECEN_RCVENM_Msk (0x100UL) /*!< RCVENM (Bitfield-Mask: 0x01) */ + #define R_BUS_CSRECEN_RCVEN_Pos (0UL) /*!< RCVEN (Bit 0) */ + #define R_BUS_CSRECEN_RCVEN_Msk (0x1UL) /*!< RCVEN (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSMABT ======================================================== */ + #define R_BUS_BUSMABT_ARBS_Pos (0UL) /*!< ARBS (Bit 0) */ + #define R_BUS_BUSMABT_ARBS_Msk (0x1UL) /*!< ARBS (Bitfield-Mask: 0x01) */ +/* ======================================================= BUSDIVBYP ======================================================= */ + #define R_BUS_BUSDIVBYP_CPU0SBPE_Pos (16UL) /*!< CPU0SBPE (Bit 16) */ + #define R_BUS_BUSDIVBYP_CPU0SBPE_Msk (0x10000UL) /*!< CPU0SBPE (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSDIVBYP_GDSSBPE_Pos (3UL) /*!< GDSSBPE (Bit 3) */ + #define R_BUS_BUSDIVBYP_GDSSBPE_Msk (0x8UL) /*!< GDSSBPE (Bitfield-Mask: 0x01) */ + #define R_BUS_BUSDIVBYP_EDMABPE_Pos (0UL) /*!< EDMABPE (Bit 0) */ + #define R_BUS_BUSDIVBYP_EDMABPE_Msk (0x1UL) /*!< EDMABPE (Bitfield-Mask: 0x01) */ +/* ======================================================= BUSTHRPUT ======================================================= */ + #define R_BUS_BUSTHRPUT_DIS_Pos (0UL) /*!< DIS (Bit 0) */ + #define R_BUS_BUSTHRPUT_DIS_Msk (0x1UL) /*!< DIS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CAC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CACR0 ========================================================= */ + #define R_CAC_CACR0_CFME_Pos (0UL) /*!< CFME (Bit 0) */ + #define R_CAC_CACR0_CFME_Msk (0x1UL) /*!< CFME (Bitfield-Mask: 0x01) */ +/* ========================================================= CACR1 ========================================================= */ + #define R_CAC_CACR1_EDGES_Pos (6UL) /*!< EDGES (Bit 6) */ + #define R_CAC_CACR1_EDGES_Msk (0xc0UL) /*!< EDGES (Bitfield-Mask: 0x03) */ + #define R_CAC_CACR1_TCSS_Pos (4UL) /*!< TCSS (Bit 4) */ + #define R_CAC_CACR1_TCSS_Msk (0x30UL) /*!< TCSS (Bitfield-Mask: 0x03) */ + #define R_CAC_CACR1_FMCS_Pos (1UL) /*!< FMCS (Bit 1) */ + #define R_CAC_CACR1_FMCS_Msk (0xeUL) /*!< FMCS (Bitfield-Mask: 0x07) */ + #define R_CAC_CACR1_CACREFE_Pos (0UL) /*!< CACREFE (Bit 0) */ + #define R_CAC_CACR1_CACREFE_Msk (0x1UL) /*!< CACREFE (Bitfield-Mask: 0x01) */ +/* ========================================================= CACR2 ========================================================= */ + #define R_CAC_CACR2_DFS_Pos (6UL) /*!< DFS (Bit 6) */ + #define R_CAC_CACR2_DFS_Msk (0xc0UL) /*!< DFS (Bitfield-Mask: 0x03) */ + #define R_CAC_CACR2_RCDS_Pos (4UL) /*!< RCDS (Bit 4) */ + #define R_CAC_CACR2_RCDS_Msk (0x30UL) /*!< RCDS (Bitfield-Mask: 0x03) */ + #define R_CAC_CACR2_RSCS_Pos (1UL) /*!< RSCS (Bit 1) */ + #define R_CAC_CACR2_RSCS_Msk (0xeUL) /*!< RSCS (Bitfield-Mask: 0x07) */ + #define R_CAC_CACR2_RPS_Pos (0UL) /*!< RPS (Bit 0) */ + #define R_CAC_CACR2_RPS_Msk (0x1UL) /*!< RPS (Bitfield-Mask: 0x01) */ +/* ========================================================= CAICR ========================================================= */ + #define R_CAC_CAICR_OVFFCL_Pos (6UL) /*!< OVFFCL (Bit 6) */ + #define R_CAC_CAICR_OVFFCL_Msk (0x40UL) /*!< OVFFCL (Bitfield-Mask: 0x01) */ + #define R_CAC_CAICR_MENDFCL_Pos (5UL) /*!< MENDFCL (Bit 5) */ + #define R_CAC_CAICR_MENDFCL_Msk (0x20UL) /*!< MENDFCL (Bitfield-Mask: 0x01) */ + #define R_CAC_CAICR_FERRFCL_Pos (4UL) /*!< FERRFCL (Bit 4) */ + #define R_CAC_CAICR_FERRFCL_Msk (0x10UL) /*!< FERRFCL (Bitfield-Mask: 0x01) */ + #define R_CAC_CAICR_OVFIE_Pos (2UL) /*!< OVFIE (Bit 2) */ + #define R_CAC_CAICR_OVFIE_Msk (0x4UL) /*!< OVFIE (Bitfield-Mask: 0x01) */ + #define R_CAC_CAICR_MENDIE_Pos (1UL) /*!< MENDIE (Bit 1) */ + #define R_CAC_CAICR_MENDIE_Msk (0x2UL) /*!< MENDIE (Bitfield-Mask: 0x01) */ + #define R_CAC_CAICR_FERRIE_Pos (0UL) /*!< FERRIE (Bit 0) */ + #define R_CAC_CAICR_FERRIE_Msk (0x1UL) /*!< FERRIE (Bitfield-Mask: 0x01) */ +/* ========================================================= CASTR ========================================================= */ + #define R_CAC_CASTR_OVFF_Pos (2UL) /*!< OVFF (Bit 2) */ + #define R_CAC_CASTR_OVFF_Msk (0x4UL) /*!< OVFF (Bitfield-Mask: 0x01) */ + #define R_CAC_CASTR_MENDF_Pos (1UL) /*!< MENDF (Bit 1) */ + #define R_CAC_CASTR_MENDF_Msk (0x2UL) /*!< MENDF (Bitfield-Mask: 0x01) */ + #define R_CAC_CASTR_FERRF_Pos (0UL) /*!< FERRF (Bit 0) */ + #define R_CAC_CASTR_FERRF_Msk (0x1UL) /*!< FERRF (Bitfield-Mask: 0x01) */ +/* ======================================================== CAULVR ========================================================= */ + #define R_CAC_CAULVR_CAULVR_Pos (0UL) /*!< CAULVR (Bit 0) */ + #define R_CAC_CAULVR_CAULVR_Msk (0xffffUL) /*!< CAULVR (Bitfield-Mask: 0xffff) */ +/* ======================================================== CALLVR ========================================================= */ + #define R_CAC_CALLVR_CALLVR_Pos (0UL) /*!< CALLVR (Bit 0) */ + #define R_CAC_CALLVR_CALLVR_Msk (0xffffUL) /*!< CALLVR (Bitfield-Mask: 0xffff) */ +/* ======================================================== CACNTBR ======================================================== */ + #define R_CAC_CACNTBR_CACNTBR_Pos (0UL) /*!< CACNTBR (Bit 0) */ + #define R_CAC_CACNTBR_CACNTBR_Msk (0xffffUL) /*!< CACNTBR (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ R_CAN0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== MKR ========================================================== */ + #define R_CAN0_MKR_SID_Pos (18UL) /*!< SID (Bit 18) */ + #define R_CAN0_MKR_SID_Msk (0x1ffc0000UL) /*!< SID (Bitfield-Mask: 0x7ff) */ + #define R_CAN0_MKR_EID_Pos (0UL) /*!< EID (Bit 0) */ + #define R_CAN0_MKR_EID_Msk (0x3ffffUL) /*!< EID (Bitfield-Mask: 0x3ffff) */ +/* ========================================================= FIDCR ========================================================= */ + #define R_CAN0_FIDCR_IDE_Pos (31UL) /*!< IDE (Bit 31) */ + #define R_CAN0_FIDCR_IDE_Msk (0x80000000UL) /*!< IDE (Bitfield-Mask: 0x01) */ + #define R_CAN0_FIDCR_RTR_Pos (30UL) /*!< RTR (Bit 30) */ + #define R_CAN0_FIDCR_RTR_Msk (0x40000000UL) /*!< RTR (Bitfield-Mask: 0x01) */ + #define R_CAN0_FIDCR_SID_Pos (18UL) /*!< SID (Bit 18) */ + #define R_CAN0_FIDCR_SID_Msk (0x1ffc0000UL) /*!< SID (Bitfield-Mask: 0x7ff) */ + #define R_CAN0_FIDCR_EID_Pos (0UL) /*!< EID (Bit 0) */ + #define R_CAN0_FIDCR_EID_Msk (0x3ffffUL) /*!< EID (Bitfield-Mask: 0x3ffff) */ +/* ======================================================== MKIVLR ========================================================= */ + #define R_CAN0_MKIVLR_MB31_Pos (31UL) /*!< MB31 (Bit 31) */ + #define R_CAN0_MKIVLR_MB31_Msk (0x80000000UL) /*!< MB31 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB30_Pos (30UL) /*!< MB30 (Bit 30) */ + #define R_CAN0_MKIVLR_MB30_Msk (0x40000000UL) /*!< MB30 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB29_Pos (29UL) /*!< MB29 (Bit 29) */ + #define R_CAN0_MKIVLR_MB29_Msk (0x20000000UL) /*!< MB29 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB28_Pos (28UL) /*!< MB28 (Bit 28) */ + #define R_CAN0_MKIVLR_MB28_Msk (0x10000000UL) /*!< MB28 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB27_Pos (27UL) /*!< MB27 (Bit 27) */ + #define R_CAN0_MKIVLR_MB27_Msk (0x8000000UL) /*!< MB27 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB26_Pos (26UL) /*!< MB26 (Bit 26) */ + #define R_CAN0_MKIVLR_MB26_Msk (0x4000000UL) /*!< MB26 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB25_Pos (25UL) /*!< MB25 (Bit 25) */ + #define R_CAN0_MKIVLR_MB25_Msk (0x2000000UL) /*!< MB25 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB24_Pos (24UL) /*!< MB24 (Bit 24) */ + #define R_CAN0_MKIVLR_MB24_Msk (0x1000000UL) /*!< MB24 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB23_Pos (23UL) /*!< MB23 (Bit 23) */ + #define R_CAN0_MKIVLR_MB23_Msk (0x800000UL) /*!< MB23 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB22_Pos (22UL) /*!< MB22 (Bit 22) */ + #define R_CAN0_MKIVLR_MB22_Msk (0x400000UL) /*!< MB22 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB21_Pos (21UL) /*!< MB21 (Bit 21) */ + #define R_CAN0_MKIVLR_MB21_Msk (0x200000UL) /*!< MB21 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB20_Pos (20UL) /*!< MB20 (Bit 20) */ + #define R_CAN0_MKIVLR_MB20_Msk (0x100000UL) /*!< MB20 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB19_Pos (19UL) /*!< MB19 (Bit 19) */ + #define R_CAN0_MKIVLR_MB19_Msk (0x80000UL) /*!< MB19 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB18_Pos (18UL) /*!< MB18 (Bit 18) */ + #define R_CAN0_MKIVLR_MB18_Msk (0x40000UL) /*!< MB18 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB17_Pos (17UL) /*!< MB17 (Bit 17) */ + #define R_CAN0_MKIVLR_MB17_Msk (0x20000UL) /*!< MB17 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB16_Pos (16UL) /*!< MB16 (Bit 16) */ + #define R_CAN0_MKIVLR_MB16_Msk (0x10000UL) /*!< MB16 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB15_Pos (15UL) /*!< MB15 (Bit 15) */ + #define R_CAN0_MKIVLR_MB15_Msk (0x8000UL) /*!< MB15 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB14_Pos (14UL) /*!< MB14 (Bit 14) */ + #define R_CAN0_MKIVLR_MB14_Msk (0x4000UL) /*!< MB14 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB13_Pos (13UL) /*!< MB13 (Bit 13) */ + #define R_CAN0_MKIVLR_MB13_Msk (0x2000UL) /*!< MB13 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB12_Pos (12UL) /*!< MB12 (Bit 12) */ + #define R_CAN0_MKIVLR_MB12_Msk (0x1000UL) /*!< MB12 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB11_Pos (11UL) /*!< MB11 (Bit 11) */ + #define R_CAN0_MKIVLR_MB11_Msk (0x800UL) /*!< MB11 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB10_Pos (10UL) /*!< MB10 (Bit 10) */ + #define R_CAN0_MKIVLR_MB10_Msk (0x400UL) /*!< MB10 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB9_Pos (9UL) /*!< MB9 (Bit 9) */ + #define R_CAN0_MKIVLR_MB9_Msk (0x200UL) /*!< MB9 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB8_Pos (8UL) /*!< MB8 (Bit 8) */ + #define R_CAN0_MKIVLR_MB8_Msk (0x100UL) /*!< MB8 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB7_Pos (7UL) /*!< MB7 (Bit 7) */ + #define R_CAN0_MKIVLR_MB7_Msk (0x80UL) /*!< MB7 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB6_Pos (6UL) /*!< MB6 (Bit 6) */ + #define R_CAN0_MKIVLR_MB6_Msk (0x40UL) /*!< MB6 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB5_Pos (5UL) /*!< MB5 (Bit 5) */ + #define R_CAN0_MKIVLR_MB5_Msk (0x20UL) /*!< MB5 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB4_Pos (4UL) /*!< MB4 (Bit 4) */ + #define R_CAN0_MKIVLR_MB4_Msk (0x10UL) /*!< MB4 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB3_Pos (3UL) /*!< MB3 (Bit 3) */ + #define R_CAN0_MKIVLR_MB3_Msk (0x8UL) /*!< MB3 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB2_Pos (2UL) /*!< MB2 (Bit 2) */ + #define R_CAN0_MKIVLR_MB2_Msk (0x4UL) /*!< MB2 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB1_Pos (1UL) /*!< MB1 (Bit 1) */ + #define R_CAN0_MKIVLR_MB1_Msk (0x2UL) /*!< MB1 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MKIVLR_MB0_Pos (0UL) /*!< MB0 (Bit 0) */ + #define R_CAN0_MKIVLR_MB0_Msk (0x1UL) /*!< MB0 (Bitfield-Mask: 0x01) */ +/* ========================================================= MIER ========================================================== */ + #define R_CAN0_MIER_MB31_Pos (31UL) /*!< MB31 (Bit 31) */ + #define R_CAN0_MIER_MB31_Msk (0x80000000UL) /*!< MB31 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB30_Pos (30UL) /*!< MB30 (Bit 30) */ + #define R_CAN0_MIER_MB30_Msk (0x40000000UL) /*!< MB30 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB29_Pos (29UL) /*!< MB29 (Bit 29) */ + #define R_CAN0_MIER_MB29_Msk (0x20000000UL) /*!< MB29 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB28_Pos (28UL) /*!< MB28 (Bit 28) */ + #define R_CAN0_MIER_MB28_Msk (0x10000000UL) /*!< MB28 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB27_Pos (27UL) /*!< MB27 (Bit 27) */ + #define R_CAN0_MIER_MB27_Msk (0x8000000UL) /*!< MB27 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB26_Pos (26UL) /*!< MB26 (Bit 26) */ + #define R_CAN0_MIER_MB26_Msk (0x4000000UL) /*!< MB26 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB25_Pos (25UL) /*!< MB25 (Bit 25) */ + #define R_CAN0_MIER_MB25_Msk (0x2000000UL) /*!< MB25 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB24_Pos (24UL) /*!< MB24 (Bit 24) */ + #define R_CAN0_MIER_MB24_Msk (0x1000000UL) /*!< MB24 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB23_Pos (23UL) /*!< MB23 (Bit 23) */ + #define R_CAN0_MIER_MB23_Msk (0x800000UL) /*!< MB23 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB22_Pos (22UL) /*!< MB22 (Bit 22) */ + #define R_CAN0_MIER_MB22_Msk (0x400000UL) /*!< MB22 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB21_Pos (21UL) /*!< MB21 (Bit 21) */ + #define R_CAN0_MIER_MB21_Msk (0x200000UL) /*!< MB21 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB20_Pos (20UL) /*!< MB20 (Bit 20) */ + #define R_CAN0_MIER_MB20_Msk (0x100000UL) /*!< MB20 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB19_Pos (19UL) /*!< MB19 (Bit 19) */ + #define R_CAN0_MIER_MB19_Msk (0x80000UL) /*!< MB19 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB18_Pos (18UL) /*!< MB18 (Bit 18) */ + #define R_CAN0_MIER_MB18_Msk (0x40000UL) /*!< MB18 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB17_Pos (17UL) /*!< MB17 (Bit 17) */ + #define R_CAN0_MIER_MB17_Msk (0x20000UL) /*!< MB17 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB16_Pos (16UL) /*!< MB16 (Bit 16) */ + #define R_CAN0_MIER_MB16_Msk (0x10000UL) /*!< MB16 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB15_Pos (15UL) /*!< MB15 (Bit 15) */ + #define R_CAN0_MIER_MB15_Msk (0x8000UL) /*!< MB15 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB14_Pos (14UL) /*!< MB14 (Bit 14) */ + #define R_CAN0_MIER_MB14_Msk (0x4000UL) /*!< MB14 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB13_Pos (13UL) /*!< MB13 (Bit 13) */ + #define R_CAN0_MIER_MB13_Msk (0x2000UL) /*!< MB13 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB12_Pos (12UL) /*!< MB12 (Bit 12) */ + #define R_CAN0_MIER_MB12_Msk (0x1000UL) /*!< MB12 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB11_Pos (11UL) /*!< MB11 (Bit 11) */ + #define R_CAN0_MIER_MB11_Msk (0x800UL) /*!< MB11 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB10_Pos (10UL) /*!< MB10 (Bit 10) */ + #define R_CAN0_MIER_MB10_Msk (0x400UL) /*!< MB10 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB9_Pos (9UL) /*!< MB9 (Bit 9) */ + #define R_CAN0_MIER_MB9_Msk (0x200UL) /*!< MB9 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB8_Pos (8UL) /*!< MB8 (Bit 8) */ + #define R_CAN0_MIER_MB8_Msk (0x100UL) /*!< MB8 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB7_Pos (7UL) /*!< MB7 (Bit 7) */ + #define R_CAN0_MIER_MB7_Msk (0x80UL) /*!< MB7 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB6_Pos (6UL) /*!< MB6 (Bit 6) */ + #define R_CAN0_MIER_MB6_Msk (0x40UL) /*!< MB6 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB5_Pos (5UL) /*!< MB5 (Bit 5) */ + #define R_CAN0_MIER_MB5_Msk (0x20UL) /*!< MB5 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB4_Pos (4UL) /*!< MB4 (Bit 4) */ + #define R_CAN0_MIER_MB4_Msk (0x10UL) /*!< MB4 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB3_Pos (3UL) /*!< MB3 (Bit 3) */ + #define R_CAN0_MIER_MB3_Msk (0x8UL) /*!< MB3 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB2_Pos (2UL) /*!< MB2 (Bit 2) */ + #define R_CAN0_MIER_MB2_Msk (0x4UL) /*!< MB2 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB1_Pos (1UL) /*!< MB1 (Bit 1) */ + #define R_CAN0_MIER_MB1_Msk (0x2UL) /*!< MB1 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_MB0_Pos (0UL) /*!< MB0 (Bit 0) */ + #define R_CAN0_MIER_MB0_Msk (0x1UL) /*!< MB0 (Bitfield-Mask: 0x01) */ +/* ======================================================= MIER_FIFO ======================================================= */ + #define R_CAN0_MIER_FIFO_MB29_Pos (29UL) /*!< MB29 (Bit 29) */ + #define R_CAN0_MIER_FIFO_MB29_Msk (0x20000000UL) /*!< MB29 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB28_Pos (28UL) /*!< MB28 (Bit 28) */ + #define R_CAN0_MIER_FIFO_MB28_Msk (0x10000000UL) /*!< MB28 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB25_Pos (25UL) /*!< MB25 (Bit 25) */ + #define R_CAN0_MIER_FIFO_MB25_Msk (0x2000000UL) /*!< MB25 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB24_Pos (24UL) /*!< MB24 (Bit 24) */ + #define R_CAN0_MIER_FIFO_MB24_Msk (0x1000000UL) /*!< MB24 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB23_Pos (23UL) /*!< MB23 (Bit 23) */ + #define R_CAN0_MIER_FIFO_MB23_Msk (0x800000UL) /*!< MB23 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB22_Pos (22UL) /*!< MB22 (Bit 22) */ + #define R_CAN0_MIER_FIFO_MB22_Msk (0x400000UL) /*!< MB22 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB21_Pos (21UL) /*!< MB21 (Bit 21) */ + #define R_CAN0_MIER_FIFO_MB21_Msk (0x200000UL) /*!< MB21 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB20_Pos (20UL) /*!< MB20 (Bit 20) */ + #define R_CAN0_MIER_FIFO_MB20_Msk (0x100000UL) /*!< MB20 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB19_Pos (19UL) /*!< MB19 (Bit 19) */ + #define R_CAN0_MIER_FIFO_MB19_Msk (0x80000UL) /*!< MB19 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB18_Pos (18UL) /*!< MB18 (Bit 18) */ + #define R_CAN0_MIER_FIFO_MB18_Msk (0x40000UL) /*!< MB18 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB17_Pos (17UL) /*!< MB17 (Bit 17) */ + #define R_CAN0_MIER_FIFO_MB17_Msk (0x20000UL) /*!< MB17 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB16_Pos (16UL) /*!< MB16 (Bit 16) */ + #define R_CAN0_MIER_FIFO_MB16_Msk (0x10000UL) /*!< MB16 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB15_Pos (15UL) /*!< MB15 (Bit 15) */ + #define R_CAN0_MIER_FIFO_MB15_Msk (0x8000UL) /*!< MB15 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB14_Pos (14UL) /*!< MB14 (Bit 14) */ + #define R_CAN0_MIER_FIFO_MB14_Msk (0x4000UL) /*!< MB14 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB13_Pos (13UL) /*!< MB13 (Bit 13) */ + #define R_CAN0_MIER_FIFO_MB13_Msk (0x2000UL) /*!< MB13 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB12_Pos (12UL) /*!< MB12 (Bit 12) */ + #define R_CAN0_MIER_FIFO_MB12_Msk (0x1000UL) /*!< MB12 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB11_Pos (11UL) /*!< MB11 (Bit 11) */ + #define R_CAN0_MIER_FIFO_MB11_Msk (0x800UL) /*!< MB11 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB10_Pos (10UL) /*!< MB10 (Bit 10) */ + #define R_CAN0_MIER_FIFO_MB10_Msk (0x400UL) /*!< MB10 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB9_Pos (9UL) /*!< MB9 (Bit 9) */ + #define R_CAN0_MIER_FIFO_MB9_Msk (0x200UL) /*!< MB9 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB8_Pos (8UL) /*!< MB8 (Bit 8) */ + #define R_CAN0_MIER_FIFO_MB8_Msk (0x100UL) /*!< MB8 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB7_Pos (7UL) /*!< MB7 (Bit 7) */ + #define R_CAN0_MIER_FIFO_MB7_Msk (0x80UL) /*!< MB7 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB6_Pos (6UL) /*!< MB6 (Bit 6) */ + #define R_CAN0_MIER_FIFO_MB6_Msk (0x40UL) /*!< MB6 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB5_Pos (5UL) /*!< MB5 (Bit 5) */ + #define R_CAN0_MIER_FIFO_MB5_Msk (0x20UL) /*!< MB5 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB4_Pos (4UL) /*!< MB4 (Bit 4) */ + #define R_CAN0_MIER_FIFO_MB4_Msk (0x10UL) /*!< MB4 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB3_Pos (3UL) /*!< MB3 (Bit 3) */ + #define R_CAN0_MIER_FIFO_MB3_Msk (0x8UL) /*!< MB3 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB2_Pos (2UL) /*!< MB2 (Bit 2) */ + #define R_CAN0_MIER_FIFO_MB2_Msk (0x4UL) /*!< MB2 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB1_Pos (1UL) /*!< MB1 (Bit 1) */ + #define R_CAN0_MIER_FIFO_MB1_Msk (0x2UL) /*!< MB1 (Bitfield-Mask: 0x01) */ + #define R_CAN0_MIER_FIFO_MB0_Pos (0UL) /*!< MB0 (Bit 0) */ + #define R_CAN0_MIER_FIFO_MB0_Msk (0x1UL) /*!< MB0 (Bitfield-Mask: 0x01) */ +/* ======================================================== MCTL_TX ======================================================== */ + #define R_CAN0_MCTL_TX_TRMREQ_Pos (7UL) /*!< TRMREQ (Bit 7) */ + #define R_CAN0_MCTL_TX_TRMREQ_Msk (0x80UL) /*!< TRMREQ (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_TX_RECREQ_Pos (6UL) /*!< RECREQ (Bit 6) */ + #define R_CAN0_MCTL_TX_RECREQ_Msk (0x40UL) /*!< RECREQ (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_TX_ONESHOT_Pos (4UL) /*!< ONESHOT (Bit 4) */ + #define R_CAN0_MCTL_TX_ONESHOT_Msk (0x10UL) /*!< ONESHOT (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_TX_TRMABT_Pos (2UL) /*!< TRMABT (Bit 2) */ + #define R_CAN0_MCTL_TX_TRMABT_Msk (0x4UL) /*!< TRMABT (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_TX_TRMACTIVE_Pos (1UL) /*!< TRMACTIVE (Bit 1) */ + #define R_CAN0_MCTL_TX_TRMACTIVE_Msk (0x2UL) /*!< TRMACTIVE (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_TX_SENTDATA_Pos (0UL) /*!< SENTDATA (Bit 0) */ + #define R_CAN0_MCTL_TX_SENTDATA_Msk (0x1UL) /*!< SENTDATA (Bitfield-Mask: 0x01) */ +/* ======================================================== MCTL_RX ======================================================== */ + #define R_CAN0_MCTL_RX_TRMREQ_Pos (7UL) /*!< TRMREQ (Bit 7) */ + #define R_CAN0_MCTL_RX_TRMREQ_Msk (0x80UL) /*!< TRMREQ (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_RX_RECREQ_Pos (6UL) /*!< RECREQ (Bit 6) */ + #define R_CAN0_MCTL_RX_RECREQ_Msk (0x40UL) /*!< RECREQ (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_RX_ONESHOT_Pos (4UL) /*!< ONESHOT (Bit 4) */ + #define R_CAN0_MCTL_RX_ONESHOT_Msk (0x10UL) /*!< ONESHOT (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_RX_MSGLOST_Pos (2UL) /*!< MSGLOST (Bit 2) */ + #define R_CAN0_MCTL_RX_MSGLOST_Msk (0x4UL) /*!< MSGLOST (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_RX_INVALDATA_Pos (1UL) /*!< INVALDATA (Bit 1) */ + #define R_CAN0_MCTL_RX_INVALDATA_Msk (0x2UL) /*!< INVALDATA (Bitfield-Mask: 0x01) */ + #define R_CAN0_MCTL_RX_NEWDATA_Pos (0UL) /*!< NEWDATA (Bit 0) */ + #define R_CAN0_MCTL_RX_NEWDATA_Msk (0x1UL) /*!< NEWDATA (Bitfield-Mask: 0x01) */ +/* ========================================================= CTLR ========================================================== */ + #define R_CAN0_CTLR_RBOC_Pos (13UL) /*!< RBOC (Bit 13) */ + #define R_CAN0_CTLR_RBOC_Msk (0x2000UL) /*!< RBOC (Bitfield-Mask: 0x01) */ + #define R_CAN0_CTLR_BOM_Pos (11UL) /*!< BOM (Bit 11) */ + #define R_CAN0_CTLR_BOM_Msk (0x1800UL) /*!< BOM (Bitfield-Mask: 0x03) */ + #define R_CAN0_CTLR_SLPM_Pos (10UL) /*!< SLPM (Bit 10) */ + #define R_CAN0_CTLR_SLPM_Msk (0x400UL) /*!< SLPM (Bitfield-Mask: 0x01) */ + #define R_CAN0_CTLR_CANM_Pos (8UL) /*!< CANM (Bit 8) */ + #define R_CAN0_CTLR_CANM_Msk (0x300UL) /*!< CANM (Bitfield-Mask: 0x03) */ + #define R_CAN0_CTLR_TSPS_Pos (6UL) /*!< TSPS (Bit 6) */ + #define R_CAN0_CTLR_TSPS_Msk (0xc0UL) /*!< TSPS (Bitfield-Mask: 0x03) */ + #define R_CAN0_CTLR_TSRC_Pos (5UL) /*!< TSRC (Bit 5) */ + #define R_CAN0_CTLR_TSRC_Msk (0x20UL) /*!< TSRC (Bitfield-Mask: 0x01) */ + #define R_CAN0_CTLR_TPM_Pos (4UL) /*!< TPM (Bit 4) */ + #define R_CAN0_CTLR_TPM_Msk (0x10UL) /*!< TPM (Bitfield-Mask: 0x01) */ + #define R_CAN0_CTLR_MLM_Pos (3UL) /*!< MLM (Bit 3) */ + #define R_CAN0_CTLR_MLM_Msk (0x8UL) /*!< MLM (Bitfield-Mask: 0x01) */ + #define R_CAN0_CTLR_IDFM_Pos (1UL) /*!< IDFM (Bit 1) */ + #define R_CAN0_CTLR_IDFM_Msk (0x6UL) /*!< IDFM (Bitfield-Mask: 0x03) */ + #define R_CAN0_CTLR_MBM_Pos (0UL) /*!< MBM (Bit 0) */ + #define R_CAN0_CTLR_MBM_Msk (0x1UL) /*!< MBM (Bitfield-Mask: 0x01) */ +/* ========================================================== STR ========================================================== */ + #define R_CAN0_STR_RECST_Pos (14UL) /*!< RECST (Bit 14) */ + #define R_CAN0_STR_RECST_Msk (0x4000UL) /*!< RECST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_TRMST_Pos (13UL) /*!< TRMST (Bit 13) */ + #define R_CAN0_STR_TRMST_Msk (0x2000UL) /*!< TRMST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_BOST_Pos (12UL) /*!< BOST (Bit 12) */ + #define R_CAN0_STR_BOST_Msk (0x1000UL) /*!< BOST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_EPST_Pos (11UL) /*!< EPST (Bit 11) */ + #define R_CAN0_STR_EPST_Msk (0x800UL) /*!< EPST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_SLPST_Pos (10UL) /*!< SLPST (Bit 10) */ + #define R_CAN0_STR_SLPST_Msk (0x400UL) /*!< SLPST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_HLTST_Pos (9UL) /*!< HLTST (Bit 9) */ + #define R_CAN0_STR_HLTST_Msk (0x200UL) /*!< HLTST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_RSTST_Pos (8UL) /*!< RSTST (Bit 8) */ + #define R_CAN0_STR_RSTST_Msk (0x100UL) /*!< RSTST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_EST_Pos (7UL) /*!< EST (Bit 7) */ + #define R_CAN0_STR_EST_Msk (0x80UL) /*!< EST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_TABST_Pos (6UL) /*!< TABST (Bit 6) */ + #define R_CAN0_STR_TABST_Msk (0x40UL) /*!< TABST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_FMLST_Pos (5UL) /*!< FMLST (Bit 5) */ + #define R_CAN0_STR_FMLST_Msk (0x20UL) /*!< FMLST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_NMLST_Pos (4UL) /*!< NMLST (Bit 4) */ + #define R_CAN0_STR_NMLST_Msk (0x10UL) /*!< NMLST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_TFST_Pos (3UL) /*!< TFST (Bit 3) */ + #define R_CAN0_STR_TFST_Msk (0x8UL) /*!< TFST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_RFST_Pos (2UL) /*!< RFST (Bit 2) */ + #define R_CAN0_STR_RFST_Msk (0x4UL) /*!< RFST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_SDST_Pos (1UL) /*!< SDST (Bit 1) */ + #define R_CAN0_STR_SDST_Msk (0x2UL) /*!< SDST (Bitfield-Mask: 0x01) */ + #define R_CAN0_STR_NDST_Pos (0UL) /*!< NDST (Bit 0) */ + #define R_CAN0_STR_NDST_Msk (0x1UL) /*!< NDST (Bitfield-Mask: 0x01) */ +/* ========================================================== BCR ========================================================== */ + #define R_CAN0_BCR_TSEG1_Pos (28UL) /*!< TSEG1 (Bit 28) */ + #define R_CAN0_BCR_TSEG1_Msk (0xf0000000UL) /*!< TSEG1 (Bitfield-Mask: 0x0f) */ + #define R_CAN0_BCR_BRP_Pos (16UL) /*!< BRP (Bit 16) */ + #define R_CAN0_BCR_BRP_Msk (0x3ff0000UL) /*!< BRP (Bitfield-Mask: 0x3ff) */ + #define R_CAN0_BCR_SJW_Pos (12UL) /*!< SJW (Bit 12) */ + #define R_CAN0_BCR_SJW_Msk (0x3000UL) /*!< SJW (Bitfield-Mask: 0x03) */ + #define R_CAN0_BCR_TSEG2_Pos (8UL) /*!< TSEG2 (Bit 8) */ + #define R_CAN0_BCR_TSEG2_Msk (0x700UL) /*!< TSEG2 (Bitfield-Mask: 0x07) */ + #define R_CAN0_BCR_CCLKS_Pos (0UL) /*!< CCLKS (Bit 0) */ + #define R_CAN0_BCR_CCLKS_Msk (0x1UL) /*!< CCLKS (Bitfield-Mask: 0x01) */ +/* ========================================================= RFCR ========================================================== */ + #define R_CAN0_RFCR_RFEST_Pos (7UL) /*!< RFEST (Bit 7) */ + #define R_CAN0_RFCR_RFEST_Msk (0x80UL) /*!< RFEST (Bitfield-Mask: 0x01) */ + #define R_CAN0_RFCR_RFWST_Pos (6UL) /*!< RFWST (Bit 6) */ + #define R_CAN0_RFCR_RFWST_Msk (0x40UL) /*!< RFWST (Bitfield-Mask: 0x01) */ + #define R_CAN0_RFCR_RFFST_Pos (5UL) /*!< RFFST (Bit 5) */ + #define R_CAN0_RFCR_RFFST_Msk (0x20UL) /*!< RFFST (Bitfield-Mask: 0x01) */ + #define R_CAN0_RFCR_RFMLF_Pos (4UL) /*!< RFMLF (Bit 4) */ + #define R_CAN0_RFCR_RFMLF_Msk (0x10UL) /*!< RFMLF (Bitfield-Mask: 0x01) */ + #define R_CAN0_RFCR_RFUST_Pos (1UL) /*!< RFUST (Bit 1) */ + #define R_CAN0_RFCR_RFUST_Msk (0xeUL) /*!< RFUST (Bitfield-Mask: 0x07) */ + #define R_CAN0_RFCR_RFE_Pos (0UL) /*!< RFE (Bit 0) */ + #define R_CAN0_RFCR_RFE_Msk (0x1UL) /*!< RFE (Bitfield-Mask: 0x01) */ +/* ========================================================= RFPCR ========================================================= */ + #define R_CAN0_RFPCR_RFPCR_Pos (0UL) /*!< RFPCR (Bit 0) */ + #define R_CAN0_RFPCR_RFPCR_Msk (0xffUL) /*!< RFPCR (Bitfield-Mask: 0xff) */ +/* ========================================================= TFCR ========================================================== */ + #define R_CAN0_TFCR_TFEST_Pos (7UL) /*!< TFEST (Bit 7) */ + #define R_CAN0_TFCR_TFEST_Msk (0x80UL) /*!< TFEST (Bitfield-Mask: 0x01) */ + #define R_CAN0_TFCR_TFFST_Pos (6UL) /*!< TFFST (Bit 6) */ + #define R_CAN0_TFCR_TFFST_Msk (0x40UL) /*!< TFFST (Bitfield-Mask: 0x01) */ + #define R_CAN0_TFCR_TFUST_Pos (1UL) /*!< TFUST (Bit 1) */ + #define R_CAN0_TFCR_TFUST_Msk (0xeUL) /*!< TFUST (Bitfield-Mask: 0x07) */ + #define R_CAN0_TFCR_TFE_Pos (0UL) /*!< TFE (Bit 0) */ + #define R_CAN0_TFCR_TFE_Msk (0x1UL) /*!< TFE (Bitfield-Mask: 0x01) */ +/* ========================================================= TFPCR ========================================================= */ + #define R_CAN0_TFPCR_TFPCR_Pos (0UL) /*!< TFPCR (Bit 0) */ + #define R_CAN0_TFPCR_TFPCR_Msk (0xffUL) /*!< TFPCR (Bitfield-Mask: 0xff) */ +/* ========================================================= EIER ========================================================== */ + #define R_CAN0_EIER_BLIE_Pos (7UL) /*!< BLIE (Bit 7) */ + #define R_CAN0_EIER_BLIE_Msk (0x80UL) /*!< BLIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_OLIE_Pos (6UL) /*!< OLIE (Bit 6) */ + #define R_CAN0_EIER_OLIE_Msk (0x40UL) /*!< OLIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_ORIE_Pos (5UL) /*!< ORIE (Bit 5) */ + #define R_CAN0_EIER_ORIE_Msk (0x20UL) /*!< ORIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_BORIE_Pos (4UL) /*!< BORIE (Bit 4) */ + #define R_CAN0_EIER_BORIE_Msk (0x10UL) /*!< BORIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_BOEIE_Pos (3UL) /*!< BOEIE (Bit 3) */ + #define R_CAN0_EIER_BOEIE_Msk (0x8UL) /*!< BOEIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_EPIE_Pos (2UL) /*!< EPIE (Bit 2) */ + #define R_CAN0_EIER_EPIE_Msk (0x4UL) /*!< EPIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_EWIE_Pos (1UL) /*!< EWIE (Bit 1) */ + #define R_CAN0_EIER_EWIE_Msk (0x2UL) /*!< EWIE (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIER_BEIE_Pos (0UL) /*!< BEIE (Bit 0) */ + #define R_CAN0_EIER_BEIE_Msk (0x1UL) /*!< BEIE (Bitfield-Mask: 0x01) */ +/* ========================================================= EIFR ========================================================== */ + #define R_CAN0_EIFR_BLIF_Pos (7UL) /*!< BLIF (Bit 7) */ + #define R_CAN0_EIFR_BLIF_Msk (0x80UL) /*!< BLIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_OLIF_Pos (6UL) /*!< OLIF (Bit 6) */ + #define R_CAN0_EIFR_OLIF_Msk (0x40UL) /*!< OLIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_ORIF_Pos (5UL) /*!< ORIF (Bit 5) */ + #define R_CAN0_EIFR_ORIF_Msk (0x20UL) /*!< ORIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_BORIF_Pos (4UL) /*!< BORIF (Bit 4) */ + #define R_CAN0_EIFR_BORIF_Msk (0x10UL) /*!< BORIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_BOEIF_Pos (3UL) /*!< BOEIF (Bit 3) */ + #define R_CAN0_EIFR_BOEIF_Msk (0x8UL) /*!< BOEIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_EPIF_Pos (2UL) /*!< EPIF (Bit 2) */ + #define R_CAN0_EIFR_EPIF_Msk (0x4UL) /*!< EPIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_EWIF_Pos (1UL) /*!< EWIF (Bit 1) */ + #define R_CAN0_EIFR_EWIF_Msk (0x2UL) /*!< EWIF (Bitfield-Mask: 0x01) */ + #define R_CAN0_EIFR_BEIF_Pos (0UL) /*!< BEIF (Bit 0) */ + #define R_CAN0_EIFR_BEIF_Msk (0x1UL) /*!< BEIF (Bitfield-Mask: 0x01) */ +/* ========================================================= RECR ========================================================== */ + #define R_CAN0_RECR_RECR_Pos (0UL) /*!< RECR (Bit 0) */ + #define R_CAN0_RECR_RECR_Msk (0xffUL) /*!< RECR (Bitfield-Mask: 0xff) */ +/* ========================================================= TECR ========================================================== */ + #define R_CAN0_TECR_TECR_Pos (0UL) /*!< TECR (Bit 0) */ + #define R_CAN0_TECR_TECR_Msk (0xffUL) /*!< TECR (Bitfield-Mask: 0xff) */ +/* ========================================================= ECSR ========================================================== */ + #define R_CAN0_ECSR_EDPM_Pos (7UL) /*!< EDPM (Bit 7) */ + #define R_CAN0_ECSR_EDPM_Msk (0x80UL) /*!< EDPM (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_ADEF_Pos (6UL) /*!< ADEF (Bit 6) */ + #define R_CAN0_ECSR_ADEF_Msk (0x40UL) /*!< ADEF (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_BE0F_Pos (5UL) /*!< BE0F (Bit 5) */ + #define R_CAN0_ECSR_BE0F_Msk (0x20UL) /*!< BE0F (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_BE1F_Pos (4UL) /*!< BE1F (Bit 4) */ + #define R_CAN0_ECSR_BE1F_Msk (0x10UL) /*!< BE1F (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_CEF_Pos (3UL) /*!< CEF (Bit 3) */ + #define R_CAN0_ECSR_CEF_Msk (0x8UL) /*!< CEF (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_AEF_Pos (2UL) /*!< AEF (Bit 2) */ + #define R_CAN0_ECSR_AEF_Msk (0x4UL) /*!< AEF (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_FEF_Pos (1UL) /*!< FEF (Bit 1) */ + #define R_CAN0_ECSR_FEF_Msk (0x2UL) /*!< FEF (Bitfield-Mask: 0x01) */ + #define R_CAN0_ECSR_SEF_Pos (0UL) /*!< SEF (Bit 0) */ + #define R_CAN0_ECSR_SEF_Msk (0x1UL) /*!< SEF (Bitfield-Mask: 0x01) */ +/* ========================================================= CSSR ========================================================== */ + #define R_CAN0_CSSR_CSSR_Pos (0UL) /*!< CSSR (Bit 0) */ + #define R_CAN0_CSSR_CSSR_Msk (0xffUL) /*!< CSSR (Bitfield-Mask: 0xff) */ +/* ========================================================= MSSR ========================================================== */ + #define R_CAN0_MSSR_SEST_Pos (7UL) /*!< SEST (Bit 7) */ + #define R_CAN0_MSSR_SEST_Msk (0x80UL) /*!< SEST (Bitfield-Mask: 0x01) */ + #define R_CAN0_MSSR_MBNST_Pos (0UL) /*!< MBNST (Bit 0) */ + #define R_CAN0_MSSR_MBNST_Msk (0x1fUL) /*!< MBNST (Bitfield-Mask: 0x1f) */ +/* ========================================================= MSMR ========================================================== */ + #define R_CAN0_MSMR_MBSM_Pos (0UL) /*!< MBSM (Bit 0) */ + #define R_CAN0_MSMR_MBSM_Msk (0x3UL) /*!< MBSM (Bitfield-Mask: 0x03) */ +/* ========================================================== TSR ========================================================== */ + #define R_CAN0_TSR_TSR_Pos (0UL) /*!< TSR (Bit 0) */ + #define R_CAN0_TSR_TSR_Msk (0xffffUL) /*!< TSR (Bitfield-Mask: 0xffff) */ +/* ========================================================= AFSR ========================================================== */ + #define R_CAN0_AFSR_AFSR_Pos (0UL) /*!< AFSR (Bit 0) */ + #define R_CAN0_AFSR_AFSR_Msk (0xffffUL) /*!< AFSR (Bitfield-Mask: 0xffff) */ +/* ========================================================== TCR ========================================================== */ + #define R_CAN0_TCR_TSTM_Pos (1UL) /*!< TSTM (Bit 1) */ + #define R_CAN0_TCR_TSTM_Msk (0x6UL) /*!< TSTM (Bitfield-Mask: 0x03) */ + #define R_CAN0_TCR_TSTE_Pos (0UL) /*!< TSTE (Bit 0) */ + #define R_CAN0_TCR_TSTE_Msk (0x1UL) /*!< TSTE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CRC ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CRCCR0 ========================================================= */ + #define R_CRC_CRCCR0_DORCLR_Pos (7UL) /*!< DORCLR (Bit 7) */ + #define R_CRC_CRCCR0_DORCLR_Msk (0x80UL) /*!< DORCLR (Bitfield-Mask: 0x01) */ + #define R_CRC_CRCCR0_LMS_Pos (6UL) /*!< LMS (Bit 6) */ + #define R_CRC_CRCCR0_LMS_Msk (0x40UL) /*!< LMS (Bitfield-Mask: 0x01) */ + #define R_CRC_CRCCR0_GPS_Pos (0UL) /*!< GPS (Bit 0) */ + #define R_CRC_CRCCR0_GPS_Msk (0x7UL) /*!< GPS (Bitfield-Mask: 0x07) */ +/* ======================================================== CRCCR1 ========================================================= */ + #define R_CRC_CRCCR1_CRCSEN_Pos (7UL) /*!< CRCSEN (Bit 7) */ + #define R_CRC_CRCCR1_CRCSEN_Msk (0x80UL) /*!< CRCSEN (Bitfield-Mask: 0x01) */ + #define R_CRC_CRCCR1_CRCSWR_Pos (6UL) /*!< CRCSWR (Bit 6) */ + #define R_CRC_CRCCR1_CRCSWR_Msk (0x40UL) /*!< CRCSWR (Bitfield-Mask: 0x01) */ +/* ======================================================== CRCDIR ========================================================= */ + #define R_CRC_CRCDIR_CRCDIR_Pos (0UL) /*!< CRCDIR (Bit 0) */ + #define R_CRC_CRCDIR_CRCDIR_Msk (0xffffffffUL) /*!< CRCDIR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= CRCDIR_BY ======================================================= */ + #define R_CRC_CRCDIR_BY_CRCDIR_BY_Pos (0UL) /*!< CRCDIR_BY (Bit 0) */ + #define R_CRC_CRCDIR_BY_CRCDIR_BY_Msk (0xffUL) /*!< CRCDIR_BY (Bitfield-Mask: 0xff) */ +/* ======================================================== CRCDOR ========================================================= */ + #define R_CRC_CRCDOR_CRCDOR_Pos (0UL) /*!< CRCDOR (Bit 0) */ + #define R_CRC_CRCDOR_CRCDOR_Msk (0xffffffffUL) /*!< CRCDOR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= CRCDOR_HA ======================================================= */ + #define R_CRC_CRCDOR_HA_CRCDOR_HA_Pos (0UL) /*!< CRCDOR_HA (Bit 0) */ + #define R_CRC_CRCDOR_HA_CRCDOR_HA_Msk (0xffffUL) /*!< CRCDOR_HA (Bitfield-Mask: 0xffff) */ +/* ======================================================= CRCDOR_BY ======================================================= */ + #define R_CRC_CRCDOR_BY_CRCDOR_BY_Pos (0UL) /*!< CRCDOR_BY (Bit 0) */ + #define R_CRC_CRCDOR_BY_CRCDOR_BY_Msk (0xffUL) /*!< CRCDOR_BY (Bitfield-Mask: 0xff) */ +/* ======================================================== CRCSAR ========================================================= */ + #define R_CRC_CRCSAR_CRCSA_Pos (0UL) /*!< CRCSA (Bit 0) */ + #define R_CRC_CRCSAR_CRCSA_Msk (0x3fffUL) /*!< CRCSA (Bitfield-Mask: 0x3fff) */ + +/* =========================================================================================================================== */ +/* ================ R_CTSU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CTSUCR0 ======================================================== */ + #define R_CTSU_CTSUCR0_CTSUTXVSEL_Pos (7UL) /*!< CTSUTXVSEL (Bit 7) */ + #define R_CTSU_CTSUCR0_CTSUTXVSEL_Msk (0x80UL) /*!< CTSUTXVSEL (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR0_CTSUINIT_Pos (4UL) /*!< CTSUINIT (Bit 4) */ + #define R_CTSU_CTSUCR0_CTSUINIT_Msk (0x10UL) /*!< CTSUINIT (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR0_CTSUIOC_Pos (3UL) /*!< CTSUIOC (Bit 3) */ + #define R_CTSU_CTSUCR0_CTSUIOC_Msk (0x8UL) /*!< CTSUIOC (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR0_CTSUSNZ_Pos (2UL) /*!< CTSUSNZ (Bit 2) */ + #define R_CTSU_CTSUCR0_CTSUSNZ_Msk (0x4UL) /*!< CTSUSNZ (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR0_CTSUCAP_Pos (1UL) /*!< CTSUCAP (Bit 1) */ + #define R_CTSU_CTSUCR0_CTSUCAP_Msk (0x2UL) /*!< CTSUCAP (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR0_CTSUSTRT_Pos (0UL) /*!< CTSUSTRT (Bit 0) */ + #define R_CTSU_CTSUCR0_CTSUSTRT_Msk (0x1UL) /*!< CTSUSTRT (Bitfield-Mask: 0x01) */ +/* ======================================================== CTSUCR1 ======================================================== */ + #define R_CTSU_CTSUCR1_CTSUMD_Pos (6UL) /*!< CTSUMD (Bit 6) */ + #define R_CTSU_CTSUCR1_CTSUMD_Msk (0xc0UL) /*!< CTSUMD (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUCR1_CTSUCLK_Pos (4UL) /*!< CTSUCLK (Bit 4) */ + #define R_CTSU_CTSUCR1_CTSUCLK_Msk (0x30UL) /*!< CTSUCLK (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUCR1_CTSUATUNE1_Pos (3UL) /*!< CTSUATUNE1 (Bit 3) */ + #define R_CTSU_CTSUCR1_CTSUATUNE1_Msk (0x8UL) /*!< CTSUATUNE1 (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR1_CTSUATUNE0_Pos (2UL) /*!< CTSUATUNE0 (Bit 2) */ + #define R_CTSU_CTSUCR1_CTSUATUNE0_Msk (0x4UL) /*!< CTSUATUNE0 (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR1_CTSUCSW_Pos (1UL) /*!< CTSUCSW (Bit 1) */ + #define R_CTSU_CTSUCR1_CTSUCSW_Msk (0x2UL) /*!< CTSUCSW (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUCR1_CTSUPON_Pos (0UL) /*!< CTSUPON (Bit 0) */ + #define R_CTSU_CTSUCR1_CTSUPON_Msk (0x1UL) /*!< CTSUPON (Bitfield-Mask: 0x01) */ +/* ======================================================= CTSUSDPRS ======================================================= */ + #define R_CTSU_CTSUSDPRS_CTSUSOFF_Pos (6UL) /*!< CTSUSOFF (Bit 6) */ + #define R_CTSU_CTSUSDPRS_CTSUSOFF_Msk (0x40UL) /*!< CTSUSOFF (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUSDPRS_CTSUPRMODE_Pos (4UL) /*!< CTSUPRMODE (Bit 4) */ + #define R_CTSU_CTSUSDPRS_CTSUPRMODE_Msk (0x30UL) /*!< CTSUPRMODE (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUSDPRS_CTSUPRRATIO_Pos (0UL) /*!< CTSUPRRATIO (Bit 0) */ + #define R_CTSU_CTSUSDPRS_CTSUPRRATIO_Msk (0xfUL) /*!< CTSUPRRATIO (Bitfield-Mask: 0x0f) */ +/* ======================================================== CTSUSST ======================================================== */ + #define R_CTSU_CTSUSST_CTSUSST_Pos (0UL) /*!< CTSUSST (Bit 0) */ + #define R_CTSU_CTSUSST_CTSUSST_Msk (0xffUL) /*!< CTSUSST (Bitfield-Mask: 0xff) */ +/* ======================================================= CTSUMCH0 ======================================================== */ + #define R_CTSU_CTSUMCH0_CTSUMCH0_Pos (0UL) /*!< CTSUMCH0 (Bit 0) */ + #define R_CTSU_CTSUMCH0_CTSUMCH0_Msk (0x3fUL) /*!< CTSUMCH0 (Bitfield-Mask: 0x3f) */ +/* ======================================================= CTSUMCH1 ======================================================== */ + #define R_CTSU_CTSUMCH1_CTSUMCH1_Pos (0UL) /*!< CTSUMCH1 (Bit 0) */ + #define R_CTSU_CTSUMCH1_CTSUMCH1_Msk (0x3fUL) /*!< CTSUMCH1 (Bitfield-Mask: 0x3f) */ +/* ======================================================= CTSUCHAC ======================================================== */ + #define R_CTSU_CTSUCHAC_TS_Pos (0UL) /*!< TS (Bit 0) */ + #define R_CTSU_CTSUCHAC_TS_Msk (0x1UL) /*!< TS (Bitfield-Mask: 0x01) */ +/* ======================================================= CTSUCHTRC ======================================================= */ + #define R_CTSU_CTSUCHTRC_TS_Pos (0UL) /*!< TS (Bit 0) */ + #define R_CTSU_CTSUCHTRC_TS_Msk (0x1UL) /*!< TS (Bitfield-Mask: 0x01) */ +/* ======================================================= CTSUDCLKC ======================================================= */ + #define R_CTSU_CTSUDCLKC_CTSUSSCNT_Pos (4UL) /*!< CTSUSSCNT (Bit 4) */ + #define R_CTSU_CTSUDCLKC_CTSUSSCNT_Msk (0x30UL) /*!< CTSUSSCNT (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUDCLKC_CTSUSSMOD_Pos (0UL) /*!< CTSUSSMOD (Bit 0) */ + #define R_CTSU_CTSUDCLKC_CTSUSSMOD_Msk (0x3UL) /*!< CTSUSSMOD (Bitfield-Mask: 0x03) */ +/* ======================================================== CTSUST ========================================================= */ + #define R_CTSU_CTSUST_CTSUPS_Pos (7UL) /*!< CTSUPS (Bit 7) */ + #define R_CTSU_CTSUST_CTSUPS_Msk (0x80UL) /*!< CTSUPS (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUST_CTSUROVF_Pos (6UL) /*!< CTSUROVF (Bit 6) */ + #define R_CTSU_CTSUST_CTSUROVF_Msk (0x40UL) /*!< CTSUROVF (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUST_CTSUSOVF_Pos (5UL) /*!< CTSUSOVF (Bit 5) */ + #define R_CTSU_CTSUST_CTSUSOVF_Msk (0x20UL) /*!< CTSUSOVF (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUST_CTSUDTSR_Pos (4UL) /*!< CTSUDTSR (Bit 4) */ + #define R_CTSU_CTSUST_CTSUDTSR_Msk (0x10UL) /*!< CTSUDTSR (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUST_CTSUSTC_Pos (0UL) /*!< CTSUSTC (Bit 0) */ + #define R_CTSU_CTSUST_CTSUSTC_Msk (0x7UL) /*!< CTSUSTC (Bitfield-Mask: 0x07) */ +/* ======================================================== CTSUSSC ======================================================== */ + #define R_CTSU_CTSUSSC_CTSUSSDIV_Pos (8UL) /*!< CTSUSSDIV (Bit 8) */ + #define R_CTSU_CTSUSSC_CTSUSSDIV_Msk (0xf00UL) /*!< CTSUSSDIV (Bitfield-Mask: 0x0f) */ +/* ======================================================== CTSUSO0 ======================================================== */ + #define R_CTSU_CTSUSO0_CTSUSNUM_Pos (10UL) /*!< CTSUSNUM (Bit 10) */ + #define R_CTSU_CTSUSO0_CTSUSNUM_Msk (0xfc00UL) /*!< CTSUSNUM (Bitfield-Mask: 0x3f) */ + #define R_CTSU_CTSUSO0_CTSUSO_Pos (0UL) /*!< CTSUSO (Bit 0) */ + #define R_CTSU_CTSUSO0_CTSUSO_Msk (0x3ffUL) /*!< CTSUSO (Bitfield-Mask: 0x3ff) */ +/* ======================================================== CTSUSO1 ======================================================== */ + #define R_CTSU_CTSUSO1_CTSUICOG_Pos (13UL) /*!< CTSUICOG (Bit 13) */ + #define R_CTSU_CTSUSO1_CTSUICOG_Msk (0x6000UL) /*!< CTSUICOG (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUSO1_CTSUSDPA_Pos (8UL) /*!< CTSUSDPA (Bit 8) */ + #define R_CTSU_CTSUSO1_CTSUSDPA_Msk (0x1f00UL) /*!< CTSUSDPA (Bitfield-Mask: 0x1f) */ + #define R_CTSU_CTSUSO1_CTSURICOA_Pos (0UL) /*!< CTSURICOA (Bit 0) */ + #define R_CTSU_CTSUSO1_CTSURICOA_Msk (0xffUL) /*!< CTSURICOA (Bitfield-Mask: 0xff) */ +/* ======================================================== CTSUSC ========================================================= */ + #define R_CTSU_CTSUSC_CTSUSC_Pos (0UL) /*!< CTSUSC (Bit 0) */ + #define R_CTSU_CTSUSC_CTSUSC_Msk (0xffffUL) /*!< CTSUSC (Bitfield-Mask: 0xffff) */ +/* ======================================================== CTSURC ========================================================= */ + #define R_CTSU_CTSURC_CTSURC_Pos (0UL) /*!< CTSURC (Bit 0) */ + #define R_CTSU_CTSURC_CTSURC_Msk (0xffffUL) /*!< CTSURC (Bitfield-Mask: 0xffff) */ +/* ======================================================= CTSUERRS ======================================================== */ + #define R_CTSU_CTSUERRS_CTSUICOMP_Pos (15UL) /*!< CTSUICOMP (Bit 15) */ + #define R_CTSU_CTSUERRS_CTSUICOMP_Msk (0x8000UL) /*!< CTSUICOMP (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUSPMD_Pos (0UL) /*!< CTSUSPMD (Bit 0) */ + #define R_CTSU_CTSUERRS_CTSUSPMD_Msk (0x3UL) /*!< CTSUSPMD (Bitfield-Mask: 0x03) */ + #define R_CTSU_CTSUERRS_CTSUTSOD_Pos (2UL) /*!< CTSUTSOD (Bit 2) */ + #define R_CTSU_CTSUERRS_CTSUTSOD_Msk (0x4UL) /*!< CTSUTSOD (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUDRV_Pos (3UL) /*!< CTSUDRV (Bit 3) */ + #define R_CTSU_CTSUERRS_CTSUDRV_Msk (0x8UL) /*!< CTSUDRV (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUCLKSEL1_Pos (6UL) /*!< CTSUCLKSEL1 (Bit 6) */ + #define R_CTSU_CTSUERRS_CTSUCLKSEL1_Msk (0x40UL) /*!< CTSUCLKSEL1 (Bitfield-Mask: 0x01) */ + #define R_CTSU_CTSUERRS_CTSUTSOC_Pos (7UL) /*!< CTSUTSOC (Bit 7) */ + #define R_CTSU_CTSUERRS_CTSUTSOC_Msk (0x80UL) /*!< CTSUTSOC (Bitfield-Mask: 0x01) */ +/* ======================================================= CTSUTRMR ======================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_DAC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DACR ========================================================== */ + #define R_DAC_DACR_DAE_Pos (5UL) /*!< DAE (Bit 5) */ + #define R_DAC_DACR_DAE_Msk (0x20UL) /*!< DAE (Bitfield-Mask: 0x01) */ + #define R_DAC_DACR_DAOE_Pos (6UL) /*!< DAOE (Bit 6) */ + #define R_DAC_DACR_DAOE_Msk (0x40UL) /*!< DAOE (Bitfield-Mask: 0x01) */ +/* ========================================================= DADR ========================================================== */ + #define R_DAC_DADR_DADR_Pos (0UL) /*!< DADR (Bit 0) */ + #define R_DAC_DADR_DADR_Msk (0xffffUL) /*!< DADR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DADPR ========================================================= */ + #define R_DAC_DADPR_DPSEL_Pos (7UL) /*!< DPSEL (Bit 7) */ + #define R_DAC_DADPR_DPSEL_Msk (0x80UL) /*!< DPSEL (Bitfield-Mask: 0x01) */ +/* ======================================================== DAADSCR ======================================================== */ + #define R_DAC_DAADSCR_DAADST_Pos (7UL) /*!< DAADST (Bit 7) */ + #define R_DAC_DAADSCR_DAADST_Msk (0x80UL) /*!< DAADST (Bitfield-Mask: 0x01) */ +/* ======================================================= DAVREFCR ======================================================== */ + #define R_DAC_DAVREFCR_REF_Pos (0UL) /*!< REF (Bit 0) */ + #define R_DAC_DAVREFCR_REF_Msk (0x7UL) /*!< REF (Bitfield-Mask: 0x07) */ +/* ========================================================= DAPC ========================================================== */ + #define R_DAC_DAPC_PUMPEN_Pos (0UL) /*!< PUMPEN (Bit 0) */ + #define R_DAC_DAPC_PUMPEN_Msk (0x1UL) /*!< PUMPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== DAAMPCR ======================================================== */ + #define R_DAC_DAAMPCR_DAAMP_Pos (6UL) /*!< DAAMP (Bit 6) */ + #define R_DAC_DAAMPCR_DAAMP_Msk (0x40UL) /*!< DAAMP (Bitfield-Mask: 0x01) */ +/* ======================================================== DAASWCR ======================================================== */ + #define R_DAC_DAASWCR_DAASW1_Pos (7UL) /*!< DAASW1 (Bit 7) */ + #define R_DAC_DAASWCR_DAASW1_Msk (0x80UL) /*!< DAASW1 (Bitfield-Mask: 0x01) */ + #define R_DAC_DAASWCR_DAASW0_Pos (6UL) /*!< DAASW0 (Bit 6) */ + #define R_DAC_DAASWCR_DAASW0_Msk (0x40UL) /*!< DAASW0 (Bitfield-Mask: 0x01) */ +/* ======================================================== DAADUSR ======================================================== */ + #define R_DAC_DAADUSR_AMADSEL0_Pos (0UL) /*!< AMADSEL0 (Bit 0) */ + #define R_DAC_DAADUSR_AMADSEL0_Msk (0x1UL) /*!< AMADSEL0 (Bitfield-Mask: 0x01) */ + #define R_DAC_DAADUSR_AMADSEL1_Pos (1UL) /*!< AMADSEL1 (Bit 1) */ + #define R_DAC_DAADUSR_AMADSEL1_Msk (0x2UL) /*!< AMADSEL1 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_DAC8 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== DAM ========================================================== */ + #define R_DAC8_DAM_DACE1_Pos (5UL) /*!< DACE1 (Bit 5) */ + #define R_DAC8_DAM_DACE1_Msk (0x20UL) /*!< DACE1 (Bitfield-Mask: 0x01) */ + #define R_DAC8_DAM_DACE0_Pos (4UL) /*!< DACE0 (Bit 4) */ + #define R_DAC8_DAM_DACE0_Msk (0x10UL) /*!< DACE0 (Bitfield-Mask: 0x01) */ + #define R_DAC8_DAM_DAMD1_Pos (1UL) /*!< DAMD1 (Bit 1) */ + #define R_DAC8_DAM_DAMD1_Msk (0x2UL) /*!< DAMD1 (Bitfield-Mask: 0x01) */ + #define R_DAC8_DAM_DAMD0_Pos (0UL) /*!< DAMD0 (Bit 0) */ + #define R_DAC8_DAM_DAMD0_Msk (0x1UL) /*!< DAMD0 (Bitfield-Mask: 0x01) */ +/* ========================================================= DACS ========================================================== */ + #define R_DAC8_DACS_DACS_Pos (0UL) /*!< DACS (Bit 0) */ + #define R_DAC8_DACS_DACS_Msk (0xffUL) /*!< DACS (Bitfield-Mask: 0xff) */ +/* ======================================================= DACADSCR ======================================================== */ + #define R_DAC8_DACADSCR_DACADST_Pos (0UL) /*!< DACADST (Bit 0) */ + #define R_DAC8_DACADSCR_DACADST_Msk (0x1UL) /*!< DACADST (Bitfield-Mask: 0x01) */ +/* ========================================================= DACPC ========================================================= */ + #define R_DAC8_DACPC_PUMPEN_Pos (0UL) /*!< PUMPEN (Bit 0) */ + #define R_DAC8_DACPC_PUMPEN_Msk (0x1UL) /*!< PUMPEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_DEBUG ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== DBGSTR ========================================================= */ + #define R_DEBUG_DBGSTR_CDBGPWRUPREQ_Pos (28UL) /*!< CDBGPWRUPREQ (Bit 28) */ + #define R_DEBUG_DBGSTR_CDBGPWRUPREQ_Msk (0x10000000UL) /*!< CDBGPWRUPREQ (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTR_CDBGPWRUPACK_Pos (29UL) /*!< CDBGPWRUPACK (Bit 29) */ + #define R_DEBUG_DBGSTR_CDBGPWRUPACK_Msk (0x20000000UL) /*!< CDBGPWRUPACK (Bitfield-Mask: 0x01) */ +/* ======================================================= DBGSTOPCR ======================================================= */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_RPER_Pos (24UL) /*!< DBGSTOP_RPER (Bit 24) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_RPER_Msk (0x1000000UL) /*!< DBGSTOP_RPER (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_TIM_Pos (14UL) /*!< DBGSTOP_TIM (Bit 14) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_TIM_Msk (0x4000UL) /*!< DBGSTOP_TIM (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_SIR_Pos (15UL) /*!< DBGSTOP_SIR (Bit 15) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_SIR_Msk (0x8000UL) /*!< DBGSTOP_SIR (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_LVD_Pos (16UL) /*!< DBGSTOP_LVD (Bit 16) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_LVD_Msk (0x10000UL) /*!< DBGSTOP_LVD (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_RECCR_Pos (25UL) /*!< DBGSTOP_RECCR (Bit 25) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_RECCR_Msk (0x2000000UL) /*!< DBGSTOP_RECCR (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_IWDT_Pos (0UL) /*!< DBGSTOP_IWDT (Bit 0) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_IWDT_Msk (0x1UL) /*!< DBGSTOP_IWDT (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_WDT_Pos (1UL) /*!< DBGSTOP_WDT (Bit 1) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_WDT_Msk (0x2UL) /*!< DBGSTOP_WDT (Bitfield-Mask: 0x01) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_CPER_Pos (31UL) /*!< DBGSTOP_CPER (Bit 31) */ + #define R_DEBUG_DBGSTOPCR_DBGSTOP_CPER_Msk (0x80000000UL) /*!< DBGSTOP_CPER (Bitfield-Mask: 0x01) */ +/* ======================================================= FSBLSTAT ======================================================== */ + #define R_DEBUG_FSBLSTAT_CS_Pos (0UL) /*!< CS (Bit 0) */ + #define R_DEBUG_FSBLSTAT_CS_Msk (0x1UL) /*!< CS (Bitfield-Mask: 0x01) */ + #define R_DEBUG_FSBLSTAT_RS_Pos (1UL) /*!< RS (Bit 1) */ + #define R_DEBUG_FSBLSTAT_RS_Msk (0x2UL) /*!< RS (Bitfield-Mask: 0x01) */ + #define R_DEBUG_FSBLSTAT_FSBLCLK_Pos (8UL) /*!< FSBLCLK (Bit 8) */ + #define R_DEBUG_FSBLSTAT_FSBLCLK_Msk (0x700UL) /*!< FSBLCLK (Bitfield-Mask: 0x07) */ + +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DOCR ========================================================== */ + #define R_DOC_DOCR_DOPCFCL_Pos (6UL) /*!< DOPCFCL (Bit 6) */ + #define R_DOC_DOCR_DOPCFCL_Msk (0x40UL) /*!< DOPCFCL (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_DOPCF_Pos (5UL) /*!< DOPCF (Bit 5) */ + #define R_DOC_DOCR_DOPCF_Msk (0x20UL) /*!< DOPCF (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_DCSEL_Pos (2UL) /*!< DCSEL (Bit 2) */ + #define R_DOC_DOCR_DCSEL_Msk (0x4UL) /*!< DCSEL (Bitfield-Mask: 0x01) */ + #define R_DOC_DOCR_OMS_Pos (0UL) /*!< OMS (Bit 0) */ + #define R_DOC_DOCR_OMS_Msk (0x3UL) /*!< OMS (Bitfield-Mask: 0x03) */ +/* ========================================================= DODIR ========================================================= */ + #define R_DOC_DODIR_DODIR_Pos (0UL) /*!< DODIR (Bit 0) */ + #define R_DOC_DODIR_DODIR_Msk (0xffffUL) /*!< DODIR (Bitfield-Mask: 0xffff) */ +/* ========================================================= DODSR ========================================================= */ + #define R_DOC_DODSR_DODSR_Pos (0UL) /*!< DODSR (Bit 0) */ + #define R_DOC_DODSR_DODSR_Msk (0xffffUL) /*!< DODSR (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ R_DTC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DTCCR ========================================================= */ + #define R_DTC_DTCCR_RRS_Pos (4UL) /*!< RRS (Bit 4) */ + #define R_DTC_DTCCR_RRS_Msk (0x10UL) /*!< RRS (Bitfield-Mask: 0x01) */ +/* ======================================================== DTCVBR ========================================================= */ + #define R_DTC_DTCVBR_DTCVBR_Pos (0UL) /*!< DTCVBR (Bit 0) */ + #define R_DTC_DTCVBR_DTCVBR_Msk (0xffffffffUL) /*!< DTCVBR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= DTCADMOD ======================================================== */ + #define R_DTC_DTCADMOD_SHORT_Pos (0UL) /*!< SHORT (Bit 0) */ + #define R_DTC_DTCADMOD_SHORT_Msk (0x1UL) /*!< SHORT (Bitfield-Mask: 0x01) */ +/* ========================================================= DTCST ========================================================= */ + #define R_DTC_DTCST_DTCST_Pos (0UL) /*!< DTCST (Bit 0) */ + #define R_DTC_DTCST_DTCST_Msk (0x1UL) /*!< DTCST (Bitfield-Mask: 0x01) */ +/* ======================================================== DTCSTS ========================================================= */ + #define R_DTC_DTCSTS_VECN_Pos (0UL) /*!< VECN (Bit 0) */ + #define R_DTC_DTCSTS_VECN_Msk (0xffUL) /*!< VECN (Bitfield-Mask: 0xff) */ + #define R_DTC_DTCSTS_ACT_Pos (15UL) /*!< ACT (Bit 15) */ + #define R_DTC_DTCSTS_ACT_Msk (0x8000UL) /*!< ACT (Bitfield-Mask: 0x01) */ +/* ======================================================= DTCCR_SEC ======================================================= */ + #define R_DTC_DTCCR_SEC_RRS_Pos (4UL) /*!< RRS (Bit 4) */ + #define R_DTC_DTCCR_SEC_RRS_Msk (0x10UL) /*!< RRS (Bitfield-Mask: 0x01) */ +/* ====================================================== DTCVBR_SEC ======================================================= */ + #define R_DTC_DTCVBR_SEC_DTCVBR_Pos (0UL) /*!< DTCVBR (Bit 0) */ + #define R_DTC_DTCVBR_SEC_DTCVBR_Msk (0xffffffffUL) /*!< DTCVBR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== DTCDISP ======================================================== */ + #define R_DTC_DTCDISP_DTCDISP_Pos (0UL) /*!< DTCDISP (Bit 0) */ + #define R_DTC_DTCDISP_DTCDISP_Msk (0xffffffffUL) /*!< DTCDISP (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DTEVR ========================================================= */ + #define R_DTC_DTEVR_DTEV_Pos (0UL) /*!< DTEV (Bit 0) */ + #define R_DTC_DTEVR_DTEV_Msk (0xffUL) /*!< DTEV (Bitfield-Mask: 0xff) */ + #define R_DTC_DTEVR_DTEVSAM_Pos (8UL) /*!< DTEVSAM (Bit 8) */ + #define R_DTC_DTEVR_DTEVSAM_Msk (0x100UL) /*!< DTEVSAM (Bitfield-Mask: 0x01) */ + #define R_DTC_DTEVR_DTESTA_Pos (16UL) /*!< DTESTA (Bit 16) */ + #define R_DTC_DTEVR_DTESTA_Msk (0x10000UL) /*!< DTESTA (Bitfield-Mask: 0x01) */ +/* ======================================================== DTCIBR ========================================================= */ + #define R_DTC_DTCIBR_DTCIBR_Pos (10UL) /*!< DTCIBR (Bit 10) */ + #define R_DTC_DTCIBR_DTCIBR_Msk (0xfffffc00UL) /*!< DTCIBR (Bitfield-Mask: 0x3fffff) */ +/* ========================================================= DTCOR ========================================================= */ + #define R_DTC_DTCOR_SQTFRL_Pos (0UL) /*!< SQTFRL (Bit 0) */ + #define R_DTC_DTCOR_SQTFRL_Msk (0x1UL) /*!< SQTFRL (Bitfield-Mask: 0x01) */ +/* ======================================================== DTCSQE ========================================================= */ + #define R_DTC_DTCSQE_VECN_Pos (0UL) /*!< VECN (Bit 0) */ + #define R_DTC_DTCSQE_VECN_Msk (0xffUL) /*!< VECN (Bitfield-Mask: 0xff) */ + #define R_DTC_DTCSQE_ESPSEL_Pos (15UL) /*!< ESPSEL (Bit 15) */ + #define R_DTC_DTCSQE_ESPSEL_Msk (0x8000UL) /*!< ESPSEL (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ELC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ELCR ========================================================== */ + #define R_ELC_ELCR_ELCON_Pos (7UL) /*!< ELCON (Bit 7) */ + #define R_ELC_ELCR_ELCON_Msk (0x80UL) /*!< ELCON (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARA ======================================================== */ + #define R_ELC_ELCSARA_ELCR_Pos (0UL) /*!< ELCR (Bit 0) */ + #define R_ELC_ELCSARA_ELCR_Msk (0x1UL) /*!< ELCR (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARA_ELSEGR0_Pos (1UL) /*!< ELSEGR0 (Bit 1) */ + #define R_ELC_ELCSARA_ELSEGR0_Msk (0x2UL) /*!< ELSEGR0 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARA_ELSEGR1_Pos (2UL) /*!< ELSEGR1 (Bit 2) */ + #define R_ELC_ELCSARA_ELSEGR1_Msk (0x4UL) /*!< ELSEGR1 (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARB ======================================================== */ + #define R_ELC_ELCSARB_ELSR0_Pos (0UL) /*!< ELSR0 (Bit 0) */ + #define R_ELC_ELCSARB_ELSR0_Msk (0x1UL) /*!< ELSR0 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR1_Pos (1UL) /*!< ELSR1 (Bit 1) */ + #define R_ELC_ELCSARB_ELSR1_Msk (0x2UL) /*!< ELSR1 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR2_Pos (2UL) /*!< ELSR2 (Bit 2) */ + #define R_ELC_ELCSARB_ELSR2_Msk (0x4UL) /*!< ELSR2 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR3_Pos (3UL) /*!< ELSR3 (Bit 3) */ + #define R_ELC_ELCSARB_ELSR3_Msk (0x8UL) /*!< ELSR3 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR4_Pos (4UL) /*!< ELSR4 (Bit 4) */ + #define R_ELC_ELCSARB_ELSR4_Msk (0x10UL) /*!< ELSR4 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR5_Pos (5UL) /*!< ELSR5 (Bit 5) */ + #define R_ELC_ELCSARB_ELSR5_Msk (0x20UL) /*!< ELSR5 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR6_Pos (6UL) /*!< ELSR6 (Bit 6) */ + #define R_ELC_ELCSARB_ELSR6_Msk (0x40UL) /*!< ELSR6 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR7_Pos (7UL) /*!< ELSR7 (Bit 7) */ + #define R_ELC_ELCSARB_ELSR7_Msk (0x80UL) /*!< ELSR7 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR8_Pos (8UL) /*!< ELSR8 (Bit 8) */ + #define R_ELC_ELCSARB_ELSR8_Msk (0x100UL) /*!< ELSR8 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR9_Pos (9UL) /*!< ELSR9 (Bit 9) */ + #define R_ELC_ELCSARB_ELSR9_Msk (0x200UL) /*!< ELSR9 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR10_Pos (10UL) /*!< ELSR10 (Bit 10) */ + #define R_ELC_ELCSARB_ELSR10_Msk (0x400UL) /*!< ELSR10 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR11_Pos (11UL) /*!< ELSR11 (Bit 11) */ + #define R_ELC_ELCSARB_ELSR11_Msk (0x800UL) /*!< ELSR11 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR12_Pos (12UL) /*!< ELSR12 (Bit 12) */ + #define R_ELC_ELCSARB_ELSR12_Msk (0x1000UL) /*!< ELSR12 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR13_Pos (13UL) /*!< ELSR13 (Bit 13) */ + #define R_ELC_ELCSARB_ELSR13_Msk (0x2000UL) /*!< ELSR13 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR14_Pos (14UL) /*!< ELSR14 (Bit 14) */ + #define R_ELC_ELCSARB_ELSR14_Msk (0x4000UL) /*!< ELSR14 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARB_ELSR15_Pos (15UL) /*!< ELSR15 (Bit 15) */ + #define R_ELC_ELCSARB_ELSR15_Msk (0x8000UL) /*!< ELSR15 (Bitfield-Mask: 0x01) */ +/* ======================================================== ELCSARC ======================================================== */ + #define R_ELC_ELCSARC_ELSR16_Pos (0UL) /*!< ELSR16 (Bit 0) */ + #define R_ELC_ELCSARC_ELSR16_Msk (0x1UL) /*!< ELSR16 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARC_ELSR17_Pos (1UL) /*!< ELSR17 (Bit 1) */ + #define R_ELC_ELCSARC_ELSR17_Msk (0x2UL) /*!< ELSR17 (Bitfield-Mask: 0x01) */ + #define R_ELC_ELCSARC_ELSR18_Pos (2UL) /*!< ELSR18 (Bit 2) */ + #define R_ELC_ELCSARC_ELSR18_Msk (0x4UL) /*!< ELSR18 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_FACI_LP ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== DFLCTL ========================================================= */ +/* ========================================================= FPMCR ========================================================= */ + #define R_FACI_LP_FPMCR_FMS2_Pos (7UL) /*!< FMS2 (Bit 7) */ + #define R_FACI_LP_FPMCR_FMS2_Msk (0x80UL) /*!< FMS2 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FPMCR_VLPE_Pos (6UL) /*!< VLPE (Bit 6) */ + #define R_FACI_LP_FPMCR_VLPE_Msk (0x40UL) /*!< VLPE (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FPMCR_FMS1_Pos (4UL) /*!< FMS1 (Bit 4) */ + #define R_FACI_LP_FPMCR_FMS1_Msk (0x10UL) /*!< FMS1 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FPMCR_RPDIS_Pos (3UL) /*!< RPDIS (Bit 3) */ + #define R_FACI_LP_FPMCR_RPDIS_Msk (0x8UL) /*!< RPDIS (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FPMCR_FMS0_Pos (1UL) /*!< FMS0 (Bit 1) */ + #define R_FACI_LP_FPMCR_FMS0_Msk (0x2UL) /*!< FMS0 (Bitfield-Mask: 0x01) */ +/* ========================================================= FASR ========================================================== */ + #define R_FACI_LP_FASR_EXS_Pos (0UL) /*!< EXS (Bit 0) */ + #define R_FACI_LP_FASR_EXS_Msk (0x1UL) /*!< EXS (Bitfield-Mask: 0x01) */ +/* ========================================================= FSARL ========================================================= */ + #define R_FACI_LP_FSARL_FSAR15_0_Pos (0UL) /*!< FSAR15_0 (Bit 0) */ + #define R_FACI_LP_FSARL_FSAR15_0_Msk (0xffffUL) /*!< FSAR15_0 (Bitfield-Mask: 0xffff) */ +/* ========================================================= FSARH ========================================================= */ + #define R_FACI_LP_FSARH_FSAR31_25_Pos (9UL) /*!< FSAR31_25 (Bit 9) */ + #define R_FACI_LP_FSARH_FSAR31_25_Msk (0xfe00UL) /*!< FSAR31_25 (Bitfield-Mask: 0x7f) */ + #define R_FACI_LP_FSARH_FSAR20_16_Pos (0UL) /*!< FSAR20_16 (Bit 0) */ + #define R_FACI_LP_FSARH_FSAR20_16_Msk (0x1fUL) /*!< FSAR20_16 (Bitfield-Mask: 0x1f) */ +/* ========================================================== FCR ========================================================== */ + #define R_FACI_LP_FCR_OPST_Pos (7UL) /*!< OPST (Bit 7) */ + #define R_FACI_LP_FCR_OPST_Msk (0x80UL) /*!< OPST (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FCR_STOP_Pos (6UL) /*!< STOP (Bit 6) */ + #define R_FACI_LP_FCR_STOP_Msk (0x40UL) /*!< STOP (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FCR_DRC_Pos (4UL) /*!< DRC (Bit 4) */ + #define R_FACI_LP_FCR_DRC_Msk (0x10UL) /*!< DRC (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FCR_CMD_Pos (0UL) /*!< CMD (Bit 0) */ + #define R_FACI_LP_FCR_CMD_Msk (0xfUL) /*!< CMD (Bitfield-Mask: 0x0f) */ +/* ========================================================= FEARL ========================================================= */ + #define R_FACI_LP_FEARL_FEAR15_0_Pos (0UL) /*!< FEAR15_0 (Bit 0) */ + #define R_FACI_LP_FEARL_FEAR15_0_Msk (0xffffUL) /*!< FEAR15_0 (Bitfield-Mask: 0xffff) */ +/* ========================================================= FEARH ========================================================= */ + #define R_FACI_LP_FEARH_FEAR31_25_Pos (9UL) /*!< FEAR31_25 (Bit 9) */ + #define R_FACI_LP_FEARH_FEAR31_25_Msk (0xfe00UL) /*!< FEAR31_25 (Bitfield-Mask: 0x7f) */ + #define R_FACI_LP_FEARH_FEAR20_16_Pos (0UL) /*!< FEAR20_16 (Bit 0) */ + #define R_FACI_LP_FEARH_FEAR20_16_Msk (0x1fUL) /*!< FEAR20_16 (Bitfield-Mask: 0x1f) */ +/* ======================================================== FRESETR ======================================================== */ + #define R_FACI_LP_FRESETR_FRESET_Pos (0UL) /*!< FRESET (Bit 0) */ + #define R_FACI_LP_FRESETR_FRESET_Msk (0x1UL) /*!< FRESET (Bitfield-Mask: 0x01) */ +/* ======================================================= FSTATR00 ======================================================== */ + #define R_FACI_LP_FSTATR00_EILGLERR_Pos (5UL) /*!< EILGLERR (Bit 5) */ + #define R_FACI_LP_FSTATR00_EILGLERR_Msk (0x20UL) /*!< EILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR00_ILGLERR_Pos (4UL) /*!< ILGLERR (Bit 4) */ + #define R_FACI_LP_FSTATR00_ILGLERR_Msk (0x10UL) /*!< ILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR00_BCERR0_Pos (3UL) /*!< BCERR0 (Bit 3) */ + #define R_FACI_LP_FSTATR00_BCERR0_Msk (0x8UL) /*!< BCERR0 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR00_PRGERR01_Pos (2UL) /*!< PRGERR01 (Bit 2) */ + #define R_FACI_LP_FSTATR00_PRGERR01_Msk (0x4UL) /*!< PRGERR01 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR00_PRGERR0_Pos (1UL) /*!< PRGERR0 (Bit 1) */ + #define R_FACI_LP_FSTATR00_PRGERR0_Msk (0x2UL) /*!< PRGERR0 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR00_ERERR0_Pos (0UL) /*!< ERERR0 (Bit 0) */ + #define R_FACI_LP_FSTATR00_ERERR0_Msk (0x1UL) /*!< ERERR0 (Bitfield-Mask: 0x01) */ +/* ======================================================== FSTATR1 ======================================================== */ + #define R_FACI_LP_FSTATR1_EXRDY_Pos (7UL) /*!< EXRDY (Bit 7) */ + #define R_FACI_LP_FSTATR1_EXRDY_Msk (0x80UL) /*!< EXRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR1_FRDY_Pos (6UL) /*!< FRDY (Bit 6) */ + #define R_FACI_LP_FSTATR1_FRDY_Msk (0x40UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR1_DRRDY_Pos (1UL) /*!< DRRDY (Bit 1) */ + #define R_FACI_LP_FSTATR1_DRRDY_Msk (0x2UL) /*!< DRRDY (Bitfield-Mask: 0x01) */ +/* ========================================================= FWBL0 ========================================================= */ + #define R_FACI_LP_FWBL0_WDATA_Pos (0UL) /*!< WDATA (Bit 0) */ + #define R_FACI_LP_FWBL0_WDATA_Msk (0xffffUL) /*!< WDATA (Bitfield-Mask: 0xffff) */ +/* ========================================================= FWBH0 ========================================================= */ + #define R_FACI_LP_FWBH0_WDATA_Pos (0UL) /*!< WDATA (Bit 0) */ + #define R_FACI_LP_FWBH0_WDATA_Msk (0xffffUL) /*!< WDATA (Bitfield-Mask: 0xffff) */ +/* ======================================================= FSTATR01 ======================================================== */ + #define R_FACI_LP_FSTATR01_BCERR1_Pos (3UL) /*!< BCERR1 (Bit 3) */ + #define R_FACI_LP_FSTATR01_BCERR1_Msk (0x8UL) /*!< BCERR1 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR01_PRGERR1_Pos (1UL) /*!< PRGERR1 (Bit 1) */ + #define R_FACI_LP_FSTATR01_PRGERR1_Msk (0x2UL) /*!< PRGERR1 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR01_ERERR1_Pos (0UL) /*!< ERERR1 (Bit 0) */ + #define R_FACI_LP_FSTATR01_ERERR1_Msk (0x1UL) /*!< ERERR1 (Bitfield-Mask: 0x01) */ +/* ========================================================= FWBL1 ========================================================= */ + #define R_FACI_LP_FWBL1_WDATA47_32_Pos (0UL) /*!< WDATA47_32 (Bit 0) */ + #define R_FACI_LP_FWBL1_WDATA47_32_Msk (0xffffUL) /*!< WDATA47_32 (Bitfield-Mask: 0xffff) */ +/* ========================================================= FWBH1 ========================================================= */ + #define R_FACI_LP_FWBH1_WDATA63_48_Pos (0UL) /*!< WDATA63_48 (Bit 0) */ + #define R_FACI_LP_FWBH1_WDATA63_48_Msk (0xffffUL) /*!< WDATA63_48 (Bitfield-Mask: 0xffff) */ +/* ========================================================= FRBL1 ========================================================= */ + #define R_FACI_LP_FRBL1_RDATA47_32_Pos (0UL) /*!< RDATA47_32 (Bit 0) */ + #define R_FACI_LP_FRBL1_RDATA47_32_Msk (0xffffUL) /*!< RDATA47_32 (Bitfield-Mask: 0xffff) */ +/* ========================================================= FRBH1 ========================================================= */ + #define R_FACI_LP_FRBH1_RDATA63_48_Pos (0UL) /*!< RDATA63_48 (Bit 0) */ + #define R_FACI_LP_FRBH1_RDATA63_48_Msk (0xffffUL) /*!< RDATA63_48 (Bitfield-Mask: 0xffff) */ +/* ========================================================== FPR ========================================================== */ + #define R_FACI_LP_FPR_FPR_Pos (0UL) /*!< FPR (Bit 0) */ + #define R_FACI_LP_FPR_FPR_Msk (0xffUL) /*!< FPR (Bitfield-Mask: 0xff) */ +/* ========================================================= FPSR ========================================================== */ + #define R_FACI_LP_FPSR_PERR_Pos (0UL) /*!< PERR (Bit 0) */ + #define R_FACI_LP_FPSR_PERR_Msk (0x1UL) /*!< PERR (Bitfield-Mask: 0x01) */ +/* ========================================================= FRBL0 ========================================================= */ + #define R_FACI_LP_FRBL0_RDATA_Pos (0UL) /*!< RDATA (Bit 0) */ + #define R_FACI_LP_FRBL0_RDATA_Msk (0xffffUL) /*!< RDATA (Bitfield-Mask: 0xffff) */ +/* ========================================================= FRBH0 ========================================================= */ + #define R_FACI_LP_FRBH0_RDATA_Pos (0UL) /*!< RDATA (Bit 0) */ + #define R_FACI_LP_FRBH0_RDATA_Msk (0xffffUL) /*!< RDATA (Bitfield-Mask: 0xffff) */ +/* ========================================================= FSCMR ========================================================= */ + #define R_FACI_LP_FSCMR_FSPR_Pos (14UL) /*!< FSPR (Bit 14) */ + #define R_FACI_LP_FSCMR_FSPR_Msk (0x4000UL) /*!< FSPR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSCMR_SASMF_Pos (8UL) /*!< SASMF (Bit 8) */ + #define R_FACI_LP_FSCMR_SASMF_Msk (0x100UL) /*!< SASMF (Bitfield-Mask: 0x01) */ +/* ======================================================== FAWSMR ========================================================= */ + #define R_FACI_LP_FAWSMR_FAWS_Pos (0UL) /*!< FAWS (Bit 0) */ + #define R_FACI_LP_FAWSMR_FAWS_Msk (0xfffUL) /*!< FAWS (Bitfield-Mask: 0xfff) */ +/* ======================================================== FAWEMR ========================================================= */ + #define R_FACI_LP_FAWEMR_FAWE_Pos (0UL) /*!< FAWE (Bit 0) */ + #define R_FACI_LP_FAWEMR_FAWE_Msk (0xfffUL) /*!< FAWE (Bitfield-Mask: 0xfff) */ +/* ========================================================= FISR ========================================================== */ + #define R_FACI_LP_FISR_SAS_Pos (6UL) /*!< SAS (Bit 6) */ + #define R_FACI_LP_FISR_SAS_Msk (0xc0UL) /*!< SAS (Bitfield-Mask: 0x03) */ + #define R_FACI_LP_FISR_PCKA_Pos (0UL) /*!< PCKA (Bit 0) */ + #define R_FACI_LP_FISR_PCKA_Msk (0x3fUL) /*!< PCKA (Bitfield-Mask: 0x3f) */ +/* ========================================================= FEXCR ========================================================= */ + #define R_FACI_LP_FEXCR_OPST_Pos (7UL) /*!< OPST (Bit 7) */ + #define R_FACI_LP_FEXCR_OPST_Msk (0x80UL) /*!< OPST (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FEXCR_CMD_Pos (0UL) /*!< CMD (Bit 0) */ + #define R_FACI_LP_FEXCR_CMD_Msk (0x7UL) /*!< CMD (Bitfield-Mask: 0x07) */ +/* ========================================================= FEAML ========================================================= */ + #define R_FACI_LP_FEAML_FEAM_Pos (0UL) /*!< FEAM (Bit 0) */ + #define R_FACI_LP_FEAML_FEAM_Msk (0xffffUL) /*!< FEAM (Bitfield-Mask: 0xffff) */ +/* ========================================================= FEAMH ========================================================= */ + #define R_FACI_LP_FEAMH_FEAM_Pos (0UL) /*!< FEAM (Bit 0) */ + #define R_FACI_LP_FEAMH_FEAM_Msk (0xffffUL) /*!< FEAM (Bitfield-Mask: 0xffff) */ +/* ======================================================== FSTATR2 ======================================================== */ + #define R_FACI_LP_FSTATR2_EILGLERR_Pos (5UL) /*!< EILGLERR (Bit 5) */ + #define R_FACI_LP_FSTATR2_EILGLERR_Msk (0x20UL) /*!< EILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR2_ILGLERR_Pos (4UL) /*!< ILGLERR (Bit 4) */ + #define R_FACI_LP_FSTATR2_ILGLERR_Msk (0x10UL) /*!< ILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR2_BCERR_Pos (3UL) /*!< BCERR (Bit 3) */ + #define R_FACI_LP_FSTATR2_BCERR_Msk (0x8UL) /*!< BCERR (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR2_PRGERR01_Pos (2UL) /*!< PRGERR01 (Bit 2) */ + #define R_FACI_LP_FSTATR2_PRGERR01_Msk (0x4UL) /*!< PRGERR01 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR2_PRGERR1_Pos (1UL) /*!< PRGERR1 (Bit 1) */ + #define R_FACI_LP_FSTATR2_PRGERR1_Msk (0x2UL) /*!< PRGERR1 (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FSTATR2_ERERR_Pos (0UL) /*!< ERERR (Bit 0) */ + #define R_FACI_LP_FSTATR2_ERERR_Msk (0x1UL) /*!< ERERR (Bitfield-Mask: 0x01) */ +/* ======================================================== FCTLFR ========================================================= */ + #define R_FACI_LP_FCTLFR_BANKSWP_Pos (0UL) /*!< BANKSWP (Bit 0) */ + #define R_FACI_LP_FCTLFR_BANKSWP_Msk (0x7UL) /*!< BANKSWP (Bitfield-Mask: 0x07) */ +/* ====================================================== FENTRYR_MF4 ====================================================== */ +/* ======================================================== FENTRYR ======================================================== */ +/* ======================================================== FLWAITR ======================================================== */ +/* ======================================================= FLDWAITR ======================================================== */ + #define R_FACI_LP_FLDWAITR_FLDWAIT1_Pos (0UL) /*!< FLDWAIT1 (Bit 0) */ + #define R_FACI_LP_FLDWAITR_FLDWAIT1_Msk (0x1UL) /*!< FLDWAIT1 (Bitfield-Mask: 0x01) */ +/* ========================================================= PFBER ========================================================= */ +/* ======================================================== FBKPGCR ======================================================== */ + #define R_FACI_LP_FBKPGCR_BKPGEN_Pos (0UL) /*!< BKPGEN (Bit 0) */ + #define R_FACI_LP_FBKPGCR_BKPGEN_Msk (0x1UL) /*!< BKPGEN (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FBKPGCR_FEKEY_Pos (8UL) /*!< FEKEY (Bit 8) */ + #define R_FACI_LP_FBKPGCR_FEKEY_Msk (0xff00UL) /*!< FEKEY (Bitfield-Mask: 0xff) */ +/* ======================================================== FBKSWCR ======================================================== */ + #define R_FACI_LP_FBKSWCR_BKSWUPEN_Pos (0UL) /*!< BKSWUPEN (Bit 0) */ + #define R_FACI_LP_FBKSWCR_BKSWUPEN_Msk (0x1UL) /*!< BKSWUPEN (Bitfield-Mask: 0x01) */ + #define R_FACI_LP_FBKSWCR_FEKEY_Pos (8UL) /*!< FEKEY (Bit 8) */ + #define R_FACI_LP_FBKSWCR_FEKEY_Msk (0xff00UL) /*!< FEKEY (Bitfield-Mask: 0xff) */ +/* ======================================================== HIOTRM ========================================================= */ + #define R_FACI_LP_HIOTRM_HIOTRM_Pos (0UL) /*!< HIOTRM (Bit 0) */ + #define R_FACI_LP_HIOTRM_HIOTRM_Msk (0x3fUL) /*!< HIOTRM (Bitfield-Mask: 0x3f) */ +/* ======================================================== FLMODE ========================================================= */ + #define R_FACI_LP_FLMODE_MODE_Pos (6UL) /*!< MODE (Bit 6) */ + #define R_FACI_LP_FLMODE_MODE_Msk (0xc0UL) /*!< MODE (Bitfield-Mask: 0x03) */ +/* ======================================================== FLMWRP ========================================================= */ + #define R_FACI_LP_FLMWRP_FLMWEN_Pos (0UL) /*!< FLMWEN (Bit 0) */ + #define R_FACI_LP_FLMWRP_FLMWEN_Msk (0x1UL) /*!< FLMWEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_FCACHE ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== FCACHEE ======================================================== */ + #define R_FCACHE_FCACHEE_FCACHEEN_Pos (0UL) /*!< FCACHEEN (Bit 0) */ + #define R_FCACHE_FCACHEE_FCACHEEN_Msk (0x1UL) /*!< FCACHEEN (Bitfield-Mask: 0x01) */ +/* ======================================================= FCACHEIV ======================================================== */ + #define R_FCACHE_FCACHEIV_FCACHEIV_Pos (0UL) /*!< FCACHEIV (Bit 0) */ + #define R_FCACHE_FCACHEIV_FCACHEIV_Msk (0x1UL) /*!< FCACHEIV (Bitfield-Mask: 0x01) */ +/* ========================================================= FLWT ========================================================== */ + #define R_FCACHE_FLWT_FLWT_Pos (0UL) /*!< FLWT (Bit 0) */ + #define R_FCACHE_FLWT_FLWT_Msk (0x7UL) /*!< FLWT (Bitfield-Mask: 0x07) */ +/* ========================================================= FSAR ========================================================== */ + #define R_FCACHE_FSAR_FLWTSA_Pos (0UL) /*!< FLWTSA (Bit 0) */ + #define R_FCACHE_FSAR_FLWTSA_Msk (0x1UL) /*!< FLWTSA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_PFBERSA_Pos (1UL) /*!< PFBERSA (Bit 1) */ + #define R_FCACHE_FSAR_PFBERSA_Msk (0x2UL) /*!< PFBERSA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_FCKMHZSA_Pos (8UL) /*!< FCKMHZSA (Bit 8) */ + #define R_FCACHE_FSAR_FCKMHZSA_Msk (0x100UL) /*!< FCKMHZSA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_FACICOMISA_Pos (9UL) /*!< FACICOMISA (Bit 9) */ + #define R_FCACHE_FSAR_FACICOMISA_Msk (0x200UL) /*!< FACICOMISA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_FACICOMRSA_Pos (10UL) /*!< FACICOMRSA (Bit 10) */ + #define R_FCACHE_FSAR_FACICOMRSA_Msk (0x400UL) /*!< FACICOMRSA (Bitfield-Mask: 0x01) */ + #define R_FCACHE_FSAR_DFLCTLSA_Pos (15UL) /*!< DFLCTLSA (Bit 15) */ + #define R_FCACHE_FSAR_DFLCTLSA_Msk (0x8000UL) /*!< DFLCTLSA (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= GTWP ========================================================== */ + #define R_GPT0_GTWP_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_GPT0_GTWP_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ + #define R_GPT0_GTWP_WP_Pos (0UL) /*!< WP (Bit 0) */ + #define R_GPT0_GTWP_WP_Msk (0x1UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_STRWP_Pos (1UL) /*!< STRWP (Bit 1) */ + #define R_GPT0_GTWP_STRWP_Msk (0x2UL) /*!< STRWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_STPWP_Pos (2UL) /*!< STPWP (Bit 2) */ + #define R_GPT0_GTWP_STPWP_Msk (0x4UL) /*!< STPWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_CLRWP_Pos (3UL) /*!< CLRWP (Bit 3) */ + #define R_GPT0_GTWP_CLRWP_Msk (0x8UL) /*!< CLRWP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTWP_CMNWP_Pos (4UL) /*!< CMNWP (Bit 4) */ + #define R_GPT0_GTWP_CMNWP_Msk (0x10UL) /*!< CMNWP (Bitfield-Mask: 0x01) */ +/* ========================================================= GTSTR ========================================================= */ + #define R_GPT0_GTSTR_CSTRT_Pos (0UL) /*!< CSTRT (Bit 0) */ + #define R_GPT0_GTSTR_CSTRT_Msk (0x1UL) /*!< CSTRT (Bitfield-Mask: 0x01) */ +/* ========================================================= GTSTP ========================================================= */ + #define R_GPT0_GTSTP_CSTOP_Pos (0UL) /*!< CSTOP (Bit 0) */ + #define R_GPT0_GTSTP_CSTOP_Msk (0x1UL) /*!< CSTOP (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCLR ========================================================= */ + #define R_GPT0_GTCLR_CCLR_Pos (0UL) /*!< CCLR (Bit 0) */ + #define R_GPT0_GTCLR_CCLR_Msk (0x1UL) /*!< CCLR (Bitfield-Mask: 0x01) */ +/* ========================================================= GTSSR ========================================================= */ + #define R_GPT0_GTSSR_CSTRT_Pos (31UL) /*!< CSTRT (Bit 31) */ + #define R_GPT0_GTSSR_CSTRT_Msk (0x80000000UL) /*!< CSTRT (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSELC_Pos (16UL) /*!< SSELC (Bit 16) */ + #define R_GPT0_GTSSR_SSELC_Msk (0x10000UL) /*!< SSELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCBFAH_Pos (15UL) /*!< SSCBFAH (Bit 15) */ + #define R_GPT0_GTSSR_SSCBFAH_Msk (0x8000UL) /*!< SSCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCBFAL_Pos (14UL) /*!< SSCBFAL (Bit 14) */ + #define R_GPT0_GTSSR_SSCBFAL_Msk (0x4000UL) /*!< SSCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCBRAH_Pos (13UL) /*!< SSCBRAH (Bit 13) */ + #define R_GPT0_GTSSR_SSCBRAH_Msk (0x2000UL) /*!< SSCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCBRAL_Pos (12UL) /*!< SSCBRAL (Bit 12) */ + #define R_GPT0_GTSSR_SSCBRAL_Msk (0x1000UL) /*!< SSCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCAFBH_Pos (11UL) /*!< SSCAFBH (Bit 11) */ + #define R_GPT0_GTSSR_SSCAFBH_Msk (0x800UL) /*!< SSCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCAFBL_Pos (10UL) /*!< SSCAFBL (Bit 10) */ + #define R_GPT0_GTSSR_SSCAFBL_Msk (0x400UL) /*!< SSCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCARBH_Pos (9UL) /*!< SSCARBH (Bit 9) */ + #define R_GPT0_GTSSR_SSCARBH_Msk (0x200UL) /*!< SSCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSCARBL_Pos (8UL) /*!< SSCARBL (Bit 8) */ + #define R_GPT0_GTSSR_SSCARBL_Msk (0x100UL) /*!< SSCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSGTRGF_Pos (1UL) /*!< SSGTRGF (Bit 1) */ + #define R_GPT0_GTSSR_SSGTRGF_Msk (0x2UL) /*!< SSGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSSR_SSGTRGR_Pos (0UL) /*!< SSGTRGR (Bit 0) */ + #define R_GPT0_GTSSR_SSGTRGR_Msk (0x1UL) /*!< SSGTRGR (Bitfield-Mask: 0x01) */ +/* ========================================================= GTPSR ========================================================= */ + #define R_GPT0_GTPSR_CSTOP_Pos (31UL) /*!< CSTOP (Bit 31) */ + #define R_GPT0_GTPSR_CSTOP_Msk (0x80000000UL) /*!< CSTOP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSELC_Pos (16UL) /*!< PSELC (Bit 16) */ + #define R_GPT0_GTPSR_PSELC_Msk (0x10000UL) /*!< PSELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCBFAH_Pos (15UL) /*!< PSCBFAH (Bit 15) */ + #define R_GPT0_GTPSR_PSCBFAH_Msk (0x8000UL) /*!< PSCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCBFAL_Pos (14UL) /*!< PSCBFAL (Bit 14) */ + #define R_GPT0_GTPSR_PSCBFAL_Msk (0x4000UL) /*!< PSCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCBRAH_Pos (13UL) /*!< PSCBRAH (Bit 13) */ + #define R_GPT0_GTPSR_PSCBRAH_Msk (0x2000UL) /*!< PSCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCBRAL_Pos (12UL) /*!< PSCBRAL (Bit 12) */ + #define R_GPT0_GTPSR_PSCBRAL_Msk (0x1000UL) /*!< PSCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCAFBH_Pos (11UL) /*!< PSCAFBH (Bit 11) */ + #define R_GPT0_GTPSR_PSCAFBH_Msk (0x800UL) /*!< PSCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCAFBL_Pos (10UL) /*!< PSCAFBL (Bit 10) */ + #define R_GPT0_GTPSR_PSCAFBL_Msk (0x400UL) /*!< PSCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCARBH_Pos (9UL) /*!< PSCARBH (Bit 9) */ + #define R_GPT0_GTPSR_PSCARBH_Msk (0x200UL) /*!< PSCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSCARBL_Pos (8UL) /*!< PSCARBL (Bit 8) */ + #define R_GPT0_GTPSR_PSCARBL_Msk (0x100UL) /*!< PSCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSGTRGF_Pos (1UL) /*!< PSGTRGF (Bit 1) */ + #define R_GPT0_GTPSR_PSGTRGF_Msk (0x2UL) /*!< PSGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPSR_PSGTRGR_Pos (0UL) /*!< PSGTRGR (Bit 0) */ + #define R_GPT0_GTPSR_PSGTRGR_Msk (0x1UL) /*!< PSGTRGR (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCSR ========================================================= */ + #define R_GPT0_GTCSR_CCLR_Pos (31UL) /*!< CCLR (Bit 31) */ + #define R_GPT0_GTCSR_CCLR_Msk (0x80000000UL) /*!< CCLR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CP1CCE_Pos (27UL) /*!< CP1CCE (Bit 27) */ + #define R_GPT0_GTCSR_CP1CCE_Msk (0x8000000UL) /*!< CP1CCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCMSC_Pos (24UL) /*!< CSCMSC (Bit 24) */ + #define R_GPT0_GTCSR_CSCMSC_Msk (0x7000000UL) /*!< CSCMSC (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTCSR_CSELC_Pos (16UL) /*!< CSELC (Bit 16) */ + #define R_GPT0_GTCSR_CSELC_Msk (0x10000UL) /*!< CSELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCBFAH_Pos (15UL) /*!< CSCBFAH (Bit 15) */ + #define R_GPT0_GTCSR_CSCBFAH_Msk (0x8000UL) /*!< CSCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCBFAL_Pos (14UL) /*!< CSCBFAL (Bit 14) */ + #define R_GPT0_GTCSR_CSCBFAL_Msk (0x4000UL) /*!< CSCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCBRAH_Pos (13UL) /*!< CSCBRAH (Bit 13) */ + #define R_GPT0_GTCSR_CSCBRAH_Msk (0x2000UL) /*!< CSCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCBRAL_Pos (12UL) /*!< CSCBRAL (Bit 12) */ + #define R_GPT0_GTCSR_CSCBRAL_Msk (0x1000UL) /*!< CSCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCAFBH_Pos (11UL) /*!< CSCAFBH (Bit 11) */ + #define R_GPT0_GTCSR_CSCAFBH_Msk (0x800UL) /*!< CSCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCAFBL_Pos (10UL) /*!< CSCAFBL (Bit 10) */ + #define R_GPT0_GTCSR_CSCAFBL_Msk (0x400UL) /*!< CSCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCARBH_Pos (9UL) /*!< CSCARBH (Bit 9) */ + #define R_GPT0_GTCSR_CSCARBH_Msk (0x200UL) /*!< CSCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSCARBL_Pos (8UL) /*!< CSCARBL (Bit 8) */ + #define R_GPT0_GTCSR_CSCARBL_Msk (0x100UL) /*!< CSCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSGTRGF_Pos (1UL) /*!< CSGTRGF (Bit 1) */ + #define R_GPT0_GTCSR_CSGTRGF_Msk (0x2UL) /*!< CSGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCSR_CSGTRGR_Pos (0UL) /*!< CSGTRGR (Bit 0) */ + #define R_GPT0_GTCSR_CSGTRGR_Msk (0x1UL) /*!< CSGTRGR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTUPSR ========================================================= */ + #define R_GPT0_GTUPSR_USILVL_Pos (24UL) /*!< USILVL (Bit 24) */ + #define R_GPT0_GTUPSR_USILVL_Msk (0xf000000UL) /*!< USILVL (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTUPSR_USELC_Pos (16UL) /*!< USELC (Bit 16) */ + #define R_GPT0_GTUPSR_USELC_Msk (0x10000UL) /*!< USELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCBFAH_Pos (15UL) /*!< USCBFAH (Bit 15) */ + #define R_GPT0_GTUPSR_USCBFAH_Msk (0x8000UL) /*!< USCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCBFAL_Pos (14UL) /*!< USCBFAL (Bit 14) */ + #define R_GPT0_GTUPSR_USCBFAL_Msk (0x4000UL) /*!< USCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCBRAH_Pos (13UL) /*!< USCBRAH (Bit 13) */ + #define R_GPT0_GTUPSR_USCBRAH_Msk (0x2000UL) /*!< USCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCBRAL_Pos (12UL) /*!< USCBRAL (Bit 12) */ + #define R_GPT0_GTUPSR_USCBRAL_Msk (0x1000UL) /*!< USCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCAFBH_Pos (11UL) /*!< USCAFBH (Bit 11) */ + #define R_GPT0_GTUPSR_USCAFBH_Msk (0x800UL) /*!< USCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCAFBL_Pos (10UL) /*!< USCAFBL (Bit 10) */ + #define R_GPT0_GTUPSR_USCAFBL_Msk (0x400UL) /*!< USCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCARBH_Pos (9UL) /*!< USCARBH (Bit 9) */ + #define R_GPT0_GTUPSR_USCARBH_Msk (0x200UL) /*!< USCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USCARBL_Pos (8UL) /*!< USCARBL (Bit 8) */ + #define R_GPT0_GTUPSR_USCARBL_Msk (0x100UL) /*!< USCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USGTRGF_Pos (1UL) /*!< USGTRGF (Bit 1) */ + #define R_GPT0_GTUPSR_USGTRGF_Msk (0x2UL) /*!< USGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUPSR_USGTRGR_Pos (0UL) /*!< USGTRGR (Bit 0) */ + #define R_GPT0_GTUPSR_USGTRGR_Msk (0x1UL) /*!< USGTRGR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTDNSR ========================================================= */ + #define R_GPT0_GTDNSR_DSILVL_Pos (24UL) /*!< DSILVL (Bit 24) */ + #define R_GPT0_GTDNSR_DSILVL_Msk (0xf000000UL) /*!< DSILVL (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTDNSR_DSELC_Pos (16UL) /*!< DSELC (Bit 16) */ + #define R_GPT0_GTDNSR_DSELC_Msk (0x10000UL) /*!< DSELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCBFAH_Pos (15UL) /*!< DSCBFAH (Bit 15) */ + #define R_GPT0_GTDNSR_DSCBFAH_Msk (0x8000UL) /*!< DSCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCBFAL_Pos (14UL) /*!< DSCBFAL (Bit 14) */ + #define R_GPT0_GTDNSR_DSCBFAL_Msk (0x4000UL) /*!< DSCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCBRAH_Pos (13UL) /*!< DSCBRAH (Bit 13) */ + #define R_GPT0_GTDNSR_DSCBRAH_Msk (0x2000UL) /*!< DSCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCBRAL_Pos (12UL) /*!< DSCBRAL (Bit 12) */ + #define R_GPT0_GTDNSR_DSCBRAL_Msk (0x1000UL) /*!< DSCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCAFBH_Pos (11UL) /*!< DSCAFBH (Bit 11) */ + #define R_GPT0_GTDNSR_DSCAFBH_Msk (0x800UL) /*!< DSCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCAFBL_Pos (10UL) /*!< DSCAFBL (Bit 10) */ + #define R_GPT0_GTDNSR_DSCAFBL_Msk (0x400UL) /*!< DSCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCARBH_Pos (9UL) /*!< DSCARBH (Bit 9) */ + #define R_GPT0_GTDNSR_DSCARBH_Msk (0x200UL) /*!< DSCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSCARBL_Pos (8UL) /*!< DSCARBL (Bit 8) */ + #define R_GPT0_GTDNSR_DSCARBL_Msk (0x100UL) /*!< DSCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSGTRGF_Pos (1UL) /*!< DSGTRGF (Bit 1) */ + #define R_GPT0_GTDNSR_DSGTRGF_Msk (0x2UL) /*!< DSGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDNSR_DSGTRGR_Pos (0UL) /*!< DSGTRGR (Bit 0) */ + #define R_GPT0_GTDNSR_DSGTRGR_Msk (0x1UL) /*!< DSGTRGR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTICASR ======================================================== */ + #define R_GPT0_GTICASR_ASOC_Pos (24UL) /*!< ASOC (Bit 24) */ + #define R_GPT0_GTICASR_ASOC_Msk (0x1000000UL) /*!< ASOC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASELC_Pos (16UL) /*!< ASELC (Bit 16) */ + #define R_GPT0_GTICASR_ASELC_Msk (0x10000UL) /*!< ASELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCBFAH_Pos (15UL) /*!< ASCBFAH (Bit 15) */ + #define R_GPT0_GTICASR_ASCBFAH_Msk (0x8000UL) /*!< ASCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCBFAL_Pos (14UL) /*!< ASCBFAL (Bit 14) */ + #define R_GPT0_GTICASR_ASCBFAL_Msk (0x4000UL) /*!< ASCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCBRAH_Pos (13UL) /*!< ASCBRAH (Bit 13) */ + #define R_GPT0_GTICASR_ASCBRAH_Msk (0x2000UL) /*!< ASCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCBRAL_Pos (12UL) /*!< ASCBRAL (Bit 12) */ + #define R_GPT0_GTICASR_ASCBRAL_Msk (0x1000UL) /*!< ASCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCAFBH_Pos (11UL) /*!< ASCAFBH (Bit 11) */ + #define R_GPT0_GTICASR_ASCAFBH_Msk (0x800UL) /*!< ASCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCAFBL_Pos (10UL) /*!< ASCAFBL (Bit 10) */ + #define R_GPT0_GTICASR_ASCAFBL_Msk (0x400UL) /*!< ASCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCARBH_Pos (9UL) /*!< ASCARBH (Bit 9) */ + #define R_GPT0_GTICASR_ASCARBH_Msk (0x200UL) /*!< ASCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASCARBL_Pos (8UL) /*!< ASCARBL (Bit 8) */ + #define R_GPT0_GTICASR_ASCARBL_Msk (0x100UL) /*!< ASCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASGTRGF_Pos (1UL) /*!< ASGTRGF (Bit 1) */ + #define R_GPT0_GTICASR_ASGTRGF_Msk (0x2UL) /*!< ASGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICASR_ASGTRGR_Pos (0UL) /*!< ASGTRGR (Bit 0) */ + #define R_GPT0_GTICASR_ASGTRGR_Msk (0x1UL) /*!< ASGTRGR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTICBSR ======================================================== */ + #define R_GPT0_GTICBSR_BSOC_Pos (24UL) /*!< BSOC (Bit 24) */ + #define R_GPT0_GTICBSR_BSOC_Msk (0x1000000UL) /*!< BSOC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSELC_Pos (16UL) /*!< BSELC (Bit 16) */ + #define R_GPT0_GTICBSR_BSELC_Msk (0x10000UL) /*!< BSELC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCBFAH_Pos (15UL) /*!< BSCBFAH (Bit 15) */ + #define R_GPT0_GTICBSR_BSCBFAH_Msk (0x8000UL) /*!< BSCBFAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCBFAL_Pos (14UL) /*!< BSCBFAL (Bit 14) */ + #define R_GPT0_GTICBSR_BSCBFAL_Msk (0x4000UL) /*!< BSCBFAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCBRAH_Pos (13UL) /*!< BSCBRAH (Bit 13) */ + #define R_GPT0_GTICBSR_BSCBRAH_Msk (0x2000UL) /*!< BSCBRAH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCBRAL_Pos (12UL) /*!< BSCBRAL (Bit 12) */ + #define R_GPT0_GTICBSR_BSCBRAL_Msk (0x1000UL) /*!< BSCBRAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCAFBH_Pos (11UL) /*!< BSCAFBH (Bit 11) */ + #define R_GPT0_GTICBSR_BSCAFBH_Msk (0x800UL) /*!< BSCAFBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCAFBL_Pos (10UL) /*!< BSCAFBL (Bit 10) */ + #define R_GPT0_GTICBSR_BSCAFBL_Msk (0x400UL) /*!< BSCAFBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCARBH_Pos (9UL) /*!< BSCARBH (Bit 9) */ + #define R_GPT0_GTICBSR_BSCARBH_Msk (0x200UL) /*!< BSCARBH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSCARBL_Pos (8UL) /*!< BSCARBL (Bit 8) */ + #define R_GPT0_GTICBSR_BSCARBL_Msk (0x100UL) /*!< BSCARBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSGTRGF_Pos (1UL) /*!< BSGTRGF (Bit 1) */ + #define R_GPT0_GTICBSR_BSGTRGF_Msk (0x2UL) /*!< BSGTRGF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICBSR_BSGTRGR_Pos (0UL) /*!< BSGTRGR (Bit 0) */ + #define R_GPT0_GTICBSR_BSGTRGR_Msk (0x1UL) /*!< BSGTRGR (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCR ========================================================== */ + #define R_GPT0_GTCR_CKEG_Pos (27UL) /*!< CKEG (Bit 27) */ + #define R_GPT0_GTCR_CKEG_Msk (0x18000000UL) /*!< CKEG (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTCR_TPCS_Pos (24UL) /*!< TPCS (Bit 24) */ + #define R_GPT0_GTCR_TPCS_Msk (0x7000000UL) /*!< TPCS (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTCR_MD_Pos (16UL) /*!< MD (Bit 16) */ + #define R_GPT0_GTCR_MD_Msk (0xf0000UL) /*!< MD (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTCR_SSCEN_Pos (15UL) /*!< SSCEN (Bit 15) */ + #define R_GPT0_GTCR_SSCEN_Msk (0x8000UL) /*!< SSCEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_CPSCD_Pos (12UL) /*!< CPSCD (Bit 12) */ + #define R_GPT0_GTCR_CPSCD_Msk (0x1000UL) /*!< CPSCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_SSCGRP_Pos (10UL) /*!< SSCGRP (Bit 10) */ + #define R_GPT0_GTCR_SSCGRP_Msk (0xc00UL) /*!< SSCGRP (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTCR_SCGTIOC_Pos (9UL) /*!< SCGTIOC (Bit 9) */ + #define R_GPT0_GTCR_SCGTIOC_Msk (0x200UL) /*!< SCGTIOC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_ICDS_Pos (8UL) /*!< ICDS (Bit 8) */ + #define R_GPT0_GTCR_ICDS_Msk (0x100UL) /*!< ICDS (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_BINV_Pos (5UL) /*!< BINV (Bit 5) */ + #define R_GPT0_GTCR_BINV_Msk (0x20UL) /*!< BINV (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_AINV_Pos (4UL) /*!< AINV (Bit 4) */ + #define R_GPT0_GTCR_AINV_Msk (0x10UL) /*!< AINV (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTCR_CST_Pos (0UL) /*!< CST (Bit 0) */ + #define R_GPT0_GTCR_CST_Msk (0x1UL) /*!< CST (Bitfield-Mask: 0x01) */ +/* ======================================================= GTUDDTYC ======================================================== */ + #define R_GPT0_GTUDDTYC_OABDTYT_Pos (28UL) /*!< OABDTYT (Bit 28) */ + #define R_GPT0_GTUDDTYC_OABDTYT_Msk (0x10000000UL) /*!< OABDTYT (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_OBDTYR_Pos (27UL) /*!< OBDTYR (Bit 27) */ + #define R_GPT0_GTUDDTYC_OBDTYR_Msk (0x8000000UL) /*!< OBDTYR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_OBDTYF_Pos (26UL) /*!< OBDTYF (Bit 26) */ + #define R_GPT0_GTUDDTYC_OBDTYF_Msk (0x4000000UL) /*!< OBDTYF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_OBDTY_Pos (24UL) /*!< OBDTY (Bit 24) */ + #define R_GPT0_GTUDDTYC_OBDTY_Msk (0x3000000UL) /*!< OBDTY (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTUDDTYC_OADTYR_Pos (19UL) /*!< OADTYR (Bit 19) */ + #define R_GPT0_GTUDDTYC_OADTYR_Msk (0x80000UL) /*!< OADTYR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_OADTYF_Pos (18UL) /*!< OADTYF (Bit 18) */ + #define R_GPT0_GTUDDTYC_OADTYF_Msk (0x40000UL) /*!< OADTYF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_OADTY_Pos (16UL) /*!< OADTY (Bit 16) */ + #define R_GPT0_GTUDDTYC_OADTY_Msk (0x30000UL) /*!< OADTY (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTUDDTYC_UDF_Pos (1UL) /*!< UDF (Bit 1) */ + #define R_GPT0_GTUDDTYC_UDF_Msk (0x2UL) /*!< UDF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTUDDTYC_UD_Pos (0UL) /*!< UD (Bit 0) */ + #define R_GPT0_GTUDDTYC_UD_Msk (0x1UL) /*!< UD (Bitfield-Mask: 0x01) */ +/* ========================================================= GTIOR ========================================================= */ + #define R_GPT0_GTIOR_NFCSB_Pos (30UL) /*!< NFCSB (Bit 30) */ + #define R_GPT0_GTIOR_NFCSB_Msk (0xc0000000UL) /*!< NFCSB (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTIOR_NFBEN_Pos (29UL) /*!< NFBEN (Bit 29) */ + #define R_GPT0_GTIOR_NFBEN_Msk (0x20000000UL) /*!< NFBEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OBEOCD_Pos (27UL) /*!< OBEOCD (Bit 27) */ + #define R_GPT0_GTIOR_OBEOCD_Msk (0x8000000UL) /*!< OBEOCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OBDF_Pos (25UL) /*!< OBDF (Bit 25) */ + #define R_GPT0_GTIOR_OBDF_Msk (0x6000000UL) /*!< OBDF (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTIOR_OBE_Pos (24UL) /*!< OBE (Bit 24) */ + #define R_GPT0_GTIOR_OBE_Msk (0x1000000UL) /*!< OBE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OBHLD_Pos (23UL) /*!< OBHLD (Bit 23) */ + #define R_GPT0_GTIOR_OBHLD_Msk (0x800000UL) /*!< OBHLD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OBDFLT_Pos (22UL) /*!< OBDFLT (Bit 22) */ + #define R_GPT0_GTIOR_OBDFLT_Msk (0x400000UL) /*!< OBDFLT (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_GTIOB_Pos (16UL) /*!< GTIOB (Bit 16) */ + #define R_GPT0_GTIOR_GTIOB_Msk (0x1f0000UL) /*!< GTIOB (Bitfield-Mask: 0x1f) */ + #define R_GPT0_GTIOR_NFCSA_Pos (14UL) /*!< NFCSA (Bit 14) */ + #define R_GPT0_GTIOR_NFCSA_Msk (0xc000UL) /*!< NFCSA (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTIOR_NFAEN_Pos (13UL) /*!< NFAEN (Bit 13) */ + #define R_GPT0_GTIOR_NFAEN_Msk (0x2000UL) /*!< NFAEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_PSYE_Pos (12UL) /*!< PSYE (Bit 12) */ + #define R_GPT0_GTIOR_PSYE_Msk (0x1000UL) /*!< PSYE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OAEOCD_Pos (11UL) /*!< OAEOCD (Bit 11) */ + #define R_GPT0_GTIOR_OAEOCD_Msk (0x800UL) /*!< OAEOCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OADF_Pos (9UL) /*!< OADF (Bit 9) */ + #define R_GPT0_GTIOR_OADF_Msk (0x600UL) /*!< OADF (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTIOR_OAE_Pos (8UL) /*!< OAE (Bit 8) */ + #define R_GPT0_GTIOR_OAE_Msk (0x100UL) /*!< OAE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OAHLD_Pos (7UL) /*!< OAHLD (Bit 7) */ + #define R_GPT0_GTIOR_OAHLD_Msk (0x80UL) /*!< OAHLD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_OADFLT_Pos (6UL) /*!< OADFLT (Bit 6) */ + #define R_GPT0_GTIOR_OADFLT_Msk (0x40UL) /*!< OADFLT (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_CPSCIR_Pos (5UL) /*!< CPSCIR (Bit 5) */ + #define R_GPT0_GTIOR_CPSCIR_Msk (0x20UL) /*!< CPSCIR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTIOR_GTIOA_Pos (0UL) /*!< GTIOA (Bit 0) */ + #define R_GPT0_GTIOR_GTIOA_Msk (0x1fUL) /*!< GTIOA (Bitfield-Mask: 0x1f) */ +/* ======================================================== GTINTAD ======================================================== */ + #define R_GPT0_GTINTAD_GTINTPC_Pos (31UL) /*!< GTINTPC (Bit 31) */ + #define R_GPT0_GTINTAD_GTINTPC_Msk (0x80000000UL) /*!< GTINTPC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_GRPABL_Pos (30UL) /*!< GRPABL (Bit 30) */ + #define R_GPT0_GTINTAD_GRPABL_Msk (0x40000000UL) /*!< GRPABL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_GRPABH_Pos (29UL) /*!< GRPABH (Bit 29) */ + #define R_GPT0_GTINTAD_GRPABH_Msk (0x20000000UL) /*!< GRPABH (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_GRPDTE_Pos (28UL) /*!< GRPDTE (Bit 28) */ + #define R_GPT0_GTINTAD_GRPDTE_Msk (0x10000000UL) /*!< GRPDTE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_GRP_Pos (24UL) /*!< GRP (Bit 24) */ + #define R_GPT0_GTINTAD_GRP_Msk (0x3000000UL) /*!< GRP (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTINTAD_ADTRDEN_Pos (17UL) /*!< ADTRDEN (Bit 17) */ + #define R_GPT0_GTINTAD_ADTRDEN_Msk (0x20000UL) /*!< ADTRDEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_ADTRUEN_Pos (16UL) /*!< ADTRUEN (Bit 16) */ + #define R_GPT0_GTINTAD_ADTRUEN_Msk (0x10000UL) /*!< ADTRUEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_SCFPU_Pos (15UL) /*!< SCFPU (Bit 15) */ + #define R_GPT0_GTINTAD_SCFPU_Msk (0x8000UL) /*!< SCFPU (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_SCFPO_Pos (14UL) /*!< SCFPO (Bit 14) */ + #define R_GPT0_GTINTAD_SCFPO_Msk (0x4000UL) /*!< SCFPO (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_SCF_Pos (8UL) /*!< SCF (Bit 8) */ + #define R_GPT0_GTINTAD_SCF_Msk (0x100UL) /*!< SCF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTINTAD_GTINTPR_Pos (6UL) /*!< GTINTPR (Bit 6) */ + #define R_GPT0_GTINTAD_GTINTPR_Msk (0xc0UL) /*!< GTINTPR (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTINTAD_GTINT_Pos (0UL) /*!< GTINT (Bit 0) */ + #define R_GPT0_GTINTAD_GTINT_Msk (0x1UL) /*!< GTINT (Bitfield-Mask: 0x01) */ +/* ========================================================= GTST ========================================================== */ + #define R_GPT0_GTST_PCF_Pos (31UL) /*!< PCF (Bit 31) */ + #define R_GPT0_GTST_PCF_Msk (0x80000000UL) /*!< PCF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_OABLF_Pos (30UL) /*!< OABLF (Bit 30) */ + #define R_GPT0_GTST_OABLF_Msk (0x40000000UL) /*!< OABLF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_OABHF_Pos (29UL) /*!< OABHF (Bit 29) */ + #define R_GPT0_GTST_OABHF_Msk (0x20000000UL) /*!< OABHF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_DTEF_Pos (28UL) /*!< DTEF (Bit 28) */ + #define R_GPT0_GTST_DTEF_Msk (0x10000000UL) /*!< DTEF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ODF_Pos (24UL) /*!< ODF (Bit 24) */ + #define R_GPT0_GTST_ODF_Msk (0x1000000UL) /*!< ODF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ADTRBDF_Pos (19UL) /*!< ADTRBDF (Bit 19) */ + #define R_GPT0_GTST_ADTRBDF_Msk (0x80000UL) /*!< ADTRBDF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ADTRBUF_Pos (18UL) /*!< ADTRBUF (Bit 18) */ + #define R_GPT0_GTST_ADTRBUF_Msk (0x40000UL) /*!< ADTRBUF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ADTRADF_Pos (17UL) /*!< ADTRADF (Bit 17) */ + #define R_GPT0_GTST_ADTRADF_Msk (0x20000UL) /*!< ADTRADF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ADTRAUF_Pos (16UL) /*!< ADTRAUF (Bit 16) */ + #define R_GPT0_GTST_ADTRAUF_Msk (0x10000UL) /*!< ADTRAUF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TUCF_Pos (15UL) /*!< TUCF (Bit 15) */ + #define R_GPT0_GTST_TUCF_Msk (0x8000UL) /*!< TUCF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_ITCNT_Pos (8UL) /*!< ITCNT (Bit 8) */ + #define R_GPT0_GTST_ITCNT_Msk (0x700UL) /*!< ITCNT (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTST_TCFPU_Pos (7UL) /*!< TCFPU (Bit 7) */ + #define R_GPT0_GTST_TCFPU_Msk (0x80UL) /*!< TCFPU (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFPO_Pos (6UL) /*!< TCFPO (Bit 6) */ + #define R_GPT0_GTST_TCFPO_Msk (0x40UL) /*!< TCFPO (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFF_Pos (5UL) /*!< TCFF (Bit 5) */ + #define R_GPT0_GTST_TCFF_Msk (0x20UL) /*!< TCFF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFE_Pos (4UL) /*!< TCFE (Bit 4) */ + #define R_GPT0_GTST_TCFE_Msk (0x10UL) /*!< TCFE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFD_Pos (3UL) /*!< TCFD (Bit 3) */ + #define R_GPT0_GTST_TCFD_Msk (0x8UL) /*!< TCFD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFC_Pos (2UL) /*!< TCFC (Bit 2) */ + #define R_GPT0_GTST_TCFC_Msk (0x4UL) /*!< TCFC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFB_Pos (1UL) /*!< TCFB (Bit 1) */ + #define R_GPT0_GTST_TCFB_Msk (0x2UL) /*!< TCFB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTST_TCFA_Pos (0UL) /*!< TCFA (Bit 0) */ + #define R_GPT0_GTST_TCFA_Msk (0x1UL) /*!< TCFA (Bitfield-Mask: 0x01) */ +/* ========================================================= GTBER ========================================================= */ + #define R_GPT0_GTBER_ADTDB_Pos (30UL) /*!< ADTDB (Bit 30) */ + #define R_GPT0_GTBER_ADTDB_Msk (0x40000000UL) /*!< ADTDB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_ADTTB_Pos (28UL) /*!< ADTTB (Bit 28) */ + #define R_GPT0_GTBER_ADTTB_Msk (0x30000000UL) /*!< ADTTB (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER_ADTDA_Pos (26UL) /*!< ADTDA (Bit 26) */ + #define R_GPT0_GTBER_ADTDA_Msk (0x4000000UL) /*!< ADTDA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_ADTTA_Pos (24UL) /*!< ADTTA (Bit 24) */ + #define R_GPT0_GTBER_ADTTA_Msk (0x3000000UL) /*!< ADTTA (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER_CCRSWT_Pos (22UL) /*!< CCRSWT (Bit 22) */ + #define R_GPT0_GTBER_CCRSWT_Msk (0x400000UL) /*!< CCRSWT (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_PR_Pos (20UL) /*!< PR (Bit 20) */ + #define R_GPT0_GTBER_PR_Msk (0x300000UL) /*!< PR (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER_CCRB_Pos (18UL) /*!< CCRB (Bit 18) */ + #define R_GPT0_GTBER_CCRB_Msk (0xc0000UL) /*!< CCRB (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER_CCRA_Pos (16UL) /*!< CCRA (Bit 16) */ + #define R_GPT0_GTBER_CCRA_Msk (0x30000UL) /*!< CCRA (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER_DBRTEC_Pos (8UL) /*!< DBRTEC (Bit 8) */ + #define R_GPT0_GTBER_DBRTEC_Msk (0x100UL) /*!< DBRTEC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_BD3_Pos (3UL) /*!< BD3 (Bit 3) */ + #define R_GPT0_GTBER_BD3_Msk (0x8UL) /*!< BD3 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_BD2_Pos (2UL) /*!< BD2 (Bit 2) */ + #define R_GPT0_GTBER_BD2_Msk (0x4UL) /*!< BD2 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_BD1_Pos (1UL) /*!< BD1 (Bit 1) */ + #define R_GPT0_GTBER_BD1_Msk (0x2UL) /*!< BD1 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER_BD0_Pos (0UL) /*!< BD0 (Bit 0) */ + #define R_GPT0_GTBER_BD0_Msk (0x1UL) /*!< BD0 (Bitfield-Mask: 0x01) */ +/* ========================================================= GTITC ========================================================= */ + #define R_GPT0_GTITC_ADTBL_Pos (14UL) /*!< ADTBL (Bit 14) */ + #define R_GPT0_GTITC_ADTBL_Msk (0x4000UL) /*!< ADTBL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ADTAL_Pos (12UL) /*!< ADTAL (Bit 12) */ + #define R_GPT0_GTITC_ADTAL_Msk (0x1000UL) /*!< ADTAL (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_IVTT_Pos (8UL) /*!< IVTT (Bit 8) */ + #define R_GPT0_GTITC_IVTT_Msk (0x700UL) /*!< IVTT (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTITC_IVTC_Pos (6UL) /*!< IVTC (Bit 6) */ + #define R_GPT0_GTITC_IVTC_Msk (0xc0UL) /*!< IVTC (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTITC_ITLF_Pos (5UL) /*!< ITLF (Bit 5) */ + #define R_GPT0_GTITC_ITLF_Msk (0x20UL) /*!< ITLF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ITLE_Pos (4UL) /*!< ITLE (Bit 4) */ + #define R_GPT0_GTITC_ITLE_Msk (0x10UL) /*!< ITLE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ITLD_Pos (3UL) /*!< ITLD (Bit 3) */ + #define R_GPT0_GTITC_ITLD_Msk (0x8UL) /*!< ITLD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ITLC_Pos (2UL) /*!< ITLC (Bit 2) */ + #define R_GPT0_GTITC_ITLC_Msk (0x4UL) /*!< ITLC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ITLB_Pos (1UL) /*!< ITLB (Bit 1) */ + #define R_GPT0_GTITC_ITLB_Msk (0x2UL) /*!< ITLB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTITC_ITLA_Pos (0UL) /*!< ITLA (Bit 0) */ + #define R_GPT0_GTITC_ITLA_Msk (0x1UL) /*!< ITLA (Bitfield-Mask: 0x01) */ +/* ========================================================= GTCNT ========================================================= */ + #define R_GPT0_GTCNT_GTCNT_Pos (0UL) /*!< GTCNT (Bit 0) */ + #define R_GPT0_GTCNT_GTCNT_Msk (0xffffffffUL) /*!< GTCNT (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTCCR ========================================================= */ + #define R_GPT0_GTCCR_GTCCR_Pos (0UL) /*!< GTCCR (Bit 0) */ + #define R_GPT0_GTCCR_GTCCR_Msk (0xffffffffUL) /*!< GTCCR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTPR ========================================================== */ + #define R_GPT0_GTPR_GTPR_Pos (0UL) /*!< GTPR (Bit 0) */ + #define R_GPT0_GTPR_GTPR_Msk (0xffffffffUL) /*!< GTPR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTPBR ========================================================= */ + #define R_GPT0_GTPBR_GTPBR_Pos (0UL) /*!< GTPBR (Bit 0) */ + #define R_GPT0_GTPBR_GTPBR_Msk (0xffffffffUL) /*!< GTPBR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== GTPDBR ========================================================= */ + #define R_GPT0_GTPDBR_GTPDBR_Pos (0UL) /*!< GTPDBR (Bit 0) */ + #define R_GPT0_GTPDBR_GTPDBR_Msk (0xffffffffUL) /*!< GTPDBR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== GTADTRA ======================================================== */ + #define R_GPT0_GTADTRA_GTADTRA_Pos (0UL) /*!< GTADTRA (Bit 0) */ + #define R_GPT0_GTADTRA_GTADTRA_Msk (0xffffffffUL) /*!< GTADTRA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== GTADTRB ======================================================== */ + #define R_GPT0_GTADTRB_GTADTRB_Pos (0UL) /*!< GTADTRB (Bit 0) */ + #define R_GPT0_GTADTRB_GTADTRB_Msk (0xffffffffUL) /*!< GTADTRB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= GTADTBRA ======================================================== */ + #define R_GPT0_GTADTBRA_GTADTBRA_Pos (0UL) /*!< GTADTBRA (Bit 0) */ + #define R_GPT0_GTADTBRA_GTADTBRA_Msk (0xffffffffUL) /*!< GTADTBRA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= GTADTBRB ======================================================== */ + #define R_GPT0_GTADTBRB_GTADTBRB_Pos (0UL) /*!< GTADTBRB (Bit 0) */ + #define R_GPT0_GTADTBRB_GTADTBRB_Msk (0xffffffffUL) /*!< GTADTBRB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= GTADTDBRA ======================================================= */ + #define R_GPT0_GTADTDBRA_GTADTDBRA_Pos (0UL) /*!< GTADTDBRA (Bit 0) */ + #define R_GPT0_GTADTDBRA_GTADTDBRA_Msk (0xffffffffUL) /*!< GTADTDBRA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= GTADTDBRB ======================================================= */ + #define R_GPT0_GTADTDBRB_GTADTDBRB_Pos (0UL) /*!< GTADTDBRB (Bit 0) */ + #define R_GPT0_GTADTDBRB_GTADTDBRB_Msk (0xffffffffUL) /*!< GTADTDBRB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== GTDTCR ========================================================= */ + #define R_GPT0_GTDTCR_TDFER_Pos (8UL) /*!< TDFER (Bit 8) */ + #define R_GPT0_GTDTCR_TDFER_Msk (0x100UL) /*!< TDFER (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDTCR_TDBDE_Pos (5UL) /*!< TDBDE (Bit 5) */ + #define R_GPT0_GTDTCR_TDBDE_Msk (0x20UL) /*!< TDBDE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDTCR_TDBUE_Pos (4UL) /*!< TDBUE (Bit 4) */ + #define R_GPT0_GTDTCR_TDBUE_Msk (0x10UL) /*!< TDBUE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTDTCR_TDE_Pos (0UL) /*!< TDE (Bit 0) */ + #define R_GPT0_GTDTCR_TDE_Msk (0x1UL) /*!< TDE (Bitfield-Mask: 0x01) */ +/* ========================================================= GTDVU ========================================================= */ + #define R_GPT0_GTDVU_GTDVU_Pos (0UL) /*!< GTDVU (Bit 0) */ + #define R_GPT0_GTDVU_GTDVU_Msk (0xffffffffUL) /*!< GTDVU (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTDVD ========================================================= */ + #define R_GPT0_GTDVD_GTDVD_Pos (0UL) /*!< GTDVD (Bit 0) */ + #define R_GPT0_GTDVD_GTDVD_Msk (0xffffffffUL) /*!< GTDVD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTDBU ========================================================= */ + #define R_GPT0_GTDBU_GTDVU_Pos (0UL) /*!< GTDVU (Bit 0) */ + #define R_GPT0_GTDBU_GTDVU_Msk (0xffffffffUL) /*!< GTDVU (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTDBD ========================================================= */ + #define R_GPT0_GTDBD_GTDBD_Pos (0UL) /*!< GTDBD (Bit 0) */ + #define R_GPT0_GTDBD_GTDBD_Msk (0xffffffffUL) /*!< GTDBD (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= GTSOS ========================================================= */ + #define R_GPT0_GTSOS_SOS_Pos (0UL) /*!< SOS (Bit 0) */ + #define R_GPT0_GTSOS_SOS_Msk (0x3UL) /*!< SOS (Bitfield-Mask: 0x03) */ +/* ======================================================== GTSOTR ========================================================= */ + #define R_GPT0_GTSOTR_SOTR_Pos (0UL) /*!< SOTR (Bit 0) */ + #define R_GPT0_GTSOTR_SOTR_Msk (0x1UL) /*!< SOTR (Bitfield-Mask: 0x01) */ +/* ======================================================== GTADSMR ======================================================== */ + #define R_GPT0_GTADSMR_ADSMS0_Pos (0UL) /*!< ADSMS0 (Bit 0) */ + #define R_GPT0_GTADSMR_ADSMS0_Msk (0x3UL) /*!< ADSMS0 (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTADSMR_ADSMEN0_Pos (8UL) /*!< ADSMEN0 (Bit 8) */ + #define R_GPT0_GTADSMR_ADSMEN0_Msk (0x100UL) /*!< ADSMEN0 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTADSMR_ADSMS1_Pos (16UL) /*!< ADSMS1 (Bit 16) */ + #define R_GPT0_GTADSMR_ADSMS1_Msk (0x30000UL) /*!< ADSMS1 (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTADSMR_ADSMEN1_Pos (24UL) /*!< ADSMEN1 (Bit 24) */ + #define R_GPT0_GTADSMR_ADSMEN1_Msk (0x1000000UL) /*!< ADSMEN1 (Bitfield-Mask: 0x01) */ +/* ======================================================== GTEITC ========================================================= */ + #define R_GPT0_GTEITC_EIVTC1_Pos (0UL) /*!< EIVTC1 (Bit 0) */ + #define R_GPT0_GTEITC_EIVTC1_Msk (0x3UL) /*!< EIVTC1 (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTEITC_EIVTT1_Pos (4UL) /*!< EIVTT1 (Bit 4) */ + #define R_GPT0_GTEITC_EIVTT1_Msk (0xf0UL) /*!< EIVTT1 (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTEITC_EITCNT1_Pos (12UL) /*!< EITCNT1 (Bit 12) */ + #define R_GPT0_GTEITC_EITCNT1_Msk (0xf000UL) /*!< EITCNT1 (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTEITC_EIVTC2_Pos (16UL) /*!< EIVTC2 (Bit 16) */ + #define R_GPT0_GTEITC_EIVTC2_Msk (0x30000UL) /*!< EIVTC2 (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTEITC_EIVTT2_Pos (20UL) /*!< EIVTT2 (Bit 20) */ + #define R_GPT0_GTEITC_EIVTT2_Msk (0xf00000UL) /*!< EIVTT2 (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTEITC_EITCNT2IV_Pos (24UL) /*!< EITCNT2IV (Bit 24) */ + #define R_GPT0_GTEITC_EITCNT2IV_Msk (0xf000000UL) /*!< EITCNT2IV (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTEITC_EITCNT2_Pos (28UL) /*!< EITCNT2 (Bit 28) */ + #define R_GPT0_GTEITC_EITCNT2_Msk (0xf0000000UL) /*!< EITCNT2 (Bitfield-Mask: 0x0f) */ +/* ======================================================= GTEITLI1 ======================================================== */ + #define R_GPT0_GTEITLI1_EITLA_Pos (0UL) /*!< EITLA (Bit 0) */ + #define R_GPT0_GTEITLI1_EITLA_Msk (0x7UL) /*!< EITLA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLB_Pos (4UL) /*!< EITLB (Bit 4) */ + #define R_GPT0_GTEITLI1_EITLB_Msk (0x70UL) /*!< EITLB (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLC_Pos (8UL) /*!< EITLC (Bit 8) */ + #define R_GPT0_GTEITLI1_EITLC_Msk (0x700UL) /*!< EITLC (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLD_Pos (12UL) /*!< EITLD (Bit 12) */ + #define R_GPT0_GTEITLI1_EITLD_Msk (0x7000UL) /*!< EITLD (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLE_Pos (16UL) /*!< EITLE (Bit 16) */ + #define R_GPT0_GTEITLI1_EITLE_Msk (0x70000UL) /*!< EITLE (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLF_Pos (20UL) /*!< EITLF (Bit 20) */ + #define R_GPT0_GTEITLI1_EITLF_Msk (0x700000UL) /*!< EITLF (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLV_Pos (24UL) /*!< EITLV (Bit 24) */ + #define R_GPT0_GTEITLI1_EITLV_Msk (0x7000000UL) /*!< EITLV (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI1_EITLU_Pos (28UL) /*!< EITLU (Bit 28) */ + #define R_GPT0_GTEITLI1_EITLU_Msk (0x70000000UL) /*!< EITLU (Bitfield-Mask: 0x07) */ +/* ======================================================= GTEITLI2 ======================================================== */ + #define R_GPT0_GTEITLI2_EADTAL_Pos (0UL) /*!< EADTAL (Bit 0) */ + #define R_GPT0_GTEITLI2_EADTAL_Msk (0x7UL) /*!< EADTAL (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLI2_EADTBL_Pos (4UL) /*!< EADTBL (Bit 4) */ + #define R_GPT0_GTEITLI2_EADTBL_Msk (0x70UL) /*!< EADTBL (Bitfield-Mask: 0x07) */ +/* ======================================================== GTEITLB ======================================================== */ + #define R_GPT0_GTEITLB_EBTLCA_Pos (0UL) /*!< EBTLCA (Bit 0) */ + #define R_GPT0_GTEITLB_EBTLCA_Msk (0x7UL) /*!< EBTLCA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLCB_Pos (4UL) /*!< EBTLCB (Bit 4) */ + #define R_GPT0_GTEITLB_EBTLCB_Msk (0x70UL) /*!< EBTLCB (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLPR_Pos (8UL) /*!< EBTLPR (Bit 8) */ + #define R_GPT0_GTEITLB_EBTLPR_Msk (0x700UL) /*!< EBTLPR (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLADA_Pos (16UL) /*!< EBTLADA (Bit 16) */ + #define R_GPT0_GTEITLB_EBTLADA_Msk (0x70000UL) /*!< EBTLADA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLADB_Pos (20UL) /*!< EBTLADB (Bit 20) */ + #define R_GPT0_GTEITLB_EBTLADB_Msk (0x700000UL) /*!< EBTLADB (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLDVU_Pos (24UL) /*!< EBTLDVU (Bit 24) */ + #define R_GPT0_GTEITLB_EBTLDVU_Msk (0x7000000UL) /*!< EBTLDVU (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTEITLB_EBTLDVD_Pos (28UL) /*!< EBTLDVD (Bit 28) */ + #define R_GPT0_GTEITLB_EBTLDVD_Msk (0x70000000UL) /*!< EBTLDVD (Bitfield-Mask: 0x07) */ +/* ======================================================== GTICLF ========================================================= */ + #define R_GPT0_GTICLF_ICLFA_Pos (0UL) /*!< ICLFA (Bit 0) */ + #define R_GPT0_GTICLF_ICLFA_Msk (0x7UL) /*!< ICLFA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTICLF_ICLFSELC_Pos (4UL) /*!< ICLFSELC (Bit 4) */ + #define R_GPT0_GTICLF_ICLFSELC_Msk (0x3f0UL) /*!< ICLFSELC (Bitfield-Mask: 0x3f) */ + #define R_GPT0_GTICLF_ICLFB_Pos (16UL) /*!< ICLFB (Bit 16) */ + #define R_GPT0_GTICLF_ICLFB_Msk (0x70000UL) /*!< ICLFB (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTICLF_ICLFSELD_Pos (20UL) /*!< ICLFSELD (Bit 20) */ + #define R_GPT0_GTICLF_ICLFSELD_Msk (0x3f00000UL) /*!< ICLFSELD (Bitfield-Mask: 0x3f) */ +/* ========================================================= GTPC ========================================================== */ + #define R_GPT0_GTPC_PCEN_Pos (0UL) /*!< PCEN (Bit 0) */ + #define R_GPT0_GTPC_PCEN_Msk (0x1UL) /*!< PCEN (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPC_ASTP_Pos (8UL) /*!< ASTP (Bit 8) */ + #define R_GPT0_GTPC_ASTP_Msk (0x100UL) /*!< ASTP (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTPC_PCNT_Pos (16UL) /*!< PCNT (Bit 16) */ + #define R_GPT0_GTPC_PCNT_Msk (0xfff0000UL) /*!< PCNT (Bitfield-Mask: 0xfff) */ +/* ======================================================= GTADCMSC ======================================================== */ + #define R_GPT0_GTADCMSC_ADCMSCNT_Pos (12UL) /*!< ADCMSCNT (Bit 12) */ + #define R_GPT0_GTADCMSC_ADCMSCNT_Msk (0xf000UL) /*!< ADCMSCNT (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTADCMSC_ADCMSCNTIV_Pos (8UL) /*!< ADCMSCNTIV (Bit 8) */ + #define R_GPT0_GTADCMSC_ADCMSCNTIV_Msk (0xf00UL) /*!< ADCMSCNTIV (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTADCMSC_ADCMST_Pos (4UL) /*!< ADCMST (Bit 4) */ + #define R_GPT0_GTADCMSC_ADCMST_Msk (0xf0UL) /*!< ADCMST (Bitfield-Mask: 0x0f) */ + #define R_GPT0_GTADCMSC_ADCMSC_Pos (0UL) /*!< ADCMSC (Bit 0) */ + #define R_GPT0_GTADCMSC_ADCMSC_Msk (0x3UL) /*!< ADCMSC (Bitfield-Mask: 0x03) */ +/* ======================================================= GTADCMSS ======================================================== */ + #define R_GPT0_GTADCMSS_ADCMSAL_Pos (0UL) /*!< ADCMSAL (Bit 0) */ + #define R_GPT0_GTADCMSS_ADCMSAL_Msk (0x7UL) /*!< ADCMSAL (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTADCMSS_ADCMSBL_Pos (4UL) /*!< ADCMSBL (Bit 4) */ + #define R_GPT0_GTADCMSS_ADCMSBL_Msk (0x70UL) /*!< ADCMSBL (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTADCMSS_ADCMBSA_Pos (16UL) /*!< ADCMBSA (Bit 16) */ + #define R_GPT0_GTADCMSS_ADCMBSA_Msk (0x70000UL) /*!< ADCMBSA (Bitfield-Mask: 0x07) */ + #define R_GPT0_GTADCMSS_ADCMBSB_Pos (20UL) /*!< ADCMBSB (Bit 20) */ + #define R_GPT0_GTADCMSS_ADCMBSB_Msk (0x700000UL) /*!< ADCMBSB (Bitfield-Mask: 0x07) */ +/* ======================================================== GTSECSR ======================================================== */ + #define R_GPT0_GTSECSR_SECSEL0_Pos (0UL) /*!< SECSEL0 (Bit 0) */ + #define R_GPT0_GTSECSR_SECSEL0_Msk (0x1UL) /*!< SECSEL0 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL1_Pos (1UL) /*!< SECSEL1 (Bit 1) */ + #define R_GPT0_GTSECSR_SECSEL1_Msk (0x2UL) /*!< SECSEL1 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL2_Pos (2UL) /*!< SECSEL2 (Bit 2) */ + #define R_GPT0_GTSECSR_SECSEL2_Msk (0x4UL) /*!< SECSEL2 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL3_Pos (3UL) /*!< SECSEL3 (Bit 3) */ + #define R_GPT0_GTSECSR_SECSEL3_Msk (0x8UL) /*!< SECSEL3 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL4_Pos (4UL) /*!< SECSEL4 (Bit 4) */ + #define R_GPT0_GTSECSR_SECSEL4_Msk (0x10UL) /*!< SECSEL4 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL5_Pos (5UL) /*!< SECSEL5 (Bit 5) */ + #define R_GPT0_GTSECSR_SECSEL5_Msk (0x20UL) /*!< SECSEL5 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL6_Pos (6UL) /*!< SECSEL6 (Bit 6) */ + #define R_GPT0_GTSECSR_SECSEL6_Msk (0x40UL) /*!< SECSEL6 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL7_Pos (7UL) /*!< SECSEL7 (Bit 7) */ + #define R_GPT0_GTSECSR_SECSEL7_Msk (0x80UL) /*!< SECSEL7 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL8_Pos (8UL) /*!< SECSEL8 (Bit 8) */ + #define R_GPT0_GTSECSR_SECSEL8_Msk (0x100UL) /*!< SECSEL8 (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECSR_SECSEL9_Pos (9UL) /*!< SECSEL9 (Bit 9) */ + #define R_GPT0_GTSECSR_SECSEL9_Msk (0x200UL) /*!< SECSEL9 (Bitfield-Mask: 0x01) */ +/* ======================================================== GTSECR ========================================================= */ + #define R_GPT0_GTSECR_SBDCE_Pos (0UL) /*!< SBDCE (Bit 0) */ + #define R_GPT0_GTSECR_SBDCE_Msk (0x1UL) /*!< SBDCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDPE_Pos (1UL) /*!< SBDPE (Bit 1) */ + #define R_GPT0_GTSECR_SBDPE_Msk (0x2UL) /*!< SBDPE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDAE_Pos (2UL) /*!< SBDAE (Bit 2) */ + #define R_GPT0_GTSECR_SBDAE_Msk (0x4UL) /*!< SBDAE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDDE_Pos (3UL) /*!< SBDDE (Bit 3) */ + #define R_GPT0_GTSECR_SBDDE_Msk (0x8UL) /*!< SBDDE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDCD_Pos (8UL) /*!< SBDCD (Bit 8) */ + #define R_GPT0_GTSECR_SBDCD_Msk (0x100UL) /*!< SBDCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDPD_Pos (9UL) /*!< SBDPD (Bit 9) */ + #define R_GPT0_GTSECR_SBDPD_Msk (0x200UL) /*!< SBDPD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDAD_Pos (10UL) /*!< SBDAD (Bit 10) */ + #define R_GPT0_GTSECR_SBDAD_Msk (0x400UL) /*!< SBDAD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SBDDD_Pos (11UL) /*!< SBDDD (Bit 11) */ + #define R_GPT0_GTSECR_SBDDD_Msk (0x800UL) /*!< SBDDD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SPCE_Pos (16UL) /*!< SPCE (Bit 16) */ + #define R_GPT0_GTSECR_SPCE_Msk (0x10000UL) /*!< SPCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SSCE_Pos (17UL) /*!< SSCE (Bit 17) */ + #define R_GPT0_GTSECR_SSCE_Msk (0x20000UL) /*!< SSCE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SPCD_Pos (24UL) /*!< SPCD (Bit 24) */ + #define R_GPT0_GTSECR_SPCD_Msk (0x1000000UL) /*!< SPCD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTSECR_SSCD_Pos (25UL) /*!< SSCD (Bit 25) */ + #define R_GPT0_GTSECR_SSCD_Msk (0x2000000UL) /*!< SSCD (Bitfield-Mask: 0x01) */ +/* ======================================================== GTBER2 ========================================================= */ + #define R_GPT0_GTBER2_CCTCA_Pos (0UL) /*!< CCTCA (Bit 0) */ + #define R_GPT0_GTBER2_CCTCA_Msk (0x1UL) /*!< CCTCA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CCTCB_Pos (1UL) /*!< CCTCB (Bit 1) */ + #define R_GPT0_GTBER2_CCTCB_Msk (0x2UL) /*!< CCTCB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CCTPR_Pos (2UL) /*!< CCTPR (Bit 2) */ + #define R_GPT0_GTBER2_CCTPR_Msk (0x4UL) /*!< CCTPR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CCTADA_Pos (3UL) /*!< CCTADA (Bit 3) */ + #define R_GPT0_GTBER2_CCTADA_Msk (0x8UL) /*!< CCTADA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CCTADB_Pos (4UL) /*!< CCTADB (Bit 4) */ + #define R_GPT0_GTBER2_CCTADB_Msk (0x10UL) /*!< CCTADB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CCTDV_Pos (5UL) /*!< CCTDV (Bit 5) */ + #define R_GPT0_GTBER2_CCTDV_Msk (0x20UL) /*!< CCTDV (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CMTCA_Pos (8UL) /*!< CMTCA (Bit 8) */ + #define R_GPT0_GTBER2_CMTCA_Msk (0x300UL) /*!< CMTCA (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER2_CMTCB_Pos (10UL) /*!< CMTCB (Bit 10) */ + #define R_GPT0_GTBER2_CMTCB_Msk (0xc00UL) /*!< CMTCB (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER2_CMTADA_Pos (13UL) /*!< CMTADA (Bit 13) */ + #define R_GPT0_GTBER2_CMTADA_Msk (0x2000UL) /*!< CMTADA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CMTADB_Pos (14UL) /*!< CMTADB (Bit 14) */ + #define R_GPT0_GTBER2_CMTADB_Msk (0x4000UL) /*!< CMTADB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTCA_Pos (16UL) /*!< CPTCA (Bit 16) */ + #define R_GPT0_GTBER2_CPTCA_Msk (0x10000UL) /*!< CPTCA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTCB_Pos (17UL) /*!< CPTCB (Bit 17) */ + #define R_GPT0_GTBER2_CPTCB_Msk (0x20000UL) /*!< CPTCB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTPR_Pos (18UL) /*!< CPTPR (Bit 18) */ + #define R_GPT0_GTBER2_CPTPR_Msk (0x40000UL) /*!< CPTPR (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTADA_Pos (19UL) /*!< CPTADA (Bit 19) */ + #define R_GPT0_GTBER2_CPTADA_Msk (0x80000UL) /*!< CPTADA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTADB_Pos (20UL) /*!< CPTADB (Bit 20) */ + #define R_GPT0_GTBER2_CPTADB_Msk (0x100000UL) /*!< CPTADB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPTDV_Pos (21UL) /*!< CPTDV (Bit 21) */ + #define R_GPT0_GTBER2_CPTDV_Msk (0x200000UL) /*!< CPTDV (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CP3DB_Pos (24UL) /*!< CP3DB (Bit 24) */ + #define R_GPT0_GTBER2_CP3DB_Msk (0x1000000UL) /*!< CP3DB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_CPBTD_Pos (25UL) /*!< CPBTD (Bit 25) */ + #define R_GPT0_GTBER2_CPBTD_Msk (0x2000000UL) /*!< CPBTD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTBER2_OLTTA_Pos (26UL) /*!< OLTTA (Bit 26) */ + #define R_GPT0_GTBER2_OLTTA_Msk (0xc000000UL) /*!< OLTTA (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTBER2_OLTTB_Pos (28UL) /*!< OLTTB (Bit 28) */ + #define R_GPT0_GTBER2_OLTTB_Msk (0x30000000UL) /*!< OLTTB (Bitfield-Mask: 0x03) */ +/* ======================================================== GTOLBR ========================================================= */ + #define R_GPT0_GTOLBR_GTIOAB_Pos (0UL) /*!< GTIOAB (Bit 0) */ + #define R_GPT0_GTOLBR_GTIOAB_Msk (0x1fUL) /*!< GTIOAB (Bitfield-Mask: 0x1f) */ + #define R_GPT0_GTOLBR_GTIOBB_Pos (16UL) /*!< GTIOBB (Bit 16) */ + #define R_GPT0_GTOLBR_GTIOBB_Msk (0x1f0000UL) /*!< GTIOBB (Bitfield-Mask: 0x1f) */ +/* ======================================================== GTICCR ========================================================= */ + #define R_GPT0_GTICCR_ICAFA_Pos (0UL) /*!< ICAFA (Bit 0) */ + #define R_GPT0_GTICCR_ICAFA_Msk (0x1UL) /*!< ICAFA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFB_Pos (1UL) /*!< ICAFB (Bit 1) */ + #define R_GPT0_GTICCR_ICAFB_Msk (0x2UL) /*!< ICAFB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFC_Pos (2UL) /*!< ICAFC (Bit 2) */ + #define R_GPT0_GTICCR_ICAFC_Msk (0x4UL) /*!< ICAFC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFD_Pos (3UL) /*!< ICAFD (Bit 3) */ + #define R_GPT0_GTICCR_ICAFD_Msk (0x8UL) /*!< ICAFD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFE_Pos (4UL) /*!< ICAFE (Bit 4) */ + #define R_GPT0_GTICCR_ICAFE_Msk (0x10UL) /*!< ICAFE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFF_Pos (5UL) /*!< ICAFF (Bit 5) */ + #define R_GPT0_GTICCR_ICAFF_Msk (0x20UL) /*!< ICAFF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFPO_Pos (6UL) /*!< ICAFPO (Bit 6) */ + #define R_GPT0_GTICCR_ICAFPO_Msk (0x40UL) /*!< ICAFPO (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAFPU_Pos (7UL) /*!< ICAFPU (Bit 7) */ + #define R_GPT0_GTICCR_ICAFPU_Msk (0x80UL) /*!< ICAFPU (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICACLK_Pos (8UL) /*!< ICACLK (Bit 8) */ + #define R_GPT0_GTICCR_ICACLK_Msk (0x100UL) /*!< ICACLK (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICAGRP_Pos (14UL) /*!< ICAGRP (Bit 14) */ + #define R_GPT0_GTICCR_ICAGRP_Msk (0xc000UL) /*!< ICAGRP (Bitfield-Mask: 0x03) */ + #define R_GPT0_GTICCR_ICBFA_Pos (16UL) /*!< ICBFA (Bit 16) */ + #define R_GPT0_GTICCR_ICBFA_Msk (0x10000UL) /*!< ICBFA (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFB_Pos (17UL) /*!< ICBFB (Bit 17) */ + #define R_GPT0_GTICCR_ICBFB_Msk (0x20000UL) /*!< ICBFB (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFC_Pos (18UL) /*!< ICBFC (Bit 18) */ + #define R_GPT0_GTICCR_ICBFC_Msk (0x40000UL) /*!< ICBFC (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFD_Pos (19UL) /*!< ICBFD (Bit 19) */ + #define R_GPT0_GTICCR_ICBFD_Msk (0x80000UL) /*!< ICBFD (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFE_Pos (20UL) /*!< ICBFE (Bit 20) */ + #define R_GPT0_GTICCR_ICBFE_Msk (0x100000UL) /*!< ICBFE (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFF_Pos (21UL) /*!< ICBFF (Bit 21) */ + #define R_GPT0_GTICCR_ICBFF_Msk (0x200000UL) /*!< ICBFF (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFPO_Pos (22UL) /*!< ICBFPO (Bit 22) */ + #define R_GPT0_GTICCR_ICBFPO_Msk (0x400000UL) /*!< ICBFPO (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBFPU_Pos (23UL) /*!< ICBFPU (Bit 23) */ + #define R_GPT0_GTICCR_ICBFPU_Msk (0x800000UL) /*!< ICBFPU (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBCLK_Pos (24UL) /*!< ICBCLK (Bit 24) */ + #define R_GPT0_GTICCR_ICBCLK_Msk (0x1000000UL) /*!< ICBCLK (Bitfield-Mask: 0x01) */ + #define R_GPT0_GTICCR_ICBGRP_Pos (30UL) /*!< ICBGRP (Bit 30) */ + #define R_GPT0_GTICCR_ICBGRP_Msk (0xc0000000UL) /*!< ICBGRP (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_OPS ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= OPSCR ========================================================= */ + #define R_GPT_OPS_OPSCR_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_GPT_OPS_OPSCR_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + #define R_GPT_OPS_OPSCR_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_GPT_OPS_OPSCR_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_GODF_Pos (26UL) /*!< GODF (Bit 26) */ + #define R_GPT_OPS_OPSCR_GODF_Msk (0x4000000UL) /*!< GODF (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_GRP_Pos (24UL) /*!< GRP (Bit 24) */ + #define R_GPT_OPS_OPSCR_GRP_Msk (0x3000000UL) /*!< GRP (Bitfield-Mask: 0x03) */ + #define R_GPT_OPS_OPSCR_ALIGN_Pos (21UL) /*!< ALIGN (Bit 21) */ + #define R_GPT_OPS_OPSCR_ALIGN_Msk (0x200000UL) /*!< ALIGN (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_RV_Pos (20UL) /*!< RV (Bit 20) */ + #define R_GPT_OPS_OPSCR_RV_Msk (0x100000UL) /*!< RV (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_INV_Pos (19UL) /*!< INV (Bit 19) */ + #define R_GPT_OPS_OPSCR_INV_Msk (0x80000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_N_Pos (18UL) /*!< N (Bit 18) */ + #define R_GPT_OPS_OPSCR_N_Msk (0x40000UL) /*!< N (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_P_Pos (17UL) /*!< P (Bit 17) */ + #define R_GPT_OPS_OPSCR_P_Msk (0x20000UL) /*!< P (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_FB_Pos (16UL) /*!< FB (Bit 16) */ + #define R_GPT_OPS_OPSCR_FB_Msk (0x10000UL) /*!< FB (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_EN_Pos (8UL) /*!< EN (Bit 8) */ + #define R_GPT_OPS_OPSCR_EN_Msk (0x100UL) /*!< EN (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_W_Pos (6UL) /*!< W (Bit 6) */ + #define R_GPT_OPS_OPSCR_W_Msk (0x40UL) /*!< W (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_V_Pos (5UL) /*!< V (Bit 5) */ + #define R_GPT_OPS_OPSCR_V_Msk (0x20UL) /*!< V (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_U_Pos (4UL) /*!< U (Bit 4) */ + #define R_GPT_OPS_OPSCR_U_Msk (0x10UL) /*!< U (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_WF_Pos (2UL) /*!< WF (Bit 2) */ + #define R_GPT_OPS_OPSCR_WF_Msk (0x4UL) /*!< WF (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_VF_Pos (1UL) /*!< VF (Bit 1) */ + #define R_GPT_OPS_OPSCR_VF_Msk (0x2UL) /*!< VF (Bitfield-Mask: 0x01) */ + #define R_GPT_OPS_OPSCR_UF_Pos (0UL) /*!< UF (Bit 0) */ + #define R_GPT_OPS_OPSCR_UF_Msk (0x1UL) /*!< UF (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_GPT_POEG0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= POEGG ========================================================= */ + #define R_GPT_POEG0_POEGG_NFCS_Pos (30UL) /*!< NFCS (Bit 30) */ + #define R_GPT_POEG0_POEGG_NFCS_Msk (0xc0000000UL) /*!< NFCS (Bitfield-Mask: 0x03) */ + #define R_GPT_POEG0_POEGG_NFEN_Pos (29UL) /*!< NFEN (Bit 29) */ + #define R_GPT_POEG0_POEGG_NFEN_Msk (0x20000000UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_INV_Pos (28UL) /*!< INV (Bit 28) */ + #define R_GPT_POEG0_POEGG_INV_Msk (0x10000000UL) /*!< INV (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_ST_Pos (16UL) /*!< ST (Bit 16) */ + #define R_GPT_POEG0_POEGG_ST_Msk (0x10000UL) /*!< ST (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_CDRE_Pos (8UL) /*!< CDRE (Bit 8) */ + #define R_GPT_POEG0_POEGG_CDRE_Msk (0x100UL) /*!< CDRE (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_OSTPE_Pos (6UL) /*!< OSTPE (Bit 6) */ + #define R_GPT_POEG0_POEGG_OSTPE_Msk (0x40UL) /*!< OSTPE (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_IOCE_Pos (5UL) /*!< IOCE (Bit 5) */ + #define R_GPT_POEG0_POEGG_IOCE_Msk (0x20UL) /*!< IOCE (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_PIDE_Pos (4UL) /*!< PIDE (Bit 4) */ + #define R_GPT_POEG0_POEGG_PIDE_Msk (0x10UL) /*!< PIDE (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_SSF_Pos (3UL) /*!< SSF (Bit 3) */ + #define R_GPT_POEG0_POEGG_SSF_Msk (0x8UL) /*!< SSF (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_OSTPF_Pos (2UL) /*!< OSTPF (Bit 2) */ + #define R_GPT_POEG0_POEGG_OSTPF_Msk (0x4UL) /*!< OSTPF (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_IOCF_Pos (1UL) /*!< IOCF (Bit 1) */ + #define R_GPT_POEG0_POEGG_IOCF_Msk (0x2UL) /*!< IOCF (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_POEGG_PIDF_Pos (0UL) /*!< PIDF (Bit 0) */ + #define R_GPT_POEG0_POEGG_PIDF_Msk (0x1UL) /*!< PIDF (Bitfield-Mask: 0x01) */ +/* ======================================================== GTONCWP ======================================================== */ + #define R_GPT_POEG0_GTONCWP_WP_Pos (0UL) /*!< WP (Bit 0) */ + #define R_GPT_POEG0_GTONCWP_WP_Msk (0x1UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_GTONCWP_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_GPT_POEG0_GTONCWP_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ +/* ======================================================== GTONCCR ======================================================== */ + #define R_GPT_POEG0_GTONCCR_NE_Pos (0UL) /*!< NE (Bit 0) */ + #define R_GPT_POEG0_GTONCCR_NE_Msk (0x1UL) /*!< NE (Bitfield-Mask: 0x01) */ + #define R_GPT_POEG0_GTONCCR_NFS_Pos (4UL) /*!< NFS (Bit 4) */ + #define R_GPT_POEG0_GTONCCR_NFS_Msk (0xf0UL) /*!< NFS (Bitfield-Mask: 0x0f) */ + #define R_GPT_POEG0_GTONCCR_NFV_Pos (8UL) /*!< NFV (Bit 8) */ + #define R_GPT_POEG0_GTONCCR_NFV_Msk (0x100UL) /*!< NFV (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_ICU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= IRQCR ========================================================= */ + #define R_ICU_IRQCR_FLTEN_Pos (7UL) /*!< FLTEN (Bit 7) */ + #define R_ICU_IRQCR_FLTEN_Msk (0x80UL) /*!< FLTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_IRQCR_FCLKSEL_Pos (4UL) /*!< FCLKSEL (Bit 4) */ + #define R_ICU_IRQCR_FCLKSEL_Msk (0x30UL) /*!< FCLKSEL (Bitfield-Mask: 0x03) */ + #define R_ICU_IRQCR_LOCOSEL_Pos (3UL) /*!< LOCOSEL (Bit 3) */ + #define R_ICU_IRQCR_LOCOSEL_Msk (0x8UL) /*!< LOCOSEL (Bitfield-Mask: 0x01) */ + #define R_ICU_IRQCR_IRQMD_Pos (0UL) /*!< IRQMD (Bit 0) */ + #define R_ICU_IRQCR_IRQMD_Msk (0x3UL) /*!< IRQMD (Bitfield-Mask: 0x03) */ +/* ========================================================= NMISR ========================================================= */ + #define R_ICU_NMISR_SPEST_Pos (12UL) /*!< SPEST (Bit 12) */ + #define R_ICU_NMISR_SPEST_Msk (0x1000UL) /*!< SPEST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_BUSMST_Pos (11UL) /*!< BUSMST (Bit 11) */ + #define R_ICU_NMISR_BUSMST_Msk (0x800UL) /*!< BUSMST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_BUSSST_Pos (10UL) /*!< BUSSST (Bit 10) */ + #define R_ICU_NMISR_BUSSST_Msk (0x400UL) /*!< BUSSST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_RECCST_Pos (9UL) /*!< RECCST (Bit 9) */ + #define R_ICU_NMISR_RECCST_Msk (0x200UL) /*!< RECCST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_RPEST_Pos (8UL) /*!< RPEST (Bit 8) */ + #define R_ICU_NMISR_RPEST_Msk (0x100UL) /*!< RPEST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_NMIST_Pos (7UL) /*!< NMIST (Bit 7) */ + #define R_ICU_NMISR_NMIST_Msk (0x80UL) /*!< NMIST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_OSTST_Pos (6UL) /*!< OSTST (Bit 6) */ + #define R_ICU_NMISR_OSTST_Msk (0x40UL) /*!< OSTST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_VBATTST_Pos (4UL) /*!< VBATTST (Bit 4) */ + #define R_ICU_NMISR_VBATTST_Msk (0x10UL) /*!< VBATTST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_LVD2ST_Pos (3UL) /*!< LVD2ST (Bit 3) */ + #define R_ICU_NMISR_LVD2ST_Msk (0x8UL) /*!< LVD2ST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_LVD1ST_Pos (2UL) /*!< LVD1ST (Bit 2) */ + #define R_ICU_NMISR_LVD1ST_Msk (0x4UL) /*!< LVD1ST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_WDTST_Pos (1UL) /*!< WDTST (Bit 1) */ + #define R_ICU_NMISR_WDTST_Msk (0x2UL) /*!< WDTST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_IWDTST_Pos (0UL) /*!< IWDTST (Bit 0) */ + #define R_ICU_NMISR_IWDTST_Msk (0x1UL) /*!< IWDTST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_TZFST_Pos (13UL) /*!< TZFST (Bit 13) */ + #define R_ICU_NMISR_TZFST_Msk (0x2000UL) /*!< TZFST (Bitfield-Mask: 0x01) */ + #define R_ICU_NMISR_CPEST_Pos (15UL) /*!< CPEST (Bit 15) */ + #define R_ICU_NMISR_CPEST_Msk (0x8000UL) /*!< CPEST (Bitfield-Mask: 0x01) */ +/* ========================================================= NMIER ========================================================= */ + #define R_ICU_NMIER_SPEEN_Pos (12UL) /*!< SPEEN (Bit 12) */ + #define R_ICU_NMIER_SPEEN_Msk (0x1000UL) /*!< SPEEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_BUSMEN_Pos (11UL) /*!< BUSMEN (Bit 11) */ + #define R_ICU_NMIER_BUSMEN_Msk (0x800UL) /*!< BUSMEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_BUSSEN_Pos (10UL) /*!< BUSSEN (Bit 10) */ + #define R_ICU_NMIER_BUSSEN_Msk (0x400UL) /*!< BUSSEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_RECCEN_Pos (9UL) /*!< RECCEN (Bit 9) */ + #define R_ICU_NMIER_RECCEN_Msk (0x200UL) /*!< RECCEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_RPEEN_Pos (8UL) /*!< RPEEN (Bit 8) */ + #define R_ICU_NMIER_RPEEN_Msk (0x100UL) /*!< RPEEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_NMIEN_Pos (7UL) /*!< NMIEN (Bit 7) */ + #define R_ICU_NMIER_NMIEN_Msk (0x80UL) /*!< NMIEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_OSTEN_Pos (6UL) /*!< OSTEN (Bit 6) */ + #define R_ICU_NMIER_OSTEN_Msk (0x40UL) /*!< OSTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_VBATTEN_Pos (4UL) /*!< VBATTEN (Bit 4) */ + #define R_ICU_NMIER_VBATTEN_Msk (0x10UL) /*!< VBATTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_LVD2EN_Pos (3UL) /*!< LVD2EN (Bit 3) */ + #define R_ICU_NMIER_LVD2EN_Msk (0x8UL) /*!< LVD2EN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_LVD1EN_Pos (2UL) /*!< LVD1EN (Bit 2) */ + #define R_ICU_NMIER_LVD1EN_Msk (0x4UL) /*!< LVD1EN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_WDTEN_Pos (1UL) /*!< WDTEN (Bit 1) */ + #define R_ICU_NMIER_WDTEN_Msk (0x2UL) /*!< WDTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_IWDTEN_Pos (0UL) /*!< IWDTEN (Bit 0) */ + #define R_ICU_NMIER_IWDTEN_Msk (0x1UL) /*!< IWDTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_TZFEN_Pos (13UL) /*!< TZFEN (Bit 13) */ + #define R_ICU_NMIER_TZFEN_Msk (0x2000UL) /*!< TZFEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMIER_CPEEN_Pos (15UL) /*!< CPEEN (Bit 15) */ + #define R_ICU_NMIER_CPEEN_Msk (0x8000UL) /*!< CPEEN (Bitfield-Mask: 0x01) */ +/* ======================================================== NMICLR ========================================================= */ + #define R_ICU_NMICLR_SPECLR_Pos (12UL) /*!< SPECLR (Bit 12) */ + #define R_ICU_NMICLR_SPECLR_Msk (0x1000UL) /*!< SPECLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_BUSMCLR_Pos (11UL) /*!< BUSMCLR (Bit 11) */ + #define R_ICU_NMICLR_BUSMCLR_Msk (0x800UL) /*!< BUSMCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_BUSSCLR_Pos (10UL) /*!< BUSSCLR (Bit 10) */ + #define R_ICU_NMICLR_BUSSCLR_Msk (0x400UL) /*!< BUSSCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_RECCCLR_Pos (9UL) /*!< RECCCLR (Bit 9) */ + #define R_ICU_NMICLR_RECCCLR_Msk (0x200UL) /*!< RECCCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_RPECLR_Pos (8UL) /*!< RPECLR (Bit 8) */ + #define R_ICU_NMICLR_RPECLR_Msk (0x100UL) /*!< RPECLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_NMICLR_Pos (7UL) /*!< NMICLR (Bit 7) */ + #define R_ICU_NMICLR_NMICLR_Msk (0x80UL) /*!< NMICLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_OSTCLR_Pos (6UL) /*!< OSTCLR (Bit 6) */ + #define R_ICU_NMICLR_OSTCLR_Msk (0x40UL) /*!< OSTCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_VBATTCLR_Pos (4UL) /*!< VBATTCLR (Bit 4) */ + #define R_ICU_NMICLR_VBATTCLR_Msk (0x10UL) /*!< VBATTCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_LVD2CLR_Pos (3UL) /*!< LVD2CLR (Bit 3) */ + #define R_ICU_NMICLR_LVD2CLR_Msk (0x8UL) /*!< LVD2CLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_LVD1CLR_Pos (2UL) /*!< LVD1CLR (Bit 2) */ + #define R_ICU_NMICLR_LVD1CLR_Msk (0x4UL) /*!< LVD1CLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_WDTCLR_Pos (1UL) /*!< WDTCLR (Bit 1) */ + #define R_ICU_NMICLR_WDTCLR_Msk (0x2UL) /*!< WDTCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_IWDTCLR_Pos (0UL) /*!< IWDTCLR (Bit 0) */ + #define R_ICU_NMICLR_IWDTCLR_Msk (0x1UL) /*!< IWDTCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_TZFCLR_Pos (13UL) /*!< TZFCLR (Bit 13) */ + #define R_ICU_NMICLR_TZFCLR_Msk (0x2000UL) /*!< TZFCLR (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICLR_CPECLR_Pos (15UL) /*!< CPECLR (Bit 15) */ + #define R_ICU_NMICLR_CPECLR_Msk (0x8000UL) /*!< CPECLR (Bitfield-Mask: 0x01) */ +/* ========================================================= NMICR ========================================================= */ + #define R_ICU_NMICR_NFLTEN_Pos (7UL) /*!< NFLTEN (Bit 7) */ + #define R_ICU_NMICR_NFLTEN_Msk (0x80UL) /*!< NFLTEN (Bitfield-Mask: 0x01) */ + #define R_ICU_NMICR_NFCLKSEL_Pos (4UL) /*!< NFCLKSEL (Bit 4) */ + #define R_ICU_NMICR_NFCLKSEL_Msk (0x30UL) /*!< NFCLKSEL (Bitfield-Mask: 0x03) */ + #define R_ICU_NMICR_NMIMD_Pos (0UL) /*!< NMIMD (Bit 0) */ + #define R_ICU_NMICR_NMIMD_Msk (0x1UL) /*!< NMIMD (Bitfield-Mask: 0x01) */ +/* ========================================================= IELSR ========================================================= */ + #define R_ICU_IELSR_DTCE_Pos (24UL) /*!< DTCE (Bit 24) */ + #define R_ICU_IELSR_DTCE_Msk (0x1000000UL) /*!< DTCE (Bitfield-Mask: 0x01) */ + #define R_ICU_IELSR_IR_Pos (16UL) /*!< IR (Bit 16) */ + #define R_ICU_IELSR_IR_Msk (0x10000UL) /*!< IR (Bitfield-Mask: 0x01) */ + #define R_ICU_IELSR_IELS_Pos (0UL) /*!< IELS (Bit 0) */ + #define R_ICU_IELSR_IELS_Msk (0x1ffUL) /*!< IELS (Bitfield-Mask: 0x1ff) */ +/* ========================================================= DELSR ========================================================= */ + #define R_ICU_DELSR_IR_Pos (16UL) /*!< IR (Bit 16) */ + #define R_ICU_DELSR_IR_Msk (0x10000UL) /*!< IR (Bitfield-Mask: 0x01) */ + #define R_ICU_DELSR_DELS_Pos (0UL) /*!< DELS (Bit 0) */ + #define R_ICU_DELSR_DELS_Msk (0x1ffUL) /*!< DELS (Bitfield-Mask: 0x1ff) */ +/* ======================================================== SELSR0 ========================================================= */ + #define R_ICU_SELSR0_SELS_Pos (0UL) /*!< SELS (Bit 0) */ + #define R_ICU_SELSR0_SELS_Msk (0x1ffUL) /*!< SELS (Bitfield-Mask: 0x1ff) */ +/* ========================================================= WUPEN ========================================================= */ + #define R_ICU_WUPEN_IIC0WUPEN_Pos (31UL) /*!< IIC0WUPEN (Bit 31) */ + #define R_ICU_WUPEN_IIC0WUPEN_Msk (0x80000000UL) /*!< IIC0WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_AGT1CBWUPEN_Pos (30UL) /*!< AGT1CBWUPEN (Bit 30) */ + #define R_ICU_WUPEN_AGT1CBWUPEN_Msk (0x40000000UL) /*!< AGT1CBWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_AGT1CAWUPEN_Pos (29UL) /*!< AGT1CAWUPEN (Bit 29) */ + #define R_ICU_WUPEN_AGT1CAWUPEN_Msk (0x20000000UL) /*!< AGT1CAWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_AGT1UDWUPEN_Pos (28UL) /*!< AGT1UDWUPEN (Bit 28) */ + #define R_ICU_WUPEN_AGT1UDWUPEN_Msk (0x10000000UL) /*!< AGT1UDWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_USBFSWUPEN_Pos (27UL) /*!< USBFSWUPEN (Bit 27) */ + #define R_ICU_WUPEN_USBFSWUPEN_Msk (0x8000000UL) /*!< USBFSWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_USBHSWUPEN_Pos (26UL) /*!< USBHSWUPEN (Bit 26) */ + #define R_ICU_WUPEN_USBHSWUPEN_Msk (0x4000000UL) /*!< USBHSWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_RTCPRDWUPEN_Pos (25UL) /*!< RTCPRDWUPEN (Bit 25) */ + #define R_ICU_WUPEN_RTCPRDWUPEN_Msk (0x2000000UL) /*!< RTCPRDWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_RTCALMWUPEN_Pos (24UL) /*!< RTCALMWUPEN (Bit 24) */ + #define R_ICU_WUPEN_RTCALMWUPEN_Msk (0x1000000UL) /*!< RTCALMWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_ACMPLP0WUPEN_Pos (23UL) /*!< ACMPLP0WUPEN (Bit 23) */ + #define R_ICU_WUPEN_ACMPLP0WUPEN_Msk (0x800000UL) /*!< ACMPLP0WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_ACMPHS0WUPEN_Pos (22UL) /*!< ACMPHS0WUPEN (Bit 22) */ + #define R_ICU_WUPEN_ACMPHS0WUPEN_Msk (0x400000UL) /*!< ACMPHS0WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_VBATTWUPEN_Pos (20UL) /*!< VBATTWUPEN (Bit 20) */ + #define R_ICU_WUPEN_VBATTWUPEN_Msk (0x100000UL) /*!< VBATTWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_LVD2WUPEN_Pos (19UL) /*!< LVD2WUPEN (Bit 19) */ + #define R_ICU_WUPEN_LVD2WUPEN_Msk (0x80000UL) /*!< LVD2WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_LVD1WUPEN_Pos (18UL) /*!< LVD1WUPEN (Bit 18) */ + #define R_ICU_WUPEN_LVD1WUPEN_Msk (0x40000UL) /*!< LVD1WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_KEYWUPEN_Pos (17UL) /*!< KEYWUPEN (Bit 17) */ + #define R_ICU_WUPEN_KEYWUPEN_Msk (0x20000UL) /*!< KEYWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_IWDTWUPEN_Pos (16UL) /*!< IWDTWUPEN (Bit 16) */ + #define R_ICU_WUPEN_IWDTWUPEN_Msk (0x10000UL) /*!< IWDTWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN_IRQWUPEN_Pos (0UL) /*!< IRQWUPEN (Bit 0) */ + #define R_ICU_WUPEN_IRQWUPEN_Msk (0x1UL) /*!< IRQWUPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== WUPEN1 ========================================================= */ + #define R_ICU_WUPEN1_AGT3UDWUPEN_Pos (0UL) /*!< AGT3UDWUPEN (Bit 0) */ + #define R_ICU_WUPEN1_AGT3UDWUPEN_Msk (0x1UL) /*!< AGT3UDWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN1_AGT3CAWUPEN_Pos (1UL) /*!< AGT3CAWUPEN (Bit 1) */ + #define R_ICU_WUPEN1_AGT3CAWUPEN_Msk (0x2UL) /*!< AGT3CAWUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN1_AGT3CBWUPEN_Pos (2UL) /*!< AGT3CBWUPEN (Bit 2) */ + #define R_ICU_WUPEN1_AGT3CBWUPEN_Msk (0x4UL) /*!< AGT3CBWUPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== WUPEN2 ========================================================= */ + #define R_ICU_WUPEN2_INTUR0WUPEN_Pos (0UL) /*!< INTUR0WUPEN (Bit 0) */ + #define R_ICU_WUPEN2_INTUR0WUPEN_Msk (0x1UL) /*!< INTUR0WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN2_INTURE0WUPEN_Pos (1UL) /*!< INTURE0WUPEN (Bit 1) */ + #define R_ICU_WUPEN2_INTURE0WUPEN_Msk (0x2UL) /*!< INTURE0WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN2_INTUR1WUPEN_Pos (2UL) /*!< INTUR1WUPEN (Bit 2) */ + #define R_ICU_WUPEN2_INTUR1WUPEN_Msk (0x4UL) /*!< INTUR1WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN2_INTURE1WUPEN_Pos (3UL) /*!< INTURE1WUPEN (Bit 3) */ + #define R_ICU_WUPEN2_INTURE1WUPEN_Msk (0x8UL) /*!< INTURE1WUPEN (Bitfield-Mask: 0x01) */ + #define R_ICU_WUPEN2_USBCCSWUPEN_Pos (4UL) /*!< USBCCSWUPEN (Bit 4) */ + #define R_ICU_WUPEN2_USBCCSWUPEN_Msk (0x10UL) /*!< USBCCSWUPEN (Bitfield-Mask: 0x01) */ +/* ========================================================= IELEN ========================================================= */ + #define R_ICU_IELEN_IELEN_Pos (1UL) /*!< IELEN (Bit 1) */ + #define R_ICU_IELEN_IELEN_Msk (0x2UL) /*!< IELEN (Bitfield-Mask: 0x01) */ + #define R_ICU_IELEN_RTCINTEN_Pos (0UL) /*!< RTCINTEN (Bit 0) */ + #define R_ICU_IELEN_RTCINTEN_Msk (0x1UL) /*!< RTCINTEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_IIC0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ICCR1 ========================================================= */ + #define R_IIC0_ICCR1_ICE_Pos (7UL) /*!< ICE (Bit 7) */ + #define R_IIC0_ICCR1_ICE_Msk (0x80UL) /*!< ICE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_IICRST_Pos (6UL) /*!< IICRST (Bit 6) */ + #define R_IIC0_ICCR1_IICRST_Msk (0x40UL) /*!< IICRST (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_CLO_Pos (5UL) /*!< CLO (Bit 5) */ + #define R_IIC0_ICCR1_CLO_Msk (0x20UL) /*!< CLO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SOWP_Pos (4UL) /*!< SOWP (Bit 4) */ + #define R_IIC0_ICCR1_SOWP_Msk (0x10UL) /*!< SOWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SCLO_Pos (3UL) /*!< SCLO (Bit 3) */ + #define R_IIC0_ICCR1_SCLO_Msk (0x8UL) /*!< SCLO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SDAO_Pos (2UL) /*!< SDAO (Bit 2) */ + #define R_IIC0_ICCR1_SDAO_Msk (0x4UL) /*!< SDAO (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SCLI_Pos (1UL) /*!< SCLI (Bit 1) */ + #define R_IIC0_ICCR1_SCLI_Msk (0x2UL) /*!< SCLI (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR1_SDAI_Pos (0UL) /*!< SDAI (Bit 0) */ + #define R_IIC0_ICCR1_SDAI_Msk (0x1UL) /*!< SDAI (Bitfield-Mask: 0x01) */ +/* ========================================================= ICCR2 ========================================================= */ + #define R_IIC0_ICCR2_BBSY_Pos (7UL) /*!< BBSY (Bit 7) */ + #define R_IIC0_ICCR2_BBSY_Msk (0x80UL) /*!< BBSY (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_MST_Pos (6UL) /*!< MST (Bit 6) */ + #define R_IIC0_ICCR2_MST_Msk (0x40UL) /*!< MST (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_TRS_Pos (5UL) /*!< TRS (Bit 5) */ + #define R_IIC0_ICCR2_TRS_Msk (0x20UL) /*!< TRS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_SP_Pos (3UL) /*!< SP (Bit 3) */ + #define R_IIC0_ICCR2_SP_Msk (0x8UL) /*!< SP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_RS_Pos (2UL) /*!< RS (Bit 2) */ + #define R_IIC0_ICCR2_RS_Msk (0x4UL) /*!< RS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICCR2_ST_Pos (1UL) /*!< ST (Bit 1) */ + #define R_IIC0_ICCR2_ST_Msk (0x2UL) /*!< ST (Bitfield-Mask: 0x01) */ +/* ========================================================= ICMR1 ========================================================= */ + #define R_IIC0_ICMR1_MTWP_Pos (7UL) /*!< MTWP (Bit 7) */ + #define R_IIC0_ICMR1_MTWP_Msk (0x80UL) /*!< MTWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR1_CKS_Pos (4UL) /*!< CKS (Bit 4) */ + #define R_IIC0_ICMR1_CKS_Msk (0x70UL) /*!< CKS (Bitfield-Mask: 0x07) */ + #define R_IIC0_ICMR1_BCWP_Pos (3UL) /*!< BCWP (Bit 3) */ + #define R_IIC0_ICMR1_BCWP_Msk (0x8UL) /*!< BCWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR1_BC_Pos (0UL) /*!< BC (Bit 0) */ + #define R_IIC0_ICMR1_BC_Msk (0x7UL) /*!< BC (Bitfield-Mask: 0x07) */ +/* ========================================================= ICMR2 ========================================================= */ + #define R_IIC0_ICMR2_DLCS_Pos (7UL) /*!< DLCS (Bit 7) */ + #define R_IIC0_ICMR2_DLCS_Msk (0x80UL) /*!< DLCS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_SDDL_Pos (4UL) /*!< SDDL (Bit 4) */ + #define R_IIC0_ICMR2_SDDL_Msk (0x70UL) /*!< SDDL (Bitfield-Mask: 0x07) */ + #define R_IIC0_ICMR2_TMOH_Pos (2UL) /*!< TMOH (Bit 2) */ + #define R_IIC0_ICMR2_TMOH_Msk (0x4UL) /*!< TMOH (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_TMOL_Pos (1UL) /*!< TMOL (Bit 1) */ + #define R_IIC0_ICMR2_TMOL_Msk (0x2UL) /*!< TMOL (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR2_TMOS_Pos (0UL) /*!< TMOS (Bit 0) */ + #define R_IIC0_ICMR2_TMOS_Msk (0x1UL) /*!< TMOS (Bitfield-Mask: 0x01) */ +/* ========================================================= ICMR3 ========================================================= */ + #define R_IIC0_ICMR3_SMBS_Pos (7UL) /*!< SMBS (Bit 7) */ + #define R_IIC0_ICMR3_SMBS_Msk (0x80UL) /*!< SMBS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_WAIT_Pos (6UL) /*!< WAIT (Bit 6) */ + #define R_IIC0_ICMR3_WAIT_Msk (0x40UL) /*!< WAIT (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_RDRFS_Pos (5UL) /*!< RDRFS (Bit 5) */ + #define R_IIC0_ICMR3_RDRFS_Msk (0x20UL) /*!< RDRFS (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_ACKWP_Pos (4UL) /*!< ACKWP (Bit 4) */ + #define R_IIC0_ICMR3_ACKWP_Msk (0x10UL) /*!< ACKWP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_ACKBT_Pos (3UL) /*!< ACKBT (Bit 3) */ + #define R_IIC0_ICMR3_ACKBT_Msk (0x8UL) /*!< ACKBT (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_ACKBR_Pos (2UL) /*!< ACKBR (Bit 2) */ + #define R_IIC0_ICMR3_ACKBR_Msk (0x4UL) /*!< ACKBR (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICMR3_NF_Pos (0UL) /*!< NF (Bit 0) */ + #define R_IIC0_ICMR3_NF_Msk (0x3UL) /*!< NF (Bitfield-Mask: 0x03) */ +/* ========================================================= ICFER ========================================================= */ + #define R_IIC0_ICFER_FMPE_Pos (7UL) /*!< FMPE (Bit 7) */ + #define R_IIC0_ICFER_FMPE_Msk (0x80UL) /*!< FMPE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_SCLE_Pos (6UL) /*!< SCLE (Bit 6) */ + #define R_IIC0_ICFER_SCLE_Msk (0x40UL) /*!< SCLE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NFE_Pos (5UL) /*!< NFE (Bit 5) */ + #define R_IIC0_ICFER_NFE_Msk (0x20UL) /*!< NFE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NACKE_Pos (4UL) /*!< NACKE (Bit 4) */ + #define R_IIC0_ICFER_NACKE_Msk (0x10UL) /*!< NACKE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_SALE_Pos (3UL) /*!< SALE (Bit 3) */ + #define R_IIC0_ICFER_SALE_Msk (0x8UL) /*!< SALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_NALE_Pos (2UL) /*!< NALE (Bit 2) */ + #define R_IIC0_ICFER_NALE_Msk (0x4UL) /*!< NALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_MALE_Pos (1UL) /*!< MALE (Bit 1) */ + #define R_IIC0_ICFER_MALE_Msk (0x2UL) /*!< MALE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICFER_TMOE_Pos (0UL) /*!< TMOE (Bit 0) */ + #define R_IIC0_ICFER_TMOE_Msk (0x1UL) /*!< TMOE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSER ========================================================= */ + #define R_IIC0_ICSER_HOAE_Pos (7UL) /*!< HOAE (Bit 7) */ + #define R_IIC0_ICSER_HOAE_Msk (0x80UL) /*!< HOAE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_DIDE_Pos (5UL) /*!< DIDE (Bit 5) */ + #define R_IIC0_ICSER_DIDE_Msk (0x20UL) /*!< DIDE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_GCAE_Pos (3UL) /*!< GCAE (Bit 3) */ + #define R_IIC0_ICSER_GCAE_Msk (0x8UL) /*!< GCAE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_SAR2E_Pos (2UL) /*!< SAR2E (Bit 2) */ + #define R_IIC0_ICSER_SAR2E_Msk (0x4UL) /*!< SAR2E (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_SAR1E_Pos (1UL) /*!< SAR1E (Bit 1) */ + #define R_IIC0_ICSER_SAR1E_Msk (0x2UL) /*!< SAR1E (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSER_SAR0E_Pos (0UL) /*!< SAR0E (Bit 0) */ + #define R_IIC0_ICSER_SAR0E_Msk (0x1UL) /*!< SAR0E (Bitfield-Mask: 0x01) */ +/* ========================================================= ICIER ========================================================= */ + #define R_IIC0_ICIER_TIE_Pos (7UL) /*!< TIE (Bit 7) */ + #define R_IIC0_ICIER_TIE_Msk (0x80UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_TEIE_Pos (6UL) /*!< TEIE (Bit 6) */ + #define R_IIC0_ICIER_TEIE_Msk (0x40UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_RIE_Pos (5UL) /*!< RIE (Bit 5) */ + #define R_IIC0_ICIER_RIE_Msk (0x20UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_NAKIE_Pos (4UL) /*!< NAKIE (Bit 4) */ + #define R_IIC0_ICIER_NAKIE_Msk (0x10UL) /*!< NAKIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_SPIE_Pos (3UL) /*!< SPIE (Bit 3) */ + #define R_IIC0_ICIER_SPIE_Msk (0x8UL) /*!< SPIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_STIE_Pos (2UL) /*!< STIE (Bit 2) */ + #define R_IIC0_ICIER_STIE_Msk (0x4UL) /*!< STIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_ALIE_Pos (1UL) /*!< ALIE (Bit 1) */ + #define R_IIC0_ICIER_ALIE_Msk (0x2UL) /*!< ALIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICIER_TMOIE_Pos (0UL) /*!< TMOIE (Bit 0) */ + #define R_IIC0_ICIER_TMOIE_Msk (0x1UL) /*!< TMOIE (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR1 ========================================================= */ + #define R_IIC0_ICSR1_HOA_Pos (7UL) /*!< HOA (Bit 7) */ + #define R_IIC0_ICSR1_HOA_Msk (0x80UL) /*!< HOA (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_DID_Pos (5UL) /*!< DID (Bit 5) */ + #define R_IIC0_ICSR1_DID_Msk (0x20UL) /*!< DID (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_GCA_Pos (3UL) /*!< GCA (Bit 3) */ + #define R_IIC0_ICSR1_GCA_Msk (0x8UL) /*!< GCA (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_AAS2_Pos (2UL) /*!< AAS2 (Bit 2) */ + #define R_IIC0_ICSR1_AAS2_Msk (0x4UL) /*!< AAS2 (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_AAS1_Pos (1UL) /*!< AAS1 (Bit 1) */ + #define R_IIC0_ICSR1_AAS1_Msk (0x2UL) /*!< AAS1 (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR1_AAS0_Pos (0UL) /*!< AAS0 (Bit 0) */ + #define R_IIC0_ICSR1_AAS0_Msk (0x1UL) /*!< AAS0 (Bitfield-Mask: 0x01) */ +/* ========================================================= ICSR2 ========================================================= */ + #define R_IIC0_ICSR2_TDRE_Pos (7UL) /*!< TDRE (Bit 7) */ + #define R_IIC0_ICSR2_TDRE_Msk (0x80UL) /*!< TDRE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_TEND_Pos (6UL) /*!< TEND (Bit 6) */ + #define R_IIC0_ICSR2_TEND_Msk (0x40UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_RDRF_Pos (5UL) /*!< RDRF (Bit 5) */ + #define R_IIC0_ICSR2_RDRF_Msk (0x20UL) /*!< RDRF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_NACKF_Pos (4UL) /*!< NACKF (Bit 4) */ + #define R_IIC0_ICSR2_NACKF_Msk (0x10UL) /*!< NACKF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_STOP_Pos (3UL) /*!< STOP (Bit 3) */ + #define R_IIC0_ICSR2_STOP_Msk (0x8UL) /*!< STOP (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_START_Pos (2UL) /*!< START (Bit 2) */ + #define R_IIC0_ICSR2_START_Msk (0x4UL) /*!< START (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_AL_Pos (1UL) /*!< AL (Bit 1) */ + #define R_IIC0_ICSR2_AL_Msk (0x2UL) /*!< AL (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICSR2_TMOF_Pos (0UL) /*!< TMOF (Bit 0) */ + #define R_IIC0_ICSR2_TMOF_Msk (0x1UL) /*!< TMOF (Bitfield-Mask: 0x01) */ +/* ========================================================= ICBRL ========================================================= */ + #define R_IIC0_ICBRL_BRL_Pos (0UL) /*!< BRL (Bit 0) */ + #define R_IIC0_ICBRL_BRL_Msk (0x1fUL) /*!< BRL (Bitfield-Mask: 0x1f) */ +/* ========================================================= ICBRH ========================================================= */ + #define R_IIC0_ICBRH_BRH_Pos (0UL) /*!< BRH (Bit 0) */ + #define R_IIC0_ICBRH_BRH_Msk (0x1fUL) /*!< BRH (Bitfield-Mask: 0x1f) */ +/* ========================================================= ICDRT ========================================================= */ + #define R_IIC0_ICDRT_ICDRT_Pos (0UL) /*!< ICDRT (Bit 0) */ + #define R_IIC0_ICDRT_ICDRT_Msk (0xffUL) /*!< ICDRT (Bitfield-Mask: 0xff) */ +/* ========================================================= ICDRR ========================================================= */ + #define R_IIC0_ICDRR_ICDRR_Pos (0UL) /*!< ICDRR (Bit 0) */ + #define R_IIC0_ICDRR_ICDRR_Msk (0xffUL) /*!< ICDRR (Bitfield-Mask: 0xff) */ +/* ========================================================= ICWUR ========================================================= */ + #define R_IIC0_ICWUR_WUE_Pos (7UL) /*!< WUE (Bit 7) */ + #define R_IIC0_ICWUR_WUE_Msk (0x80UL) /*!< WUE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR_WUIE_Pos (6UL) /*!< WUIE (Bit 6) */ + #define R_IIC0_ICWUR_WUIE_Msk (0x40UL) /*!< WUIE (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR_WUF_Pos (5UL) /*!< WUF (Bit 5) */ + #define R_IIC0_ICWUR_WUF_Msk (0x20UL) /*!< WUF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR_WUACK_Pos (4UL) /*!< WUACK (Bit 4) */ + #define R_IIC0_ICWUR_WUACK_Msk (0x10UL) /*!< WUACK (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR_WUAFA_Pos (0UL) /*!< WUAFA (Bit 0) */ + #define R_IIC0_ICWUR_WUAFA_Msk (0x1UL) /*!< WUAFA (Bitfield-Mask: 0x01) */ +/* ======================================================== ICWUR2 ========================================================= */ + #define R_IIC0_ICWUR2_WUSYF_Pos (2UL) /*!< WUSYF (Bit 2) */ + #define R_IIC0_ICWUR2_WUSYF_Msk (0x4UL) /*!< WUSYF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR2_WUASYF_Pos (1UL) /*!< WUASYF (Bit 1) */ + #define R_IIC0_ICWUR2_WUASYF_Msk (0x2UL) /*!< WUASYF (Bitfield-Mask: 0x01) */ + #define R_IIC0_ICWUR2_WUSEN_Pos (0UL) /*!< WUSEN (Bit 0) */ + #define R_IIC0_ICWUR2_WUSEN_Msk (0x1UL) /*!< WUSEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_IWDT ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== IWDTRR ========================================================= */ + #define R_IWDT_IWDTRR_IWDTRR_Pos (0UL) /*!< IWDTRR (Bit 0) */ + #define R_IWDT_IWDTRR_IWDTRR_Msk (0xffUL) /*!< IWDTRR (Bitfield-Mask: 0xff) */ +/* ======================================================== IWDTCR ========================================================= */ + #define R_IWDT_IWDTCR_RPSS_Pos (12UL) /*!< RPSS (Bit 12) */ + #define R_IWDT_IWDTCR_RPSS_Msk (0x3000UL) /*!< RPSS (Bitfield-Mask: 0x03) */ + #define R_IWDT_IWDTCR_RPES_Pos (8UL) /*!< RPES (Bit 8) */ + #define R_IWDT_IWDTCR_RPES_Msk (0x300UL) /*!< RPES (Bitfield-Mask: 0x03) */ + #define R_IWDT_IWDTCR_CKS_Pos (4UL) /*!< CKS (Bit 4) */ + #define R_IWDT_IWDTCR_CKS_Msk (0xf0UL) /*!< CKS (Bitfield-Mask: 0x0f) */ + #define R_IWDT_IWDTCR_TOPS_Pos (0UL) /*!< TOPS (Bit 0) */ + #define R_IWDT_IWDTCR_TOPS_Msk (0x3UL) /*!< TOPS (Bitfield-Mask: 0x03) */ +/* ======================================================== IWDTSR ========================================================= */ + #define R_IWDT_IWDTSR_REFEF_Pos (15UL) /*!< REFEF (Bit 15) */ + #define R_IWDT_IWDTSR_REFEF_Msk (0x8000UL) /*!< REFEF (Bitfield-Mask: 0x01) */ + #define R_IWDT_IWDTSR_UNDFF_Pos (14UL) /*!< UNDFF (Bit 14) */ + #define R_IWDT_IWDTSR_UNDFF_Msk (0x4000UL) /*!< UNDFF (Bitfield-Mask: 0x01) */ + #define R_IWDT_IWDTSR_CNTVAL_Pos (0UL) /*!< CNTVAL (Bit 0) */ + #define R_IWDT_IWDTSR_CNTVAL_Msk (0x3fffUL) /*!< CNTVAL (Bitfield-Mask: 0x3fff) */ +/* ======================================================== IWDTRCR ======================================================== */ + #define R_IWDT_IWDTRCR_RSTIRQS_Pos (7UL) /*!< RSTIRQS (Bit 7) */ + #define R_IWDT_IWDTRCR_RSTIRQS_Msk (0x80UL) /*!< RSTIRQS (Bitfield-Mask: 0x01) */ +/* ======================================================= IWDTCSTPR ======================================================= */ + #define R_IWDT_IWDTCSTPR_SLCSTP_Pos (7UL) /*!< SLCSTP (Bit 7) */ + #define R_IWDT_IWDTCSTPR_SLCSTP_Msk (0x80UL) /*!< SLCSTP (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_KINT ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= KRCTL ========================================================= */ + #define R_KINT_KRCTL_KRMD_Pos (7UL) /*!< KRMD (Bit 7) */ + #define R_KINT_KRCTL_KRMD_Msk (0x80UL) /*!< KRMD (Bitfield-Mask: 0x01) */ + #define R_KINT_KRCTL_KREG_Pos (0UL) /*!< KREG (Bit 0) */ + #define R_KINT_KRCTL_KREG_Msk (0x1UL) /*!< KREG (Bitfield-Mask: 0x01) */ +/* ========================================================== KRF ========================================================== */ + #define R_KINT_KRF_KRF7_Pos (7UL) /*!< KRF7 (Bit 7) */ + #define R_KINT_KRF_KRF7_Msk (0x80UL) /*!< KRF7 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF6_Pos (6UL) /*!< KRF6 (Bit 6) */ + #define R_KINT_KRF_KRF6_Msk (0x40UL) /*!< KRF6 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF5_Pos (5UL) /*!< KRF5 (Bit 5) */ + #define R_KINT_KRF_KRF5_Msk (0x20UL) /*!< KRF5 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF4_Pos (4UL) /*!< KRF4 (Bit 4) */ + #define R_KINT_KRF_KRF4_Msk (0x10UL) /*!< KRF4 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF3_Pos (3UL) /*!< KRF3 (Bit 3) */ + #define R_KINT_KRF_KRF3_Msk (0x8UL) /*!< KRF3 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF2_Pos (2UL) /*!< KRF2 (Bit 2) */ + #define R_KINT_KRF_KRF2_Msk (0x4UL) /*!< KRF2 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF1_Pos (1UL) /*!< KRF1 (Bit 1) */ + #define R_KINT_KRF_KRF1_Msk (0x2UL) /*!< KRF1 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRF_KRF0_Pos (0UL) /*!< KRF0 (Bit 0) */ + #define R_KINT_KRF_KRF0_Msk (0x1UL) /*!< KRF0 (Bitfield-Mask: 0x01) */ +/* ========================================================== KRM ========================================================== */ + #define R_KINT_KRM_KRM7_Pos (7UL) /*!< KRM7 (Bit 7) */ + #define R_KINT_KRM_KRM7_Msk (0x80UL) /*!< KRM7 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM6_Pos (6UL) /*!< KRM6 (Bit 6) */ + #define R_KINT_KRM_KRM6_Msk (0x40UL) /*!< KRM6 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM5_Pos (5UL) /*!< KRM5 (Bit 5) */ + #define R_KINT_KRM_KRM5_Msk (0x20UL) /*!< KRM5 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM4_Pos (4UL) /*!< KRM4 (Bit 4) */ + #define R_KINT_KRM_KRM4_Msk (0x10UL) /*!< KRM4 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM3_Pos (3UL) /*!< KRM3 (Bit 3) */ + #define R_KINT_KRM_KRM3_Msk (0x8UL) /*!< KRM3 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM2_Pos (2UL) /*!< KRM2 (Bit 2) */ + #define R_KINT_KRM_KRM2_Msk (0x4UL) /*!< KRM2 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM1_Pos (1UL) /*!< KRM1 (Bit 1) */ + #define R_KINT_KRM_KRM1_Msk (0x2UL) /*!< KRM1 (Bitfield-Mask: 0x01) */ + #define R_KINT_KRM_KRM0_Pos (0UL) /*!< KRM0 (Bit 0) */ + #define R_KINT_KRM_KRM0_Msk (0x1UL) /*!< KRM0 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MMF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= MMSFR ========================================================= */ + #define R_MMF_MMSFR_KEY_Pos (24UL) /*!< KEY (Bit 24) */ + #define R_MMF_MMSFR_KEY_Msk (0xff000000UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MMF_MMSFR_MEMMIRADDR_Pos (7UL) /*!< MEMMIRADDR (Bit 7) */ + #define R_MMF_MMSFR_MEMMIRADDR_Msk (0x7fff80UL) /*!< MEMMIRADDR (Bitfield-Mask: 0xffff) */ +/* ========================================================= MMEN ========================================================== */ + #define R_MMF_MMEN_KEY_Pos (24UL) /*!< KEY (Bit 24) */ + #define R_MMF_MMEN_KEY_Msk (0xff000000UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MMF_MMEN_EN_Pos (0UL) /*!< EN (Bit 0) */ + #define R_MMF_MMEN_EN_Msk (0x1UL) /*!< EN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_MMPU ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SMPU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SMPUCTL ======================================================== */ + #define R_MPU_SMPU_SMPUCTL_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_SMPU_SMPUCTL_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_SMPU_SMPUCTL_PROTECT_Pos (1UL) /*!< PROTECT (Bit 1) */ + #define R_MPU_SMPU_SMPUCTL_PROTECT_Msk (0x2UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ + #define R_MPU_SMPU_SMPUCTL_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_MPU_SMPU_SMPUCTL_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_SPMON ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_MSTP ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== MSTPCRA ======================================================== */ + #define R_MSTP_MSTPCRA_MSTPA_Pos (0UL) /*!< MSTPA (Bit 0) */ + #define R_MSTP_MSTPCRA_MSTPA_Msk (0x1UL) /*!< MSTPA (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRB ======================================================== */ + #define R_MSTP_MSTPCRB_MSTPB_Pos (0UL) /*!< MSTPB (Bit 0) */ + #define R_MSTP_MSTPCRB_MSTPB_Msk (0x1UL) /*!< MSTPB (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRC ======================================================== */ + #define R_MSTP_MSTPCRC_MSTPC_Pos (0UL) /*!< MSTPC (Bit 0) */ + #define R_MSTP_MSTPCRC_MSTPC_Msk (0x1UL) /*!< MSTPC (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRD ======================================================== */ + #define R_MSTP_MSTPCRD_MSTPD_Pos (0UL) /*!< MSTPD (Bit 0) */ + #define R_MSTP_MSTPCRD_MSTPD_Msk (0x1UL) /*!< MSTPD (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRE ======================================================== */ + #define R_MSTP_MSTPCRE_MSTPE_Pos (0UL) /*!< MSTPE (Bit 0) */ + #define R_MSTP_MSTPCRE_MSTPE_Msk (0x1UL) /*!< MSTPE (Bitfield-Mask: 0x01) */ +/* ======================================================= LSMRWDIS ======================================================== */ + #define R_MSTP_LSMRWDIS_RTCRWDIS_Pos (0UL) /*!< RTCRWDIS (Bit 0) */ + #define R_MSTP_LSMRWDIS_RTCRWDIS_Msk (0x1UL) /*!< RTCRWDIS (Bitfield-Mask: 0x01) */ + #define R_MSTP_LSMRWDIS_WDTDIS_Pos (1UL) /*!< WDTDIS (Bit 1) */ + #define R_MSTP_LSMRWDIS_WDTDIS_Msk (0x2UL) /*!< WDTDIS (Bitfield-Mask: 0x01) */ + #define R_MSTP_LSMRWDIS_IWDTIDS_Pos (2UL) /*!< IWDTIDS (Bit 2) */ + #define R_MSTP_LSMRWDIS_IWDTIDS_Msk (0x4UL) /*!< IWDTIDS (Bitfield-Mask: 0x01) */ + #define R_MSTP_LSMRWDIS_WREN_Pos (7UL) /*!< WREN (Bit 7) */ + #define R_MSTP_LSMRWDIS_WREN_Msk (0x80UL) /*!< WREN (Bitfield-Mask: 0x01) */ + #define R_MSTP_LSMRWDIS_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_MSTP_LSMRWDIS_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_OPAMP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= AMPMC ========================================================= */ + #define R_OPAMP_AMPMC_AMPSP_Pos (7UL) /*!< AMPSP (Bit 7) */ + #define R_OPAMP_AMPMC_AMPSP_Msk (0x80UL) /*!< AMPSP (Bitfield-Mask: 0x01) */ + #define R_OPAMP_AMPMC_AMPPC_Pos (0UL) /*!< AMPPC (Bit 0) */ + #define R_OPAMP_AMPMC_AMPPC_Msk (0x1UL) /*!< AMPPC (Bitfield-Mask: 0x01) */ +/* ======================================================== AMPTRM ========================================================= */ + #define R_OPAMP_AMPTRM_AMPTRM_Pos (0UL) /*!< AMPTRM (Bit 0) */ + #define R_OPAMP_AMPTRM_AMPTRM_Msk (0x3UL) /*!< AMPTRM (Bitfield-Mask: 0x03) */ +/* ======================================================== AMPTRS ========================================================= */ + #define R_OPAMP_AMPTRS_AMPTRS_Pos (0UL) /*!< AMPTRS (Bit 0) */ + #define R_OPAMP_AMPTRS_AMPTRS_Msk (0x3UL) /*!< AMPTRS (Bitfield-Mask: 0x03) */ +/* ========================================================= AMPC ========================================================== */ + #define R_OPAMP_AMPC_IREFE_Pos (7UL) /*!< IREFE (Bit 7) */ + #define R_OPAMP_AMPC_IREFE_Msk (0x80UL) /*!< IREFE (Bitfield-Mask: 0x01) */ + #define R_OPAMP_AMPC_AMPE_Pos (0UL) /*!< AMPE (Bit 0) */ + #define R_OPAMP_AMPC_AMPE_Msk (0x1UL) /*!< AMPE (Bitfield-Mask: 0x01) */ +/* ======================================================== AMPMON ========================================================= */ + #define R_OPAMP_AMPMON_AMPMON_Pos (0UL) /*!< AMPMON (Bit 0) */ + #define R_OPAMP_AMPMON_AMPMON_Msk (0x1UL) /*!< AMPMON (Bitfield-Mask: 0x01) */ +/* ======================================================== AMPCPC ========================================================= */ + #define R_OPAMP_AMPCPC_PUMPEN_Pos (0UL) /*!< PUMPEN (Bit 0) */ + #define R_OPAMP_AMPCPC_PUMPEN_Msk (0x1UL) /*!< PUMPEN (Bitfield-Mask: 0x01) */ +/* ======================================================== AMPUOTE ======================================================== */ + #define R_OPAMP_AMPUOTE_AMPTE_Pos (0UL) /*!< AMPTE (Bit 0) */ + #define R_OPAMP_AMPUOTE_AMPTE_Msk (0x1UL) /*!< AMPTE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_PORT0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== PCNTR1 ========================================================= */ + #define R_PORT0_PCNTR1_PODR_Pos (16UL) /*!< PODR (Bit 16) */ + #define R_PORT0_PCNTR1_PODR_Msk (0xffff0000UL) /*!< PODR (Bitfield-Mask: 0xffff) */ + #define R_PORT0_PCNTR1_PDR_Pos (0UL) /*!< PDR (Bit 0) */ + #define R_PORT0_PCNTR1_PDR_Msk (0xffffUL) /*!< PDR (Bitfield-Mask: 0xffff) */ +/* ========================================================= PODR ========================================================== */ + #define R_PORT0_PODR_PODR_Pos (0UL) /*!< PODR (Bit 0) */ + #define R_PORT0_PODR_PODR_Msk (0x1UL) /*!< PODR (Bitfield-Mask: 0x01) */ +/* ========================================================== PDR ========================================================== */ + #define R_PORT0_PDR_PDR_Pos (0UL) /*!< PDR (Bit 0) */ + #define R_PORT0_PDR_PDR_Msk (0x1UL) /*!< PDR (Bitfield-Mask: 0x01) */ +/* ======================================================== PCNTR2 ========================================================= */ + #define R_PORT0_PCNTR2_EIDR_Pos (16UL) /*!< EIDR (Bit 16) */ + #define R_PORT0_PCNTR2_EIDR_Msk (0xffff0000UL) /*!< EIDR (Bitfield-Mask: 0xffff) */ + #define R_PORT0_PCNTR2_PIDR_Pos (0UL) /*!< PIDR (Bit 0) */ + #define R_PORT0_PCNTR2_PIDR_Msk (0xffffUL) /*!< PIDR (Bitfield-Mask: 0xffff) */ +/* ========================================================= EIDR ========================================================== */ + #define R_PORT0_EIDR_EIDR_Pos (0UL) /*!< EIDR (Bit 0) */ + #define R_PORT0_EIDR_EIDR_Msk (0x1UL) /*!< EIDR (Bitfield-Mask: 0x01) */ +/* ========================================================= PIDR ========================================================== */ + #define R_PORT0_PIDR_PIDR_Pos (0UL) /*!< PIDR (Bit 0) */ + #define R_PORT0_PIDR_PIDR_Msk (0x1UL) /*!< PIDR (Bitfield-Mask: 0x01) */ +/* ======================================================== PCNTR3 ========================================================= */ + #define R_PORT0_PCNTR3_PORR_Pos (16UL) /*!< PORR (Bit 16) */ + #define R_PORT0_PCNTR3_PORR_Msk (0xffff0000UL) /*!< PORR (Bitfield-Mask: 0xffff) */ + #define R_PORT0_PCNTR3_POSR_Pos (0UL) /*!< POSR (Bit 0) */ + #define R_PORT0_PCNTR3_POSR_Msk (0xffffUL) /*!< POSR (Bitfield-Mask: 0xffff) */ +/* ========================================================= PORR ========================================================== */ + #define R_PORT0_PORR_PORR_Pos (0UL) /*!< PORR (Bit 0) */ + #define R_PORT0_PORR_PORR_Msk (0x1UL) /*!< PORR (Bitfield-Mask: 0x01) */ +/* ========================================================= POSR ========================================================== */ + #define R_PORT0_POSR_POSR_Pos (0UL) /*!< POSR (Bit 0) */ + #define R_PORT0_POSR_POSR_Msk (0x1UL) /*!< POSR (Bitfield-Mask: 0x01) */ +/* ======================================================== PCNTR4 ========================================================= */ + #define R_PORT0_PCNTR4_EORR_Pos (16UL) /*!< EORR (Bit 16) */ + #define R_PORT0_PCNTR4_EORR_Msk (0xffff0000UL) /*!< EORR (Bitfield-Mask: 0xffff) */ + #define R_PORT0_PCNTR4_EOSR_Pos (0UL) /*!< EOSR (Bit 0) */ + #define R_PORT0_PCNTR4_EOSR_Msk (0xffffUL) /*!< EOSR (Bitfield-Mask: 0xffff) */ +/* ========================================================= EORR ========================================================== */ + #define R_PORT0_EORR_EORR_Pos (0UL) /*!< EORR (Bit 0) */ + #define R_PORT0_EORR_EORR_Msk (0x1UL) /*!< EORR (Bitfield-Mask: 0x01) */ +/* ========================================================= EOSR ========================================================== */ + #define R_PORT0_EOSR_EOSR_Pos (0UL) /*!< EOSR (Bit 0) */ + #define R_PORT0_EOSR_EOSR_Msk (0x1UL) /*!< EOSR (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_PFS ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_PMISC ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== PFENET ========================================================= */ + #define R_PMISC_PFENET_PHYMODE1_Pos (5UL) /*!< PHYMODE1 (Bit 5) */ + #define R_PMISC_PFENET_PHYMODE1_Msk (0x20UL) /*!< PHYMODE1 (Bitfield-Mask: 0x01) */ + #define R_PMISC_PFENET_PHYMODE0_Pos (4UL) /*!< PHYMODE0 (Bit 4) */ + #define R_PMISC_PFENET_PHYMODE0_Msk (0x10UL) /*!< PHYMODE0 (Bitfield-Mask: 0x01) */ +/* ========================================================= PWPR ========================================================== */ + #define R_PMISC_PWPR_PFSWE_Pos (6UL) /*!< PFSWE (Bit 6) */ + #define R_PMISC_PWPR_PFSWE_Msk (0x40UL) /*!< PFSWE (Bitfield-Mask: 0x01) */ + #define R_PMISC_PWPR_B0WI_Pos (7UL) /*!< B0WI (Bit 7) */ + #define R_PMISC_PWPR_B0WI_Msk (0x80UL) /*!< B0WI (Bitfield-Mask: 0x01) */ +/* ========================================================= PWPRS ========================================================= */ + #define R_PMISC_PWPRS_PFSWE_Pos (6UL) /*!< PFSWE (Bit 6) */ + #define R_PMISC_PWPRS_PFSWE_Msk (0x40UL) /*!< PFSWE (Bitfield-Mask: 0x01) */ + #define R_PMISC_PWPRS_B0WI_Pos (7UL) /*!< B0WI (Bit 7) */ + #define R_PMISC_PWPRS_B0WI_Msk (0x80UL) /*!< B0WI (Bitfield-Mask: 0x01) */ +/* ======================================================== PRWCNTR ======================================================== */ + #define R_PMISC_PRWCNTR_WAIT_Pos (0UL) /*!< WAIT (Bit 0) */ + #define R_PMISC_PRWCNTR_WAIT_Msk (0x3UL) /*!< WAIT (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== R64CNT ========================================================= */ + #define R_RTC_R64CNT_R64OVF_Pos (7UL) /*!< R64OVF (Bit 7) */ + #define R_RTC_R64CNT_R64OVF_Msk (0x80UL) /*!< R64OVF (Bitfield-Mask: 0x01) */ + #define R_RTC_R64CNT_FHZ_Pos (0UL) /*!< FHZ (Bit 0) */ + #define R_RTC_R64CNT_FHZ_Msk (0x1UL) /*!< FHZ (Bitfield-Mask: 0x01) */ +/* ========================================================= BCNT0 ========================================================= */ + #define R_RTC_BCNT0_BCNT0_Pos (0UL) /*!< BCNT0 (Bit 0) */ + #define R_RTC_BCNT0_BCNT0_Msk (0xffUL) /*!< BCNT0 (Bitfield-Mask: 0xff) */ +/* ======================================================== RSECCNT ======================================================== */ + #define R_RTC_RSECCNT_SEC10_Pos (4UL) /*!< SEC10 (Bit 4) */ + #define R_RTC_RSECCNT_SEC10_Msk (0x70UL) /*!< SEC10 (Bitfield-Mask: 0x07) */ + #define R_RTC_RSECCNT_SEC1_Pos (0UL) /*!< SEC1 (Bit 0) */ + #define R_RTC_RSECCNT_SEC1_Msk (0xfUL) /*!< SEC1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT1 ========================================================= */ + #define R_RTC_BCNT1_BCNT1_Pos (0UL) /*!< BCNT1 (Bit 0) */ + #define R_RTC_BCNT1_BCNT1_Msk (0xffUL) /*!< BCNT1 (Bitfield-Mask: 0xff) */ +/* ======================================================== RMINCNT ======================================================== */ + #define R_RTC_RMINCNT_MIN10_Pos (4UL) /*!< MIN10 (Bit 4) */ + #define R_RTC_RMINCNT_MIN10_Msk (0x70UL) /*!< MIN10 (Bitfield-Mask: 0x07) */ + #define R_RTC_RMINCNT_MIN1_Pos (0UL) /*!< MIN1 (Bit 0) */ + #define R_RTC_RMINCNT_MIN1_Msk (0xfUL) /*!< MIN1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT2 ========================================================= */ + #define R_RTC_BCNT2_BCNT2_Pos (0UL) /*!< BCNT2 (Bit 0) */ + #define R_RTC_BCNT2_BCNT2_Msk (0xffUL) /*!< BCNT2 (Bitfield-Mask: 0xff) */ +/* ======================================================== RHRCNT ========================================================= */ + #define R_RTC_RHRCNT_PM_Pos (6UL) /*!< PM (Bit 6) */ + #define R_RTC_RHRCNT_PM_Msk (0x40UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_RTC_RHRCNT_HR10_Pos (4UL) /*!< HR10 (Bit 4) */ + #define R_RTC_RHRCNT_HR10_Msk (0x30UL) /*!< HR10 (Bitfield-Mask: 0x03) */ + #define R_RTC_RHRCNT_HR1_Pos (0UL) /*!< HR1 (Bit 0) */ + #define R_RTC_RHRCNT_HR1_Msk (0xfUL) /*!< HR1 (Bitfield-Mask: 0x0f) */ +/* ========================================================= BCNT3 ========================================================= */ + #define R_RTC_BCNT3_BCNT3_Pos (0UL) /*!< BCNT3 (Bit 0) */ + #define R_RTC_BCNT3_BCNT3_Msk (0xffUL) /*!< BCNT3 (Bitfield-Mask: 0xff) */ +/* ======================================================== RWKCNT ========================================================= */ + #define R_RTC_RWKCNT_DAYW_Pos (0UL) /*!< DAYW (Bit 0) */ + #define R_RTC_RWKCNT_DAYW_Msk (0x7UL) /*!< DAYW (Bitfield-Mask: 0x07) */ +/* ======================================================== RDAYCNT ======================================================== */ + #define R_RTC_RDAYCNT_DATE10_Pos (4UL) /*!< DATE10 (Bit 4) */ + #define R_RTC_RDAYCNT_DATE10_Msk (0x30UL) /*!< DATE10 (Bitfield-Mask: 0x03) */ + #define R_RTC_RDAYCNT_DATE1_Pos (0UL) /*!< DATE1 (Bit 0) */ + #define R_RTC_RDAYCNT_DATE1_Msk (0xfUL) /*!< DATE1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== RMONCNT ======================================================== */ + #define R_RTC_RMONCNT_MON10_Pos (4UL) /*!< MON10 (Bit 4) */ + #define R_RTC_RMONCNT_MON10_Msk (0x10UL) /*!< MON10 (Bitfield-Mask: 0x01) */ + #define R_RTC_RMONCNT_MON1_Pos (0UL) /*!< MON1 (Bit 0) */ + #define R_RTC_RMONCNT_MON1_Msk (0xfUL) /*!< MON1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== RYRCNT ========================================================= */ + #define R_RTC_RYRCNT_YR10_Pos (4UL) /*!< YR10 (Bit 4) */ + #define R_RTC_RYRCNT_YR10_Msk (0xf0UL) /*!< YR10 (Bitfield-Mask: 0x0f) */ + #define R_RTC_RYRCNT_YR1_Pos (0UL) /*!< YR1 (Bit 0) */ + #define R_RTC_RYRCNT_YR1_Msk (0xfUL) /*!< YR1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== BCNT0AR ======================================================== */ + #define R_RTC_BCNT0AR_BCNT0AR_Pos (0UL) /*!< BCNT0AR (Bit 0) */ + #define R_RTC_BCNT0AR_BCNT0AR_Msk (0xffUL) /*!< BCNT0AR (Bitfield-Mask: 0xff) */ +/* ======================================================== RSECAR ========================================================= */ + #define R_RTC_RSECAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RSECAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RSECAR_SEC10_Pos (4UL) /*!< SEC10 (Bit 4) */ + #define R_RTC_RSECAR_SEC10_Msk (0x70UL) /*!< SEC10 (Bitfield-Mask: 0x07) */ + #define R_RTC_RSECAR_SEC1_Pos (0UL) /*!< SEC1 (Bit 0) */ + #define R_RTC_RSECAR_SEC1_Msk (0xfUL) /*!< SEC1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== BCNT1AR ======================================================== */ + #define R_RTC_BCNT1AR_BCNT1AR_Pos (0UL) /*!< BCNT1AR (Bit 0) */ + #define R_RTC_BCNT1AR_BCNT1AR_Msk (0xffUL) /*!< BCNT1AR (Bitfield-Mask: 0xff) */ +/* ======================================================== RMINAR ========================================================= */ + #define R_RTC_RMINAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RMINAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RMINAR_MIN10_Pos (4UL) /*!< MIN10 (Bit 4) */ + #define R_RTC_RMINAR_MIN10_Msk (0x70UL) /*!< MIN10 (Bitfield-Mask: 0x07) */ + #define R_RTC_RMINAR_MIN1_Pos (0UL) /*!< MIN1 (Bit 0) */ + #define R_RTC_RMINAR_MIN1_Msk (0xfUL) /*!< MIN1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== BCNT2AR ======================================================== */ + #define R_RTC_BCNT2AR_BCNT2AR_Pos (0UL) /*!< BCNT2AR (Bit 0) */ + #define R_RTC_BCNT2AR_BCNT2AR_Msk (0xffUL) /*!< BCNT2AR (Bitfield-Mask: 0xff) */ +/* ========================================================= RHRAR ========================================================= */ + #define R_RTC_RHRAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RHRAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RHRAR_PM_Pos (6UL) /*!< PM (Bit 6) */ + #define R_RTC_RHRAR_PM_Msk (0x40UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_RTC_RHRAR_HR10_Pos (4UL) /*!< HR10 (Bit 4) */ + #define R_RTC_RHRAR_HR10_Msk (0x30UL) /*!< HR10 (Bitfield-Mask: 0x03) */ + #define R_RTC_RHRAR_HR1_Pos (0UL) /*!< HR1 (Bit 0) */ + #define R_RTC_RHRAR_HR1_Msk (0xfUL) /*!< HR1 (Bitfield-Mask: 0x0f) */ +/* ======================================================== BCNT3AR ======================================================== */ + #define R_RTC_BCNT3AR_BCNT3AR_Pos (0UL) /*!< BCNT3AR (Bit 0) */ + #define R_RTC_BCNT3AR_BCNT3AR_Msk (0xffUL) /*!< BCNT3AR (Bitfield-Mask: 0xff) */ +/* ========================================================= RWKAR ========================================================= */ + #define R_RTC_RWKAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RWKAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RWKAR_DAYW_Pos (0UL) /*!< DAYW (Bit 0) */ + #define R_RTC_RWKAR_DAYW_Msk (0x7UL) /*!< DAYW (Bitfield-Mask: 0x07) */ +/* ======================================================= BCNT0AER ======================================================== */ + #define R_RTC_BCNT0AER_ENB_Pos (0UL) /*!< ENB (Bit 0) */ + #define R_RTC_BCNT0AER_ENB_Msk (0xffUL) /*!< ENB (Bitfield-Mask: 0xff) */ +/* ======================================================== RDAYAR ========================================================= */ + #define R_RTC_RDAYAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RDAYAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RDAYAR_DATE10_Pos (4UL) /*!< DATE10 (Bit 4) */ + #define R_RTC_RDAYAR_DATE10_Msk (0x30UL) /*!< DATE10 (Bitfield-Mask: 0x03) */ + #define R_RTC_RDAYAR_DATE1_Pos (0UL) /*!< DATE1 (Bit 0) */ + #define R_RTC_RDAYAR_DATE1_Msk (0xfUL) /*!< DATE1 (Bitfield-Mask: 0x0f) */ +/* ======================================================= BCNT1AER ======================================================== */ + #define R_RTC_BCNT1AER_ENB_Pos (0UL) /*!< ENB (Bit 0) */ + #define R_RTC_BCNT1AER_ENB_Msk (0xffUL) /*!< ENB (Bitfield-Mask: 0xff) */ +/* ======================================================== RMONAR ========================================================= */ + #define R_RTC_RMONAR_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RMONAR_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ + #define R_RTC_RMONAR_MON10_Pos (4UL) /*!< MON10 (Bit 4) */ + #define R_RTC_RMONAR_MON10_Msk (0x10UL) /*!< MON10 (Bitfield-Mask: 0x01) */ + #define R_RTC_RMONAR_MON1_Pos (0UL) /*!< MON1 (Bit 0) */ + #define R_RTC_RMONAR_MON1_Msk (0xfUL) /*!< MON1 (Bitfield-Mask: 0x0f) */ +/* ======================================================= BCNT2AER ======================================================== */ + #define R_RTC_BCNT2AER_ENB_Pos (0UL) /*!< ENB (Bit 0) */ + #define R_RTC_BCNT2AER_ENB_Msk (0xffUL) /*!< ENB (Bitfield-Mask: 0xff) */ +/* ========================================================= RYRAR ========================================================= */ + #define R_RTC_RYRAR_YR10_Pos (4UL) /*!< YR10 (Bit 4) */ + #define R_RTC_RYRAR_YR10_Msk (0xf0UL) /*!< YR10 (Bitfield-Mask: 0x0f) */ + #define R_RTC_RYRAR_YR1_Pos (0UL) /*!< YR1 (Bit 0) */ + #define R_RTC_RYRAR_YR1_Msk (0xfUL) /*!< YR1 (Bitfield-Mask: 0x0f) */ +/* ======================================================= BCNT3AER ======================================================== */ + #define R_RTC_BCNT3AER_ENB_Pos (0UL) /*!< ENB (Bit 0) */ + #define R_RTC_BCNT3AER_ENB_Msk (0xffUL) /*!< ENB (Bitfield-Mask: 0xff) */ +/* ======================================================== RYRAREN ======================================================== */ + #define R_RTC_RYRAREN_ENB_Pos (7UL) /*!< ENB (Bit 7) */ + #define R_RTC_RYRAREN_ENB_Msk (0x80UL) /*!< ENB (Bitfield-Mask: 0x01) */ +/* ========================================================= RCR1 ========================================================== */ + #define R_RTC_RCR1_PES_Pos (4UL) /*!< PES (Bit 4) */ + #define R_RTC_RCR1_PES_Msk (0xf0UL) /*!< PES (Bitfield-Mask: 0x0f) */ + #define R_RTC_RCR1_RTCOS_Pos (3UL) /*!< RTCOS (Bit 3) */ + #define R_RTC_RCR1_RTCOS_Msk (0x8UL) /*!< RTCOS (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR1_PIE_Pos (2UL) /*!< PIE (Bit 2) */ + #define R_RTC_RCR1_PIE_Msk (0x4UL) /*!< PIE (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR1_CIE_Pos (1UL) /*!< CIE (Bit 1) */ + #define R_RTC_RCR1_CIE_Msk (0x2UL) /*!< CIE (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR1_AIE_Pos (0UL) /*!< AIE (Bit 0) */ + #define R_RTC_RCR1_AIE_Msk (0x1UL) /*!< AIE (Bitfield-Mask: 0x01) */ +/* ========================================================= RCR2 ========================================================== */ + #define R_RTC_RCR2_CNTMD_Pos (7UL) /*!< CNTMD (Bit 7) */ + #define R_RTC_RCR2_CNTMD_Msk (0x80UL) /*!< CNTMD (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_HR24_Pos (6UL) /*!< HR24 (Bit 6) */ + #define R_RTC_RCR2_HR24_Msk (0x40UL) /*!< HR24 (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_AADJP_Pos (5UL) /*!< AADJP (Bit 5) */ + #define R_RTC_RCR2_AADJP_Msk (0x20UL) /*!< AADJP (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_AADJE_Pos (4UL) /*!< AADJE (Bit 4) */ + #define R_RTC_RCR2_AADJE_Msk (0x10UL) /*!< AADJE (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_RTCOE_Pos (3UL) /*!< RTCOE (Bit 3) */ + #define R_RTC_RCR2_RTCOE_Msk (0x8UL) /*!< RTCOE (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_ADJ30_Pos (2UL) /*!< ADJ30 (Bit 2) */ + #define R_RTC_RCR2_ADJ30_Msk (0x4UL) /*!< ADJ30 (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_RESET_Pos (1UL) /*!< RESET (Bit 1) */ + #define R_RTC_RCR2_RESET_Msk (0x2UL) /*!< RESET (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR2_START_Pos (0UL) /*!< START (Bit 0) */ + #define R_RTC_RCR2_START_Msk (0x1UL) /*!< START (Bitfield-Mask: 0x01) */ +/* ========================================================= RCR4 ========================================================== */ + #define R_RTC_RCR4_RCKSEL_Pos (0UL) /*!< RCKSEL (Bit 0) */ + #define R_RTC_RCR4_RCKSEL_Msk (0x1UL) /*!< RCKSEL (Bitfield-Mask: 0x01) */ + #define R_RTC_RCR4_ROPSEL_Pos (7UL) /*!< ROPSEL (Bit 7) */ + #define R_RTC_RCR4_ROPSEL_Msk (0x80UL) /*!< ROPSEL (Bitfield-Mask: 0x01) */ +/* ========================================================= RFRH ========================================================== */ + #define R_RTC_RFRH_RFC16_Pos (0UL) /*!< RFC16 (Bit 0) */ + #define R_RTC_RFRH_RFC16_Msk (0x1UL) /*!< RFC16 (Bitfield-Mask: 0x01) */ +/* ========================================================= RFRL ========================================================== */ + #define R_RTC_RFRL_RFC_Pos (0UL) /*!< RFC (Bit 0) */ + #define R_RTC_RFRL_RFC_Msk (0xffffUL) /*!< RFC (Bitfield-Mask: 0xffff) */ +/* ========================================================= RADJ ========================================================== */ + #define R_RTC_RADJ_PMADJ_Pos (6UL) /*!< PMADJ (Bit 6) */ + #define R_RTC_RADJ_PMADJ_Msk (0xc0UL) /*!< PMADJ (Bitfield-Mask: 0x03) */ + #define R_RTC_RADJ_ADJ_Pos (0UL) /*!< ADJ (Bit 0) */ + #define R_RTC_RADJ_ADJ_Msk (0x3fUL) /*!< ADJ (Bitfield-Mask: 0x3f) */ +/* ========================================================= RADJ2 ========================================================= */ + #define R_RTC_RADJ2_FADJ_Pos (5UL) /*!< FADJ (Bit 5) */ + #define R_RTC_RADJ2_FADJ_Msk (0xffe0UL) /*!< FADJ (Bitfield-Mask: 0x7ff) */ + +/* =========================================================================================================================== */ +/* ================ R_SCI0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== SMR ========================================================== */ + #define R_SCI0_SMR_CM_Pos (7UL) /*!< CM (Bit 7) */ + #define R_SCI0_SMR_CM_Msk (0x80UL) /*!< CM (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_CHR_Pos (6UL) /*!< CHR (Bit 6) */ + #define R_SCI0_SMR_CHR_Msk (0x40UL) /*!< CHR (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_PE_Pos (5UL) /*!< PE (Bit 5) */ + #define R_SCI0_SMR_PE_Msk (0x20UL) /*!< PE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_PM_Pos (4UL) /*!< PM (Bit 4) */ + #define R_SCI0_SMR_PM_Msk (0x10UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_STOP_Pos (3UL) /*!< STOP (Bit 3) */ + #define R_SCI0_SMR_STOP_Msk (0x8UL) /*!< STOP (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_MP_Pos (2UL) /*!< MP (Bit 2) */ + #define R_SCI0_SMR_MP_Msk (0x4UL) /*!< MP (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_CKS_Pos (0UL) /*!< CKS (Bit 0) */ + #define R_SCI0_SMR_CKS_Msk (0x3UL) /*!< CKS (Bitfield-Mask: 0x03) */ +/* ======================================================= SMR_SMCI ======================================================== */ + #define R_SCI0_SMR_SMCI_GM_Pos (7UL) /*!< GM (Bit 7) */ + #define R_SCI0_SMR_SMCI_GM_Msk (0x80UL) /*!< GM (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_SMCI_BLK_Pos (6UL) /*!< BLK (Bit 6) */ + #define R_SCI0_SMR_SMCI_BLK_Msk (0x40UL) /*!< BLK (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_SMCI_PE_Pos (5UL) /*!< PE (Bit 5) */ + #define R_SCI0_SMR_SMCI_PE_Msk (0x20UL) /*!< PE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_SMCI_PM_Pos (4UL) /*!< PM (Bit 4) */ + #define R_SCI0_SMR_SMCI_PM_Msk (0x10UL) /*!< PM (Bitfield-Mask: 0x01) */ + #define R_SCI0_SMR_SMCI_BCP_Pos (2UL) /*!< BCP (Bit 2) */ + #define R_SCI0_SMR_SMCI_BCP_Msk (0xcUL) /*!< BCP (Bitfield-Mask: 0x03) */ + #define R_SCI0_SMR_SMCI_CKS_Pos (0UL) /*!< CKS (Bit 0) */ + #define R_SCI0_SMR_SMCI_CKS_Msk (0x3UL) /*!< CKS (Bitfield-Mask: 0x03) */ +/* ========================================================== BRR ========================================================== */ + #define R_SCI0_BRR_BRR_Pos (0UL) /*!< BRR (Bit 0) */ + #define R_SCI0_BRR_BRR_Msk (0xffUL) /*!< BRR (Bitfield-Mask: 0xff) */ +/* ========================================================== SCR ========================================================== */ + #define R_SCI0_SCR_TIE_Pos (7UL) /*!< TIE (Bit 7) */ + #define R_SCI0_SCR_TIE_Msk (0x80UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_RIE_Pos (6UL) /*!< RIE (Bit 6) */ + #define R_SCI0_SCR_RIE_Msk (0x40UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_TE_Pos (5UL) /*!< TE (Bit 5) */ + #define R_SCI0_SCR_TE_Msk (0x20UL) /*!< TE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_RE_Pos (4UL) /*!< RE (Bit 4) */ + #define R_SCI0_SCR_RE_Msk (0x10UL) /*!< RE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_MPIE_Pos (3UL) /*!< MPIE (Bit 3) */ + #define R_SCI0_SCR_MPIE_Msk (0x8UL) /*!< MPIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_TEIE_Pos (2UL) /*!< TEIE (Bit 2) */ + #define R_SCI0_SCR_TEIE_Msk (0x4UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_CKE_Pos (0UL) /*!< CKE (Bit 0) */ + #define R_SCI0_SCR_CKE_Msk (0x3UL) /*!< CKE (Bitfield-Mask: 0x03) */ +/* ======================================================= SCR_SMCI ======================================================== */ + #define R_SCI0_SCR_SMCI_TIE_Pos (7UL) /*!< TIE (Bit 7) */ + #define R_SCI0_SCR_SMCI_TIE_Msk (0x80UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_RIE_Pos (6UL) /*!< RIE (Bit 6) */ + #define R_SCI0_SCR_SMCI_RIE_Msk (0x40UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_TE_Pos (5UL) /*!< TE (Bit 5) */ + #define R_SCI0_SCR_SMCI_TE_Msk (0x20UL) /*!< TE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_RE_Pos (4UL) /*!< RE (Bit 4) */ + #define R_SCI0_SCR_SMCI_RE_Msk (0x10UL) /*!< RE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_MPIE_Pos (3UL) /*!< MPIE (Bit 3) */ + #define R_SCI0_SCR_SMCI_MPIE_Msk (0x8UL) /*!< MPIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_TEIE_Pos (2UL) /*!< TEIE (Bit 2) */ + #define R_SCI0_SCR_SMCI_TEIE_Msk (0x4UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCR_SMCI_CKE_Pos (0UL) /*!< CKE (Bit 0) */ + #define R_SCI0_SCR_SMCI_CKE_Msk (0x3UL) /*!< CKE (Bitfield-Mask: 0x03) */ +/* ========================================================== TDR ========================================================== */ + #define R_SCI0_TDR_TDR_Pos (0UL) /*!< TDR (Bit 0) */ + #define R_SCI0_TDR_TDR_Msk (0xffUL) /*!< TDR (Bitfield-Mask: 0xff) */ +/* ========================================================== SSR ========================================================== */ + #define R_SCI0_SSR_TDRE_Pos (7UL) /*!< TDRE (Bit 7) */ + #define R_SCI0_SSR_TDRE_Msk (0x80UL) /*!< TDRE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_RDRF_Pos (6UL) /*!< RDRF (Bit 6) */ + #define R_SCI0_SSR_RDRF_Msk (0x40UL) /*!< RDRF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_ORER_Pos (5UL) /*!< ORER (Bit 5) */ + #define R_SCI0_SSR_ORER_Msk (0x20UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FER_Pos (4UL) /*!< FER (Bit 4) */ + #define R_SCI0_SSR_FER_Msk (0x10UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_PER_Pos (3UL) /*!< PER (Bit 3) */ + #define R_SCI0_SSR_PER_Msk (0x8UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_TEND_Pos (2UL) /*!< TEND (Bit 2) */ + #define R_SCI0_SSR_TEND_Msk (0x4UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MPB_Pos (1UL) /*!< MPB (Bit 1) */ + #define R_SCI0_SSR_MPB_Msk (0x2UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MPBT_Pos (0UL) /*!< MPBT (Bit 0) */ + #define R_SCI0_SSR_MPBT_Msk (0x1UL) /*!< MPBT (Bitfield-Mask: 0x01) */ +/* ======================================================= SSR_FIFO ======================================================== */ + #define R_SCI0_SSR_FIFO_TDFE_Pos (7UL) /*!< TDFE (Bit 7) */ + #define R_SCI0_SSR_FIFO_TDFE_Msk (0x80UL) /*!< TDFE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_RDF_Pos (6UL) /*!< RDF (Bit 6) */ + #define R_SCI0_SSR_FIFO_RDF_Msk (0x40UL) /*!< RDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_ORER_Pos (5UL) /*!< ORER (Bit 5) */ + #define R_SCI0_SSR_FIFO_ORER_Msk (0x20UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_FER_Pos (4UL) /*!< FER (Bit 4) */ + #define R_SCI0_SSR_FIFO_FER_Msk (0x10UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_PER_Pos (3UL) /*!< PER (Bit 3) */ + #define R_SCI0_SSR_FIFO_PER_Msk (0x8UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_TEND_Pos (2UL) /*!< TEND (Bit 2) */ + #define R_SCI0_SSR_FIFO_TEND_Msk (0x4UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_FIFO_DR_Pos (0UL) /*!< DR (Bit 0) */ + #define R_SCI0_SSR_FIFO_DR_Msk (0x1UL) /*!< DR (Bitfield-Mask: 0x01) */ +/* ======================================================= SSR_MANC ======================================================== */ + #define R_SCI0_SSR_MANC_TDRE_Pos (7UL) /*!< TDRE (Bit 7) */ + #define R_SCI0_SSR_MANC_TDRE_Msk (0x80UL) /*!< TDRE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_RDRF_Pos (6UL) /*!< RDRF (Bit 6) */ + #define R_SCI0_SSR_MANC_RDRF_Msk (0x40UL) /*!< RDRF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_ORER_Pos (5UL) /*!< ORER (Bit 5) */ + #define R_SCI0_SSR_MANC_ORER_Msk (0x20UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_FER_Pos (4UL) /*!< FER (Bit 4) */ + #define R_SCI0_SSR_MANC_FER_Msk (0x10UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_PER_Pos (3UL) /*!< PER (Bit 3) */ + #define R_SCI0_SSR_MANC_PER_Msk (0x8UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_TEND_Pos (2UL) /*!< TEND (Bit 2) */ + #define R_SCI0_SSR_MANC_TEND_Msk (0x4UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_MPB_Pos (1UL) /*!< MPB (Bit 1) */ + #define R_SCI0_SSR_MANC_MPB_Msk (0x2UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_MANC_MER_Pos (0UL) /*!< MER (Bit 0) */ + #define R_SCI0_SSR_MANC_MER_Msk (0x1UL) /*!< MER (Bitfield-Mask: 0x01) */ +/* ======================================================= SSR_SMCI ======================================================== */ + #define R_SCI0_SSR_SMCI_TDRE_Pos (7UL) /*!< TDRE (Bit 7) */ + #define R_SCI0_SSR_SMCI_TDRE_Msk (0x80UL) /*!< TDRE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_RDRF_Pos (6UL) /*!< RDRF (Bit 6) */ + #define R_SCI0_SSR_SMCI_RDRF_Msk (0x40UL) /*!< RDRF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_ORER_Pos (5UL) /*!< ORER (Bit 5) */ + #define R_SCI0_SSR_SMCI_ORER_Msk (0x20UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_ERS_Pos (4UL) /*!< ERS (Bit 4) */ + #define R_SCI0_SSR_SMCI_ERS_Msk (0x10UL) /*!< ERS (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_PER_Pos (3UL) /*!< PER (Bit 3) */ + #define R_SCI0_SSR_SMCI_PER_Msk (0x8UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_TEND_Pos (2UL) /*!< TEND (Bit 2) */ + #define R_SCI0_SSR_SMCI_TEND_Msk (0x4UL) /*!< TEND (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_MPB_Pos (1UL) /*!< MPB (Bit 1) */ + #define R_SCI0_SSR_SMCI_MPB_Msk (0x2UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_SSR_SMCI_MPBT_Pos (0UL) /*!< MPBT (Bit 0) */ + #define R_SCI0_SSR_SMCI_MPBT_Msk (0x1UL) /*!< MPBT (Bitfield-Mask: 0x01) */ +/* ========================================================== RDR ========================================================== */ + #define R_SCI0_RDR_RDR_Pos (0UL) /*!< RDR (Bit 0) */ + #define R_SCI0_RDR_RDR_Msk (0xffUL) /*!< RDR (Bitfield-Mask: 0xff) */ +/* ========================================================= SCMR ========================================================== */ + #define R_SCI0_SCMR_BCP2_Pos (7UL) /*!< BCP2 (Bit 7) */ + #define R_SCI0_SCMR_BCP2_Msk (0x80UL) /*!< BCP2 (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCMR_CHR1_Pos (4UL) /*!< CHR1 (Bit 4) */ + #define R_SCI0_SCMR_CHR1_Msk (0x10UL) /*!< CHR1 (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCMR_SDIR_Pos (3UL) /*!< SDIR (Bit 3) */ + #define R_SCI0_SCMR_SDIR_Msk (0x8UL) /*!< SDIR (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCMR_SINV_Pos (2UL) /*!< SINV (Bit 2) */ + #define R_SCI0_SCMR_SINV_Msk (0x4UL) /*!< SINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_SCMR_SMIF_Pos (0UL) /*!< SMIF (Bit 0) */ + #define R_SCI0_SCMR_SMIF_Msk (0x1UL) /*!< SMIF (Bitfield-Mask: 0x01) */ +/* ========================================================= SEMR ========================================================== */ + #define R_SCI0_SEMR_RXDESEL_Pos (7UL) /*!< RXDESEL (Bit 7) */ + #define R_SCI0_SEMR_RXDESEL_Msk (0x80UL) /*!< RXDESEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_BGDM_Pos (6UL) /*!< BGDM (Bit 6) */ + #define R_SCI0_SEMR_BGDM_Msk (0x40UL) /*!< BGDM (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_NFEN_Pos (5UL) /*!< NFEN (Bit 5) */ + #define R_SCI0_SEMR_NFEN_Msk (0x20UL) /*!< NFEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_ABCS_Pos (4UL) /*!< ABCS (Bit 4) */ + #define R_SCI0_SEMR_ABCS_Msk (0x10UL) /*!< ABCS (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_ABCSE_Pos (3UL) /*!< ABCSE (Bit 3) */ + #define R_SCI0_SEMR_ABCSE_Msk (0x8UL) /*!< ABCSE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_BRME_Pos (2UL) /*!< BRME (Bit 2) */ + #define R_SCI0_SEMR_BRME_Msk (0x4UL) /*!< BRME (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_PADIS_Pos (1UL) /*!< PADIS (Bit 1) */ + #define R_SCI0_SEMR_PADIS_Msk (0x2UL) /*!< PADIS (Bitfield-Mask: 0x01) */ + #define R_SCI0_SEMR_ACS0_Pos (0UL) /*!< ACS0 (Bit 0) */ + #define R_SCI0_SEMR_ACS0_Msk (0x1UL) /*!< ACS0 (Bitfield-Mask: 0x01) */ +/* ========================================================= SNFR ========================================================== */ + #define R_SCI0_SNFR_NFCS_Pos (0UL) /*!< NFCS (Bit 0) */ + #define R_SCI0_SNFR_NFCS_Msk (0x7UL) /*!< NFCS (Bitfield-Mask: 0x07) */ +/* ========================================================= SIMR1 ========================================================= */ + #define R_SCI0_SIMR1_IICDL_Pos (3UL) /*!< IICDL (Bit 3) */ + #define R_SCI0_SIMR1_IICDL_Msk (0xf8UL) /*!< IICDL (Bitfield-Mask: 0x1f) */ + #define R_SCI0_SIMR1_IICM_Pos (0UL) /*!< IICM (Bit 0) */ + #define R_SCI0_SIMR1_IICM_Msk (0x1UL) /*!< IICM (Bitfield-Mask: 0x01) */ +/* ========================================================= SIMR2 ========================================================= */ + #define R_SCI0_SIMR2_IICACKT_Pos (5UL) /*!< IICACKT (Bit 5) */ + #define R_SCI0_SIMR2_IICACKT_Msk (0x20UL) /*!< IICACKT (Bitfield-Mask: 0x01) */ + #define R_SCI0_SIMR2_IICCSC_Pos (1UL) /*!< IICCSC (Bit 1) */ + #define R_SCI0_SIMR2_IICCSC_Msk (0x2UL) /*!< IICCSC (Bitfield-Mask: 0x01) */ + #define R_SCI0_SIMR2_IICINTM_Pos (0UL) /*!< IICINTM (Bit 0) */ + #define R_SCI0_SIMR2_IICINTM_Msk (0x1UL) /*!< IICINTM (Bitfield-Mask: 0x01) */ +/* ========================================================= SIMR3 ========================================================= */ + #define R_SCI0_SIMR3_IICSCLS_Pos (6UL) /*!< IICSCLS (Bit 6) */ + #define R_SCI0_SIMR3_IICSCLS_Msk (0xc0UL) /*!< IICSCLS (Bitfield-Mask: 0x03) */ + #define R_SCI0_SIMR3_IICSDAS_Pos (4UL) /*!< IICSDAS (Bit 4) */ + #define R_SCI0_SIMR3_IICSDAS_Msk (0x30UL) /*!< IICSDAS (Bitfield-Mask: 0x03) */ + #define R_SCI0_SIMR3_IICSTIF_Pos (3UL) /*!< IICSTIF (Bit 3) */ + #define R_SCI0_SIMR3_IICSTIF_Msk (0x8UL) /*!< IICSTIF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SIMR3_IICSTPREQ_Pos (2UL) /*!< IICSTPREQ (Bit 2) */ + #define R_SCI0_SIMR3_IICSTPREQ_Msk (0x4UL) /*!< IICSTPREQ (Bitfield-Mask: 0x01) */ + #define R_SCI0_SIMR3_IICRSTAREQ_Pos (1UL) /*!< IICRSTAREQ (Bit 1) */ + #define R_SCI0_SIMR3_IICRSTAREQ_Msk (0x2UL) /*!< IICRSTAREQ (Bitfield-Mask: 0x01) */ + #define R_SCI0_SIMR3_IICSTAREQ_Pos (0UL) /*!< IICSTAREQ (Bit 0) */ + #define R_SCI0_SIMR3_IICSTAREQ_Msk (0x1UL) /*!< IICSTAREQ (Bitfield-Mask: 0x01) */ +/* ========================================================= SISR ========================================================== */ + #define R_SCI0_SISR_IICACKR_Pos (0UL) /*!< IICACKR (Bit 0) */ + #define R_SCI0_SISR_IICACKR_Msk (0x1UL) /*!< IICACKR (Bitfield-Mask: 0x01) */ +/* ========================================================= SPMR ========================================================== */ + #define R_SCI0_SPMR_CKPH_Pos (7UL) /*!< CKPH (Bit 7) */ + #define R_SCI0_SPMR_CKPH_Msk (0x80UL) /*!< CKPH (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_CKPOL_Pos (6UL) /*!< CKPOL (Bit 6) */ + #define R_SCI0_SPMR_CKPOL_Msk (0x40UL) /*!< CKPOL (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_MFF_Pos (4UL) /*!< MFF (Bit 4) */ + #define R_SCI0_SPMR_MFF_Msk (0x10UL) /*!< MFF (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_CSTPEN_Pos (3UL) /*!< CSTPEN (Bit 3) */ + #define R_SCI0_SPMR_CSTPEN_Msk (0x8UL) /*!< CSTPEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_MSS_Pos (2UL) /*!< MSS (Bit 2) */ + #define R_SCI0_SPMR_MSS_Msk (0x4UL) /*!< MSS (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_CTSE_Pos (1UL) /*!< CTSE (Bit 1) */ + #define R_SCI0_SPMR_CTSE_Msk (0x2UL) /*!< CTSE (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPMR_SSE_Pos (0UL) /*!< SSE (Bit 0) */ + #define R_SCI0_SPMR_SSE_Msk (0x1UL) /*!< SSE (Bitfield-Mask: 0x01) */ +/* ========================================================= TDRHL ========================================================= */ + #define R_SCI0_TDRHL_TDRHL_Pos (0UL) /*!< TDRHL (Bit 0) */ + #define R_SCI0_TDRHL_TDRHL_Msk (0xffffUL) /*!< TDRHL (Bitfield-Mask: 0xffff) */ +/* ======================================================== FTDRHL ========================================================= */ + #define R_SCI0_FTDRHL_MPBT_Pos (9UL) /*!< MPBT (Bit 9) */ + #define R_SCI0_FTDRHL_MPBT_Msk (0x200UL) /*!< MPBT (Bitfield-Mask: 0x01) */ + #define R_SCI0_FTDRHL_TDAT_Pos (0UL) /*!< TDAT (Bit 0) */ + #define R_SCI0_FTDRHL_TDAT_Msk (0x1ffUL) /*!< TDAT (Bitfield-Mask: 0x1ff) */ +/* ========================================================= FTDRH ========================================================= */ + #define R_SCI0_FTDRH_MPBT_Pos (1UL) /*!< MPBT (Bit 1) */ + #define R_SCI0_FTDRH_MPBT_Msk (0x2UL) /*!< MPBT (Bitfield-Mask: 0x01) */ + #define R_SCI0_FTDRH_TDATH_Pos (0UL) /*!< TDATH (Bit 0) */ + #define R_SCI0_FTDRH_TDATH_Msk (0x1UL) /*!< TDATH (Bitfield-Mask: 0x01) */ +/* ========================================================= FTDRL ========================================================= */ + #define R_SCI0_FTDRL_TDATL_Pos (0UL) /*!< TDATL (Bit 0) */ + #define R_SCI0_FTDRL_TDATL_Msk (0xffUL) /*!< TDATL (Bitfield-Mask: 0xff) */ +/* ========================================================= RDRHL ========================================================= */ + #define R_SCI0_RDRHL_RDRHL_Pos (0UL) /*!< RDRHL (Bit 0) */ + #define R_SCI0_RDRHL_RDRHL_Msk (0xffffUL) /*!< RDRHL (Bitfield-Mask: 0xffff) */ +/* ======================================================== FRDRHL ========================================================= */ + #define R_SCI0_FRDRHL_RDF_Pos (14UL) /*!< RDF (Bit 14) */ + #define R_SCI0_FRDRHL_RDF_Msk (0x4000UL) /*!< RDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_ORER_Pos (13UL) /*!< ORER (Bit 13) */ + #define R_SCI0_FRDRHL_ORER_Msk (0x2000UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_FER_Pos (12UL) /*!< FER (Bit 12) */ + #define R_SCI0_FRDRHL_FER_Msk (0x1000UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_PER_Pos (11UL) /*!< PER (Bit 11) */ + #define R_SCI0_FRDRHL_PER_Msk (0x800UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_DR_Pos (10UL) /*!< DR (Bit 10) */ + #define R_SCI0_FRDRHL_DR_Msk (0x400UL) /*!< DR (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_MPB_Pos (9UL) /*!< MPB (Bit 9) */ + #define R_SCI0_FRDRHL_MPB_Msk (0x200UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRHL_RDAT_Pos (0UL) /*!< RDAT (Bit 0) */ + #define R_SCI0_FRDRHL_RDAT_Msk (0x1ffUL) /*!< RDAT (Bitfield-Mask: 0x1ff) */ +/* ======================================================= TDRHL_MAN ======================================================= */ + #define R_SCI0_TDRHL_MAN_TDAT_Pos (0UL) /*!< TDAT (Bit 0) */ + #define R_SCI0_TDRHL_MAN_TDAT_Msk (0x1ffUL) /*!< TDAT (Bitfield-Mask: 0x1ff) */ + #define R_SCI0_TDRHL_MAN_MPBT_Pos (9UL) /*!< MPBT (Bit 9) */ + #define R_SCI0_TDRHL_MAN_MPBT_Msk (0x200UL) /*!< MPBT (Bitfield-Mask: 0x01) */ + #define R_SCI0_TDRHL_MAN_TSYNC_Pos (12UL) /*!< TSYNC (Bit 12) */ + #define R_SCI0_TDRHL_MAN_TSYNC_Msk (0x1000UL) /*!< TSYNC (Bitfield-Mask: 0x01) */ +/* ======================================================= RDRHL_MAN ======================================================= */ + #define R_SCI0_RDRHL_MAN_RDAT_Pos (0UL) /*!< RDAT (Bit 0) */ + #define R_SCI0_RDRHL_MAN_RDAT_Msk (0x1ffUL) /*!< RDAT (Bitfield-Mask: 0x1ff) */ + #define R_SCI0_RDRHL_MAN_MPB_Pos (9UL) /*!< MPB (Bit 9) */ + #define R_SCI0_RDRHL_MAN_MPB_Msk (0x200UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_RDRHL_MAN_RSYNC_Pos (12UL) /*!< RSYNC (Bit 12) */ + #define R_SCI0_RDRHL_MAN_RSYNC_Msk (0x1000UL) /*!< RSYNC (Bitfield-Mask: 0x01) */ +/* ========================================================= FRDRH ========================================================= */ + #define R_SCI0_FRDRH_RDF_Pos (6UL) /*!< RDF (Bit 6) */ + #define R_SCI0_FRDRH_RDF_Msk (0x40UL) /*!< RDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_ORER_Pos (5UL) /*!< ORER (Bit 5) */ + #define R_SCI0_FRDRH_ORER_Msk (0x20UL) /*!< ORER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_FER_Pos (4UL) /*!< FER (Bit 4) */ + #define R_SCI0_FRDRH_FER_Msk (0x10UL) /*!< FER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_PER_Pos (3UL) /*!< PER (Bit 3) */ + #define R_SCI0_FRDRH_PER_Msk (0x8UL) /*!< PER (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_DR_Pos (2UL) /*!< DR (Bit 2) */ + #define R_SCI0_FRDRH_DR_Msk (0x4UL) /*!< DR (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_MPB_Pos (1UL) /*!< MPB (Bit 1) */ + #define R_SCI0_FRDRH_MPB_Msk (0x2UL) /*!< MPB (Bitfield-Mask: 0x01) */ + #define R_SCI0_FRDRH_RDATH_Pos (0UL) /*!< RDATH (Bit 0) */ + #define R_SCI0_FRDRH_RDATH_Msk (0x1UL) /*!< RDATH (Bitfield-Mask: 0x01) */ +/* ========================================================= FRDRL ========================================================= */ + #define R_SCI0_FRDRL_RDATL_Pos (0UL) /*!< RDATL (Bit 0) */ + #define R_SCI0_FRDRL_RDATL_Msk (0xffUL) /*!< RDATL (Bitfield-Mask: 0xff) */ +/* ========================================================= MDDR ========================================================== */ + #define R_SCI0_MDDR_MDDR_Pos (0UL) /*!< MDDR (Bit 0) */ + #define R_SCI0_MDDR_MDDR_Msk (0xffUL) /*!< MDDR (Bitfield-Mask: 0xff) */ +/* ========================================================= DCCR ========================================================== */ + #define R_SCI0_DCCR_DCME_Pos (7UL) /*!< DCME (Bit 7) */ + #define R_SCI0_DCCR_DCME_Msk (0x80UL) /*!< DCME (Bitfield-Mask: 0x01) */ + #define R_SCI0_DCCR_IDSEL_Pos (6UL) /*!< IDSEL (Bit 6) */ + #define R_SCI0_DCCR_IDSEL_Msk (0x40UL) /*!< IDSEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_DCCR_DFER_Pos (4UL) /*!< DFER (Bit 4) */ + #define R_SCI0_DCCR_DFER_Msk (0x10UL) /*!< DFER (Bitfield-Mask: 0x01) */ + #define R_SCI0_DCCR_DPER_Pos (3UL) /*!< DPER (Bit 3) */ + #define R_SCI0_DCCR_DPER_Msk (0x8UL) /*!< DPER (Bitfield-Mask: 0x01) */ + #define R_SCI0_DCCR_DCMF_Pos (0UL) /*!< DCMF (Bit 0) */ + #define R_SCI0_DCCR_DCMF_Msk (0x1UL) /*!< DCMF (Bitfield-Mask: 0x01) */ +/* ========================================================== FCR ========================================================== */ + #define R_SCI0_FCR_RSTRG_Pos (12UL) /*!< RSTRG (Bit 12) */ + #define R_SCI0_FCR_RSTRG_Msk (0xf000UL) /*!< RSTRG (Bitfield-Mask: 0x0f) */ + #define R_SCI0_FCR_RTRG_Pos (8UL) /*!< RTRG (Bit 8) */ + #define R_SCI0_FCR_RTRG_Msk (0xf00UL) /*!< RTRG (Bitfield-Mask: 0x0f) */ + #define R_SCI0_FCR_TTRG_Pos (4UL) /*!< TTRG (Bit 4) */ + #define R_SCI0_FCR_TTRG_Msk (0xf0UL) /*!< TTRG (Bitfield-Mask: 0x0f) */ + #define R_SCI0_FCR_DRES_Pos (3UL) /*!< DRES (Bit 3) */ + #define R_SCI0_FCR_DRES_Msk (0x8UL) /*!< DRES (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_TFRST_Pos (2UL) /*!< TFRST (Bit 2) */ + #define R_SCI0_FCR_TFRST_Msk (0x4UL) /*!< TFRST (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_RFRST_Pos (1UL) /*!< RFRST (Bit 1) */ + #define R_SCI0_FCR_RFRST_Msk (0x2UL) /*!< RFRST (Bitfield-Mask: 0x01) */ + #define R_SCI0_FCR_FM_Pos (0UL) /*!< FM (Bit 0) */ + #define R_SCI0_FCR_FM_Msk (0x1UL) /*!< FM (Bitfield-Mask: 0x01) */ +/* ========================================================== FDR ========================================================== */ + #define R_SCI0_FDR_T_Pos (8UL) /*!< T (Bit 8) */ + #define R_SCI0_FDR_T_Msk (0x1f00UL) /*!< T (Bitfield-Mask: 0x1f) */ + #define R_SCI0_FDR_R_Pos (0UL) /*!< R (Bit 0) */ + #define R_SCI0_FDR_R_Msk (0x1fUL) /*!< R (Bitfield-Mask: 0x1f) */ +/* ========================================================== LSR ========================================================== */ + #define R_SCI0_LSR_PNUM_Pos (8UL) /*!< PNUM (Bit 8) */ + #define R_SCI0_LSR_PNUM_Msk (0x1f00UL) /*!< PNUM (Bitfield-Mask: 0x1f) */ + #define R_SCI0_LSR_FNUM_Pos (2UL) /*!< FNUM (Bit 2) */ + #define R_SCI0_LSR_FNUM_Msk (0x7cUL) /*!< FNUM (Bitfield-Mask: 0x1f) */ + #define R_SCI0_LSR_ORER_Pos (0UL) /*!< ORER (Bit 0) */ + #define R_SCI0_LSR_ORER_Msk (0x1UL) /*!< ORER (Bitfield-Mask: 0x01) */ +/* ========================================================== CDR ========================================================== */ + #define R_SCI0_CDR_CMPD_Pos (0UL) /*!< CMPD (Bit 0) */ + #define R_SCI0_CDR_CMPD_Msk (0x1ffUL) /*!< CMPD (Bitfield-Mask: 0x1ff) */ +/* ========================================================= SPTR ========================================================== */ + #define R_SCI0_SPTR_SPB2IO_Pos (2UL) /*!< SPB2IO (Bit 2) */ + #define R_SCI0_SPTR_SPB2IO_Msk (0x4UL) /*!< SPB2IO (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_SPB2DT_Pos (1UL) /*!< SPB2DT (Bit 1) */ + #define R_SCI0_SPTR_SPB2DT_Msk (0x2UL) /*!< SPB2DT (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_RXDMON_Pos (0UL) /*!< RXDMON (Bit 0) */ + #define R_SCI0_SPTR_RXDMON_Msk (0x1UL) /*!< RXDMON (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_RINV_Pos (4UL) /*!< RINV (Bit 4) */ + #define R_SCI0_SPTR_RINV_Msk (0x10UL) /*!< RINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_TINV_Pos (5UL) /*!< TINV (Bit 5) */ + #define R_SCI0_SPTR_TINV_Msk (0x20UL) /*!< TINV (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_ASEN_Pos (6UL) /*!< ASEN (Bit 6) */ + #define R_SCI0_SPTR_ASEN_Msk (0x40UL) /*!< ASEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_SPTR_ATEN_Pos (7UL) /*!< ATEN (Bit 7) */ + #define R_SCI0_SPTR_ATEN_Msk (0x80UL) /*!< ATEN (Bitfield-Mask: 0x01) */ +/* ========================================================= ACTR ========================================================== */ + #define R_SCI0_ACTR_AST_Pos (0UL) /*!< AST (Bit 0) */ + #define R_SCI0_ACTR_AST_Msk (0x7UL) /*!< AST (Bitfield-Mask: 0x07) */ + #define R_SCI0_ACTR_AJD_Pos (3UL) /*!< AJD (Bit 3) */ + #define R_SCI0_ACTR_AJD_Msk (0x8UL) /*!< AJD (Bitfield-Mask: 0x01) */ + #define R_SCI0_ACTR_ATT_Pos (4UL) /*!< ATT (Bit 4) */ + #define R_SCI0_ACTR_ATT_Msk (0x70UL) /*!< ATT (Bitfield-Mask: 0x07) */ + #define R_SCI0_ACTR_AET_Pos (7UL) /*!< AET (Bit 7) */ + #define R_SCI0_ACTR_AET_Msk (0x80UL) /*!< AET (Bitfield-Mask: 0x01) */ +/* ========================================================= ESMER ========================================================= */ + #define R_SCI0_ESMER_ESME_Pos (0UL) /*!< ESME (Bit 0) */ + #define R_SCI0_ESMER_ESME_Msk (0x1UL) /*!< ESME (Bitfield-Mask: 0x01) */ +/* ========================================================== CR0 ========================================================== */ + #define R_SCI0_CR0_SFSF_Pos (1UL) /*!< SFSF (Bit 1) */ + #define R_SCI0_CR0_SFSF_Msk (0x2UL) /*!< SFSF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR0_RXDSF_Pos (2UL) /*!< RXDSF (Bit 2) */ + #define R_SCI0_CR0_RXDSF_Msk (0x4UL) /*!< RXDSF (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR0_BRME_Pos (3UL) /*!< BRME (Bit 3) */ + #define R_SCI0_CR0_BRME_Msk (0x8UL) /*!< BRME (Bitfield-Mask: 0x01) */ +/* ========================================================== CR1 ========================================================== */ + #define R_SCI0_CR1_BFE_Pos (0UL) /*!< BFE (Bit 0) */ + #define R_SCI0_CR1_BFE_Msk (0x1UL) /*!< BFE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_CF0RE_Pos (1UL) /*!< CF0RE (Bit 1) */ + #define R_SCI0_CR1_CF0RE_Msk (0x2UL) /*!< CF0RE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_CF1DS_Pos (2UL) /*!< CF1DS (Bit 2) */ + #define R_SCI0_CR1_CF1DS_Msk (0xcUL) /*!< CF1DS (Bitfield-Mask: 0x03) */ + #define R_SCI0_CR1_PIBE_Pos (4UL) /*!< PIBE (Bit 4) */ + #define R_SCI0_CR1_PIBE_Msk (0x10UL) /*!< PIBE (Bitfield-Mask: 0x01) */ + #define R_SCI0_CR1_PIBS_Pos (5UL) /*!< PIBS (Bit 5) */ + #define R_SCI0_CR1_PIBS_Msk (0xe0UL) /*!< PIBS (Bitfield-Mask: 0x07) */ +/* ========================================================== CR2 ========================================================== */ + #define R_SCI0_CR2_DFCS_Pos (0UL) /*!< DFCS (Bit 0) */ + #define R_SCI0_CR2_DFCS_Msk (0x7UL) /*!< DFCS (Bitfield-Mask: 0x07) */ + #define R_SCI0_CR2_BCCS_Pos (4UL) /*!< BCCS (Bit 4) */ + #define R_SCI0_CR2_BCCS_Msk (0x30UL) /*!< BCCS (Bitfield-Mask: 0x03) */ + #define R_SCI0_CR2_RTS_Pos (6UL) /*!< RTS (Bit 6) */ + #define R_SCI0_CR2_RTS_Msk (0xc0UL) /*!< RTS (Bitfield-Mask: 0x03) */ +/* ========================================================== CR3 ========================================================== */ + #define R_SCI0_CR3_SDST_Pos (0UL) /*!< SDST (Bit 0) */ + #define R_SCI0_CR3_SDST_Msk (0x1UL) /*!< SDST (Bitfield-Mask: 0x01) */ +/* ========================================================== PCR ========================================================== */ + #define R_SCI0_PCR_TXDXPS_Pos (0UL) /*!< TXDXPS (Bit 0) */ + #define R_SCI0_PCR_TXDXPS_Msk (0x1UL) /*!< TXDXPS (Bitfield-Mask: 0x01) */ + #define R_SCI0_PCR_RXDXPS_Pos (1UL) /*!< RXDXPS (Bit 1) */ + #define R_SCI0_PCR_RXDXPS_Msk (0x2UL) /*!< RXDXPS (Bitfield-Mask: 0x01) */ + #define R_SCI0_PCR_SHARPS_Pos (4UL) /*!< SHARPS (Bit 4) */ + #define R_SCI0_PCR_SHARPS_Msk (0x10UL) /*!< SHARPS (Bitfield-Mask: 0x01) */ +/* ========================================================== ICR ========================================================== */ + #define R_SCI0_ICR_BFDIE_Pos (0UL) /*!< BFDIE (Bit 0) */ + #define R_SCI0_ICR_BFDIE_Msk (0x1UL) /*!< BFDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_CF0MIE_Pos (1UL) /*!< CF0MIE (Bit 1) */ + #define R_SCI0_ICR_CF0MIE_Msk (0x2UL) /*!< CF0MIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_CF1MIE_Pos (2UL) /*!< CF1MIE (Bit 2) */ + #define R_SCI0_ICR_CF1MIE_Msk (0x4UL) /*!< CF1MIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_PIBDIE_Pos (3UL) /*!< PIBDIE (Bit 3) */ + #define R_SCI0_ICR_PIBDIE_Msk (0x8UL) /*!< PIBDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_BCDIE_Pos (4UL) /*!< BCDIE (Bit 4) */ + #define R_SCI0_ICR_BCDIE_Msk (0x10UL) /*!< BCDIE (Bitfield-Mask: 0x01) */ + #define R_SCI0_ICR_AEDIE_Pos (5UL) /*!< AEDIE (Bit 5) */ + #define R_SCI0_ICR_AEDIE_Msk (0x20UL) /*!< AEDIE (Bitfield-Mask: 0x01) */ +/* ========================================================== STR ========================================================== */ + #define R_SCI0_STR_BFDF_Pos (0UL) /*!< BFDF (Bit 0) */ + #define R_SCI0_STR_BFDF_Msk (0x1UL) /*!< BFDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_CF0MF_Pos (1UL) /*!< CF0MF (Bit 1) */ + #define R_SCI0_STR_CF0MF_Msk (0x2UL) /*!< CF0MF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_CF1MF_Pos (2UL) /*!< CF1MF (Bit 2) */ + #define R_SCI0_STR_CF1MF_Msk (0x4UL) /*!< CF1MF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_PIBDF_Pos (3UL) /*!< PIBDF (Bit 3) */ + #define R_SCI0_STR_PIBDF_Msk (0x8UL) /*!< PIBDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_BCDF_Pos (4UL) /*!< BCDF (Bit 4) */ + #define R_SCI0_STR_BCDF_Msk (0x10UL) /*!< BCDF (Bitfield-Mask: 0x01) */ + #define R_SCI0_STR_AEDF_Pos (5UL) /*!< AEDF (Bit 5) */ + #define R_SCI0_STR_AEDF_Msk (0x20UL) /*!< AEDF (Bitfield-Mask: 0x01) */ +/* ========================================================= STCR ========================================================== */ + #define R_SCI0_STCR_BFDCL_Pos (0UL) /*!< BFDCL (Bit 0) */ + #define R_SCI0_STCR_BFDCL_Msk (0x1UL) /*!< BFDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_CF0MCL_Pos (1UL) /*!< CF0MCL (Bit 1) */ + #define R_SCI0_STCR_CF0MCL_Msk (0x2UL) /*!< CF0MCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_CF1MCL_Pos (2UL) /*!< CF1MCL (Bit 2) */ + #define R_SCI0_STCR_CF1MCL_Msk (0x4UL) /*!< CF1MCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_PIBDCL_Pos (3UL) /*!< PIBDCL (Bit 3) */ + #define R_SCI0_STCR_PIBDCL_Msk (0x8UL) /*!< PIBDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_BCDCL_Pos (4UL) /*!< BCDCL (Bit 4) */ + #define R_SCI0_STCR_BCDCL_Msk (0x10UL) /*!< BCDCL (Bitfield-Mask: 0x01) */ + #define R_SCI0_STCR_AEDCL_Pos (5UL) /*!< AEDCL (Bit 5) */ + #define R_SCI0_STCR_AEDCL_Msk (0x20UL) /*!< AEDCL (Bitfield-Mask: 0x01) */ +/* ========================================================= CF0DR ========================================================= */ +/* ========================================================= CF0CR ========================================================= */ + #define R_SCI0_CF0CR_CF0CE0_Pos (0UL) /*!< CF0CE0 (Bit 0) */ + #define R_SCI0_CF0CR_CF0CE0_Msk (0x1UL) /*!< CF0CE0 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE1_Pos (1UL) /*!< CF0CE1 (Bit 1) */ + #define R_SCI0_CF0CR_CF0CE1_Msk (0x2UL) /*!< CF0CE1 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE2_Pos (2UL) /*!< CF0CE2 (Bit 2) */ + #define R_SCI0_CF0CR_CF0CE2_Msk (0x4UL) /*!< CF0CE2 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE3_Pos (3UL) /*!< CF0CE3 (Bit 3) */ + #define R_SCI0_CF0CR_CF0CE3_Msk (0x8UL) /*!< CF0CE3 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE4_Pos (4UL) /*!< CF0CE4 (Bit 4) */ + #define R_SCI0_CF0CR_CF0CE4_Msk (0x10UL) /*!< CF0CE4 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE5_Pos (5UL) /*!< CF0CE5 (Bit 5) */ + #define R_SCI0_CF0CR_CF0CE5_Msk (0x20UL) /*!< CF0CE5 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE6_Pos (6UL) /*!< CF0CE6 (Bit 6) */ + #define R_SCI0_CF0CR_CF0CE6_Msk (0x40UL) /*!< CF0CE6 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF0CR_CF0CE7_Pos (7UL) /*!< CF0CE7 (Bit 7) */ + #define R_SCI0_CF0CR_CF0CE7_Msk (0x80UL) /*!< CF0CE7 (Bitfield-Mask: 0x01) */ +/* ========================================================= CF0RR ========================================================= */ +/* ======================================================== PCF1DR ========================================================= */ +/* ======================================================== SCF1DR ========================================================= */ +/* ========================================================= CF1CR ========================================================= */ + #define R_SCI0_CF1CR_CF1CE0_Pos (0UL) /*!< CF1CE0 (Bit 0) */ + #define R_SCI0_CF1CR_CF1CE0_Msk (0x1UL) /*!< CF1CE0 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE1_Pos (1UL) /*!< CF1CE1 (Bit 1) */ + #define R_SCI0_CF1CR_CF1CE1_Msk (0x2UL) /*!< CF1CE1 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE2_Pos (2UL) /*!< CF1CE2 (Bit 2) */ + #define R_SCI0_CF1CR_CF1CE2_Msk (0x4UL) /*!< CF1CE2 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE3_Pos (3UL) /*!< CF1CE3 (Bit 3) */ + #define R_SCI0_CF1CR_CF1CE3_Msk (0x8UL) /*!< CF1CE3 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE4_Pos (4UL) /*!< CF1CE4 (Bit 4) */ + #define R_SCI0_CF1CR_CF1CE4_Msk (0x10UL) /*!< CF1CE4 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE5_Pos (5UL) /*!< CF1CE5 (Bit 5) */ + #define R_SCI0_CF1CR_CF1CE5_Msk (0x20UL) /*!< CF1CE5 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE6_Pos (6UL) /*!< CF1CE6 (Bit 6) */ + #define R_SCI0_CF1CR_CF1CE6_Msk (0x40UL) /*!< CF1CE6 (Bitfield-Mask: 0x01) */ + #define R_SCI0_CF1CR_CF1CE7_Pos (7UL) /*!< CF1CE7 (Bit 7) */ + #define R_SCI0_CF1CR_CF1CE7_Msk (0x80UL) /*!< CF1CE7 (Bitfield-Mask: 0x01) */ +/* ========================================================= CF1RR ========================================================= */ +/* ========================================================== TCR ========================================================== */ + #define R_SCI0_TCR_TCST_Pos (0UL) /*!< TCST (Bit 0) */ + #define R_SCI0_TCR_TCST_Msk (0x1UL) /*!< TCST (Bitfield-Mask: 0x01) */ +/* ========================================================== TMR ========================================================== */ + #define R_SCI0_TMR_TOMS_Pos (0UL) /*!< TOMS (Bit 0) */ + #define R_SCI0_TMR_TOMS_Msk (0x3UL) /*!< TOMS (Bitfield-Mask: 0x03) */ + #define R_SCI0_TMR_TWRC_Pos (3UL) /*!< TWRC (Bit 3) */ + #define R_SCI0_TMR_TWRC_Msk (0x8UL) /*!< TWRC (Bitfield-Mask: 0x01) */ + #define R_SCI0_TMR_TCSS_Pos (4UL) /*!< TCSS (Bit 4) */ + #define R_SCI0_TMR_TCSS_Msk (0x70UL) /*!< TCSS (Bitfield-Mask: 0x07) */ +/* ========================================================= TPRE ========================================================== */ +/* ========================================================= TCNT ========================================================== */ +/* ======================================================= SCIMSKEN ======================================================== */ + #define R_SCI0_SCIMSKEN_MSKEN_Pos (0UL) /*!< MSKEN (Bit 0) */ + #define R_SCI0_SCIMSKEN_MSKEN_Msk (0x1UL) /*!< MSKEN (Bitfield-Mask: 0x01) */ +/* ========================================================== MMR ========================================================== */ + #define R_SCI0_MMR_MANEN_Pos (7UL) /*!< MANEN (Bit 7) */ + #define R_SCI0_MMR_MANEN_Msk (0x80UL) /*!< MANEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_SBSEL_Pos (6UL) /*!< SBSEL (Bit 6) */ + #define R_SCI0_MMR_SBSEL_Msk (0x40UL) /*!< SBSEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_SYNSEL_Pos (5UL) /*!< SYNSEL (Bit 5) */ + #define R_SCI0_MMR_SYNSEL_Msk (0x20UL) /*!< SYNSEL (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_SYNVAL_Pos (4UL) /*!< SYNVAL (Bit 4) */ + #define R_SCI0_MMR_SYNVAL_Msk (0x10UL) /*!< SYNVAL (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_ERTEN_Pos (2UL) /*!< ERTEN (Bit 2) */ + #define R_SCI0_MMR_ERTEN_Msk (0x4UL) /*!< ERTEN (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_TMPOL_Pos (1UL) /*!< TMPOL (Bit 1) */ + #define R_SCI0_MMR_TMPOL_Msk (0x2UL) /*!< TMPOL (Bitfield-Mask: 0x01) */ + #define R_SCI0_MMR_RMPOL_Pos (0UL) /*!< RMPOL (Bit 0) */ + #define R_SCI0_MMR_RMPOL_Msk (0x1UL) /*!< RMPOL (Bitfield-Mask: 0x01) */ +/* ========================================================= TMPR ========================================================== */ + #define R_SCI0_TMPR_TPLEN_Pos (0UL) /*!< TPLEN (Bit 0) */ + #define R_SCI0_TMPR_TPLEN_Msk (0xfUL) /*!< TPLEN (Bitfield-Mask: 0x0f) */ + #define R_SCI0_TMPR_TPPAT_Pos (4UL) /*!< TPPAT (Bit 4) */ + #define R_SCI0_TMPR_TPPAT_Msk (0x30UL) /*!< TPPAT (Bitfield-Mask: 0x03) */ +/* ========================================================= RMPR ========================================================== */ + #define R_SCI0_RMPR_RPLEN_Pos (0UL) /*!< RPLEN (Bit 0) */ + #define R_SCI0_RMPR_RPLEN_Msk (0xfUL) /*!< RPLEN (Bitfield-Mask: 0x0f) */ + #define R_SCI0_RMPR_RPPAT_Pos (4UL) /*!< RPPAT (Bit 4) */ + #define R_SCI0_RMPR_RPPAT_Msk (0x30UL) /*!< RPPAT (Bitfield-Mask: 0x03) */ +/* ========================================================= MESR ========================================================== */ + #define R_SCI0_MESR_PFER_Pos (0UL) /*!< PFER (Bit 0) */ + #define R_SCI0_MESR_PFER_Msk (0x1UL) /*!< PFER (Bitfield-Mask: 0x01) */ + #define R_SCI0_MESR_SYER_Pos (1UL) /*!< SYER (Bit 1) */ + #define R_SCI0_MESR_SYER_Msk (0x2UL) /*!< SYER (Bitfield-Mask: 0x01) */ + #define R_SCI0_MESR_SBER_Pos (2UL) /*!< SBER (Bit 2) */ + #define R_SCI0_MESR_SBER_Msk (0x4UL) /*!< SBER (Bitfield-Mask: 0x01) */ +/* ========================================================= MECR ========================================================== */ + #define R_SCI0_MECR_PFEREN_Pos (0UL) /*!< PFEREN (Bit 0) */ + #define R_SCI0_MECR_PFEREN_Msk (0x1UL) /*!< PFEREN (Bitfield-Mask: 0x01) */ + #define R_SCI0_MECR_SYEREN_Pos (1UL) /*!< SYEREN (Bit 1) */ + #define R_SCI0_MECR_SYEREN_Msk (0x2UL) /*!< SYEREN (Bitfield-Mask: 0x01) */ + #define R_SCI0_MECR_SBEREN_Pos (2UL) /*!< SBEREN (Bit 2) */ + #define R_SCI0_MECR_SBEREN_Msk (0x4UL) /*!< SBEREN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SDADC0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= STC1 ========================================================== */ + #define R_SDADC0_STC1_VSBIAS_Pos (8UL) /*!< VSBIAS (Bit 8) */ + #define R_SDADC0_STC1_VSBIAS_Msk (0xf00UL) /*!< VSBIAS (Bitfield-Mask: 0x0f) */ + #define R_SDADC0_STC1_CLKDIV_Pos (0UL) /*!< CLKDIV (Bit 0) */ + #define R_SDADC0_STC1_CLKDIV_Msk (0xfUL) /*!< CLKDIV (Bitfield-Mask: 0x0f) */ + #define R_SDADC0_STC1_SDADLPM_Pos (7UL) /*!< SDADLPM (Bit 7) */ + #define R_SDADC0_STC1_SDADLPM_Msk (0x80UL) /*!< SDADLPM (Bitfield-Mask: 0x01) */ + #define R_SDADC0_STC1_VREFSEL_Pos (15UL) /*!< VREFSEL (Bit 15) */ + #define R_SDADC0_STC1_VREFSEL_Msk (0x8000UL) /*!< VREFSEL (Bitfield-Mask: 0x01) */ +/* ========================================================= STC2 ========================================================== */ + #define R_SDADC0_STC2_BGRPON_Pos (0UL) /*!< BGRPON (Bit 0) */ + #define R_SDADC0_STC2_BGRPON_Msk (0x1UL) /*!< BGRPON (Bitfield-Mask: 0x01) */ + #define R_SDADC0_STC2_ADFPWDS_Pos (2UL) /*!< ADFPWDS (Bit 2) */ + #define R_SDADC0_STC2_ADFPWDS_Msk (0x4UL) /*!< ADFPWDS (Bitfield-Mask: 0x01) */ + #define R_SDADC0_STC2_ADCPON_Pos (1UL) /*!< ADCPON (Bit 1) */ + #define R_SDADC0_STC2_ADCPON_Msk (0x2UL) /*!< ADCPON (Bitfield-Mask: 0x01) */ +/* ========================================================= PGAC ========================================================== */ + #define R_SDADC0_PGAC_PGAASN_Pos (31UL) /*!< PGAASN (Bit 31) */ + #define R_SDADC0_PGAC_PGAASN_Msk (0x80000000UL) /*!< PGAASN (Bitfield-Mask: 0x01) */ + #define R_SDADC0_PGAC_PGACVE_Pos (30UL) /*!< PGACVE (Bit 30) */ + #define R_SDADC0_PGAC_PGACVE_Msk (0x40000000UL) /*!< PGACVE (Bitfield-Mask: 0x01) */ + #define R_SDADC0_PGAC_PGAREV_Pos (28UL) /*!< PGAREV (Bit 28) */ + #define R_SDADC0_PGAC_PGAREV_Msk (0x10000000UL) /*!< PGAREV (Bitfield-Mask: 0x01) */ + #define R_SDADC0_PGAC_PGAAVE_Pos (26UL) /*!< PGAAVE (Bit 26) */ + #define R_SDADC0_PGAC_PGAAVE_Msk (0xc000000UL) /*!< PGAAVE (Bitfield-Mask: 0x03) */ + #define R_SDADC0_PGAC_PGAAVN_Pos (24UL) /*!< PGAAVN (Bit 24) */ + #define R_SDADC0_PGAC_PGAAVN_Msk (0x3000000UL) /*!< PGAAVN (Bitfield-Mask: 0x03) */ + #define R_SDADC0_PGAC_PGACTN_Pos (21UL) /*!< PGACTN (Bit 21) */ + #define R_SDADC0_PGAC_PGACTN_Msk (0xe00000UL) /*!< PGACTN (Bitfield-Mask: 0x07) */ + #define R_SDADC0_PGAC_PGACTM_Pos (16UL) /*!< PGACTM (Bit 16) */ + #define R_SDADC0_PGAC_PGACTM_Msk (0x1f0000UL) /*!< PGACTM (Bitfield-Mask: 0x1f) */ + #define R_SDADC0_PGAC_PGASEL_Pos (15UL) /*!< PGASEL (Bit 15) */ + #define R_SDADC0_PGAC_PGASEL_Msk (0x8000UL) /*!< PGASEL (Bitfield-Mask: 0x01) */ + #define R_SDADC0_PGAC_PGAPOL_Pos (14UL) /*!< PGAPOL (Bit 14) */ + #define R_SDADC0_PGAC_PGAPOL_Msk (0x4000UL) /*!< PGAPOL (Bitfield-Mask: 0x01) */ + #define R_SDADC0_PGAC_PGAOFS_Pos (8UL) /*!< PGAOFS (Bit 8) */ + #define R_SDADC0_PGAC_PGAOFS_Msk (0x1f00UL) /*!< PGAOFS (Bitfield-Mask: 0x1f) */ + #define R_SDADC0_PGAC_PGAOSR_Pos (5UL) /*!< PGAOSR (Bit 5) */ + #define R_SDADC0_PGAC_PGAOSR_Msk (0xe0UL) /*!< PGAOSR (Bitfield-Mask: 0x07) */ + #define R_SDADC0_PGAC_PGAGC_Pos (0UL) /*!< PGAGC (Bit 0) */ + #define R_SDADC0_PGAC_PGAGC_Msk (0x1fUL) /*!< PGAGC (Bitfield-Mask: 0x1f) */ +/* ========================================================= ADC1 ========================================================== */ + #define R_SDADC0_ADC1_PGASLFT_Pos (20UL) /*!< PGASLFT (Bit 20) */ + #define R_SDADC0_ADC1_PGASLFT_Msk (0x100000UL) /*!< PGASLFT (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADC1_PGADISC_Pos (17UL) /*!< PGADISC (Bit 17) */ + #define R_SDADC0_ADC1_PGADISC_Msk (0x20000UL) /*!< PGADISC (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADC1_PGADISA_Pos (16UL) /*!< PGADISA (Bit 16) */ + #define R_SDADC0_ADC1_PGADISA_Msk (0x10000UL) /*!< PGADISA (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADC1_SDADBMP_Pos (8UL) /*!< SDADBMP (Bit 8) */ + #define R_SDADC0_ADC1_SDADBMP_Msk (0x1f00UL) /*!< SDADBMP (Bitfield-Mask: 0x1f) */ + #define R_SDADC0_ADC1_SDADTMD_Pos (4UL) /*!< SDADTMD (Bit 4) */ + #define R_SDADC0_ADC1_SDADTMD_Msk (0x10UL) /*!< SDADTMD (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADC1_SDADSCM_Pos (0UL) /*!< SDADSCM (Bit 0) */ + #define R_SDADC0_ADC1_SDADSCM_Msk (0x1UL) /*!< SDADSCM (Bitfield-Mask: 0x01) */ +/* ========================================================= ADC2 ========================================================== */ + #define R_SDADC0_ADC2_SDADST_Pos (0UL) /*!< SDADST (Bit 0) */ + #define R_SDADC0_ADC2_SDADST_Msk (0x1UL) /*!< SDADST (Bitfield-Mask: 0x01) */ +/* ========================================================= ADCR ========================================================== */ + #define R_SDADC0_ADCR_SDADCRC_Pos (25UL) /*!< SDADCRC (Bit 25) */ + #define R_SDADC0_ADCR_SDADCRC_Msk (0xe000000UL) /*!< SDADCRC (Bitfield-Mask: 0x07) */ + #define R_SDADC0_ADCR_SDADCRS_Pos (24UL) /*!< SDADCRS (Bit 24) */ + #define R_SDADC0_ADCR_SDADCRS_Msk (0x1000000UL) /*!< SDADCRS (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADCR_SDADCRD_Pos (0UL) /*!< SDADCRD (Bit 0) */ + #define R_SDADC0_ADCR_SDADCRD_Msk (0xffffffUL) /*!< SDADCRD (Bitfield-Mask: 0xffffff) */ +/* ========================================================= ADAR ========================================================== */ + #define R_SDADC0_ADAR_SDADMVC_Pos (25UL) /*!< SDADMVC (Bit 25) */ + #define R_SDADC0_ADAR_SDADMVC_Msk (0xe000000UL) /*!< SDADMVC (Bitfield-Mask: 0x07) */ + #define R_SDADC0_ADAR_SDADMVS_Pos (24UL) /*!< SDADMVS (Bit 24) */ + #define R_SDADC0_ADAR_SDADMVS_Msk (0x1000000UL) /*!< SDADMVS (Bitfield-Mask: 0x01) */ + #define R_SDADC0_ADAR_SDADMVD_Pos (0UL) /*!< SDADMVD (Bit 0) */ + #define R_SDADC0_ADAR_SDADMVD_Msk (0xffffffUL) /*!< SDADMVD (Bitfield-Mask: 0xffffff) */ +/* ========================================================= CLBC ========================================================== */ + #define R_SDADC0_CLBC_CLBMD_Pos (0UL) /*!< CLBMD (Bit 0) */ + #define R_SDADC0_CLBC_CLBMD_Msk (0x3UL) /*!< CLBMD (Bitfield-Mask: 0x03) */ +/* ======================================================== CLBSTR ========================================================= */ + #define R_SDADC0_CLBSTR_CLBST_Pos (0UL) /*!< CLBST (Bit 0) */ + #define R_SDADC0_CLBSTR_CLBST_Msk (0x1UL) /*!< CLBST (Bitfield-Mask: 0x01) */ +/* ======================================================== CLBSSR ========================================================= */ + #define R_SDADC0_CLBSSR_CLBSS_Pos (0UL) /*!< CLBSS (Bit 0) */ + #define R_SDADC0_CLBSSR_CLBSS_Msk (0x1UL) /*!< CLBSS (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SPCR ========================================================== */ + #define R_SPI0_SPCR_SPRIE_Pos (7UL) /*!< SPRIE (Bit 7) */ + #define R_SPI0_SPCR_SPRIE_Msk (0x80UL) /*!< SPRIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPE_Pos (6UL) /*!< SPE (Bit 6) */ + #define R_SPI0_SPCR_SPE_Msk (0x40UL) /*!< SPE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPTIE_Pos (5UL) /*!< SPTIE (Bit 5) */ + #define R_SPI0_SPCR_SPTIE_Msk (0x20UL) /*!< SPTIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPEIE_Pos (4UL) /*!< SPEIE (Bit 4) */ + #define R_SPI0_SPCR_SPEIE_Msk (0x10UL) /*!< SPEIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_MSTR_Pos (3UL) /*!< MSTR (Bit 3) */ + #define R_SPI0_SPCR_MSTR_Msk (0x8UL) /*!< MSTR (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_MODFEN_Pos (2UL) /*!< MODFEN (Bit 2) */ + #define R_SPI0_SPCR_MODFEN_Msk (0x4UL) /*!< MODFEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_TXMD_Pos (1UL) /*!< TXMD (Bit 1) */ + #define R_SPI0_SPCR_TXMD_Msk (0x2UL) /*!< TXMD (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR_SPMS_Pos (0UL) /*!< SPMS (Bit 0) */ + #define R_SPI0_SPCR_SPMS_Msk (0x1UL) /*!< SPMS (Bitfield-Mask: 0x01) */ +/* ========================================================= SSLP ========================================================== */ + #define R_SPI0_SSLP_SSL3P_Pos (3UL) /*!< SSL3P (Bit 3) */ + #define R_SPI0_SSLP_SSL3P_Msk (0x8UL) /*!< SSL3P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL2P_Pos (2UL) /*!< SSL2P (Bit 2) */ + #define R_SPI0_SSLP_SSL2P_Msk (0x4UL) /*!< SSL2P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL1P_Pos (1UL) /*!< SSL1P (Bit 1) */ + #define R_SPI0_SSLP_SSL1P_Msk (0x2UL) /*!< SSL1P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL0P_Pos (0UL) /*!< SSL0P (Bit 0) */ + #define R_SPI0_SSLP_SSL0P_Msk (0x1UL) /*!< SSL0P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL4P_Pos (4UL) /*!< SSL4P (Bit 4) */ + #define R_SPI0_SSLP_SSL4P_Msk (0x10UL) /*!< SSL4P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL5P_Pos (5UL) /*!< SSL5P (Bit 5) */ + #define R_SPI0_SSLP_SSL5P_Msk (0x20UL) /*!< SSL5P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL6P_Pos (6UL) /*!< SSL6P (Bit 6) */ + #define R_SPI0_SSLP_SSL6P_Msk (0x40UL) /*!< SSL6P (Bitfield-Mask: 0x01) */ + #define R_SPI0_SSLP_SSL7P_Pos (7UL) /*!< SSL7P (Bit 7) */ + #define R_SPI0_SSLP_SSL7P_Msk (0x80UL) /*!< SSL7P (Bitfield-Mask: 0x01) */ +/* ========================================================= SPPCR ========================================================= */ + #define R_SPI0_SPPCR_MOIFE_Pos (5UL) /*!< MOIFE (Bit 5) */ + #define R_SPI0_SPPCR_MOIFE_Msk (0x20UL) /*!< MOIFE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_MOIFV_Pos (4UL) /*!< MOIFV (Bit 4) */ + #define R_SPI0_SPPCR_MOIFV_Msk (0x10UL) /*!< MOIFV (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_SPLP2_Pos (1UL) /*!< SPLP2 (Bit 1) */ + #define R_SPI0_SPPCR_SPLP2_Msk (0x2UL) /*!< SPLP2 (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPCR_SPLP_Pos (0UL) /*!< SPLP (Bit 0) */ + #define R_SPI0_SPPCR_SPLP_Msk (0x1UL) /*!< SPLP (Bitfield-Mask: 0x01) */ +/* ========================================================= SPSR ========================================================== */ + #define R_SPI0_SPSR_SPRF_Pos (7UL) /*!< SPRF (Bit 7) */ + #define R_SPI0_SPSR_SPRF_Msk (0x80UL) /*!< SPRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_SPTEF_Pos (5UL) /*!< SPTEF (Bit 5) */ + #define R_SPI0_SPSR_SPTEF_Msk (0x20UL) /*!< SPTEF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_UDRF_Pos (4UL) /*!< UDRF (Bit 4) */ + #define R_SPI0_SPSR_UDRF_Msk (0x10UL) /*!< UDRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_PERF_Pos (3UL) /*!< PERF (Bit 3) */ + #define R_SPI0_SPSR_PERF_Msk (0x8UL) /*!< PERF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_MODF_Pos (2UL) /*!< MODF (Bit 2) */ + #define R_SPI0_SPSR_MODF_Msk (0x4UL) /*!< MODF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_IDLNF_Pos (1UL) /*!< IDLNF (Bit 1) */ + #define R_SPI0_SPSR_IDLNF_Msk (0x2UL) /*!< IDLNF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_OVRF_Pos (0UL) /*!< OVRF (Bit 0) */ + #define R_SPI0_SPSR_OVRF_Msk (0x1UL) /*!< OVRF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPSR_CENDF_Pos (6UL) /*!< CENDF (Bit 6) */ + #define R_SPI0_SPSR_CENDF_Msk (0x40UL) /*!< CENDF (Bitfield-Mask: 0x01) */ +/* ========================================================= SPDR ========================================================== */ +/* ======================================================== SPDR_HA ======================================================== */ +/* ======================================================== SPDR_BY ======================================================== */ +/* ========================================================= SPSCR ========================================================= */ + #define R_SPI0_SPSCR_SPSLN_Pos (0UL) /*!< SPSLN (Bit 0) */ + #define R_SPI0_SPSCR_SPSLN_Msk (0x7UL) /*!< SPSLN (Bitfield-Mask: 0x07) */ +/* ========================================================= SPBR ========================================================== */ + #define R_SPI0_SPBR_SPR_Pos (0UL) /*!< SPR (Bit 0) */ + #define R_SPI0_SPBR_SPR_Msk (0xffUL) /*!< SPR (Bitfield-Mask: 0xff) */ +/* ========================================================= SPDCR ========================================================= */ + #define R_SPI0_SPDCR_SPBYT_Pos (6UL) /*!< SPBYT (Bit 6) */ + #define R_SPI0_SPDCR_SPBYT_Msk (0x40UL) /*!< SPBYT (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SPLW_Pos (5UL) /*!< SPLW (Bit 5) */ + #define R_SPI0_SPDCR_SPLW_Msk (0x20UL) /*!< SPLW (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SPRDTD_Pos (4UL) /*!< SPRDTD (Bit 4) */ + #define R_SPI0_SPDCR_SPRDTD_Msk (0x10UL) /*!< SPRDTD (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR_SPFC_Pos (0UL) /*!< SPFC (Bit 0) */ + #define R_SPI0_SPDCR_SPFC_Msk (0x3UL) /*!< SPFC (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPDCR_SLSEL_Pos (2UL) /*!< SLSEL (Bit 2) */ + #define R_SPI0_SPDCR_SLSEL_Msk (0xcUL) /*!< SLSEL (Bitfield-Mask: 0x03) */ +/* ========================================================= SPCKD ========================================================= */ + #define R_SPI0_SPCKD_SCKDL_Pos (0UL) /*!< SCKDL (Bit 0) */ + #define R_SPI0_SPCKD_SCKDL_Msk (0x7UL) /*!< SCKDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SSLND ========================================================= */ + #define R_SPI0_SSLND_SLNDL_Pos (0UL) /*!< SLNDL (Bit 0) */ + #define R_SPI0_SSLND_SLNDL_Msk (0x7UL) /*!< SLNDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SPND ========================================================== */ + #define R_SPI0_SPND_SPNDL_Pos (0UL) /*!< SPNDL (Bit 0) */ + #define R_SPI0_SPND_SPNDL_Msk (0x7UL) /*!< SPNDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCR2 ========================================================= */ + #define R_SPI0_SPCR2_SCKASE_Pos (4UL) /*!< SCKASE (Bit 4) */ + #define R_SPI0_SPCR2_SCKASE_Msk (0x10UL) /*!< SCKASE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_PTE_Pos (3UL) /*!< PTE (Bit 3) */ + #define R_SPI0_SPCR2_PTE_Msk (0x8UL) /*!< PTE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_SPIIE_Pos (2UL) /*!< SPIIE (Bit 2) */ + #define R_SPI0_SPCR2_SPIIE_Msk (0x4UL) /*!< SPIIE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_SPOE_Pos (1UL) /*!< SPOE (Bit 1) */ + #define R_SPI0_SPCR2_SPOE_Msk (0x2UL) /*!< SPOE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_SPPE_Pos (0UL) /*!< SPPE (Bit 0) */ + #define R_SPI0_SPCR2_SPPE_Msk (0x1UL) /*!< SPPE (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR2_SPTDDL_Pos (5UL) /*!< SPTDDL (Bit 5) */ + #define R_SPI0_SPCR2_SPTDDL_Msk (0xe0UL) /*!< SPTDDL (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCMD ========================================================= */ + #define R_SPI0_SPCMD_SCKDEN_Pos (15UL) /*!< SCKDEN (Bit 15) */ + #define R_SPI0_SPCMD_SCKDEN_Msk (0x8000UL) /*!< SCKDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SLNDEN_Pos (14UL) /*!< SLNDEN (Bit 14) */ + #define R_SPI0_SPCMD_SLNDEN_Msk (0x4000UL) /*!< SLNDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SPNDEN_Pos (13UL) /*!< SPNDEN (Bit 13) */ + #define R_SPI0_SPCMD_SPNDEN_Msk (0x2000UL) /*!< SPNDEN (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_LSBF_Pos (12UL) /*!< LSBF (Bit 12) */ + #define R_SPI0_SPCMD_LSBF_Msk (0x1000UL) /*!< LSBF (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SPB_Pos (8UL) /*!< SPB (Bit 8) */ + #define R_SPI0_SPCMD_SPB_Msk (0xf00UL) /*!< SPB (Bitfield-Mask: 0x0f) */ + #define R_SPI0_SPCMD_SSLKP_Pos (7UL) /*!< SSLKP (Bit 7) */ + #define R_SPI0_SPCMD_SSLKP_Msk (0x80UL) /*!< SSLKP (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_SSLA_Pos (4UL) /*!< SSLA (Bit 4) */ + #define R_SPI0_SPCMD_SSLA_Msk (0x70UL) /*!< SSLA (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPCMD_BRDV_Pos (2UL) /*!< BRDV (Bit 2) */ + #define R_SPI0_SPCMD_BRDV_Msk (0xcUL) /*!< BRDV (Bitfield-Mask: 0x03) */ + #define R_SPI0_SPCMD_CPOL_Pos (1UL) /*!< CPOL (Bit 1) */ + #define R_SPI0_SPCMD_CPOL_Msk (0x2UL) /*!< CPOL (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCMD_CPHA_Pos (0UL) /*!< CPHA (Bit 0) */ + #define R_SPI0_SPCMD_CPHA_Msk (0x1UL) /*!< CPHA (Bitfield-Mask: 0x01) */ +/* ======================================================== SPDCR2 ========================================================= */ + #define R_SPI0_SPDCR2_BYSW_Pos (0UL) /*!< BYSW (Bit 0) */ + #define R_SPI0_SPDCR2_BYSW_Msk (0x1UL) /*!< BYSW (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPDCR2_SINV_Pos (1UL) /*!< SINV (Bit 1) */ + #define R_SPI0_SPDCR2_SINV_Msk (0x2UL) /*!< SINV (Bitfield-Mask: 0x01) */ +/* ========================================================= SPSSR ========================================================= */ + #define R_SPI0_SPSSR_SPCP_Pos (0UL) /*!< SPCP (Bit 0) */ + #define R_SPI0_SPSSR_SPCP_Msk (0x7UL) /*!< SPCP (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPSSR_SPECM_Pos (4UL) /*!< SPECM (Bit 4) */ + #define R_SPI0_SPSSR_SPECM_Msk (0x70UL) /*!< SPECM (Bitfield-Mask: 0x07) */ +/* ========================================================= SPCR3 ========================================================= */ + #define R_SPI0_SPCR3_ETXMD_Pos (0UL) /*!< ETXMD (Bit 0) */ + #define R_SPI0_SPCR3_ETXMD_Msk (0x1UL) /*!< ETXMD (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR3_BFDS_Pos (1UL) /*!< BFDS (Bit 1) */ + #define R_SPI0_SPCR3_BFDS_Msk (0x2UL) /*!< BFDS (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPCR3_CENDIE_Pos (4UL) /*!< CENDIE (Bit 4) */ + #define R_SPI0_SPCR3_CENDIE_Msk (0x10UL) /*!< CENDIE (Bitfield-Mask: 0x01) */ +/* ========================================================= SPPR ========================================================== */ + #define R_SPI0_SPPR_BUFWID_Pos (4UL) /*!< BUFWID (Bit 4) */ + #define R_SPI0_SPPR_BUFWID_Msk (0x10UL) /*!< BUFWID (Bitfield-Mask: 0x01) */ + #define R_SPI0_SPPR_BUFNUM_Pos (8UL) /*!< BUFNUM (Bit 8) */ + #define R_SPI0_SPPR_BUFNUM_Msk (0x700UL) /*!< BUFNUM (Bitfield-Mask: 0x07) */ + #define R_SPI0_SPPR_CMDNUM_Pos (12UL) /*!< CMDNUM (Bit 12) */ + #define R_SPI0_SPPR_CMDNUM_Msk (0xf000UL) /*!< CMDNUM (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ R_SRAM ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== PARIOAD ======================================================== */ + #define R_SRAM_PARIOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_SRAM_PARIOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ======================================================= SRAMPRCR ======================================================== */ + #define R_SRAM_SRAMPRCR_KW_Pos (1UL) /*!< KW (Bit 1) */ + #define R_SRAM_SRAMPRCR_KW_Msk (0xfeUL) /*!< KW (Bitfield-Mask: 0x7f) */ + #define R_SRAM_SRAMPRCR_SRAMPRCR_Pos (0UL) /*!< SRAMPRCR (Bit 0) */ + #define R_SRAM_SRAMPRCR_SRAMPRCR_Msk (0x1UL) /*!< SRAMPRCR (Bitfield-Mask: 0x01) */ +/* ======================================================= SRAMWTSC ======================================================== */ +/* ======================================================== ECCMODE ======================================================== */ + #define R_SRAM_ECCMODE_ECCMOD_Pos (0UL) /*!< ECCMOD (Bit 0) */ + #define R_SRAM_ECCMODE_ECCMOD_Msk (0x3UL) /*!< ECCMOD (Bitfield-Mask: 0x03) */ +/* ======================================================== ECC2STS ======================================================== */ + #define R_SRAM_ECC2STS_ECC2ERR_Pos (0UL) /*!< ECC2ERR (Bit 0) */ + #define R_SRAM_ECC2STS_ECC2ERR_Msk (0x1UL) /*!< ECC2ERR (Bitfield-Mask: 0x01) */ +/* ======================================================= ECC1STSEN ======================================================= */ + #define R_SRAM_ECC1STSEN_E1STSEN_Pos (0UL) /*!< E1STSEN (Bit 0) */ + #define R_SRAM_ECC1STSEN_E1STSEN_Msk (0x1UL) /*!< E1STSEN (Bitfield-Mask: 0x01) */ +/* ======================================================== ECC1STS ======================================================== */ + #define R_SRAM_ECC1STS_ECC1ERR_Pos (0UL) /*!< ECC1ERR (Bit 0) */ + #define R_SRAM_ECC1STS_ECC1ERR_Msk (0x1UL) /*!< ECC1ERR (Bitfield-Mask: 0x01) */ +/* ======================================================== ECCPRCR ======================================================== */ + #define R_SRAM_ECCPRCR_KW_Pos (1UL) /*!< KW (Bit 1) */ + #define R_SRAM_ECCPRCR_KW_Msk (0xfeUL) /*!< KW (Bitfield-Mask: 0x7f) */ + #define R_SRAM_ECCPRCR_ECCPRCR_Pos (0UL) /*!< ECCPRCR (Bit 0) */ + #define R_SRAM_ECCPRCR_ECCPRCR_Msk (0x1UL) /*!< ECCPRCR (Bitfield-Mask: 0x01) */ +/* ======================================================= ECCPRCR2 ======================================================== */ + #define R_SRAM_ECCPRCR2_KW2_Pos (1UL) /*!< KW2 (Bit 1) */ + #define R_SRAM_ECCPRCR2_KW2_Msk (0xfeUL) /*!< KW2 (Bitfield-Mask: 0x7f) */ + #define R_SRAM_ECCPRCR2_ECCPRCR2_Pos (0UL) /*!< ECCPRCR2 (Bit 0) */ + #define R_SRAM_ECCPRCR2_ECCPRCR2_Msk (0x1UL) /*!< ECCPRCR2 (Bitfield-Mask: 0x01) */ +/* ======================================================== ECCETST ======================================================== */ + #define R_SRAM_ECCETST_TSTBYP_Pos (0UL) /*!< TSTBYP (Bit 0) */ + #define R_SRAM_ECCETST_TSTBYP_Msk (0x1UL) /*!< TSTBYP (Bitfield-Mask: 0x01) */ +/* ======================================================== ECCOAD ========================================================= */ + #define R_SRAM_ECCOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_SRAM_ECCOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ======================================================= SRAMPRCR2 ======================================================= */ + #define R_SRAM_SRAMPRCR2_SRAMPRCR2_Pos (0UL) /*!< SRAMPRCR2 (Bit 0) */ + #define R_SRAM_SRAMPRCR2_SRAMPRCR2_Msk (0x1UL) /*!< SRAMPRCR2 (Bitfield-Mask: 0x01) */ + #define R_SRAM_SRAMPRCR2_KW_Pos (1UL) /*!< KW (Bit 1) */ + #define R_SRAM_SRAMPRCR2_KW_Msk (0xfeUL) /*!< KW (Bitfield-Mask: 0x7f) */ + +/* =========================================================================================================================== */ +/* ================ R_SYSTEM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SBYCR ========================================================= */ + #define R_SYSTEM_SBYCR_SSBY_Pos (15UL) /*!< SSBY (Bit 15) */ + #define R_SYSTEM_SBYCR_SSBY_Msk (0x8000UL) /*!< SSBY (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SBYCR_OPE_Pos (14UL) /*!< OPE (Bit 14) */ + #define R_SYSTEM_SBYCR_OPE_Msk (0x4000UL) /*!< OPE (Bitfield-Mask: 0x01) */ +/* ======================================================== MSTPCRA ======================================================== */ + #define R_SYSTEM_MSTPCRA_MSTPA_Pos (0UL) /*!< MSTPA (Bit 0) */ + #define R_SYSTEM_MSTPCRA_MSTPA_Msk (0x1UL) /*!< MSTPA (Bitfield-Mask: 0x01) */ +/* ======================================================= SCKDIVCR ======================================================== */ + #define R_SYSTEM_SCKDIVCR_FCK_Pos (28UL) /*!< FCK (Bit 28) */ + #define R_SYSTEM_SCKDIVCR_FCK_Msk (0x70000000UL) /*!< FCK (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_ICK_Pos (24UL) /*!< ICK (Bit 24) */ + #define R_SYSTEM_SCKDIVCR_ICK_Msk (0x7000000UL) /*!< ICK (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_BCK_Pos (16UL) /*!< BCK (Bit 16) */ + #define R_SYSTEM_SCKDIVCR_BCK_Msk (0x70000UL) /*!< BCK (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_PCKA_Pos (12UL) /*!< PCKA (Bit 12) */ + #define R_SYSTEM_SCKDIVCR_PCKA_Msk (0x7000UL) /*!< PCKA (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_PCKB_Pos (8UL) /*!< PCKB (Bit 8) */ + #define R_SYSTEM_SCKDIVCR_PCKB_Msk (0x700UL) /*!< PCKB (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_PCKC_Pos (4UL) /*!< PCKC (Bit 4) */ + #define R_SYSTEM_SCKDIVCR_PCKC_Msk (0x70UL) /*!< PCKC (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCKDIVCR_PCKD_Pos (0UL) /*!< PCKD (Bit 0) */ + #define R_SYSTEM_SCKDIVCR_PCKD_Msk (0x7UL) /*!< PCKD (Bitfield-Mask: 0x07) */ +/* ======================================================= SCKDIVCR2 ======================================================= */ + #define R_SYSTEM_SCKDIVCR2_UCK_Pos (4UL) /*!< UCK (Bit 4) */ + #define R_SYSTEM_SCKDIVCR2_UCK_Msk (0x70UL) /*!< UCK (Bitfield-Mask: 0x07) */ +/* ======================================================== SCKSCR ========================================================= */ + #define R_SYSTEM_SCKSCR_CKSEL_Pos (0UL) /*!< CKSEL (Bit 0) */ + #define R_SYSTEM_SCKSCR_CKSEL_Msk (0x7UL) /*!< CKSEL (Bitfield-Mask: 0x07) */ +/* ======================================================== PLLCCR ========================================================= */ + #define R_SYSTEM_PLLCCR_PLLMUL_Pos (8UL) /*!< PLLMUL (Bit 8) */ + #define R_SYSTEM_PLLCCR_PLLMUL_Msk (0x3f00UL) /*!< PLLMUL (Bitfield-Mask: 0x3f) */ + #define R_SYSTEM_PLLCCR_PLSRCSEL_Pos (4UL) /*!< PLSRCSEL (Bit 4) */ + #define R_SYSTEM_PLLCCR_PLSRCSEL_Msk (0x10UL) /*!< PLSRCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PLLCCR_PLIDIV_Pos (0UL) /*!< PLIDIV (Bit 0) */ + #define R_SYSTEM_PLLCCR_PLIDIV_Msk (0x3UL) /*!< PLIDIV (Bitfield-Mask: 0x03) */ +/* ========================================================= PLLCR ========================================================= */ + #define R_SYSTEM_PLLCR_PLLSTP_Pos (0UL) /*!< PLLSTP (Bit 0) */ + #define R_SYSTEM_PLLCR_PLLSTP_Msk (0x1UL) /*!< PLLSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== PLLCCR2 ======================================================== */ + #define R_SYSTEM_PLLCCR2_PLODIV_Pos (6UL) /*!< PLODIV (Bit 6) */ + #define R_SYSTEM_PLLCCR2_PLODIV_Msk (0xc0UL) /*!< PLODIV (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_PLLCCR2_PLLMUL_Pos (0UL) /*!< PLLMUL (Bit 0) */ + #define R_SYSTEM_PLLCCR2_PLLMUL_Msk (0x1fUL) /*!< PLLMUL (Bitfield-Mask: 0x1f) */ +/* ========================================================= BCKCR ========================================================= */ + #define R_SYSTEM_BCKCR_BCLKDIV_Pos (0UL) /*!< BCLKDIV (Bit 0) */ + #define R_SYSTEM_BCKCR_BCLKDIV_Msk (0x1UL) /*!< BCLKDIV (Bitfield-Mask: 0x01) */ +/* ======================================================== MEMWAIT ======================================================== */ + #define R_SYSTEM_MEMWAIT_MEMWAIT_Pos (0UL) /*!< MEMWAIT (Bit 0) */ + #define R_SYSTEM_MEMWAIT_MEMWAIT_Msk (0x1UL) /*!< MEMWAIT (Bitfield-Mask: 0x01) */ +/* ======================================================== MOSCCR ========================================================= */ + #define R_SYSTEM_MOSCCR_MOSTP_Pos (0UL) /*!< MOSTP (Bit 0) */ + #define R_SYSTEM_MOSCCR_MOSTP_Msk (0x1UL) /*!< MOSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== HOCOCR ========================================================= */ + #define R_SYSTEM_HOCOCR_HCSTP_Pos (0UL) /*!< HCSTP (Bit 0) */ + #define R_SYSTEM_HOCOCR_HCSTP_Msk (0x1UL) /*!< HCSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== HOCOCR2 ======================================================== */ + #define R_SYSTEM_HOCOCR2_HCFRQ0_Pos (0UL) /*!< HCFRQ0 (Bit 0) */ + #define R_SYSTEM_HOCOCR2_HCFRQ0_Msk (0x3UL) /*!< HCFRQ0 (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_HOCOCR2_HCFRQ1_Pos (3UL) /*!< HCFRQ1 (Bit 3) */ + #define R_SYSTEM_HOCOCR2_HCFRQ1_Msk (0x38UL) /*!< HCFRQ1 (Bitfield-Mask: 0x07) */ +/* ======================================================== MOCOCR ========================================================= */ + #define R_SYSTEM_MOCOCR_MCSTP_Pos (0UL) /*!< MCSTP (Bit 0) */ + #define R_SYSTEM_MOCOCR_MCSTP_Msk (0x1UL) /*!< MCSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== FLLCR1 ========================================================= */ + #define R_SYSTEM_FLLCR1_FLLEN_Pos (0UL) /*!< FLLEN (Bit 0) */ + #define R_SYSTEM_FLLCR1_FLLEN_Msk (0x1UL) /*!< FLLEN (Bitfield-Mask: 0x01) */ +/* ======================================================== FLLCR2 ========================================================= */ + #define R_SYSTEM_FLLCR2_FLLCNTL_Pos (0UL) /*!< FLLCNTL (Bit 0) */ + #define R_SYSTEM_FLLCR2_FLLCNTL_Msk (0x7ffUL) /*!< FLLCNTL (Bitfield-Mask: 0x7ff) */ +/* ========================================================= OSCSF ========================================================= */ + #define R_SYSTEM_OSCSF_PLLSF_Pos (5UL) /*!< PLLSF (Bit 5) */ + #define R_SYSTEM_OSCSF_PLLSF_Msk (0x20UL) /*!< PLLSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OSCSF_MOSCSF_Pos (3UL) /*!< MOSCSF (Bit 3) */ + #define R_SYSTEM_OSCSF_MOSCSF_Msk (0x8UL) /*!< MOSCSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OSCSF_HOCOSF_Pos (0UL) /*!< HOCOSF (Bit 0) */ + #define R_SYSTEM_OSCSF_HOCOSF_Msk (0x1UL) /*!< HOCOSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OSCSF_PLL2SF_Pos (6UL) /*!< PLL2SF (Bit 6) */ + #define R_SYSTEM_OSCSF_PLL2SF_Msk (0x40UL) /*!< PLL2SF (Bitfield-Mask: 0x01) */ +/* ========================================================= CKOCR ========================================================= */ + #define R_SYSTEM_CKOCR_CKOEN_Pos (7UL) /*!< CKOEN (Bit 7) */ + #define R_SYSTEM_CKOCR_CKOEN_Msk (0x80UL) /*!< CKOEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CKOCR_CKODIV_Pos (4UL) /*!< CKODIV (Bit 4) */ + #define R_SYSTEM_CKOCR_CKODIV_Msk (0x70UL) /*!< CKODIV (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_CKOCR_CKOSEL_Pos (0UL) /*!< CKOSEL (Bit 0) */ + #define R_SYSTEM_CKOCR_CKOSEL_Msk (0x7UL) /*!< CKOSEL (Bitfield-Mask: 0x07) */ +/* ======================================================== TRCKCR ========================================================= */ + #define R_SYSTEM_TRCKCR_TRCKEN_Pos (7UL) /*!< TRCKEN (Bit 7) */ + #define R_SYSTEM_TRCKCR_TRCKEN_Msk (0x80UL) /*!< TRCKEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_TRCKCR_TRCK_Pos (0UL) /*!< TRCK (Bit 0) */ + #define R_SYSTEM_TRCKCR_TRCK_Msk (0xfUL) /*!< TRCK (Bitfield-Mask: 0x0f) */ +/* ======================================================== OSTDCR ========================================================= */ + #define R_SYSTEM_OSTDCR_OSTDE_Pos (7UL) /*!< OSTDE (Bit 7) */ + #define R_SYSTEM_OSTDCR_OSTDE_Msk (0x80UL) /*!< OSTDE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OSTDCR_OSTDIE_Pos (0UL) /*!< OSTDIE (Bit 0) */ + #define R_SYSTEM_OSTDCR_OSTDIE_Msk (0x1UL) /*!< OSTDIE (Bitfield-Mask: 0x01) */ +/* ======================================================== OSTDSR ========================================================= */ + #define R_SYSTEM_OSTDSR_OSTDF_Pos (0UL) /*!< OSTDF (Bit 0) */ + #define R_SYSTEM_OSTDSR_OSTDF_Msk (0x1UL) /*!< OSTDF (Bitfield-Mask: 0x01) */ +/* ========================================================= LPOPT ========================================================= */ + #define R_SYSTEM_LPOPT_LPOPTEN_Pos (7UL) /*!< LPOPTEN (Bit 7) */ + #define R_SYSTEM_LPOPT_LPOPTEN_Msk (0x80UL) /*!< LPOPTEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPOPT_BPFCLKDIS_Pos (3UL) /*!< BPFCLKDIS (Bit 3) */ + #define R_SYSTEM_LPOPT_BPFCLKDIS_Msk (0x8UL) /*!< BPFCLKDIS (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPOPT_DCLKDIS_Pos (1UL) /*!< DCLKDIS (Bit 1) */ + #define R_SYSTEM_LPOPT_DCLKDIS_Msk (0x6UL) /*!< DCLKDIS (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_LPOPT_MPUDIS_Pos (0UL) /*!< MPUDIS (Bit 0) */ + #define R_SYSTEM_LPOPT_MPUDIS_Msk (0x1UL) /*!< MPUDIS (Bitfield-Mask: 0x01) */ +/* ======================================================= SLCDSCKCR ======================================================= */ + #define R_SYSTEM_SLCDSCKCR_LCDSCKEN_Pos (7UL) /*!< LCDSCKEN (Bit 7) */ + #define R_SYSTEM_SLCDSCKCR_LCDSCKEN_Msk (0x80UL) /*!< LCDSCKEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SLCDSCKCR_LCDSCKSEL_Pos (0UL) /*!< LCDSCKSEL (Bit 0) */ + #define R_SYSTEM_SLCDSCKCR_LCDSCKSEL_Msk (0x7UL) /*!< LCDSCKSEL (Bitfield-Mask: 0x07) */ +/* ======================================================== EBCKOCR ======================================================== */ + #define R_SYSTEM_EBCKOCR_EBCKOEN_Pos (0UL) /*!< EBCKOEN (Bit 0) */ + #define R_SYSTEM_EBCKOCR_EBCKOEN_Msk (0x1UL) /*!< EBCKOEN (Bitfield-Mask: 0x01) */ +/* ======================================================== SDCKOCR ======================================================== */ + #define R_SYSTEM_SDCKOCR_SDCKOEN_Pos (0UL) /*!< SDCKOEN (Bit 0) */ + #define R_SYSTEM_SDCKOCR_SDCKOEN_Msk (0x1UL) /*!< SDCKOEN (Bitfield-Mask: 0x01) */ +/* ======================================================= MOCOUTCR ======================================================== */ + #define R_SYSTEM_MOCOUTCR_MOCOUTRM_Pos (0UL) /*!< MOCOUTRM (Bit 0) */ + #define R_SYSTEM_MOCOUTCR_MOCOUTRM_Msk (0xffUL) /*!< MOCOUTRM (Bitfield-Mask: 0xff) */ +/* ======================================================= HOCOUTCR ======================================================== */ + #define R_SYSTEM_HOCOUTCR_HOCOUTRM_Pos (0UL) /*!< HOCOUTRM (Bit 0) */ + #define R_SYSTEM_HOCOUTCR_HOCOUTRM_Msk (0xffUL) /*!< HOCOUTRM (Bitfield-Mask: 0xff) */ +/* ========================================================= SNZCR ========================================================= */ + #define R_SYSTEM_SNZCR_SNZE_Pos (7UL) /*!< SNZE (Bit 7) */ + #define R_SYSTEM_SNZCR_SNZE_Msk (0x80UL) /*!< SNZE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZCR_SNZDTCEN_Pos (1UL) /*!< SNZDTCEN (Bit 1) */ + #define R_SYSTEM_SNZCR_SNZDTCEN_Msk (0x2UL) /*!< SNZDTCEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZCR_RXDREQEN_Pos (0UL) /*!< RXDREQEN (Bit 0) */ + #define R_SYSTEM_SNZCR_RXDREQEN_Msk (0x1UL) /*!< RXDREQEN (Bitfield-Mask: 0x01) */ +/* ======================================================== SNZEDCR ======================================================== */ + #define R_SYSTEM_SNZEDCR_SCI0UMTED_Pos (7UL) /*!< SCI0UMTED (Bit 7) */ + #define R_SYSTEM_SNZEDCR_SCI0UMTED_Msk (0x80UL) /*!< SCI0UMTED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_AD1UMTED_Pos (6UL) /*!< AD1UMTED (Bit 6) */ + #define R_SYSTEM_SNZEDCR_AD1UMTED_Msk (0x40UL) /*!< AD1UMTED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_AD1MATED_Pos (5UL) /*!< AD1MATED (Bit 5) */ + #define R_SYSTEM_SNZEDCR_AD1MATED_Msk (0x20UL) /*!< AD1MATED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_AD0UMTED_Pos (4UL) /*!< AD0UMTED (Bit 4) */ + #define R_SYSTEM_SNZEDCR_AD0UMTED_Msk (0x10UL) /*!< AD0UMTED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_AD0MATED_Pos (3UL) /*!< AD0MATED (Bit 3) */ + #define R_SYSTEM_SNZEDCR_AD0MATED_Msk (0x8UL) /*!< AD0MATED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_DTCNZRED_Pos (2UL) /*!< DTCNZRED (Bit 2) */ + #define R_SYSTEM_SNZEDCR_DTCNZRED_Msk (0x4UL) /*!< DTCNZRED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_DTCZRED_Pos (1UL) /*!< DTCZRED (Bit 1) */ + #define R_SYSTEM_SNZEDCR_DTCZRED_Msk (0x2UL) /*!< DTCZRED (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZEDCR_AGT1UNFED_Pos (0UL) /*!< AGT1UNFED (Bit 0) */ + #define R_SYSTEM_SNZEDCR_AGT1UNFED_Msk (0x1UL) /*!< AGT1UNFED (Bitfield-Mask: 0x01) */ +/* ======================================================= SNZREQCR ======================================================== */ + #define R_SYSTEM_SNZREQCR_SNZREQEN30_Pos (30UL) /*!< SNZREQEN30 (Bit 30) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN30_Msk (0x40000000UL) /*!< SNZREQEN30 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN29_Pos (29UL) /*!< SNZREQEN29 (Bit 29) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN29_Msk (0x20000000UL) /*!< SNZREQEN29 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN28_Pos (28UL) /*!< SNZREQEN28 (Bit 28) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN28_Msk (0x10000000UL) /*!< SNZREQEN28 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN25_Pos (25UL) /*!< SNZREQEN25 (Bit 25) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN25_Msk (0x2000000UL) /*!< SNZREQEN25 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN24_Pos (24UL) /*!< SNZREQEN24 (Bit 24) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN24_Msk (0x1000000UL) /*!< SNZREQEN24 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN23_Pos (23UL) /*!< SNZREQEN23 (Bit 23) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN23_Msk (0x800000UL) /*!< SNZREQEN23 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN22_Pos (22UL) /*!< SNZREQEN22 (Bit 22) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN22_Msk (0x400000UL) /*!< SNZREQEN22 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN17_Pos (17UL) /*!< SNZREQEN17 (Bit 17) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN17_Msk (0x20000UL) /*!< SNZREQEN17 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN_Pos (0UL) /*!< SNZREQEN (Bit 0) */ + #define R_SYSTEM_SNZREQCR_SNZREQEN_Msk (0x1UL) /*!< SNZREQEN (Bitfield-Mask: 0x01) */ +/* ======================================================== FLSTOP ========================================================= */ + #define R_SYSTEM_FLSTOP_FLSTPF_Pos (4UL) /*!< FLSTPF (Bit 4) */ + #define R_SYSTEM_FLSTOP_FLSTPF_Msk (0x10UL) /*!< FLSTPF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_FLSTOP_FLSTOP_Pos (0UL) /*!< FLSTOP (Bit 0) */ + #define R_SYSTEM_FLSTOP_FLSTOP_Msk (0x1UL) /*!< FLSTOP (Bitfield-Mask: 0x01) */ +/* ========================================================= PSMCR ========================================================= */ + #define R_SYSTEM_PSMCR_PSMC_Pos (0UL) /*!< PSMC (Bit 0) */ + #define R_SYSTEM_PSMCR_PSMC_Msk (0x3UL) /*!< PSMC (Bitfield-Mask: 0x03) */ +/* ========================================================= OPCCR ========================================================= */ + #define R_SYSTEM_OPCCR_OPCMTSF_Pos (4UL) /*!< OPCMTSF (Bit 4) */ + #define R_SYSTEM_OPCCR_OPCMTSF_Msk (0x10UL) /*!< OPCMTSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OPCCR_OPCM_Pos (0UL) /*!< OPCM (Bit 0) */ + #define R_SYSTEM_OPCCR_OPCM_Msk (0x3UL) /*!< OPCM (Bitfield-Mask: 0x03) */ +/* ======================================================== SOPCCR ========================================================= */ + #define R_SYSTEM_SOPCCR_SOPCMTSF_Pos (4UL) /*!< SOPCMTSF (Bit 4) */ + #define R_SYSTEM_SOPCCR_SOPCMTSF_Msk (0x10UL) /*!< SOPCMTSF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SOPCCR_SOPCM_Pos (0UL) /*!< SOPCM (Bit 0) */ + #define R_SYSTEM_SOPCCR_SOPCM_Msk (0x1UL) /*!< SOPCM (Bitfield-Mask: 0x01) */ +/* ======================================================= MOSCWTCR ======================================================== */ + #define R_SYSTEM_MOSCWTCR_MSTS_Pos (0UL) /*!< MSTS (Bit 0) */ + #define R_SYSTEM_MOSCWTCR_MSTS_Msk (0xfUL) /*!< MSTS (Bitfield-Mask: 0x0f) */ +/* ======================================================= HOCOWTCR ======================================================== */ + #define R_SYSTEM_HOCOWTCR_HSTS_Pos (0UL) /*!< HSTS (Bit 0) */ + #define R_SYSTEM_HOCOWTCR_HSTS_Msk (0x7UL) /*!< HSTS (Bitfield-Mask: 0x07) */ +/* ======================================================== RSTSR1 ========================================================= */ + #define R_SYSTEM_RSTSR1_SPERF_Pos (12UL) /*!< SPERF (Bit 12) */ + #define R_SYSTEM_RSTSR1_SPERF_Msk (0x1000UL) /*!< SPERF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_BUSMRF_Pos (11UL) /*!< BUSMRF (Bit 11) */ + #define R_SYSTEM_RSTSR1_BUSMRF_Msk (0x800UL) /*!< BUSMRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_BUSSRF_Pos (10UL) /*!< BUSSRF (Bit 10) */ + #define R_SYSTEM_RSTSR1_BUSSRF_Msk (0x400UL) /*!< BUSSRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_REERF_Pos (9UL) /*!< REERF (Bit 9) */ + #define R_SYSTEM_RSTSR1_REERF_Msk (0x200UL) /*!< REERF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_RPERF_Pos (8UL) /*!< RPERF (Bit 8) */ + #define R_SYSTEM_RSTSR1_RPERF_Msk (0x100UL) /*!< RPERF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_SWRF_Pos (2UL) /*!< SWRF (Bit 2) */ + #define R_SYSTEM_RSTSR1_SWRF_Msk (0x4UL) /*!< SWRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_WDTRF_Pos (1UL) /*!< WDTRF (Bit 1) */ + #define R_SYSTEM_RSTSR1_WDTRF_Msk (0x2UL) /*!< WDTRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_IWDTRF_Pos (0UL) /*!< IWDTRF (Bit 0) */ + #define R_SYSTEM_RSTSR1_IWDTRF_Msk (0x1UL) /*!< IWDTRF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_TZERF_Pos (13UL) /*!< TZERF (Bit 13) */ + #define R_SYSTEM_RSTSR1_TZERF_Msk (0x2000UL) /*!< TZERF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR1_CPERF_Pos (15UL) /*!< CPERF (Bit 15) */ + #define R_SYSTEM_RSTSR1_CPERF_Msk (0x8000UL) /*!< CPERF (Bitfield-Mask: 0x01) */ +/* ======================================================== STCONR ========================================================= */ + #define R_SYSTEM_STCONR_STCON_Pos (0UL) /*!< STCON (Bit 0) */ + #define R_SYSTEM_STCONR_STCON_Msk (0x3UL) /*!< STCON (Bitfield-Mask: 0x03) */ +/* ======================================================== LVD1CR1 ======================================================== */ + #define R_SYSTEM_LVD1CR1_IRQSEL_Pos (2UL) /*!< IRQSEL (Bit 2) */ + #define R_SYSTEM_LVD1CR1_IRQSEL_Msk (0x4UL) /*!< IRQSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1CR1_IDTSEL_Pos (0UL) /*!< IDTSEL (Bit 0) */ + #define R_SYSTEM_LVD1CR1_IDTSEL_Msk (0x3UL) /*!< IDTSEL (Bitfield-Mask: 0x03) */ +/* ======================================================== LVD2CR1 ======================================================== */ + #define R_SYSTEM_LVD2CR1_IRQSEL_Pos (2UL) /*!< IRQSEL (Bit 2) */ + #define R_SYSTEM_LVD2CR1_IRQSEL_Msk (0x4UL) /*!< IRQSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2CR1_IDTSEL_Pos (0UL) /*!< IDTSEL (Bit 0) */ + #define R_SYSTEM_LVD2CR1_IDTSEL_Msk (0x3UL) /*!< IDTSEL (Bitfield-Mask: 0x03) */ +/* ====================================================== USBCKCR_ALT ====================================================== */ + #define R_SYSTEM_USBCKCR_ALT_USBCLKSEL_Pos (0UL) /*!< USBCLKSEL (Bit 0) */ + #define R_SYSTEM_USBCKCR_ALT_USBCLKSEL_Msk (0x1UL) /*!< USBCLKSEL (Bitfield-Mask: 0x01) */ +/* ======================================================= SDADCCKCR ======================================================= */ + #define R_SYSTEM_SDADCCKCR_SDADCCKSEL_Pos (0UL) /*!< SDADCCKSEL (Bit 0) */ + #define R_SYSTEM_SDADCCKCR_SDADCCKSEL_Msk (0x1UL) /*!< SDADCCKSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SDADCCKCR_SDADCCKEN_Pos (7UL) /*!< SDADCCKEN (Bit 7) */ + #define R_SYSTEM_SDADCCKCR_SDADCCKEN_Msk (0x80UL) /*!< SDADCCKEN (Bitfield-Mask: 0x01) */ +/* ======================================================== LVD1SR ========================================================= */ + #define R_SYSTEM_LVD1SR_MON_Pos (1UL) /*!< MON (Bit 1) */ + #define R_SYSTEM_LVD1SR_MON_Msk (0x2UL) /*!< MON (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1SR_DET_Pos (0UL) /*!< DET (Bit 0) */ + #define R_SYSTEM_LVD1SR_DET_Msk (0x1UL) /*!< DET (Bitfield-Mask: 0x01) */ +/* ======================================================== LVD2SR ========================================================= */ + #define R_SYSTEM_LVD2SR_MON_Pos (1UL) /*!< MON (Bit 1) */ + #define R_SYSTEM_LVD2SR_MON_Msk (0x2UL) /*!< MON (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2SR_DET_Pos (0UL) /*!< DET (Bit 0) */ + #define R_SYSTEM_LVD2SR_DET_Msk (0x1UL) /*!< DET (Bitfield-Mask: 0x01) */ +/* ========================================================= PRCR ========================================================== */ + #define R_SYSTEM_PRCR_PRKEY_Pos (8UL) /*!< PRKEY (Bit 8) */ + #define R_SYSTEM_PRCR_PRKEY_Msk (0xff00UL) /*!< PRKEY (Bitfield-Mask: 0xff) */ + #define R_SYSTEM_PRCR_PRC3_Pos (3UL) /*!< PRC3 (Bit 3) */ + #define R_SYSTEM_PRCR_PRC3_Msk (0x8UL) /*!< PRC3 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PRCR_PRC1_Pos (1UL) /*!< PRC1 (Bit 1) */ + #define R_SYSTEM_PRCR_PRC1_Msk (0x2UL) /*!< PRC1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PRCR_PRC0_Pos (0UL) /*!< PRC0 (Bit 0) */ + #define R_SYSTEM_PRCR_PRC0_Msk (0x1UL) /*!< PRC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PRCR_PRC4_Pos (4UL) /*!< PRC4 (Bit 4) */ + #define R_SYSTEM_PRCR_PRC4_Msk (0x10UL) /*!< PRC4 (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIER0 ======================================================== */ + #define R_SYSTEM_DPSIER0_DIRQE_Pos (0UL) /*!< DIRQE (Bit 0) */ + #define R_SYSTEM_DPSIER0_DIRQE_Msk (0x1UL) /*!< DIRQE (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIER1 ======================================================== */ + #define R_SYSTEM_DPSIER1_DIRQE_Pos (0UL) /*!< DIRQE (Bit 0) */ + #define R_SYSTEM_DPSIER1_DIRQE_Msk (0x1UL) /*!< DIRQE (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIER2 ======================================================== */ + #define R_SYSTEM_DPSIER2_DNMIE_Pos (4UL) /*!< DNMIE (Bit 4) */ + #define R_SYSTEM_DPSIER2_DNMIE_Msk (0x10UL) /*!< DNMIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER2_DRTCAIE_Pos (3UL) /*!< DRTCAIE (Bit 3) */ + #define R_SYSTEM_DPSIER2_DRTCAIE_Msk (0x8UL) /*!< DRTCAIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER2_DTRTCIIE_Pos (2UL) /*!< DTRTCIIE (Bit 2) */ + #define R_SYSTEM_DPSIER2_DTRTCIIE_Msk (0x4UL) /*!< DTRTCIIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER2_DLVD2IE_Pos (1UL) /*!< DLVD2IE (Bit 1) */ + #define R_SYSTEM_DPSIER2_DLVD2IE_Msk (0x2UL) /*!< DLVD2IE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER2_DLVD1IE_Pos (0UL) /*!< DLVD1IE (Bit 0) */ + #define R_SYSTEM_DPSIER2_DLVD1IE_Msk (0x1UL) /*!< DLVD1IE (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIER3 ======================================================== */ + #define R_SYSTEM_DPSIER3_DAGT1IE_Pos (2UL) /*!< DAGT1IE (Bit 2) */ + #define R_SYSTEM_DPSIER3_DAGT1IE_Msk (0x4UL) /*!< DAGT1IE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER3_DUSBHSIE_Pos (1UL) /*!< DUSBHSIE (Bit 1) */ + #define R_SYSTEM_DPSIER3_DUSBHSIE_Msk (0x2UL) /*!< DUSBHSIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER3_DUSBFSIE_Pos (0UL) /*!< DUSBFSIE (Bit 0) */ + #define R_SYSTEM_DPSIER3_DUSBFSIE_Msk (0x1UL) /*!< DUSBFSIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIER3_DAGT3IE_Pos (3UL) /*!< DAGT3IE (Bit 3) */ + #define R_SYSTEM_DPSIER3_DAGT3IE_Msk (0x8UL) /*!< DAGT3IE (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIFR0 ======================================================== */ + #define R_SYSTEM_DPSIFR0_DIRQF_Pos (0UL) /*!< DIRQF (Bit 0) */ + #define R_SYSTEM_DPSIFR0_DIRQF_Msk (0x1UL) /*!< DIRQF (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIFR1 ======================================================== */ + #define R_SYSTEM_DPSIFR1_DIRQF_Pos (0UL) /*!< DIRQF (Bit 0) */ + #define R_SYSTEM_DPSIFR1_DIRQF_Msk (0x1UL) /*!< DIRQF (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIFR2 ======================================================== */ + #define R_SYSTEM_DPSIFR2_DNMIF_Pos (4UL) /*!< DNMIF (Bit 4) */ + #define R_SYSTEM_DPSIFR2_DNMIF_Msk (0x10UL) /*!< DNMIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR2_DRTCAIF_Pos (3UL) /*!< DRTCAIF (Bit 3) */ + #define R_SYSTEM_DPSIFR2_DRTCAIF_Msk (0x8UL) /*!< DRTCAIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR2_DTRTCIIF_Pos (2UL) /*!< DTRTCIIF (Bit 2) */ + #define R_SYSTEM_DPSIFR2_DTRTCIIF_Msk (0x4UL) /*!< DTRTCIIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR2_DLVD2IF_Pos (1UL) /*!< DLVD2IF (Bit 1) */ + #define R_SYSTEM_DPSIFR2_DLVD2IF_Msk (0x2UL) /*!< DLVD2IF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR2_DLVD1IF_Pos (0UL) /*!< DLVD1IF (Bit 0) */ + #define R_SYSTEM_DPSIFR2_DLVD1IF_Msk (0x1UL) /*!< DLVD1IF (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSIFR3 ======================================================== */ + #define R_SYSTEM_DPSIFR3_DAGT1IF_Pos (2UL) /*!< DAGT1IF (Bit 2) */ + #define R_SYSTEM_DPSIFR3_DAGT1IF_Msk (0x4UL) /*!< DAGT1IF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR3_DUSBHSIF_Pos (1UL) /*!< DUSBHSIF (Bit 1) */ + #define R_SYSTEM_DPSIFR3_DUSBHSIF_Msk (0x2UL) /*!< DUSBHSIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR3_DUSBFSIF_Pos (0UL) /*!< DUSBFSIF (Bit 0) */ + #define R_SYSTEM_DPSIFR3_DUSBFSIF_Msk (0x1UL) /*!< DUSBFSIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIFR3_DAGT3IF_Pos (3UL) /*!< DAGT3IF (Bit 3) */ + #define R_SYSTEM_DPSIFR3_DAGT3IF_Msk (0x8UL) /*!< DAGT3IF (Bitfield-Mask: 0x01) */ +/* ======================================================= DPSIEGR0 ======================================================== */ + #define R_SYSTEM_DPSIEGR0_DIRQEG_Pos (0UL) /*!< DIRQEG (Bit 0) */ + #define R_SYSTEM_DPSIEGR0_DIRQEG_Msk (0x1UL) /*!< DIRQEG (Bitfield-Mask: 0x01) */ +/* ======================================================= DPSIEGR1 ======================================================== */ + #define R_SYSTEM_DPSIEGR1_DIRQEG_Pos (0UL) /*!< DIRQEG (Bit 0) */ + #define R_SYSTEM_DPSIEGR1_DIRQEG_Msk (0x1UL) /*!< DIRQEG (Bitfield-Mask: 0x01) */ +/* ======================================================= DPSIEGR2 ======================================================== */ + #define R_SYSTEM_DPSIEGR2_DNMIEG_Pos (4UL) /*!< DNMIEG (Bit 4) */ + #define R_SYSTEM_DPSIEGR2_DNMIEG_Msk (0x10UL) /*!< DNMIEG (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIEGR2_DLVD2IEG_Pos (1UL) /*!< DLVD2IEG (Bit 1) */ + #define R_SYSTEM_DPSIEGR2_DLVD2IEG_Msk (0x2UL) /*!< DLVD2IEG (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSIEGR2_DLVD1IEG_Pos (0UL) /*!< DLVD1IEG (Bit 0) */ + #define R_SYSTEM_DPSIEGR2_DLVD1IEG_Msk (0x1UL) /*!< DLVD1IEG (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSBYCR ======================================================== */ + #define R_SYSTEM_DPSBYCR_DPSBY_Pos (7UL) /*!< DPSBY (Bit 7) */ + #define R_SYSTEM_DPSBYCR_DPSBY_Msk (0x80UL) /*!< DPSBY (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSBYCR_IOKEEP_Pos (6UL) /*!< IOKEEP (Bit 6) */ + #define R_SYSTEM_DPSBYCR_IOKEEP_Msk (0x40UL) /*!< IOKEEP (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPSBYCR_DEEPCUT_Pos (0UL) /*!< DEEPCUT (Bit 0) */ + #define R_SYSTEM_DPSBYCR_DEEPCUT_Msk (0x3UL) /*!< DEEPCUT (Bitfield-Mask: 0x03) */ +/* ======================================================== SYOCDCR ======================================================== */ + #define R_SYSTEM_SYOCDCR_DBGEN_Pos (7UL) /*!< DBGEN (Bit 7) */ + #define R_SYSTEM_SYOCDCR_DBGEN_Msk (0x80UL) /*!< DBGEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SYOCDCR_DOCDF_Pos (0UL) /*!< DOCDF (Bit 0) */ + #define R_SYSTEM_SYOCDCR_DOCDF_Msk (0x1UL) /*!< DOCDF (Bitfield-Mask: 0x01) */ +/* ========================================================= MOMCR ========================================================= */ + #define R_SYSTEM_MOMCR_AUTODRVEN_Pos (7UL) /*!< AUTODRVEN (Bit 7) */ + #define R_SYSTEM_MOMCR_AUTODRVEN_Msk (0x80UL) /*!< AUTODRVEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_MOMCR_MOSEL_Pos (6UL) /*!< MOSEL (Bit 6) */ + #define R_SYSTEM_MOMCR_MOSEL_Msk (0x40UL) /*!< MOSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_MOMCR_MODRV0_Pos (4UL) /*!< MODRV0 (Bit 4) */ + #define R_SYSTEM_MOMCR_MODRV0_Msk (0x30UL) /*!< MODRV0 (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_MOMCR_MODRV1_Pos (3UL) /*!< MODRV1 (Bit 3) */ + #define R_SYSTEM_MOMCR_MODRV1_Msk (0x8UL) /*!< MODRV1 (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTSR0 ========================================================= */ + #define R_SYSTEM_RSTSR0_DPSRSTF_Pos (7UL) /*!< DPSRSTF (Bit 7) */ + #define R_SYSTEM_RSTSR0_DPSRSTF_Msk (0x80UL) /*!< DPSRSTF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR0_LVD2RF_Pos (3UL) /*!< LVD2RF (Bit 3) */ + #define R_SYSTEM_RSTSR0_LVD2RF_Msk (0x8UL) /*!< LVD2RF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR0_LVD1RF_Pos (2UL) /*!< LVD1RF (Bit 2) */ + #define R_SYSTEM_RSTSR0_LVD1RF_Msk (0x4UL) /*!< LVD1RF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR0_LVD0RF_Pos (1UL) /*!< LVD0RF (Bit 1) */ + #define R_SYSTEM_RSTSR0_LVD0RF_Msk (0x2UL) /*!< LVD0RF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSR0_PORF_Pos (0UL) /*!< PORF (Bit 0) */ + #define R_SYSTEM_RSTSR0_PORF_Msk (0x1UL) /*!< PORF (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTSR2 ========================================================= */ + #define R_SYSTEM_RSTSR2_CWSF_Pos (0UL) /*!< CWSF (Bit 0) */ + #define R_SYSTEM_RSTSR2_CWSF_Msk (0x1UL) /*!< CWSF (Bitfield-Mask: 0x01) */ +/* ======================================================== LVCMPCR ======================================================== */ + #define R_SYSTEM_LVCMPCR_LVD2E_Pos (6UL) /*!< LVD2E (Bit 6) */ + #define R_SYSTEM_LVCMPCR_LVD2E_Msk (0x40UL) /*!< LVD2E (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVCMPCR_LVD1E_Pos (5UL) /*!< LVD1E (Bit 5) */ + #define R_SYSTEM_LVCMPCR_LVD1E_Msk (0x20UL) /*!< LVD1E (Bitfield-Mask: 0x01) */ +/* ======================================================= LVD1CMPCR ======================================================= */ + #define R_SYSTEM_LVD1CMPCR_LVDLVL_Pos (0UL) /*!< LVDLVL (Bit 0) */ + #define R_SYSTEM_LVD1CMPCR_LVDLVL_Msk (0x1fUL) /*!< LVDLVL (Bitfield-Mask: 0x1f) */ + #define R_SYSTEM_LVD1CMPCR_LVDE_Pos (7UL) /*!< LVDE (Bit 7) */ + #define R_SYSTEM_LVD1CMPCR_LVDE_Msk (0x80UL) /*!< LVDE (Bitfield-Mask: 0x01) */ +/* ======================================================== LVDLVLR ======================================================== */ + #define R_SYSTEM_LVDLVLR_LVD2LVL_Pos (5UL) /*!< LVD2LVL (Bit 5) */ + #define R_SYSTEM_LVDLVLR_LVD2LVL_Msk (0xe0UL) /*!< LVD2LVL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_LVDLVLR_LVD1LVL_Pos (0UL) /*!< LVD1LVL (Bit 0) */ + #define R_SYSTEM_LVDLVLR_LVD1LVL_Msk (0x1fUL) /*!< LVD1LVL (Bitfield-Mask: 0x1f) */ +/* ======================================================= LVD2CMPCR ======================================================= */ + #define R_SYSTEM_LVD2CMPCR_LVDLVL_Pos (0UL) /*!< LVDLVL (Bit 0) */ + #define R_SYSTEM_LVD2CMPCR_LVDLVL_Msk (0x7UL) /*!< LVDLVL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_LVD2CMPCR_LVDE_Pos (7UL) /*!< LVDE (Bit 7) */ + #define R_SYSTEM_LVD2CMPCR_LVDE_Msk (0x80UL) /*!< LVDE (Bitfield-Mask: 0x01) */ +/* ======================================================== LVD1CR0 ======================================================== */ + #define R_SYSTEM_LVD1CR0_RN_Pos (7UL) /*!< RN (Bit 7) */ + #define R_SYSTEM_LVD1CR0_RN_Msk (0x80UL) /*!< RN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1CR0_RI_Pos (6UL) /*!< RI (Bit 6) */ + #define R_SYSTEM_LVD1CR0_RI_Msk (0x40UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1CR0_FSAMP_Pos (4UL) /*!< FSAMP (Bit 4) */ + #define R_SYSTEM_LVD1CR0_FSAMP_Msk (0x30UL) /*!< FSAMP (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_LVD1CR0_CMPE_Pos (2UL) /*!< CMPE (Bit 2) */ + #define R_SYSTEM_LVD1CR0_CMPE_Msk (0x4UL) /*!< CMPE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1CR0_DFDIS_Pos (1UL) /*!< DFDIS (Bit 1) */ + #define R_SYSTEM_LVD1CR0_DFDIS_Msk (0x2UL) /*!< DFDIS (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD1CR0_RIE_Pos (0UL) /*!< RIE (Bit 0) */ + #define R_SYSTEM_LVD1CR0_RIE_Msk (0x1UL) /*!< RIE (Bitfield-Mask: 0x01) */ +/* ======================================================== LVD2CR0 ======================================================== */ + #define R_SYSTEM_LVD2CR0_RN_Pos (7UL) /*!< RN (Bit 7) */ + #define R_SYSTEM_LVD2CR0_RN_Msk (0x80UL) /*!< RN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2CR0_RI_Pos (6UL) /*!< RI (Bit 6) */ + #define R_SYSTEM_LVD2CR0_RI_Msk (0x40UL) /*!< RI (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2CR0_FSAMP_Pos (4UL) /*!< FSAMP (Bit 4) */ + #define R_SYSTEM_LVD2CR0_FSAMP_Msk (0x30UL) /*!< FSAMP (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_LVD2CR0_CMPE_Pos (2UL) /*!< CMPE (Bit 2) */ + #define R_SYSTEM_LVD2CR0_CMPE_Msk (0x4UL) /*!< CMPE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2CR0_DFDIS_Pos (1UL) /*!< DFDIS (Bit 1) */ + #define R_SYSTEM_LVD2CR0_DFDIS_Msk (0x2UL) /*!< DFDIS (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVD2CR0_RIE_Pos (0UL) /*!< RIE (Bit 0) */ + #define R_SYSTEM_LVD2CR0_RIE_Msk (0x1UL) /*!< RIE (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTCR1 ========================================================= */ + #define R_SYSTEM_VBTCR1_BPWSWSTP_Pos (0UL) /*!< BPWSWSTP (Bit 0) */ + #define R_SYSTEM_VBTCR1_BPWSWSTP_Msk (0x1UL) /*!< BPWSWSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== DCDCCTL ======================================================== */ + #define R_SYSTEM_DCDCCTL_PD_Pos (7UL) /*!< PD (Bit 7) */ + #define R_SYSTEM_DCDCCTL_PD_Msk (0x80UL) /*!< PD (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DCDCCTL_FST_Pos (6UL) /*!< FST (Bit 6) */ + #define R_SYSTEM_DCDCCTL_FST_Msk (0x40UL) /*!< FST (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DCDCCTL_LCBOOST_Pos (5UL) /*!< LCBOOST (Bit 5) */ + #define R_SYSTEM_DCDCCTL_LCBOOST_Msk (0x20UL) /*!< LCBOOST (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DCDCCTL_STOPZA_Pos (4UL) /*!< STOPZA (Bit 4) */ + #define R_SYSTEM_DCDCCTL_STOPZA_Msk (0x10UL) /*!< STOPZA (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DCDCCTL_OCPEN_Pos (1UL) /*!< OCPEN (Bit 1) */ + #define R_SYSTEM_DCDCCTL_OCPEN_Msk (0x2UL) /*!< OCPEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DCDCCTL_DCDCON_Pos (0UL) /*!< DCDCON (Bit 0) */ + #define R_SYSTEM_DCDCCTL_DCDCON_Msk (0x1UL) /*!< DCDCON (Bitfield-Mask: 0x01) */ +/* ======================================================== VCCSEL ========================================================= */ + #define R_SYSTEM_VCCSEL_VCCSEL_Pos (0UL) /*!< VCCSEL (Bit 0) */ + #define R_SYSTEM_VCCSEL_VCCSEL_Msk (0x3UL) /*!< VCCSEL (Bitfield-Mask: 0x03) */ +/* ======================================================== LDOSCR ========================================================= */ + #define R_SYSTEM_LDOSCR_LDOSTP0_Pos (0UL) /*!< LDOSTP0 (Bit 0) */ + #define R_SYSTEM_LDOSCR_LDOSTP0_Msk (0x1UL) /*!< LDOSTP0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LDOSCR_LDOSTP1_Pos (1UL) /*!< LDOSTP1 (Bit 1) */ + #define R_SYSTEM_LDOSCR_LDOSTP1_Msk (0x2UL) /*!< LDOSTP1 (Bitfield-Mask: 0x01) */ +/* ======================================================= PL2LDOSCR ======================================================= */ + #define R_SYSTEM_PL2LDOSCR_PL2LDOSTP_Pos (0UL) /*!< PL2LDOSTP (Bit 0) */ + #define R_SYSTEM_PL2LDOSCR_PL2LDOSTP_Msk (0x1UL) /*!< PL2LDOSTP (Bitfield-Mask: 0x01) */ +/* ======================================================== SOSCCR ========================================================= */ + #define R_SYSTEM_SOSCCR_SOSTP_Pos (0UL) /*!< SOSTP (Bit 0) */ + #define R_SYSTEM_SOSCCR_SOSTP_Msk (0x1UL) /*!< SOSTP (Bitfield-Mask: 0x01) */ +/* ========================================================= SOMCR ========================================================= */ + #define R_SYSTEM_SOMCR_SODRV_Pos (0UL) /*!< SODRV (Bit 0) */ + #define R_SYSTEM_SOMCR_SODRV_Msk (0x3UL) /*!< SODRV (Bitfield-Mask: 0x03) */ +/* ========================================================= SOMRG ========================================================= */ + #define R_SYSTEM_SOMRG_SOSCMRG_Pos (0UL) /*!< SOSCMRG (Bit 0) */ + #define R_SYSTEM_SOMRG_SOSCMRG_Msk (0x3UL) /*!< SOSCMRG (Bitfield-Mask: 0x03) */ +/* ======================================================== LOCOCR ========================================================= */ + #define R_SYSTEM_LOCOCR_LCSTP_Pos (0UL) /*!< LCSTP (Bit 0) */ + #define R_SYSTEM_LOCOCR_LCSTP_Msk (0x1UL) /*!< LCSTP (Bitfield-Mask: 0x01) */ +/* ======================================================= LOCOUTCR ======================================================== */ + #define R_SYSTEM_LOCOUTCR_LOCOUTRM_Pos (0UL) /*!< LOCOUTRM (Bit 0) */ + #define R_SYSTEM_LOCOUTCR_LOCOUTRM_Msk (0xffUL) /*!< LOCOUTRM (Bitfield-Mask: 0xff) */ +/* ======================================================== VBTCR2 ========================================================= */ + #define R_SYSTEM_VBTCR2_VBTLVDLVL_Pos (6UL) /*!< VBTLVDLVL (Bit 6) */ + #define R_SYSTEM_VBTCR2_VBTLVDLVL_Msk (0xc0UL) /*!< VBTLVDLVL (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_VBTCR2_VBTLVDEN_Pos (4UL) /*!< VBTLVDEN (Bit 4) */ + #define R_SYSTEM_VBTCR2_VBTLVDEN_Msk (0x10UL) /*!< VBTLVDEN (Bitfield-Mask: 0x01) */ +/* ========================================================= VBTSR ========================================================= */ + #define R_SYSTEM_VBTSR_VBTRVLD_Pos (4UL) /*!< VBTRVLD (Bit 4) */ + #define R_SYSTEM_VBTSR_VBTRVLD_Msk (0x10UL) /*!< VBTRVLD (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTSR_VBTBLDF_Pos (1UL) /*!< VBTBLDF (Bit 1) */ + #define R_SYSTEM_VBTSR_VBTBLDF_Msk (0x2UL) /*!< VBTBLDF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTSR_VBTRDF_Pos (0UL) /*!< VBTRDF (Bit 0) */ + #define R_SYSTEM_VBTSR_VBTRDF_Msk (0x1UL) /*!< VBTRDF (Bitfield-Mask: 0x01) */ +/* ======================================================= VBTCMPCR ======================================================== */ + #define R_SYSTEM_VBTCMPCR_VBTCMPE_Pos (0UL) /*!< VBTCMPE (Bit 0) */ + #define R_SYSTEM_VBTCMPCR_VBTCMPE_Msk (0x1UL) /*!< VBTCMPE (Bitfield-Mask: 0x01) */ +/* ======================================================= VBTLVDICR ======================================================= */ + #define R_SYSTEM_VBTLVDICR_VBTLVDISEL_Pos (1UL) /*!< VBTLVDISEL (Bit 1) */ + #define R_SYSTEM_VBTLVDICR_VBTLVDISEL_Msk (0x2UL) /*!< VBTLVDISEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTLVDICR_VBTLVDIE_Pos (0UL) /*!< VBTLVDIE (Bit 0) */ + #define R_SYSTEM_VBTLVDICR_VBTLVDIE_Msk (0x1UL) /*!< VBTLVDIE (Bitfield-Mask: 0x01) */ +/* ======================================================= VBTWCTLR ======================================================== */ + #define R_SYSTEM_VBTWCTLR_VWEN_Pos (0UL) /*!< VWEN (Bit 0) */ + #define R_SYSTEM_VBTWCTLR_VWEN_Msk (0x1UL) /*!< VWEN (Bitfield-Mask: 0x01) */ +/* ====================================================== VBTWCH0OTSR ====================================================== */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VAGTUTE_Pos (5UL) /*!< CH0VAGTUTE (Bit 5) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VAGTUTE_Msk (0x20UL) /*!< CH0VAGTUTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VRTCATE_Pos (4UL) /*!< CH0VRTCATE (Bit 4) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VRTCATE_Msk (0x10UL) /*!< CH0VRTCATE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VRTCTE_Pos (3UL) /*!< CH0VRTCTE (Bit 3) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VRTCTE_Msk (0x8UL) /*!< CH0VRTCTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VCH2TE_Pos (2UL) /*!< CH0VCH2TE (Bit 2) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VCH2TE_Msk (0x4UL) /*!< CH0VCH2TE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VCH1TE_Pos (1UL) /*!< CH0VCH1TE (Bit 1) */ + #define R_SYSTEM_VBTWCH0OTSR_CH0VCH1TE_Msk (0x2UL) /*!< CH0VCH1TE (Bitfield-Mask: 0x01) */ +/* ====================================================== VBTWCH1OTSR ====================================================== */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VAGTUTE_Pos (5UL) /*!< CH1VAGTUTE (Bit 5) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VAGTUTE_Msk (0x20UL) /*!< CH1VAGTUTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VRTCATE_Pos (4UL) /*!< CH1VRTCATE (Bit 4) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VRTCATE_Msk (0x10UL) /*!< CH1VRTCATE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VRTCTE_Pos (3UL) /*!< CH1VRTCTE (Bit 3) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VRTCTE_Msk (0x8UL) /*!< CH1VRTCTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VCH2TE_Pos (2UL) /*!< CH1VCH2TE (Bit 2) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VCH2TE_Msk (0x4UL) /*!< CH1VCH2TE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VCH0TE_Pos (0UL) /*!< CH1VCH0TE (Bit 0) */ + #define R_SYSTEM_VBTWCH1OTSR_CH1VCH0TE_Msk (0x1UL) /*!< CH1VCH0TE (Bitfield-Mask: 0x01) */ +/* ====================================================== VBTWCH2OTSR ====================================================== */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VAGTUTE_Pos (5UL) /*!< CH2VAGTUTE (Bit 5) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VAGTUTE_Msk (0x20UL) /*!< CH2VAGTUTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VRTCATE_Pos (4UL) /*!< CH2VRTCATE (Bit 4) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VRTCATE_Msk (0x10UL) /*!< CH2VRTCATE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VRTCTE_Pos (3UL) /*!< CH2VRTCTE (Bit 3) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VRTCTE_Msk (0x8UL) /*!< CH2VRTCTE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VCH1TE_Pos (1UL) /*!< CH2VCH1TE (Bit 1) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VCH1TE_Msk (0x2UL) /*!< CH2VCH1TE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VCH0TE_Pos (0UL) /*!< CH2VCH0TE (Bit 0) */ + #define R_SYSTEM_VBTWCH2OTSR_CH2VCH0TE_Msk (0x1UL) /*!< CH2VCH0TE (Bitfield-Mask: 0x01) */ +/* ======================================================= VBTICTLR ======================================================== */ + #define R_SYSTEM_VBTICTLR_VCH2INEN_Pos (2UL) /*!< VCH2INEN (Bit 2) */ + #define R_SYSTEM_VBTICTLR_VCH2INEN_Msk (0x4UL) /*!< VCH2INEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTICTLR_VCH1INEN_Pos (1UL) /*!< VCH1INEN (Bit 1) */ + #define R_SYSTEM_VBTICTLR_VCH1INEN_Msk (0x2UL) /*!< VCH1INEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTICTLR_VCH0INEN_Pos (0UL) /*!< VCH0INEN (Bit 0) */ + #define R_SYSTEM_VBTICTLR_VCH0INEN_Msk (0x1UL) /*!< VCH0INEN (Bitfield-Mask: 0x01) */ +/* ======================================================= VBTOCTLR ======================================================== */ + #define R_SYSTEM_VBTOCTLR_VOUT2LSEL_Pos (5UL) /*!< VOUT2LSEL (Bit 5) */ + #define R_SYSTEM_VBTOCTLR_VOUT2LSEL_Msk (0x20UL) /*!< VOUT2LSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTOCTLR_VCOU1LSEL_Pos (4UL) /*!< VCOU1LSEL (Bit 4) */ + #define R_SYSTEM_VBTOCTLR_VCOU1LSEL_Msk (0x10UL) /*!< VCOU1LSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTOCTLR_VOUT0LSEL_Pos (3UL) /*!< VOUT0LSEL (Bit 3) */ + #define R_SYSTEM_VBTOCTLR_VOUT0LSEL_Msk (0x8UL) /*!< VOUT0LSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTOCTLR_VCH2OEN_Pos (2UL) /*!< VCH2OEN (Bit 2) */ + #define R_SYSTEM_VBTOCTLR_VCH2OEN_Msk (0x4UL) /*!< VCH2OEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTOCTLR_VCH1OEN_Pos (1UL) /*!< VCH1OEN (Bit 1) */ + #define R_SYSTEM_VBTOCTLR_VCH1OEN_Msk (0x2UL) /*!< VCH1OEN (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTOCTLR_VCH0OEN_Pos (0UL) /*!< VCH0OEN (Bit 0) */ + #define R_SYSTEM_VBTOCTLR_VCH0OEN_Msk (0x1UL) /*!< VCH0OEN (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTWTER ======================================================== */ + #define R_SYSTEM_VBTWTER_VAGTUE_Pos (5UL) /*!< VAGTUE (Bit 5) */ + #define R_SYSTEM_VBTWTER_VAGTUE_Msk (0x20UL) /*!< VAGTUE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWTER_VRTCAE_Pos (4UL) /*!< VRTCAE (Bit 4) */ + #define R_SYSTEM_VBTWTER_VRTCAE_Msk (0x10UL) /*!< VRTCAE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWTER_VRTCIE_Pos (3UL) /*!< VRTCIE (Bit 3) */ + #define R_SYSTEM_VBTWTER_VRTCIE_Msk (0x8UL) /*!< VRTCIE (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWTER_VCH2E_Pos (2UL) /*!< VCH2E (Bit 2) */ + #define R_SYSTEM_VBTWTER_VCH2E_Msk (0x4UL) /*!< VCH2E (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWTER_VCH1E_Pos (1UL) /*!< VCH1E (Bit 1) */ + #define R_SYSTEM_VBTWTER_VCH1E_Msk (0x2UL) /*!< VCH1E (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWTER_VCH0E_Pos (0UL) /*!< VCH0E (Bit 0) */ + #define R_SYSTEM_VBTWTER_VCH0E_Msk (0x1UL) /*!< VCH0E (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTWEGR ======================================================== */ + #define R_SYSTEM_VBTWEGR_VCH2EG_Pos (2UL) /*!< VCH2EG (Bit 2) */ + #define R_SYSTEM_VBTWEGR_VCH2EG_Msk (0x4UL) /*!< VCH2EG (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWEGR_VCH1EG_Pos (1UL) /*!< VCH1EG (Bit 1) */ + #define R_SYSTEM_VBTWEGR_VCH1EG_Msk (0x2UL) /*!< VCH1EG (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWEGR_VCH0EG_Pos (0UL) /*!< VCH0EG (Bit 0) */ + #define R_SYSTEM_VBTWEGR_VCH0EG_Msk (0x1UL) /*!< VCH0EG (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTWFR ========================================================= */ + #define R_SYSTEM_VBTWFR_VAGTUF_Pos (5UL) /*!< VAGTUF (Bit 5) */ + #define R_SYSTEM_VBTWFR_VAGTUF_Msk (0x20UL) /*!< VAGTUF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWFR_VRTCAF_Pos (4UL) /*!< VRTCAF (Bit 4) */ + #define R_SYSTEM_VBTWFR_VRTCAF_Msk (0x10UL) /*!< VRTCAF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWFR_VRTCIF_Pos (3UL) /*!< VRTCIF (Bit 3) */ + #define R_SYSTEM_VBTWFR_VRTCIF_Msk (0x8UL) /*!< VRTCIF (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWFR_VCH2F_Pos (2UL) /*!< VCH2F (Bit 2) */ + #define R_SYSTEM_VBTWFR_VCH2F_Msk (0x4UL) /*!< VCH2F (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWFR_VCH1F_Pos (1UL) /*!< VCH1F (Bit 1) */ + #define R_SYSTEM_VBTWFR_VCH1F_Msk (0x2UL) /*!< VCH1F (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_VBTWFR_VCH0F_Pos (0UL) /*!< VCH0F (Bit 0) */ + #define R_SYSTEM_VBTWFR_VCH0F_Msk (0x1UL) /*!< VCH0F (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTBKR ========================================================= */ + #define R_SYSTEM_VBTBKR_VBTBKR_Pos (0UL) /*!< VBTBKR (Bit 0) */ + #define R_SYSTEM_VBTBKR_VBTBKR_Msk (0xffUL) /*!< VBTBKR (Bitfield-Mask: 0xff) */ +/* ======================================================== FWEPROR ======================================================== */ + #define R_SYSTEM_FWEPROR_FLWE_Pos (0UL) /*!< FLWE (Bit 0) */ + #define R_SYSTEM_FWEPROR_FLWE_Msk (0x3UL) /*!< FLWE (Bitfield-Mask: 0x03) */ +/* ======================================================== PLL2CCR ======================================================== */ + #define R_SYSTEM_PLL2CCR_PL2IDIV_Pos (0UL) /*!< PL2IDIV (Bit 0) */ + #define R_SYSTEM_PLL2CCR_PL2IDIV_Msk (0x3UL) /*!< PL2IDIV (Bitfield-Mask: 0x03) */ + #define R_SYSTEM_PLL2CCR_PL2SRCSEL_Pos (4UL) /*!< PL2SRCSEL (Bit 4) */ + #define R_SYSTEM_PLL2CCR_PL2SRCSEL_Msk (0x10UL) /*!< PL2SRCSEL (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_PLL2CCR_PLL2MUL_Pos (8UL) /*!< PLL2MUL (Bit 8) */ + #define R_SYSTEM_PLL2CCR_PLL2MUL_Msk (0x3f00UL) /*!< PLL2MUL (Bitfield-Mask: 0x3f) */ +/* ======================================================== PLL2CR ========================================================= */ + #define R_SYSTEM_PLL2CR_PLL2STP_Pos (0UL) /*!< PLL2STP (Bit 0) */ + #define R_SYSTEM_PLL2CR_PLL2STP_Msk (0x1UL) /*!< PLL2STP (Bitfield-Mask: 0x01) */ +/* ====================================================== USBCKDIVCR ======================================================= */ + #define R_SYSTEM_USBCKDIVCR_USBCKDIV_Pos (0UL) /*!< USBCKDIV (Bit 0) */ + #define R_SYSTEM_USBCKDIVCR_USBCKDIV_Msk (0x7UL) /*!< USBCKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== OCTACKDIVCR ====================================================== */ + #define R_SYSTEM_OCTACKDIVCR_OCTACKDIV_Pos (0UL) /*!< OCTACKDIV (Bit 0) */ + #define R_SYSTEM_OCTACKDIVCR_OCTACKDIV_Msk (0x7UL) /*!< OCTACKDIV (Bitfield-Mask: 0x07) */ +/* ===================================================== SCISPICKDIVCR ===================================================== */ + #define R_SYSTEM_SCISPICKDIVCR_SCISPICKDIV_Pos (0UL) /*!< SCISPICKDIV (Bit 0) */ + #define R_SYSTEM_SCISPICKDIVCR_SCISPICKDIV_Msk (0x7UL) /*!< SCISPICKDIV (Bitfield-Mask: 0x07) */ +/* ===================================================== CANFDCKDIVCR ====================================================== */ + #define R_SYSTEM_CANFDCKDIVCR_CANFDCKDIV_Pos (0UL) /*!< CANFDCKDIV (Bit 0) */ + #define R_SYSTEM_CANFDCKDIVCR_CANFDCKDIV_Msk (0x7UL) /*!< CANFDCKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== GPTCKDIVCR ======================================================= */ + #define R_SYSTEM_GPTCKDIVCR_GPTCKDIV_Pos (0UL) /*!< GPTCKDIV (Bit 0) */ + #define R_SYSTEM_GPTCKDIVCR_GPTCKDIV_Msk (0x7UL) /*!< GPTCKDIV (Bitfield-Mask: 0x07) */ +/* ===================================================== USB60CKDIVCR ====================================================== */ + #define R_SYSTEM_USB60CKDIVCR_USB60CKDIV_Pos (0UL) /*!< USB60CKDIV (Bit 0) */ + #define R_SYSTEM_USB60CKDIVCR_USB60CKDIV_Msk (0x7UL) /*!< USB60CKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== CECCKDIVCR ======================================================= */ + #define R_SYSTEM_CECCKDIVCR_CECCKDIV_Pos (0UL) /*!< CECCKDIV (Bit 0) */ + #define R_SYSTEM_CECCKDIVCR_CECCKDIV_Msk (0x7UL) /*!< CECCKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== I3CCKDIVCR ======================================================= */ + #define R_SYSTEM_I3CCKDIVCR_I3CCKDIV_Pos (0UL) /*!< I3CCKDIV (Bit 0) */ + #define R_SYSTEM_I3CCKDIVCR_I3CCKDIV_Msk (0x7UL) /*!< I3CCKDIV (Bitfield-Mask: 0x07) */ +/* ====================================================== IICCKDIVCR ======================================================= */ + #define R_SYSTEM_IICCKDIVCR_IICCKDIV_Pos (0UL) /*!< IICCKDIV (Bit 0) */ + #define R_SYSTEM_IICCKDIVCR_IICCKDIV_Msk (0x7UL) /*!< IICCKDIV (Bitfield-Mask: 0x07) */ +/* ======================================================== USBCKCR ======================================================== */ + #define R_SYSTEM_USBCKCR_USBCKSEL_Pos (0UL) /*!< USBCKSEL (Bit 0) */ + #define R_SYSTEM_USBCKCR_USBCKSEL_Msk (0x7UL) /*!< USBCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_USBCKCR_USBCKSREQ_Pos (6UL) /*!< USBCKSREQ (Bit 6) */ + #define R_SYSTEM_USBCKCR_USBCKSREQ_Msk (0x40UL) /*!< USBCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_USBCKCR_USBCKSRDY_Pos (7UL) /*!< USBCKSRDY (Bit 7) */ + #define R_SYSTEM_USBCKCR_USBCKSRDY_Msk (0x80UL) /*!< USBCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= OCTACKCR ======================================================== */ + #define R_SYSTEM_OCTACKCR_OCTACKSEL_Pos (0UL) /*!< OCTACKSEL (Bit 0) */ + #define R_SYSTEM_OCTACKCR_OCTACKSEL_Msk (0x7UL) /*!< OCTACKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_OCTACKCR_OCTACKSREQ_Pos (6UL) /*!< OCTACKSREQ (Bit 6) */ + #define R_SYSTEM_OCTACKCR_OCTACKSREQ_Msk (0x40UL) /*!< OCTACKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_OCTACKCR_OCTACKSRDY_Pos (7UL) /*!< OCTACKSRDY (Bit 7) */ + #define R_SYSTEM_OCTACKCR_OCTACKSRDY_Msk (0x80UL) /*!< OCTACKSRDY (Bitfield-Mask: 0x01) */ +/* ====================================================== SCISPICKCR ======================================================= */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSEL_Pos (0UL) /*!< SCISPICKSEL (Bit 0) */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSEL_Msk (0x7UL) /*!< SCISPICKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSREQ_Pos (6UL) /*!< SCISPICKSREQ (Bit 6) */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSREQ_Msk (0x40UL) /*!< SCISPICKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSRDY_Pos (7UL) /*!< SCISPICKSRDY (Bit 7) */ + #define R_SYSTEM_SCISPICKCR_SCISPICKSRDY_Msk (0x80UL) /*!< SCISPICKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= CANFDCKCR ======================================================= */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSEL_Pos (0UL) /*!< CANFDCKSEL (Bit 0) */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSEL_Msk (0x7UL) /*!< CANFDCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSREQ_Pos (6UL) /*!< CANFDCKSREQ (Bit 6) */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSREQ_Msk (0x40UL) /*!< CANFDCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSRDY_Pos (7UL) /*!< CANFDCKSRDY (Bit 7) */ + #define R_SYSTEM_CANFDCKCR_CANFDCKSRDY_Msk (0x80UL) /*!< CANFDCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== GPTCKCR ======================================================== */ + #define R_SYSTEM_GPTCKCR_GPTCKSEL_Pos (0UL) /*!< GPTCKSEL (Bit 0) */ + #define R_SYSTEM_GPTCKCR_GPTCKSEL_Msk (0x7UL) /*!< GPTCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_GPTCKCR_GPTCKSREQ_Pos (6UL) /*!< GPTCKSREQ (Bit 6) */ + #define R_SYSTEM_GPTCKCR_GPTCKSREQ_Msk (0x40UL) /*!< GPTCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_GPTCKCR_GPTCKSRDY_Pos (7UL) /*!< GPTCKSRDY (Bit 7) */ + #define R_SYSTEM_GPTCKCR_GPTCKSRDY_Msk (0x80UL) /*!< GPTCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= USB60CKCR ======================================================= */ + #define R_SYSTEM_USB60CKCR_USB60CKSEL_Pos (0UL) /*!< USB60CKSEL (Bit 0) */ + #define R_SYSTEM_USB60CKCR_USB60CKSEL_Msk (0xfUL) /*!< USB60CKSEL (Bitfield-Mask: 0x0f) */ + #define R_SYSTEM_USB60CKCR_USB60CKSREQ_Pos (6UL) /*!< USB60CKSREQ (Bit 6) */ + #define R_SYSTEM_USB60CKCR_USB60CKSREQ_Msk (0x40UL) /*!< USB60CKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_USB60CKCR_USB60CKSRDY_Pos (7UL) /*!< USB60CKSRDY (Bit 7) */ + #define R_SYSTEM_USB60CKCR_USB60CKSRDY_Msk (0x80UL) /*!< USB60CKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== CECCKCR ======================================================== */ + #define R_SYSTEM_CECCKCR_CECCKSEL_Pos (0UL) /*!< CECCKSEL (Bit 0) */ + #define R_SYSTEM_CECCKCR_CECCKSEL_Msk (0x7UL) /*!< CECCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_CECCKCR_CECCKSREQ_Pos (6UL) /*!< CECCKSREQ (Bit 6) */ + #define R_SYSTEM_CECCKCR_CECCKSREQ_Msk (0x40UL) /*!< CECCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CECCKCR_CECCKSRDY_Pos (7UL) /*!< CECCKSRDY (Bit 7) */ + #define R_SYSTEM_CECCKCR_CECCKSRDY_Msk (0x80UL) /*!< CECCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== IICCKCR ======================================================== */ + #define R_SYSTEM_IICCKCR_IICCKSEL_Pos (0UL) /*!< IICCKSEL (Bit 0) */ + #define R_SYSTEM_IICCKCR_IICCKSEL_Msk (0x7UL) /*!< IICCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_IICCKCR_IICCKSREQ_Pos (6UL) /*!< IICCKSREQ (Bit 6) */ + #define R_SYSTEM_IICCKCR_IICCKSREQ_Msk (0x40UL) /*!< IICCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_IICCKCR_IICCKSRDY_Pos (7UL) /*!< IICCKSRDY (Bit 7) */ + #define R_SYSTEM_IICCKCR_IICCKSRDY_Msk (0x80UL) /*!< IICCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== I3CCKCR ======================================================== */ + #define R_SYSTEM_I3CCKCR_I3CCKSEL_Pos (0UL) /*!< I3CCKSEL (Bit 0) */ + #define R_SYSTEM_I3CCKCR_I3CCKSEL_Msk (0x7UL) /*!< I3CCKSEL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_I3CCKCR_I3CCKSREQ_Pos (6UL) /*!< I3CCKSREQ (Bit 6) */ + #define R_SYSTEM_I3CCKCR_I3CCKSREQ_Msk (0x40UL) /*!< I3CCKSREQ (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_I3CCKCR_I3CCKSRDY_Pos (7UL) /*!< I3CCKSRDY (Bit 7) */ + #define R_SYSTEM_I3CCKCR_I3CCKSRDY_Msk (0x80UL) /*!< I3CCKSRDY (Bitfield-Mask: 0x01) */ +/* ======================================================= SNZREQCR1 ======================================================= */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN0_Pos (0UL) /*!< SNZREQEN0 (Bit 0) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN0_Msk (0x1UL) /*!< SNZREQEN0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN1_Pos (1UL) /*!< SNZREQEN1 (Bit 1) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN1_Msk (0x2UL) /*!< SNZREQEN1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN2_Pos (2UL) /*!< SNZREQEN2 (Bit 2) */ + #define R_SYSTEM_SNZREQCR1_SNZREQEN2_Msk (0x4UL) /*!< SNZREQEN2 (Bitfield-Mask: 0x01) */ +/* ======================================================= SNZEDCR1 ======================================================== */ + #define R_SYSTEM_SNZEDCR1_AGT3UNFED_Pos (0UL) /*!< AGT3UNFED (Bit 0) */ + #define R_SYSTEM_SNZEDCR1_AGT3UNFED_Msk (0x1UL) /*!< AGT3UNFED (Bitfield-Mask: 0x01) */ +/* ======================================================== CGFSAR ========================================================= */ + #define R_SYSTEM_CGFSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_CGFSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_CGFSAR_NONSEC_Pos (10UL) /*!< NONSEC (Bit 10) */ + #define R_SYSTEM_CGFSAR_NONSEC_Msk (0x400UL) /*!< NONSEC (Bitfield-Mask: 0x01) */ +/* ======================================================== LPMSAR ========================================================= */ + #define R_SYSTEM_LPMSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_LPMSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_LPMSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC4_Pos (4UL) /*!< NONSEC4 (Bit 4) */ + #define R_SYSTEM_LPMSAR_NONSEC4_Msk (0x10UL) /*!< NONSEC4 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC8_Pos (8UL) /*!< NONSEC8 (Bit 8) */ + #define R_SYSTEM_LPMSAR_NONSEC8_Msk (0x100UL) /*!< NONSEC8 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LPMSAR_NONSEC9_Pos (9UL) /*!< NONSEC9 (Bit 9) */ + #define R_SYSTEM_LPMSAR_NONSEC9_Msk (0x200UL) /*!< NONSEC9 (Bitfield-Mask: 0x01) */ +/* ======================================================== LVDSAR ========================================================= */ + #define R_SYSTEM_LVDSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_LVDSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_LVDSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_LVDSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTSAR ========================================================= */ + #define R_SYSTEM_RSTSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_RSTSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_RSTSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_RSTSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_RSTSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ +/* ======================================================== BBFSAR ========================================================= */ + #define R_SYSTEM_BBFSAR_NONSEC0_Pos (0UL) /*!< NONSEC0 (Bit 0) */ + #define R_SYSTEM_BBFSAR_NONSEC0_Msk (0x1UL) /*!< NONSEC0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC1_Pos (1UL) /*!< NONSEC1 (Bit 1) */ + #define R_SYSTEM_BBFSAR_NONSEC1_Msk (0x2UL) /*!< NONSEC1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC2_Pos (2UL) /*!< NONSEC2 (Bit 2) */ + #define R_SYSTEM_BBFSAR_NONSEC2_Msk (0x4UL) /*!< NONSEC2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC16_Pos (16UL) /*!< NONSEC16 (Bit 16) */ + #define R_SYSTEM_BBFSAR_NONSEC16_Msk (0x10000UL) /*!< NONSEC16 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC17_Pos (17UL) /*!< NONSEC17 (Bit 17) */ + #define R_SYSTEM_BBFSAR_NONSEC17_Msk (0x20000UL) /*!< NONSEC17 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC18_Pos (18UL) /*!< NONSEC18 (Bit 18) */ + #define R_SYSTEM_BBFSAR_NONSEC18_Msk (0x40000UL) /*!< NONSEC18 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC19_Pos (19UL) /*!< NONSEC19 (Bit 19) */ + #define R_SYSTEM_BBFSAR_NONSEC19_Msk (0x80000UL) /*!< NONSEC19 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC20_Pos (20UL) /*!< NONSEC20 (Bit 20) */ + #define R_SYSTEM_BBFSAR_NONSEC20_Msk (0x100000UL) /*!< NONSEC20 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC21_Pos (21UL) /*!< NONSEC21 (Bit 21) */ + #define R_SYSTEM_BBFSAR_NONSEC21_Msk (0x200000UL) /*!< NONSEC21 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC22_Pos (22UL) /*!< NONSEC22 (Bit 22) */ + #define R_SYSTEM_BBFSAR_NONSEC22_Msk (0x400000UL) /*!< NONSEC22 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_BBFSAR_NONSEC23_Pos (23UL) /*!< NONSEC23 (Bit 23) */ + #define R_SYSTEM_BBFSAR_NONSEC23_Msk (0x800000UL) /*!< NONSEC23 (Bitfield-Mask: 0x01) */ +/* ======================================================== DPFSAR ========================================================= */ + #define R_SYSTEM_DPFSAR_DPFSA0_Pos (0UL) /*!< DPFSA0 (Bit 0) */ + #define R_SYSTEM_DPFSAR_DPFSA0_Msk (0x1UL) /*!< DPFSA0 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA1_Pos (1UL) /*!< DPFSA1 (Bit 1) */ + #define R_SYSTEM_DPFSAR_DPFSA1_Msk (0x2UL) /*!< DPFSA1 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA2_Pos (2UL) /*!< DPFSA2 (Bit 2) */ + #define R_SYSTEM_DPFSAR_DPFSA2_Msk (0x4UL) /*!< DPFSA2 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA3_Pos (3UL) /*!< DPFSA3 (Bit 3) */ + #define R_SYSTEM_DPFSAR_DPFSA3_Msk (0x8UL) /*!< DPFSA3 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA4_Pos (4UL) /*!< DPFSA4 (Bit 4) */ + #define R_SYSTEM_DPFSAR_DPFSA4_Msk (0x10UL) /*!< DPFSA4 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA5_Pos (5UL) /*!< DPFSA5 (Bit 5) */ + #define R_SYSTEM_DPFSAR_DPFSA5_Msk (0x20UL) /*!< DPFSA5 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA6_Pos (6UL) /*!< DPFSA6 (Bit 6) */ + #define R_SYSTEM_DPFSAR_DPFSA6_Msk (0x40UL) /*!< DPFSA6 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA7_Pos (7UL) /*!< DPFSA7 (Bit 7) */ + #define R_SYSTEM_DPFSAR_DPFSA7_Msk (0x80UL) /*!< DPFSA7 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA8_Pos (8UL) /*!< DPFSA8 (Bit 8) */ + #define R_SYSTEM_DPFSAR_DPFSA8_Msk (0x100UL) /*!< DPFSA8 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA9_Pos (9UL) /*!< DPFSA9 (Bit 9) */ + #define R_SYSTEM_DPFSAR_DPFSA9_Msk (0x200UL) /*!< DPFSA9 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA10_Pos (10UL) /*!< DPFSA10 (Bit 10) */ + #define R_SYSTEM_DPFSAR_DPFSA10_Msk (0x400UL) /*!< DPFSA10 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA11_Pos (11UL) /*!< DPFSA11 (Bit 11) */ + #define R_SYSTEM_DPFSAR_DPFSA11_Msk (0x800UL) /*!< DPFSA11 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA12_Pos (12UL) /*!< DPFSA12 (Bit 12) */ + #define R_SYSTEM_DPFSAR_DPFSA12_Msk (0x1000UL) /*!< DPFSA12 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA13_Pos (13UL) /*!< DPFSA13 (Bit 13) */ + #define R_SYSTEM_DPFSAR_DPFSA13_Msk (0x2000UL) /*!< DPFSA13 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA14_Pos (14UL) /*!< DPFSA14 (Bit 14) */ + #define R_SYSTEM_DPFSAR_DPFSA14_Msk (0x4000UL) /*!< DPFSA14 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA15_Pos (15UL) /*!< DPFSA15 (Bit 15) */ + #define R_SYSTEM_DPFSAR_DPFSA15_Msk (0x8000UL) /*!< DPFSA15 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA16_Pos (16UL) /*!< DPFSA16 (Bit 16) */ + #define R_SYSTEM_DPFSAR_DPFSA16_Msk (0x10000UL) /*!< DPFSA16 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA17_Pos (17UL) /*!< DPFSA17 (Bit 17) */ + #define R_SYSTEM_DPFSAR_DPFSA17_Msk (0x20000UL) /*!< DPFSA17 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA18_Pos (18UL) /*!< DPFSA18 (Bit 18) */ + #define R_SYSTEM_DPFSAR_DPFSA18_Msk (0x40000UL) /*!< DPFSA18 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA19_Pos (19UL) /*!< DPFSA19 (Bit 19) */ + #define R_SYSTEM_DPFSAR_DPFSA19_Msk (0x80000UL) /*!< DPFSA19 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA20_Pos (20UL) /*!< DPFSA20 (Bit 20) */ + #define R_SYSTEM_DPFSAR_DPFSA20_Msk (0x100000UL) /*!< DPFSA20 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA24_Pos (24UL) /*!< DPFSA24 (Bit 24) */ + #define R_SYSTEM_DPFSAR_DPFSA24_Msk (0x1000000UL) /*!< DPFSA24 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA26_Pos (26UL) /*!< DPFSA26 (Bit 26) */ + #define R_SYSTEM_DPFSAR_DPFSA26_Msk (0x4000000UL) /*!< DPFSA26 (Bitfield-Mask: 0x01) */ + #define R_SYSTEM_DPFSAR_DPFSA27_Pos (27UL) /*!< DPFSA27 (Bit 27) */ + #define R_SYSTEM_DPFSAR_DPFSA27_Msk (0x8000000UL) /*!< DPFSA27 (Bitfield-Mask: 0x01) */ +/* ======================================================== DPSWCR ========================================================= */ + #define R_SYSTEM_DPSWCR_WTSTS_Pos (0UL) /*!< WTSTS (Bit 0) */ + #define R_SYSTEM_DPSWCR_WTSTS_Msk (0x3fUL) /*!< WTSTS (Bitfield-Mask: 0x3f) */ +/* ====================================================== VBATTMNSELR ====================================================== */ + #define R_SYSTEM_VBATTMNSELR_VBATTMNSEL_Pos (0UL) /*!< VBATTMNSEL (Bit 0) */ + #define R_SYSTEM_VBATTMNSELR_VBATTMNSEL_Msk (0x1UL) /*!< VBATTMNSEL (Bitfield-Mask: 0x01) */ +/* ======================================================= VBATTMONR ======================================================= */ + #define R_SYSTEM_VBATTMONR_VBATTMON_Pos (0UL) /*!< VBATTMON (Bit 0) */ + #define R_SYSTEM_VBATTMONR_VBATTMON_Msk (0x1UL) /*!< VBATTMON (Bitfield-Mask: 0x01) */ +/* ======================================================== VBTBER ========================================================= */ + #define R_SYSTEM_VBTBER_VBAE_Pos (3UL) /*!< VBAE (Bit 3) */ + #define R_SYSTEM_VBTBER_VBAE_Msk (0x8UL) /*!< VBAE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_TRNG ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== TRNGSDR ======================================================== */ + #define R_TRNG_TRNGSDR_SDATA_Pos (0UL) /*!< SDATA (Bit 0) */ + #define R_TRNG_TRNGSDR_SDATA_Msk (0xffUL) /*!< SDATA (Bitfield-Mask: 0xff) */ +/* ======================================================= TRNGSCR0 ======================================================== */ + #define R_TRNG_TRNGSCR0_RDRDY_Pos (7UL) /*!< RDRDY (Bit 7) */ + #define R_TRNG_TRNGSCR0_RDRDY_Msk (0x80UL) /*!< RDRDY (Bitfield-Mask: 0x01) */ + #define R_TRNG_TRNGSCR0_SGCEN_Pos (3UL) /*!< SGCEN (Bit 3) */ + #define R_TRNG_TRNGSCR0_SGCEN_Msk (0x8UL) /*!< SGCEN (Bitfield-Mask: 0x01) */ + #define R_TRNG_TRNGSCR0_SGSTART_Pos (2UL) /*!< SGSTART (Bit 2) */ + #define R_TRNG_TRNGSCR0_SGSTART_Msk (0x4UL) /*!< SGSTART (Bitfield-Mask: 0x01) */ +/* ======================================================= TRNGSCR1 ======================================================== */ + #define R_TRNG_TRNGSCR1_INTEN_Pos (0UL) /*!< INTEN (Bit 0) */ + #define R_TRNG_TRNGSCR1_INTEN_Msk (0x1UL) /*!< INTEN (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TSCDR ========================================================= */ +/* ======================================================== TSCDRH ========================================================= */ + #define R_TSN_TSCDRH_TSCDRH_Pos (0UL) /*!< TSCDRH (Bit 0) */ + #define R_TSN_TSCDRH_TSCDRH_Msk (0xffUL) /*!< TSCDRH (Bitfield-Mask: 0xff) */ +/* ======================================================== TSCDRL ========================================================= */ + #define R_TSN_TSCDRL_TSCDRL_Pos (0UL) /*!< TSCDRL (Bit 0) */ + #define R_TSN_TSCDRL_TSCDRL_Msk (0xffUL) /*!< TSCDRL (Bitfield-Mask: 0xff) */ +/* ======================================================== TSCDRR ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_USB_FS0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SYSCFG ========================================================= */ + #define R_USB_FS0_SYSCFG_SCKE_Pos (10UL) /*!< SCKE (Bit 10) */ + #define R_USB_FS0_SYSCFG_SCKE_Msk (0x400UL) /*!< SCKE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_CNEN_Pos (8UL) /*!< CNEN (Bit 8) */ + #define R_USB_FS0_SYSCFG_CNEN_Msk (0x100UL) /*!< CNEN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_DCFM_Pos (6UL) /*!< DCFM (Bit 6) */ + #define R_USB_FS0_SYSCFG_DCFM_Msk (0x40UL) /*!< DCFM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_DRPD_Pos (5UL) /*!< DRPD (Bit 5) */ + #define R_USB_FS0_SYSCFG_DRPD_Msk (0x20UL) /*!< DRPD (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_DPRPU_Pos (4UL) /*!< DPRPU (Bit 4) */ + #define R_USB_FS0_SYSCFG_DPRPU_Msk (0x10UL) /*!< DPRPU (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_DMRPU_Pos (3UL) /*!< DMRPU (Bit 3) */ + #define R_USB_FS0_SYSCFG_DMRPU_Msk (0x8UL) /*!< DMRPU (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSCFG_USBE_Pos (0UL) /*!< USBE (Bit 0) */ + #define R_USB_FS0_SYSCFG_USBE_Msk (0x1UL) /*!< USBE (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSWAIT ======================================================== */ + #define R_USB_FS0_BUSWAIT_BWAIT_Pos (0UL) /*!< BWAIT (Bit 0) */ + #define R_USB_FS0_BUSWAIT_BWAIT_Msk (0xfUL) /*!< BWAIT (Bitfield-Mask: 0x0f) */ +/* ======================================================== SYSSTS0 ======================================================== */ + #define R_USB_FS0_SYSSTS0_OVCMON_Pos (14UL) /*!< OVCMON (Bit 14) */ + #define R_USB_FS0_SYSSTS0_OVCMON_Msk (0xc000UL) /*!< OVCMON (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_SYSSTS0_HTACT_Pos (6UL) /*!< HTACT (Bit 6) */ + #define R_USB_FS0_SYSSTS0_HTACT_Msk (0x40UL) /*!< HTACT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSSTS0_SOFEA_Pos (5UL) /*!< SOFEA (Bit 5) */ + #define R_USB_FS0_SYSSTS0_SOFEA_Msk (0x20UL) /*!< SOFEA (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSSTS0_IDMON_Pos (2UL) /*!< IDMON (Bit 2) */ + #define R_USB_FS0_SYSSTS0_IDMON_Msk (0x4UL) /*!< IDMON (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SYSSTS0_LNST_Pos (0UL) /*!< LNST (Bit 0) */ + #define R_USB_FS0_SYSSTS0_LNST_Msk (0x3UL) /*!< LNST (Bitfield-Mask: 0x03) */ +/* ======================================================== PLLSTA ========================================================= */ + #define R_USB_FS0_PLLSTA_PLLLOCK_Pos (0UL) /*!< PLLLOCK (Bit 0) */ + #define R_USB_FS0_PLLSTA_PLLLOCK_Msk (0x1UL) /*!< PLLLOCK (Bitfield-Mask: 0x01) */ +/* ======================================================= DVSTCTR0 ======================================================== */ + #define R_USB_FS0_DVSTCTR0_HNPBTOA_Pos (11UL) /*!< HNPBTOA (Bit 11) */ + #define R_USB_FS0_DVSTCTR0_HNPBTOA_Msk (0x800UL) /*!< HNPBTOA (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_EXICEN_Pos (10UL) /*!< EXICEN (Bit 10) */ + #define R_USB_FS0_DVSTCTR0_EXICEN_Msk (0x400UL) /*!< EXICEN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_VBUSEN_Pos (9UL) /*!< VBUSEN (Bit 9) */ + #define R_USB_FS0_DVSTCTR0_VBUSEN_Msk (0x200UL) /*!< VBUSEN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_WKUP_Pos (8UL) /*!< WKUP (Bit 8) */ + #define R_USB_FS0_DVSTCTR0_WKUP_Msk (0x100UL) /*!< WKUP (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_RWUPE_Pos (7UL) /*!< RWUPE (Bit 7) */ + #define R_USB_FS0_DVSTCTR0_RWUPE_Msk (0x80UL) /*!< RWUPE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_USBRST_Pos (6UL) /*!< USBRST (Bit 6) */ + #define R_USB_FS0_DVSTCTR0_USBRST_Msk (0x40UL) /*!< USBRST (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_RESUME_Pos (5UL) /*!< RESUME (Bit 5) */ + #define R_USB_FS0_DVSTCTR0_RESUME_Msk (0x20UL) /*!< RESUME (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_UACT_Pos (4UL) /*!< UACT (Bit 4) */ + #define R_USB_FS0_DVSTCTR0_UACT_Msk (0x10UL) /*!< UACT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DVSTCTR0_RHST_Pos (0UL) /*!< RHST (Bit 0) */ + #define R_USB_FS0_DVSTCTR0_RHST_Msk (0x7UL) /*!< RHST (Bitfield-Mask: 0x07) */ +/* ======================================================= TESTMODE ======================================================== */ + #define R_USB_FS0_TESTMODE_UTST_Pos (0UL) /*!< UTST (Bit 0) */ + #define R_USB_FS0_TESTMODE_UTST_Msk (0xfUL) /*!< UTST (Bitfield-Mask: 0x0f) */ +/* ======================================================== CFIFOL ========================================================= */ +/* ======================================================== CFIFOLL ======================================================== */ +/* ========================================================= CFIFO ========================================================= */ +/* ======================================================== CFIFOH ========================================================= */ +/* ======================================================== CFIFOHH ======================================================== */ +/* ======================================================== D0FIFOL ======================================================== */ +/* ======================================================= D0FIFOLL ======================================================== */ +/* ======================================================== D0FIFO ========================================================= */ +/* ======================================================== D0FIFOH ======================================================== */ +/* ======================================================= D0FIFOHH ======================================================== */ +/* ======================================================== D1FIFOL ======================================================== */ +/* ======================================================= D1FIFOLL ======================================================== */ +/* ======================================================== D1FIFO ========================================================= */ +/* ======================================================== D1FIFOH ======================================================== */ +/* ======================================================= D1FIFOHH ======================================================== */ +/* ======================================================= CFIFOSEL ======================================================== */ + #define R_USB_FS0_CFIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USB_FS0_CFIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USB_FS0_CFIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USB_FS0_CFIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_CFIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USB_FS0_CFIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOSEL_ISEL_Pos (5UL) /*!< ISEL (Bit 5) */ + #define R_USB_FS0_CFIFOSEL_ISEL_Msk (0x20UL) /*!< ISEL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USB_FS0_CFIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ +/* ======================================================= CFIFOCTR ======================================================== */ + #define R_USB_FS0_CFIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USB_FS0_CFIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USB_FS0_CFIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USB_FS0_CFIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_CFIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USB_FS0_CFIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ +/* ======================================================= D0FIFOSEL ======================================================= */ + #define R_USB_FS0_D0FIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USB_FS0_D0FIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USB_FS0_D0FIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOSEL_DCLRM_Pos (13UL) /*!< DCLRM (Bit 13) */ + #define R_USB_FS0_D0FIFOSEL_DCLRM_Msk (0x2000UL) /*!< DCLRM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOSEL_DREQE_Pos (12UL) /*!< DREQE (Bit 12) */ + #define R_USB_FS0_D0FIFOSEL_DREQE_Msk (0x1000UL) /*!< DREQE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USB_FS0_D0FIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_D0FIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USB_FS0_D0FIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USB_FS0_D0FIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ +/* ======================================================= D0FIFOCTR ======================================================= */ + #define R_USB_FS0_D0FIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USB_FS0_D0FIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USB_FS0_D0FIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USB_FS0_D0FIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D0FIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USB_FS0_D0FIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ +/* ======================================================= D1FIFOSEL ======================================================= */ + #define R_USB_FS0_D1FIFOSEL_RCNT_Pos (15UL) /*!< RCNT (Bit 15) */ + #define R_USB_FS0_D1FIFOSEL_RCNT_Msk (0x8000UL) /*!< RCNT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOSEL_REW_Pos (14UL) /*!< REW (Bit 14) */ + #define R_USB_FS0_D1FIFOSEL_REW_Msk (0x4000UL) /*!< REW (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOSEL_DCLRM_Pos (13UL) /*!< DCLRM (Bit 13) */ + #define R_USB_FS0_D1FIFOSEL_DCLRM_Msk (0x2000UL) /*!< DCLRM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOSEL_DREQE_Pos (12UL) /*!< DREQE (Bit 12) */ + #define R_USB_FS0_D1FIFOSEL_DREQE_Msk (0x1000UL) /*!< DREQE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOSEL_MBW_Pos (10UL) /*!< MBW (Bit 10) */ + #define R_USB_FS0_D1FIFOSEL_MBW_Msk (0xc00UL) /*!< MBW (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_D1FIFOSEL_BIGEND_Pos (8UL) /*!< BIGEND (Bit 8) */ + #define R_USB_FS0_D1FIFOSEL_BIGEND_Msk (0x100UL) /*!< BIGEND (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOSEL_CURPIPE_Pos (0UL) /*!< CURPIPE (Bit 0) */ + #define R_USB_FS0_D1FIFOSEL_CURPIPE_Msk (0xfUL) /*!< CURPIPE (Bitfield-Mask: 0x0f) */ +/* ======================================================= D1FIFOCTR ======================================================= */ + #define R_USB_FS0_D1FIFOCTR_BVAL_Pos (15UL) /*!< BVAL (Bit 15) */ + #define R_USB_FS0_D1FIFOCTR_BVAL_Msk (0x8000UL) /*!< BVAL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOCTR_BCLR_Pos (14UL) /*!< BCLR (Bit 14) */ + #define R_USB_FS0_D1FIFOCTR_BCLR_Msk (0x4000UL) /*!< BCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOCTR_FRDY_Pos (13UL) /*!< FRDY (Bit 13) */ + #define R_USB_FS0_D1FIFOCTR_FRDY_Msk (0x2000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_D1FIFOCTR_DTLN_Pos (0UL) /*!< DTLN (Bit 0) */ + #define R_USB_FS0_D1FIFOCTR_DTLN_Msk (0xfffUL) /*!< DTLN (Bitfield-Mask: 0xfff) */ +/* ======================================================== INTENB0 ======================================================== */ + #define R_USB_FS0_INTENB0_VBSE_Pos (15UL) /*!< VBSE (Bit 15) */ + #define R_USB_FS0_INTENB0_VBSE_Msk (0x8000UL) /*!< VBSE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_RSME_Pos (14UL) /*!< RSME (Bit 14) */ + #define R_USB_FS0_INTENB0_RSME_Msk (0x4000UL) /*!< RSME (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_SOFE_Pos (13UL) /*!< SOFE (Bit 13) */ + #define R_USB_FS0_INTENB0_SOFE_Msk (0x2000UL) /*!< SOFE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_DVSE_Pos (12UL) /*!< DVSE (Bit 12) */ + #define R_USB_FS0_INTENB0_DVSE_Msk (0x1000UL) /*!< DVSE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_CTRE_Pos (11UL) /*!< CTRE (Bit 11) */ + #define R_USB_FS0_INTENB0_CTRE_Msk (0x800UL) /*!< CTRE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_BEMPE_Pos (10UL) /*!< BEMPE (Bit 10) */ + #define R_USB_FS0_INTENB0_BEMPE_Msk (0x400UL) /*!< BEMPE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_NRDYE_Pos (9UL) /*!< NRDYE (Bit 9) */ + #define R_USB_FS0_INTENB0_NRDYE_Msk (0x200UL) /*!< NRDYE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB0_BRDYE_Pos (8UL) /*!< BRDYE (Bit 8) */ + #define R_USB_FS0_INTENB0_BRDYE_Msk (0x100UL) /*!< BRDYE (Bitfield-Mask: 0x01) */ +/* ======================================================== INTENB1 ======================================================== */ + #define R_USB_FS0_INTENB1_OVRCRE_Pos (15UL) /*!< OVRCRE (Bit 15) */ + #define R_USB_FS0_INTENB1_OVRCRE_Msk (0x8000UL) /*!< OVRCRE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_BCHGE_Pos (14UL) /*!< BCHGE (Bit 14) */ + #define R_USB_FS0_INTENB1_BCHGE_Msk (0x4000UL) /*!< BCHGE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_DTCHE_Pos (12UL) /*!< DTCHE (Bit 12) */ + #define R_USB_FS0_INTENB1_DTCHE_Msk (0x1000UL) /*!< DTCHE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_ATTCHE_Pos (11UL) /*!< ATTCHE (Bit 11) */ + #define R_USB_FS0_INTENB1_ATTCHE_Msk (0x800UL) /*!< ATTCHE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_EOFERRE_Pos (6UL) /*!< EOFERRE (Bit 6) */ + #define R_USB_FS0_INTENB1_EOFERRE_Msk (0x40UL) /*!< EOFERRE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_SIGNE_Pos (5UL) /*!< SIGNE (Bit 5) */ + #define R_USB_FS0_INTENB1_SIGNE_Msk (0x20UL) /*!< SIGNE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_SACKE_Pos (4UL) /*!< SACKE (Bit 4) */ + #define R_USB_FS0_INTENB1_SACKE_Msk (0x10UL) /*!< SACKE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTENB1_PDDETINTE0_Pos (0UL) /*!< PDDETINTE0 (Bit 0) */ + #define R_USB_FS0_INTENB1_PDDETINTE0_Msk (0x1UL) /*!< PDDETINTE0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BRDYENB ======================================================== */ + #define R_USB_FS0_BRDYENB_PIPEBRDYE_Pos (0UL) /*!< PIPEBRDYE (Bit 0) */ + #define R_USB_FS0_BRDYENB_PIPEBRDYE_Msk (0x1UL) /*!< PIPEBRDYE (Bitfield-Mask: 0x01) */ +/* ======================================================== NRDYENB ======================================================== */ + #define R_USB_FS0_NRDYENB_PIPENRDYE_Pos (0UL) /*!< PIPENRDYE (Bit 0) */ + #define R_USB_FS0_NRDYENB_PIPENRDYE_Msk (0x1UL) /*!< PIPENRDYE (Bitfield-Mask: 0x01) */ +/* ======================================================== BEMPENB ======================================================== */ + #define R_USB_FS0_BEMPENB_PIPEBEMPE_Pos (0UL) /*!< PIPEBEMPE (Bit 0) */ + #define R_USB_FS0_BEMPENB_PIPEBEMPE_Msk (0x1UL) /*!< PIPEBEMPE (Bitfield-Mask: 0x01) */ +/* ======================================================== SOFCFG ========================================================= */ + #define R_USB_FS0_SOFCFG_TRNENSEL_Pos (8UL) /*!< TRNENSEL (Bit 8) */ + #define R_USB_FS0_SOFCFG_TRNENSEL_Msk (0x100UL) /*!< TRNENSEL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SOFCFG_BRDYM_Pos (6UL) /*!< BRDYM (Bit 6) */ + #define R_USB_FS0_SOFCFG_BRDYM_Msk (0x40UL) /*!< BRDYM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SOFCFG_INTL_Pos (5UL) /*!< INTL (Bit 5) */ + #define R_USB_FS0_SOFCFG_INTL_Msk (0x20UL) /*!< INTL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_SOFCFG_EDGESTS_Pos (4UL) /*!< EDGESTS (Bit 4) */ + #define R_USB_FS0_SOFCFG_EDGESTS_Msk (0x10UL) /*!< EDGESTS (Bitfield-Mask: 0x01) */ +/* ======================================================== PHYSET ========================================================= */ + #define R_USB_FS0_PHYSET_HSEB_Pos (15UL) /*!< HSEB (Bit 15) */ + #define R_USB_FS0_PHYSET_HSEB_Msk (0x8000UL) /*!< HSEB (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSET_REPSTART_Pos (11UL) /*!< REPSTART (Bit 11) */ + #define R_USB_FS0_PHYSET_REPSTART_Msk (0x800UL) /*!< REPSTART (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSET_REPSEL_Pos (8UL) /*!< REPSEL (Bit 8) */ + #define R_USB_FS0_PHYSET_REPSEL_Msk (0x300UL) /*!< REPSEL (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_PHYSET_CLKSEL_Pos (4UL) /*!< CLKSEL (Bit 4) */ + #define R_USB_FS0_PHYSET_CLKSEL_Msk (0x30UL) /*!< CLKSEL (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_PHYSET_CDPEN_Pos (3UL) /*!< CDPEN (Bit 3) */ + #define R_USB_FS0_PHYSET_CDPEN_Msk (0x8UL) /*!< CDPEN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSET_PLLRESET_Pos (1UL) /*!< PLLRESET (Bit 1) */ + #define R_USB_FS0_PHYSET_PLLRESET_Msk (0x2UL) /*!< PLLRESET (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSET_DIRPD_Pos (0UL) /*!< DIRPD (Bit 0) */ + #define R_USB_FS0_PHYSET_DIRPD_Msk (0x1UL) /*!< DIRPD (Bitfield-Mask: 0x01) */ +/* ======================================================== INTSTS0 ======================================================== */ + #define R_USB_FS0_INTSTS0_VBINT_Pos (15UL) /*!< VBINT (Bit 15) */ + #define R_USB_FS0_INTSTS0_VBINT_Msk (0x8000UL) /*!< VBINT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_RESM_Pos (14UL) /*!< RESM (Bit 14) */ + #define R_USB_FS0_INTSTS0_RESM_Msk (0x4000UL) /*!< RESM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_SOFR_Pos (13UL) /*!< SOFR (Bit 13) */ + #define R_USB_FS0_INTSTS0_SOFR_Msk (0x2000UL) /*!< SOFR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_DVST_Pos (12UL) /*!< DVST (Bit 12) */ + #define R_USB_FS0_INTSTS0_DVST_Msk (0x1000UL) /*!< DVST (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_CTRT_Pos (11UL) /*!< CTRT (Bit 11) */ + #define R_USB_FS0_INTSTS0_CTRT_Msk (0x800UL) /*!< CTRT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_BEMP_Pos (10UL) /*!< BEMP (Bit 10) */ + #define R_USB_FS0_INTSTS0_BEMP_Msk (0x400UL) /*!< BEMP (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_NRDY_Pos (9UL) /*!< NRDY (Bit 9) */ + #define R_USB_FS0_INTSTS0_NRDY_Msk (0x200UL) /*!< NRDY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_BRDY_Pos (8UL) /*!< BRDY (Bit 8) */ + #define R_USB_FS0_INTSTS0_BRDY_Msk (0x100UL) /*!< BRDY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_VBSTS_Pos (7UL) /*!< VBSTS (Bit 7) */ + #define R_USB_FS0_INTSTS0_VBSTS_Msk (0x80UL) /*!< VBSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_DVSQ_Pos (4UL) /*!< DVSQ (Bit 4) */ + #define R_USB_FS0_INTSTS0_DVSQ_Msk (0x70UL) /*!< DVSQ (Bitfield-Mask: 0x07) */ + #define R_USB_FS0_INTSTS0_VALID_Pos (3UL) /*!< VALID (Bit 3) */ + #define R_USB_FS0_INTSTS0_VALID_Msk (0x8UL) /*!< VALID (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS0_CTSQ_Pos (0UL) /*!< CTSQ (Bit 0) */ + #define R_USB_FS0_INTSTS0_CTSQ_Msk (0x7UL) /*!< CTSQ (Bitfield-Mask: 0x07) */ +/* ======================================================== INTSTS1 ======================================================== */ + #define R_USB_FS0_INTSTS1_OVRCR_Pos (15UL) /*!< OVRCR (Bit 15) */ + #define R_USB_FS0_INTSTS1_OVRCR_Msk (0x8000UL) /*!< OVRCR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_BCHG_Pos (14UL) /*!< BCHG (Bit 14) */ + #define R_USB_FS0_INTSTS1_BCHG_Msk (0x4000UL) /*!< BCHG (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_DTCH_Pos (12UL) /*!< DTCH (Bit 12) */ + #define R_USB_FS0_INTSTS1_DTCH_Msk (0x1000UL) /*!< DTCH (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_ATTCH_Pos (11UL) /*!< ATTCH (Bit 11) */ + #define R_USB_FS0_INTSTS1_ATTCH_Msk (0x800UL) /*!< ATTCH (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_L1RSMEND_Pos (9UL) /*!< L1RSMEND (Bit 9) */ + #define R_USB_FS0_INTSTS1_L1RSMEND_Msk (0x200UL) /*!< L1RSMEND (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_LPMEND_Pos (8UL) /*!< LPMEND (Bit 8) */ + #define R_USB_FS0_INTSTS1_LPMEND_Msk (0x100UL) /*!< LPMEND (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_EOFERR_Pos (6UL) /*!< EOFERR (Bit 6) */ + #define R_USB_FS0_INTSTS1_EOFERR_Msk (0x40UL) /*!< EOFERR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_SIGN_Pos (5UL) /*!< SIGN (Bit 5) */ + #define R_USB_FS0_INTSTS1_SIGN_Msk (0x20UL) /*!< SIGN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_SACK_Pos (4UL) /*!< SACK (Bit 4) */ + #define R_USB_FS0_INTSTS1_SACK_Msk (0x10UL) /*!< SACK (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_INTSTS1_PDDETINT0_Pos (0UL) /*!< PDDETINT0 (Bit 0) */ + #define R_USB_FS0_INTSTS1_PDDETINT0_Msk (0x1UL) /*!< PDDETINT0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BRDYSTS ======================================================== */ + #define R_USB_FS0_BRDYSTS_PIPEBRDY_Pos (0UL) /*!< PIPEBRDY (Bit 0) */ + #define R_USB_FS0_BRDYSTS_PIPEBRDY_Msk (0x1UL) /*!< PIPEBRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== NRDYSTS ======================================================== */ + #define R_USB_FS0_NRDYSTS_PIPENRDY_Pos (0UL) /*!< PIPENRDY (Bit 0) */ + #define R_USB_FS0_NRDYSTS_PIPENRDY_Msk (0x1UL) /*!< PIPENRDY (Bitfield-Mask: 0x01) */ +/* ======================================================== BEMPSTS ======================================================== */ + #define R_USB_FS0_BEMPSTS_PIPEBEMP_Pos (0UL) /*!< PIPEBEMP (Bit 0) */ + #define R_USB_FS0_BEMPSTS_PIPEBEMP_Msk (0x1UL) /*!< PIPEBEMP (Bitfield-Mask: 0x01) */ +/* ======================================================== FRMNUM ========================================================= */ + #define R_USB_FS0_FRMNUM_OVRN_Pos (15UL) /*!< OVRN (Bit 15) */ + #define R_USB_FS0_FRMNUM_OVRN_Msk (0x8000UL) /*!< OVRN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_FRMNUM_CRCE_Pos (14UL) /*!< CRCE (Bit 14) */ + #define R_USB_FS0_FRMNUM_CRCE_Msk (0x4000UL) /*!< CRCE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_FRMNUM_FRNM_Pos (0UL) /*!< FRNM (Bit 0) */ + #define R_USB_FS0_FRMNUM_FRNM_Msk (0x7ffUL) /*!< FRNM (Bitfield-Mask: 0x7ff) */ +/* ======================================================== DVCHGR ========================================================= */ + #define R_USB_FS0_DVCHGR_DVCHG_Pos (15UL) /*!< DVCHG (Bit 15) */ + #define R_USB_FS0_DVCHGR_DVCHG_Msk (0x8000UL) /*!< DVCHG (Bitfield-Mask: 0x01) */ +/* ======================================================== USBADDR ======================================================== */ + #define R_USB_FS0_USBADDR_STSRECOV0_Pos (8UL) /*!< STSRECOV0 (Bit 8) */ + #define R_USB_FS0_USBADDR_STSRECOV0_Msk (0xf00UL) /*!< STSRECOV0 (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_USBADDR_USBADDR_Pos (0UL) /*!< USBADDR (Bit 0) */ + #define R_USB_FS0_USBADDR_USBADDR_Msk (0x7fUL) /*!< USBADDR (Bitfield-Mask: 0x7f) */ +/* ======================================================== USBREQ ========================================================= */ + #define R_USB_FS0_USBREQ_BREQUEST_Pos (8UL) /*!< BREQUEST (Bit 8) */ + #define R_USB_FS0_USBREQ_BREQUEST_Msk (0xff00UL) /*!< BREQUEST (Bitfield-Mask: 0xff) */ + #define R_USB_FS0_USBREQ_BMREQUESTTYPE_Pos (0UL) /*!< BMREQUESTTYPE (Bit 0) */ + #define R_USB_FS0_USBREQ_BMREQUESTTYPE_Msk (0xffUL) /*!< BMREQUESTTYPE (Bitfield-Mask: 0xff) */ +/* ======================================================== USBVAL ========================================================= */ + #define R_USB_FS0_USBVAL_WVALUE_Pos (0UL) /*!< WVALUE (Bit 0) */ + #define R_USB_FS0_USBVAL_WVALUE_Msk (0xffffUL) /*!< WVALUE (Bitfield-Mask: 0xffff) */ +/* ======================================================== USBINDX ======================================================== */ + #define R_USB_FS0_USBINDX_WINDEX_Pos (0UL) /*!< WINDEX (Bit 0) */ + #define R_USB_FS0_USBINDX_WINDEX_Msk (0xffffUL) /*!< WINDEX (Bitfield-Mask: 0xffff) */ +/* ======================================================== USBLENG ======================================================== */ + #define R_USB_FS0_USBLENG_WLENGTH_Pos (0UL) /*!< WLENGTH (Bit 0) */ + #define R_USB_FS0_USBLENG_WLENGTH_Msk (0xffffUL) /*!< WLENGTH (Bitfield-Mask: 0xffff) */ +/* ======================================================== DCPCFG ========================================================= */ + #define R_USB_FS0_DCPCFG_CNTMD_Pos (8UL) /*!< CNTMD (Bit 8) */ + #define R_USB_FS0_DCPCFG_CNTMD_Msk (0x100UL) /*!< CNTMD (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCFG_SHTNAK_Pos (7UL) /*!< SHTNAK (Bit 7) */ + #define R_USB_FS0_DCPCFG_SHTNAK_Msk (0x80UL) /*!< SHTNAK (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCFG_DIR_Pos (4UL) /*!< DIR (Bit 4) */ + #define R_USB_FS0_DCPCFG_DIR_Msk (0x10UL) /*!< DIR (Bitfield-Mask: 0x01) */ +/* ======================================================== DCPMAXP ======================================================== */ + #define R_USB_FS0_DCPMAXP_DEVSEL_Pos (12UL) /*!< DEVSEL (Bit 12) */ + #define R_USB_FS0_DCPMAXP_DEVSEL_Msk (0xf000UL) /*!< DEVSEL (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_DCPMAXP_MXPS_Pos (0UL) /*!< MXPS (Bit 0) */ + #define R_USB_FS0_DCPMAXP_MXPS_Msk (0x7fUL) /*!< MXPS (Bitfield-Mask: 0x7f) */ +/* ======================================================== DCPCTR ========================================================= */ + #define R_USB_FS0_DCPCTR_BSTS_Pos (15UL) /*!< BSTS (Bit 15) */ + #define R_USB_FS0_DCPCTR_BSTS_Msk (0x8000UL) /*!< BSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_SUREQ_Pos (14UL) /*!< SUREQ (Bit 14) */ + #define R_USB_FS0_DCPCTR_SUREQ_Msk (0x4000UL) /*!< SUREQ (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_SUREQCLR_Pos (11UL) /*!< SUREQCLR (Bit 11) */ + #define R_USB_FS0_DCPCTR_SUREQCLR_Msk (0x800UL) /*!< SUREQCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_SQCLR_Pos (8UL) /*!< SQCLR (Bit 8) */ + #define R_USB_FS0_DCPCTR_SQCLR_Msk (0x100UL) /*!< SQCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_SQSET_Pos (7UL) /*!< SQSET (Bit 7) */ + #define R_USB_FS0_DCPCTR_SQSET_Msk (0x80UL) /*!< SQSET (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_SQMON_Pos (6UL) /*!< SQMON (Bit 6) */ + #define R_USB_FS0_DCPCTR_SQMON_Msk (0x40UL) /*!< SQMON (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_PBUSY_Pos (5UL) /*!< PBUSY (Bit 5) */ + #define R_USB_FS0_DCPCTR_PBUSY_Msk (0x20UL) /*!< PBUSY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_CCPL_Pos (2UL) /*!< CCPL (Bit 2) */ + #define R_USB_FS0_DCPCTR_CCPL_Msk (0x4UL) /*!< CCPL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DCPCTR_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define R_USB_FS0_DCPCTR_PID_Msk (0x3UL) /*!< PID (Bitfield-Mask: 0x03) */ +/* ======================================================== PIPESEL ======================================================== */ + #define R_USB_FS0_PIPESEL_PIPESEL_Pos (0UL) /*!< PIPESEL (Bit 0) */ + #define R_USB_FS0_PIPESEL_PIPESEL_Msk (0xfUL) /*!< PIPESEL (Bitfield-Mask: 0x0f) */ +/* ======================================================== PIPECFG ======================================================== */ + #define R_USB_FS0_PIPECFG_TYPE_Pos (14UL) /*!< TYPE (Bit 14) */ + #define R_USB_FS0_PIPECFG_TYPE_Msk (0xc000UL) /*!< TYPE (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_PIPECFG_BFRE_Pos (10UL) /*!< BFRE (Bit 10) */ + #define R_USB_FS0_PIPECFG_BFRE_Msk (0x400UL) /*!< BFRE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPECFG_DBLB_Pos (9UL) /*!< DBLB (Bit 9) */ + #define R_USB_FS0_PIPECFG_DBLB_Msk (0x200UL) /*!< DBLB (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPECFG_SHTNAK_Pos (7UL) /*!< SHTNAK (Bit 7) */ + #define R_USB_FS0_PIPECFG_SHTNAK_Msk (0x80UL) /*!< SHTNAK (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPECFG_DIR_Pos (4UL) /*!< DIR (Bit 4) */ + #define R_USB_FS0_PIPECFG_DIR_Msk (0x10UL) /*!< DIR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPECFG_EPNUM_Pos (0UL) /*!< EPNUM (Bit 0) */ + #define R_USB_FS0_PIPECFG_EPNUM_Msk (0xfUL) /*!< EPNUM (Bitfield-Mask: 0x0f) */ +/* ======================================================= PIPEMAXP ======================================================== */ + #define R_USB_FS0_PIPEMAXP_DEVSEL_Pos (12UL) /*!< DEVSEL (Bit 12) */ + #define R_USB_FS0_PIPEMAXP_DEVSEL_Msk (0xf000UL) /*!< DEVSEL (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_PIPEMAXP_MXPS_Pos (0UL) /*!< MXPS (Bit 0) */ + #define R_USB_FS0_PIPEMAXP_MXPS_Msk (0x1ffUL) /*!< MXPS (Bitfield-Mask: 0x1ff) */ +/* ======================================================= PIPEPERI ======================================================== */ + #define R_USB_FS0_PIPEPERI_IFIS_Pos (12UL) /*!< IFIS (Bit 12) */ + #define R_USB_FS0_PIPEPERI_IFIS_Msk (0x1000UL) /*!< IFIS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPEPERI_IITV_Pos (0UL) /*!< IITV (Bit 0) */ + #define R_USB_FS0_PIPEPERI_IITV_Msk (0x7UL) /*!< IITV (Bitfield-Mask: 0x07) */ +/* ======================================================= PIPE_CTR ======================================================== */ + #define R_USB_FS0_PIPE_CTR_BSTS_Pos (15UL) /*!< BSTS (Bit 15) */ + #define R_USB_FS0_PIPE_CTR_BSTS_Msk (0x8000UL) /*!< BSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_INBUFM_Pos (14UL) /*!< INBUFM (Bit 14) */ + #define R_USB_FS0_PIPE_CTR_INBUFM_Msk (0x4000UL) /*!< INBUFM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_CSCLR_Pos (13UL) /*!< CSCLR (Bit 13) */ + #define R_USB_FS0_PIPE_CTR_CSCLR_Msk (0x2000UL) /*!< CSCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_CSSTS_Pos (12UL) /*!< CSSTS (Bit 12) */ + #define R_USB_FS0_PIPE_CTR_CSSTS_Msk (0x1000UL) /*!< CSSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_ATREPM_Pos (10UL) /*!< ATREPM (Bit 10) */ + #define R_USB_FS0_PIPE_CTR_ATREPM_Msk (0x400UL) /*!< ATREPM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_ACLRM_Pos (9UL) /*!< ACLRM (Bit 9) */ + #define R_USB_FS0_PIPE_CTR_ACLRM_Msk (0x200UL) /*!< ACLRM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_SQCLR_Pos (8UL) /*!< SQCLR (Bit 8) */ + #define R_USB_FS0_PIPE_CTR_SQCLR_Msk (0x100UL) /*!< SQCLR (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_SQSET_Pos (7UL) /*!< SQSET (Bit 7) */ + #define R_USB_FS0_PIPE_CTR_SQSET_Msk (0x80UL) /*!< SQSET (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_SQMON_Pos (6UL) /*!< SQMON (Bit 6) */ + #define R_USB_FS0_PIPE_CTR_SQMON_Msk (0x40UL) /*!< SQMON (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_PBUSY_Pos (5UL) /*!< PBUSY (Bit 5) */ + #define R_USB_FS0_PIPE_CTR_PBUSY_Msk (0x20UL) /*!< PBUSY (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PIPE_CTR_PID_Pos (0UL) /*!< PID (Bit 0) */ + #define R_USB_FS0_PIPE_CTR_PID_Msk (0x3UL) /*!< PID (Bitfield-Mask: 0x03) */ +/* ======================================================== DEVADD ========================================================= */ + #define R_USB_FS0_DEVADD_UPPHUB_Pos (11UL) /*!< UPPHUB (Bit 11) */ + #define R_USB_FS0_DEVADD_UPPHUB_Msk (0x7800UL) /*!< UPPHUB (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_DEVADD_HUBPORT_Pos (8UL) /*!< HUBPORT (Bit 8) */ + #define R_USB_FS0_DEVADD_HUBPORT_Msk (0x700UL) /*!< HUBPORT (Bitfield-Mask: 0x07) */ + #define R_USB_FS0_DEVADD_USBSPD_Pos (6UL) /*!< USBSPD (Bit 6) */ + #define R_USB_FS0_DEVADD_USBSPD_Msk (0xc0UL) /*!< USBSPD (Bitfield-Mask: 0x03) */ +/* ====================================================== USBBCCTRL0 ======================================================= */ + #define R_USB_FS0_USBBCCTRL0_PDDETSTS0_Pos (9UL) /*!< PDDETSTS0 (Bit 9) */ + #define R_USB_FS0_USBBCCTRL0_PDDETSTS0_Msk (0x200UL) /*!< PDDETSTS0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_CHGDETSTS0_Pos (8UL) /*!< CHGDETSTS0 (Bit 8) */ + #define R_USB_FS0_USBBCCTRL0_CHGDETSTS0_Msk (0x100UL) /*!< CHGDETSTS0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_BATCHGE0_Pos (7UL) /*!< BATCHGE0 (Bit 7) */ + #define R_USB_FS0_USBBCCTRL0_BATCHGE0_Msk (0x80UL) /*!< BATCHGE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_VDMSRCE0_Pos (5UL) /*!< VDMSRCE0 (Bit 5) */ + #define R_USB_FS0_USBBCCTRL0_VDMSRCE0_Msk (0x20UL) /*!< VDMSRCE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_IDPSINKE0_Pos (4UL) /*!< IDPSINKE0 (Bit 4) */ + #define R_USB_FS0_USBBCCTRL0_IDPSINKE0_Msk (0x10UL) /*!< IDPSINKE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_VDPSRCE0_Pos (3UL) /*!< VDPSRCE0 (Bit 3) */ + #define R_USB_FS0_USBBCCTRL0_VDPSRCE0_Msk (0x8UL) /*!< VDPSRCE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_IDMSINKE0_Pos (2UL) /*!< IDMSINKE0 (Bit 2) */ + #define R_USB_FS0_USBBCCTRL0_IDMSINKE0_Msk (0x4UL) /*!< IDMSINKE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_IDPSRCE0_Pos (1UL) /*!< IDPSRCE0 (Bit 1) */ + #define R_USB_FS0_USBBCCTRL0_IDPSRCE0_Msk (0x2UL) /*!< IDPSRCE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBBCCTRL0_RPDME0_Pos (0UL) /*!< RPDME0 (Bit 0) */ + #define R_USB_FS0_USBBCCTRL0_RPDME0_Msk (0x1UL) /*!< RPDME0 (Bitfield-Mask: 0x01) */ +/* ======================================================== UCKSEL ========================================================= */ + #define R_USB_FS0_UCKSEL_UCKSELC_Pos (0UL) /*!< UCKSELC (Bit 0) */ + #define R_USB_FS0_UCKSEL_UCKSELC_Msk (0x1UL) /*!< UCKSELC (Bitfield-Mask: 0x01) */ +/* ========================================================= USBMC ========================================================= */ + #define R_USB_FS0_USBMC_VDCEN_Pos (7UL) /*!< VDCEN (Bit 7) */ + #define R_USB_FS0_USBMC_VDCEN_Msk (0x80UL) /*!< VDCEN (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_USBMC_VDDUSBE_Pos (0UL) /*!< VDDUSBE (Bit 0) */ + #define R_USB_FS0_USBMC_VDDUSBE_Msk (0x1UL) /*!< VDDUSBE (Bitfield-Mask: 0x01) */ +/* ======================================================== PHYSLEW ======================================================== */ + #define R_USB_FS0_PHYSLEW_SLEWF01_Pos (3UL) /*!< SLEWF01 (Bit 3) */ + #define R_USB_FS0_PHYSLEW_SLEWF01_Msk (0x8UL) /*!< SLEWF01 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSLEW_SLEWF00_Pos (2UL) /*!< SLEWF00 (Bit 2) */ + #define R_USB_FS0_PHYSLEW_SLEWF00_Msk (0x4UL) /*!< SLEWF00 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSLEW_SLEWR01_Pos (1UL) /*!< SLEWR01 (Bit 1) */ + #define R_USB_FS0_PHYSLEW_SLEWR01_Msk (0x2UL) /*!< SLEWR01 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PHYSLEW_SLEWR00_Pos (0UL) /*!< SLEWR00 (Bit 0) */ + #define R_USB_FS0_PHYSLEW_SLEWR00_Msk (0x1UL) /*!< SLEWR00 (Bitfield-Mask: 0x01) */ +/* ======================================================== LPCTRL ========================================================= */ + #define R_USB_FS0_LPCTRL_HWUPM_Pos (7UL) /*!< HWUPM (Bit 7) */ + #define R_USB_FS0_LPCTRL_HWUPM_Msk (0x80UL) /*!< HWUPM (Bitfield-Mask: 0x01) */ +/* ========================================================= LPSTS ========================================================= */ + #define R_USB_FS0_LPSTS_SUSPENDM_Pos (14UL) /*!< SUSPENDM (Bit 14) */ + #define R_USB_FS0_LPSTS_SUSPENDM_Msk (0x4000UL) /*!< SUSPENDM (Bitfield-Mask: 0x01) */ +/* ======================================================== BCCTRL ========================================================= */ + #define R_USB_FS0_BCCTRL_PDDETSTS_Pos (9UL) /*!< PDDETSTS (Bit 9) */ + #define R_USB_FS0_BCCTRL_PDDETSTS_Msk (0x200UL) /*!< PDDETSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_CHGDETSTS_Pos (8UL) /*!< CHGDETSTS (Bit 8) */ + #define R_USB_FS0_BCCTRL_CHGDETSTS_Msk (0x100UL) /*!< CHGDETSTS (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_DCPMODE_Pos (5UL) /*!< DCPMODE (Bit 5) */ + #define R_USB_FS0_BCCTRL_DCPMODE_Msk (0x20UL) /*!< DCPMODE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_VDMSRCE_Pos (4UL) /*!< VDMSRCE (Bit 4) */ + #define R_USB_FS0_BCCTRL_VDMSRCE_Msk (0x10UL) /*!< VDMSRCE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_IDPSINKE_Pos (3UL) /*!< IDPSINKE (Bit 3) */ + #define R_USB_FS0_BCCTRL_IDPSINKE_Msk (0x8UL) /*!< IDPSINKE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_VDPSRCE_Pos (2UL) /*!< VDPSRCE (Bit 2) */ + #define R_USB_FS0_BCCTRL_VDPSRCE_Msk (0x4UL) /*!< VDPSRCE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_IDMSINKE_Pos (1UL) /*!< IDMSINKE (Bit 1) */ + #define R_USB_FS0_BCCTRL_IDMSINKE_Msk (0x2UL) /*!< IDMSINKE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_BCCTRL_IDPSRCE_Pos (0UL) /*!< IDPSRCE (Bit 0) */ + #define R_USB_FS0_BCCTRL_IDPSRCE_Msk (0x1UL) /*!< IDPSRCE (Bitfield-Mask: 0x01) */ +/* ======================================================= PL1CTRL1 ======================================================== */ + #define R_USB_FS0_PL1CTRL1_L1EXTMD_Pos (14UL) /*!< L1EXTMD (Bit 14) */ + #define R_USB_FS0_PL1CTRL1_L1EXTMD_Msk (0x4000UL) /*!< L1EXTMD (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PL1CTRL1_HIRDTHR_Pos (8UL) /*!< HIRDTHR (Bit 8) */ + #define R_USB_FS0_PL1CTRL1_HIRDTHR_Msk (0xf00UL) /*!< HIRDTHR (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_PL1CTRL1_DVSQ_Pos (4UL) /*!< DVSQ (Bit 4) */ + #define R_USB_FS0_PL1CTRL1_DVSQ_Msk (0xf0UL) /*!< DVSQ (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_PL1CTRL1_L1NEGOMD_Pos (3UL) /*!< L1NEGOMD (Bit 3) */ + #define R_USB_FS0_PL1CTRL1_L1NEGOMD_Msk (0x8UL) /*!< L1NEGOMD (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PL1CTRL1_L1RESPMD_Pos (1UL) /*!< L1RESPMD (Bit 1) */ + #define R_USB_FS0_PL1CTRL1_L1RESPMD_Msk (0x6UL) /*!< L1RESPMD (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_PL1CTRL1_L1RESPEN_Pos (0UL) /*!< L1RESPEN (Bit 0) */ + #define R_USB_FS0_PL1CTRL1_L1RESPEN_Msk (0x1UL) /*!< L1RESPEN (Bitfield-Mask: 0x01) */ +/* ======================================================= PL1CTRL2 ======================================================== */ + #define R_USB_FS0_PL1CTRL2_RWEMON_Pos (12UL) /*!< RWEMON (Bit 12) */ + #define R_USB_FS0_PL1CTRL2_RWEMON_Msk (0x1000UL) /*!< RWEMON (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_PL1CTRL2_HIRDMON_Pos (8UL) /*!< HIRDMON (Bit 8) */ + #define R_USB_FS0_PL1CTRL2_HIRDMON_Msk (0xf00UL) /*!< HIRDMON (Bitfield-Mask: 0x0f) */ +/* ======================================================= HL1CTRL1 ======================================================== */ + #define R_USB_FS0_HL1CTRL1_L1STATUS_Pos (1UL) /*!< L1STATUS (Bit 1) */ + #define R_USB_FS0_HL1CTRL1_L1STATUS_Msk (0x6UL) /*!< L1STATUS (Bitfield-Mask: 0x03) */ + #define R_USB_FS0_HL1CTRL1_L1REQ_Pos (0UL) /*!< L1REQ (Bit 0) */ + #define R_USB_FS0_HL1CTRL1_L1REQ_Msk (0x1UL) /*!< L1REQ (Bitfield-Mask: 0x01) */ +/* ======================================================= HL1CTRL2 ======================================================== */ + #define R_USB_FS0_HL1CTRL2_BESL_Pos (15UL) /*!< BESL (Bit 15) */ + #define R_USB_FS0_HL1CTRL2_BESL_Msk (0x8000UL) /*!< BESL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_HL1CTRL2_L1RWE_Pos (12UL) /*!< L1RWE (Bit 12) */ + #define R_USB_FS0_HL1CTRL2_L1RWE_Msk (0x1000UL) /*!< L1RWE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_HL1CTRL2_HIRD_Pos (8UL) /*!< HIRD (Bit 8) */ + #define R_USB_FS0_HL1CTRL2_HIRD_Msk (0xf00UL) /*!< HIRD (Bitfield-Mask: 0x0f) */ + #define R_USB_FS0_HL1CTRL2_L1ADDR_Pos (0UL) /*!< L1ADDR (Bit 0) */ + #define R_USB_FS0_HL1CTRL2_L1ADDR_Msk (0xfUL) /*!< L1ADDR (Bitfield-Mask: 0x0f) */ +/* ======================================================== DPUSR0R ======================================================== */ + #define R_USB_FS0_DPUSR0R_DVBSTSHM_Pos (23UL) /*!< DVBSTSHM (Bit 23) */ + #define R_USB_FS0_DPUSR0R_DVBSTSHM_Msk (0x800000UL) /*!< DVBSTSHM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_DOVCBHM_Pos (21UL) /*!< DOVCBHM (Bit 21) */ + #define R_USB_FS0_DPUSR0R_DOVCBHM_Msk (0x200000UL) /*!< DOVCBHM (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_DOVCAHM_Pos (20UL) /*!< DOVCAHM (Bit 20) */ + #define R_USB_FS0_DPUSR0R_DOVCAHM_Msk (0x100000UL) /*!< DOVCAHM (Bitfield-Mask: 0x01) */ +/* ======================================================== DPUSR1R ======================================================== */ + #define R_USB_FS0_DPUSR1R_DVBSTSH_Pos (23UL) /*!< DVBSTSH (Bit 23) */ + #define R_USB_FS0_DPUSR1R_DVBSTSH_Msk (0x800000UL) /*!< DVBSTSH (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_DOVCBH_Pos (21UL) /*!< DOVCBH (Bit 21) */ + #define R_USB_FS0_DPUSR1R_DOVCBH_Msk (0x200000UL) /*!< DOVCBH (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_DOVCAH_Pos (20UL) /*!< DOVCAH (Bit 20) */ + #define R_USB_FS0_DPUSR1R_DOVCAH_Msk (0x100000UL) /*!< DOVCAH (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_DVBSTSHE_Pos (7UL) /*!< DVBSTSHE (Bit 7) */ + #define R_USB_FS0_DPUSR1R_DVBSTSHE_Msk (0x80UL) /*!< DVBSTSHE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_DOVCBHE_Pos (5UL) /*!< DOVCBHE (Bit 5) */ + #define R_USB_FS0_DPUSR1R_DOVCBHE_Msk (0x20UL) /*!< DOVCBHE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_DOVCAHE_Pos (4UL) /*!< DOVCAHE (Bit 4) */ + #define R_USB_FS0_DPUSR1R_DOVCAHE_Msk (0x10UL) /*!< DOVCAHE (Bitfield-Mask: 0x01) */ +/* ======================================================== DPUSR2R ======================================================== */ + #define R_USB_FS0_DPUSR2R_DMINTE_Pos (9UL) /*!< DMINTE (Bit 9) */ + #define R_USB_FS0_DPUSR2R_DMINTE_Msk (0x200UL) /*!< DMINTE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR2R_DPINTE_Pos (8UL) /*!< DPINTE (Bit 8) */ + #define R_USB_FS0_DPUSR2R_DPINTE_Msk (0x100UL) /*!< DPINTE (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR2R_DMVAL_Pos (5UL) /*!< DMVAL (Bit 5) */ + #define R_USB_FS0_DPUSR2R_DMVAL_Msk (0x20UL) /*!< DMVAL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR2R_DPVAL_Pos (4UL) /*!< DPVAL (Bit 4) */ + #define R_USB_FS0_DPUSR2R_DPVAL_Msk (0x10UL) /*!< DPVAL (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR2R_DMINT_Pos (1UL) /*!< DMINT (Bit 1) */ + #define R_USB_FS0_DPUSR2R_DMINT_Msk (0x2UL) /*!< DMINT (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR2R_DPINT_Pos (0UL) /*!< DPINT (Bit 0) */ + #define R_USB_FS0_DPUSR2R_DPINT_Msk (0x1UL) /*!< DPINT (Bitfield-Mask: 0x01) */ +/* ======================================================== DPUSRCR ======================================================== */ + #define R_USB_FS0_DPUSRCR_FIXPHYPD_Pos (1UL) /*!< FIXPHYPD (Bit 1) */ + #define R_USB_FS0_DPUSRCR_FIXPHYPD_Msk (0x2UL) /*!< FIXPHYPD (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSRCR_FIXPHY_Pos (0UL) /*!< FIXPHY (Bit 0) */ + #define R_USB_FS0_DPUSRCR_FIXPHY_Msk (0x1UL) /*!< FIXPHY (Bitfield-Mask: 0x01) */ +/* ====================================================== DPUSR0R_FS ======================================================= */ + #define R_USB_FS0_DPUSR0R_FS_DVBSTS0_Pos (23UL) /*!< DVBSTS0 (Bit 23) */ + #define R_USB_FS0_DPUSR0R_FS_DVBSTS0_Msk (0x800000UL) /*!< DVBSTS0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_DOVCB0_Pos (21UL) /*!< DOVCB0 (Bit 21) */ + #define R_USB_FS0_DPUSR0R_FS_DOVCB0_Msk (0x200000UL) /*!< DOVCB0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_DOVCA0_Pos (20UL) /*!< DOVCA0 (Bit 20) */ + #define R_USB_FS0_DPUSR0R_FS_DOVCA0_Msk (0x100000UL) /*!< DOVCA0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_DM0_Pos (17UL) /*!< DM0 (Bit 17) */ + #define R_USB_FS0_DPUSR0R_FS_DM0_Msk (0x20000UL) /*!< DM0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_DP0_Pos (16UL) /*!< DP0 (Bit 16) */ + #define R_USB_FS0_DPUSR0R_FS_DP0_Msk (0x10000UL) /*!< DP0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_FIXPHY0_Pos (4UL) /*!< FIXPHY0 (Bit 4) */ + #define R_USB_FS0_DPUSR0R_FS_FIXPHY0_Msk (0x10UL) /*!< FIXPHY0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_DRPD0_Pos (3UL) /*!< DRPD0 (Bit 3) */ + #define R_USB_FS0_DPUSR0R_FS_DRPD0_Msk (0x8UL) /*!< DRPD0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_RPUE0_Pos (1UL) /*!< RPUE0 (Bit 1) */ + #define R_USB_FS0_DPUSR0R_FS_RPUE0_Msk (0x2UL) /*!< RPUE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR0R_FS_SRPC0_Pos (0UL) /*!< SRPC0 (Bit 0) */ + #define R_USB_FS0_DPUSR0R_FS_SRPC0_Msk (0x1UL) /*!< SRPC0 (Bitfield-Mask: 0x01) */ +/* ====================================================== DPUSR1R_FS ======================================================= */ + #define R_USB_FS0_DPUSR1R_FS_DVBINT0_Pos (23UL) /*!< DVBINT0 (Bit 23) */ + #define R_USB_FS0_DPUSR1R_FS_DVBINT0_Msk (0x800000UL) /*!< DVBINT0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRB0_Pos (21UL) /*!< DOVRCRB0 (Bit 21) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRB0_Msk (0x200000UL) /*!< DOVRCRB0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRA0_Pos (20UL) /*!< DOVRCRA0 (Bit 20) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRA0_Msk (0x100000UL) /*!< DOVRCRA0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DMINT0_Pos (17UL) /*!< DMINT0 (Bit 17) */ + #define R_USB_FS0_DPUSR1R_FS_DMINT0_Msk (0x20000UL) /*!< DMINT0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DPINT0_Pos (16UL) /*!< DPINT0 (Bit 16) */ + #define R_USB_FS0_DPUSR1R_FS_DPINT0_Msk (0x10000UL) /*!< DPINT0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DVBSE0_Pos (7UL) /*!< DVBSE0 (Bit 7) */ + #define R_USB_FS0_DPUSR1R_FS_DVBSE0_Msk (0x80UL) /*!< DVBSE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRBE0_Pos (5UL) /*!< DOVRCRBE0 (Bit 5) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRBE0_Msk (0x20UL) /*!< DOVRCRBE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRAE0_Pos (4UL) /*!< DOVRCRAE0 (Bit 4) */ + #define R_USB_FS0_DPUSR1R_FS_DOVRCRAE0_Msk (0x10UL) /*!< DOVRCRAE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DMINTE0_Pos (1UL) /*!< DMINTE0 (Bit 1) */ + #define R_USB_FS0_DPUSR1R_FS_DMINTE0_Msk (0x2UL) /*!< DMINTE0 (Bitfield-Mask: 0x01) */ + #define R_USB_FS0_DPUSR1R_FS_DPINTE0_Pos (0UL) /*!< DPINTE0 (Bit 0) */ + #define R_USB_FS0_DPUSR1R_FS_DPINTE0_Msk (0x1UL) /*!< DPINTE0 (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_WDT ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= WDTRR ========================================================= */ + #define R_WDT_WDTRR_WDTRR_Pos (0UL) /*!< WDTRR (Bit 0) */ + #define R_WDT_WDTRR_WDTRR_Msk (0xffUL) /*!< WDTRR (Bitfield-Mask: 0xff) */ +/* ========================================================= WDTCR ========================================================= */ + #define R_WDT_WDTCR_RPSS_Pos (12UL) /*!< RPSS (Bit 12) */ + #define R_WDT_WDTCR_RPSS_Msk (0x3000UL) /*!< RPSS (Bitfield-Mask: 0x03) */ + #define R_WDT_WDTCR_RPES_Pos (8UL) /*!< RPES (Bit 8) */ + #define R_WDT_WDTCR_RPES_Msk (0x300UL) /*!< RPES (Bitfield-Mask: 0x03) */ + #define R_WDT_WDTCR_CKS_Pos (4UL) /*!< CKS (Bit 4) */ + #define R_WDT_WDTCR_CKS_Msk (0xf0UL) /*!< CKS (Bitfield-Mask: 0x0f) */ + #define R_WDT_WDTCR_TOPS_Pos (0UL) /*!< TOPS (Bit 0) */ + #define R_WDT_WDTCR_TOPS_Msk (0x3UL) /*!< TOPS (Bitfield-Mask: 0x03) */ +/* ========================================================= WDTSR ========================================================= */ + #define R_WDT_WDTSR_REFEF_Pos (15UL) /*!< REFEF (Bit 15) */ + #define R_WDT_WDTSR_REFEF_Msk (0x8000UL) /*!< REFEF (Bitfield-Mask: 0x01) */ + #define R_WDT_WDTSR_UNDFF_Pos (14UL) /*!< UNDFF (Bit 14) */ + #define R_WDT_WDTSR_UNDFF_Msk (0x4000UL) /*!< UNDFF (Bitfield-Mask: 0x01) */ + #define R_WDT_WDTSR_CNTVAL_Pos (0UL) /*!< CNTVAL (Bit 0) */ + #define R_WDT_WDTSR_CNTVAL_Msk (0x3fffUL) /*!< CNTVAL (Bitfield-Mask: 0x3fff) */ +/* ======================================================== WDTRCR ========================================================= */ + #define R_WDT_WDTRCR_RSTIRQS_Pos (7UL) /*!< RSTIRQS (Bit 7) */ + #define R_WDT_WDTRCR_RSTIRQS_Msk (0x80UL) /*!< RSTIRQS (Bitfield-Mask: 0x01) */ +/* ======================================================= WDTCSTPR ======================================================== */ + #define R_WDT_WDTCSTPR_SLCSTP_Pos (7UL) /*!< SLCSTP (Bit 7) */ + #define R_WDT_WDTCSTPR_SLCSTP_Msk (0x80UL) /*!< SLCSTP (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_AES ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== AESMOD ========================================================= */ + #define R_AES_AESMOD_WRRQEN_Pos (9UL) /*!< WRRQEN (Bit 9) */ + #define R_AES_AESMOD_WRRQEN_Msk (0x200UL) /*!< WRRQEN (Bitfield-Mask: 0x01) */ + #define R_AES_AESMOD_RDRQEN_Pos (8UL) /*!< RDRQEN (Bit 8) */ + #define R_AES_AESMOD_RDRQEN_Msk (0x100UL) /*!< RDRQEN (Bitfield-Mask: 0x01) */ + #define R_AES_AESMOD_MODEN_Pos (0UL) /*!< MODEN (Bit 0) */ + #define R_AES_AESMOD_MODEN_Msk (0x1UL) /*!< MODEN (Bitfield-Mask: 0x01) */ +/* ======================================================== AESCMD ========================================================= */ + #define R_AES_AESCMD_ILOP_Pos (31UL) /*!< ILOP (Bit 31) */ + #define R_AES_AESCMD_ILOP_Msk (0x80000000UL) /*!< ILOP (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_KWRDY1_Pos (30UL) /*!< KWRDY1 (Bit 30) */ + #define R_AES_AESCMD_KWRDY1_Msk (0x40000000UL) /*!< KWRDY1 (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_KWRDY0_Pos (29UL) /*!< KWRDY0 (Bit 29) */ + #define R_AES_AESCMD_KWRDY0_Msk (0x20000000UL) /*!< KWRDY0 (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_IRRDY_Pos (28UL) /*!< IRRDY (Bit 28) */ + #define R_AES_AESCMD_IRRDY_Msk (0x10000000UL) /*!< IRRDY (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_IWRDY_Pos (27UL) /*!< IWRDY (Bit 27) */ + #define R_AES_AESCMD_IWRDY_Msk (0x8000000UL) /*!< IWRDY (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_CWRDY_Pos (26UL) /*!< CWRDY (Bit 26) */ + #define R_AES_AESCMD_CWRDY_Msk (0x4000000UL) /*!< CWRDY (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_DRRDY_Pos (25UL) /*!< DRRDY (Bit 25) */ + #define R_AES_AESCMD_DRRDY_Msk (0x2000000UL) /*!< DRRDY (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_DWRDY_Pos (24UL) /*!< DWRDY (Bit 24) */ + #define R_AES_AESCMD_DWRDY_Msk (0x1000000UL) /*!< DWRDY (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_KEYSEL_Pos (12UL) /*!< KEYSEL (Bit 12) */ + #define R_AES_AESCMD_KEYSEL_Msk (0x1000UL) /*!< KEYSEL (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_STORESEL_Pos (8UL) /*!< STORESEL (Bit 8) */ + #define R_AES_AESCMD_STORESEL_Msk (0x300UL) /*!< STORESEL (Bitfield-Mask: 0x03) */ + #define R_AES_AESCMD_CHAIN_Pos (4UL) /*!< CHAIN (Bit 4) */ + #define R_AES_AESCMD_CHAIN_Msk (0x30UL) /*!< CHAIN (Bitfield-Mask: 0x03) */ + #define R_AES_AESCMD_KEYLN_Pos (1UL) /*!< KEYLN (Bit 1) */ + #define R_AES_AESCMD_KEYLN_Msk (0x2UL) /*!< KEYLN (Bitfield-Mask: 0x01) */ + #define R_AES_AESCMD_INVCIP_Pos (0UL) /*!< INVCIP (Bit 0) */ + #define R_AES_AESCMD_INVCIP_Msk (0x1UL) /*!< INVCIP (Bitfield-Mask: 0x01) */ +/* ========================================================= AESDW ========================================================= */ +/* ======================================================== AESIVW ========================================================= */ +/* ======================================================== AESKW0 ========================================================= */ +/* ======================================================== AESKW1 ========================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_AGTX0 ================ */ +/* =========================================================================================================================== */ + +/** @} */ /* End of group PosMask_peripherals */ + + #ifdef __cplusplus +} + #endif + +#endif /* R7FA2A1AB_H */ + +/** @} */ /* End of group R7FA2A1AB */ + +/** @} */ /* End of group Renesas */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h new file mode 100644 index 00000000000..afd5f04f7ac --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h @@ -0,0 +1,172 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/* Ensure Renesas MCU variation definitions are included to ensure MCU + * specific register variations are handled correctly. */ +#ifndef BSP_FEATURE_H + #error "INTERNAL ERROR: bsp_feature.h must be included before renesas.h." +#endif + +/** @addtogroup Renesas + * @{ + */ + +/** @addtogroup RA + * @{ + */ + +#ifndef RA_H + #define RA_H + + #ifdef __cplusplus +extern "C" { + #endif + + #include "cmsis_compiler.h" + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ +/* IRQn_Type is provided in bsp_exceptions.h. Vectors generated by the FSP Configuration tool are in vector_data.h */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + + #if BSP_MCU_GROUP_RA0E1 + #include "R7FA0E107.h" + #elif BSP_MCU_GROUP_RA0E2 + #include "R7FA0E209.h" + #elif BSP_MCU_GROUP_RA2A1 + #include "R7FA2A1AB.h" + #elif BSP_MCU_GROUP_RA2A2 + #include "R7FA2A2AD.h" + #elif BSP_MCU_GROUP_RA2E1 + #include "R7FA2E1A9.h" + #elif BSP_MCU_GROUP_RA2E2 + #include "R7FA2E2A7.h" + #elif BSP_MCU_GROUP_RA2E3 + #include "R7FA2E307.h" + #elif BSP_MCU_GROUP_RA2L1 + #include "R7FA2L1AB.h" + #elif BSP_MCU_GROUP_RA2L2 + #include "R7FA2L209.h" + #elif BSP_MCU_GROUP_RA2T1 + #include "R7FA2T107.h" + #elif BSP_MCU_GROUP_RA4C1 + #include "R7FA4C1BD.h" + #elif BSP_MCU_GROUP_RA4E1 + #include "R7FA4E10D.h" + #elif BSP_MCU_GROUP_RA4E2 + #include "R7FA4E2B9.h" + #elif BSP_MCU_GROUP_RA4M1 + #include "R7FA4M1AB.h" + #elif BSP_MCU_GROUP_RA4M2 + #include "R7FA4M2AD.h" + #elif BSP_MCU_GROUP_RA4M3 + #include "R7FA4M3AF.h" + #elif BSP_MCU_GROUP_RA4T1 + #include "R7FA4T1BB.h" + #elif BSP_MCU_GROUP_RA4W1 + #include "R7FA4W1AD.h" + #elif BSP_MCU_GROUP_RA4L1 + #include "R7FA4L1BD.h" + #elif BSP_MCU_GROUP_RA6E1 + #include "R7FA6E10F.h" + #elif BSP_MCU_GROUP_RA6E2 + #include "R7FA6E2BB.h" + #elif BSP_MCU_GROUP_RA6M1 + #include "R7FA6M1AD.h" + #elif BSP_MCU_GROUP_RA6M2 + #include "R7FA6M2AF.h" + #elif BSP_MCU_GROUP_RA6M3 + #include "R7FA6M3AH.h" + #elif BSP_MCU_GROUP_RA6M4 + #include "R7FA6M4AF.h" + #elif BSP_MCU_GROUP_RA6M5 + #include "R7FA6M5BH.h" + #elif BSP_MCU_GROUP_RA6T1 + #include "R7FA6T1AD.h" + #elif BSP_MCU_GROUP_RA6T2 + #include "R7FA6T2BD.h" + #elif BSP_MCU_GROUP_RA6T3 + #include "R7FA6T3BB.h" + #elif BSP_MCU_GROUP_RA8M1 + #include "R7FA8M1AH.h" + #elif BSP_MCU_GROUP_RA8D1 + #include "R7FA8D1BH.h" + #elif BSP_MCU_GROUP_RA8P1 + #if 0U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core0.h" + #elif 1U == BSP_CFG_CPU_CORE + #include "R7KA8P1KF_core1.h" + #else + #warning "Unsupported CPU number" + #endif + #elif BSP_MCU_GROUP_RA8T1 + #include "R7FA8T1AH.h" + #elif BSP_MCU_GROUP_RA8E1 + #include "R7FA8E1AF.h" + #elif BSP_MCU_GROUP_RA8E2 + #include "R7FA8E2AF.h" + #else + #if __has_include("renesas_internal.h") + #include "renesas_internal.h" + #else + #warning "Unsupported MCU" + #endif + #endif + +/* + * ARM has advised to no longer use the __ARM_ARCH_8_1M_MAIN__ type macro and to instead use the __ARM_ARCH and __ARM_ARCH_ISA_THUMB + * macros for differentiating architectures. However, with all of our toolchains, neither paradigm is being correctly produced for Cortex-M85 + * and thus we still need a workaround. Below is a summary of the current macros produced by each toolchain for CM85: + * + * | Toolchain | __ARM_ARCH | _ARM_ARCH_xx__ | + * |-----------|------------|------------------------| + * | GCC | 8 | __ARM_ARCH_8M_MAIN__ | + * | LLVM | 8 | __ARM_ARCH_8_1M_MAIN__ | + * | AC6 | 8 | __ARM_ARCH_8_1M_MAIN__ | + * | IAR | 801 | __ARM_ARCH_8M_MAIN__ | + * + * The expected output for CM85 should be __ARM_ARCH == 801, __ARM_ARCH_ISA_THUMB == 2, and __ARM_ARCH_8_1M_MAIN__ + * + * IAR is currently the only toolchain producing the correct __ARM_ARCH value. + * + *- See https://github.com/ARM-software/CMSIS_6/issues/159 + */ + #if BSP_CFG_MCU_PART_SERIES == 8 && !defined(__ICCARM__) && BSP_CFG_CPU_CORE != 1 + #undef __ARM_ARCH + #define __ARM_ARCH 801 + #endif + + #if (__ARM_ARCH == 7) && (__ARM_ARCH_ISA_THUMB == 2) + #define RENESAS_CORTEX_M4 + #elif (__ARM_ARCH == 8) && (__ARM_ARCH_ISA_THUMB == 1) + #define RENESAS_CORTEX_M23 + #elif (__ARM_ARCH == 8) && (__ARM_ARCH_ISA_THUMB == 2) + #define RENESAS_CORTEX_M33 + #elif (__ARM_ARCH == 801) && (__ARM_ARCH_ISA_THUMB == 2) + #define RENESAS_CORTEX_M85 + #else + #warning Unsupported Architecture + #endif + + #ifdef __cplusplus +} + #endif + +#endif /* RA_H */ + +/** @} */ /* End of group RA */ + +/** @} */ /* End of group Renesas */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h new file mode 100644 index 00000000000..68d603720c4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef SYSTEM_RENESAS_ARM_H + #define SYSTEM_RENESAS_ARM_H + + #ifdef __cplusplus +extern "C" { + #endif + + #include + +extern uint32_t SystemCoreClock; /** System Clock Frequency (Core Clock) */ + +/** + * Initialize the system + * + * @param none + * @return none + * + * @brief Setup the microcontroller system. + * Initialize the System and update the SystemCoreClock variable. + */ +extern void SystemInit(void); + +/** + * Update SystemCoreClock variable + * + * @param none + * @return none + * + * @brief Updates the SystemCoreClock with current core Clock + * retrieved from cpu registers. + */ +extern void SystemCoreClockUpdate(void); + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c new file mode 100644 index 00000000000..b87f8233485 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c @@ -0,0 +1,137 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if BSP_TZ_SECURE_BUILD + #define BSP_TZ_STACK_SEAL_SIZE (8U) +#else + #define BSP_TZ_STACK_SEAL_SIZE (0U) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* Defines function pointers to be used with vector table. */ +typedef void (* exc_ptr_t)(void); + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +void Reset_Handler(void); +void Default_Handler(void); +int32_t main(void); + +/*******************************************************************************************************************//** + * MCU starts executing here out of reset. Main stack pointer is set up already. + **********************************************************************************************************************/ +void Reset_Handler (void) +{ + /* Initialize system using BSP. */ + SystemInit(); + + /* Call user application. */ +#ifdef __ARMCC_VERSION + main(); +#elif defined(__GNUC__) + extern int entry(void); + entry(); +#endif + + while (1) + { + /* Infinite Loop. */ + } +} + +/*******************************************************************************************************************//** + * Default exception handler. + **********************************************************************************************************************/ +void Default_Handler (void) +{ + /** A error has occurred. The user will need to investigate the cause. Common problems are stack corruption + * or use of an invalid pointer. Use the Fault Status window in e2 studio or manually check the fault status + * registers for more information. + */ + BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(0); +} + +/* Main stack */ +uint8_t g_main_stack[BSP_CFG_STACK_MAIN_BYTES + BSP_TZ_STACK_SEAL_SIZE] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT); + +/* Heap */ +BSP_DONT_REMOVE uint8_t g_heap[BSP_CFG_HEAP_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT); + +/* All system exceptions in the vector table are weak references to Default_Handler. If the user wishes to handle + * these exceptions in their code they should define their own function with the same name. + */ +#if defined(__ICCARM__) + #define WEAK_REF_ATTRIBUTE + + #pragma weak HardFault_Handler = Default_Handler + #pragma weak MemManage_Handler = Default_Handler + #pragma weak BusFault_Handler = Default_Handler + #pragma weak UsageFault_Handler = Default_Handler + #pragma weak SecureFault_Handler = Default_Handler + #pragma weak SVC_Handler = Default_Handler + #pragma weak DebugMon_Handler = Default_Handler + #pragma weak PendSV_Handler = Default_Handler + #pragma weak SysTick_Handler = Default_Handler +#elif defined(__GNUC__) + + #define WEAK_REF_ATTRIBUTE __attribute__((weak, alias("Default_Handler"))) +#endif + +void NMI_Handler(void); // NMI has many sources and is handled by BSP +void HardFault_Handler(void) WEAK_REF_ATTRIBUTE; +void MemManage_Handler(void) WEAK_REF_ATTRIBUTE; +void BusFault_Handler(void) WEAK_REF_ATTRIBUTE; +void UsageFault_Handler(void) WEAK_REF_ATTRIBUTE; +void SecureFault_Handler(void) WEAK_REF_ATTRIBUTE; +void SVC_Handler(void) WEAK_REF_ATTRIBUTE; +void DebugMon_Handler(void) WEAK_REF_ATTRIBUTE; +void PendSV_Handler(void) WEAK_REF_ATTRIBUTE; +void SysTick_Handler(void) WEAK_REF_ATTRIBUTE; + +/* Vector table. */ +BSP_DONT_REMOVE const exc_ptr_t __VECTOR_TABLE[BSP_CORTEX_VECTOR_TABLE_ENTRIES] BSP_PLACE_IN_SECTION( + BSP_SECTION_FIXED_VECTORS) = +{ + (exc_ptr_t) (&g_main_stack[0] + BSP_CFG_STACK_MAIN_BYTES), /* Initial Stack Pointer */ + Reset_Handler, /* Reset Handler */ + NMI_Handler, /* NMI Handler */ + HardFault_Handler, /* Hard Fault Handler */ + MemManage_Handler, /* MPU Fault Handler */ + BusFault_Handler, /* Bus Fault Handler */ + UsageFault_Handler, /* Usage Fault Handler */ + SecureFault_Handler, /* Secure Fault Handler */ + 0, /* Reserved */ + 0, /* Reserved */ + 0, /* Reserved */ + SVC_Handler, /* SVCall Handler */ + DebugMon_Handler, /* Debug Monitor Handler */ + 0, /* Reserved */ + PendSV_Handler, /* PendSV Handler */ + SysTick_Handler, /* SysTick Handler */ +}; + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c new file mode 100644 index 00000000000..73aba360f4d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c @@ -0,0 +1,693 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include +#if defined(__GNUC__) && defined(__llvm__) && !defined(__ARMCC_VERSION) && !defined(__CLANG_TIDY__) + #include +#endif +#if defined(__ARMCC_VERSION) + #if defined(__ARMCC_USING_STANDARDLIB) + #include + #endif +#endif +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Mask to select CP bits( 0xF00000 ) */ +#define CP_MASK (0xFU << 20) + +/* Startup value for CCR to enable instruction cache, branch prediction and LOB extension */ +#define CCR_CACHE_ENABLE (0x000E0201) + +/* Value to write to OAD register of MPU stack monitor to enable NMI when a stack overflow is detected. */ +#define BSP_STACK_POINTER_MONITOR_NMI_ON_DETECTION (0xA500U) + +/* Key code for writing PRCR register. */ +#define BSP_PRV_PRCR_KEY (0xA500U) +#define BSP_PRV_PRCR_PRC1_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x2U) +#define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) +#define BSP_PRV_STACK_LIMIT ((uint32_t) &g_main_stack[0]) +#define BSP_PRV_STACK_TOP ((uint32_t) (uint32_t) &g_main_stack[BSP_CFG_STACK_MAIN_BYTES]) +#define BSP_TZ_STACK_SEAL_VALUE (0xFEF5EDA5) + +#define ARMV8_MPU_REGION_MIN_SIZE (32U) + +#if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM) + #define BSP_PRV_ITCM_START_ADDRESS (0x00000000UL) + #define BSP_PRV_DTCM_START_ADDRESS (0x20000000UL) + #define BSP_PRV_VTOR_FIRST_PROJECT (0x02000000UL) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/** System Clock Frequency (Core Clock) */ +uint32_t SystemCoreClock BSP_SECTION_EARLY_INIT; + +#if defined(__GNUC__) + +/* Nested in __GNUC__ because LLVM generates both __GNUC__ and __llvm__*/ + #if defined(__llvm__) && !defined(__CLANG_TIDY__) +extern uint32_t __tls_base; + #endif + +#endif + +/* Initialize static constructors */ +#if defined(__GNUC__) + +extern void (* __init_array_start[])(void); + +extern void (* __init_array_end[])(void); +#elif defined(__ICCARM__) +extern void __call_ctors(void const *, void const *); + + #pragma section = "SHT$$PREINIT_ARRAY" const + #pragma section = "SHT$$INIT_ARRAY" const +#endif + +extern void * __VECTOR_TABLE[]; +extern uint8_t g_main_stack[]; + +extern void R_BSP_SecurityInit(void); + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#if BSP_FEATURE_BSP_RESET_TRNG +static void bsp_reset_trng_circuit(void); + +#endif + +#if defined(__ICCARM__) + +void R_BSP_WarmStart(bsp_warm_start_event_t event); + + #pragma weak R_BSP_WarmStart + +#elif defined(__GNUC__) || defined(__ARMCC_VERSION) + +void R_BSP_WarmStart(bsp_warm_start_event_t event) __attribute__((weak)); + +#endif + +#if BSP_CFG_EARLY_INIT +static void bsp_init_uninitialized_vars(void); + +#endif + +#if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM) + #if !BSP_TZ_NONSECURE_BUILD +static void memset_64(uint64_t * destination, const uint64_t value, size_t count); + + #endif +#endif + +#if BSP_CFG_DCACHE_ENABLED +static void bsp_init_mpu(void); + +#endif + +#if BSP_CFG_C_RUNTIME_INIT +static void SystemRuntimeInit(const uint32_t external); + +#endif + +#if BSP_CFG_C_RUNTIME_INIT +static void SystemRuntimeInit (const uint32_t external) +{ + /* Initialize C runtime environment. */ + for (uint32_t i = 0; i < g_init_info.zero_count; i++) + { + if (external == g_init_info.p_zero_list[i].type.external) + { + memset(g_init_info.p_zero_list[i].p_base, 0U, + ((uint32_t) g_init_info.p_zero_list[i].p_limit - (uint32_t) g_init_info.p_zero_list[i].p_base)); + } + } + + for (uint32_t i = 0; i < g_init_info.copy_count; i++) + { + if (external == g_init_info.p_copy_list[i].type.external) + { + memcpy(g_init_info.p_copy_list[i].p_base, g_init_info.p_copy_list[i].p_load, + ((uint32_t) g_init_info.p_copy_list[i].p_limit - (uint32_t) g_init_info.p_copy_list[i].p_base)); + } + } +} + +#endif + +/*******************************************************************************************************************//** + * Initialize the MCU and the runtime environment. + **********************************************************************************************************************/ +void SystemInit (void) +{ +#if defined(RENESAS_CORTEX_M85) + + /* Enable the instruction cache, branch prediction, and the branch cache (required for Low Overhead Branch (LOB) extension). + * See sections 6.5, 6.6, and 6.7 in the Arm Cortex-M85 Processor Technical Reference Manual (Document ID: 101924_0002_05_en, Issue: 05) + * See section D1.2.9 in the Armv8-M Architecture Reference Manual (Document number: DDI0553B.w, Document version: ID07072023) */ + SCB->CCR = (uint32_t) CCR_CACHE_ENABLE; + __DSB(); + __ISB(); + + #if !BSP_TZ_NONSECURE_BUILD + + /* If Cortex-M85 revision is r1p1 or newer. */ + const uint32_t cpuid = SCB->CPUID; + const uint32_t cpuid_variant = ((cpuid & SCB_CPUID_VARIANT_Msk) >> SCB_CPUID_VARIANT_Pos); + const uint32_t cpuid_revision = ((cpuid & SCB_CPUID_REVISION_Msk) >> SCB_CPUID_REVISION_Pos); + if (((cpuid_variant == 1) && (cpuid_revision >= 1)) || (cpuid_variant > 1)) + { + /* Set D-Cache forced write-through according to BSP configuration. */ + #if BSP_CFG_DCACHE_FORCE_WRITETHROUGH + MEMSYSCTL->MSCR |= MEMSYSCTL_MSCR_FORCEWT_Msk; + #else + MEMSYSCTL->MSCR &= ~(MEMSYSCTL_MSCR_FORCEWT_Msk); + #endif + __DSB(); + __ISB(); + } + else + { + /* Apply Arm Cortex-M85 errata workarounds for D-Cache. + * See erratum 3175626 and 3190818 in the Cortex-M85 AT640 and Cortex-M85 with FPU AT641 Software Developer Errata Notice (Date of issue: March 07, 2024, Document version: 13.0, Document ID: SDEN-2236668). */ + MEMSYSCTL->MSCR |= MEMSYSCTL_MSCR_FORCEWT_Msk; + __DSB(); + __ISB(); + ICB->ACTLR |= (1U << 16U); + __DSB(); + __ISB(); + } + #endif +#endif + +#if __FPU_USED + + /* Enable the FPU only when it is used. + * Code taken from Section 7.1, Cortex-M4 TRM (DDI0439C) */ + + /* Set bits 20-23 (CP10 and CP11) to enable FPU. */ + SCB->CPACR = (uint32_t) CP_MASK; +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Seal the main stack for secure projects. Reference: + * https://developer.arm.com/documentation/100720/0300 + * https://developer.arm.com/support/arm-security-updates/armv8-m-stack-sealing */ + uint32_t * p_main_stack_top = (uint32_t *) &g_main_stack[BSP_CFG_STACK_MAIN_BYTES]; + *p_main_stack_top = BSP_TZ_STACK_SEAL_VALUE; + + #if BSP_SECONDARY_CORE_BUILD + + /* Configure SAU early for secondary core since primary has already configured SAR registers */ + R_BSP_SecurityInit(); + #endif +#endif + +#if !BSP_TZ_NONSECURE_BUILD + + /* VTOR is in undefined state out of RESET: + * https://developer.arm.com/documentation/100235/0004/the-cortex-m33-peripherals/system-control-block/system-control-block-registers-summary?lang=en. + * Set the Secure/Non-Secure VTOR to the vector table address based on the build. This is skipped for non-secure + * projects because SCB_NS->VTOR is set by the secure project before the non-secure project runs. */ + SCB->VTOR = (uint32_t) &__VECTOR_TABLE; +#endif + +#if !BSP_TZ_CFG_SKIP_INIT && !BSP_CFG_SKIP_INIT + #if BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP + + /* Unlock VBTCR1 register. */ + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_PRC1_UNLOCK; + + /* The VBTCR1.BPWSWSTP must be set after reset on MCUs that have VBTCR1.BPWSWSTP. Reference section 11.2.1 + * "VBATT Control Register 1 (VBTCR1)" and Figure 11.2 "Setting flow of the VBTCR1.BPWSWSTP bit" in the RA4M1 manual + * R01UM0007EU0110. This must be done before bsp_clock_init because LOCOCR, LOCOUTCR, SOSCCR, and SOMCR cannot + * be accessed until VBTSR.VBTRVLD is set. */ + R_SYSTEM->VBTCR1 = 1U; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->VBTSR_b.VBTRVLD, 1U); + + /* Lock VBTCR1 register. */ + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_LOCK; + #endif +#endif + +#if BSP_FEATURE_TFU_SUPPORTED + R_BSP_MODULE_START(FSP_IP_TFU, 0U); +#endif + +#if BSP_FEATURE_MACL_SUPPORTED + #if __has_include("arm_math_types.h") + R_BSP_MODULE_START(FSP_IP_MACL, 0U); + #endif +#endif + +#if BSP_CFG_EARLY_INIT + + /* Initialize uninitialized BSP variables early for use in R_BSP_WarmStart. */ + bsp_init_uninitialized_vars(); +#endif + + /* Call pre clock initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_RESET); + +#if BSP_TZ_CFG_SKIP_INIT || BSP_CFG_SKIP_INIT + + /* Initialize clock variables to be used with R_BSP_SoftwareDelay. */ + bsp_clock_freq_var_init(); + + #if !BSP_TZ_CFG_SKIP_INIT && defined(R_CACHE) + + /* Enable C-Cache if secondary core has one. + * Do not enable CM33 C-Cache for secondary core TrustZone projects because of limitations listed in + * RA8P1 UM 2.16.5.3 Restrictions Relating to Security Attribution of C-Cache and S-Cache */ + #if !(BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD) + + /* Enable cache */ + R_BSP_FlashCacheEnable(); + #endif + #endif +#else + + /* Configure system clocks. */ + bsp_clock_init(); + + #if BSP_FEATURE_BSP_RESET_TRNG + + /* To prevent an undesired current draw, this MCU requires a reset + * of the TRNG circuit after the clocks are initialized */ + + bsp_reset_trng_circuit(); + #endif +#endif + + /* Call post clock initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_CLOCK); + +#if BSP_FEATURE_BSP_HAS_SP_MON + + /* Disable MSP monitoring */ + R_MPU_SPMON->SP[0].CTL = 0; + + /* Setup NMI interrupt */ + R_MPU_SPMON->SP[0].OAD = BSP_STACK_POINTER_MONITOR_NMI_ON_DETECTION; + + /* Setup start address */ + R_MPU_SPMON->SP[0].SA = BSP_PRV_STACK_LIMIT; + + /* Setup end address */ + R_MPU_SPMON->SP[0].EA = BSP_PRV_STACK_TOP; + + /* Set SPEEN bit to enable NMI on stack monitor exception. NMIER bits cannot be cleared after reset, so no need + * to read-modify-write. */ + R_ICU->NMIER = R_ICU_NMIER_SPEEN_Msk; + + /* Enable MSP monitoring */ + R_MPU_SPMON->SP[0].CTL = 1U; +#endif + +#if BSP_FEATURE_TZ_HAS_TRUSTZONE + __set_MSPLIM(BSP_PRV_STACK_LIMIT); +#endif + +#if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM) + #if !BSP_TZ_NONSECURE_BUILD + + /* Zero initialize all available Cortex-M85 TCM memory if ECC is enabled for it and the very first project is executing. + * This may be either a bootloader if present, or a Flat or Secure application. */ + if ((MEMSYSCTL->MSCR & MEMSYSCTL_MSCR_ECCEN_Msk) && + (SCB->VTOR == BSP_PRV_VTOR_FIRST_PROJECT)) + { + const size_t itcm_num_doublewords = + (1U << (((MEMSYSCTL->ITCMCR & MEMSYSCTL_ITCMCR_SZ_Msk) >> MEMSYSCTL_ITCMCR_SZ_Pos) + 9U)) / + sizeof(uint64_t); + const size_t dtcm_num_doublewords = + (1U << (((MEMSYSCTL->DTCMCR & MEMSYSCTL_DTCMCR_SZ_Msk) >> MEMSYSCTL_DTCMCR_SZ_Pos) + 9U)) / + sizeof(uint64_t); + memset_64((uint64_t *) BSP_PRV_ITCM_START_ADDRESS, 0, itcm_num_doublewords); + memset_64((uint64_t *) BSP_PRV_DTCM_START_ADDRESS, 0, dtcm_num_doublewords); + } + #endif +#endif + +#if BSP_CFG_C_RUNTIME_INIT + + /* Initialize data placed in internal memories. */ + SystemRuntimeInit(0); +#endif + + /* Initialize SystemCoreClock variable. */ + SystemCoreClockUpdate(); + +#if BSP_FEATURE_RTC_IS_AVAILABLE || BSP_FEATURE_RTC_HAS_TCEN || BSP_FEATURE_SYSC_HAS_VBTICTLR + + /* For TZ project, it should be called by the secure application, whether RTC module is to be configured as secure or not. */ + #if !BSP_TZ_NONSECURE_BUILD && !BSP_CFG_BOOT_IMAGE && !BSP_CFG_SKIP_INIT + + /* Perform RTC reset sequence to avoid unintended operation. */ + R_BSP_Init_RTC(); + #endif +#endif + +#if !BSP_CFG_PFS_PROTECT && defined(R_PMISC) && !BSP_CFG_SKIP_INIT + #if BSP_TZ_SECURE_BUILD || (BSP_FEATURE_TZ_VERSION == 2 && FSP_PRIV_TZ_USE_SECURE_REGS) + R_PMISC->PWPRS = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #endif +#endif + +#if FSP_PRIV_TZ_USE_SECURE_REGS && !BSP_CFG_SKIP_INIT + + /* Ensure that the PMSAR registers are set to their default value. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + for (uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++) + { + #if BSP_FEATURE_TZ_VERSION == 2 + R_PMISC->PMSAR[i].PMSAR = 0U; + #else + R_PMISC->PMSAR[i].PMSAR = UINT16_MAX; + #endif + } + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); +#endif + +#if BSP_TZ_SECURE_BUILD && !BSP_SECONDARY_CORE_BUILD + + /* Initialize security features. */ + R_BSP_SecurityInit(); +#else + #if FSP_PRIV_TZ_USE_SECURE_REGS + + /* Initialize peripherals to secure mode for flat projects */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + R_PSCU->PSARB = 0; + R_PSCU->PSARC = 0; + R_PSCU->PSARD = 0; + R_PSCU->PSARE = 0; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); + #endif +#endif + +#if BSP_CFG_DCACHE_ENABLED + bsp_init_mpu(); + + SCB_EnableDCache(); +#endif + +#if BSP_FEATURE_BSP_HAS_GRAPHICS_DOMAIN && !BSP_CFG_SKIP_INIT + if ((((0 == R_SYSTEM->PGCSAR) && FSP_PRIV_TZ_USE_SECURE_REGS) || + ((1 == R_SYSTEM->PGCSAR) && BSP_TZ_NONSECURE_BUILD)) && (0 != R_SYSTEM->PDCTRGD)) + { + /* Turn on graphics power domain. + * This requires MOCO to be enabled, but MOCO is always enabled after bsp_clock_init(). */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + FSP_HARDWARE_REGISTER_WAIT((R_SYSTEM->PDCTRGD & (R_SYSTEM_PDCTRGD_PDCSF_Msk | R_SYSTEM_PDCTRGD_PDPGSF_Msk)), + R_SYSTEM_PDCTRGD_PDPGSF_Msk); + R_SYSTEM->PDCTRGD = 0; + FSP_HARDWARE_REGISTER_WAIT((R_SYSTEM->PDCTRGD & (R_SYSTEM_PDCTRGD_PDCSF_Msk | R_SYSTEM_PDCTRGD_PDPGSF_Msk)), 0); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); + } +#endif + +#if BSP_FEATURE_CGC_HAS_NPUCLK && !BSP_CFG_SKIP_INIT && !BSP_TZ_NONSECURE_BUILD + + /* Turn on NPU power domain */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + FSP_HARDWARE_REGISTER_WAIT((R_SYSTEM->PDCTRNPU & (R_SYSTEM_PDCTRGD_PDCSF_Msk | R_SYSTEM_PDCTRGD_PDPGSF_Msk)), + R_SYSTEM_PDCTRGD_PDPGSF_Msk); + R_SYSTEM->PDCTRNPU = 0; + FSP_HARDWARE_REGISTER_WAIT((R_SYSTEM->PDCTRNPU & (R_SYSTEM_PDCTRGD_PDCSF_Msk | R_SYSTEM_PDCTRGD_PDPGSF_Msk)), 0); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); +#endif + + /* Call Post C runtime initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_C); + +#if BSP_CFG_C_RUNTIME_INIT + + /* Initialize data placed in external memories. */ + SystemRuntimeInit(1); + + #if defined(__GNUC__) && defined(__llvm__) && !defined(__CLANG_TIDY__) && !(defined __ARMCC_VERSION) + + /* Initialize TLS memory. */ + _init_tls(&__tls_base); + _set_tls(&__tls_base); + #endif +#endif + +#if defined(__ICCARM__) + + /* Copy main thread TLS to RAM. */ + #pragma section="__DLIB_PERTHREAD_init" + #pragma section="__DLIB_PERTHREAD" + memcpy((uint32_t *) __section_begin("__DLIB_PERTHREAD"), (uint32_t *) __section_begin("__DLIB_PERTHREAD_init"), + (uint32_t) __section_size("__DLIB_PERTHREAD_init")); +#endif + +#if defined(RENESAS_CORTEX_M85) + + /* Invalidate I-Cache after initializing the .ram_from_flash section. */ + SCB_InvalidateICache(); +#endif + + /* Initialize static constructors */ +#if defined(__ARMCC_VERSION) + + /* TODO: should be replaced with some macro generated by e2studio */ + #if defined(__ARMCC_USING_STANDARDLIB) + + /* C++ requires default lib: https://developer.arm.com/documentation/dui0475/i/the-arm-c-micro-library/differences-between-microlib-and-the-default-c-library?lang=en */ + extern uint8_t g_heap[BSP_CFG_HEAP_BYTES]; + __rt_lib_init((uint32_t) g_heap, (uint32_t) g_heap + BSP_CFG_HEAP_BYTES); + #endif +#elif defined(__GNUC__) + int32_t count = __init_array_end - __init_array_start; + for (int32_t i = 0; i < count; i++) + { + __init_array_start[i](); + } + +#elif defined(__ICCARM__) + void const * pibase = __section_begin("SHT$$PREINIT_ARRAY"); + void const * ilimit = __section_end("SHT$$INIT_ARRAY"); + __call_ctors(pibase, ilimit); +#endif + + /* Initialize ELC events that will be used to trigger NVIC interrupts. */ + bsp_irq_cfg(); + + /* Call any BSP specific code. No arguments are needed so NULL is sent. */ + bsp_init(NULL); +} + +/*******************************************************************************************************************//** + * This function is called at various points during the startup process. + * This function is declared as a weak symbol higher up in this file because it is meant to be overridden by a user + * implemented version. One of the main uses for this function is to call functional safety code during the startup + * process. To use this function just copy this function into your own code and modify it to meet your needs. + * + * @param[in] event Where the code currently is in the start up process + **********************************************************************************************************************/ +void R_BSP_WarmStart (bsp_warm_start_event_t event) +{ + if (BSP_WARM_START_RESET == event) + { + /* C runtime environment has not been setup so you cannot use globals. System clocks are not setup. */ + } + + if (BSP_WARM_START_POST_CLOCK == event) + { + /* C runtime environment has not been setup so you cannot use globals. Clocks have been initialized. */ + } + else if (BSP_WARM_START_POST_C == event) + { + /* C runtime environment, system clocks, and pins are all setup. */ + } + else + { + /* Do nothing */ + } +} + +/*******************************************************************************************************************//** + * Disable TRNG circuit to prevent unnecessary current draw which may otherwise occur when the Crypto module + * is not in use. + **********************************************************************************************************************/ +#if BSP_FEATURE_BSP_RESET_TRNG +static void bsp_reset_trng_circuit (void) +{ + volatile uint8_t read_port = 0U; + FSP_PARAMETER_NOT_USED(read_port); /// Prevent compiler 'unused' warning + + /* Release register protection for low power modes (per RA2A1 User's Manual (R01UH0888EJ0100) Figure 11.13 "Example + * of initial setting flow for an unused circuit") */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + + /* Enable TRNG function (disable stop function) */ + #if BSP_FEATURE_BSP_HAS_SCE_ON_RA2 + R_BSP_MODULE_START(FSP_IP_TRNG, 0); ///< TRNG Module Stop needs to be started/stopped for RA2 series. + #elif BSP_FEATURE_BSP_HAS_SCE5 + R_BSP_MODULE_START(FSP_IP_SCE, 0); ///< TRNG Module Stop needs to be started/stopped for RA4 series. + #else + #error "BSP_FEATURE_BSP_RESET_TRNG is defined but not handled." + #endif + + /* Wait for at least 3 PCLKB cycles */ + read_port = R_PFS->PORT[0].PIN[0].PmnPFS_b.PODR; + read_port = R_PFS->PORT[0].PIN[0].PmnPFS_b.PODR; + read_port = R_PFS->PORT[0].PIN[0].PmnPFS_b.PODR; + + /* Disable TRNG function */ + #if BSP_FEATURE_BSP_HAS_SCE_ON_RA2 + R_BSP_MODULE_STOP(FSP_IP_TRNG, 0); ///< TRNG Module Stop needs to be started/stopped for RA2 series. + #elif BSP_FEATURE_BSP_HAS_SCE5 + R_BSP_MODULE_STOP(FSP_IP_SCE, 0); ///< TRNG Module Stop needs to be started/stopped for RA4 series. + #else + #error "BSP_FEATURE_BSP_RESET_TRNG is defined but not handled." + #endif + + /* Reapply register protection for low power modes (per RA2A1 User's Manual (R01UH0888EJ0100) Figure 11.13 "Example + * of initial setting flow for an unused circuit") */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); +} + +#endif + +#if BSP_CFG_EARLY_INIT + +/*******************************************************************************************************************//** + * Initialize BSP variables not handled by C runtime startup. + **********************************************************************************************************************/ +static void bsp_init_uninitialized_vars (void) +{ + g_protect_pfswe_counter = 0; + + extern volatile uint16_t g_protect_counters[]; + for (uint32_t i = 0; i < 4; i++) + { + g_protect_counters[i] = 0; + } + + extern bsp_grp_irq_cb_t g_bsp_group_irq_sources[]; + for (uint32_t i = 0; i < 16; i++) + { + g_bsp_group_irq_sources[i] = 0; + } + + #if BSP_CFG_EARLY_INIT + + /* Set SystemCoreClock to MOCO */ + SystemCoreClock = BSP_MOCO_HZ; + #endif +} + +#endif + +#if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM) + #if !BSP_TZ_NONSECURE_BUILD + +/*******************************************************************************************************************//** + * 64-bit memory set for Armv8.1-M using low overhead loop instructions. + * + * @param[in] destination set destination start address, word aligned + * @param[in] value value to set + * @param[in] count number of doublewords to set + **********************************************************************************************************************/ +static void memset_64 (uint64_t * destination, const uint64_t value, size_t count) +{ + __asm volatile ( + "wls lr, %[count], memset_64_loop_end_%=\n" + #if (defined(__ARMCC_VERSION) || defined(__GNUC__)) + + /* Align the branch target to a 64-bit boundary, a CM85 specific optimization. */ + /* IAR does not support alignment control within inline assembly. */ + ".balign 8\n" + #endif + "memset_64_loop_start_%=:\n" + "strd %Q[value], %R[value], [%[destination]], #+8\n" + "le lr, memset_64_loop_start_%=\n" + "memset_64_loop_end_%=:" + :[destination] "+&r" (destination) + :[count] "r" (count), [value] "r" (value) + : "lr", "memory" + ); +} + + #endif +#endif + +#if BSP_CFG_DCACHE_ENABLED + +/*******************************************************************************************************************//** + * Initialize MPU for Armv8-M devices. + **********************************************************************************************************************/ +static void bsp_init_mpu (void) +{ + /* Maximum of eight attributes. */ + const uint8_t bsp_mpu_mair_attributes[] = + { + /* Normal, Non-cacheable */ + ARM_MPU_ATTR(ARM_MPU_ATTR_NON_CACHEABLE, ARM_MPU_ATTR_NON_CACHEABLE) + }; + + /* Initialize MPU_MAIR0 and MPU_MAIR1 from attributes table. */ + uint8_t num_attr = (sizeof(bsp_mpu_mair_attributes) / sizeof(bsp_mpu_mair_attributes[0])); + for (uint8_t i = 0; i < num_attr; i++) + { + ARM_MPU_SetMemAttr(i, bsp_mpu_mair_attributes[i]); + } + + /* Initialize MPU from configuration table. */ + for (uint8_t i = 0; i < g_init_info.nocache_count; i++) + { + uint32_t rbar = ARM_MPU_RBAR((uint32_t) (g_init_info.p_nocache_list[i].p_base), ARM_MPU_SH_NON, 0U, 0U, 1U); + uint32_t rlar = ARM_MPU_RLAR((((uint32_t) g_init_info.p_nocache_list[i].p_limit) - ARMV8_MPU_REGION_MIN_SIZE), + 0U); + + /* Only configure regions of non-zero size. */ + if ((((rlar & MPU_RLAR_LIMIT_Msk) >> MPU_RLAR_LIMIT_Pos) + ARMV8_MPU_REGION_MIN_SIZE) > + ((rbar & MPU_RBAR_BASE_Msk) >> MPU_RBAR_BASE_Pos)) + { + ARM_MPU_SetRegion(i, rbar, rlar); + } + } + + /* + * SHCSR.MEMFAULTENA is set inside ARM_MPU_Enable(). + * Leave SHPR1.PRI_4 at reset value of zero. + * Leave MPU_CTRL.HFNMIENA at reset value of zero. + * Provide MPU_CTRL_PRIVDEFENA_Msk to ARM_MPU_Enable() to set MPU_CTRL.PRIVDEFENA. + */ + ARM_MPU_Enable(MPU_CTRL_PRIVDEFENA_Msk); +} + +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.c new file mode 100644 index 00000000000..886f5ccf1f6 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.c @@ -0,0 +1,3443 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_clocks.h" + +#if BSP_TZ_NONSECURE_BUILD + #include "bsp_guard.h" +#endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Key code for writing PRCR register. */ +#define BSP_PRV_PRCR_KEY (0xA500U) +#define BSP_PRV_PRCR_UNLOCK ((BSP_PRV_PRCR_KEY) | 0x3U) +#define BSP_PRV_PRCR_LOCK ((BSP_PRV_PRCR_KEY) | 0x0U) + +/* Key code for writing LSMRWDIS register. */ +#define BSP_PRV_LSMRDIS_KEY (0xA500U) + +/* Wait state definitions for MEMWAIT. */ +#define BSP_PRV_MEMWAIT_ZERO_WAIT_CYCLES (0U) +#define BSP_PRV_MEMWAIT_ONE_WAIT_CYCLES (1U) +#define BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES (2U) +#define BSP_PRV_MEMWAIT_MAX_ZERO_WAIT_FREQ (32000000U) +#define BSP_PRV_MEMWAIT_MAX_ONE_WAIT_FREQ (48000000U) + +/* Wait state definitions for FLDWAITR. */ +#define BSP_PRV_FLDWAITR_ONE_WAIT_CYCLES (0U) +#define BSP_PRV_FLDWAITR_TWO_WAIT_CYCLES (1U) +#define BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ (32000000U) + +/* Temporary solution until R_FACI is added to renesas.h. */ +#define BSP_PRV_FLDWAITR_REG_ACCESS (*((volatile uint8_t *) (0x407EFFC4U))) + +/* Wait state definitions for MCUS with SRAMWTSC and FLWT. */ +#define BSP_PRV_SRAMWTSC_WAIT_CYCLES_DISABLE (0U) +#define BSP_PRV_ROM_ZERO_WAIT_CYCLES (0U) +#define BSP_PRV_ROM_ONE_WAIT_CYCLES (1U) +#define BSP_PRV_ROM_TWO_WAIT_CYCLES (2U) +#define BSP_PRV_ROM_THREE_WAIT_CYCLES (3U) +#define BSP_PRV_ROM_FOUR_WAIT_CYCLES (4U) +#define BSP_PRV_ROM_FIVE_WAIT_CYCLES (5U) +#define BSP_PRV_SRAM_UNLOCK (((BSP_FEATURE_CGC_SRAMPRCR_KW_VALUE) << \ + BSP_FEATURE_CGC_SRAMPRCR_KW_OFFSET) | 0x1U) +#define BSP_PRV_SRAM_LOCK (((BSP_FEATURE_CGC_SRAMPRCR_KW_VALUE) << \ + BSP_FEATURE_CGC_SRAMPRCR_KW_OFFSET) | 0x0U) + +/* Determine whether SRAM wait states should be enabled */ +#if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS + #define BSP_PRV_SRAM_WAIT_CYCLES BSP_PRV_SRAMWTSC_WAIT_CYCLES_DISABLE +#else + #define BSP_PRV_SRAM_WAIT_CYCLES BSP_FEATURE_SRAM_SRAMWTSC_WAIT_CYCLE_ENABLE +#endif + +/* Calculate value to write to MOMCR/CMC (MODRV controls main clock drive strength and MOSEL determines the source of the + * main oscillator). */ +#define BSP_PRV_MODRV ((CGC_MAINCLOCK_DRIVE << BSP_FEATURE_CGC_MODRV_SHIFT) & \ + BSP_FEATURE_CGC_MODRV_MASK) + +#if BSP_CFG_AUTODRVEN + #define BSP_PRV_AUTODRVEN (BSP_CFG_AUTODRVEN << R_SYSTEM_MOMCR_AUTODRVEN_Pos) +#else + #define BSP_PRV_AUTODRVEN (0U) +#endif + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #define BSP_PRV_MOSEL (BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE << R_SYSTEM_MOMCR_MOSEL_Pos) + #define BSP_PRV_MOMCR (BSP_PRV_MODRV | BSP_PRV_MOSEL | BSP_PRV_AUTODRVEN) +#else + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + #if BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE + #define BSP_PRV_MOSEL (3U << R_SYSTEM_CMC_MOSEL_Pos) // External clock input mode + #else + #define BSP_PRV_MOSEL (1U << R_SYSTEM_CMC_MOSEL_Pos) // Oscillation mode + #endif + #define BSP_PRV_CMC_MOSC (BSP_PRV_MODRV | BSP_PRV_MOSEL) + #endif + +/* Calculate value to write to CMC (SODRV controls sub-clock oscillator drive capability and SOSEL determines the source of the + * sub-clock oscillator). */ + #if (0 == BSP_CLOCK_CFG_SUBCLOCK_DRIVE) + #define BSP_PRV_SODRV (1U << R_SYSTEM_CMC_SODRV_Pos) // Sub-Clock Oscillator Drive Capability Normal mode + #elif (1 == BSP_CLOCK_CFG_SUBCLOCK_DRIVE) + #define BSP_PRV_SODRV (0U << R_SYSTEM_CMC_SODRV_Pos) // Sub-Clock Oscillator Drive Capability Low Power Mode 1 + #else + #define BSP_PRV_SODRV (BSP_CLOCK_CFG_SUBCLOCK_DRIVE << R_SYSTEM_CMC_SODRV_Pos) + #endif + #define BSP_PRV_CMC_SOSC (BSP_PRV_SODRV | \ + (BSP_CLOCK_CFG_SUBCLOCK_POPULATED << R_SYSTEM_CMC_SOSEL_Pos) | \ + (BSP_CLOCK_CFG_SUBCLOCK_POPULATED << R_SYSTEM_CMC_XTSEL_Pos)) + + #if (BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_FSXP_SOURCE) + #define BSP_PRV_OSMC (0U << R_SYSTEM_OSMC_WUTMMCK0_Pos) // Use Sub-clock oscillator (SOSC) as Subsystem Clock (FSXP) source. + #elif (BSP_CLOCKS_SOURCE_CLOCK_LOCO == BSP_CFG_FSXP_SOURCE) + #define BSP_PRV_OSMC (1U << R_SYSTEM_OSMC_WUTMMCK0_Pos) // Use Low-speed on-chip oscillator clock (LOCO) as Subsystem Clock (FSXP) source. + #endif + + #if (BSP_CFG_CLKOUT_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && (BSP_CFG_CLKOUT_SOURCE != BSP_CFG_CLOCK_SOURCE) + #define BSP_PRV_CLKOUT_SOURCE_SET (1U) + #elif defined(BSP_CFG_CLKOUT1_SOURCE) && (BSP_CFG_CLKOUT1_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && \ + (BSP_CFG_CLKOUT1_SOURCE != BSP_CFG_CLOCK_SOURCE) + #define BSP_PRV_CLKOUT_SOURCE_SET (2U) + #else + #define BSP_PRV_CLKOUT_SOURCE_SET (0U) + #endif +#endif + +/* Locations of bitfields used to configure CLKOUT. */ +#define BSP_PRV_CKOCR_CKODIV_BIT (4U) +#define BSP_PRV_CKOCR_CKOEN_BIT (7U) + +/* Stop interval of at least 5 SOSC clock cycles between stop and restart of SOSC. + * Calculated based on 8Mhz of MOCO clock. */ +#define BSP_PRV_SUBCLOCK_STOP_INTERVAL_US (200U) + +/* Locations of bitfields used to configure Peripheral Clocks. */ +#define BSP_PRV_PERIPHERAL_CLK_REQ_BIT_POS (6U) +#define BSP_PRV_PERIPHERAL_CLK_REQ_BIT_MASK (1U << BSP_PRV_PERIPHERAL_CLK_REQ_BIT_POS) +#define BSP_PRV_PERIPHERAL_CLK_RDY_BIT_POS (7U) +#define BSP_PRV_PERIPHERAL_CLK_RDY_BIT_MASK (1U << BSP_PRV_PERIPHERAL_CLK_RDY_BIT_POS) + +#ifdef BSP_CFG_UCLK_DIV + +/* If the MCU has SCKDIVCR2 for USBCK configuration. */ + #if !BSP_FEATURE_BSP_HAS_USBCKDIVCR + +/* Location of bitfield used to configure USB clock divider. */ + #define BSP_PRV_SCKDIVCR2_UCK_BIT (4U) + #define BSP_PRV_UCK_DIV (BSP_CFG_UCLK_DIV) + +/* If the MCU has USBCKDIVCR. */ + #elif BSP_FEATURE_BSP_HAS_USBCKDIVCR + #if BSP_CLOCKS_USB_CLOCK_DIV_1 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (0U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_2 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (1U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_3 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (5U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_4 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (2U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_5 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (6U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_6 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (3U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_8 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (4U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_10 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (7U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_16 == BSP_CFG_UCLK_DIV + #define BSP_PRV_UCK_DIV (8U) + #else + + #error "BSP_CFG_UCLK_DIV not supported." + + #endif + #endif +#endif + +/* Choose the value to write to FLLCR2 (if applicable). */ +#if BSP_PRV_HOCO_USE_FLL + #if 1U == BSP_CFG_HOCO_FREQUENCY + #define BSP_PRV_FLL_FLLCR2 (0x226U) + #elif 2U == BSP_CFG_HOCO_FREQUENCY + #define BSP_PRV_FLL_FLLCR2 (0x263U) + #elif 4U == BSP_CFG_HOCO_FREQUENCY + #define BSP_PRV_FLL_FLLCR2 (0x263U) + #else + +/* When BSP_CFG_HOCO_FREQUENCY is 0, 4, 7 */ + #define BSP_PRV_FLL_FLLCR2 (0x1E9U) + #endif +#endif + +/* Calculate the value to write to SCKDIVCR. */ +#define BSP_PRV_STARTUP_SCKDIVCR_ICLK_BITS ((BSP_CFG_ICLK_DIV & 0xFU) << 24U) +#if BSP_FEATURE_CGC_HAS_PCLKE + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKE_BITS ((BSP_CFG_PCLKE_DIV & 0xFU) << 20U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKE_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKD + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKD_BITS (BSP_CFG_PCLKD_DIV & 0xFU) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKD_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKC + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKC_BITS ((BSP_CFG_PCLKC_DIV & 0xFU) << 4U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKC_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKB + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKB_BITS ((BSP_CFG_PCLKB_DIV & 0xFU) << 8U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKB_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKA + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKA_BITS ((BSP_CFG_PCLKA_DIV & 0xFU) << 12U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_PCLKA_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_BCLK + #define BSP_PRV_STARTUP_SCKDIVCR_BCLK_BITS ((BSP_CFG_BCLK_DIV & 0xFU) << 16U) +#elif BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB + +/* Some MCUs have a requirement that bits 18-16 be set to the same value as the bits for configuring the PCLKB divisor. */ + #define BSP_PRV_STARTUP_SCKDIVCR_BCLK_BITS ((BSP_CFG_PCLKB_DIV & 0xFU) << 16U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_BCLK_BITS (0U) +#endif +#if BSP_FEATURE_CGC_HAS_FCLK + #define BSP_PRV_STARTUP_SCKDIVCR_FCLK_BITS ((BSP_CFG_FCLK_DIV & 0xFU) << 28U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR_FCLK_BITS (0U) +#endif +#define BSP_PRV_STARTUP_SCKDIVCR (BSP_PRV_STARTUP_SCKDIVCR_ICLK_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_PCLKE_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_PCLKD_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_PCLKC_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_PCLKB_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_PCLKA_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_BCLK_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR_FCLK_BITS) +#if BSP_FEATURE_CGC_HAS_CPUCLK + #define BSP_PRV_STARTUP_SCKDIVCR2_CPUCK_BITS (BSP_CFG_CPUCLK_DIV & 0xFU) +#else + #define BSP_PRV_STARTUP_SCKDIVCR2_CPUCK_BITS (0) +#endif +#if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + +/* Key codes for MRAM registers. */ + #define BSP_PRV_MRCFREQ_KEY (0x1E000000) + #define BSP_PRV_MREFREQ_KEY (0xE1000000) + #ifndef BSP_PRV_MRCPFB_LIMIT + #define BSP_PRV_MRCPFB_LIMIT (0x65) + #endif + #define BSP_PRV_MRFREQ_MIN_HZ (32768) + +/* Set npuclk to the same value as mriclk if the MCU does not support npuclk. */ + #if (BSP_FEATURE_CGC_HAS_NPUCLK == 0) + #define BSP_CFG_NPUCLK_DIV (BSP_CFG_MRICLK_DIV) + #endif + #define BSP_PRV_STARTUP_SCKDIVCR2_CPUCK1_BITS ((BSP_CFG_CPUCLK1_DIV & 0xFU) << 4U) + #define BSP_PRV_STARTUP_SCKDIVCR2_NPUCK_BITS ((BSP_CFG_NPUCLK_DIV & 0xFU) << 8U) + #define BSP_PRV_STARTUP_SCKDIVCR2_MRICK_BITS ((BSP_CFG_MRICLK_DIV & 0xFU) << 12U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR2_CPUCK1_BITS (0) + #define BSP_PRV_STARTUP_SCKDIVCR2_NPUCK_BITS (0) + #define BSP_PRV_STARTUP_SCKDIVCR2_MRICK_BITS (0) +#endif +#define BSP_PRV_STARTUP_SCKDIVCR2 (BSP_PRV_STARTUP_SCKDIVCR2_CPUCK_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_CPUCK1_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_NPUCK_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_MRICK_BITS) + +/* The number of clocks is used to size the g_clock_freq array. */ +#if BSP_PRV_PLL2_SUPPORTED + #define BSP_PRV_NUM_CLOCKS ((uint8_t) BSP_CLOCKS_SOURCE_CLOCK_PLL2 + \ + (BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS - 1) + \ + BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS) +#elif BSP_PRV_PLL_SUPPORTED + #define BSP_PRV_NUM_CLOCKS ((uint8_t) BSP_CLOCKS_SOURCE_CLOCK_PLL + \ + BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS) +#else + #define BSP_PRV_NUM_CLOCKS ((uint8_t) BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK + 1U) +#endif + +/* Calculate PLLCCR value. */ +#if BSP_PRV_PLL_SUPPORTED + #if (1U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (0) + #define BSP_PRV_PLL_USED (1) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (1) + #define BSP_PRV_PLL_USED (1) + #else + #define BSP_PRV_PLL_USED (0) + #endif + #define BSP_PRV_PLLCCR_PLLMUL_MASK (0x3F) // PLLMUL in PLLCCR is 6 bits wide + #define BSP_PRV_PLLCCR_PLLMUL_BIT (8) // PLLMUL in PLLCCR starts at bit 8 + #define BSP_PRV_PLLCCR_PLSRCSEL_BIT (4) // PLSRCSEL in PLLCCR starts at bit 4 + #define BSP_PRV_PLLCCR ((((BSP_CFG_PLL_MUL & BSP_PRV_PLLCCR_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMUL_BIT) | \ + (BSP_PRV_PLSRCSEL << BSP_PRV_PLLCCR_PLSRCSEL_BIT)) | \ + BSP_CFG_PLL_DIV) + #endif + #if (2U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (0) + #define BSP_PRV_PLL_USED (1) + #else + #define BSP_PRV_PLL_USED (0) + #endif + #define BSP_PRV_PLLCCR2_PLLMUL_MASK (0x1F) // PLLMUL in PLLCCR2 is 5 bits wide + #define BSP_PRV_PLLCCR2_PLODIV_BIT (6) // PLODIV in PLLCCR2 starts at bit 6 + + #define BSP_PRV_PLLCCR2_PLLMUL (BSP_CFG_PLL_MUL >> 1) + #define BSP_PRV_PLLCCR ((BSP_PRV_PLLCCR2_PLLMUL & BSP_PRV_PLLCCR2_PLLMUL_MASK) | \ + (BSP_CFG_PLL_DIV << BSP_PRV_PLLCCR2_PLODIV_BIT)) + #endif + #if (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (0) + #define BSP_PRV_PLL_USED (1) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (1) + #define BSP_PRV_PLL_USED (1) + #else + #define BSP_PRV_PLL_USED (0) + #endif + + #if (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_PRV_PLL_MUL_CFG_MACRO_PLLMUL_MASK (0x3FFU) + #elif (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_PRV_PLL_MUL_CFG_MACRO_PLLMUL_MASK (0x7FFU) + #endif + + #define BSP_PRV_PLLCCR_PLLMULNF_BIT (6) // PLLMULNF in PLLCCR starts at bit 6 + #define BSP_PRV_PLLCCR_PLSRCSEL_BIT (4) // PLSRCSEL in PLLCCR starts at bit 4 + #define BSP_PRV_PLLCCR ((((BSP_CFG_PLL_MUL & BSP_PRV_PLL_MUL_CFG_MACRO_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMULNF_BIT) | \ + (BSP_PRV_PLSRCSEL << BSP_PRV_PLLCCR_PLSRCSEL_BIT)) | \ + BSP_CFG_PLL_DIV) + #define BSP_PRV_PLLCCR2_PLL_DIV_MASK (0x0F) // PLL DIV in PLLCCR2/PLL2CCR2 is 4 bits wide + #define BSP_PRV_PLLCCR2_PLL_DIV_Q_BIT (4) // PLL DIV Q in PLLCCR2/PLL2CCR2 starts at bit 4 + #define BSP_PRV_PLLCCR2_PLL_DIV_R_BIT (8) // PLL DIV R in PLLCCR2/PLL2CCR2 starts at bit 8 + #define BSP_PRV_PLLCCR2 (((BSP_CFG_PLODIVR & BSP_PRV_PLLCCR2_PLL_DIV_MASK) << \ + BSP_PRV_PLLCCR2_PLL_DIV_R_BIT) | \ + ((BSP_CFG_PLODIVQ & BSP_PRV_PLLCCR2_PLL_DIV_MASK) << \ + BSP_PRV_PLLCCR2_PLL_DIV_Q_BIT) | \ + (BSP_CFG_PLODIVP & BSP_PRV_PLLCCR2_PLL_DIV_MASK)) + #endif + #if (4U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLL_USED (1) + #else + #define BSP_PRV_PLL_USED (0) + #endif + + #define BSP_PRV_PLLCCR_PLLMUL_MASK (0xFFU) // PLLMUL is 8 bits wide + #define BSP_PRV_PLLCCR_PLLMUL_BIT (8) // PLLMUL starts at bit 8 + #define BSP_PRV_PLLCCR_RESET (0x0004U) // Bit 2 must be written as 1 + #define BSP_PRV_PLLCCR (((BSP_CFG_PLL_MUL & BSP_PRV_PLLCCR_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMUL_BIT) | \ + BSP_PRV_PLLCCR_RESET) + #endif + + #if (5U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (0) + #define BSP_PRV_PLL_USED (1) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLSRCSEL (1) + #define BSP_PRV_PLL_USED (1) + #else + #define BSP_PRV_PLL_USED (0) + #endif + #define BSP_PRV_PLLCCR_PLLMUL_MASK (0x1F) // PLLMUL in PLLCCR is 5 bits wide + #define BSP_PRV_PLLCCR_PLLMUL_BIT (8) // PLLMUL in PLLCCR starts at bit 8 + #define BSP_PRV_PLLCCR_PLSRCSEL_BIT (4) // PLSRCSEL in PLLCCR starts at bit 4 + #if (BSP_CFG_PLL_DIV == BSP_CLOCKS_PLL_DIV_1) + #define BSP_PRV_PLLCCR ((((BSP_CFG_PLL_MUL & BSP_PRV_PLLCCR_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMUL_BIT) | \ + (BSP_PRV_PLSRCSEL << BSP_PRV_PLLCCR_PLSRCSEL_BIT)) | \ + (0U)) + #elif (BSP_CFG_PLL_DIV == BSP_CLOCKS_PLL_DIV_4) + #define BSP_PRV_PLLCCR ((((BSP_CFG_PLL_MUL & BSP_PRV_PLLCCR_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMUL_BIT) | \ + (BSP_PRV_PLSRCSEL << BSP_PRV_PLLCCR_PLSRCSEL_BIT)) | \ + (1U)) + #elif (BSP_CFG_PLL_DIV == BSP_CLOCKS_PLL_DIV_6) + #define BSP_PRV_PLLCCR ((((BSP_CFG_PLL_MUL & BSP_PRV_PLLCCR_PLLMUL_MASK) << \ + BSP_PRV_PLLCCR_PLLMUL_BIT) | \ + (BSP_PRV_PLSRCSEL << BSP_PRV_PLLCCR_PLSRCSEL_BIT)) | \ + (2U)) + #endif + #endif +#endif + +#if BSP_FEATURE_CGC_HAS_PLL2 + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PL2SRCSEL (0) + #define BSP_PRV_PLL2_USED (1) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PL2SRCSEL (1) + #define BSP_PRV_PLL2_USED (1) + #else + #define BSP_PRV_PLL2_USED (0) + #endif + + #if (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + + #if (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_PRV_PLL2_MUL_CFG_MACRO_PLLMUL_MASK (0x3FFU) + #elif (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_PRV_PLL2_MUL_CFG_MACRO_PLLMUL_MASK (0x7FFU) + #endif + + #define BSP_PRV_PLL2_MUL_CFG_MACRO_PLLMULNF_MASK (0x003U) + #define BSP_PRV_PLL2CCR_PLLMULNF_BIT (6) // PLLMULNF in PLLCCR starts at bit 6 + #define BSP_PRV_PLL2CCR_PLSRCSEL_BIT (4) // PLSRCSEL in PLLCCR starts at bit 4 + #define BSP_PRV_PLL2CCR ((((BSP_CFG_PLL2_MUL & BSP_PRV_PLL2_MUL_CFG_MACRO_PLLMUL_MASK) << \ + BSP_PRV_PLL2CCR_PLLMULNF_BIT) | \ + (BSP_PRV_PL2SRCSEL << BSP_PRV_PLL2CCR_PLSRCSEL_BIT)) | \ + BSP_CFG_PLL2_DIV) + #define BSP_PRV_PLL2CCR2_PLL_DIV_MASK (0x0F) // PLL DIV in PLL2CCR2 is 4 bits wide + #define BSP_PRV_PLL2CCR2_PLL_DIV_Q_BIT (4) // PLL DIV Q in PLL2CCR2 starts at bit 4 + #define BSP_PRV_PLL2CCR2_PLL_DIV_R_BIT (8) // PLL DIV R in PLL2CCR2 starts at bit 8 + #define BSP_PRV_PLL2CCR2 (((BSP_CFG_PL2ODIVR & BSP_PRV_PLL2CCR2_PLL_DIV_MASK) << \ + BSP_PRV_PLL2CCR2_PLL_DIV_R_BIT) | \ + ((BSP_CFG_PL2ODIVQ & BSP_PRV_PLL2CCR2_PLL_DIV_MASK) << \ + BSP_PRV_PLL2CCR2_PLL_DIV_Q_BIT) | \ + (BSP_CFG_PL2ODIVP & BSP_PRV_PLL2CCR2_PLL_DIV_MASK)) + #else + #define BSP_PRV_PLL2CCR ((BSP_CFG_PLL2_MUL << R_SYSTEM_PLL2CCR_PLL2MUL_Pos) | \ + (BSP_CFG_PLL2_DIV << R_SYSTEM_PLL2CCR_PL2IDIV_Pos) | \ + (BSP_PRV_PL2SRCSEL << R_SYSTEM_PLL2CCR_PL2SRCSEL_Pos)) + #endif +#endif + +/* All clocks with configurable source except PLL and CLKOUT can use PLL. */ +#if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_PLL) + #define BSP_PRV_STABILIZE_PLL (1) +#endif + +/* All clocks with configurable source can use the main oscillator. */ +#if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) + #define BSP_PRV_STABILIZE_MAIN_OSC (1) +#elif defined(BSP_CFG_UCLK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_CANFDCLK_SOURCE) && (BSP_CFG_CANFDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_PLL_SOURCE) && (BSP_CFG_PLL_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) && BSP_PRV_PLL_USED + #define BSP_PRV_MAIN_OSC_USED (1) + #define BSP_PRV_STABILIZE_MAIN_OSC (1) +#elif defined(BSP_CFG_PLL2_SOURCE) && (BSP_CFG_PLL2_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) && BSP_PRV_PLL2_USED + #define BSP_PRV_MAIN_OSC_USED (1) + #define BSP_PRV_STABILIZE_MAIN_OSC (1) +#elif defined(BSP_CFG_CLKOUT_SOURCE) && (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_CLKOUT1_SOURCE) && (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_SCISPICLK_SOURCE) && (BSP_CFG_SCISPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_SPICLK_SOURCE) && (BSP_CFG_SPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_SCICLK_SOURCE) && (BSP_CFG_SCICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_CANFDCLK_SOURCE) && (BSP_CFG_CANFDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_GPTCLK_SOURCE) && (BSP_CFG_GPTCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_IICCLK_SOURCE) && (BSP_CFG_IICCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_CECCLK_SOURCE) && (BSP_CFG_CECCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_I3CCLK_SOURCE) && (BSP_CFG_I3CCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_LCDCLK_SOURCE) && (BSP_CFG_LCDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_USB60CLK_SOURCE) && (BSP_CFG_USB60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_OCTACLK_SOURCE) && (BSP_CFG_OCTACLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_SDADC_CLOCK_SOURCE) && (BSP_CFG_SDADC_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_UARTA0_CLOCK_SOURCE) && (BSP_CFG_UARTA0_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_UARTA1_CLOCK_SOURCE) && (BSP_CFG_UARTA1_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_TML_FITL0_SOURCE) && (BSP_CFG_TML_FITL0_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_TML_FITL1_SOURCE) && (BSP_CFG_TML_FITL1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_ETHPHY_SOURCE) && (BSP_CFG_ETHPHY_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#else + #define BSP_PRV_MAIN_OSC_USED (0) +#endif + +/* All clocks with configurable source can use HOCO except the CECCLK and I3CCLK. */ +#if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) + #define BSP_PRV_STABILIZE_HOCO (1) +#elif defined(BSP_CFG_PLL_SOURCE) && (BSP_CFG_PLL_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) && BSP_PRV_PLL_USED + #define BSP_PRV_HOCO_USED (1) + #define BSP_PRV_STABILIZE_HOCO (1) +#elif defined(BSP_CFG_PLL2_SOURCE) && (BSP_CFG_PLL2_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) && BSP_PRV_PLL2_USED + #define BSP_PRV_HOCO_USED (1) + #define BSP_PRV_STABILIZE_HOCO (1) +#elif defined(BSP_CFG_UCLK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_CLKOUT_SOURCE) && (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_CLKOUT1_SOURCE) && (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_SCISPICLK_SOURCE) && (BSP_CFG_SCISPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_SPICLK_SOURCE) && (BSP_CFG_SPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_SCICLK_SOURCE) && (BSP_CFG_SCICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_CANFDCLK_SOURCE) && (BSP_CFG_CANFDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_GPTCLK_SOURCE) && (BSP_CFG_GPTCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_IICCLK_SOURCE) && (BSP_CFG_IICCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_LCDCLK_SOURCE) && (BSP_CFG_LCDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_USB60CLK_SOURCE) && (BSP_CFG_USB60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_OCTACLK_SOURCE) && (BSP_CFG_OCTACLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_SDADC_CLOCK_SOURCE) && (BSP_CFG_SDADC_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_UARTA0_CLOCK_SOURCE) && (BSP_CFG_UARTA0_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_UARTA1_CLOCK_SOURCE) && (BSP_CFG_UARTA1_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_TML_FITL0_SOURCE) && (BSP_CFG_TML_FITL0_SOURCE == BSP_CLOCKS_SOURCE_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_TML_FITL1_SOURCE) && (BSP_CFG_TML_FITL1_SOURCE == BSP_CLOCKS_SOURCE_HOCO) + #define BSP_PRV_HOCO_USED (1) +#else + #define BSP_PRV_HOCO_USED (0) +#endif + +/* All clocks with configurable source except PLL can use MOCO. */ +#if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) + #define BSP_PRV_STABILIZE_MOCO (1) +#elif defined(BSP_CFG_CLKOUT_SOURCE) && (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_CLKOUT1_SOURCE) && (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_UCLK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_SCISPICLK_SOURCE) && (BSP_CFG_SCISPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_SPICLK_SOURCE) && (BSP_CFG_SPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_SCICLK_SOURCE) && (BSP_CFG_SCICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_CANFDCLK_SOURCE) && (BSP_CFG_CANFDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_GPTCLK_SOURCE) && (BSP_CFG_GPTCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_IICCLK_SOURCE) && (BSP_CFG_IICCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_I3CCLK_SOURCE) && (BSP_CFG_I3CCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_LCDCLK_SOURCE) && (BSP_CFG_LCDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_USB60CLK_SOURCE) && (BSP_CFG_USB60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_OCTACLK_SOURCE) && (BSP_CFG_OCTACLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_UARTA0_CLOCK_SOURCE) && (BSP_CFG_UARTA0_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_UARTA1_CLOCK_SOURCE) && (BSP_CFG_UARTA1_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_TML_FITL0_SOURCE) && (BSP_CFG_TML_FITL0_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_TML_FITL1_SOURCE) && (BSP_CFG_TML_FITL1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_ESWCLK_SOURCE) && (BSP_CFG_ESWCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_ESWPHYCLK_SOURCE) && (BSP_CFG_ESWPHYCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_ESCCLK_SOURCE) && (BSP_CFG_ESCCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_ETHPHYCLK_SOURCE) && (BSP_CFG_ETHPHYCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_BCLKA_SOURCE) && (BSP_CFG_BCLKA_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#else + #define BSP_PRV_MOCO_USED (0) +#endif + +/* All clocks with configurable source except UCK, CANFD, LCDCLK, USBHSCLK, I3CCLK and PLL can use LOCO. */ +#if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) + #define BSP_PRV_STABILIZE_LOCO (1) +#elif defined(BSP_CFG_CLKOUT_SOURCE) && (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_CLKOUT1_SOURCE) && (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_SCISPICLK_SOURCE) && (BSP_CFG_SCISPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_SPICLK_SOURCE) && (BSP_CFG_SPICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_SCICLK_SOURCE) && (BSP_CFG_SCICLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_CANFDCLK_SOURCE) && (BSP_CFG_CANFDCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_GPTCLK_SOURCE) && (BSP_CFG_GPTCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_IICCLK_SOURCE) && (BSP_CFG_IICCLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_OCTACLK_SOURCE) && (BSP_CFG_OCTACLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_UARTA0_CLOCK_SOURCE) && (BSP_CFG_UARTA0_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif defined(BSP_CFG_UARTA1_CLOCK_SOURCE) && (BSP_CFG_UARTA1_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + #define BSP_PRV_LOCO_USED (1) +#elif (defined(BSP_CFG_FSXP_SOURCE) && (BSP_CFG_FSXP_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO)) + #define BSP_PRV_LOCO_USED (1) +#else + #define BSP_PRV_LOCO_USED (0) +#endif + +/* Determine the optimal operating speed mode to apply after clock configuration based on the startup clock + * frequency. */ +#if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ && !BSP_PRV_PLL_USED && !BSP_PRV_PLL2_USED && \ + (BSP_FEATURE_CGC_LOW_SPEED_SUPPORT_MAIN_OSC || !BSP_PRV_MAIN_OSC_USED) + #define BSP_PRV_STARTUP_OPERATING_MODE (BSP_PRV_OPERATING_MODE_LOW_SPEED) +#elif BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ + #define BSP_PRV_STARTUP_OPERATING_MODE (BSP_PRV_OPERATING_MODE_MIDDLE_SPEED) +#else + #define BSP_PRV_STARTUP_OPERATING_MODE (BSP_PRV_OPERATING_MODE_HIGH_SPEED) +#endif + +#if defined(BSP_CFG_OPTION_SETTING_OFS1_ICSATS) && BSP_FEATURE_BSP_HAS_CLOCK_SUPPLY_TYPEB + #define BSP_PRV_CLOCK_SUPPLY_TYPE_B (0 == BSP_CFG_OPTION_SETTING_OFS1_ICSATS) +#else + #define BSP_PRV_CLOCK_SUPPLY_TYPE_B (0) +#endif + +#if (BSP_FEATURE_BSP_HAS_CANFD_CLOCK && (BSP_CFG_CANFDCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && \ + (BSP_CFG_CANFDCLK_SOURCE != BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC)) || \ + (BSP_FEATURE_BSP_HAS_SCISPI_CLOCK && (BSP_CFG_SCISPICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_SCI_CLOCK && (BSP_CFG_SCICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_SPI_CLOCK && (BSP_CFG_SPICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_PERIPHERAL_GPT_GTCLK_PRESENT && (BSP_CFG_GPTCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_IIC_CLOCK && (BSP_CFG_IICCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_CEC_CLOCK && (BSP_CFG_CECCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_I3C_CLOCK && (BSP_CFG_I3CCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_USB60_CLOCK && (BSP_CFG_USB60CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_LCD_CLOCK && (BSP_CFG_LCDCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_ADC_CLOCK && (BSP_CFG_ADCCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_ESW_CLOCK && (BSP_CFG_ESWCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_ESWPHY_CLOCK && (BSP_CFG_ESWPHYCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (defined(BSP_CFG_BCLKA_SOURCE) && (BSP_CFG_BCLKA_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL0_CLOCK && \ + (BSP_CFG_EXTRA_PERIPHERAL0CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) || \ + (BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL1_CLOCK && \ + (BSP_CFG_EXTRA_PERIPHERAL1CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED)) + + #define BSP_PRV_HAS_ENABLED_PERIPHERAL_CLOCKS (1U) +#else + #define BSP_PRV_HAS_ENABLED_PERIPHERAL_CLOCKS (0U) +#endif + +#define BSP_PRV_HZ_PER_MHZ (1000000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +#if !BSP_FEATURE_CGC_REGISTER_SET_B +static uint8_t bsp_clock_set_prechange(uint32_t requested_freq_hz); +static void bsp_clock_set_postchange(uint32_t updated_freq_hz, uint8_t new_rom_wait_state); + + #if BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_PRV_CLOCK_SUPPLY_TYPE_B +static void bsp_clock_set_memwait(uint32_t updated_freq_hz); + + #endif + + #if !BSP_CFG_USE_LOW_VOLTAGE_MODE +static void bsp_prv_operating_mode_opccr_set(uint8_t operating_mode); + + #endif +void bsp_prv_clock_dividers_set(uint32_t sckdivcr, uint16_t sckdivcr2); + +#else +static void bsp_prv_cmc_init(void); +static void bsp_prv_operating_mode_flmode_set(uint8_t operating_mode); + +static void bsp_prv_clkout_set(void); + +#endif + +static void bsp_prv_sosc_init(void); + +#if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + #if defined(__ICCARM__) + +void R_BSP_SubClockStabilizeWait(uint32_t delay_ms); +void R_BSP_SubClockStabilizeWaitAfterReset(uint32_t delay_ms); + + #pragma weak R_BSP_SubClockStabilizeWait + #pragma weak R_BSP_SubClockStabilizeWaitAfterReset + + #elif defined(__GNUC__) || defined(__ARMCC_VERSION) + +void R_BSP_SubClockStabilizeWait(uint32_t delay_ms) __attribute__((weak)); +void R_BSP_SubClockStabilizeWaitAfterReset(uint32_t delay_ms) __attribute__((weak)); + + #endif +#endif + +#if (BSP_PRV_HAS_ENABLED_PERIPHERAL_CLOCKS == 1U) +static void bsp_peripheral_clock_set(volatile uint8_t * p_clk_ctrl_reg, + volatile uint8_t * p_clk_div_reg, + uint8_t peripheral_clk_div, + uint8_t peripheral_clk_source); + +#endif + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if !BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET +static void bsp_prv_clock_set_hard_reset(void); + + #else +void bsp_soft_reset_prepare(void); + + #endif +#endif + +/* This array stores the clock frequency of each system clock. This section of RAM should not be initialized by the C + * runtime environment. This is initialized and used in bsp_clock_init, which is called before the C runtime + * environment is initialized. */ +static uint32_t g_clock_freq[BSP_PRV_NUM_CLOCKS] BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT); + +#if BSP_TZ_SECURE_BUILD + +/* Callback used to notify the nonsecure project that the clock settings have changed. */ +static bsp_clock_update_callback_t g_bsp_clock_update_callback = NULL; + +/* Pointer to nonsecure memory to store the callback args. */ +static bsp_clock_update_callback_args_t * gp_callback_memory = NULL; + +/* Reentrant method of calling the clock_update_callback. */ +static void r_bsp_clock_update_callback_call (bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_args) +{ + /* Allocate memory for saving global callback args on the secure stack. */ + bsp_clock_update_callback_args_t callback_args; + + /* Save current info stored in callback memory. */ + callback_args = *gp_callback_memory; + + /* Write the callback args to the nonsecure callback memory. */ + *gp_callback_memory = *p_callback_args; + + /* Call the callback to notifiy ns project about clock changes. */ + p_callback(gp_callback_memory); + + /* Restore the info in callback memory. */ + *gp_callback_memory = callback_args; +} + +/* Initialize the callback, callback memory and invoke the callback to ensure the nonsecure project has the correct clock settings. */ +void r_bsp_clock_update_callback_set (bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory) +{ + /* Store pointer to nonsecure callback memory. */ + gp_callback_memory = p_callback_memory; + + /* Store callback. */ + g_bsp_clock_update_callback = p_callback; + + /* Set callback args. */ + bsp_clock_update_callback_args_t callback_args = + { + .pll_freq = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] + }; + + /* Call the callback. */ + r_bsp_clock_update_callback_call(g_bsp_clock_update_callback, &callback_args); +} + +#elif BSP_TZ_NONSECURE_BUILD && BSP_CFG_CLOCKS_SECURE == 1 + +bsp_clock_update_callback_args_t g_callback_memory; + #if BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD + #if defined(__ARMCC_VERSION) || defined(__ICCARM__) +static void BSP_CMSE_NONSECURE_CALL g_bsp_clock_update_callback (bsp_clock_update_callback_args_t * p_callback_args) + #elif defined(__GNUC__) + +static BSP_CMSE_NONSECURE_CALL void g_bsp_clock_update_callback (bsp_clock_update_callback_args_t * p_callback_args) + #endif + +{ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = p_callback_args->pll_freq; + + /* Update the SystemCoreClock value based on the new g_clock_freq settings. */ + SystemCoreClockUpdate(); +} + + #endif +#endif + +#if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED + +/* List of MSTP bits that must be set before entering low power modes or changing SCKDIVCR. */ +static const uint8_t g_bsp_prv_power_change_mstp_data[][2] = BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY; + +static const uint8_t g_bsp_prv_power_change_mstp_length = sizeof(g_bsp_prv_power_change_mstp_data) / + sizeof(g_bsp_prv_power_change_mstp_data[0]); + +static volatile uint32_t * const gp_bsp_prv_mstp = &R_MSTP->MSTPCRB; +#endif + +#if (BSP_CFG_SLEEP_MODE_DELAY_ENABLE || BSP_CFG_RTOS_SLEEP_MODE_DELAY_ENABLE) && \ + BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS +static uint16_t g_pre_sleep_sckdivcr2; +#endif + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if !BSP_CFG_USE_LOW_VOLTAGE_MODE + +/*********************************************************************************************************************** + * Changes the operating speed in OPCCR. Assumes the LPM registers are unlocked in PRCR and cache is off. + * + * @param[in] operating_mode Desired operating mode, must be one of the BSP_PRV_OPERATING_MODE_* macros, cannot be + * BSP_PRV_OPERATING_MODE_SUBOSC_SPEED + **********************************************************************************************************************/ +static void bsp_prv_operating_mode_opccr_set (uint8_t operating_mode) +{ + #if BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR + + /* If the desired operating mode is already set, return. */ + if (operating_mode == R_SYSTEM->OPCCR) + { + return; + } + + /* On some MCUs, the HOCO must be stable before updating OPCCR.OPCM. */ + if (0U == R_SYSTEM->HOCOCR) + { + /* Wait for HOCO to stabilize. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.HOCOSF, 1U); + } + #endif + + /* Wait for transition to complete. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OPCCR_b.OPCMTSF, 0U); + + /* Apply requested operating speed mode. */ + R_SYSTEM->OPCCR = operating_mode; + + /* Wait for transition to complete. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OPCCR_b.OPCMTSF, 0U); +} + + #endif +#endif + +#if !BSP_CFG_USE_LOW_VOLTAGE_MODE + +/*********************************************************************************************************************** + * Changes the operating speed mode. Assumes the LPM registers are unlocked in PRCR and cache is off. + * + * @param[in] operating_mode Desired operating mode, must be one of the BSP_PRV_OPERATING_MODE_* macros + **********************************************************************************************************************/ +void bsp_prv_operating_mode_set (uint8_t operating_mode) +{ + #if BSP_PRV_POWER_USE_DCDC + static bsp_power_mode_t power_mode = BSP_POWER_MODE_LDO; + + /* Disable DCDC if transitioning to an incompatible mode. */ + if ((operating_mode > BSP_PRV_OPERATING_MODE_MIDDLE_SPEED) && (R_SYSTEM->DCDCCTL & R_SYSTEM_DCDCCTL_DCDCON_Msk)) + { + /* LDO boost must be used if entering subclock speed mode (see RA2L1 User's Manual (R01UH0853EJ0100) Section + * 10.5.1 (5) Switching from High-speed/Middle-speed mode in DCDC power mode to Subosc-speed mode or Software + * Standby mode). */ + power_mode = R_BSP_PowerModeSet((BSP_PRV_OPERATING_MODE_SUBOSC_SPEED == operating_mode) ? + BSP_POWER_MODE_LDO_BOOST : BSP_POWER_MODE_LDO); + } + #endif + + #if BSP_FEATURE_CGC_HAS_SOPCCR + if (BSP_PRV_OPERATING_MODE_SUBOSC_SPEED == operating_mode) + { + /* Wait for transition to complete. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOPCCR_b.SOPCMTSF, 0U); + + /* Set subosc speed mode. */ + R_SYSTEM->SOPCCR = 0x1U; + + /* Wait for transition to complete. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOPCCR_b.SOPCMTSF, 0U); + } + else + #endif + { + #if BSP_FEATURE_CGC_HAS_SOPCCR + + /* Wait for transition to complete. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOPCCR_b.SOPCMTSF, 0U); + + /* Exit subosc speed mode first. */ + R_SYSTEM->SOPCCR = 0U; + + /* Wait for transition to complete. Check the entire register here since it should be set to 0 at this point. + * Checking the entire register is slightly more efficient. This will also hang the program if the LPM + * registers are not unlocked, which can help catch programming errors. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOPCCR, 0U); + #endif + + #if BSP_FEATURE_CGC_REGISTER_SET_B + bsp_prv_operating_mode_flmode_set(operating_mode); + #else + bsp_prv_operating_mode_opccr_set(operating_mode); + #endif + } + + #if BSP_PRV_POWER_USE_DCDC + + /* Enable DCDC if it was previously enabled. */ + if ((operating_mode <= BSP_PRV_OPERATING_MODE_MIDDLE_SPEED) && (power_mode < BSP_POWER_MODE_LDO)) + { + R_BSP_PowerModeSet(power_mode); + power_mode = BSP_POWER_MODE_LDO; + } + #endif +} + +#endif + +#if BSP_PRV_PLL_SUPPORTED + +/*********************************************************************************************************************** + * Updates the operating frequency of the specified PLL and all its output channels. + * + * @param[in] clock PLL being configured + * @param[in] p_pll_hz Array of values of the new PLL output clock frequencies + **********************************************************************************************************************/ +void bsp_prv_prepare_pll (uint32_t clock, uint32_t const * const p_pll_hz) +{ + if (BSP_CLOCKS_SOURCE_CLOCK_PLL == clock) + { + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = p_pll_hz[0]; + #if 3 == BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1Q] = p_pll_hz[1]; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1R] = p_pll_hz[2]; + #endif + } + + #if BSP_PRV_PLL2_SUPPORTED + else + { + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2] = p_pll_hz[0]; + #if 3 == BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2Q] = p_pll_hz[1]; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2R] = p_pll_hz[2]; + #endif + } + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Update SystemCoreClock variable based on current clock settings. + **********************************************************************************************************************/ +void SystemCoreClockUpdate (void) +{ +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if BSP_FEATURE_TZ_HAS_TRUSTZONE && (BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD) && BSP_FEATURE_TZ_VERSION == 2 + bool secure = !R_SYSTEM->CGFSAR_b.NONSEC00; + #endif + + uint32_t clock_index = FSP_STYPE3_REG8_READ(R_SYSTEM->SCKSCR, secure); + + #if !BSP_FEATURE_CGC_HAS_CPUCLK + uint32_t ick = + (FSP_STYPE3_REG32_READ(R_SYSTEM->SCKDIVCR, secure) & R_SYSTEM_SCKDIVCR_ICK_Msk) >> R_SYSTEM_SCKDIVCR_ICK_Pos; + SystemCoreClock = g_clock_freq[clock_index] >> ick; + #else + #if (BSP_CFG_CPU_CORE == 1) + uint8_t cpuck = (FSP_STYPE3_REG8_READ(R_SYSTEM->SCKDIVCR2, secure) & R_SYSTEM_SCKDIVCR2_CPUCK1_Msk) >> + R_SYSTEM_SCKDIVCR2_CPUCK1_Pos; + #else + uint8_t cpuck = (FSP_STYPE3_REG8_READ(R_SYSTEM->SCKDIVCR2, secure) & R_SYSTEM_SCKDIVCR2_CPUCK_Msk) >> + R_SYSTEM_SCKDIVCR2_CPUCK_Pos; + #endif + uint8_t cpuclk_div = cpuck; + + if (8U == cpuclk_div) + { + SystemCoreClock = g_clock_freq[clock_index] / 3U; + } + else if (9U == cpuclk_div) + { + SystemCoreClock = g_clock_freq[clock_index] / 6U; + } + else if (10U == cpuclk_div) + { + SystemCoreClock = g_clock_freq[clock_index] / 12U; + } + else if (11U == cpuclk_div) + { + SystemCoreClock = g_clock_freq[clock_index] / 24U; + } + else + { + SystemCoreClock = g_clock_freq[clock_index] >> cpuclk_div; + } + #endif +#else + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + SystemCoreClock = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC] >> R_SYSTEM->MOSCDIV; + #endif + if (BSP_CLOCKS_SOURCE_CLOCK_FSUB == R_SYSTEM->ICLKSCR_b.CKST) + { + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + SystemCoreClock = R_SYSTEM->FSUBSCR ? g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_LOCO] : \ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK]; + #else + SystemCoreClock = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_LOCO]; + #endif + } + else + { + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + if (BSP_CLOCKS_FMAIN_SOURCE_CLOCK_FOCO == R_SYSTEM->FMAINSCR_b.CKST) + #endif + { + SystemCoreClock = R_SYSTEM->FOCOSCR_b.CKST ? \ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MOCO] >> R_SYSTEM->MOCODIV : \ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_HOCO] >> R_SYSTEM->HOCODIV; + } + } +#endif +} + +#if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED + +/*******************************************************************************************************************//** + * Sets MSTP bits as required by the hardware manual for the MCU (reference Figure 9.2 "Example flow for changing the + * value of SCKDIVCR" in the RA6M3 manual R01UH0886EJ0100). + * + * This function must be called before entering standby or changing SCKDIVCR. + * + * @return bitmask of bits set, where each bit corresponds to an index in g_bsp_prv_power_change_mstp_data + **********************************************************************************************************************/ +uint32_t bsp_prv_power_change_mstp_set (void) +{ + uint32_t mstp_set_bitmask = 0U; + for (uint32_t i = 0U; i < g_bsp_prv_power_change_mstp_length; i++) + { + /* Get the MSTP register index and the bit to test from the MCU specific array. */ + uint32_t mstp_index = g_bsp_prv_power_change_mstp_data[i][0]; + uint32_t mstp_bit = 1U << g_bsp_prv_power_change_mstp_data[i][1]; + + /* Only set the bit if it's currently cleared. */ + if (!(gp_bsp_prv_mstp[mstp_index] & mstp_bit)) + { + gp_bsp_prv_mstp[mstp_index] |= mstp_bit; + mstp_set_bitmask |= 1U << i; + } + + /* This loop takes over 250 ns (30 cycles at 120 MHz) between 2 consecutive bits being set. It was measured + * at 58 cycles for default IAR build configurations and 59 cycles for default GCC build configurations. */ + } + + /* The time between setting last MSTP bit and setting SCKDIVCR takes over 750 ns (90 cycles at 120 MHz). It was + * measured at 96 cycles for default IAR build configurations and 102 cycles for default GCC build + * configurations. */ + + return mstp_set_bitmask; +} + +#endif + +#if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED + +/*******************************************************************************************************************//** + * Clears MSTP bits set by bsp_prv_power_change_mstp_set as required by the hardware manual for the MCU (reference + * Figure 9.2 "Example flow for changing the value of SCKDIVCR" in the RA6M3 manual R01UH0886EJ0100). + * + * This function must be called after exiting standby or changing SCKDIVCR. + * + * @param[in] mstp_clear_bitmask bitmask of bits to clear, where each bit corresponds to an index in + * g_bsp_prv_power_change_mstp_data + **********************************************************************************************************************/ +void bsp_prv_power_change_mstp_clear (uint32_t mstp_clear_bitmask) +{ + /* The time between setting SCKDIVCR and clearing the first MSTP bit takes over 250 ns (30 cycles at 120 MHz). It + * was measured at 38 cycles for default IAR build configurations and 68 cycles for default GCC build + * configurations. */ + + for (uint32_t i = 0U; i < g_bsp_prv_power_change_mstp_length; i++) + { + /* Only clear the bit if it was set in bsp_prv_power_change_mstp_set. */ + if ((1U << i) & mstp_clear_bitmask) + { + /* Get the MSTP register index and the bit to test from the MCU specific array. */ + uint32_t mstp_index = g_bsp_prv_power_change_mstp_data[i][0]; + uint32_t mstp_bit = 1U << g_bsp_prv_power_change_mstp_data[i][1]; + + gp_bsp_prv_mstp[mstp_index] &= ~mstp_bit; + } + + /* This loop takes over 250 ns (30 cycles at 120 MHz) between 2 consecutive bits being cleared. It was measured + * at 44 cycles for default IAR build configurations and 53 cycles for default GCC build configurations. */ + } +} + +#endif + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + +/*******************************************************************************************************************//** + * Write SCKDIVCR and SCKDIVCR2 in the correct order to ensure that CPUCLK frequency is greater than ICLK frequency. + * + * @param[in] sckdivcr The new SCKDIVCR setting. + * @param[in] sckdivcr2 The new SCKDIVCR2 setting. + **********************************************************************************************************************/ +void bsp_prv_clock_dividers_set (uint32_t sckdivcr, uint16_t sckdivcr2) +{ + #if BSP_FEATURE_CGC_HAS_CPUCLK + uint32_t requested_iclk_div = BSP_PRV_SCKDIVCR_DIV_VALUE( + (sckdivcr >> FSP_PRIV_CLOCK_ICLK) & FSP_PRV_SCKDIVCR_DIV_MASK); + uint32_t current_iclk_div = BSP_PRV_SCKDIVCR_DIV_VALUE(R_SYSTEM->SCKDIVCR_b.ICK); + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + uint16_t temp_sckdivcr2 = sckdivcr2; + #else + uint8_t temp_sckdivcr2 = ((uint8_t) sckdivcr2) & R_SYSTEM_SCKDIVCR2_CPUCK_Msk; + #endif + + if (requested_iclk_div >= current_iclk_div) + { + /* If the requested ICLK divider is greater than or equal to the current ICLK divider, then writing to + * SCKDIVCR first will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR = sckdivcr; + R_SYSTEM->SCKDIVCR2 = temp_sckdivcr2; + } + else + { + /* If the requested ICLK divider is less than the current ICLK divider, then writing to SCKDIVCR2 first + * will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR2 = temp_sckdivcr2; + R_SYSTEM->SCKDIVCR = sckdivcr; + } + + #else + FSP_PARAMETER_NOT_USED(sckdivcr2); + + R_SYSTEM->SCKDIVCR = sckdivcr; + #endif +} + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + +/*******************************************************************************************************************//** + * Clears the PFB for MRAM. + **********************************************************************************************************************/ +void bsp_prv_clear_pfb (void) +{ + /* Clear MRAM pre-fetch buffer, see 54.4.3 Frequency Change Procedure for MRAM */ + R_MRMS->MRCPFB = 0x00; + (void) R_MRMS->MRCPFB; + (void) R_MRMS->MRCPFB; + (void) R_MRMS->MRCPFB; +} + +/*******************************************************************************************************************//** + * Sets the PFB for MRAM if the frequency exceeds the threshold. + **********************************************************************************************************************/ +void bsp_prv_set_pfb (void) +{ + uint32_t mrcfreq = R_MRMS->MRCFREQ_b.MRCMHZ; + + /* Do not enable Prefetch Buffer when MRAM read frequency is set to 100MHz or less. */ + if (mrcfreq >= BSP_PRV_MRCPFB_LIMIT) + { + R_MRMS->MRCPFB = 0x01; + } +} + +/*******************************************************************************************************************//** + * Sets the wait states for MRAM. + **********************************************************************************************************************/ +__STATIC_INLINE void bsp_prv_set_wait_state_frequency (uint32_t mriclk_frequency_hz, uint32_t mrpclk_frequency_hz) +{ + uint32_t freq_mhz; + + /* Set Code MRAM wait states */ + if (mriclk_frequency_hz <= BSP_PRV_MRFREQ_MIN_HZ) + { + /* When under the minimum set MRCFREQ to 0 */ + freq_mhz = 0; + } + else + { + /* Round up the result when converting to MHz */ + freq_mhz = (mriclk_frequency_hz + BSP_PRV_HZ_PER_MHZ - 1) / BSP_PRV_HZ_PER_MHZ; + } + + /* Write MRCFREQ */ + while (freq_mhz != R_MRMS->MRCFREQ) + { + R_MRMS->MRCFREQ = BSP_PRV_MRCFREQ_KEY | freq_mhz; + } + + /* Set Extra MRAM wait states */ + if (mrpclk_frequency_hz <= BSP_PRV_MRFREQ_MIN_HZ) + { + /* When under the minimum set MREFREQ to 0 */ + freq_mhz = 0; + } + else + { + /* Round up the result when converting to MHz */ + freq_mhz = (mrpclk_frequency_hz + BSP_PRV_HZ_PER_MHZ - 1) / BSP_PRV_HZ_PER_MHZ; + } + + /* Write MREFREQ */ + while (freq_mhz != R_MRMS->MREFREQ) + { + R_MRMS->MREFREQ = BSP_PRV_MREFREQ_KEY | freq_mhz; + } +} + + #endif + +/*******************************************************************************************************************//** + * Applies system core clock source and divider changes. The MCU is expected to be in high speed mode during this + * configuration and the CGC registers are expected to be unlocked in PRCR. + * + * @param[in] clock Desired system clock + * @param[in] sckdivcr Value to set in SCKDIVCR register + * @param[in] sckdivcr2 Value to set in SCKDIVCR2 register + **********************************************************************************************************************/ +void bsp_prv_clock_set (uint32_t clock, uint32_t sckdivcr, uint16_t sckdivcr2) +{ + #if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED + + /* Set MSTP bits as required by the hardware manual. This is done first to ensure the 750 ns delay required after + * increasing any division ratio in SCKDIVCR is met. */ + uint32_t mstp_set_bitmask = bsp_prv_power_change_mstp_set(); + #endif + + uint32_t iclk_div = (sckdivcr >> FSP_PRIV_CLOCK_ICLK) & FSP_PRV_SCKDIVCR_DIV_MASK; + uint32_t iclk_freq_hz_post_change = g_clock_freq[clock] / BSP_PRV_SCKDIVCR_DIV_VALUE(iclk_div); + #if BSP_FEATURE_CGC_HAS_CPUCLK + uint32_t cpuclk_div = sckdivcr2 & R_SYSTEM_SCKDIVCR2_CPUCK_Msk; + uint32_t clock_freq_hz_post_change = g_clock_freq[clock] / BSP_PRV_SCKDIVCR_DIV_VALUE(cpuclk_div); + #else + uint32_t clock_freq_hz_post_change = iclk_freq_hz_post_change; + #endif + + /* Adjust the MCU specific wait state right before the system clock is set, if the system clock frequency to be + * set is higher than before. */ + uint8_t new_rom_wait_state = bsp_clock_set_prechange(iclk_freq_hz_post_change); + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + uint32_t mriclk_div = (sckdivcr2 & R_SYSTEM_SCKDIVCR2_MRICK_Msk) >> + R_SYSTEM_SCKDIVCR2_MRICK_Pos; + uint32_t mriclk_freq_hz_post_change = g_clock_freq[clock] / BSP_PRV_SCKDIVCR_DIV_VALUE(mriclk_div); + + uint32_t mrpclk_div = (sckdivcr & R_SYSTEM_SCKDIVCR_FCK_Msk) >> R_SYSTEM_SCKDIVCR_FCK_Pos; + uint32_t mrpclk_freq_hz_post_change = g_clock_freq[clock] / BSP_PRV_SCKDIVCR_DIV_VALUE(mrpclk_div); + + /* Clear the PFB before doing any clock changes according to Frequency Change Procedure. */ + bsp_prv_clear_pfb(); + #endif + + /* Switching to a faster source clock. */ + if (g_clock_freq[clock] >= g_clock_freq[R_SYSTEM->SCKSCR]) + { + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* New source clock will be faster so set wait state frequency according to Frequency Change Procedure. */ + bsp_prv_set_wait_state_frequency(mriclk_freq_hz_post_change, mrpclk_freq_hz_post_change); + #endif + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE && 0 == BSP_MCU_GROUP_RA8_GEN2 + bool post_div_set_delay = false; + + if ((clock_freq_hz_post_change > SystemCoreClock) && + ((clock_freq_hz_post_change - SystemCoreClock) > BSP_MAX_CLOCK_CHANGE_THRESHOLD)) + { + /* If the requested ICLK divider is greater than or equal to the current ICLK divider, then writing to + * SCKDIVCR first will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + + if (iclk_div == cpuclk_div) + { + /* If dividers are equal, bump both down 1 notch. + * /1 and /2 are the only possible options. */ + uint32_t new_div = BSP_CLOCKS_SYS_CLOCK_DIV_2; + if (cpuclk_div == BSP_CLOCKS_SYS_CLOCK_DIV_1) + { + new_div = BSP_CLOCKS_SYS_CLOCK_DIV_4; + } + + R_SYSTEM->SCKDIVCR = (sckdivcr & ~(R_SYSTEM_SCKDIVCR_ICK_Msk)) | + (new_div << R_SYSTEM_SCKDIVCR_ICK_Pos); + R_SYSTEM->SCKDIVCR2 = (uint8_t) new_div; + } + else + { + R_SYSTEM->SCKDIVCR = sckdivcr; + if (cpuclk_div == BSP_CLOCKS_SYS_CLOCK_DIV_1) + { + /* Determine what the other dividers are using and stay aligned with that. */ + R_SYSTEM->SCKDIVCR2 = + (iclk_div & 0x8) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + } + else + { + /* If not /1, can just add 1 to it. */ + R_SYSTEM->SCKDIVCR2 = (uint8_t) sckdivcr2 + 1; + } + } + + /* Set the system source clock */ + R_SYSTEM->SCKSCR = (uint8_t) clock; + + /* Wait for settling delay. */ + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + + /* Trigger delay after setting dividers */ + post_div_set_delay = true; + } + /* Continue and set clock to actual target speed. */ + #endif + + /* Set the clock dividers before switching to the new clock source. */ + bsp_prv_clock_dividers_set(sckdivcr, sckdivcr2); + + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE + #if BSP_MCU_GROUP_RA8_GEN2 + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + #else + if (post_div_set_delay) + { + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClock = clock_freq_hz_post_change; + + /* Wait for settling delay. */ + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + } + else + #endif + #endif + { + /* Switch to the new clock source. */ + R_SYSTEM->SCKSCR = (uint8_t) clock; + } + } + /* Switching to a slower source clock. */ + else + { + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE + #if 0 == BSP_MCU_GROUP_RA8_GEN2 + if ((SystemCoreClock > clock_freq_hz_post_change) && + ((SystemCoreClock - clock_freq_hz_post_change) > BSP_MAX_CLOCK_CHANGE_THRESHOLD)) + { + uint32_t current_sckdivcr = R_SYSTEM->SCKDIVCR; + + /* Must first step CPUCLK down by factor of 2 or 3 if it is currently above threshold. */ + if (R_SYSTEM->SCKDIVCR2 == ((current_sckdivcr >> R_SYSTEM_SCKDIVCR_ICK_Pos) & 0xF)) + { + /* If ICLK and CPUCLK have same divider currently, move ICLK down 1 notch first. */ + uint32_t current_iclk_div = (current_sckdivcr >> R_SYSTEM_SCKDIVCR_ICK_Pos) & 0xF; + uint32_t new_div = (uint16_t) current_iclk_div + 1; + if (current_iclk_div == 0) + { + /* Align with already selected divider for PCLKA because it must have one > 1 already. */ + new_div = + (current_sckdivcr & + (0x8 << R_SYSTEM_SCKDIVCR_PCKA_Pos)) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + } + + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + R_SYSTEM->SCKDIVCR = (current_sckdivcr & ~(R_SYSTEM_SCKDIVCR_ICK_Msk)) | + (new_div << R_SYSTEM_SCKDIVCR_ICK_Pos); + R_SYSTEM->SCKDIVCR2 = (uint8_t) new_div; + + SystemCoreClockUpdate(); + } + } + #endif + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + R_SYSTEM->SCKSCR = (uint8_t) clock; + + /* Set the clock dividers after switching to the new clock source. */ + bsp_prv_clock_dividers_set(sckdivcr, sckdivcr2); + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* New source clock will be slower so set wait state frequency after changing clock frequency according to Frequency Change Procedure. */ + bsp_prv_set_wait_state_frequency(mriclk_freq_hz_post_change, mrpclk_freq_hz_post_change); + #endif + } + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + bsp_prv_set_pfb(); + #endif + + /* Clock is now at requested frequency. */ + + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClock = clock_freq_hz_post_change; + + #if BSP_TZ_SECURE_BUILD + if (NULL != g_bsp_clock_update_callback) + { + /* Set callback args. */ + bsp_clock_update_callback_args_t callback_args = + { + .pll_freq = g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] + }; + + /* Call the callback. */ + r_bsp_clock_update_callback_call(g_bsp_clock_update_callback, &callback_args); + } + #endif + + /* Adjust the MCU specific wait state soon after the system clock is set, if the system clock frequency to be + * set is lower than previous. */ + bsp_clock_set_postchange(iclk_freq_hz_post_change, new_rom_wait_state); + + #if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED + + /* Clear MSTP bits as required by the hardware manual. This is done last to ensure the 250 ns delay required after + * decreasing any division ratio in SCKDIVCR is met. */ + bsp_prv_power_change_mstp_clear(mstp_set_bitmask); + #endif +} + + #if BSP_CFG_SLEEP_MODE_DELAY_ENABLE || BSP_CFG_RTOS_SLEEP_MODE_DELAY_ENABLE + +bool bsp_prv_clock_prepare_pre_sleep (void) +{ + /* Must wait before entering or exiting sleep modes. + * See Section 10.7.10 in RA8M1 manual R01UH0994EJ0100 */ + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + + /* Need to slow CPUCLK down before sleeping if it is above 240MHz. */ + bool cpuclk_slowed = false; + if (SystemCoreClock > BSP_MAX_CLOCK_CHANGE_THRESHOLD) + { + #if BSP_MCU_GROUP_RA8_GEN2 + g_pre_sleep_sckdivcr2 = R_SYSTEM->SCKDIVCR2; + uint32_t iclk_div = (R_SYSTEM->SCKDIVCR & R_SYSTEM_SCKDIVCR_ICK_Msk) >> R_SYSTEM_SCKDIVCR_ICK_Pos; + + /* Drop all dividers which could be higher than ICLK to match ICLK. */ + R_SYSTEM->SCKDIVCR2 = + (uint16_t) ((iclk_div << R_SYSTEM_SCKDIVCR2_CPUCK_Pos) | (iclk_div << R_SYSTEM_SCKDIVCR2_CPUCK1_Pos) | + (iclk_div << R_SYSTEM_SCKDIVCR2_NPUCK_Pos) | (iclk_div << R_SYSTEM_SCKDIVCR2_MRICK_Pos)); + #else + + /* Reduce speed of CPUCLK to /2 or /3 of current, select which ones based on what ICLK divider is. */ + R_SYSTEM->SCKDIVCR2 = + (R_SYSTEM->SCKDIVCR & + (0x8 << R_SYSTEM_SCKDIVCR_ICK_Pos)) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + #endif + cpuclk_slowed = true; + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + } + + return cpuclk_slowed; +} + +void bsp_prv_clock_prepare_post_sleep (bool cpuclk_slowed) +{ + /* Set CPUCLK back to original speed here if it was slowed down before sleeping (dropped to below 240MHz) + * Add delays as described in Section 10.7.10 of RA8M1 manual R01UH0994EJ0100 */ + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + if (cpuclk_slowed) + { + #if BSP_MCU_GROUP_RA8_GEN2 + R_SYSTEM->SCKDIVCR2 = g_pre_sleep_sckdivcr2; + #else + + /* Set divider of CPUCLK back to /1. This is the only possible value for it to have been over 240MHz before sleeping. */ + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_1; + #endif + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + } +} + + #endif + +#else + +/*******************************************************************************************************************//** + * Get system core clock source. + * + **********************************************************************************************************************/ +uint32_t bsp_prv_clock_source_get (void) +{ + /* + * | System clock source | FOCOSCR.CKSEL | FMAINSCR.CKSEL | FSUBSCR.CKSEL | ICLKSCR.CKSEL | + * | ------------------- | ------------- | -------------- | ------------- | ------------- | + * | HOCO | 0U | 0U | x | 0U | + * | MOCO | 1U | 0U | x | 0U | + * | MOSC | x | 1U | x | 0U | + * | LOCO | x | x | 1U | 1U | + * | SOSC | x | x | 0U | 1U | + * + * */ + uint32_t clock = BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC; + + if (BSP_CLOCKS_SOURCE_CLOCK_FSUB == R_SYSTEM->ICLKSCR_b.CKST) + { + clock = R_SYSTEM->FSUBSCR ? BSP_CLOCKS_SOURCE_CLOCK_LOCO : BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK; + } + else if (BSP_CLOCKS_FMAIN_SOURCE_CLOCK_FOCO == R_SYSTEM->FMAINSCR_b.CKST) + { + clock = R_SYSTEM->FOCOSCR_b.CKST ? BSP_CLOCKS_SOURCE_CLOCK_MOCO : BSP_CLOCKS_SOURCE_CLOCK_HOCO; + } + else + { + /* Do nothing. */ + } + + return clock; +} + +/*******************************************************************************************************************//** + * Applies system core clock source and divider changes. The MCU is expected to be in high speed mode during this + * configuration and the CGC registers are expected to be unlocked in PRCR. + * + * @param[in] clock Desired system clock + * @param[in] hocodiv The new HOCODIV setting. + * @param[in] mocodiv The new MOCODIV setting. + * @param[in] moscdiv The new MOSCDIV setting. + **********************************************************************************************************************/ +void bsp_prv_clock_set (uint32_t clock, uint8_t hocodiv, uint8_t mocodiv, uint8_t moscdiv) +{ + /* + * | System clock source | FOCOSCR.CKSEL | FMAINSCR.CKSEL | FSUBSCR.CKSEL | ICLKSCR.CKSEL | + * | ------------------- | ------------- | -------------- | ------------- | ------------- | + * | HOCO | 0U | 0U | x | 0U | + * | MOCO | 1U | 0U | x | 0U | + * | MOSC | x | 1U | x | 0U | + * | LOCO | x | x | 1U | 1U | + * | SOSC | x | x | 0U | 1U | + * + * */ + R_SYSTEM->ICLKSCR_b.CKSEL = BSP_CLOCKS_SOURCE_CLOCK_FMAIN; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->ICLKSCR_b.CKST, BSP_CLOCKS_SOURCE_CLOCK_FMAIN); + + if ((BSP_CLOCKS_SOURCE_CLOCK_HOCO == clock) || (BSP_CLOCKS_SOURCE_CLOCK_MOCO == clock)) + { + R_SYSTEM->FMAINSCR_b.CKSEL = BSP_CLOCKS_FMAIN_SOURCE_CLOCK_FOCO; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->FMAINSCR_b.CKST, BSP_CLOCKS_FMAIN_SOURCE_CLOCK_FOCO); + + if (BSP_CLOCKS_SOURCE_CLOCK_HOCO == clock) + { + R_SYSTEM->FOCOSCR_b.CKSEL = BSP_CLOCKS_FOCO_SOURCE_CLOCK_HOCO; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->FOCOSCR_b.CKST, BSP_CLOCKS_FOCO_SOURCE_CLOCK_HOCO); + + /* Due to register access restrictions (see 8.6.1 Register Access), only set the HOCODIV when system clock source is HOCO */ + R_SYSTEM->HOCODIV = hocodiv; + } + else + { + R_SYSTEM->FOCOSCR_b.CKSEL = BSP_CLOCKS_FOCO_SOURCE_CLOCK_MOCO; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->FOCOSCR_b.CKST, BSP_CLOCKS_FOCO_SOURCE_CLOCK_MOCO); + } + } + + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + else if (BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == clock) + { + R_SYSTEM->FMAINSCR_b.CKSEL = BSP_CLOCKS_FMAIN_SOURCE_CLOCK_MAIN_OSC; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->FMAINSCR_b.CKST, BSP_CLOCKS_FMAIN_SOURCE_CLOCK_MAIN_OSC); + } + #endif + else + { + if (BSP_CLOCKS_SOURCE_CLOCK_LOCO == clock) + { + R_SYSTEM->FSUBSCR = BSP_CLOCKS_FSUB_SOURCE_CLOCK_LOCO; + } + + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + else + { + R_SYSTEM->FSUBSCR = BSP_CLOCKS_FSUB_SOURCE_CLOCK_SUBCLOCK; + } + #endif + + R_SYSTEM->ICLKSCR_b.CKSEL = BSP_CLOCKS_SOURCE_CLOCK_FSUB; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->ICLKSCR_b.CKST, BSP_CLOCKS_SOURCE_CLOCK_FSUB); + } + + R_SYSTEM->MOCODIV = mocodiv; + R_SYSTEM->MOSCDIV = moscdiv; + + /* Clock is now at requested frequency. Update the CMSIS core clock variable so that it reflects the new ICLK frequency.*/ + SystemCoreClockUpdate(); +} + +/*******************************************************************************************************************//** + * Setting for CLKOUT/CLKOUT1 + **********************************************************************************************************************/ +static void bsp_prv_clkout_set (void) +{ + #if BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_CLOCK_DISABLED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + R_PCLBUZ->CKS[0] = 0U; + #endif + #else + uint8_t cks0 = (BSP_CFG_CLKOUT_DIV << R_PCLBUZ_CKS_CCS_Pos); + #if (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) || \ + (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK) + cks0 |= (BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FSUB << R_PCLBUZ_CKS_CSEL_Pos); + #else + cks0 |= (BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FMAIN << R_PCLBUZ_CKS_CSEL_Pos); + #endif + R_PCLBUZ->CKS[0] = cks0; + R_PCLBUZ->CKS[0] |= (1U << R_PCLBUZ_CKS_PCLOE_Pos); + #endif + + #if defined(BSP_CFG_CLKOUT1_SOURCE) + #if BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_CLOCK_DISABLED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + R_PCLBUZ->CKS[1] = 0U; + #endif + #else + uint8_t cks1 = (BSP_CFG_CLKOUT1_DIV << R_PCLBUZ_CKS_CCS_Pos); + #if (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) || \ + (BSP_CFG_CLKOUT1_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK) + cks1 |= (BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FSUB << R_PCLBUZ_CKS_CSEL_Pos); + #else + cks1 |= (BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FMAIN << R_PCLBUZ_CKS_CSEL_Pos); + #endif + R_PCLBUZ->CKS[1] = cks1; + R_PCLBUZ->CKS[1] |= (1U << R_PCLBUZ_CKS_PCLOE_Pos); + #endif + #endif +} + +#endif + +#if !BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET && !BSP_FEATURE_CGC_REGISTER_SET_B +static void bsp_prv_clock_set_hard_reset (void) +{ + /* Wait states in SRAMWTSC are set after hard reset. No change required here. */ + + /* Calculate the wait states for ROM */ + #if BSP_FEATURE_CGC_HAS_FLWT + #if BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS + + /* Do nothing. Default setting in FLWT is correct. */ + #elif BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS || \ + BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS == 0 + R_FCACHE->FLWT = BSP_PRV_ROM_ONE_WAIT_CYCLES; + #elif 0 == BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS || \ + (BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) + R_FCACHE->FLWT = BSP_PRV_ROM_TWO_WAIT_CYCLES; + #elif 0 == BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS || \ + (BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS) + R_FCACHE->FLWT = BSP_PRV_ROM_THREE_WAIT_CYCLES; + #elif 0 == BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS || \ + (BSP_STARTUP_ICLK_HZ <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS) + R_FCACHE->FLWT = BSP_PRV_ROM_FOUR_WAIT_CYCLES; + #else + R_FCACHE->FLWT = BSP_PRV_ROM_FIVE_WAIT_CYCLES; + #endif + #endif + + #if BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + #if BSP_STARTUP_ICLK_HZ > BSP_PRV_MEMWAIT_MAX_ZERO_WAIT_FREQ + #if ((BSP_STARTUP_ICLK_HZ > BSP_PRV_MEMWAIT_MAX_ONE_WAIT_FREQ) && \ + (BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES & R_SYSTEM_MEMWAIT_MEMWAIT_Msk)) + + /* The MCU must be in high speed mode to set wait states to 2. High speed mode is the default out of reset. */ + R_SYSTEM->MEMWAIT = BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES; + #else + R_SYSTEM->MEMWAIT = BSP_PRV_MEMWAIT_ONE_WAIT_CYCLES; + #endif + #endif + #endif + + #if BSP_FEATURE_CGC_HAS_FLDWAITR && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + #if BSP_STARTUP_ICLK_HZ > BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ + + /* The MCU must be in high speed mode to set wait states to 2. High speed mode is the default out of reset. */ + BSP_PRV_FLDWAITR_REG_ACCESS = BSP_PRV_FLDWAITR_TWO_WAIT_CYCLES; + #endif + #endif + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* Clear the PFB before doing any clock changes according to Frequency Change Procedure. */ + bsp_prv_clear_pfb(); + #endif + + /* In order to avoid a system clock (momentarily) higher than expected, the order of switching the clock and + * dividers must be so that the frequency of the clock goes lower, instead of higher, before being correct. */ + + /* MOCO is the source clock after reset. If the new source clock is faster than the current source clock, + * then set the clock dividers before switching to the new source clock. */ + #if BSP_MOCO_FREQ_HZ <= BSP_STARTUP_SOURCE_CLOCK_HZ + #if BSP_FEATURE_CGC_HAS_CPUCLK + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* New source clock will be faster so set wait state frequency before changing clock frequency + * according to Frequency Change Procedure. */ + bsp_prv_set_wait_state_frequency(BSP_STARTUP_MRICLK_HZ, BSP_STARTUP_FCLK_HZ); + #endif + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE && (BSP_STARTUP_CPUCLK_HZ >= BSP_MAX_CLOCK_CHANGE_THRESHOLD) && \ + (0 == BSP_MCU_GROUP_RA8_GEN2) + + /* If the requested ICLK divider is greater than or equal to the current ICLK divider, then writing to + * SCKDIVCR first will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + #if BSP_CFG_ICLK_DIV == BSP_CFG_CPUCLK_DIV + + /* If dividers are equal, bump both down 1 notch. + * /1 and /2 are the only possible options. */ + #if BSP_CFG_CPUCLK_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + R_SYSTEM->SCKDIVCR = (BSP_PRV_STARTUP_SCKDIVCR & ~(R_SYSTEM_SCKDIVCR_ICK_Msk)) | + (BSP_CLOCKS_SYS_CLOCK_DIV_2 << R_SYSTEM_SCKDIVCR_ICK_Pos); + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_2; + #else + R_SYSTEM->SCKDIVCR = (BSP_PRV_STARTUP_SCKDIVCR & ~(R_SYSTEM_SCKDIVCR_ICK_Msk)) | + (BSP_CLOCKS_SYS_CLOCK_DIV_4 << R_SYSTEM_SCKDIVCR_ICK_Pos); + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_4; + #endif + #else + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + + #if BSP_CFG_CPUCLK_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + + /* Determine what the other dividers are using and stay aligned with that. */ + R_SYSTEM->SCKDIVCR2 = (BSP_CFG_ICLK_DIV & 0x8) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + #else + + /* If not /1, can just add 1 to it. */ + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2 + 1; + #endif + #endif + + /* Set the system source clock */ + R_SYSTEM->SCKSCR = BSP_CFG_CLOCK_SOURCE; + + /* Wait for settling delay. */ + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + + /* Continue and set clock to actual target speed. */ + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2; + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + + /* Wait for settling delay. */ + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + #else + #if BSP_PRV_ICLK_DIV_VALUE >= BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_FEATURE_CGC_ICLK_DIV_RESET) + + /* If the requested ICLK divider is greater than or equal to the current ICLK divider, then writing to + * SCKDIVCR first will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2; + #else + + /* If the requested ICLK divider is less than the current ICLK divider, then writing to SCKDIVCR2 first + * will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2; + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + #endif + #endif + #else + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + #endif + #endif + + /* Set the system source clock */ + R_SYSTEM->SCKSCR = BSP_CFG_CLOCK_SOURCE; + + #if BSP_MCU_GROUP_RA8_GEN2 && BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE && \ + (BSP_CLOCKS_SOURCE_CLOCK_PLL1P == BSP_CFG_CLOCK_SOURCE) + + /* Wait for settling delay. */ + SystemCoreClockUpdate(); + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + + /* MOCO is the source clock after reset. If the new source clock is slower than the current source clock, + * then set the clock dividers after switching to the new source clock. */ + #if BSP_MOCO_FREQ_HZ > BSP_STARTUP_SOURCE_CLOCK_HZ + #if BSP_FEATURE_CGC_HAS_CPUCLK + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* New source clock will be slower so set wait state frequency after changing clock frequency according to Frequency Change Procedure. */ + bsp_prv_set_wait_state_frequency(BSP_STARTUP_MRICLK_HZ, BSP_STARTUP_FCLK_HZ); + #endif + #if BSP_PRV_ICLK_DIV_VALUE >= BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_FEATURE_CGC_ICLK_DIV_RESET) + + /* If the requested ICLK divider is greater than or equal to the current ICLK divider, then writing to + * SCKDIVCR first will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2; + #else + + /* If the requested ICLK divider is less than the current ICLK divider, then writing to SCKDIVCR2 first + * will always satisfy the constraint: CPUCLK frequency >= ICLK frequency. */ + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2; + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + #endif + #else + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + #endif + #endif + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + bsp_prv_set_pfb(); + #endif + + /* Update the CMSIS core clock variable so that it reflects the new ICLK frequency. */ + SystemCoreClockUpdate(); + + /* Clocks are now at requested frequencies. */ + + /* Adjust the MCU specific wait state soon after the system clock is set, if the system clock frequency to be + * set is lower than previous. */ + #if BSP_FEATURE_CGC_HAS_SRAMWTSC + #if BSP_FEATURE_CGC_HAS_SRAMPRCR2 == 1 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_PRV_SRAM_WAIT_CYCLES; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_UNLOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; + #endif + + /* Execute data memory barrier before and after setting the wait states, See Section 50.4.2 in the RA8M1 + * manual R01UH0994EJ0100 */ + __DMB(); + R_SRAM->SRAMWTSC = BSP_PRV_SRAM_WAIT_CYCLES; + __DMB(); + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_LOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif + #endif + #endif + + /* ROM wait states are 0 by default. No change required here. */ +} + +#endif + +/*******************************************************************************************************************//** + * Initializes variable to store system clock frequencies. + **********************************************************************************************************************/ +#if BSP_TZ_NONSECURE_BUILD || BSP_SECONDARY_CORE_BUILD +void bsp_clock_freq_var_init (void) +#else +static void bsp_clock_freq_var_init (void) +#endif +{ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_HOCO] = BSP_HOCO_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MOCO] = BSP_MOCO_FREQ_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_LOCO] = BSP_LOCO_FREQ_HZ; +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC] = BSP_CFG_XTAL_HZ; +#else + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC] = 0U; +#endif +#if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK] = BSP_SUBCLOCK_FREQ_HZ; +#else + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK] = 0U; +#endif +#if BSP_PRV_PLL_SUPPORTED + #if BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_CLOCK_SOURCE + #if (3U != BSP_FEATURE_CGC_PLLCCR_TYPE) && (6U != BSP_FEATURE_CGC_PLLCCR_TYPE) + + /* The PLL Is the startup clock. */ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_STARTUP_SOURCE_CLOCK_HZ; + #else + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_CFG_PLL1P_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1Q] = BSP_CFG_PLL1Q_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1R] = BSP_CFG_PLL1R_FREQUENCY_HZ; + #endif + #else + + /* The PLL value will be calculated at initialization. */ + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_CFG_XTAL_HZ; + #endif +#endif + +#if BSP_TZ_NONSECURE_BUILD && BSP_CFG_CLOCKS_SECURE == 1 + + /* If the CGC is secure and this is a non secure project, register a callback for getting clock settings. */ + R_BSP_ClockUpdateCallbackSet(g_bsp_clock_update_callback, &g_callback_memory); +#endif + + /* Update PLL Clock Frequency based on BSP Configuration. */ +#if BSP_PRV_PLL_SUPPORTED && BSP_CLOCKS_SOURCE_CLOCK_PLL != BSP_CFG_CLOCK_SOURCE && BSP_PRV_PLL_USED + #if (1U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (5U == BSP_FEATURE_CGC_PLLCCR_TYPE) + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = + ((g_clock_freq[BSP_CFG_PLL_SOURCE] * (BSP_CFG_PLL_MUL + 1U)) >> 1U) / + (BSP_CFG_PLL_DIV + 1U); + #elif (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = BSP_CFG_PLL1P_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1Q] = BSP_CFG_PLL1Q_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL1R] = BSP_CFG_PLL1R_FREQUENCY_HZ; + #elif (4U == BSP_FEATURE_CGC_PLLCCR_TYPE) + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = (g_clock_freq[BSP_CFG_PLL_SOURCE] * (BSP_CFG_PLL_MUL + 1U)) >> + 1U; + #else + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL] = + ((g_clock_freq[BSP_CFG_PLL_SOURCE] * (BSP_CFG_PLL_MUL + 1U)) >> 1U) >> + BSP_CFG_PLL_DIV; + #endif +#endif + + /* Update PLL2 Clock Frequency based on BSP Configuration. */ +#if BSP_PRV_PLL2_SUPPORTED && BSP_PRV_PLL2_USED + #if (1U == BSP_FEATURE_CGC_PLLCCR_TYPE) + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2] = + ((g_clock_freq[BSP_CFG_PLL2_SOURCE] * (BSP_CFG_PLL2_MUL + 1U)) >> 1U) / + (BSP_CFG_PLL2_DIV + 1U); + #elif (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2] = BSP_CFG_PLL2P_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2Q] = BSP_CFG_PLL2Q_FREQUENCY_HZ; + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2R] = BSP_CFG_PLL2R_FREQUENCY_HZ; + #else + g_clock_freq[BSP_CLOCKS_SOURCE_CLOCK_PLL2] = + ((g_clock_freq[BSP_CFG_PLL2_SOURCE] * (BSP_CFG_PLL2_MUL + 1U)) >> 1U) >> BSP_CFG_PLL2_DIV; + #endif +#endif + + /* The SystemCoreClock needs to be updated before calling R_BSP_SoftwareDelay. */ + SystemCoreClockUpdate(); +} + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + +/* + * If the clock registers are not guaranteed to be set to their value after reset (Ie. the application is executing after a bootloader), + * then the current state of the registers must be taken into consideration before writing the clock configuration. + * + * The HOCO must be stopped in the following situations: + * - The application configures the HOCO to be stopped. + * - The application enables the FLL, but the HOCO is already running. In order to enable the FLL, the HOCO must be stopped. + * The PLL must be stopped in the following situations: + * - The application configures the PLL to be stopped. + * - The application configures settings that are different than the current settings, but the PLL is already running. In order to + * write new PLL settings, the PLL must be stopped. + * - The HOCO is the PLL source clock and the HOCO is being stopped. + * The PLL2 must be stopped in the following situations: + * - The application configures the PLL2 to be stopped. + * - The application configures settings that are different than the current settings, but the PLL2 is already running. In order to + * write new PLL2 settings, the PLL2 must be stopped. + * - The HOCO is the PLL2 source clock and the HOCO is being stopped. + * + * If the HOCO or PLL are being used as the system clock source and they need to be stopped, then the system clock source needs to be switched + * to the default system clock source before the current system clock source is disabled. + */ +void bsp_soft_reset_prepare (void) +{ + bool stop_hoco = false; + #if BSP_PRV_PLL_SUPPORTED + bool stop_pll = false; + #endif + #if BSP_PRV_PLL2_SUPPORTED + bool stop_pll2 = false; + #endif + + #if BSP_PRV_HOCO_USE_FLL || !BSP_PRV_HOCO_USED + #if BSP_PRV_HOCO_USE_FLL + + /* Determine if the FLL needs to be enabled. */ + bool enable_fll = (0 == R_SYSTEM->FLLCR1 && BSP_PRV_HOCO_USE_FLL); + #else + bool enable_fll = false; + #endif + + /* If the HOCO is already enabled and either the FLL needs to be enabled or the HOCO is not used, then stop the HOCO. */ + if ((0 == R_SYSTEM->HOCOCR) && (enable_fll || !BSP_PRV_HOCO_USED)) + { + stop_hoco = true; + } + #endif + + #if BSP_PRV_PLL_SUPPORTED + if (0 == R_SYSTEM->PLLCR) + { + /* + * If any of the following conditions are true, then the PLL needs to be stopped: + * - The PLL is not used + * - The PLL settings need to be changed + * - The HOCO is selected as the PLL clock source and the HOCO needs to be stopped + * - Note that PLL type 2 does not support running off of the HOCO + */ + #if BSP_PRV_PLL_USED + #if (3 == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6 == BSP_FEATURE_CGC_PLLCCR_TYPE) + if ((BSP_PRV_PLLCCR != R_SYSTEM->PLLCCR) || (BSP_PRV_PLLCCR2 != R_SYSTEM->PLLCCR2) || + (stop_hoco && (1 == R_SYSTEM->PLLCCR_b.PLSRCSEL))) + #elif 2 == BSP_FEATURE_CGC_PLLCCR_TYPE + if (BSP_PRV_PLLCCR != R_SYSTEM->PLLCCR2) + #else + if ((BSP_PRV_PLLCCR != R_SYSTEM->PLLCCR) || (stop_hoco && (1 == R_SYSTEM->PLLCCR_b.PLSRCSEL))) + #endif + #endif + { + stop_pll = true; + } + } + #endif + + #if BSP_PRV_PLL2_SUPPORTED + if (0 == R_SYSTEM->PLL2CR) + { + /* + * If any of the following conditions are true, then the PLL2 needs to be stopped: + * - The PLL2 is not used + * - The PLL2 settings need to be changed + * - The HOCO is selected as the PLL2 clock source and the HOCO needs to be stopped + * - Note that PLL type 2 does not support running off of the HOCO + */ + #if BSP_PRV_PLL2_USED + #if (3 == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6 == BSP_FEATURE_CGC_PLLCCR_TYPE) + if ((BSP_PRV_PLL2CCR != R_SYSTEM->PLL2CCR) || (BSP_PRV_PLL2CCR2 != R_SYSTEM->PLL2CCR2) || + (stop_hoco && (1 == R_SYSTEM->PLL2CCR_b.PL2SRCSEL))) + #else + if ((BSP_PRV_PLL2CCR != R_SYSTEM->PLL2CCR) || (stop_hoco && (1 == R_SYSTEM->PLL2CCR_b.PL2SRCSEL))) + #endif + #endif + { + stop_pll2 = true; + } + } + #endif + + uint8_t sckscr = R_SYSTEM->SCKSCR; + + /* If the System Clock source needs to be stopped, then switch to the MOCO. */ + #if BSP_PRV_PLL_SUPPORTED + if ((stop_hoco && (BSP_CLOCKS_SOURCE_CLOCK_HOCO == sckscr)) || + (stop_pll && (BSP_CLOCKS_SOURCE_CLOCK_PLL == sckscr))) + #else + if (stop_hoco && (BSP_CLOCKS_SOURCE_CLOCK_HOCO == sckscr)) + #endif + { + bsp_prv_clock_set(BSP_FEATURE_CGC_STARTUP_SCKSCR, + BSP_FEATURE_CGC_STARTUP_SCKDIVCR, + BSP_FEATURE_CGC_STARTUP_SCKDIVCR2); + } + + /* Disable the oscillators so that the application can write the new clock configuration. */ + + #if BSP_PRV_PLL_SUPPORTED + if (stop_pll) + { + R_SYSTEM->PLLCR = 1; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.PLLSF, 0); + } + #endif + + #if BSP_PRV_PLL2_SUPPORTED + if (stop_pll2) + { + R_SYSTEM->PLL2CR = 1; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.PLL2SF, 0); + } + #endif + + if (stop_hoco) + { + R_SYSTEM->HOCOCR = 1; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.HOCOSF, 0); + } +} + + #endif +#else + +/*******************************************************************************************************************//** + * Initializes CMC and OSMC registers according to the BSP configuration. + **********************************************************************************************************************/ +void bsp_prv_cmc_init (void) +{ + /* The CMC register can be written only once after release from the reset state. If clock registers not reset + * values during startup, assume CMC register has already been set appropriately. */ + uint8_t cmc_reg = 0x00U; + + /* Set main clock oscillator drive capability */ + #if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + cmc_reg |= BSP_PRV_CMC_MOSC; + #endif + + /* Set sub-clock oscillator drive capability and pin switching */ + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + cmc_reg |= BSP_PRV_CMC_SOSC; + #endif + + R_SYSTEM->CMC = cmc_reg; + + #if (BSP_CFG_FSXP_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + uint8_t osmc = R_SYSTEM->OSMC; + + if (BSP_PRV_OSMC != osmc) + { + /* Stop RTC counter operation to update the OSMC register. */ + BSP_MSTP_REG_FSP_IP_RTC(0) &= ~BSP_MSTP_BIT_FSP_IP_RTC(0); + FSP_REGISTER_READ(BSP_MSTP_REG_FSP_IP_RTC(0)); + R_RTC_C->RTCC0_b.RTCE = 0U; + BSP_MSTP_REG_FSP_IP_RTC(0) |= BSP_MSTP_BIT_FSP_IP_RTC(0); + FSP_REGISTER_READ(BSP_MSTP_REG_FSP_IP_RTC(0)); + + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + if (0U == osmc) + { + /* Current Subsystem Clock (FSXP) source is SOSC. */ + if (0U == R_SYSTEM->SOSCCR) + { + /* Stop the Sub-Clock Oscillator to update the OSMC register. */ + R_SYSTEM->SOSCCR = 1U; + + /* Allow a stop interval of at least 5 SOSC clock cycles before restarting Sub-Clock Oscillator. */ + R_BSP_SoftwareDelay(BSP_PRV_SUBCLOCK_STOP_INTERVAL_US, BSP_DELAY_UNITS_MICROSECONDS); + + /* When changing the value of the SOSTP bit, only execute subsequent + * instructions after reading the bit to check that the value is updated. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOSCCR, 1U); + } + } + #endif + + R_SYSTEM->OSMC = BSP_PRV_OSMC; + } + #endif +} + +/*********************************************************************************************************************** + * Changes the operating speed in FLMODE. Assumes the LPM registers are unlocked in PRCR. + * + * @param[in] operating_mode Desired operating mode, must be one of the BSP_PRV_OPERATING_MODE_* macros, cannot be + * BSP_PRV_OPERATING_MODE_SUBOSC_SPEED + **********************************************************************************************************************/ +static void bsp_prv_operating_mode_flmode_set (uint8_t operating_mode) +{ + if (operating_mode != R_FACI_LP->FLMODE_b.MODE) + { + /* Enable FLMWRP.FLMWEN bit to before rewrite to FLMODE register */ + R_FACI_LP->FLMWRP_b.FLMWEN = 0x1U; + + if ((BSP_PRV_OPERATING_MODE_MIDDLE_SPEED != operating_mode) && + (BSP_PRV_OPERATING_MODE_MIDDLE_SPEED != R_FACI_LP->FLMODE_b.MODE)) + { + /* Set flash operating mode to middle-speed mode first */ + R_FACI_LP->FLMODE = (uint8_t) (BSP_PRV_OPERATING_MODE_MIDDLE_SPEED << R_FACI_LP_FLMODE_MODE_Pos); + } + + /* Set flash operating mode */ + R_FACI_LP->FLMODE = (uint8_t) (operating_mode << R_FACI_LP_FLMODE_MODE_Pos); + + /* Disable FLMWRP.FLMWEN bit to after rewrite to FLMODE register */ + R_FACI_LP->FLMWRP_b.FLMWEN = 0x0U; + } +} + +#endif + +/*******************************************************************************************************************//** + * Initializes system clocks. Makes no assumptions about current register settings. + **********************************************************************************************************************/ +void bsp_clock_init (void) +{ + /* Unlock CGC and LPM protection registers. */ +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SYSTEM->PRCR_NS = (uint16_t) BSP_PRV_PRCR_UNLOCK; +#else + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_UNLOCK; +#endif + +#if BSP_FEATURE_BSP_FLASH_CACHE || defined(R_CACHE) + #if !BSP_CFG_USE_LOW_VOLTAGE_MODE && BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + + /* Disable flash cache before modifying MEMWAIT, SOPCCR, or OPCCR. */ + R_BSP_FlashCacheDisable(); + #else + + /* Do not enable CM33 C-Cache for secondary core TrustZone projects because of limitations listed in + * RA8P1 UM 2.16.5.3 Restrictions Relating to Security Attribution of C-Cache and S-Cache */ + #if !((BSP_FEATURE_BSP_CODE_CACHE_VERSION == 2) && (BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD)) + + /* Enable the flash cache and don't disable it while running from flash. On these MCUs, the flash cache does not + * need to be disabled when adjusting the operating power mode. */ + R_BSP_FlashCacheEnable(); + #endif + #endif +#endif + +#if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER + + /* Enable the flash prefetch buffer. */ + R_FACI_LP->PFBER = 1; +#endif + + bsp_clock_freq_var_init(); + +#if BSP_FEATURE_CGC_REGISTER_SET_B + bsp_prv_cmc_init(); +#else + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + + /* Transition to an intermediate clock configuration in order to prepare for writing the new clock configuration. */ + bsp_soft_reset_prepare(); + #endif +#endif + +#if BSP_CLOCK_CFG_MAIN_OSC_POPULATED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + + /* Update the main oscillator drive, source, and wait states if the main oscillator is stopped. If the main + * oscillator is running, the drive, source, and wait states are assumed to be already set appropriately. */ + if (R_SYSTEM->MOSCCR) + { + #if BSP_FEATURE_CGC_REGISTER_SET_B + + /* Set the main oscillator wait time. */ + R_SYSTEM->OSTS = BSP_CLOCK_CFG_MAIN_OSC_WAIT; + #else + + /* Don't write to MOSCWTCR unless MOSTP is 1 and MOSCSF = 0. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.MOSCSF, 0U); + + /* Configure main oscillator drive. */ + R_SYSTEM->MOMCR = BSP_PRV_MOMCR; + + /* Set the main oscillator wait time. */ + R_SYSTEM->MOSCWTCR = (uint8_t) BSP_CLOCK_CFG_MAIN_OSC_WAIT; + #endif + } + + #else + #if BSP_FEATURE_CGC_REGISTER_SET_B + + /* Set the main oscillator wait time. */ + R_SYSTEM->OSTS = BSP_CLOCK_CFG_MAIN_OSC_WAIT; + #else + + /* Configure main oscillator drive. */ + R_SYSTEM->MOMCR = BSP_PRV_MOMCR; + + /* Set the stabilization time for XTAL. */ + R_SYSTEM->MOSCWTCR = (uint8_t) BSP_CLOCK_CFG_MAIN_OSC_WAIT; + #endif + #endif +#endif + + /* Initialize the sub-clock according to the BSP configuration. */ + bsp_prv_sosc_init(); + +#if BSP_FEATURE_CGC_HAS_HOCOWTCR + #if BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY + + /* These MCUs only require writes to HOCOWTCR if HOCO is set to 64 MHz. */ + #if 64000000 == BSP_HOCO_HZ + #if BSP_CFG_USE_LOW_VOLTAGE_MODE + + /* Wait for HOCO to stabilize before writing to HOCOWTCR. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.HOCOSF, 1U); + #else + + /* HOCO is assumed to be stable because these MCUs also require the HOCO to be stable before changing the operating + * power control mode. */ + #endif + R_SYSTEM->HOCOWTCR = BSP_FEATURE_CGC_HOCOWTCR_VALUE; + #endif + #else + + /* These MCUs require HOCOWTCR to be set to the maximum value except in snooze mode. There is no restriction to + * writing this register. */ + R_SYSTEM->HOCOWTCR = BSP_FEATURE_CGC_HOCOWTCR_VALUE; + #endif +#endif + +#if !BSP_CFG_USE_LOW_VOLTAGE_MODE + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + + /* Switch to high-speed to prevent any issues with the subsequent clock configurations. */ + bsp_prv_operating_mode_set(BSP_PRV_OPERATING_MODE_HIGH_SPEED); + #elif BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ > 0U + + /* MCUs that support low voltage mode start up in low voltage mode. */ + bsp_prv_operating_mode_opccr_set(BSP_PRV_OPERATING_MODE_HIGH_SPEED); + + #if !BSP_PRV_HOCO_USED + + /* HOCO must be running during startup in low voltage mode. If HOCO is not used, turn it off after exiting low + * voltage mode. */ + R_SYSTEM->HOCOCR = 1U; + #endif + #elif BSP_FEATURE_CGC_STARTUP_OPCCR_MODE != BSP_PRV_OPERATING_MODE_HIGH_SPEED + + /* Some MCUs do not start in high speed mode. */ + #if !BSP_FEATURE_CGC_REGISTER_SET_B + bsp_prv_operating_mode_opccr_set(BSP_PRV_OPERATING_MODE_HIGH_SPEED); + #else + bsp_prv_operating_mode_set(BSP_PRV_OPERATING_MODE_HIGH_SPEED); + #endif + #endif +#endif + + /* The FLL function can only be used when the subclock is running. */ +#if BSP_PRV_HOCO_USE_FLL + + /* If FLL is to be used configure FLLCR1 and FLLCR2 before starting HOCO. */ + R_SYSTEM->FLLCR2 = BSP_PRV_FLL_FLLCR2; + R_SYSTEM->FLLCR1 = 1U; +#endif + + /* Start all clocks used by other clocks first. */ +#if BSP_PRV_HOCO_USED + R_SYSTEM->HOCOCR = 0U; + + #if BSP_PRV_HOCO_USE_FLL && (BSP_CLOCKS_SOURCE_CLOCK_HOCO != BSP_CFG_PLL_SOURCE) + + /* If FLL is enabled, wait for the FLL stabilization delay (1.8 ms) */ + R_BSP_SoftwareDelay(BSP_PRV_FLL_STABILIZATION_TIME_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + + #if BSP_PRV_STABILIZE_HOCO + + /* Wait for HOCO to stabilize. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.HOCOSF, 1U); + #endif +#endif +#if BSP_PRV_MOCO_USED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + + /* If the MOCO is not running, start it and wait for it to stabilize using a software delay. */ + if (0U != R_SYSTEM->MOCOCR) + { + R_SYSTEM->MOCOCR = 0U; + #if BSP_PRV_STABILIZE_MOCO + R_BSP_SoftwareDelay(BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + } + + #else + #if BSP_FEATURE_CGC_REGISTER_SET_B + R_SYSTEM->MOCOCR = 0U; + #if BSP_PRV_STABILIZE_MOCO + R_BSP_SoftwareDelay(BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + #endif + #endif +#endif +#if BSP_PRV_LOCO_USED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + + /* If the LOCO is not running, start it and wait for it to stabilize using a software delay. */ + if (0U != R_SYSTEM->LOCOCR) + { + R_SYSTEM->LOCOCR = 0U; + #if BSP_PRV_STABILIZE_LOCO + R_BSP_SoftwareDelay(BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + } + + #else + R_SYSTEM->LOCOCR = 0U; + #if BSP_PRV_STABILIZE_LOCO + R_BSP_SoftwareDelay(BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US, BSP_DELAY_UNITS_MICROSECONDS); + #endif + #endif +#endif +#if BSP_PRV_MAIN_OSC_USED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + if (R_SYSTEM->MOSCCR) + #endif + { + R_SYSTEM->MOSCCR = 0U; + + #if BSP_PRV_STABILIZE_MAIN_OSC + + /* Wait for main oscillator to stabilize. */ + #if BSP_FEATURE_CGC_REGISTER_SET_B + #if !BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE + + /* + * The main oscillation stabilization time countered by OSTC + * 0x80: 2^8/fx min + * 0xC0: 2^9/fx min + * 0xE0: 2^10/fx min + * 0xF0: 2^11/fx min + * 0xF8: 2^13/fx min + * 0xFC: 2^15/fx min + * 0xFE: 2^17/fx min + * 0xFF: 2^18/fx min + * Note: The oscillation stabilization time counter is not applied for External clock input. + */ + uint8_t mainosc_stable_value = (uint8_t) ~(BSP_PRV_OSTC_OFFSET >> BSP_CLOCK_CFG_MAIN_OSC_WAIT); + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSTC, mainosc_stable_value); + #endif + #else + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.MOSCSF, 1U); + #endif + #endif + } +#endif + + /* Start clocks that require other clocks. At this point, all dependent clocks are running and stable if needed. */ + +#if BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED + #if BSP_FEATURE_CGC_HAS_PLL2 && BSP_CFG_PLL2_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + if (R_SYSTEM->PLL2CR) + #endif + { + R_SYSTEM->PLL2CCR = BSP_PRV_PLL2CCR; + #if (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + R_SYSTEM->PLL2CCR2 = BSP_PRV_PLL2CCR2; + #endif + + /* Start PLL2. */ + R_SYSTEM->PLL2CR = 0U; + } + #endif /* BSP_FEATURE_CGC_HAS_PLL2 && BSP_CFG_PLL2_ENABLE */ +#endif + +#if BSP_PRV_PLL_SUPPORTED && BSP_PRV_PLL_USED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + if (R_SYSTEM->PLLCR) + #endif + { + #if (1U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (4U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (5U == BSP_FEATURE_CGC_PLLCCR_TYPE) + R_SYSTEM->PLLCCR = (uint16_t) BSP_PRV_PLLCCR; + #elif 2U == BSP_FEATURE_CGC_PLLCCR_TYPE + R_SYSTEM->PLLCCR2 = (uint8_t) BSP_PRV_PLLCCR; + #elif (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if 6U == BSP_FEATURE_CGC_PLLCCR_TYPE + R_SYSTEM->PLLCCR = BSP_PRV_PLLCCR; + #else + R_SYSTEM->PLLCCR = (uint16_t) BSP_PRV_PLLCCR; + #endif + R_SYSTEM->PLLCCR2 = (uint16_t) BSP_PRV_PLLCCR2; + #endif + + #if BSP_FEATURE_CGC_PLLCCR_WAIT_US > 0 + + /* This loop is provided to ensure at least 1 us passes between setting PLLMUL and clearing PLLSTP on some + * MCUs (see PLLSTP notes in Section 8.2.4 "PLL Control Register (PLLCR)" of the RA4M1 manual R01UH0887EJ0100). + * Five loops are needed here to ensure the most efficient path takes at least 1 us from the setting of + * PLLMUL to the clearing of PLLSTP. HOCO is the fastest clock we can be using here since PLL cannot be running + * while setting PLLCCR. */ + bsp_prv_software_delay_loop(BSP_DELAY_LOOPS_CALCULATE(BSP_PRV_MAX_HOCO_CYCLES_PER_US)); + #endif + + #if BSP_MCU_GROUP_RA8_GEN2 + + /* Always set not high VSCR_1 (non-default), change before enabling PLL. + * - Note this will consume more power than necessary for certain configuraitons. See User Manual for more infomration. */ + R_SYSTEM->VSCR_b.VSCM = 0x1U; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->VSCR_b.VSCMTSF, 0U); + #endif + + R_SYSTEM->PLLCR = 0U; + + #if BSP_PRV_STABILIZE_PLL + + /* Wait for PLL to stabilize. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OSCSF_b.PLLSF, 1U); + #endif + } +#endif + + /* Set source clock and dividers. */ +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + #if BSP_TZ_SECURE_BUILD + + /* In case of soft reset, make sure callback pointer is NULL initially. */ + g_bsp_clock_update_callback = NULL; + #endif + + #if BSP_FEATURE_CGC_HAS_CPUCLK + bsp_prv_clock_set(BSP_CFG_CLOCK_SOURCE, BSP_PRV_STARTUP_SCKDIVCR, BSP_PRV_STARTUP_SCKDIVCR2); + #else + bsp_prv_clock_set(BSP_CFG_CLOCK_SOURCE, BSP_PRV_STARTUP_SCKDIVCR, 0); + #endif + #else + bsp_prv_clock_set_hard_reset(); + #endif +#else + #if (1U == BSP_PRV_CLKOUT_SOURCE_SET) + bsp_prv_clock_set(BSP_CFG_CLKOUT_SOURCE, BSP_CFG_HOCO_DIV, BSP_CFG_MOCO_DIV, BSP_CFG_XTAL_DIV); + #elif (2U == BSP_PRV_CLKOUT_SOURCE_SET) + bsp_prv_clock_set(BSP_CFG_CLKOUT1_SOURCE, BSP_CFG_HOCO_DIV, BSP_CFG_MOCO_DIV, BSP_CFG_XTAL_DIV); + #endif + bsp_prv_clock_set(BSP_CFG_CLOCK_SOURCE, BSP_CFG_HOCO_DIV, BSP_CFG_MOCO_DIV, BSP_CFG_XTAL_DIV); +#endif + + /* If the MCU can run in a lower power mode, apply the optimal operating speed mode. */ +#if !BSP_CFG_USE_LOW_VOLTAGE_MODE + #if BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_HIGH_SPEED + bsp_prv_operating_mode_set(BSP_PRV_STARTUP_OPERATING_MODE); + #endif +#endif + +#if defined(BSP_PRV_POWER_USE_DCDC) && (BSP_PRV_POWER_USE_DCDC == BSP_PRV_POWER_DCDC_STARTUP) && \ + (BSP_PRV_STARTUP_OPERATING_MODE <= BSP_PRV_OPERATING_MODE_MIDDLE_SPEED) + + /* Start DCDC as part of BSP startup when configured (BSP_CFG_DCDC_ENABLE == 2). */ + R_BSP_PowerModeSet(BSP_CFG_DCDC_VOLTAGE_RANGE); +#endif + + /* Need to start BCLKA before selecting which BCLK will be used. */ +#if defined(BSP_CFG_BCLKA_SOURCE) && (BSP_CFG_BCLKA_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->BCKACR, &R_SYSTEM->BCKADIVCR, BSP_CFG_BCLKA_DIV, BSP_CFG_BCLKA_SOURCE); +#endif + + /* Configure BCLK if it exists on the MCU. */ +#ifdef BSP_CFG_BCLK_OUTPUT + #if BSP_CFG_BCLK_OUTPUT > 0U + #ifdef BSP_CFG_EBCLKA_SEL + R_SYSTEM->BCKCR = (BSP_CFG_BCLK_OUTPUT - 1U) | (BSP_CFG_EBCLKA_SEL << R_SYSTEM_BCKCR_EBCKASEL_Pos); + #else + R_SYSTEM->BCKCR = BSP_CFG_BCLK_OUTPUT - 1U; + #endif + R_SYSTEM->EBCKOCR = 1U; + #else + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + R_SYSTEM->EBCKOCR = 0U; + #endif + #endif +#endif + + /* Configure SDRAM clock if it exists on the MCU. */ +#ifdef BSP_CFG_SDCLK_OUTPUT + R_SYSTEM->SDCKOCR = BSP_CFG_SDCLK_OUTPUT; +#endif + + /* Configure CLKOUT. */ +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_CLOCK_DISABLED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + R_SYSTEM->CKOCR = 0U; + #endif + #else + uint8_t ckocr = BSP_CFG_CLKOUT_SOURCE | (BSP_CFG_CLKOUT_DIV << BSP_PRV_CKOCR_CKODIV_BIT); + R_SYSTEM->CKOCR = ckocr; + ckocr |= (1U << BSP_PRV_CKOCR_CKOEN_BIT); + R_SYSTEM->CKOCR = ckocr; + #endif +#else + bsp_prv_clkout_set(); +#endif + +#if BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED + #if BSP_CFG_UCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + + /* If the USB clock has a divider setting in SCKDIVCR2. */ + #if BSP_FEATURE_BSP_SCKDIVCR2_HAS_USB_CLOCK_DIV + R_SYSTEM->SCKDIVCR2 = BSP_PRV_UCK_DIV << BSP_PRV_SCKDIVCR2_UCK_BIT; + #endif /* BSP_FEATURE_BSP_SCKDIVCR2_HAS_USB_CLOCK_DIV */ + + /* If there is a REQ bit in USBCKCR, then follow sequence from section 8.2.29 in RA6M4 hardware manual R01UH0890EJ0050. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ + + /* Request to change the USB Clock. */ + R_SYSTEM->USBCKCR_b.USBCKSREQ = 1; + + /* Wait for the clock to be stopped. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->USBCKCR_b.USBCKSRDY, 1U); + + #if BSP_FEATURE_BSP_HAS_USBCKDIVCR + + /* Write the settings. */ + R_SYSTEM->USBCKDIVCR = BSP_PRV_UCK_DIV; + #endif /* BSP_FEATURE_BSP_HAS_USBCKDIVCR */ + + /* Select the USB Clock without enabling it. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCLK_SOURCE | R_SYSTEM_USBCKCR_USBCKSREQ_Msk; + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL + + /* Some MCUs use an alternate register for selecting the USB clock source. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT + #if BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_UCLK_SOURCE + + /* Write to USBCKCR to select the PLL. */ + R_SYSTEM->USBCKCR_ALT = 0; + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_UCLK_SOURCE + + /* Write to USBCKCR to select the HOCO. */ + R_SYSTEM->USBCKCR_ALT = 1; + #endif + #else + + /* Select the USB Clock. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCLK_SOURCE; + #endif + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ + + /* Wait for the USB Clock to be started. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->USBCKCR_b.USBCKSRDY, 0U); + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ */ + #endif /* BSP_CFG_USB_ENABLE */ +#endif /* BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED */ + + /* Set the OCTASPI clock if it exists on the MCU (See section 8.2.30 of the RA6M4 hardware manual R01UH0890EJ0050). */ +#if BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK && BSP_CFG_OCTACLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + bsp_octaclk_settings_t octaclk_settings = + { + .source_clock = (bsp_clocks_source_t) BSP_CFG_OCTACLK_SOURCE, + .divider = (bsp_clocks_octaclk_div_t) BSP_CFG_OCTACLK_DIV + }; + R_BSP_OctaclkUpdate(&octaclk_settings); +#endif /* BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK && BSP_CFG_OCTASPI_CLOCK_ENABLE */ + + /* Set the CANFD clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_CANFD_CLOCK && (BSP_CFG_CANFDCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && \ + (BSP_CFG_CANFDCLK_SOURCE != BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + + bsp_peripheral_clock_set(&R_SYSTEM->CANFDCKCR, + &R_SYSTEM->CANFDCKDIVCR, + BSP_CFG_CANFDCLK_DIV, + BSP_CFG_CANFDCLK_SOURCE); +#endif + + /* Set the SCISPI clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_SCISPI_CLOCK && (BSP_CFG_SCISPICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->SCISPICKCR, + &R_SYSTEM->SCISPICKDIVCR, + BSP_CFG_SCISPICLK_DIV, + BSP_CFG_SCISPICLK_SOURCE); +#endif + + /* Set the SCI clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_SCI_CLOCK && (BSP_CFG_SCICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->SCICKCR, &R_SYSTEM->SCICKDIVCR, BSP_CFG_SCICLK_DIV, BSP_CFG_SCICLK_SOURCE); +#endif + + /* Set the SPI clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_SPI_CLOCK && (BSP_CFG_SPICLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->SPICKCR, &R_SYSTEM->SPICKDIVCR, BSP_CFG_SPICLK_DIV, BSP_CFG_SPICLK_SOURCE); +#endif + + /* Set the GPT clock if it exists on the MCU */ +#if BSP_PERIPHERAL_GPT_GTCLK_PRESENT && (BSP_CFG_GPTCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->GPTCKCR, &R_SYSTEM->GPTCKDIVCR, BSP_CFG_GPTCLK_DIV, BSP_CFG_GPTCLK_SOURCE); +#endif + + /* Set the IIC clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_IIC_CLOCK && (BSP_CFG_IICCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->IICCKCR, &R_SYSTEM->IICCKDIVCR, BSP_CFG_IICCLK_DIV, BSP_CFG_IICCLK_SOURCE); +#endif + + /* Set the CEC clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_CEC_CLOCK && (BSP_CFG_CECCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->CECCKCR, &R_SYSTEM->CECCKDIVCR, BSP_CFG_CECCLK_DIV, BSP_CFG_CECCLK_SOURCE); +#endif + + /* Set the I3C clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_I3C_CLOCK && (BSP_CFG_I3CCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->I3CCKCR, &R_SYSTEM->I3CCKDIVCR, BSP_CFG_I3CCLK_DIV, BSP_CFG_I3CCLK_SOURCE); +#endif + + /* Set the LCD clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_LCD_CLOCK && (BSP_CFG_LCDCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->LCDCKCR, &R_SYSTEM->LCDCKDIVCR, BSP_CFG_LCDCLK_DIV, BSP_CFG_LCDCLK_SOURCE); +#endif + + /* Set the USB-HS clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_USB60_CLOCK && (BSP_CFG_USB60CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->USB60CKCR, + &R_SYSTEM->USB60CKDIVCR, + BSP_CFG_USB60CLK_DIV, + BSP_CFG_USB60CLK_SOURCE); +#endif + + /* Set the ADC clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_ADC_CLOCK && (BSP_CFG_ADCCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->ADCCKCR, &R_SYSTEM->ADCCKDIVCR, BSP_CFG_ADCCLK_DIV, BSP_CFG_ADCCLK_SOURCE); +#endif + + /* Set the ESW clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_ESW_CLOCK && (BSP_CFG_ESWCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->ESWCKCR, &R_SYSTEM->ESWCKDIVCR, BSP_CFG_ESWCLK_DIV, BSP_CFG_ESWCLK_SOURCE); +#endif + + /* Set the ESWPHY clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_ESWPHY_CLOCK && (BSP_CFG_ESWPHYCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->ESWPCKCR, + &R_SYSTEM->ESWPCKDIVCR, + BSP_CFG_ESWPHYCLK_DIV, + BSP_CFG_ESWPHYCLK_SOURCE); +#endif + + /* Set the ETHPHY clock if it exists on the MCU */ +#if BSP_FEATURE_BSP_HAS_ETHPHY_CLOCK && (BSP_CFG_ETHPHYCLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->ETHPCKCR, + &R_SYSTEM->ETHPCKDIVCR, + BSP_CFG_ETHPHYCLK_DIV, + BSP_CFG_ETHPHYCLK_SOURCE); +#endif + +#if BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL0_CLOCK && \ + (BSP_CFG_EXTRA_PERIPHERAL0CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(BSP_PRV_EXTRA_PERIPHERAL0_CLOCK_CKCR, + BSP_PRV_EXTRA_PERIPHERAL0_CLOCK_CKDIVCR, + BSP_CFG_EXTRA_PERIPHERAL0CLK_DIV, + BSP_CFG_EXTRA_PERIPHERAL0CLK_SOURCE); +#endif + +#if BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL1_CLOCK && \ + (BSP_CFG_EXTRA_PERIPHERAL1CLK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(BSP_PRV_EXTRA_PERIPHERAL1_CLOCK_CKCR, + BSP_PRV_EXTRA_PERIPHERAL1_CLOCK_CKDIVCR, + BSP_CFG_EXTRA_PERIPHERAL1CLK_DIV, + BSP_CFG_EXTRA_PERIPHERAL1CLK_SOURCE); +#endif + + /* Set the SDADC clock if it exists on the MCU. */ +#if BSP_FEATURE_BSP_HAS_SDADC_CLOCK && (BSP_CFG_SDADC_CLOCK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + #if BSP_CFG_SDADC_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO + uint8_t sdadcckcr = 1U; + #elif BSP_CFG_SDADC_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_PLL + uint8_t sdadcckcr = 2U; + #else /* BSP_CLOCK_SOURCE_CLOCK_MOSC */ + uint8_t sdadcckcr = 0U; + #endif + + /* SDADC isn't controlled like the other peripheral clocks so we cannot use the generic setter. */ + R_SYSTEM->SDADCCKCR = sdadcckcr & R_SYSTEM_SDADCCKCR_SDADCCKSEL_Msk; +#endif + + /* Lock CGC and LPM protection registers. */ +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SYSTEM->PRCR_NS = (uint16_t) BSP_PRV_PRCR_LOCK; +#else + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_LOCK; +#endif + +#if (BSP_FEATURE_BSP_FLASH_CACHE || defined(R_CACHE)) && BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM + R_BSP_FlashCacheEnable(); +#endif +} + +#if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + +/*******************************************************************************************************************//** + * This function is called during SOSC stabilization when Sub-Clock oscillator is populated. + * This function is declared as a weak symbol higher up in this file because it is meant to be overridden by a user + * implemented version. One of the main uses for this function is to update the IWDT/WDT Refresh Register if an + * application starts IWDT/WDT automatically after reset. To use this function just copy this function into your own + * code and modify it to meet your needs. + * + * @param[in] delay_ms Stabilization Time for the clock. + **********************************************************************************************************************/ +void R_BSP_SubClockStabilizeWait (uint32_t delay_ms) +{ + /* Wait for clock to stabilize. */ + R_BSP_SoftwareDelay(delay_ms, BSP_DELAY_UNITS_MILLISECONDS); +} + +/*******************************************************************************************************************//** + * This function is called during SOSC registers initialization when Sub-Clock oscillator is populated. + * This function is declared as a weak symbol higher up in this file because it is meant to be overridden by a user + * implemented version. One of the main uses for this function is to skip waiting for stabilization time after reset. + * To use this function just copy this function into your own code and modify it to meet your needs. + * + * @param[in] delay_ms Stabilization Time for the clock. + **********************************************************************************************************************/ +void R_BSP_SubClockStabilizeWaitAfterReset (uint32_t delay_ms) +{ + #if (BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_CLOCK_SOURCE) || (BSP_PRV_HOCO_USE_FLL) + + /* Wait for clock to stabilize after reset. */ + R_BSP_SoftwareDelay(delay_ms, BSP_DELAY_UNITS_MILLISECONDS); + #else + FSP_PARAMETER_NOT_USED(delay_ms); + #endif +} + +#endif + +#if (BSP_PRV_HAS_ENABLED_PERIPHERAL_CLOCKS == 1U) + +/*******************************************************************************************************************//** + * Set the peripheral clock on the MCU + * + * @param[in] p_clk_ctrl_reg Pointer to peripheral clock control register + * @param[in] p_clk_div_reg Pointer to peripheral clock division control register + * @param[in] peripheral_clk_div Peripheral clock division + * @param[in] peripheral_clk_source Peripheral clock source + * + * @return The wait states for FLWT required after the clock change (or 0 if FLWT does not exist). + **********************************************************************************************************************/ +static void bsp_peripheral_clock_set (volatile uint8_t * p_clk_ctrl_reg, + volatile uint8_t * p_clk_div_reg, + uint8_t peripheral_clk_div, + uint8_t peripheral_clk_source) +{ + /* Request to stop the peripheral clock. */ + *p_clk_ctrl_reg |= (uint8_t) BSP_PRV_PERIPHERAL_CLK_REQ_BIT_MASK; + + /* Wait for the peripheral clock to stop. */ + FSP_HARDWARE_REGISTER_WAIT((uint8_t) ((*p_clk_ctrl_reg & BSP_PRV_PERIPHERAL_CLK_RDY_BIT_MASK) >> + BSP_PRV_PERIPHERAL_CLK_RDY_BIT_POS), + 1U); + + /* Select the peripheral clock divisor and source. */ + *p_clk_div_reg = peripheral_clk_div; + *p_clk_ctrl_reg = peripheral_clk_source | BSP_PRV_PERIPHERAL_CLK_REQ_BIT_MASK | + BSP_PRV_PERIPHERAL_CLK_RDY_BIT_MASK; + + /* Request to start the peripheral clock. */ + *p_clk_ctrl_reg &= (uint8_t) ~BSP_PRV_PERIPHERAL_CLK_REQ_BIT_MASK; + + /* Wait for the peripheral clock to start. */ + FSP_HARDWARE_REGISTER_WAIT((uint8_t) ((*p_clk_ctrl_reg & BSP_PRV_PERIPHERAL_CLK_RDY_BIT_MASK) >> + BSP_PRV_PERIPHERAL_CLK_RDY_BIT_POS), + 0U); +} + +#endif + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + +/*******************************************************************************************************************//** + * Increases the ROM and RAM wait state settings to the minimum required based on the requested clock change. + * + * @param[in] requested_freq_hz New core clock frequency after the clock change. + * + * @return The wait states for FLWT required after the clock change (or 0 if FLWT does not exist). + **********************************************************************************************************************/ +static uint8_t bsp_clock_set_prechange (uint32_t requested_freq_hz) +{ + uint8_t new_rom_wait_state = 0U; + + FSP_PARAMETER_NOT_USED(requested_freq_hz); + + #if BSP_FEATURE_CGC_HAS_SRAMWTSC + + /* Wait states for SRAM (SRAM0, SRAM1 and SRAM0 (DED)). */ + if (requested_freq_hz > BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS) + { + #if BSP_FEATURE_CGC_HAS_SRAMPRCR2 == 1 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_FEATURE_SRAM_SRAMWTSC_WAIT_CYCLE_ENABLE; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_UNLOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; + #endif + + /* Execute data memory barrier before and after setting the wait states, See Section 50.4.2 in the RA8M1 + * manual R01UH0994EJ0100 */ + __DMB(); + R_SRAM->SRAMWTSC = BSP_FEATURE_SRAM_SRAMWTSC_WAIT_CYCLE_ENABLE; + __DMB(); + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_LOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif + #endif + } + #endif + + #if BSP_FEATURE_CGC_HAS_FLWT + + /* Calculate the wait states for ROM */ + #if BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS == 0 + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; + } + else + { + new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; + } + + #elif BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS == 0 + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; + } + else + { + new_rom_wait_state = BSP_PRV_ROM_TWO_WAIT_CYCLES; + } + + #elif BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS == 0 + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_TWO_WAIT_CYCLES; + } + else + { + new_rom_wait_state = BSP_PRV_ROM_THREE_WAIT_CYCLES; + } + + #elif BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS == 0 + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_TWO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_THREE_WAIT_CYCLES; + } + else + { + new_rom_wait_state = BSP_PRV_ROM_FOUR_WAIT_CYCLES; + } + + #else + if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ZERO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_ONE_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_TWO_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_THREE_WAIT_CYCLES; + } + else if (requested_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS) + { + new_rom_wait_state = BSP_PRV_ROM_FOUR_WAIT_CYCLES; + } + else + { + new_rom_wait_state = BSP_PRV_ROM_FIVE_WAIT_CYCLES; + } + #endif + + /* If more wait states are required after the change, then set the wait states before changing the clock. */ + if (new_rom_wait_state > R_FCACHE->FLWT) + { + R_FCACHE->FLWT = new_rom_wait_state; + } + #endif + + #if BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + + /* Set the wait state to MEMWAIT */ + bsp_clock_set_memwait(requested_freq_hz); + #endif + + #if BSP_FEATURE_CGC_HAS_FLDWAITR && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + if (requested_freq_hz > BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ) + { + /* The MCU must be in high speed mode to set wait states to 2. The MCU should already be in high speed mode as + * a precondition to bsp_prv_clock_set. */ + BSP_PRV_FLDWAITR_REG_ACCESS = BSP_PRV_FLDWAITR_TWO_WAIT_CYCLES; + } + #endif + + return new_rom_wait_state; +} + +/*******************************************************************************************************************//** + * Decreases the ROM and RAM wait state settings to the minimum supported based on the applied clock change. + * + * @param[in] updated_freq_hz New clock frequency after clock change + * @param[in] new_rom_wait_state Optimal value for FLWT if it exists, 0 if FLWT does not exist on the MCU + **********************************************************************************************************************/ +static void bsp_clock_set_postchange (uint32_t updated_freq_hz, uint8_t new_rom_wait_state) +{ + /* These variables are unused for some MCUs. */ + FSP_PARAMETER_NOT_USED(new_rom_wait_state); + FSP_PARAMETER_NOT_USED(updated_freq_hz); + + #if BSP_FEATURE_CGC_HAS_SRAMWTSC + + /* Wait states for SRAM (SRAM0, SRAM1 and SRAM0 (DED)). */ + if (updated_freq_hz <= BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS) + { + #if BSP_FEATURE_CGC_HAS_SRAMPRCR2 == 1 + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_UNLOCK; + R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_WAIT_CYCLES_DISABLE; + R_SRAM->SRAMPRCR2 = BSP_PRV_SRAM_LOCK; + #else + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_UNLOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_UNLOCK; + #endif + + /* Execute data memory barrier before and after setting the wait states,See Section 50.4.2 in the RA8M1 + * manual R01UH0994EJ0100*/ + __DMB(); + R_SRAM->SRAMWTSC = BSP_PRV_SRAMWTSC_WAIT_CYCLES_DISABLE; + __DMB(); + + /* Devices with TrustZone version 2 have a separate non-secure register for SRAM register protection. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SRAM->SRAMPRCR_NS = BSP_PRV_SRAM_LOCK; + #else + R_SRAM->SRAMPRCR = BSP_PRV_SRAM_LOCK; + #endif + #endif + } + #endif + + #if BSP_FEATURE_CGC_HAS_FLWT + if (new_rom_wait_state != R_FCACHE->FLWT) + { + R_FCACHE->FLWT = new_rom_wait_state; + } + #endif + + #if BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + + /* Set the wait state to MEMWAIT */ + bsp_clock_set_memwait(updated_freq_hz); + #endif + + #if BSP_FEATURE_CGC_HAS_FLDWAITR && !BSP_PRV_CLOCK_SUPPLY_TYPE_B + if (updated_freq_hz <= BSP_PRV_FLDWAITR_MAX_ONE_WAIT_FREQ) + { + BSP_PRV_FLDWAITR_REG_ACCESS = BSP_PRV_FLDWAITR_ONE_WAIT_CYCLES; + } + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Set the wait state to MEMWAIT. + **********************************************************************************************************************/ +#if BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_PRV_CLOCK_SUPPLY_TYPE_B +static void bsp_clock_set_memwait (uint32_t updated_freq_hz) +{ + uint8_t memwait; + if ((updated_freq_hz > BSP_PRV_MEMWAIT_MAX_ONE_WAIT_FREQ) && + ((BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES & R_SYSTEM_MEMWAIT_MEMWAIT_Msk) != 0)) + { + /* The MCU must be in high speed mode to set wait states to 2. The MCU should already be in high speed mode as + * a precondition to bsp_prv_clock_set. */ + memwait = BSP_PRV_MEMWAIT_TWO_WAIT_CYCLES; + } + else if (updated_freq_hz > BSP_PRV_MEMWAIT_MAX_ZERO_WAIT_FREQ) + { + memwait = BSP_PRV_MEMWAIT_ONE_WAIT_CYCLES; + } + else + { + memwait = BSP_PRV_MEMWAIT_ZERO_WAIT_CYCLES; + } + + R_SYSTEM->MEMWAIT = memwait; +} + +#endif + +/*******************************************************************************************************************//** + * Initializes sub-clock according to the BSP configuration. + **********************************************************************************************************************/ +static void bsp_prv_sosc_init (void) +{ +#if BSP_FEATURE_CGC_HAS_SOSC + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + #if BSP_FEATURE_RTC_IS_IRTC + #if ((BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_CLOCK_SOURCE) || (BSP_PRV_HOCO_USE_FLL)) + + /* If sub-clock is used as system clock source or HOCO FLL source, wait for VRTC-domain become valid */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->VRTSR_b.VRTVLD, 1); + #else + + /* Check if VRTC-domain area is valid. */ + if (1U == R_SYSTEM->VRTSR_b.VRTVLD) + #endif + #endif + { + #if !BSP_FEATURE_CGC_REGISTER_SET_B + if (R_SYSTEM->SOSCCR || (BSP_CLOCK_CFG_SUBCLOCK_DRIVE != R_SYSTEM->SOMCR_b.SODRV)) + { + /* If Sub-Clock Oscillator is started at reset, stop it before configuring the subclock drive. */ + if (0U == R_SYSTEM->SOSCCR) + { + /* Stop the Sub-Clock Oscillator to update the SOMCR register. */ + R_SYSTEM->SOSCCR = 1U; + + /* Allow a stop interval of at least 5 SOSC clock cycles before configuring the drive capacity + * and restarting Sub-Clock Oscillator. */ + R_BSP_SoftwareDelay(BSP_PRV_SUBCLOCK_STOP_INTERVAL_US, BSP_DELAY_UNITS_MICROSECONDS); + + /* + * r01uh0893ej0120-ra4m3 8.2.9 SOSCCR : Sub-Clock Oscillator Control Register: + * When changing the value of the SOSTP bit, execute subsequent instructions + * only after reading the bit to check that the value is updated. + */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->SOSCCR, 1U); + } + + /* Configure the subclock drive as subclock is not running. */ + R_SYSTEM->SOMCR = + ((BSP_CLOCK_CFG_SUBCLOCK_DRIVE << BSP_FEATURE_CGC_SODRV_SHIFT) & BSP_FEATURE_CGC_SODRV_MASK); + #else + if (R_SYSTEM->SOSCCR) + { + #endif + + R_SYSTEM->SOSCCR = 0U; + + /* r01uh0893ej0120-ra4m3 8.2.9 SOSCCR : Sub-Clock Oscillator Control Register: + * After setting the SOSTP bit to 0, use the sub-clock only after the sub-clock + * oscillation stabilization time has elapsed. + */ + #if (BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_CLOCK_SOURCE) || (BSP_PRV_HOCO_USE_FLL) + R_BSP_SubClockStabilizeWait(BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS); + #endif + } + else + { + /* + * RA MCUs like RA6M5 requires to use sub-clock after oscillation stabilization time + * has elapsed on Power-On-Reset. But, POR is not well supported on EK boards, so BSP + * has to wait on any reset. Please override this function in application if waiting + * for stabilization is not required. + */ + R_BSP_SubClockStabilizeWaitAfterReset(BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS); + } + } + + #else + R_SYSTEM->SOSCCR = 1U; + #endif +#endif +} + +/*******************************************************************************************************************//** + * Octa-SPI clock update. + * @param[in] p_octaclk_setting Pointer to Octaclk setting structure which provides information regarding + * Octaclk source and divider settings to be applied. + * @note The requested Octaclk source must be started before calling this function. + **********************************************************************************************************************/ +void R_BSP_OctaclkUpdate (bsp_octaclk_settings_t * p_octaclk_setting) +{ +#if BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK + + /* Store initial value of CGC and LPM protection registers. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + uint16_t bsp_prv_prcr_orig = R_SYSTEM->PRCR_NS; + #else + uint16_t bsp_prv_prcr_orig = R_SYSTEM->PRCR; + #endif + + /* Unlock CGC and LPM protection registers. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SYSTEM->PRCR_NS = (uint16_t) BSP_PRV_PRCR_UNLOCK; + #else + R_SYSTEM->PRCR = (uint16_t) BSP_PRV_PRCR_UNLOCK; + #endif + + /* Request to change the OCTASPI Clock. */ + R_SYSTEM->OCTACKCR_b.OCTACKSREQ = 1; + + /* Wait for the clock to be stopped. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OCTACKCR_b.OCTACKSRDY, 1U); + + /* Write the settings. */ + R_SYSTEM->OCTACKDIVCR = (uint8_t) p_octaclk_setting->divider; + R_SYSTEM->OCTACKCR = (uint8_t) (p_octaclk_setting->source_clock | R_SYSTEM_OCTACKCR_OCTACKSREQ_Msk); + + /* Start the OCTASPI Clock by setting OCTACKSREQ to zero. */ + R_SYSTEM->OCTACKCR = (uint8_t) p_octaclk_setting->source_clock; + + /* Wait for the OCTASPI Clock to be started. */ + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->OCTACKCR_b.OCTACKSRDY, 0U); + + /* Restore CGC and LPM protection registers. */ + #if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + R_SYSTEM->PRCR_NS = bsp_prv_prcr_orig; + #else + R_SYSTEM->PRCR = bsp_prv_prcr_orig; + #endif +#else + FSP_PARAMETER_NOT_USED(p_octaclk_setting); +#endif +} + +/*******************************************************************************************************************//** + * Gets the frequency of a source clock. + * @param[in] clock Pointer to Octaclk setting structure which provides information regarding + * Octaclk source and divider settings to be applied. + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +uint32_t R_BSP_SourceClockHzGet (fsp_priv_source_clock_t clock) +{ + uint32_t source_clock = g_clock_freq[clock]; + + return source_clock; +} + +#if BSP_FEATURE_RTC_IS_AVAILABLE || BSP_FEATURE_RTC_HAS_TCEN || BSP_FEATURE_SYSC_HAS_VBTICTLR + +/*******************************************************************************************************************//** + * RTC Initialization + * + * Some RTC registers must be initialized after reset to ensure correct operation. + * This reset is not performed automatically if the RTC is used in a project as it will + * be handled by the RTC driver if needed. + **********************************************************************************************************************/ +void R_BSP_Init_RTC (void) +{ + /* RA4M3 UM r01uh0893ej0120: Figure 23.14 Initialization procedure */ + + /* RCKSEL bit is not initialized after reset. Use LOCO as the default + * clock source if it is available. Note RCR4.ROPSEL is also cleared. + */ + + #if BSP_FEATURE_RTC_IS_IRTC + if (0U == R_SYSTEM->VRTSR_b.VRTVLD) // Return if VRTC-domain is invalid + { + return; + } + #endif + #if !BSP_FEATURE_CGC_REGISTER_SET_B + #if BSP_PRV_LOCO_USED && !BSP_FEATURE_RTC_IS_IRTC + R_RTC->RCR4 = 1 << R_RTC_RCR4_RCKSEL_Pos; + #else + + /* Sses SOSC as clock source, or there is no clock source. */ + R_RTC->RCR4 = 0; + #endif + #endif + + #if !BSP_CFG_RTC_USED + #if BSP_PRV_LOCO_USED || (BSP_FEATURE_CGC_HAS_SOSC && BSP_CLOCK_CFG_SUBCLOCK_POPULATED) + #if !BSP_FEATURE_CGC_REGISTER_SET_B + + /*Wait for 6 clocks: 200 > (6*1000000) / 32K */ + R_BSP_SoftwareDelay(BSP_PRV_RTC_RESET_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + + R_RTC->RCR2 = 0; + FSP_HARDWARE_REGISTER_WAIT(R_RTC->RCR2, 0); + + R_RTC->RCR2_b.RESET = 1; + FSP_HARDWARE_REGISTER_WAIT(R_RTC->RCR2_b.RESET, 0); + + /* Disable RTC interrupts */ + R_RTC->RCR1 = 0; + + /* When the RCR1 register is modified, check that all the bits are updated before proceeding + * (see section 26.2.17 "RTC Control Register 1 (RCR1)" of the RA6M3 manual R01UH0886EJ0100)*/ + FSP_HARDWARE_REGISTER_WAIT(R_RTC->RCR1, 0); + #endif + + #if BSP_FEATURE_RTC_HAS_TCEN + for (uint8_t index = 0U; index < BSP_FEATURE_RTC_RTCCR_CHANNELS; index++) + { + /* RTCCRn.TCEN must be cleared after reset. */ + R_RTC->RTCCR[index].RTCCR_b.TCEN = 0U; + FSP_HARDWARE_REGISTER_WAIT(R_RTC->RTCCR[index].RTCCR_b.TCEN, 0); + } + #endif + #endif + #endif + + #if BSP_FEATURE_SYSC_HAS_VBTICTLR + + /* VBTICTLR.VCHnINEN must be cleared after reset. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + R_SYSTEM->VBTICTLR = 0U; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); + #endif + + #if BSP_FEATURE_LPM_RTC_REGISTER_CLOCK_DISABLE + + /* Enable low power counter measures. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_CGC); + R_SYSTEM->LPOPT = R_SYSTEM_LPOPT_LPOPTEN_Msk; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_CGC); + + /* Disable RTC Register Read/Write Clock to reduce power consumption. */ + bsp_prv_rtc_register_clock_set(false); + + /* Enable Asynchronous interrupts */ + R_ICU->IELEN = R_ICU_IELEN_RTCINTEN_Msk | R_ICU_IELEN_IELEN_Msk; + #endif +} + +#endif + +#if BSP_FEATURE_LPM_RTC_REGISTER_CLOCK_DISABLE + +/*******************************************************************************************************************//** + * Enable or disable the RTC Register Read/Write Clock in order to save power. + **********************************************************************************************************************/ +bool bsp_prv_rtc_register_clock_set (bool enable) +{ + /* Save the previous state of RTCRWDIS. + * - RTCRWDIS = 0: Register Clock enabled. + * - RTCRWDIS = 1: Register Clock disabled. + */ + bool previous_state = !R_MSTP->LSMRWDIS_b.RTCRWDIS; + + if (previous_state == enable) + { + return previous_state; + } + + /* Critical section required when writing to registers that are shared between modules. */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /* Set WREN. */ + R_MSTP->LSMRWDIS = BSP_PRV_LSMRDIS_KEY | R_MSTP_LSMRWDIS_WREN_Msk; + + /* Set RTCRWDIS and clear WREN. */ + R_MSTP->LSMRWDIS = BSP_PRV_LSMRDIS_KEY | !enable; + + /* Wait 2 cycles of PCLKB (See Table 3.2 "Access Cycles" in the RA2A2 user manual). */ + FSP_REGISTER_READ(R_MSTP->LSMRWDIS); + + FSP_CRITICAL_SECTION_EXIT; + + return previous_state; +} + +#endif + +#if BSP_FEATURE_RTC_IS_IRTC + +/*******************************************************************************************************************//** + * To check sub-clock status. + * + * @retval FSP_SUCCESS Sub-clock is ready to use. + * @retval FSP_ERR_INVALID_HW_CONDITION VRTC-domain area is invalid. + * @retval FSP_ERR_NOT_INITIALIZED Sub-clock has not been inititalized yet. + **********************************************************************************************************************/ +fsp_err_t R_BSP_SubclockStatusGet () +{ + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + + /* Check if VRTC-domain area is invalid */ + FSP_ERROR_RETURN(1U == R_SYSTEM->VRTSR_b.VRTVLD, FSP_ERR_INVALID_HW_CONDITION); + + /* Check if SOSC has been configured */ + if ((0U == R_SYSTEM->SOSCCR) && (BSP_CLOCK_CFG_SUBCLOCK_DRIVE == R_SYSTEM->SOMCR_b.SODRV)) + { + return FSP_SUCCESS; + } + #endif + + return FSP_ERR_NOT_INITIALIZED; +} + +/*******************************************************************************************************************//** + * To initialize the sub-clock. + * + * @retval FSP_SUCCESS Sub-clock successfully initialized. + * @retval FSP_ERR_INVALID_HW_CONDITION Sub-clock cannot be initialized. + **********************************************************************************************************************/ +fsp_err_t R_BSP_SubclockInitialize () +{ + #if BSP_CLOCK_CFG_SUBCLOCK_POPULATED + + /* Check if VRTC-domain area is valid */ + FSP_ERROR_RETURN(1U == R_SYSTEM->VRTSR_b.VRTVLD, FSP_ERR_INVALID_HW_CONDITION); + + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_CGC); + bsp_prv_sosc_init(); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_CGC); + + return FSP_SUCCESS; + #else + + return FSP_ERR_INVALID_HW_CONDITION; + #endif +} + +#endif + +/** @} (end addtogroup BSP_MCU_PRV) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.h new file mode 100644 index 00000000000..b618f782faf --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_clocks.h @@ -0,0 +1,1793 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_CLOCKS_H +#define BSP_CLOCKS_H + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_clock_cfg.h" +#include "bsp_api.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* The following definitions are macros instead of enums because the values are used in preprocessor conditionals. */ +/* Must match SCKCR.CKSEL values. */ +#define BSP_CLOCKS_SOURCE_CLOCK_HOCO (0) // The high speed on chip oscillator. +#define BSP_CLOCKS_SOURCE_CLOCK_MOCO (1) // The middle speed on chip oscillator. +#define BSP_CLOCKS_SOURCE_CLOCK_LOCO (2) // The low speed on chip oscillator. +#define BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC (3) // The main oscillator. +#define BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK (4) // The subclock oscillator. + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #if 0 < BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS + #define BSP_CLOCKS_SOURCE_CLOCK_PLL (5) // The PLL oscillator. + #endif + #if 0 < BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS + #define BSP_CLOCKS_SOURCE_CLOCK_PLL2 (6) // The PLL2 oscillator. + #endif + #if (1 < BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS && 1 < BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS) + #define BSP_CLOCKS_SOURCE_CLOCK_PLL1P (BSP_CLOCKS_SOURCE_CLOCK_PLL) + #define BSP_CLOCKS_SOURCE_CLOCK_PLL2P (BSP_CLOCKS_SOURCE_CLOCK_PLL2) + #define BSP_CLOCKS_SOURCE_CLOCK_PLL1Q (7) // The PLL1Q oscillator. + #define BSP_CLOCKS_SOURCE_CLOCK_PLL1R (8) // The PLL1R oscillator. + #define BSP_CLOCKS_SOURCE_CLOCK_PLL2Q (9) // The PLL2Q oscillator. + #define BSP_CLOCKS_SOURCE_CLOCK_PLL2R (10) // The PLL2R oscillator. + #endif +#else + +/* The following definitions are macros instead of enums because the values are used in preprocessor conditionals. */ +/* Must match ICLKSCR.CKSEL, FMAINSCR.CKSEL, FOCOSCR.CKSEL, FSUBSCR.CKSEL, OSMC.WUTMMCK0 and CKS0.CSEL values. */ + #define BSP_CLOCKS_SOURCE_CLOCK_FMAIN (0) // Use Main System clock (FMAIN) as System clock (ICLK) source. + #define BSP_CLOCKS_SOURCE_CLOCK_FSUB (1) // Use Sub System clock (FSUB) as System clock (ICLK) source. + #define BSP_CLOCKS_FMAIN_SOURCE_CLOCK_FOCO (0) // Use Main on-chip oscillator clock (FOCO) as Main System clock (FMAIN) source. + #define BSP_CLOCKS_FMAIN_SOURCE_CLOCK_MAIN_OSC (1) // Use Main clock oscillator (MOSC) as Main System clock (FMAIN) source. + #define BSP_CLOCKS_FOCO_SOURCE_CLOCK_HOCO (0) // Use High-speed on-chip oscillator (HOCO) as Main on-chip oscillator clock (FOCO) source. + #define BSP_CLOCKS_FOCO_SOURCE_CLOCK_MOCO (1) // Use Middle-speed on-chip oscillator (MOCO) as Main on-chip oscillator clock (FOCO) source. + #define BSP_CLOCKS_FSUB_SOURCE_CLOCK_SUBCLOCK (0) // Use Sub-clock oscillator (SOSC) as Sub System clock (FSUB) source. + #define BSP_CLOCKS_FSUB_SOURCE_CLOCK_LOCO (1) // Use Low-speed on-chip oscillator clock (LOCO) as Sub System clock (FSUB) source. + #define BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FMAIN (0) // Use Main System clock (FMAIN) as Clock Out (CLKOUT) source. + #define BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FSUB (1) // Use Subsystem Clock (FSUB) as Clock Out (CLKOUT) source. + +/* Offset to convert OSTS setting to OSTC value (OSTC = ~(BSP_PRV_OSTC_OFFSET >> OSTS)) */ + #define BSP_PRV_OSTC_OFFSET (0x7FU) + +#endif + +/* PLLs are not supported in the following scenarios: + * - When using low voltage mode + * - When using an MCU that does not have a PLL + * - When the PLL only accepts the main oscillator as a source and XTAL is not used + */ +#if BSP_FEATURE_CGC_HAS_PLL && !BSP_CFG_USE_LOW_VOLTAGE_MODE && \ + !((1U != BSP_FEATURE_CGC_PLLCCR_TYPE) && \ + (3U != BSP_FEATURE_CGC_PLLCCR_TYPE) && \ + (4U != BSP_FEATURE_CGC_PLLCCR_TYPE) && \ + (5U != BSP_FEATURE_CGC_PLLCCR_TYPE) && \ + !BSP_CLOCK_CFG_MAIN_OSC_POPULATED) + #define BSP_PRV_PLL_SUPPORTED (1) + #if BSP_FEATURE_CGC_HAS_PLL2 + #define BSP_PRV_PLL2_SUPPORTED (1) + #else + #define BSP_PRV_PLL2_SUPPORTED (0) + #endif +#else + #define BSP_PRV_PLL_SUPPORTED (0) + #define BSP_PRV_PLL2_SUPPORTED (0) +#endif + +/* The ICLK frequency at startup is used to determine the ideal operating mode to set after startup. The PLL frequency + * calculated here is also used to initialize the g_clock_freq array. */ +#if BSP_PRV_PLL_SUPPORTED + #if ((1U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (5U == BSP_FEATURE_CGC_PLLCCR_TYPE)) && \ + (BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL_SOURCE) + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_HOCO_HZ) + #else + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) + #endif +#endif +#if BSP_PRV_PLL2_SUPPORTED + #if BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL2_SOURCE + #define BSP_PRV_PLL2_SOURCE_FREQ_HZ (BSP_HOCO_HZ) + #else + #define BSP_PRV_PLL2_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) + #endif +#endif + +#define BSP_MOCO_FREQ_HZ (BSP_MOCO_HZ) + +/* Frequencies of clocks with fixed freqencies. */ +#define BSP_LOCO_FREQ_HZ (32768U) // LOCO frequency is fixed at 32768 Hz +#define BSP_SUBCLOCK_FREQ_HZ (32768U) // Subclock frequency is 32768 Hz + +#if BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_HOCO_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_MOCO == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_MOCO_FREQ_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_LOCO == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_LOCO_FREQ_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_SUBCLOCK_FREQ_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_CLOCK_SOURCE + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_CFG_XTAL_HZ) +#elif BSP_CLOCKS_SOURCE_CLOCK_PLL == BSP_CFG_CLOCK_SOURCE + #if (1U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (5U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #if BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_PLL_SOURCE + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_HOCO_HZ) + #endif + #define BSP_STARTUP_SOURCE_CLOCK_HZ (((BSP_PRV_PLL_SOURCE_FREQ_HZ * (BSP_CFG_PLL_MUL + 1U)) >> 1) / \ + (BSP_CFG_PLL_DIV + 1U)) + #elif (2U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_PRV_PLL_SOURCE_FREQ_HZ (BSP_CFG_XTAL_HZ) + #define BSP_STARTUP_SOURCE_CLOCK_HZ ((BSP_PRV_PLL_SOURCE_FREQ_HZ * ((BSP_CFG_PLL_MUL + 1U) >> 1)) >> \ + (BSP_CFG_PLL_DIV)) + #elif (3U == BSP_FEATURE_CGC_PLLCCR_TYPE) || (6U == BSP_FEATURE_CGC_PLLCCR_TYPE) + #define BSP_STARTUP_SOURCE_CLOCK_HZ (BSP_CFG_PLL1P_FREQUENCY_HZ) + #endif +#endif + +/* Convert divisor bitfield settings into divisor values to calculate startup clocks */ +#define BSP_PRV_SCKDIVCR_DIV_VALUE(div) (((div) & 8U) ? (3U << ((div) & ~8U)) : (1U << (div))) +#define BSP_PRV_CPUCLK_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_CPUCLK_DIV) + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + #define BSP_PRV_ICLK_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_ICLK_DIV) +#else + #define BSP_PRV_ICLK_DIV_VALUE (1U << BSP_CFG_ICLK_DIV) +#endif + +#define BSP_PRV_PCLKA_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_PCLKA_DIV) +#define BSP_PRV_PCLKB_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_PCLKB_DIV) +#define BSP_PRV_PCLKC_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_PCLKC_DIV) +#define BSP_PRV_PCLKD_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_PCLKD_DIV) +#define BSP_PRV_PCLKE_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_PCLKE_DIV) +#define BSP_PRV_BCLK_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_BCLK_DIV) +#define BSP_PRV_FCLK_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_FCLK_DIV) +#define BSP_PRV_MRICLK_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_MRICLK_DIV) + +/* Startup clock frequency of each system clock. These macros are only helpful if the system clock and dividers have + * not changed since startup. These macros are not used in FSP modules except for the clock startup code. */ +#define BSP_STARTUP_CPUCLK_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_CPUCLK_DIV_VALUE) +#define BSP_STARTUP_ICLK_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_ICLK_DIV_VALUE) +#define BSP_STARTUP_PCLKA_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_PCLKA_DIV_VALUE) +#define BSP_STARTUP_PCLKB_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_PCLKB_DIV_VALUE) +#define BSP_STARTUP_PCLKC_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_PCLKC_DIV_VALUE) +#define BSP_STARTUP_PCLKD_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_PCLKD_DIV_VALUE) +#define BSP_STARTUP_PCLKE_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_PCLKE_DIV_VALUE) +#define BSP_STARTUP_BCLK_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_BCLK_DIV_VALUE) +#define BSP_STARTUP_FCLK_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_FCLK_DIV_VALUE) +#define BSP_STARTUP_MRICLK_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_MRICLK_DIV_VALUE) + +/* System clock divider options. */ +#define BSP_CLOCKS_SYS_CLOCK_DIV_1 (0) // System clock divided by 1. +#define BSP_CLOCKS_SYS_CLOCK_DIV_2 (1) // System clock divided by 2. +#define BSP_CLOCKS_SYS_CLOCK_DIV_4 (2) // System clock divided by 4. +#define BSP_CLOCKS_SYS_CLOCK_DIV_8 (3) // System clock divided by 8. +#define BSP_CLOCKS_SYS_CLOCK_DIV_16 (4) // System clock divided by 16. +#define BSP_CLOCKS_SYS_CLOCK_DIV_32 (5) // System clock divided by 32. +#define BSP_CLOCKS_SYS_CLOCK_DIV_64 (6) // System clock divided by 64. +#define BSP_CLOCKS_SYS_CLOCK_DIV_128 (7) // System clock divided by 128 (available for CLKOUT only). +#define BSP_CLOCKS_SYS_CLOCK_DIV_3 (8) // System clock divided by 3. +#define BSP_CLOCKS_SYS_CLOCK_DIV_6 (9) // System clock divided by 6. +#define BSP_CLOCKS_SYS_CLOCK_DIV_12 (10) // System clock divided by 12. +#define BSP_CLOCKS_SYS_CLOCK_DIV_24 (11) // System clock divided by 24. + +/* USB clock divider options. */ +#define BSP_CLOCKS_USB_CLOCK_DIV_1 (0) // Divide USB source clock by 1 +#define BSP_CLOCKS_USB_CLOCK_DIV_2 (1) // Divide USB source clock by 2 +#define BSP_CLOCKS_USB_CLOCK_DIV_3 (2) // Divide USB source clock by 3 +#define BSP_CLOCKS_USB_CLOCK_DIV_4 (3) // Divide USB source clock by 4 +#define BSP_CLOCKS_USB_CLOCK_DIV_5 (4) // Divide USB source clock by 5 +#define BSP_CLOCKS_USB_CLOCK_DIV_6 (5) // Divide USB source clock by 6 +#define BSP_CLOCKS_USB_CLOCK_DIV_8 (7) // Divide USB source clock by 8 +#define BSP_CLOCKS_USB_CLOCK_DIV_10 (9) // Divide USB source clock by 10 +#define BSP_CLOCKS_USB_CLOCK_DIV_16 (15) // Divide USB source clock by 16 +#define BSP_CLOCKS_USB_CLOCK_DIV_32 (9) // Divide USB source clock by 32 + +/* USB60 clock divider options. */ +#define BSP_CLOCKS_USB60_CLOCK_DIV_1 (0) // Divide USB60 source clock by 1 +#define BSP_CLOCKS_USB60_CLOCK_DIV_2 (1) // Divide USB60 source clock by 2 +#define BSP_CLOCKS_USB60_CLOCK_DIV_3 (5) // Divide USB60 source clock by 3 +#define BSP_CLOCKS_USB60_CLOCK_DIV_4 (2) // Divide USB60 source clock by 4 +#define BSP_CLOCKS_USB60_CLOCK_DIV_5 (6) // Divide USB60 source clock by 5 +#define BSP_CLOCKS_USB60_CLOCK_DIV_6 (3) // Divide USB66 source clock by 6 +#define BSP_CLOCKS_USB60_CLOCK_DIV_8 (4) // Divide USB60 source clock by 8 +#define BSP_CLOCKS_USB60_CLOCK_DIV_10 (7) // Divide USB60 source clock by 10 +#define BSP_CLOCKS_USB60_CLOCK_DIV_16 (8) // Divide USB60 source clock by 16 +#define BSP_CLOCKS_USB60_CLOCK_DIV_32 (9) // Divide USB60 source clock by 32 + +/* GLCD clock divider options. */ +#define BSP_CLOCKS_LCD_CLOCK_DIV_1 (0) // Divide LCD source clock by 1 +#define BSP_CLOCKS_LCD_CLOCK_DIV_2 (1) // Divide LCD source clock by 2 +#define BSP_CLOCKS_LCD_CLOCK_DIV_3 (5) // Divide LCD source clock by 3 +#define BSP_CLOCKS_LCD_CLOCK_DIV_4 (2) // Divide LCD source clock by 4 +#define BSP_CLOCKS_LCD_CLOCK_DIV_5 (6) // Divide LCD source clock by 5 +#define BSP_CLOCKS_LCD_CLOCK_DIV_6 (3) // Divide LCD source clock by 6 +#define BSP_CLOCKS_LCD_CLOCK_DIV_8 (4) // Divide LCD source clock by 8 +#define BSP_CLOCKS_LCD_CLOCK_DIV_10 (7) // Divide LCD source clock by 10 +#define BSP_CLOCKS_LCD_CLOCK_DIV_16 (8) // Divide LCD source clock by 16 +#define BSP_CLOCKS_LCD_CLOCK_DIV_32 (9) // Divide LCD source clock by 32 + +/* OCTA clock divider options. */ +#define BSP_CLOCKS_OCTA_CLOCK_DIV_1 (0) // Divide OCTA source clock by 1 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_2 (1) // Divide OCTA source clock by 2 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_3 (5) // Divide OCTA source clock by 3 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_4 (2) // Divide OCTA source clock by 4 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_5 (6) // Divide OCTA source clock by 5 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_6 (3) // Divide OCTA source clock by 6 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_8 (4) // Divide OCTA source clock by 8 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_10 (7) // Divide OCTA source clock by 10 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_16 (8) // Divide OCTA source clock by 16 +#define BSP_CLOCKS_OCTA_CLOCK_DIV_32 (9) // Divide OCTA source clock by 32 + +/* CANFD clock divider options. */ +#define BSP_CLOCKS_CANFD_CLOCK_DIV_1 (0) // Divide CANFD source clock by 1 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_2 (1) // Divide CANFD source clock by 2 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_3 (5) // Divide CANFD source clock by 3 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_4 (2) // Divide CANFD source clock by 4 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_5 (6) // Divide CANFD source clock by 5 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_6 (3) // Divide CANFD source clock by 6 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_8 (4) // Divide CANFD source clock by 8 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_10 (7) // Divide CANFD source clock by 10 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_16 (8) // Divide CANFD source clock by 16 +#define BSP_CLOCKS_CANFD_CLOCK_DIV_32 (9) // Divide CANFD source clock by 32 + +/* SCI clock divider options. */ +#define BSP_CLOCKS_SCI_CLOCK_DIV_1 (0) // Divide SCI source clock by 1 +#define BSP_CLOCKS_SCI_CLOCK_DIV_2 (1) // Divide SCI source clock by 2 +#define BSP_CLOCKS_SCI_CLOCK_DIV_3 (5) // Divide SCI source clock by 3 +#define BSP_CLOCKS_SCI_CLOCK_DIV_4 (2) // Divide SCI source clock by 4 +#define BSP_CLOCKS_SCI_CLOCK_DIV_5 (6) // Divide SCI source clock by 5 +#define BSP_CLOCKS_SCI_CLOCK_DIV_6 (3) // Divide SCI source clock by 6 +#define BSP_CLOCKS_SCI_CLOCK_DIV_8 (4) // Divide SCI source clock by 8 +#define BSP_CLOCKS_SCI_CLOCK_DIV_10 (7) // Divide SCI source clock by 10 +#define BSP_CLOCKS_SCI_CLOCK_DIV_16 (8) // Divide SCI source clock by 16 +#define BSP_CLOCKS_SCI_CLOCK_DIV_32 (9) // Divide SCI source clock by 32 + +/* SPI clock divider options. */ +#define BSP_CLOCKS_SPI_CLOCK_DIV_1 (0) // Divide SPI source clock by 1 +#define BSP_CLOCKS_SPI_CLOCK_DIV_2 (1) // Divide SPI source clock by 2 +#define BSP_CLOCKS_SPI_CLOCK_DIV_3 (5) // Divide SPI source clock by 3 +#define BSP_CLOCKS_SPI_CLOCK_DIV_4 (2) // Divide SPI source clock by 4 +#define BSP_CLOCKS_SPI_CLOCK_DIV_5 (6) // Divide SPI source clock by 5 +#define BSP_CLOCKS_SPI_CLOCK_DIV_6 (3) // Divide SPI source clock by 6 +#define BSP_CLOCKS_SPI_CLOCK_DIV_8 (4) // Divide SPI source clock by 8 +#define BSP_CLOCKS_SPI_CLOCK_DIV_10 (7) // Divide SPI source clock by 10 +#define BSP_CLOCKS_SPI_CLOCK_DIV_16 (8) // Divide SPI source clock by 16 +#define BSP_CLOCKS_SPI_CLOCK_DIV_32 (9) // Divide SPI source clock by 32 + +/* SCISPI clock divider options. */ +#define BSP_CLOCKS_SCISPI_CLOCK_DIV_1 (0) // Divide SCISPI source clock by 1 +#define BSP_CLOCKS_SCISPI_CLOCK_DIV_2 (1) // Divide SCISPI source clock by 2 +#define BSP_CLOCKS_SCISPI_CLOCK_DIV_4 (2) // Divide SCISPI source clock by 4 +#define BSP_CLOCKS_SCISPI_CLOCK_DIV_6 (3) // Divide SCISPI source clock by 6 +#define BSP_CLOCKS_SCISPI_CLOCK_DIV_8 (4) // Divide SCISPI source clock by 8 + +/* GPT clock divider options. */ +#define BSP_CLOCKS_GPT_CLOCK_DIV_1 (0) // Divide GPT source clock by 1 +#define BSP_CLOCKS_GPT_CLOCK_DIV_2 (1) // Divide GPT source clock by 2 +#define BSP_CLOCKS_GPT_CLOCK_DIV_3 (5) // Divide GPT source clock by 3 +#define BSP_CLOCKS_GPT_CLOCK_DIV_4 (2) // Divide GPT source clock by 4 +#define BSP_CLOCKS_GPT_CLOCK_DIV_5 (6) // Divide GPT source clock by 5 +#define BSP_CLOCKS_GPT_CLOCK_DIV_6 (3) // Divide GPT source clock by 6 +#define BSP_CLOCKS_GPT_CLOCK_DIV_8 (4) // Divide GPT source clock by 8 +#define BSP_CLOCKS_GPT_CLOCK_DIV_10 (7) // Divide GPT source clock by 10 +#define BSP_CLOCKS_GPT_CLOCK_DIV_16 (8) // Divide GPT source clock by 16 +#define BSP_CLOCKS_GPT_CLOCK_DIV_32 (9) // Divide GPT source clock by 32 + +/* IIC clock divider options. */ +#define BSP_CLOCKS_IIC_CLOCK_DIV_1 (0) // Divide IIC source clock by 1 +#define BSP_CLOCKS_IIC_CLOCK_DIV_2 (1) // Divide IIC source clock by 2 +#define BSP_CLOCKS_IIC_CLOCK_DIV_4 (2) // Divide IIC source clock by 4 +#define BSP_CLOCKS_IIC_CLOCK_DIV_6 (3) // Divide IIC source clock by 6 +#define BSP_CLOCKS_IIC_CLOCK_DIV_8 (4) // Divide IIC source clock by 8 + +/* CEC clock divider options. */ +#define BSP_CLOCKS_CEC_CLOCK_DIV_1 (0) // Divide CEC source clock by 1 +#define BSP_CLOCKS_CEC_CLOCK_DIV_2 (1) // Divide CEC source clock by 2 + +/* I3C clock divider options. */ +#define BSP_CLOCKS_I3C_CLOCK_DIV_1 (0) // Divide I3C source clock by 1 +#define BSP_CLOCKS_I3C_CLOCK_DIV_2 (1) // Divide I3C source clock by 2 +#define BSP_CLOCKS_I3C_CLOCK_DIV_3 (5) // Divide I3C source clock by 3 +#define BSP_CLOCKS_I3C_CLOCK_DIV_4 (2) // Divide I3C source clock by 4 +#define BSP_CLOCKS_I3C_CLOCK_DIV_5 (6) // Divide I3C source clock by 5 +#define BSP_CLOCKS_I3C_CLOCK_DIV_6 (3) // Divide I3C source clock by 6 +#define BSP_CLOCKS_I3C_CLOCK_DIV_8 (4) // Divide I3C source clock by 8 +#define BSP_CLOCKS_I3C_CLOCK_DIV_10 (7) // Divide I3C source clock by 10 +#define BSP_CLOCKS_I3C_CLOCK_DIV_16 (8) // Divide I3C source clock by 16 +#define BSP_CLOCKS_I3C_CLOCK_DIV_32 (9) // Divide I3C source clock by 32 + +/* ADC clock divider options. */ +#define BSP_CLOCKS_ADC_CLOCK_DIV_1 (0) // Divide ADC source clock by 1 +#define BSP_CLOCKS_ADC_CLOCK_DIV_2 (1) // Divide ADC source clock by 2 +#define BSP_CLOCKS_ADC_CLOCK_DIV_3 (5) // Divide ADC source clock by 3 +#define BSP_CLOCKS_ADC_CLOCK_DIV_4 (2) // Divide ADC source clock by 4 +#define BSP_CLOCKS_ADC_CLOCK_DIV_5 (6) // Divide ADC source clock by 5 +#define BSP_CLOCKS_ADC_CLOCK_DIV_6 (3) // Divide ADC source clock by 6 +#define BSP_CLOCKS_ADC_CLOCK_DIV_8 (4) // Divide ADC source clock by 8 +#define BSP_CLOCKS_ADC_CLOCK_DIV_10 (7) // Divide ADC source clock by 10 +#define BSP_CLOCKS_ADC_CLOCK_DIV_16 (8) // Divide ADC source clock by 16 +#define BSP_CLOCKS_ADC_CLOCK_DIV_32 (9) // Divide ADC source clock by 32 + +/* ESW clock divider options. */ +#define BSP_CLOCKS_ESW_CLOCK_DIV_1 (0) // Divide ESW source clock by 1 +#define BSP_CLOCKS_ESW_CLOCK_DIV_2 (1) // Divide ESW source clock by 2 +#define BSP_CLOCKS_ESW_CLOCK_DIV_3 (5) // Divide ESW source clock by 3 +#define BSP_CLOCKS_ESW_CLOCK_DIV_4 (2) // Divide ESW source clock by 4 +#define BSP_CLOCKS_ESW_CLOCK_DIV_5 (6) // Divide ESW source clock by 5 +#define BSP_CLOCKS_ESW_CLOCK_DIV_6 (3) // Divide ESW source clock by 6 +#define BSP_CLOCKS_ESW_CLOCK_DIV_8 (4) // Divide ESW source clock by 8 +#define BSP_CLOCKS_ESW_CLOCK_DIV_10 (7) // Divide ESW source clock by 10 +#define BSP_CLOCKS_ESW_CLOCK_DIV_16 (8) // Divide ESW source clock by 16 +#define BSP_CLOCKS_ESW_CLOCK_DIV_32 (9) // Divide ESW source clock by 32 + +/* ESWPHY clock divider options. */ +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_1 (0) // Divide ESWPHY source clock by 1 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_2 (1) // Divide ESWPHY source clock by 2 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_3 (5) // Divide ESWPHY source clock by 3 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_4 (2) // Divide ESWPHY source clock by 4 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_5 (6) // Divide ESWPHY source clock by 5 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_6 (3) // Divide ESWPHY source clock by 6 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_8 (4) // Divide ESWPHY source clock by 8 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_10 (7) // Divide ESWPHY source clock by 10 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_16 (8) // Divide ESWPHY source clock by 16 +#define BSP_CLOCKS_ESWPHY_CLOCK_DIV_32 (9) // Divide ESWPHY source clock by 32 + +/* ETHPHY clock divider options. */ +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_1 (0) // Divide ETHPHY source clock by 1 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_2 (1) // Divide ETHPHY source clock by 2 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_3 (5) // Divide ETHPHY source clock by 3 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_4 (2) // Divide ETHPHY source clock by 4 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_5 (6) // Divide ETHPHY source clock by 5 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_6 (3) // Divide ETHPHY source clock by 6 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_8 (4) // Divide ETHPHY source clock by 8 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_10 (7) // Divide ETHPHY source clock by 10 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_16 (8) // Divide ETHPHY source clock by 16 +#define BSP_CLOCKS_ETHPHY_CLOCK_DIV_32 (9) // Divide ETHPHY source clock by 32 + +/* BCLKA clock divider options. */ +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_1 (0) // Divide BCLKA source clock by 1 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_2 (1) // Divide BCLKA source clock by 2 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_3 (5) // Divide BCLKA source clock by 3 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_4 (2) // Divide BCLKA source clock by 4 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_5 (6) // Divide BCLKA source clock by 5 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_6 (3) // Divide BCLKA source clock by 6 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_8 (4) // Divide BCLKA source clock by 8 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_10 (7) // Divide BCLKA source clock by 10 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_16 (8) // Divide BCLKA source clock by 16 +#define BSP_CLOCKS_BCLKA_CLOCK_DIV_32 (9) // Divide BCLKA source clock by 32 + +/* SAU clock divider options. */ +#define BSP_CLOCKS_SAU_CLOCK_DIV_1 (0) // Divide SAU source clock by 1 +#define BSP_CLOCKS_SAU_CLOCK_DIV_2 (1) // Divide SAU source clock by 2 +#define BSP_CLOCKS_SAU_CLOCK_DIV_4 (2) // Divide SAU source clock by 4 +#define BSP_CLOCKS_SAU_CLOCK_DIV_8 (3) // Divide SAU source clock by 8 +#define BSP_CLOCKS_SAU_CLOCK_DIV_16 (4) // Divide SAU source clock by 16 +#define BSP_CLOCKS_SAU_CLOCK_DIV_32 (5) // Divide SAU source clock by 32 +#define BSP_CLOCKS_SAU_CLOCK_DIV_64 (6) // Divide SAU source clock by 64 +#define BSP_CLOCKS_SAU_CLOCK_DIV_128 (7) // Divide SAU source clock by 128 +#define BSP_CLOCKS_SAU_CLOCK_DIV_256 (8) // Divide SAU source clock by 256 +#define BSP_CLOCKS_SAU_CLOCK_DIV_512 (9) // Divide SAU source clock by 512 +#define BSP_CLOCKS_SAU_CLOCK_DIV_1024 (10) // Divide SAU source clock by 1024 +#define BSP_CLOCKS_SAU_CLOCK_DIV_2048 (11) // Divide SAU source clock by 2048 +#define BSP_CLOCKS_SAU_CLOCK_DIV_4096 (12) // Divide SAU source clock by 4096 +#define BSP_CLOCKS_SAU_CLOCK_DIV_8192 (13) // Divide SAU source clock by 8192 +#define BSP_CLOCKS_SAU_CLOCK_DIV_16384 (14) // Divide SAU source clock by 16384 +#define BSP_CLOCKS_SAU_CLOCK_DIV_32768 (15) // Divide SAU source clock by 32768 + +/* Extra peripheral 0 clock divider options. */ +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_1 (0) // Divide extra peripheral 0 source clock by 1 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_2 (1) // Divide extra peripheral 0 source clock by 2 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_3 (5) // Divide extra peripheral 0 source clock by 3 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_4 (2) // Divide extra peripheral 0 source clock by 4 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_5 (6) // Divide extra peripheral 0 source clock by 5 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_6 (3) // Divide extra peripheral 0 source clock by 6 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_8 (4) // Divide extra peripheral 0 source clock by 8 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_10 (7) // Divide extra peripheral 0 source clock by 10 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_16 (8) // Divide extra peripheral 0 source clock by 16 +#define BSP_CLOCKS_EXTRA_PERIPHERAL0_CLOCK_DIV_32 (9) // Divide extra peripheral 0 source clock by 32 + +/* Extra peripheral 1 clock divider options. */ +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_1 (0) // Divide extra peripheral 1 source clock by 1 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_2 (1) // Divide extra peripheral 1 source clock by 2 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_3 (5) // Divide extra peripheral 1 source clock by 3 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_4 (2) // Divide extra peripheral 1 source clock by 4 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_5 (6) // Divide extra peripheral 1 source clock by 5 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_6 (3) // Divide extra peripheral 1 source clock by 6 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_8 (4) // Divide extra peripheral 1 source clock by 8 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_10 (7) // Divide extra peripheral 1 source clock by 10 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_16 (8) // Divide extra peripheral 1 source clock by 16 +#define BSP_CLOCKS_EXTRA_PERIPHERAL1_CLOCK_DIV_32 (9) // Divide extra peripheral 1 source clock by 32 + +/* PLL divider options. */ +#define BSP_CLOCKS_PLL_DIV_1 (0) +#define BSP_CLOCKS_PLL_DIV_2 (1) +#define BSP_CLOCKS_PLL_DIV_3 (2) +#define BSP_CLOCKS_PLL_DIV_4 (3) +#define BSP_CLOCKS_PLL_DIV_5 (4) +#define BSP_CLOCKS_PLL_DIV_6 (5) +#define BSP_CLOCKS_PLL_DIV_8 (7) +#define BSP_CLOCKS_PLL_DIV_9 (8) +#define BSP_CLOCKS_PLL_DIV_1_5 (9) +#define BSP_CLOCKS_PLL_DIV_16 (15) + +/* PLL multiplier options. */ +#if (4U == BSP_FEATURE_CGC_PLLCCR_TYPE) + +/* Offset from decimal multiplier to register value for PLLCCR type 4. */ + #define BSP_PRV_CLOCKS_PLL_MUL_INT_OFFSET (574) + +/** + * X=Integer portion of the multiplier. + * Y=Fractional portion of the multiplier. (not used for this PLLCCR type) + */ + #define BSP_CLOCKS_PLL_MUL(X, Y) (X - BSP_PRV_CLOCKS_PLL_MUL_INT_OFFSET) + +#elif (3U != BSP_FEATURE_CGC_PLLCCR_TYPE) && (6U != BSP_FEATURE_CGC_PLLCCR_TYPE) + +/** + * X=Integer portion of the multiplier. + * Y=Fractional portion of the multiplier. + */ + #define BSP_CLOCKS_PLL_MUL(X, Y) (((X) << 1 | ((Y) >= 50U ? 1 : 0)) - 1U) + +#else + + #define BSP_PRV_CLOCKS_PLL_MUL_INT_SHIFT (2U) + #define BSP_PRV_CLOCKS_PLL_MUL_FRAC_MASK (0x3U) + #define BSP_PRV_CLOCKS_PLL_MUL_FRAC_SHIFT (0U) + +/** + * X=Integer portion of the multiplier. + * Y=Fractional portion of the multiplier. + */ + #define BSP_CLOCKS_PLL_MUL(X, Y) ((((X) -1U) << 2UL) | ((Y) == 50U ? 3U : ((Y) / 33UL))) + +#endif + +/* Configuration option used to disable clock output. */ +#define BSP_CLOCKS_CLOCK_DISABLED (0xFFU) + +/* HOCO cycles per microsecond. */ +#define BSP_PRV_HOCO_CYCLES_PER_US (BSP_HOCO_HZ / 1000000U) + +/* Maximum number of delay cycles required to ensure 1 us passes between setting PLLCCR and clearing PLLCR. */ +#if BSP_HOCO_HZ < 48000000U + #define BSP_PRV_MAX_HOCO_CYCLES_PER_US (BSP_PRV_HOCO_CYCLES_PER_US) +#else + #define BSP_PRV_MAX_HOCO_CYCLES_PER_US (48U) +#endif + +/* Create a mask of valid bits in SCKDIVCR. */ +#define BSP_PRV_SCKDIVCR_ICLK_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 24) +#if BSP_FEATURE_CGC_HAS_PCLKD + #define BSP_PRV_SCKDIVCR_PCLKD_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 0) +#else + #define BSP_PRV_SCKDIVCR_PCLKD_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKC + #define BSP_PRV_SCKDIVCR_PCLKC_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 4) +#else + #define BSP_PRV_SCKDIVCR_PCLKC_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKB + #define BSP_PRV_SCKDIVCR_PCLKB_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 8) +#else + #define BSP_PRV_SCKDIVCR_PCLKB_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKA + #define BSP_PRV_SCKDIVCR_PCLKA_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 12) +#else + #define BSP_PRV_SCKDIVCR_PCLKA_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_BCLK || BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB + #define BSP_PRV_SCKDIVCR_BCLK_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 16) +#else + #define BSP_PRV_SCKDIVCR_BCLK_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_PCLKE + #define BSP_PRV_SCKDIVCR_PCLKE_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 24) +#else + #define BSP_PRV_SCKDIVCR_PCLKE_MASK (0U) +#endif +#if BSP_FEATURE_CGC_HAS_FCLK + #define BSP_PRV_SCKDIVCR_FCLK_MASK (FSP_PRV_SCKDIVCR_DIV_MASK << 28) +#else + #define BSP_PRV_SCKDIVCR_FCLK_MASK (0U) +#endif +#define BSP_PRV_SCKDIVCR_MASK (BSP_PRV_SCKDIVCR_ICLK_MASK | BSP_PRV_SCKDIVCR_PCLKD_MASK | \ + BSP_PRV_SCKDIVCR_PCLKC_MASK | BSP_PRV_SCKDIVCR_PCLKB_MASK | \ + BSP_PRV_SCKDIVCR_PCLKA_MASK | BSP_PRV_SCKDIVCR_BCLK_MASK | \ + BSP_PRV_SCKDIVCR_PCLKE_MASK | BSP_PRV_SCKDIVCR_FCLK_MASK) + +/* FLL is only used when enabled, present and the subclock is populated. */ +#if BSP_FEATURE_CGC_HAS_FLL && BSP_CFG_FLL_ENABLE && BSP_CLOCK_CFG_SUBCLOCK_POPULATED + #define BSP_PRV_HOCO_USE_FLL (1) + #ifndef BSP_PRV_FLL_STABILIZATION_TIME_US + #define BSP_PRV_FLL_STABILIZATION_TIME_US (1800) + #endif +#else + #define BSP_PRV_HOCO_USE_FLL (0) + #define BSP_PRV_FLL_STABILIZATION_TIME_US (0) +#endif + +#if BSP_FEATURE_RTC_IS_AVAILABLE || BSP_FEATURE_RTC_HAS_TCEN || BSP_FEATURE_SYSC_HAS_VBTICTLR + #define BSP_PRV_RTC_RESET_DELAY_US (200) +#endif + +/* Operating power control modes. */ +#if BSP_FEATURE_CGC_REGISTER_SET_B + #define BSP_PRV_OPERATING_MODE_LOW_SPEED (1U) // Should match FLMODE low speed + #define BSP_PRV_OPERATING_MODE_MIDDLE_SPEED (2U) // Should match FLMODE middle speed + #define BSP_PRV_OPERATING_MODE_HIGH_SPEED (3U) // Should match FLMODE high speed +#else + #define BSP_PRV_OPERATING_MODE_HIGH_SPEED (0U) // Should match OPCCR OPCM high speed + #define BSP_PRV_OPERATING_MODE_MIDDLE_SPEED (1U) // Should match OPCCR OPCM middle speed + #define BSP_PRV_OPERATING_MODE_LOW_VOLTAGE (2U) // Should match OPCCR OPCM low voltage + #define BSP_PRV_OPERATING_MODE_LOW_SPEED (3U) // Should match OPCCR OPCM low speed +#endif +#define BSP_PRV_OPERATING_MODE_SUBOSC_SPEED (4U) // Can be any value not otherwise used + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +#if BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD +typedef struct +{ + uint32_t pll_freq; +} bsp_clock_update_callback_args_t; + + #if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * bsp_clock_update_callback_t)(bsp_clock_update_callback_args_t * + p_callback_args); + #elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile bsp_clock_update_callback_t)(bsp_clock_update_callback_args_t * + p_callback_args); + #endif + +#endif + +/** PLL multiplier values */ +typedef enum e_cgc_pll_mul +{ + CGC_PLL_MUL_4_0 = BSP_CLOCKS_PLL_MUL(4U, 0U), ///< PLL multiplier of 4.00 + CGC_PLL_MUL_4_5 = BSP_CLOCKS_PLL_MUL(4U, 50U), ///< PLL multiplier of 4.50 + CGC_PLL_MUL_5_0 = BSP_CLOCKS_PLL_MUL(5U, 0U), ///< PLL multiplier of 5.00 + CGC_PLL_MUL_5_5 = BSP_CLOCKS_PLL_MUL(5U, 50U), ///< PLL multiplier of 5.50 + CGC_PLL_MUL_6_0 = BSP_CLOCKS_PLL_MUL(6U, 0U), ///< PLL multiplier of 6.00 + CGC_PLL_MUL_6_5 = BSP_CLOCKS_PLL_MUL(6U, 50U), ///< PLL multiplier of 6.50 + CGC_PLL_MUL_7_0 = BSP_CLOCKS_PLL_MUL(7U, 0U), ///< PLL multiplier of 7.00 + CGC_PLL_MUL_7_5 = BSP_CLOCKS_PLL_MUL(7U, 50U), ///< PLL multiplier of 7.50 + CGC_PLL_MUL_8_0 = BSP_CLOCKS_PLL_MUL(8U, 0U), ///< PLL multiplier of 8.00 + CGC_PLL_MUL_8_5 = BSP_CLOCKS_PLL_MUL(8U, 50U), ///< PLL multiplier of 8.50 + CGC_PLL_MUL_9_0 = BSP_CLOCKS_PLL_MUL(9U, 0U), ///< PLL multiplier of 9.00 + CGC_PLL_MUL_9_5 = BSP_CLOCKS_PLL_MUL(9U, 50U), ///< PLL multiplier of 9.50 + CGC_PLL_MUL_10_0 = BSP_CLOCKS_PLL_MUL(10U, 0U), ///< PLL multiplier of 10.00 + CGC_PLL_MUL_10_5 = BSP_CLOCKS_PLL_MUL(10U, 50U), ///< PLL multiplier of 10.50 + CGC_PLL_MUL_11_0 = BSP_CLOCKS_PLL_MUL(11U, 0U), ///< PLL multiplier of 11.00 + CGC_PLL_MUL_11_5 = BSP_CLOCKS_PLL_MUL(11U, 50U), ///< PLL multiplier of 11.50 + CGC_PLL_MUL_12_0 = BSP_CLOCKS_PLL_MUL(12U, 0U), ///< PLL multiplier of 12.00 + CGC_PLL_MUL_12_5 = BSP_CLOCKS_PLL_MUL(12U, 50U), ///< PLL multiplier of 12.50 + CGC_PLL_MUL_13_0 = BSP_CLOCKS_PLL_MUL(13U, 0U), ///< PLL multiplier of 13.00 + CGC_PLL_MUL_13_5 = BSP_CLOCKS_PLL_MUL(13U, 50U), ///< PLL multiplier of 13.50 + CGC_PLL_MUL_14_0 = BSP_CLOCKS_PLL_MUL(14U, 0U), ///< PLL multiplier of 14.00 + CGC_PLL_MUL_14_5 = BSP_CLOCKS_PLL_MUL(14U, 50U), ///< PLL multiplier of 14.50 + CGC_PLL_MUL_15_0 = BSP_CLOCKS_PLL_MUL(15U, 0U), ///< PLL multiplier of 15.00 + CGC_PLL_MUL_15_5 = BSP_CLOCKS_PLL_MUL(15U, 50U), ///< PLL multiplier of 15.50 + CGC_PLL_MUL_16_0 = BSP_CLOCKS_PLL_MUL(16U, 0U), ///< PLL multiplier of 16.00 + CGC_PLL_MUL_16_5 = BSP_CLOCKS_PLL_MUL(16U, 50U), ///< PLL multiplier of 16.50 + CGC_PLL_MUL_17_0 = BSP_CLOCKS_PLL_MUL(17U, 0U), ///< PLL multiplier of 17.00 + CGC_PLL_MUL_17_5 = BSP_CLOCKS_PLL_MUL(17U, 50U), ///< PLL multiplier of 17.50 + CGC_PLL_MUL_18_0 = BSP_CLOCKS_PLL_MUL(18U, 0U), ///< PLL multiplier of 18.00 + CGC_PLL_MUL_18_5 = BSP_CLOCKS_PLL_MUL(18U, 50U), ///< PLL multiplier of 18.50 + CGC_PLL_MUL_19_0 = BSP_CLOCKS_PLL_MUL(19U, 0U), ///< PLL multiplier of 19.00 + CGC_PLL_MUL_19_5 = BSP_CLOCKS_PLL_MUL(19U, 50U), ///< PLL multiplier of 19.50 + CGC_PLL_MUL_20_0 = BSP_CLOCKS_PLL_MUL(20U, 0U), ///< PLL multiplier of 20.00 + CGC_PLL_MUL_20_5 = BSP_CLOCKS_PLL_MUL(20U, 50U), ///< PLL multiplier of 20.50 + CGC_PLL_MUL_21_0 = BSP_CLOCKS_PLL_MUL(21U, 0U), ///< PLL multiplier of 21.00 + CGC_PLL_MUL_21_5 = BSP_CLOCKS_PLL_MUL(21U, 50U), ///< PLL multiplier of 21.50 + CGC_PLL_MUL_22_0 = BSP_CLOCKS_PLL_MUL(22U, 0U), ///< PLL multiplier of 22.00 + CGC_PLL_MUL_22_5 = BSP_CLOCKS_PLL_MUL(22U, 50U), ///< PLL multiplier of 22.50 + CGC_PLL_MUL_23_0 = BSP_CLOCKS_PLL_MUL(23U, 0U), ///< PLL multiplier of 23.00 + CGC_PLL_MUL_23_5 = BSP_CLOCKS_PLL_MUL(23U, 50U), ///< PLL multiplier of 23.50 + CGC_PLL_MUL_24_0 = BSP_CLOCKS_PLL_MUL(24U, 0U), ///< PLL multiplier of 24.00 + CGC_PLL_MUL_24_5 = BSP_CLOCKS_PLL_MUL(24U, 50U), ///< PLL multiplier of 24.50 + CGC_PLL_MUL_25_0 = BSP_CLOCKS_PLL_MUL(25U, 0U), ///< PLL multiplier of 25.00 + CGC_PLL_MUL_25_5 = BSP_CLOCKS_PLL_MUL(25U, 50U), ///< PLL multiplier of 25.50 + CGC_PLL_MUL_26_0 = BSP_CLOCKS_PLL_MUL(26U, 0U), ///< PLL multiplier of 26.00 + CGC_PLL_MUL_26_33 = BSP_CLOCKS_PLL_MUL(26U, 33U), ///< PLL multiplier of 26.33 + CGC_PLL_MUL_26_5 = BSP_CLOCKS_PLL_MUL(26U, 50U), ///< PLL multiplier of 26.50 + CGC_PLL_MUL_26_66 = BSP_CLOCKS_PLL_MUL(26U, 66U), ///< PLL multiplier of 26.66 + CGC_PLL_MUL_27_0 = BSP_CLOCKS_PLL_MUL(27U, 0U), ///< PLL multiplier of 27.00 + CGC_PLL_MUL_27_33 = BSP_CLOCKS_PLL_MUL(27U, 33U), ///< PLL multiplier of 27.33 + CGC_PLL_MUL_27_5 = BSP_CLOCKS_PLL_MUL(27U, 50U), ///< PLL multiplier of 27.50 + CGC_PLL_MUL_27_66 = BSP_CLOCKS_PLL_MUL(27U, 66U), ///< PLL multiplier of 27.66 + CGC_PLL_MUL_28_0 = BSP_CLOCKS_PLL_MUL(28U, 0U), ///< PLL multiplier of 28.00 + CGC_PLL_MUL_28_33 = BSP_CLOCKS_PLL_MUL(28U, 33U), ///< PLL multiplier of 28.33 + CGC_PLL_MUL_28_5 = BSP_CLOCKS_PLL_MUL(28U, 50U), ///< PLL multiplier of 28.50 + CGC_PLL_MUL_28_66 = BSP_CLOCKS_PLL_MUL(28U, 66U), ///< PLL multiplier of 28.66 + CGC_PLL_MUL_29_0 = BSP_CLOCKS_PLL_MUL(29U, 0U), ///< PLL multiplier of 29.00 + CGC_PLL_MUL_29_33 = BSP_CLOCKS_PLL_MUL(29U, 33U), ///< PLL multiplier of 29.33 + CGC_PLL_MUL_29_5 = BSP_CLOCKS_PLL_MUL(29U, 50U), ///< PLL multiplier of 29.50 + CGC_PLL_MUL_29_66 = BSP_CLOCKS_PLL_MUL(29U, 66U), ///< PLL multiplier of 29.66 + CGC_PLL_MUL_30_0 = BSP_CLOCKS_PLL_MUL(30U, 0U), ///< PLL multiplier of 30.00 + CGC_PLL_MUL_30_33 = BSP_CLOCKS_PLL_MUL(30U, 33U), ///< PLL multiplier of 30.33 + CGC_PLL_MUL_30_5 = BSP_CLOCKS_PLL_MUL(30U, 50U), ///< PLL multiplier of 30.50 + CGC_PLL_MUL_30_66 = BSP_CLOCKS_PLL_MUL(30U, 66U), ///< PLL multiplier of 30.66 + CGC_PLL_MUL_31_0 = BSP_CLOCKS_PLL_MUL(31U, 0U), ///< PLL multiplier of 31.00 + CGC_PLL_MUL_31_33 = BSP_CLOCKS_PLL_MUL(31U, 33U), ///< PLL multiplier of 31.33 + CGC_PLL_MUL_31_5 = BSP_CLOCKS_PLL_MUL(31U, 50U), ///< PLL multiplier of 31.50 + CGC_PLL_MUL_31_66 = BSP_CLOCKS_PLL_MUL(31U, 66U), ///< PLL multiplier of 31.66 + CGC_PLL_MUL_32_0 = BSP_CLOCKS_PLL_MUL(32U, 0U), ///< PLL multiplier of 32.00 + CGC_PLL_MUL_32_33 = BSP_CLOCKS_PLL_MUL(32U, 33U), ///< PLL multiplier of 32.33 + CGC_PLL_MUL_32_5 = BSP_CLOCKS_PLL_MUL(32U, 50U), ///< PLL multiplier of 32.50 + CGC_PLL_MUL_32_66 = BSP_CLOCKS_PLL_MUL(32U, 66U), ///< PLL multiplier of 32.66 + CGC_PLL_MUL_33_0 = BSP_CLOCKS_PLL_MUL(33U, 0U), ///< PLL multiplier of 33.00 + CGC_PLL_MUL_33_33 = BSP_CLOCKS_PLL_MUL(33U, 33U), ///< PLL multiplier of 33.33 + CGC_PLL_MUL_33_5 = BSP_CLOCKS_PLL_MUL(33U, 50U), ///< PLL multiplier of 33.50 + CGC_PLL_MUL_33_66 = BSP_CLOCKS_PLL_MUL(33U, 66U), ///< PLL multiplier of 33.66 + CGC_PLL_MUL_34_0 = BSP_CLOCKS_PLL_MUL(34U, 0U), ///< PLL multiplier of 34.00 + CGC_PLL_MUL_34_33 = BSP_CLOCKS_PLL_MUL(34U, 33U), ///< PLL multiplier of 34.33 + CGC_PLL_MUL_34_5 = BSP_CLOCKS_PLL_MUL(34U, 50U), ///< PLL multiplier of 34.50 + CGC_PLL_MUL_34_66 = BSP_CLOCKS_PLL_MUL(34U, 66U), ///< PLL multiplier of 34.66 + CGC_PLL_MUL_35_0 = BSP_CLOCKS_PLL_MUL(35U, 0U), ///< PLL multiplier of 35.00 + CGC_PLL_MUL_35_33 = BSP_CLOCKS_PLL_MUL(35U, 33U), ///< PLL multiplier of 35.33 + CGC_PLL_MUL_35_5 = BSP_CLOCKS_PLL_MUL(35U, 50U), ///< PLL multiplier of 35.50 + CGC_PLL_MUL_35_66 = BSP_CLOCKS_PLL_MUL(35U, 66U), ///< PLL multiplier of 35.66 + CGC_PLL_MUL_36_0 = BSP_CLOCKS_PLL_MUL(36U, 0U), ///< PLL multiplier of 36.00 + CGC_PLL_MUL_36_33 = BSP_CLOCKS_PLL_MUL(36U, 33U), ///< PLL multiplier of 36.33 + CGC_PLL_MUL_36_5 = BSP_CLOCKS_PLL_MUL(36U, 50U), ///< PLL multiplier of 36.50 + CGC_PLL_MUL_36_66 = BSP_CLOCKS_PLL_MUL(36U, 66U), ///< PLL multiplier of 36.66 + CGC_PLL_MUL_37_0 = BSP_CLOCKS_PLL_MUL(37U, 0U), ///< PLL multiplier of 37.00 + CGC_PLL_MUL_37_33 = BSP_CLOCKS_PLL_MUL(37U, 33U), ///< PLL multiplier of 37.33 + CGC_PLL_MUL_37_5 = BSP_CLOCKS_PLL_MUL(37U, 50U), ///< PLL multiplier of 37.50 + CGC_PLL_MUL_37_66 = BSP_CLOCKS_PLL_MUL(37U, 66U), ///< PLL multiplier of 37.66 + CGC_PLL_MUL_38_0 = BSP_CLOCKS_PLL_MUL(38U, 0U), ///< PLL multiplier of 38.00 + CGC_PLL_MUL_38_33 = BSP_CLOCKS_PLL_MUL(38U, 33U), ///< PLL multiplier of 38.33 + CGC_PLL_MUL_38_5 = BSP_CLOCKS_PLL_MUL(38U, 50U), ///< PLL multiplier of 38.50 + CGC_PLL_MUL_38_66 = BSP_CLOCKS_PLL_MUL(38U, 66U), ///< PLL multiplier of 38.66 + CGC_PLL_MUL_39_0 = BSP_CLOCKS_PLL_MUL(39U, 0U), ///< PLL multiplier of 39.00 + CGC_PLL_MUL_39_33 = BSP_CLOCKS_PLL_MUL(39U, 33U), ///< PLL multiplier of 39.33 + CGC_PLL_MUL_39_5 = BSP_CLOCKS_PLL_MUL(39U, 50U), ///< PLL multiplier of 39.50 + CGC_PLL_MUL_39_66 = BSP_CLOCKS_PLL_MUL(39U, 66U), ///< PLL multiplier of 39.66 + CGC_PLL_MUL_40_0 = BSP_CLOCKS_PLL_MUL(40U, 0U), ///< PLL multiplier of 40.00 + CGC_PLL_MUL_40_33 = BSP_CLOCKS_PLL_MUL(40U, 33U), ///< PLL multiplier of 40.33 + CGC_PLL_MUL_40_5 = BSP_CLOCKS_PLL_MUL(40U, 50U), ///< PLL multiplier of 40.50 + CGC_PLL_MUL_40_66 = BSP_CLOCKS_PLL_MUL(40U, 66U), ///< PLL multiplier of 40.66 + CGC_PLL_MUL_41_0 = BSP_CLOCKS_PLL_MUL(41U, 0U), ///< PLL multiplier of 41.00 + CGC_PLL_MUL_41_33 = BSP_CLOCKS_PLL_MUL(41U, 33U), ///< PLL multiplier of 41.33 + CGC_PLL_MUL_41_5 = BSP_CLOCKS_PLL_MUL(41U, 50U), ///< PLL multiplier of 41.50 + CGC_PLL_MUL_41_66 = BSP_CLOCKS_PLL_MUL(41U, 66U), ///< PLL multiplier of 41.66 + CGC_PLL_MUL_42_0 = BSP_CLOCKS_PLL_MUL(42U, 0U), ///< PLL multiplier of 42.00 + CGC_PLL_MUL_42_33 = BSP_CLOCKS_PLL_MUL(42U, 33U), ///< PLL multiplier of 42.33 + CGC_PLL_MUL_42_5 = BSP_CLOCKS_PLL_MUL(42U, 50U), ///< PLL multiplier of 42.50 + CGC_PLL_MUL_42_66 = BSP_CLOCKS_PLL_MUL(42U, 66U), ///< PLL multiplier of 42.66 + CGC_PLL_MUL_43_0 = BSP_CLOCKS_PLL_MUL(43U, 0U), ///< PLL multiplier of 43.00 + CGC_PLL_MUL_43_33 = BSP_CLOCKS_PLL_MUL(43U, 33U), ///< PLL multiplier of 43.33 + CGC_PLL_MUL_43_5 = BSP_CLOCKS_PLL_MUL(43U, 50U), ///< PLL multiplier of 43.50 + CGC_PLL_MUL_43_66 = BSP_CLOCKS_PLL_MUL(43U, 66U), ///< PLL multiplier of 43.66 + CGC_PLL_MUL_44_0 = BSP_CLOCKS_PLL_MUL(44U, 0U), ///< PLL multiplier of 44.00 + CGC_PLL_MUL_44_33 = BSP_CLOCKS_PLL_MUL(44U, 33U), ///< PLL multiplier of 44.33 + CGC_PLL_MUL_44_5 = BSP_CLOCKS_PLL_MUL(44U, 50U), ///< PLL multiplier of 44.50 + CGC_PLL_MUL_44_66 = BSP_CLOCKS_PLL_MUL(44U, 66U), ///< PLL multiplier of 44.66 + CGC_PLL_MUL_45_0 = BSP_CLOCKS_PLL_MUL(45U, 0U), ///< PLL multiplier of 45.00 + CGC_PLL_MUL_45_33 = BSP_CLOCKS_PLL_MUL(45U, 33U), ///< PLL multiplier of 45.33 + CGC_PLL_MUL_45_5 = BSP_CLOCKS_PLL_MUL(45U, 50U), ///< PLL multiplier of 45.50 + CGC_PLL_MUL_45_66 = BSP_CLOCKS_PLL_MUL(45U, 66U), ///< PLL multiplier of 45.66 + CGC_PLL_MUL_46_0 = BSP_CLOCKS_PLL_MUL(46U, 0U), ///< PLL multiplier of 46.00 + CGC_PLL_MUL_46_33 = BSP_CLOCKS_PLL_MUL(46U, 33U), ///< PLL multiplier of 46.33 + CGC_PLL_MUL_46_5 = BSP_CLOCKS_PLL_MUL(46U, 50U), ///< PLL multiplier of 46.50 + CGC_PLL_MUL_46_66 = BSP_CLOCKS_PLL_MUL(46U, 66U), ///< PLL multiplier of 46.66 + CGC_PLL_MUL_47_0 = BSP_CLOCKS_PLL_MUL(47U, 0U), ///< PLL multiplier of 47.00 + CGC_PLL_MUL_47_33 = BSP_CLOCKS_PLL_MUL(47U, 33U), ///< PLL multiplier of 47.33 + CGC_PLL_MUL_47_5 = BSP_CLOCKS_PLL_MUL(47U, 50U), ///< PLL multiplier of 47.50 + CGC_PLL_MUL_47_66 = BSP_CLOCKS_PLL_MUL(47U, 66U), ///< PLL multiplier of 47.66 + CGC_PLL_MUL_48_0 = BSP_CLOCKS_PLL_MUL(48U, 0U), ///< PLL multiplier of 48.00 + CGC_PLL_MUL_48_33 = BSP_CLOCKS_PLL_MUL(48U, 33U), ///< PLL multiplier of 48.33 + CGC_PLL_MUL_48_5 = BSP_CLOCKS_PLL_MUL(48U, 50U), ///< PLL multiplier of 48.50 + CGC_PLL_MUL_48_66 = BSP_CLOCKS_PLL_MUL(48U, 66U), ///< PLL multiplier of 48.66 + CGC_PLL_MUL_49_0 = BSP_CLOCKS_PLL_MUL(49U, 0U), ///< PLL multiplier of 49.00 + CGC_PLL_MUL_49_33 = BSP_CLOCKS_PLL_MUL(49U, 33U), ///< PLL multiplier of 49.33 + CGC_PLL_MUL_49_5 = BSP_CLOCKS_PLL_MUL(49U, 50U), ///< PLL multiplier of 49.50 + CGC_PLL_MUL_49_66 = BSP_CLOCKS_PLL_MUL(49U, 66U), ///< PLL multiplier of 49.66 + CGC_PLL_MUL_50_0 = BSP_CLOCKS_PLL_MUL(50U, 0U), ///< PLL multiplier of 50.00 + CGC_PLL_MUL_50_33 = BSP_CLOCKS_PLL_MUL(50U, 33U), ///< PLL multiplier of 50.33 + CGC_PLL_MUL_50_5 = BSP_CLOCKS_PLL_MUL(50U, 50U), ///< PLL multiplier of 50.50 + CGC_PLL_MUL_50_66 = BSP_CLOCKS_PLL_MUL(50U, 66U), ///< PLL multiplier of 50.66 + CGC_PLL_MUL_51_0 = BSP_CLOCKS_PLL_MUL(51U, 0U), ///< PLL multiplier of 51.00 + CGC_PLL_MUL_51_33 = BSP_CLOCKS_PLL_MUL(51U, 33U), ///< PLL multiplier of 51.33 + CGC_PLL_MUL_51_5 = BSP_CLOCKS_PLL_MUL(51U, 50U), ///< PLL multiplier of 51.50 + CGC_PLL_MUL_51_66 = BSP_CLOCKS_PLL_MUL(51U, 66U), ///< PLL multiplier of 51.66 + CGC_PLL_MUL_52_0 = BSP_CLOCKS_PLL_MUL(52U, 0U), ///< PLL multiplier of 52.00 + CGC_PLL_MUL_52_33 = BSP_CLOCKS_PLL_MUL(52U, 33U), ///< PLL multiplier of 52.33 + CGC_PLL_MUL_52_5 = BSP_CLOCKS_PLL_MUL(52U, 50U), ///< PLL multiplier of 52.50 + CGC_PLL_MUL_52_66 = BSP_CLOCKS_PLL_MUL(52U, 66U), ///< PLL multiplier of 52.66 + CGC_PLL_MUL_53_0 = BSP_CLOCKS_PLL_MUL(53U, 0U), ///< PLL multiplier of 53.00 + CGC_PLL_MUL_53_33 = BSP_CLOCKS_PLL_MUL(53U, 33U), ///< PLL multiplier of 53.33 + CGC_PLL_MUL_53_5 = BSP_CLOCKS_PLL_MUL(53U, 50U), ///< PLL multiplier of 53.50 + CGC_PLL_MUL_53_66 = BSP_CLOCKS_PLL_MUL(53U, 66U), ///< PLL multiplier of 53.66 + CGC_PLL_MUL_54_0 = BSP_CLOCKS_PLL_MUL(54U, 0U), ///< PLL multiplier of 54.00 + CGC_PLL_MUL_54_33 = BSP_CLOCKS_PLL_MUL(54U, 33U), ///< PLL multiplier of 54.33 + CGC_PLL_MUL_54_5 = BSP_CLOCKS_PLL_MUL(54U, 50U), ///< PLL multiplier of 54.50 + CGC_PLL_MUL_54_66 = BSP_CLOCKS_PLL_MUL(54U, 66U), ///< PLL multiplier of 54.66 + CGC_PLL_MUL_55_0 = BSP_CLOCKS_PLL_MUL(55U, 0U), ///< PLL multiplier of 55.00 + CGC_PLL_MUL_55_33 = BSP_CLOCKS_PLL_MUL(55U, 33U), ///< PLL multiplier of 55.33 + CGC_PLL_MUL_55_5 = BSP_CLOCKS_PLL_MUL(55U, 50U), ///< PLL multiplier of 55.50 + CGC_PLL_MUL_55_66 = BSP_CLOCKS_PLL_MUL(55U, 66U), ///< PLL multiplier of 55.66 + CGC_PLL_MUL_56_0 = BSP_CLOCKS_PLL_MUL(56U, 0U), ///< PLL multiplier of 56.00 + CGC_PLL_MUL_56_33 = BSP_CLOCKS_PLL_MUL(56U, 33U), ///< PLL multiplier of 56.33 + CGC_PLL_MUL_56_5 = BSP_CLOCKS_PLL_MUL(56U, 50U), ///< PLL multiplier of 56.50 + CGC_PLL_MUL_56_66 = BSP_CLOCKS_PLL_MUL(56U, 66U), ///< PLL multiplier of 56.66 + CGC_PLL_MUL_57_0 = BSP_CLOCKS_PLL_MUL(57U, 0U), ///< PLL multiplier of 57.00 + CGC_PLL_MUL_57_33 = BSP_CLOCKS_PLL_MUL(57U, 33U), ///< PLL multiplier of 57.33 + CGC_PLL_MUL_57_5 = BSP_CLOCKS_PLL_MUL(57U, 50U), ///< PLL multiplier of 57.50 + CGC_PLL_MUL_57_66 = BSP_CLOCKS_PLL_MUL(57U, 66U), ///< PLL multiplier of 57.66 + CGC_PLL_MUL_58_0 = BSP_CLOCKS_PLL_MUL(58U, 0U), ///< PLL multiplier of 58.00 + CGC_PLL_MUL_58_33 = BSP_CLOCKS_PLL_MUL(58U, 33U), ///< PLL multiplier of 58.33 + CGC_PLL_MUL_58_5 = BSP_CLOCKS_PLL_MUL(58U, 50U), ///< PLL multiplier of 58.50 + CGC_PLL_MUL_58_66 = BSP_CLOCKS_PLL_MUL(58U, 66U), ///< PLL multiplier of 58.66 + CGC_PLL_MUL_59_0 = BSP_CLOCKS_PLL_MUL(59U, 0U), ///< PLL multiplier of 59.00 + CGC_PLL_MUL_59_33 = BSP_CLOCKS_PLL_MUL(59U, 33U), ///< PLL multiplier of 59.33 + CGC_PLL_MUL_59_5 = BSP_CLOCKS_PLL_MUL(59U, 50U), ///< PLL multiplier of 59.50 + CGC_PLL_MUL_59_66 = BSP_CLOCKS_PLL_MUL(59U, 66U), ///< PLL multiplier of 59.66 + CGC_PLL_MUL_60_0 = BSP_CLOCKS_PLL_MUL(60U, 0U), ///< PLL multiplier of 60.00 + CGC_PLL_MUL_60_33 = BSP_CLOCKS_PLL_MUL(60U, 33U), ///< PLL multiplier of 60.33 + CGC_PLL_MUL_60_5 = BSP_CLOCKS_PLL_MUL(60U, 50U), ///< PLL multiplier of 60.50 + CGC_PLL_MUL_60_66 = BSP_CLOCKS_PLL_MUL(60U, 66U), ///< PLL multiplier of 60.66 + CGC_PLL_MUL_61_0 = BSP_CLOCKS_PLL_MUL(61U, 0U), ///< PLL multiplier of 61.00 + CGC_PLL_MUL_61_33 = BSP_CLOCKS_PLL_MUL(61U, 33U), ///< PLL multiplier of 61.33 + CGC_PLL_MUL_61_5 = BSP_CLOCKS_PLL_MUL(61U, 50U), ///< PLL multiplier of 61.50 + CGC_PLL_MUL_61_66 = BSP_CLOCKS_PLL_MUL(61U, 66U), ///< PLL multiplier of 61.66 + CGC_PLL_MUL_62_0 = BSP_CLOCKS_PLL_MUL(62U, 0U), ///< PLL multiplier of 62.00 + CGC_PLL_MUL_62_33 = BSP_CLOCKS_PLL_MUL(62U, 33U), ///< PLL multiplier of 62.33 + CGC_PLL_MUL_62_5 = BSP_CLOCKS_PLL_MUL(62U, 50U), ///< PLL multiplier of 62.50 + CGC_PLL_MUL_62_66 = BSP_CLOCKS_PLL_MUL(62U, 66U), ///< PLL multiplier of 62.66 + CGC_PLL_MUL_63_0 = BSP_CLOCKS_PLL_MUL(63U, 0U), ///< PLL multiplier of 63.00 + CGC_PLL_MUL_63_33 = BSP_CLOCKS_PLL_MUL(63U, 33U), ///< PLL multiplier of 63.33 + CGC_PLL_MUL_63_5 = BSP_CLOCKS_PLL_MUL(63U, 50U), ///< PLL multiplier of 63.50 + CGC_PLL_MUL_63_66 = BSP_CLOCKS_PLL_MUL(63U, 66U), ///< PLL multiplier of 63.66 + CGC_PLL_MUL_64_0 = BSP_CLOCKS_PLL_MUL(64U, 0U), ///< PLL multiplier of 64.00 + CGC_PLL_MUL_64_33 = BSP_CLOCKS_PLL_MUL(64U, 33U), ///< PLL multiplier of 64.33 + CGC_PLL_MUL_64_5 = BSP_CLOCKS_PLL_MUL(64U, 50U), ///< PLL multiplier of 64.50 + CGC_PLL_MUL_64_66 = BSP_CLOCKS_PLL_MUL(64U, 66U), ///< PLL multiplier of 64.66 + CGC_PLL_MUL_65_0 = BSP_CLOCKS_PLL_MUL(65U, 0U), ///< PLL multiplier of 65.00 + CGC_PLL_MUL_65_33 = BSP_CLOCKS_PLL_MUL(65U, 33U), ///< PLL multiplier of 65.33 + CGC_PLL_MUL_65_5 = BSP_CLOCKS_PLL_MUL(65U, 50U), ///< PLL multiplier of 65.50 + CGC_PLL_MUL_65_66 = BSP_CLOCKS_PLL_MUL(65U, 66U), ///< PLL multiplier of 65.66 + CGC_PLL_MUL_66_0 = BSP_CLOCKS_PLL_MUL(66U, 0U), ///< PLL multiplier of 66.00 + CGC_PLL_MUL_66_33 = BSP_CLOCKS_PLL_MUL(66U, 33U), ///< PLL multiplier of 66.33 + CGC_PLL_MUL_66_5 = BSP_CLOCKS_PLL_MUL(66U, 50U), ///< PLL multiplier of 66.50 + CGC_PLL_MUL_66_66 = BSP_CLOCKS_PLL_MUL(66U, 66U), ///< PLL multiplier of 66.66 + CGC_PLL_MUL_67_0 = BSP_CLOCKS_PLL_MUL(67U, 0U), ///< PLL multiplier of 67.00 + CGC_PLL_MUL_67_33 = BSP_CLOCKS_PLL_MUL(67U, 33U), ///< PLL multiplier of 67.33 + CGC_PLL_MUL_67_5 = BSP_CLOCKS_PLL_MUL(67U, 50U), ///< PLL multiplier of 67.50 + CGC_PLL_MUL_67_66 = BSP_CLOCKS_PLL_MUL(67U, 66U), ///< PLL multiplier of 67.66 + CGC_PLL_MUL_68_0 = BSP_CLOCKS_PLL_MUL(68U, 0U), ///< PLL multiplier of 68.00 + CGC_PLL_MUL_68_33 = BSP_CLOCKS_PLL_MUL(68U, 33U), ///< PLL multiplier of 68.33 + CGC_PLL_MUL_68_5 = BSP_CLOCKS_PLL_MUL(68U, 50U), ///< PLL multiplier of 68.50 + CGC_PLL_MUL_68_66 = BSP_CLOCKS_PLL_MUL(68U, 66U), ///< PLL multiplier of 68.66 + CGC_PLL_MUL_69_0 = BSP_CLOCKS_PLL_MUL(69U, 0U), ///< PLL multiplier of 69.00 + CGC_PLL_MUL_69_33 = BSP_CLOCKS_PLL_MUL(69U, 33U), ///< PLL multiplier of 69.33 + CGC_PLL_MUL_69_5 = BSP_CLOCKS_PLL_MUL(69U, 50U), ///< PLL multiplier of 69.50 + CGC_PLL_MUL_69_66 = BSP_CLOCKS_PLL_MUL(69U, 66U), ///< PLL multiplier of 69.66 + CGC_PLL_MUL_70_0 = BSP_CLOCKS_PLL_MUL(70U, 0U), ///< PLL multiplier of 70.00 + CGC_PLL_MUL_70_33 = BSP_CLOCKS_PLL_MUL(70U, 33U), ///< PLL multiplier of 70.33 + CGC_PLL_MUL_70_5 = BSP_CLOCKS_PLL_MUL(70U, 50U), ///< PLL multiplier of 70.50 + CGC_PLL_MUL_70_66 = BSP_CLOCKS_PLL_MUL(70U, 66U), ///< PLL multiplier of 70.66 + CGC_PLL_MUL_71_0 = BSP_CLOCKS_PLL_MUL(71U, 0U), ///< PLL multiplier of 71.00 + CGC_PLL_MUL_71_33 = BSP_CLOCKS_PLL_MUL(71U, 33U), ///< PLL multiplier of 71.33 + CGC_PLL_MUL_71_5 = BSP_CLOCKS_PLL_MUL(71U, 50U), ///< PLL multiplier of 71.50 + CGC_PLL_MUL_71_66 = BSP_CLOCKS_PLL_MUL(71U, 66U), ///< PLL multiplier of 71.66 + CGC_PLL_MUL_72_0 = BSP_CLOCKS_PLL_MUL(72U, 0U), ///< PLL multiplier of 72.00 + CGC_PLL_MUL_72_33 = BSP_CLOCKS_PLL_MUL(72U, 33U), ///< PLL multiplier of 72.33 + CGC_PLL_MUL_72_5 = BSP_CLOCKS_PLL_MUL(72U, 50U), ///< PLL multiplier of 72.50 + CGC_PLL_MUL_72_66 = BSP_CLOCKS_PLL_MUL(72U, 66U), ///< PLL multiplier of 72.66 + CGC_PLL_MUL_73_0 = BSP_CLOCKS_PLL_MUL(73U, 0U), ///< PLL multiplier of 73.00 + CGC_PLL_MUL_73_33 = BSP_CLOCKS_PLL_MUL(73U, 33U), ///< PLL multiplier of 73.33 + CGC_PLL_MUL_73_5 = BSP_CLOCKS_PLL_MUL(73U, 50U), ///< PLL multiplier of 73.50 + CGC_PLL_MUL_73_66 = BSP_CLOCKS_PLL_MUL(73U, 66U), ///< PLL multiplier of 73.66 + CGC_PLL_MUL_74_0 = BSP_CLOCKS_PLL_MUL(74U, 0U), ///< PLL multiplier of 74.00 + CGC_PLL_MUL_74_33 = BSP_CLOCKS_PLL_MUL(74U, 33U), ///< PLL multiplier of 74.33 + CGC_PLL_MUL_74_5 = BSP_CLOCKS_PLL_MUL(74U, 50U), ///< PLL multiplier of 74.50 + CGC_PLL_MUL_74_66 = BSP_CLOCKS_PLL_MUL(74U, 66U), ///< PLL multiplier of 74.66 + CGC_PLL_MUL_75_0 = BSP_CLOCKS_PLL_MUL(75U, 0U), ///< PLL multiplier of 75.00 + CGC_PLL_MUL_75_33 = BSP_CLOCKS_PLL_MUL(75U, 33U), ///< PLL multiplier of 75.33 + CGC_PLL_MUL_75_5 = BSP_CLOCKS_PLL_MUL(75U, 50U), ///< PLL multiplier of 75.50 + CGC_PLL_MUL_75_66 = BSP_CLOCKS_PLL_MUL(75U, 66U), ///< PLL multiplier of 75.66 + CGC_PLL_MUL_76_0 = BSP_CLOCKS_PLL_MUL(76U, 0U), ///< PLL multiplier of 76.00 + CGC_PLL_MUL_76_33 = BSP_CLOCKS_PLL_MUL(76U, 33U), ///< PLL multiplier of 76.33 + CGC_PLL_MUL_76_5 = BSP_CLOCKS_PLL_MUL(76U, 50U), ///< PLL multiplier of 76.50 + CGC_PLL_MUL_76_66 = BSP_CLOCKS_PLL_MUL(76U, 66U), ///< PLL multiplier of 76.66 + CGC_PLL_MUL_77_0 = BSP_CLOCKS_PLL_MUL(77U, 0U), ///< PLL multiplier of 77.00 + CGC_PLL_MUL_77_33 = BSP_CLOCKS_PLL_MUL(77U, 33U), ///< PLL multiplier of 77.33 + CGC_PLL_MUL_77_5 = BSP_CLOCKS_PLL_MUL(77U, 50U), ///< PLL multiplier of 77.50 + CGC_PLL_MUL_77_66 = BSP_CLOCKS_PLL_MUL(77U, 66U), ///< PLL multiplier of 77.66 + CGC_PLL_MUL_78_0 = BSP_CLOCKS_PLL_MUL(78U, 0U), ///< PLL multiplier of 78.00 + CGC_PLL_MUL_78_33 = BSP_CLOCKS_PLL_MUL(78U, 33U), ///< PLL multiplier of 78.33 + CGC_PLL_MUL_78_5 = BSP_CLOCKS_PLL_MUL(78U, 50U), ///< PLL multiplier of 78.50 + CGC_PLL_MUL_78_66 = BSP_CLOCKS_PLL_MUL(78U, 66U), ///< PLL multiplier of 78.66 + CGC_PLL_MUL_79_0 = BSP_CLOCKS_PLL_MUL(79U, 0U), ///< PLL multiplier of 79.00 + CGC_PLL_MUL_79_33 = BSP_CLOCKS_PLL_MUL(79U, 33U), ///< PLL multiplier of 79.33 + CGC_PLL_MUL_79_5 = BSP_CLOCKS_PLL_MUL(79U, 50U), ///< PLL multiplier of 79.50 + CGC_PLL_MUL_79_66 = BSP_CLOCKS_PLL_MUL(79U, 66U), ///< PLL multiplier of 79.66 + CGC_PLL_MUL_80_0 = BSP_CLOCKS_PLL_MUL(80U, 0U), ///< PLL multiplier of 80.00 + CGC_PLL_MUL_80_33 = BSP_CLOCKS_PLL_MUL(80U, 33U), ///< PLL multiplier of 80.33 + CGC_PLL_MUL_80_5 = BSP_CLOCKS_PLL_MUL(80U, 50U), ///< PLL multiplier of 80.50 + CGC_PLL_MUL_80_66 = BSP_CLOCKS_PLL_MUL(80U, 66U), ///< PLL multiplier of 80.66 + CGC_PLL_MUL_81_0 = BSP_CLOCKS_PLL_MUL(81U, 0U), ///< PLL multiplier of 81.00 + CGC_PLL_MUL_81_33 = BSP_CLOCKS_PLL_MUL(81U, 33U), ///< PLL multiplier of 81.33 + CGC_PLL_MUL_81_5 = BSP_CLOCKS_PLL_MUL(81U, 50U), ///< PLL multiplier of 81.50 + CGC_PLL_MUL_81_66 = BSP_CLOCKS_PLL_MUL(81U, 66U), ///< PLL multiplier of 81.66 + CGC_PLL_MUL_82_0 = BSP_CLOCKS_PLL_MUL(82U, 0U), ///< PLL multiplier of 82.00 + CGC_PLL_MUL_82_33 = BSP_CLOCKS_PLL_MUL(82U, 33U), ///< PLL multiplier of 82.33 + CGC_PLL_MUL_82_5 = BSP_CLOCKS_PLL_MUL(82U, 50U), ///< PLL multiplier of 82.50 + CGC_PLL_MUL_82_66 = BSP_CLOCKS_PLL_MUL(82U, 66U), ///< PLL multiplier of 82.66 + CGC_PLL_MUL_83_0 = BSP_CLOCKS_PLL_MUL(83U, 0U), ///< PLL multiplier of 83.00 + CGC_PLL_MUL_83_33 = BSP_CLOCKS_PLL_MUL(83U, 33U), ///< PLL multiplier of 83.33 + CGC_PLL_MUL_83_5 = BSP_CLOCKS_PLL_MUL(83U, 50U), ///< PLL multiplier of 83.50 + CGC_PLL_MUL_83_66 = BSP_CLOCKS_PLL_MUL(83U, 66U), ///< PLL multiplier of 83.66 + CGC_PLL_MUL_84_0 = BSP_CLOCKS_PLL_MUL(84U, 0U), ///< PLL multiplier of 84.00 + CGC_PLL_MUL_84_33 = BSP_CLOCKS_PLL_MUL(84U, 33U), ///< PLL multiplier of 84.33 + CGC_PLL_MUL_84_5 = BSP_CLOCKS_PLL_MUL(84U, 50U), ///< PLL multiplier of 84.50 + CGC_PLL_MUL_84_66 = BSP_CLOCKS_PLL_MUL(84U, 66U), ///< PLL multiplier of 84.66 + CGC_PLL_MUL_85_0 = BSP_CLOCKS_PLL_MUL(85U, 0U), ///< PLL multiplier of 85.00 + CGC_PLL_MUL_85_33 = BSP_CLOCKS_PLL_MUL(85U, 33U), ///< PLL multiplier of 85.33 + CGC_PLL_MUL_85_5 = BSP_CLOCKS_PLL_MUL(85U, 50U), ///< PLL multiplier of 85.50 + CGC_PLL_MUL_85_66 = BSP_CLOCKS_PLL_MUL(85U, 66U), ///< PLL multiplier of 85.66 + CGC_PLL_MUL_86_0 = BSP_CLOCKS_PLL_MUL(86U, 0U), ///< PLL multiplier of 86.00 + CGC_PLL_MUL_86_33 = BSP_CLOCKS_PLL_MUL(86U, 33U), ///< PLL multiplier of 86.33 + CGC_PLL_MUL_86_5 = BSP_CLOCKS_PLL_MUL(86U, 50U), ///< PLL multiplier of 86.50 + CGC_PLL_MUL_86_66 = BSP_CLOCKS_PLL_MUL(86U, 66U), ///< PLL multiplier of 86.66 + CGC_PLL_MUL_87_0 = BSP_CLOCKS_PLL_MUL(87U, 0U), ///< PLL multiplier of 87.00 + CGC_PLL_MUL_87_33 = BSP_CLOCKS_PLL_MUL(87U, 33U), ///< PLL multiplier of 87.33 + CGC_PLL_MUL_87_5 = BSP_CLOCKS_PLL_MUL(87U, 50U), ///< PLL multiplier of 87.50 + CGC_PLL_MUL_87_66 = BSP_CLOCKS_PLL_MUL(87U, 66U), ///< PLL multiplier of 87.66 + CGC_PLL_MUL_88_0 = BSP_CLOCKS_PLL_MUL(88U, 0U), ///< PLL multiplier of 88.00 + CGC_PLL_MUL_88_33 = BSP_CLOCKS_PLL_MUL(88U, 33U), ///< PLL multiplier of 88.33 + CGC_PLL_MUL_88_5 = BSP_CLOCKS_PLL_MUL(88U, 50U), ///< PLL multiplier of 88.50 + CGC_PLL_MUL_88_66 = BSP_CLOCKS_PLL_MUL(88U, 66U), ///< PLL multiplier of 88.66 + CGC_PLL_MUL_89_0 = BSP_CLOCKS_PLL_MUL(89U, 0U), ///< PLL multiplier of 89.00 + CGC_PLL_MUL_89_33 = BSP_CLOCKS_PLL_MUL(89U, 33U), ///< PLL multiplier of 89.33 + CGC_PLL_MUL_89_5 = BSP_CLOCKS_PLL_MUL(89U, 50U), ///< PLL multiplier of 89.50 + CGC_PLL_MUL_89_66 = BSP_CLOCKS_PLL_MUL(89U, 66U), ///< PLL multiplier of 89.66 + CGC_PLL_MUL_90_0 = BSP_CLOCKS_PLL_MUL(90U, 0U), ///< PLL multiplier of 90.00 + CGC_PLL_MUL_90_33 = BSP_CLOCKS_PLL_MUL(90U, 33U), ///< PLL multiplier of 90.33 + CGC_PLL_MUL_90_5 = BSP_CLOCKS_PLL_MUL(90U, 50U), ///< PLL multiplier of 90.50 + CGC_PLL_MUL_90_66 = BSP_CLOCKS_PLL_MUL(90U, 66U), ///< PLL multiplier of 90.66 + CGC_PLL_MUL_91_0 = BSP_CLOCKS_PLL_MUL(91U, 0U), ///< PLL multiplier of 91.00 + CGC_PLL_MUL_91_33 = BSP_CLOCKS_PLL_MUL(91U, 33U), ///< PLL multiplier of 91.33 + CGC_PLL_MUL_91_5 = BSP_CLOCKS_PLL_MUL(91U, 50U), ///< PLL multiplier of 91.50 + CGC_PLL_MUL_91_66 = BSP_CLOCKS_PLL_MUL(91U, 66U), ///< PLL multiplier of 91.66 + CGC_PLL_MUL_92_0 = BSP_CLOCKS_PLL_MUL(92U, 0U), ///< PLL multiplier of 92.00 + CGC_PLL_MUL_92_33 = BSP_CLOCKS_PLL_MUL(92U, 33U), ///< PLL multiplier of 92.33 + CGC_PLL_MUL_92_5 = BSP_CLOCKS_PLL_MUL(92U, 50U), ///< PLL multiplier of 92.50 + CGC_PLL_MUL_92_66 = BSP_CLOCKS_PLL_MUL(92U, 66U), ///< PLL multiplier of 92.66 + CGC_PLL_MUL_93_0 = BSP_CLOCKS_PLL_MUL(93U, 0U), ///< PLL multiplier of 93.00 + CGC_PLL_MUL_93_33 = BSP_CLOCKS_PLL_MUL(93U, 33U), ///< PLL multiplier of 93.33 + CGC_PLL_MUL_93_5 = BSP_CLOCKS_PLL_MUL(93U, 50U), ///< PLL multiplier of 93.50 + CGC_PLL_MUL_93_66 = BSP_CLOCKS_PLL_MUL(93U, 66U), ///< PLL multiplier of 93.66 + CGC_PLL_MUL_94_0 = BSP_CLOCKS_PLL_MUL(94U, 0U), ///< PLL multiplier of 94.00 + CGC_PLL_MUL_94_33 = BSP_CLOCKS_PLL_MUL(94U, 33U), ///< PLL multiplier of 94.33 + CGC_PLL_MUL_94_5 = BSP_CLOCKS_PLL_MUL(94U, 50U), ///< PLL multiplier of 94.50 + CGC_PLL_MUL_94_66 = BSP_CLOCKS_PLL_MUL(94U, 66U), ///< PLL multiplier of 94.66 + CGC_PLL_MUL_95_0 = BSP_CLOCKS_PLL_MUL(95U, 0U), ///< PLL multiplier of 95.00 + CGC_PLL_MUL_95_33 = BSP_CLOCKS_PLL_MUL(95U, 33U), ///< PLL multiplier of 95.33 + CGC_PLL_MUL_95_5 = BSP_CLOCKS_PLL_MUL(95U, 50U), ///< PLL multiplier of 95.50 + CGC_PLL_MUL_95_66 = BSP_CLOCKS_PLL_MUL(95U, 66U), ///< PLL multiplier of 95.66 + CGC_PLL_MUL_96_0 = BSP_CLOCKS_PLL_MUL(96U, 0U), ///< PLL multiplier of 96.00 + CGC_PLL_MUL_96_33 = BSP_CLOCKS_PLL_MUL(96U, 33U), ///< PLL multiplier of 96.33 + CGC_PLL_MUL_96_5 = BSP_CLOCKS_PLL_MUL(96U, 50U), ///< PLL multiplier of 96.50 + CGC_PLL_MUL_96_66 = BSP_CLOCKS_PLL_MUL(96U, 66U), ///< PLL multiplier of 96.66 + CGC_PLL_MUL_97_0 = BSP_CLOCKS_PLL_MUL(97U, 0U), ///< PLL multiplier of 97.00 + CGC_PLL_MUL_97_33 = BSP_CLOCKS_PLL_MUL(97U, 33U), ///< PLL multiplier of 97.33 + CGC_PLL_MUL_97_5 = BSP_CLOCKS_PLL_MUL(97U, 50U), ///< PLL multiplier of 97.50 + CGC_PLL_MUL_97_66 = BSP_CLOCKS_PLL_MUL(97U, 66U), ///< PLL multiplier of 97.66 + CGC_PLL_MUL_98_0 = BSP_CLOCKS_PLL_MUL(98U, 0U), ///< PLL multiplier of 98.00 + CGC_PLL_MUL_98_33 = BSP_CLOCKS_PLL_MUL(98U, 33U), ///< PLL multiplier of 98.33 + CGC_PLL_MUL_98_5 = BSP_CLOCKS_PLL_MUL(98U, 50U), ///< PLL multiplier of 98.50 + CGC_PLL_MUL_98_66 = BSP_CLOCKS_PLL_MUL(98U, 66U), ///< PLL multiplier of 98.66 + CGC_PLL_MUL_99_0 = BSP_CLOCKS_PLL_MUL(99U, 0U), ///< PLL multiplier of 99.00 + CGC_PLL_MUL_99_33 = BSP_CLOCKS_PLL_MUL(99U, 33U), ///< PLL multiplier of 99.33 + CGC_PLL_MUL_99_5 = BSP_CLOCKS_PLL_MUL(99U, 50U), ///< PLL multiplier of 99.50 + CGC_PLL_MUL_99_66 = BSP_CLOCKS_PLL_MUL(99U, 66U), ///< PLL multiplier of 99.66 + CGC_PLL_MUL_100_0 = BSP_CLOCKS_PLL_MUL(100U, 0U), ///< PLL multiplier of 100.00 + CGC_PLL_MUL_100_33 = BSP_CLOCKS_PLL_MUL(100U, 33U), ///< PLL multiplier of 100.33 + CGC_PLL_MUL_100_5 = BSP_CLOCKS_PLL_MUL(100U, 50U), ///< PLL multiplier of 100.50 + CGC_PLL_MUL_100_66 = BSP_CLOCKS_PLL_MUL(100U, 66U), ///< PLL multiplier of 100.66 + CGC_PLL_MUL_101_0 = BSP_CLOCKS_PLL_MUL(101U, 0U), ///< PLL multiplier of 101.00 + CGC_PLL_MUL_101_33 = BSP_CLOCKS_PLL_MUL(101U, 33U), ///< PLL multiplier of 101.33 + CGC_PLL_MUL_101_5 = BSP_CLOCKS_PLL_MUL(101U, 50U), ///< PLL multiplier of 101.50 + CGC_PLL_MUL_101_66 = BSP_CLOCKS_PLL_MUL(101U, 66U), ///< PLL multiplier of 101.66 + CGC_PLL_MUL_102_0 = BSP_CLOCKS_PLL_MUL(102U, 0U), ///< PLL multiplier of 102.00 + CGC_PLL_MUL_102_33 = BSP_CLOCKS_PLL_MUL(102U, 33U), ///< PLL multiplier of 102.33 + CGC_PLL_MUL_102_5 = BSP_CLOCKS_PLL_MUL(102U, 50U), ///< PLL multiplier of 102.50 + CGC_PLL_MUL_102_66 = BSP_CLOCKS_PLL_MUL(102U, 66U), ///< PLL multiplier of 102.66 + CGC_PLL_MUL_103_0 = BSP_CLOCKS_PLL_MUL(103U, 0U), ///< PLL multiplier of 103.00 + CGC_PLL_MUL_103_33 = BSP_CLOCKS_PLL_MUL(103U, 33U), ///< PLL multiplier of 103.33 + CGC_PLL_MUL_103_5 = BSP_CLOCKS_PLL_MUL(103U, 50U), ///< PLL multiplier of 103.50 + CGC_PLL_MUL_103_66 = BSP_CLOCKS_PLL_MUL(103U, 66U), ///< PLL multiplier of 103.66 + CGC_PLL_MUL_104_0 = BSP_CLOCKS_PLL_MUL(104U, 0U), ///< PLL multiplier of 104.00 + CGC_PLL_MUL_104_33 = BSP_CLOCKS_PLL_MUL(104U, 33U), ///< PLL multiplier of 104.33 + CGC_PLL_MUL_104_5 = BSP_CLOCKS_PLL_MUL(104U, 50U), ///< PLL multiplier of 104.50 + CGC_PLL_MUL_104_66 = BSP_CLOCKS_PLL_MUL(104U, 66U), ///< PLL multiplier of 104.66 + CGC_PLL_MUL_105_0 = BSP_CLOCKS_PLL_MUL(105U, 0U), ///< PLL multiplier of 105.00 + CGC_PLL_MUL_105_33 = BSP_CLOCKS_PLL_MUL(105U, 33U), ///< PLL multiplier of 105.33 + CGC_PLL_MUL_105_5 = BSP_CLOCKS_PLL_MUL(105U, 50U), ///< PLL multiplier of 105.50 + CGC_PLL_MUL_105_66 = BSP_CLOCKS_PLL_MUL(105U, 66U), ///< PLL multiplier of 105.66 + CGC_PLL_MUL_106_0 = BSP_CLOCKS_PLL_MUL(106U, 0U), ///< PLL multiplier of 106.00 + CGC_PLL_MUL_106_33 = BSP_CLOCKS_PLL_MUL(106U, 33U), ///< PLL multiplier of 106.33 + CGC_PLL_MUL_106_5 = BSP_CLOCKS_PLL_MUL(106U, 50U), ///< PLL multiplier of 106.50 + CGC_PLL_MUL_106_66 = BSP_CLOCKS_PLL_MUL(106U, 66U), ///< PLL multiplier of 106.66 + CGC_PLL_MUL_107_0 = BSP_CLOCKS_PLL_MUL(107U, 0U), ///< PLL multiplier of 107.00 + CGC_PLL_MUL_107_33 = BSP_CLOCKS_PLL_MUL(107U, 33U), ///< PLL multiplier of 107.33 + CGC_PLL_MUL_107_5 = BSP_CLOCKS_PLL_MUL(107U, 50U), ///< PLL multiplier of 107.50 + CGC_PLL_MUL_107_66 = BSP_CLOCKS_PLL_MUL(107U, 66U), ///< PLL multiplier of 107.66 + CGC_PLL_MUL_108_0 = BSP_CLOCKS_PLL_MUL(108U, 0U), ///< PLL multiplier of 108.00 + CGC_PLL_MUL_108_33 = BSP_CLOCKS_PLL_MUL(108U, 33U), ///< PLL multiplier of 108.33 + CGC_PLL_MUL_108_5 = BSP_CLOCKS_PLL_MUL(108U, 50U), ///< PLL multiplier of 108.50 + CGC_PLL_MUL_108_66 = BSP_CLOCKS_PLL_MUL(108U, 66U), ///< PLL multiplier of 108.66 + CGC_PLL_MUL_109_0 = BSP_CLOCKS_PLL_MUL(109U, 0U), ///< PLL multiplier of 109.00 + CGC_PLL_MUL_109_33 = BSP_CLOCKS_PLL_MUL(109U, 33U), ///< PLL multiplier of 109.33 + CGC_PLL_MUL_109_5 = BSP_CLOCKS_PLL_MUL(109U, 50U), ///< PLL multiplier of 109.50 + CGC_PLL_MUL_109_66 = BSP_CLOCKS_PLL_MUL(109U, 66U), ///< PLL multiplier of 109.66 + CGC_PLL_MUL_110_0 = BSP_CLOCKS_PLL_MUL(110U, 0U), ///< PLL multiplier of 110.00 + CGC_PLL_MUL_110_33 = BSP_CLOCKS_PLL_MUL(110U, 33U), ///< PLL multiplier of 110.33 + CGC_PLL_MUL_110_5 = BSP_CLOCKS_PLL_MUL(110U, 50U), ///< PLL multiplier of 110.50 + CGC_PLL_MUL_110_66 = BSP_CLOCKS_PLL_MUL(110U, 66U), ///< PLL multiplier of 110.66 + CGC_PLL_MUL_111_0 = BSP_CLOCKS_PLL_MUL(111U, 0U), ///< PLL multiplier of 111.00 + CGC_PLL_MUL_111_33 = BSP_CLOCKS_PLL_MUL(111U, 33U), ///< PLL multiplier of 111.33 + CGC_PLL_MUL_111_5 = BSP_CLOCKS_PLL_MUL(111U, 50U), ///< PLL multiplier of 111.50 + CGC_PLL_MUL_111_66 = BSP_CLOCKS_PLL_MUL(111U, 66U), ///< PLL multiplier of 111.66 + CGC_PLL_MUL_112_0 = BSP_CLOCKS_PLL_MUL(112U, 0U), ///< PLL multiplier of 112.00 + CGC_PLL_MUL_112_33 = BSP_CLOCKS_PLL_MUL(112U, 33U), ///< PLL multiplier of 112.33 + CGC_PLL_MUL_112_5 = BSP_CLOCKS_PLL_MUL(112U, 50U), ///< PLL multiplier of 112.50 + CGC_PLL_MUL_112_66 = BSP_CLOCKS_PLL_MUL(112U, 66U), ///< PLL multiplier of 112.66 + CGC_PLL_MUL_113_0 = BSP_CLOCKS_PLL_MUL(113U, 0U), ///< PLL multiplier of 113.00 + CGC_PLL_MUL_113_33 = BSP_CLOCKS_PLL_MUL(113U, 33U), ///< PLL multiplier of 113.33 + CGC_PLL_MUL_113_5 = BSP_CLOCKS_PLL_MUL(113U, 50U), ///< PLL multiplier of 113.50 + CGC_PLL_MUL_113_66 = BSP_CLOCKS_PLL_MUL(113U, 66U), ///< PLL multiplier of 113.66 + CGC_PLL_MUL_114_0 = BSP_CLOCKS_PLL_MUL(114U, 0U), ///< PLL multiplier of 114.00 + CGC_PLL_MUL_114_33 = BSP_CLOCKS_PLL_MUL(114U, 33U), ///< PLL multiplier of 114.33 + CGC_PLL_MUL_114_5 = BSP_CLOCKS_PLL_MUL(114U, 50U), ///< PLL multiplier of 114.50 + CGC_PLL_MUL_114_66 = BSP_CLOCKS_PLL_MUL(114U, 66U), ///< PLL multiplier of 114.66 + CGC_PLL_MUL_115_0 = BSP_CLOCKS_PLL_MUL(115U, 0U), ///< PLL multiplier of 115.00 + CGC_PLL_MUL_115_33 = BSP_CLOCKS_PLL_MUL(115U, 33U), ///< PLL multiplier of 115.33 + CGC_PLL_MUL_115_5 = BSP_CLOCKS_PLL_MUL(115U, 50U), ///< PLL multiplier of 115.50 + CGC_PLL_MUL_115_66 = BSP_CLOCKS_PLL_MUL(115U, 66U), ///< PLL multiplier of 115.66 + CGC_PLL_MUL_116_0 = BSP_CLOCKS_PLL_MUL(116U, 0U), ///< PLL multiplier of 116.00 + CGC_PLL_MUL_116_33 = BSP_CLOCKS_PLL_MUL(116U, 33U), ///< PLL multiplier of 116.33 + CGC_PLL_MUL_116_5 = BSP_CLOCKS_PLL_MUL(116U, 50U), ///< PLL multiplier of 116.50 + CGC_PLL_MUL_116_66 = BSP_CLOCKS_PLL_MUL(116U, 66U), ///< PLL multiplier of 116.66 + CGC_PLL_MUL_117_0 = BSP_CLOCKS_PLL_MUL(117U, 0U), ///< PLL multiplier of 117.00 + CGC_PLL_MUL_117_33 = BSP_CLOCKS_PLL_MUL(117U, 33U), ///< PLL multiplier of 117.33 + CGC_PLL_MUL_117_5 = BSP_CLOCKS_PLL_MUL(117U, 50U), ///< PLL multiplier of 117.50 + CGC_PLL_MUL_117_66 = BSP_CLOCKS_PLL_MUL(117U, 66U), ///< PLL multiplier of 117.66 + CGC_PLL_MUL_118_0 = BSP_CLOCKS_PLL_MUL(118U, 0U), ///< PLL multiplier of 118.00 + CGC_PLL_MUL_118_33 = BSP_CLOCKS_PLL_MUL(118U, 33U), ///< PLL multiplier of 118.33 + CGC_PLL_MUL_118_5 = BSP_CLOCKS_PLL_MUL(118U, 50U), ///< PLL multiplier of 118.50 + CGC_PLL_MUL_118_66 = BSP_CLOCKS_PLL_MUL(118U, 66U), ///< PLL multiplier of 118.66 + CGC_PLL_MUL_119_0 = BSP_CLOCKS_PLL_MUL(119U, 0U), ///< PLL multiplier of 119.00 + CGC_PLL_MUL_119_33 = BSP_CLOCKS_PLL_MUL(119U, 33U), ///< PLL multiplier of 119.33 + CGC_PLL_MUL_119_5 = BSP_CLOCKS_PLL_MUL(119U, 50U), ///< PLL multiplier of 119.50 + CGC_PLL_MUL_119_66 = BSP_CLOCKS_PLL_MUL(119U, 66U), ///< PLL multiplier of 119.66 + CGC_PLL_MUL_120_0 = BSP_CLOCKS_PLL_MUL(120U, 0U), ///< PLL multiplier of 120.00 + CGC_PLL_MUL_120_33 = BSP_CLOCKS_PLL_MUL(120U, 33U), ///< PLL multiplier of 120.33 + CGC_PLL_MUL_120_5 = BSP_CLOCKS_PLL_MUL(120U, 50U), ///< PLL multiplier of 120.50 + CGC_PLL_MUL_120_66 = BSP_CLOCKS_PLL_MUL(120U, 66U), ///< PLL multiplier of 120.66 + CGC_PLL_MUL_121_0 = BSP_CLOCKS_PLL_MUL(121U, 0U), ///< PLL multiplier of 121.00 + CGC_PLL_MUL_121_33 = BSP_CLOCKS_PLL_MUL(121U, 33U), ///< PLL multiplier of 121.33 + CGC_PLL_MUL_121_5 = BSP_CLOCKS_PLL_MUL(121U, 50U), ///< PLL multiplier of 121.50 + CGC_PLL_MUL_121_66 = BSP_CLOCKS_PLL_MUL(121U, 66U), ///< PLL multiplier of 121.66 + CGC_PLL_MUL_122_0 = BSP_CLOCKS_PLL_MUL(122U, 0U), ///< PLL multiplier of 122.00 + CGC_PLL_MUL_122_33 = BSP_CLOCKS_PLL_MUL(122U, 33U), ///< PLL multiplier of 122.33 + CGC_PLL_MUL_122_5 = BSP_CLOCKS_PLL_MUL(122U, 50U), ///< PLL multiplier of 122.50 + CGC_PLL_MUL_122_66 = BSP_CLOCKS_PLL_MUL(122U, 66U), ///< PLL multiplier of 122.66 + CGC_PLL_MUL_123_0 = BSP_CLOCKS_PLL_MUL(123U, 0U), ///< PLL multiplier of 123.00 + CGC_PLL_MUL_123_33 = BSP_CLOCKS_PLL_MUL(123U, 33U), ///< PLL multiplier of 123.33 + CGC_PLL_MUL_123_5 = BSP_CLOCKS_PLL_MUL(123U, 50U), ///< PLL multiplier of 123.50 + CGC_PLL_MUL_123_66 = BSP_CLOCKS_PLL_MUL(123U, 66U), ///< PLL multiplier of 123.66 + CGC_PLL_MUL_124_0 = BSP_CLOCKS_PLL_MUL(124U, 0U), ///< PLL multiplier of 124.00 + CGC_PLL_MUL_124_33 = BSP_CLOCKS_PLL_MUL(124U, 33U), ///< PLL multiplier of 124.33 + CGC_PLL_MUL_124_5 = BSP_CLOCKS_PLL_MUL(124U, 50U), ///< PLL multiplier of 124.50 + CGC_PLL_MUL_124_66 = BSP_CLOCKS_PLL_MUL(124U, 66U), ///< PLL multiplier of 124.66 + CGC_PLL_MUL_125_0 = BSP_CLOCKS_PLL_MUL(125U, 0U), ///< PLL multiplier of 125.00 + CGC_PLL_MUL_125_33 = BSP_CLOCKS_PLL_MUL(125U, 33U), ///< PLL multiplier of 125.33 + CGC_PLL_MUL_125_5 = BSP_CLOCKS_PLL_MUL(125U, 50U), ///< PLL multiplier of 125.50 + CGC_PLL_MUL_125_66 = BSP_CLOCKS_PLL_MUL(125U, 66U), ///< PLL multiplier of 125.66 + CGC_PLL_MUL_126_0 = BSP_CLOCKS_PLL_MUL(126U, 0U), ///< PLL multiplier of 126.00 + CGC_PLL_MUL_126_33 = BSP_CLOCKS_PLL_MUL(126U, 33U), ///< PLL multiplier of 126.33 + CGC_PLL_MUL_126_5 = BSP_CLOCKS_PLL_MUL(126U, 50U), ///< PLL multiplier of 126.50 + CGC_PLL_MUL_126_66 = BSP_CLOCKS_PLL_MUL(126U, 66U), ///< PLL multiplier of 126.66 + CGC_PLL_MUL_127_0 = BSP_CLOCKS_PLL_MUL(127U, 0U), ///< PLL multiplier of 127.00 + CGC_PLL_MUL_127_33 = BSP_CLOCKS_PLL_MUL(127U, 33U), ///< PLL multiplier of 127.33 + CGC_PLL_MUL_127_5 = BSP_CLOCKS_PLL_MUL(127U, 50U), ///< PLL multiplier of 127.50 + CGC_PLL_MUL_127_66 = BSP_CLOCKS_PLL_MUL(127U, 66U), ///< PLL multiplier of 127.66 + CGC_PLL_MUL_128_0 = BSP_CLOCKS_PLL_MUL(128U, 0U), ///< PLL multiplier of 128.00 + CGC_PLL_MUL_128_33 = BSP_CLOCKS_PLL_MUL(128U, 33U), ///< PLL multiplier of 128.33 + CGC_PLL_MUL_128_5 = BSP_CLOCKS_PLL_MUL(128U, 50U), ///< PLL multiplier of 128.50 + CGC_PLL_MUL_128_66 = BSP_CLOCKS_PLL_MUL(128U, 66U), ///< PLL multiplier of 128.66 + CGC_PLL_MUL_129_0 = BSP_CLOCKS_PLL_MUL(129U, 0U), ///< PLL multiplier of 129.00 + CGC_PLL_MUL_129_33 = BSP_CLOCKS_PLL_MUL(129U, 33U), ///< PLL multiplier of 129.33 + CGC_PLL_MUL_129_5 = BSP_CLOCKS_PLL_MUL(129U, 50U), ///< PLL multiplier of 129.50 + CGC_PLL_MUL_129_66 = BSP_CLOCKS_PLL_MUL(129U, 66U), ///< PLL multiplier of 129.66 + CGC_PLL_MUL_130_0 = BSP_CLOCKS_PLL_MUL(130U, 0U), ///< PLL multiplier of 130.00 + CGC_PLL_MUL_130_33 = BSP_CLOCKS_PLL_MUL(130U, 33U), ///< PLL multiplier of 130.33 + CGC_PLL_MUL_130_5 = BSP_CLOCKS_PLL_MUL(130U, 50U), ///< PLL multiplier of 130.50 + CGC_PLL_MUL_130_66 = BSP_CLOCKS_PLL_MUL(130U, 66U), ///< PLL multiplier of 130.66 + CGC_PLL_MUL_131_0 = BSP_CLOCKS_PLL_MUL(131U, 0U), ///< PLL multiplier of 131.00 + CGC_PLL_MUL_131_33 = BSP_CLOCKS_PLL_MUL(131U, 33U), ///< PLL multiplier of 131.33 + CGC_PLL_MUL_131_5 = BSP_CLOCKS_PLL_MUL(131U, 50U), ///< PLL multiplier of 131.50 + CGC_PLL_MUL_131_66 = BSP_CLOCKS_PLL_MUL(131U, 66U), ///< PLL multiplier of 131.66 + CGC_PLL_MUL_132_0 = BSP_CLOCKS_PLL_MUL(132U, 0U), ///< PLL multiplier of 132.00 + CGC_PLL_MUL_132_33 = BSP_CLOCKS_PLL_MUL(132U, 33U), ///< PLL multiplier of 132.33 + CGC_PLL_MUL_132_5 = BSP_CLOCKS_PLL_MUL(132U, 50U), ///< PLL multiplier of 132.50 + CGC_PLL_MUL_132_66 = BSP_CLOCKS_PLL_MUL(132U, 66U), ///< PLL multiplier of 132.66 + CGC_PLL_MUL_133_0 = BSP_CLOCKS_PLL_MUL(133U, 0U), ///< PLL multiplier of 133.00 + CGC_PLL_MUL_133_33 = BSP_CLOCKS_PLL_MUL(133U, 33U), ///< PLL multiplier of 133.33 + CGC_PLL_MUL_133_5 = BSP_CLOCKS_PLL_MUL(133U, 50U), ///< PLL multiplier of 133.50 + CGC_PLL_MUL_133_66 = BSP_CLOCKS_PLL_MUL(133U, 66U), ///< PLL multiplier of 133.66 + CGC_PLL_MUL_134_0 = BSP_CLOCKS_PLL_MUL(134U, 0U), ///< PLL multiplier of 134.00 + CGC_PLL_MUL_134_33 = BSP_CLOCKS_PLL_MUL(134U, 33U), ///< PLL multiplier of 134.33 + CGC_PLL_MUL_134_5 = BSP_CLOCKS_PLL_MUL(134U, 50U), ///< PLL multiplier of 134.50 + CGC_PLL_MUL_134_66 = BSP_CLOCKS_PLL_MUL(134U, 66U), ///< PLL multiplier of 134.66 + CGC_PLL_MUL_135_0 = BSP_CLOCKS_PLL_MUL(135U, 0U), ///< PLL multiplier of 135.00 + CGC_PLL_MUL_135_33 = BSP_CLOCKS_PLL_MUL(135U, 33U), ///< PLL multiplier of 135.33 + CGC_PLL_MUL_135_5 = BSP_CLOCKS_PLL_MUL(135U, 50U), ///< PLL multiplier of 135.50 + CGC_PLL_MUL_135_66 = BSP_CLOCKS_PLL_MUL(135U, 66U), ///< PLL multiplier of 135.66 + CGC_PLL_MUL_136_0 = BSP_CLOCKS_PLL_MUL(136U, 0U), ///< PLL multiplier of 136.00 + CGC_PLL_MUL_136_33 = BSP_CLOCKS_PLL_MUL(136U, 33U), ///< PLL multiplier of 136.33 + CGC_PLL_MUL_136_5 = BSP_CLOCKS_PLL_MUL(136U, 50U), ///< PLL multiplier of 136.50 + CGC_PLL_MUL_136_66 = BSP_CLOCKS_PLL_MUL(136U, 66U), ///< PLL multiplier of 136.66 + CGC_PLL_MUL_137_0 = BSP_CLOCKS_PLL_MUL(137U, 0U), ///< PLL multiplier of 137.00 + CGC_PLL_MUL_137_33 = BSP_CLOCKS_PLL_MUL(137U, 33U), ///< PLL multiplier of 137.33 + CGC_PLL_MUL_137_5 = BSP_CLOCKS_PLL_MUL(137U, 50U), ///< PLL multiplier of 137.50 + CGC_PLL_MUL_137_66 = BSP_CLOCKS_PLL_MUL(137U, 66U), ///< PLL multiplier of 137.66 + CGC_PLL_MUL_138_0 = BSP_CLOCKS_PLL_MUL(138U, 0U), ///< PLL multiplier of 138.00 + CGC_PLL_MUL_138_33 = BSP_CLOCKS_PLL_MUL(138U, 33U), ///< PLL multiplier of 138.33 + CGC_PLL_MUL_138_5 = BSP_CLOCKS_PLL_MUL(138U, 50U), ///< PLL multiplier of 138.50 + CGC_PLL_MUL_138_66 = BSP_CLOCKS_PLL_MUL(138U, 66U), ///< PLL multiplier of 138.66 + CGC_PLL_MUL_139_0 = BSP_CLOCKS_PLL_MUL(139U, 0U), ///< PLL multiplier of 139.00 + CGC_PLL_MUL_139_33 = BSP_CLOCKS_PLL_MUL(139U, 33U), ///< PLL multiplier of 139.33 + CGC_PLL_MUL_139_5 = BSP_CLOCKS_PLL_MUL(139U, 50U), ///< PLL multiplier of 139.50 + CGC_PLL_MUL_139_66 = BSP_CLOCKS_PLL_MUL(139U, 66U), ///< PLL multiplier of 139.66 + CGC_PLL_MUL_140_0 = BSP_CLOCKS_PLL_MUL(140U, 0U), ///< PLL multiplier of 140.00 + CGC_PLL_MUL_140_33 = BSP_CLOCKS_PLL_MUL(140U, 33U), ///< PLL multiplier of 140.33 + CGC_PLL_MUL_140_5 = BSP_CLOCKS_PLL_MUL(140U, 50U), ///< PLL multiplier of 140.50 + CGC_PLL_MUL_140_66 = BSP_CLOCKS_PLL_MUL(140U, 66U), ///< PLL multiplier of 140.66 + CGC_PLL_MUL_141_0 = BSP_CLOCKS_PLL_MUL(141U, 0U), ///< PLL multiplier of 141.00 + CGC_PLL_MUL_141_33 = BSP_CLOCKS_PLL_MUL(141U, 33U), ///< PLL multiplier of 141.33 + CGC_PLL_MUL_141_5 = BSP_CLOCKS_PLL_MUL(141U, 50U), ///< PLL multiplier of 141.50 + CGC_PLL_MUL_141_66 = BSP_CLOCKS_PLL_MUL(141U, 66U), ///< PLL multiplier of 141.66 + CGC_PLL_MUL_142_0 = BSP_CLOCKS_PLL_MUL(142U, 0U), ///< PLL multiplier of 142.00 + CGC_PLL_MUL_142_33 = BSP_CLOCKS_PLL_MUL(142U, 33U), ///< PLL multiplier of 142.33 + CGC_PLL_MUL_142_5 = BSP_CLOCKS_PLL_MUL(142U, 50U), ///< PLL multiplier of 142.50 + CGC_PLL_MUL_142_66 = BSP_CLOCKS_PLL_MUL(142U, 66U), ///< PLL multiplier of 142.66 + CGC_PLL_MUL_143_0 = BSP_CLOCKS_PLL_MUL(143U, 0U), ///< PLL multiplier of 143.00 + CGC_PLL_MUL_143_33 = BSP_CLOCKS_PLL_MUL(143U, 33U), ///< PLL multiplier of 143.33 + CGC_PLL_MUL_143_5 = BSP_CLOCKS_PLL_MUL(143U, 50U), ///< PLL multiplier of 143.50 + CGC_PLL_MUL_143_66 = BSP_CLOCKS_PLL_MUL(143U, 66U), ///< PLL multiplier of 143.66 + CGC_PLL_MUL_144_0 = BSP_CLOCKS_PLL_MUL(144U, 0U), ///< PLL multiplier of 144.00 + CGC_PLL_MUL_144_33 = BSP_CLOCKS_PLL_MUL(144U, 33U), ///< PLL multiplier of 144.33 + CGC_PLL_MUL_144_5 = BSP_CLOCKS_PLL_MUL(144U, 50U), ///< PLL multiplier of 144.50 + CGC_PLL_MUL_144_66 = BSP_CLOCKS_PLL_MUL(144U, 66U), ///< PLL multiplier of 144.66 + CGC_PLL_MUL_145_0 = BSP_CLOCKS_PLL_MUL(145U, 0U), ///< PLL multiplier of 145.00 + CGC_PLL_MUL_145_33 = BSP_CLOCKS_PLL_MUL(145U, 33U), ///< PLL multiplier of 145.33 + CGC_PLL_MUL_145_5 = BSP_CLOCKS_PLL_MUL(145U, 50U), ///< PLL multiplier of 145.50 + CGC_PLL_MUL_145_66 = BSP_CLOCKS_PLL_MUL(145U, 66U), ///< PLL multiplier of 145.66 + CGC_PLL_MUL_146_0 = BSP_CLOCKS_PLL_MUL(146U, 0U), ///< PLL multiplier of 146.00 + CGC_PLL_MUL_146_33 = BSP_CLOCKS_PLL_MUL(146U, 33U), ///< PLL multiplier of 146.33 + CGC_PLL_MUL_146_5 = BSP_CLOCKS_PLL_MUL(146U, 50U), ///< PLL multiplier of 146.50 + CGC_PLL_MUL_146_66 = BSP_CLOCKS_PLL_MUL(146U, 66U), ///< PLL multiplier of 146.66 + CGC_PLL_MUL_147_0 = BSP_CLOCKS_PLL_MUL(147U, 0U), ///< PLL multiplier of 147.00 + CGC_PLL_MUL_147_33 = BSP_CLOCKS_PLL_MUL(147U, 33U), ///< PLL multiplier of 147.33 + CGC_PLL_MUL_147_5 = BSP_CLOCKS_PLL_MUL(147U, 50U), ///< PLL multiplier of 147.50 + CGC_PLL_MUL_147_66 = BSP_CLOCKS_PLL_MUL(147U, 66U), ///< PLL multiplier of 147.66 + CGC_PLL_MUL_148_0 = BSP_CLOCKS_PLL_MUL(148U, 0U), ///< PLL multiplier of 148.00 + CGC_PLL_MUL_148_33 = BSP_CLOCKS_PLL_MUL(148U, 33U), ///< PLL multiplier of 148.33 + CGC_PLL_MUL_148_5 = BSP_CLOCKS_PLL_MUL(148U, 50U), ///< PLL multiplier of 148.50 + CGC_PLL_MUL_148_66 = BSP_CLOCKS_PLL_MUL(148U, 66U), ///< PLL multiplier of 148.66 + CGC_PLL_MUL_149_0 = BSP_CLOCKS_PLL_MUL(149U, 0U), ///< PLL multiplier of 149.00 + CGC_PLL_MUL_149_33 = BSP_CLOCKS_PLL_MUL(149U, 33U), ///< PLL multiplier of 149.33 + CGC_PLL_MUL_149_5 = BSP_CLOCKS_PLL_MUL(149U, 50U), ///< PLL multiplier of 149.50 + CGC_PLL_MUL_149_66 = BSP_CLOCKS_PLL_MUL(149U, 66U), ///< PLL multiplier of 149.66 + CGC_PLL_MUL_150_0 = BSP_CLOCKS_PLL_MUL(150U, 0U), ///< PLL multiplier of 150.00 + CGC_PLL_MUL_150_33 = BSP_CLOCKS_PLL_MUL(150U, 33U), ///< PLL multiplier of 150.33 + CGC_PLL_MUL_150_5 = BSP_CLOCKS_PLL_MUL(150U, 50U), ///< PLL multiplier of 150.50 + CGC_PLL_MUL_150_66 = BSP_CLOCKS_PLL_MUL(150U, 66U), ///< PLL multiplier of 150.66 + CGC_PLL_MUL_151_0 = BSP_CLOCKS_PLL_MUL(151U, 0U), ///< PLL multiplier of 151.00 + CGC_PLL_MUL_151_33 = BSP_CLOCKS_PLL_MUL(151U, 33U), ///< PLL multiplier of 151.33 + CGC_PLL_MUL_151_5 = BSP_CLOCKS_PLL_MUL(151U, 50U), ///< PLL multiplier of 151.50 + CGC_PLL_MUL_151_66 = BSP_CLOCKS_PLL_MUL(151U, 66U), ///< PLL multiplier of 151.66 + CGC_PLL_MUL_152_0 = BSP_CLOCKS_PLL_MUL(152U, 0U), ///< PLL multiplier of 152.00 + CGC_PLL_MUL_152_33 = BSP_CLOCKS_PLL_MUL(152U, 33U), ///< PLL multiplier of 152.33 + CGC_PLL_MUL_152_5 = BSP_CLOCKS_PLL_MUL(152U, 50U), ///< PLL multiplier of 152.50 + CGC_PLL_MUL_152_66 = BSP_CLOCKS_PLL_MUL(152U, 66U), ///< PLL multiplier of 152.66 + CGC_PLL_MUL_153_0 = BSP_CLOCKS_PLL_MUL(153U, 0U), ///< PLL multiplier of 153.00 + CGC_PLL_MUL_153_33 = BSP_CLOCKS_PLL_MUL(153U, 33U), ///< PLL multiplier of 153.33 + CGC_PLL_MUL_153_5 = BSP_CLOCKS_PLL_MUL(153U, 50U), ///< PLL multiplier of 153.50 + CGC_PLL_MUL_153_66 = BSP_CLOCKS_PLL_MUL(153U, 66U), ///< PLL multiplier of 153.66 + CGC_PLL_MUL_154_0 = BSP_CLOCKS_PLL_MUL(154U, 0U), ///< PLL multiplier of 154.00 + CGC_PLL_MUL_154_33 = BSP_CLOCKS_PLL_MUL(154U, 33U), ///< PLL multiplier of 154.33 + CGC_PLL_MUL_154_5 = BSP_CLOCKS_PLL_MUL(154U, 50U), ///< PLL multiplier of 154.50 + CGC_PLL_MUL_154_66 = BSP_CLOCKS_PLL_MUL(154U, 66U), ///< PLL multiplier of 154.66 + CGC_PLL_MUL_155_0 = BSP_CLOCKS_PLL_MUL(155U, 0U), ///< PLL multiplier of 155.00 + CGC_PLL_MUL_155_33 = BSP_CLOCKS_PLL_MUL(155U, 33U), ///< PLL multiplier of 155.33 + CGC_PLL_MUL_155_5 = BSP_CLOCKS_PLL_MUL(155U, 50U), ///< PLL multiplier of 155.50 + CGC_PLL_MUL_155_66 = BSP_CLOCKS_PLL_MUL(155U, 66U), ///< PLL multiplier of 155.66 + CGC_PLL_MUL_156_0 = BSP_CLOCKS_PLL_MUL(156U, 0U), ///< PLL multiplier of 156.00 + CGC_PLL_MUL_156_33 = BSP_CLOCKS_PLL_MUL(156U, 33U), ///< PLL multiplier of 156.33 + CGC_PLL_MUL_156_5 = BSP_CLOCKS_PLL_MUL(156U, 50U), ///< PLL multiplier of 156.50 + CGC_PLL_MUL_156_66 = BSP_CLOCKS_PLL_MUL(156U, 66U), ///< PLL multiplier of 156.66 + CGC_PLL_MUL_157_0 = BSP_CLOCKS_PLL_MUL(157U, 0U), ///< PLL multiplier of 157.00 + CGC_PLL_MUL_157_33 = BSP_CLOCKS_PLL_MUL(157U, 33U), ///< PLL multiplier of 157.33 + CGC_PLL_MUL_157_5 = BSP_CLOCKS_PLL_MUL(157U, 50U), ///< PLL multiplier of 157.50 + CGC_PLL_MUL_157_66 = BSP_CLOCKS_PLL_MUL(157U, 66U), ///< PLL multiplier of 157.66 + CGC_PLL_MUL_158_0 = BSP_CLOCKS_PLL_MUL(158U, 0U), ///< PLL multiplier of 158.00 + CGC_PLL_MUL_158_33 = BSP_CLOCKS_PLL_MUL(158U, 33U), ///< PLL multiplier of 158.33 + CGC_PLL_MUL_158_5 = BSP_CLOCKS_PLL_MUL(158U, 50U), ///< PLL multiplier of 158.50 + CGC_PLL_MUL_158_66 = BSP_CLOCKS_PLL_MUL(158U, 66U), ///< PLL multiplier of 158.66 + CGC_PLL_MUL_159_0 = BSP_CLOCKS_PLL_MUL(159U, 0U), ///< PLL multiplier of 159.00 + CGC_PLL_MUL_159_33 = BSP_CLOCKS_PLL_MUL(159U, 33U), ///< PLL multiplier of 159.33 + CGC_PLL_MUL_159_5 = BSP_CLOCKS_PLL_MUL(159U, 50U), ///< PLL multiplier of 159.50 + CGC_PLL_MUL_159_66 = BSP_CLOCKS_PLL_MUL(159U, 66U), ///< PLL multiplier of 159.66 + CGC_PLL_MUL_160_0 = BSP_CLOCKS_PLL_MUL(160U, 0U), ///< PLL multiplier of 160.00 + CGC_PLL_MUL_160_33 = BSP_CLOCKS_PLL_MUL(160U, 33U), ///< PLL multiplier of 160.33 + CGC_PLL_MUL_160_5 = BSP_CLOCKS_PLL_MUL(160U, 50U), ///< PLL multiplier of 160.50 + CGC_PLL_MUL_160_66 = BSP_CLOCKS_PLL_MUL(160U, 66U), ///< PLL multiplier of 160.66 + CGC_PLL_MUL_161_0 = BSP_CLOCKS_PLL_MUL(161U, 0U), ///< PLL multiplier of 161.00 + CGC_PLL_MUL_161_33 = BSP_CLOCKS_PLL_MUL(161U, 33U), ///< PLL multiplier of 161.33 + CGC_PLL_MUL_161_5 = BSP_CLOCKS_PLL_MUL(161U, 50U), ///< PLL multiplier of 161.50 + CGC_PLL_MUL_161_66 = BSP_CLOCKS_PLL_MUL(161U, 66U), ///< PLL multiplier of 161.66 + CGC_PLL_MUL_162_0 = BSP_CLOCKS_PLL_MUL(162U, 0U), ///< PLL multiplier of 162.00 + CGC_PLL_MUL_162_33 = BSP_CLOCKS_PLL_MUL(162U, 33U), ///< PLL multiplier of 162.33 + CGC_PLL_MUL_162_5 = BSP_CLOCKS_PLL_MUL(162U, 50U), ///< PLL multiplier of 162.50 + CGC_PLL_MUL_162_66 = BSP_CLOCKS_PLL_MUL(162U, 66U), ///< PLL multiplier of 162.66 + CGC_PLL_MUL_163_0 = BSP_CLOCKS_PLL_MUL(163U, 0U), ///< PLL multiplier of 163.00 + CGC_PLL_MUL_163_33 = BSP_CLOCKS_PLL_MUL(163U, 33U), ///< PLL multiplier of 163.33 + CGC_PLL_MUL_163_5 = BSP_CLOCKS_PLL_MUL(163U, 50U), ///< PLL multiplier of 163.50 + CGC_PLL_MUL_163_66 = BSP_CLOCKS_PLL_MUL(163U, 66U), ///< PLL multiplier of 163.66 + CGC_PLL_MUL_164_0 = BSP_CLOCKS_PLL_MUL(164U, 0U), ///< PLL multiplier of 164.00 + CGC_PLL_MUL_164_33 = BSP_CLOCKS_PLL_MUL(164U, 33U), ///< PLL multiplier of 164.33 + CGC_PLL_MUL_164_5 = BSP_CLOCKS_PLL_MUL(164U, 50U), ///< PLL multiplier of 164.50 + CGC_PLL_MUL_164_66 = BSP_CLOCKS_PLL_MUL(164U, 66U), ///< PLL multiplier of 164.66 + CGC_PLL_MUL_165_0 = BSP_CLOCKS_PLL_MUL(165U, 0U), ///< PLL multiplier of 165.00 + CGC_PLL_MUL_165_33 = BSP_CLOCKS_PLL_MUL(165U, 33U), ///< PLL multiplier of 165.33 + CGC_PLL_MUL_165_5 = BSP_CLOCKS_PLL_MUL(165U, 50U), ///< PLL multiplier of 165.50 + CGC_PLL_MUL_165_66 = BSP_CLOCKS_PLL_MUL(165U, 66U), ///< PLL multiplier of 165.66 + CGC_PLL_MUL_166_0 = BSP_CLOCKS_PLL_MUL(166U, 0U), ///< PLL multiplier of 166.00 + CGC_PLL_MUL_166_33 = BSP_CLOCKS_PLL_MUL(166U, 33U), ///< PLL multiplier of 166.33 + CGC_PLL_MUL_166_5 = BSP_CLOCKS_PLL_MUL(166U, 50U), ///< PLL multiplier of 166.50 + CGC_PLL_MUL_166_66 = BSP_CLOCKS_PLL_MUL(166U, 66U), ///< PLL multiplier of 166.66 + CGC_PLL_MUL_167_0 = BSP_CLOCKS_PLL_MUL(167U, 0U), ///< PLL multiplier of 167.00 + CGC_PLL_MUL_167_33 = BSP_CLOCKS_PLL_MUL(167U, 33U), ///< PLL multiplier of 167.33 + CGC_PLL_MUL_167_5 = BSP_CLOCKS_PLL_MUL(167U, 50U), ///< PLL multiplier of 167.50 + CGC_PLL_MUL_167_66 = BSP_CLOCKS_PLL_MUL(167U, 66U), ///< PLL multiplier of 167.66 + CGC_PLL_MUL_168_0 = BSP_CLOCKS_PLL_MUL(168U, 0U), ///< PLL multiplier of 168.00 + CGC_PLL_MUL_168_33 = BSP_CLOCKS_PLL_MUL(168U, 33U), ///< PLL multiplier of 168.33 + CGC_PLL_MUL_168_5 = BSP_CLOCKS_PLL_MUL(168U, 50U), ///< PLL multiplier of 168.50 + CGC_PLL_MUL_168_66 = BSP_CLOCKS_PLL_MUL(168U, 66U), ///< PLL multiplier of 168.66 + CGC_PLL_MUL_169_0 = BSP_CLOCKS_PLL_MUL(169U, 0U), ///< PLL multiplier of 169.00 + CGC_PLL_MUL_169_33 = BSP_CLOCKS_PLL_MUL(169U, 33U), ///< PLL multiplier of 169.33 + CGC_PLL_MUL_169_5 = BSP_CLOCKS_PLL_MUL(169U, 50U), ///< PLL multiplier of 169.50 + CGC_PLL_MUL_169_66 = BSP_CLOCKS_PLL_MUL(169U, 66U), ///< PLL multiplier of 169.66 + CGC_PLL_MUL_170_0 = BSP_CLOCKS_PLL_MUL(170U, 0U), ///< PLL multiplier of 170.00 + CGC_PLL_MUL_170_33 = BSP_CLOCKS_PLL_MUL(170U, 33U), ///< PLL multiplier of 170.33 + CGC_PLL_MUL_170_5 = BSP_CLOCKS_PLL_MUL(170U, 50U), ///< PLL multiplier of 170.50 + CGC_PLL_MUL_170_66 = BSP_CLOCKS_PLL_MUL(170U, 66U), ///< PLL multiplier of 170.66 + CGC_PLL_MUL_171_0 = BSP_CLOCKS_PLL_MUL(171U, 0U), ///< PLL multiplier of 171.00 + CGC_PLL_MUL_171_33 = BSP_CLOCKS_PLL_MUL(171U, 33U), ///< PLL multiplier of 171.33 + CGC_PLL_MUL_171_5 = BSP_CLOCKS_PLL_MUL(171U, 50U), ///< PLL multiplier of 171.50 + CGC_PLL_MUL_171_66 = BSP_CLOCKS_PLL_MUL(171U, 66U), ///< PLL multiplier of 171.66 + CGC_PLL_MUL_172_0 = BSP_CLOCKS_PLL_MUL(172U, 0U), ///< PLL multiplier of 172.00 + CGC_PLL_MUL_172_33 = BSP_CLOCKS_PLL_MUL(172U, 33U), ///< PLL multiplier of 172.33 + CGC_PLL_MUL_172_5 = BSP_CLOCKS_PLL_MUL(172U, 50U), ///< PLL multiplier of 172.50 + CGC_PLL_MUL_172_66 = BSP_CLOCKS_PLL_MUL(172U, 66U), ///< PLL multiplier of 172.66 + CGC_PLL_MUL_173_0 = BSP_CLOCKS_PLL_MUL(173U, 0U), ///< PLL multiplier of 173.00 + CGC_PLL_MUL_173_33 = BSP_CLOCKS_PLL_MUL(173U, 33U), ///< PLL multiplier of 173.33 + CGC_PLL_MUL_173_5 = BSP_CLOCKS_PLL_MUL(173U, 50U), ///< PLL multiplier of 173.50 + CGC_PLL_MUL_173_66 = BSP_CLOCKS_PLL_MUL(173U, 66U), ///< PLL multiplier of 173.66 + CGC_PLL_MUL_174_0 = BSP_CLOCKS_PLL_MUL(174U, 0U), ///< PLL multiplier of 174.00 + CGC_PLL_MUL_174_33 = BSP_CLOCKS_PLL_MUL(174U, 33U), ///< PLL multiplier of 174.33 + CGC_PLL_MUL_174_5 = BSP_CLOCKS_PLL_MUL(174U, 50U), ///< PLL multiplier of 174.50 + CGC_PLL_MUL_174_66 = BSP_CLOCKS_PLL_MUL(174U, 66U), ///< PLL multiplier of 174.66 + CGC_PLL_MUL_175_0 = BSP_CLOCKS_PLL_MUL(175U, 0U), ///< PLL multiplier of 175.00 + CGC_PLL_MUL_175_33 = BSP_CLOCKS_PLL_MUL(175U, 33U), ///< PLL multiplier of 175.33 + CGC_PLL_MUL_175_5 = BSP_CLOCKS_PLL_MUL(175U, 50U), ///< PLL multiplier of 175.50 + CGC_PLL_MUL_175_66 = BSP_CLOCKS_PLL_MUL(175U, 66U), ///< PLL multiplier of 175.66 + CGC_PLL_MUL_176_0 = BSP_CLOCKS_PLL_MUL(176U, 0U), ///< PLL multiplier of 176.00 + CGC_PLL_MUL_176_33 = BSP_CLOCKS_PLL_MUL(176U, 33U), ///< PLL multiplier of 176.33 + CGC_PLL_MUL_176_5 = BSP_CLOCKS_PLL_MUL(176U, 50U), ///< PLL multiplier of 176.50 + CGC_PLL_MUL_176_66 = BSP_CLOCKS_PLL_MUL(176U, 66U), ///< PLL multiplier of 176.66 + CGC_PLL_MUL_177_0 = BSP_CLOCKS_PLL_MUL(177U, 0U), ///< PLL multiplier of 177.00 + CGC_PLL_MUL_177_33 = BSP_CLOCKS_PLL_MUL(177U, 33U), ///< PLL multiplier of 177.33 + CGC_PLL_MUL_177_5 = BSP_CLOCKS_PLL_MUL(177U, 50U), ///< PLL multiplier of 177.50 + CGC_PLL_MUL_177_66 = BSP_CLOCKS_PLL_MUL(177U, 66U), ///< PLL multiplier of 177.66 + CGC_PLL_MUL_178_0 = BSP_CLOCKS_PLL_MUL(178U, 0U), ///< PLL multiplier of 178.00 + CGC_PLL_MUL_178_33 = BSP_CLOCKS_PLL_MUL(178U, 33U), ///< PLL multiplier of 178.33 + CGC_PLL_MUL_178_5 = BSP_CLOCKS_PLL_MUL(178U, 50U), ///< PLL multiplier of 178.50 + CGC_PLL_MUL_178_66 = BSP_CLOCKS_PLL_MUL(178U, 66U), ///< PLL multiplier of 178.66 + CGC_PLL_MUL_179_0 = BSP_CLOCKS_PLL_MUL(179U, 0U), ///< PLL multiplier of 179.00 + CGC_PLL_MUL_179_33 = BSP_CLOCKS_PLL_MUL(179U, 33U), ///< PLL multiplier of 179.33 + CGC_PLL_MUL_179_5 = BSP_CLOCKS_PLL_MUL(179U, 50U), ///< PLL multiplier of 179.50 + CGC_PLL_MUL_179_66 = BSP_CLOCKS_PLL_MUL(179U, 66U), ///< PLL multiplier of 179.66 + CGC_PLL_MUL_180_0 = BSP_CLOCKS_PLL_MUL(180U, 0U), ///< PLL multiplier of 180.00 + CGC_PLL_MUL_180_33 = BSP_CLOCKS_PLL_MUL(180U, 33U), ///< PLL multiplier of 180.33 + CGC_PLL_MUL_180_5 = BSP_CLOCKS_PLL_MUL(180U, 50U), ///< PLL multiplier of 180.50 + CGC_PLL_MUL_180_66 = BSP_CLOCKS_PLL_MUL(180U, 66U), ///< PLL multiplier of 180.66 + CGC_PLL_MUL_181_0 = BSP_CLOCKS_PLL_MUL(181U, 0U), ///< PLL multiplier of 181.00 + CGC_PLL_MUL_181_33 = BSP_CLOCKS_PLL_MUL(181U, 33U), ///< PLL multiplier of 181.33 + CGC_PLL_MUL_181_5 = BSP_CLOCKS_PLL_MUL(181U, 50U), ///< PLL multiplier of 181.50 + CGC_PLL_MUL_181_66 = BSP_CLOCKS_PLL_MUL(181U, 66U), ///< PLL multiplier of 181.66 + CGC_PLL_MUL_182_0 = BSP_CLOCKS_PLL_MUL(182U, 0U), ///< PLL multiplier of 182.00 + CGC_PLL_MUL_182_33 = BSP_CLOCKS_PLL_MUL(182U, 33U), ///< PLL multiplier of 182.33 + CGC_PLL_MUL_182_5 = BSP_CLOCKS_PLL_MUL(182U, 50U), ///< PLL multiplier of 182.50 + CGC_PLL_MUL_182_66 = BSP_CLOCKS_PLL_MUL(182U, 66U), ///< PLL multiplier of 182.66 + CGC_PLL_MUL_183_0 = BSP_CLOCKS_PLL_MUL(183U, 0U), ///< PLL multiplier of 183.00 + CGC_PLL_MUL_183_33 = BSP_CLOCKS_PLL_MUL(183U, 33U), ///< PLL multiplier of 183.33 + CGC_PLL_MUL_183_5 = BSP_CLOCKS_PLL_MUL(183U, 50U), ///< PLL multiplier of 183.50 + CGC_PLL_MUL_183_66 = BSP_CLOCKS_PLL_MUL(183U, 66U), ///< PLL multiplier of 183.66 + CGC_PLL_MUL_184_0 = BSP_CLOCKS_PLL_MUL(184U, 0U), ///< PLL multiplier of 184.00 + CGC_PLL_MUL_184_33 = BSP_CLOCKS_PLL_MUL(184U, 33U), ///< PLL multiplier of 184.33 + CGC_PLL_MUL_184_5 = BSP_CLOCKS_PLL_MUL(184U, 50U), ///< PLL multiplier of 184.50 + CGC_PLL_MUL_184_66 = BSP_CLOCKS_PLL_MUL(184U, 66U), ///< PLL multiplier of 184.66 + CGC_PLL_MUL_185_0 = BSP_CLOCKS_PLL_MUL(185U, 0U), ///< PLL multiplier of 185.00 + CGC_PLL_MUL_185_33 = BSP_CLOCKS_PLL_MUL(185U, 33U), ///< PLL multiplier of 185.33 + CGC_PLL_MUL_185_5 = BSP_CLOCKS_PLL_MUL(185U, 50U), ///< PLL multiplier of 185.50 + CGC_PLL_MUL_185_66 = BSP_CLOCKS_PLL_MUL(185U, 66U), ///< PLL multiplier of 185.66 + CGC_PLL_MUL_186_0 = BSP_CLOCKS_PLL_MUL(186U, 0U), ///< PLL multiplier of 186.00 + CGC_PLL_MUL_186_33 = BSP_CLOCKS_PLL_MUL(186U, 33U), ///< PLL multiplier of 186.33 + CGC_PLL_MUL_186_5 = BSP_CLOCKS_PLL_MUL(186U, 50U), ///< PLL multiplier of 186.50 + CGC_PLL_MUL_186_66 = BSP_CLOCKS_PLL_MUL(186U, 66U), ///< PLL multiplier of 186.66 + CGC_PLL_MUL_187_0 = BSP_CLOCKS_PLL_MUL(187U, 0U), ///< PLL multiplier of 187.00 + CGC_PLL_MUL_187_33 = BSP_CLOCKS_PLL_MUL(187U, 33U), ///< PLL multiplier of 187.33 + CGC_PLL_MUL_187_5 = BSP_CLOCKS_PLL_MUL(187U, 50U), ///< PLL multiplier of 187.50 + CGC_PLL_MUL_187_66 = BSP_CLOCKS_PLL_MUL(187U, 66U), ///< PLL multiplier of 187.66 + CGC_PLL_MUL_188_0 = BSP_CLOCKS_PLL_MUL(188U, 0U), ///< PLL multiplier of 188.00 + CGC_PLL_MUL_188_33 = BSP_CLOCKS_PLL_MUL(188U, 33U), ///< PLL multiplier of 188.33 + CGC_PLL_MUL_188_5 = BSP_CLOCKS_PLL_MUL(188U, 50U), ///< PLL multiplier of 188.50 + CGC_PLL_MUL_188_66 = BSP_CLOCKS_PLL_MUL(188U, 66U), ///< PLL multiplier of 188.66 + CGC_PLL_MUL_189_0 = BSP_CLOCKS_PLL_MUL(189U, 0U), ///< PLL multiplier of 189.00 + CGC_PLL_MUL_189_33 = BSP_CLOCKS_PLL_MUL(189U, 33U), ///< PLL multiplier of 189.33 + CGC_PLL_MUL_189_5 = BSP_CLOCKS_PLL_MUL(189U, 50U), ///< PLL multiplier of 189.50 + CGC_PLL_MUL_189_66 = BSP_CLOCKS_PLL_MUL(189U, 66U), ///< PLL multiplier of 189.66 + CGC_PLL_MUL_190_0 = BSP_CLOCKS_PLL_MUL(190U, 0U), ///< PLL multiplier of 190.00 + CGC_PLL_MUL_190_33 = BSP_CLOCKS_PLL_MUL(190U, 33U), ///< PLL multiplier of 190.33 + CGC_PLL_MUL_190_5 = BSP_CLOCKS_PLL_MUL(190U, 50U), ///< PLL multiplier of 190.50 + CGC_PLL_MUL_190_66 = BSP_CLOCKS_PLL_MUL(190U, 66U), ///< PLL multiplier of 190.66 + CGC_PLL_MUL_191_0 = BSP_CLOCKS_PLL_MUL(191U, 0U), ///< PLL multiplier of 191.00 + CGC_PLL_MUL_191_33 = BSP_CLOCKS_PLL_MUL(191U, 33U), ///< PLL multiplier of 191.33 + CGC_PLL_MUL_191_5 = BSP_CLOCKS_PLL_MUL(191U, 50U), ///< PLL multiplier of 191.50 + CGC_PLL_MUL_191_66 = BSP_CLOCKS_PLL_MUL(191U, 66U), ///< PLL multiplier of 191.66 + CGC_PLL_MUL_192_0 = BSP_CLOCKS_PLL_MUL(192U, 0U), ///< PLL multiplier of 192.00 + CGC_PLL_MUL_192_33 = BSP_CLOCKS_PLL_MUL(192U, 33U), ///< PLL multiplier of 192.33 + CGC_PLL_MUL_192_5 = BSP_CLOCKS_PLL_MUL(192U, 50U), ///< PLL multiplier of 192.50 + CGC_PLL_MUL_192_66 = BSP_CLOCKS_PLL_MUL(192U, 66U), ///< PLL multiplier of 192.66 + CGC_PLL_MUL_193_0 = BSP_CLOCKS_PLL_MUL(193U, 0U), ///< PLL multiplier of 193.00 + CGC_PLL_MUL_193_33 = BSP_CLOCKS_PLL_MUL(193U, 33U), ///< PLL multiplier of 193.33 + CGC_PLL_MUL_193_5 = BSP_CLOCKS_PLL_MUL(193U, 50U), ///< PLL multiplier of 193.50 + CGC_PLL_MUL_193_66 = BSP_CLOCKS_PLL_MUL(193U, 66U), ///< PLL multiplier of 193.66 + CGC_PLL_MUL_194_0 = BSP_CLOCKS_PLL_MUL(194U, 0U), ///< PLL multiplier of 194.00 + CGC_PLL_MUL_194_33 = BSP_CLOCKS_PLL_MUL(194U, 33U), ///< PLL multiplier of 194.33 + CGC_PLL_MUL_194_5 = BSP_CLOCKS_PLL_MUL(194U, 50U), ///< PLL multiplier of 194.50 + CGC_PLL_MUL_194_66 = BSP_CLOCKS_PLL_MUL(194U, 66U), ///< PLL multiplier of 194.66 + CGC_PLL_MUL_195_0 = BSP_CLOCKS_PLL_MUL(195U, 0U), ///< PLL multiplier of 195.00 + CGC_PLL_MUL_195_33 = BSP_CLOCKS_PLL_MUL(195U, 33U), ///< PLL multiplier of 195.33 + CGC_PLL_MUL_195_5 = BSP_CLOCKS_PLL_MUL(195U, 50U), ///< PLL multiplier of 195.50 + CGC_PLL_MUL_195_66 = BSP_CLOCKS_PLL_MUL(195U, 66U), ///< PLL multiplier of 195.66 + CGC_PLL_MUL_196_0 = BSP_CLOCKS_PLL_MUL(196U, 0U), ///< PLL multiplier of 196.00 + CGC_PLL_MUL_196_33 = BSP_CLOCKS_PLL_MUL(196U, 33U), ///< PLL multiplier of 196.33 + CGC_PLL_MUL_196_5 = BSP_CLOCKS_PLL_MUL(196U, 50U), ///< PLL multiplier of 196.50 + CGC_PLL_MUL_196_66 = BSP_CLOCKS_PLL_MUL(196U, 66U), ///< PLL multiplier of 196.66 + CGC_PLL_MUL_197_0 = BSP_CLOCKS_PLL_MUL(197U, 0U), ///< PLL multiplier of 197.00 + CGC_PLL_MUL_197_33 = BSP_CLOCKS_PLL_MUL(197U, 33U), ///< PLL multiplier of 197.33 + CGC_PLL_MUL_197_5 = BSP_CLOCKS_PLL_MUL(197U, 50U), ///< PLL multiplier of 197.50 + CGC_PLL_MUL_197_66 = BSP_CLOCKS_PLL_MUL(197U, 66U), ///< PLL multiplier of 197.66 + CGC_PLL_MUL_198_0 = BSP_CLOCKS_PLL_MUL(198U, 0U), ///< PLL multiplier of 198.00 + CGC_PLL_MUL_198_33 = BSP_CLOCKS_PLL_MUL(198U, 33U), ///< PLL multiplier of 198.33 + CGC_PLL_MUL_198_5 = BSP_CLOCKS_PLL_MUL(198U, 50U), ///< PLL multiplier of 198.50 + CGC_PLL_MUL_198_66 = BSP_CLOCKS_PLL_MUL(198U, 66U), ///< PLL multiplier of 198.66 + CGC_PLL_MUL_199_0 = BSP_CLOCKS_PLL_MUL(199U, 0U), ///< PLL multiplier of 199.00 + CGC_PLL_MUL_199_33 = BSP_CLOCKS_PLL_MUL(199U, 33U), ///< PLL multiplier of 199.33 + CGC_PLL_MUL_199_5 = BSP_CLOCKS_PLL_MUL(199U, 50U), ///< PLL multiplier of 199.50 + CGC_PLL_MUL_199_66 = BSP_CLOCKS_PLL_MUL(199U, 66U), ///< PLL multiplier of 199.66 + CGC_PLL_MUL_200_0 = BSP_CLOCKS_PLL_MUL(200U, 0U), ///< PLL multiplier of 200.00 + CGC_PLL_MUL_200_33 = BSP_CLOCKS_PLL_MUL(200U, 33U), ///< PLL multiplier of 200.33 + CGC_PLL_MUL_200_5 = BSP_CLOCKS_PLL_MUL(200U, 50U), ///< PLL multiplier of 200.50 + CGC_PLL_MUL_200_66 = BSP_CLOCKS_PLL_MUL(200U, 66U), ///< PLL multiplier of 200.66 + CGC_PLL_MUL_201_0 = BSP_CLOCKS_PLL_MUL(201U, 0U), ///< PLL multiplier of 201.00 + CGC_PLL_MUL_201_33 = BSP_CLOCKS_PLL_MUL(201U, 33U), ///< PLL multiplier of 201.33 + CGC_PLL_MUL_201_5 = BSP_CLOCKS_PLL_MUL(201U, 50U), ///< PLL multiplier of 201.50 + CGC_PLL_MUL_201_66 = BSP_CLOCKS_PLL_MUL(201U, 66U), ///< PLL multiplier of 201.66 + CGC_PLL_MUL_202_0 = BSP_CLOCKS_PLL_MUL(202U, 0U), ///< PLL multiplier of 202.00 + CGC_PLL_MUL_202_33 = BSP_CLOCKS_PLL_MUL(202U, 33U), ///< PLL multiplier of 202.33 + CGC_PLL_MUL_202_5 = BSP_CLOCKS_PLL_MUL(202U, 50U), ///< PLL multiplier of 202.50 + CGC_PLL_MUL_202_66 = BSP_CLOCKS_PLL_MUL(202U, 66U), ///< PLL multiplier of 202.66 + CGC_PLL_MUL_203_0 = BSP_CLOCKS_PLL_MUL(203U, 0U), ///< PLL multiplier of 203.00 + CGC_PLL_MUL_203_33 = BSP_CLOCKS_PLL_MUL(203U, 33U), ///< PLL multiplier of 203.33 + CGC_PLL_MUL_203_5 = BSP_CLOCKS_PLL_MUL(203U, 50U), ///< PLL multiplier of 203.50 + CGC_PLL_MUL_203_66 = BSP_CLOCKS_PLL_MUL(203U, 66U), ///< PLL multiplier of 203.66 + CGC_PLL_MUL_204_0 = BSP_CLOCKS_PLL_MUL(204U, 0U), ///< PLL multiplier of 204.00 + CGC_PLL_MUL_204_33 = BSP_CLOCKS_PLL_MUL(204U, 33U), ///< PLL multiplier of 204.33 + CGC_PLL_MUL_204_5 = BSP_CLOCKS_PLL_MUL(204U, 50U), ///< PLL multiplier of 204.50 + CGC_PLL_MUL_204_66 = BSP_CLOCKS_PLL_MUL(204U, 66U), ///< PLL multiplier of 204.66 + CGC_PLL_MUL_205_0 = BSP_CLOCKS_PLL_MUL(205U, 0U), ///< PLL multiplier of 205.00 + CGC_PLL_MUL_205_33 = BSP_CLOCKS_PLL_MUL(205U, 33U), ///< PLL multiplier of 205.33 + CGC_PLL_MUL_205_5 = BSP_CLOCKS_PLL_MUL(205U, 50U), ///< PLL multiplier of 205.50 + CGC_PLL_MUL_205_66 = BSP_CLOCKS_PLL_MUL(205U, 66U), ///< PLL multiplier of 205.66 + CGC_PLL_MUL_206_0 = BSP_CLOCKS_PLL_MUL(206U, 0U), ///< PLL multiplier of 206.00 + CGC_PLL_MUL_206_33 = BSP_CLOCKS_PLL_MUL(206U, 33U), ///< PLL multiplier of 206.33 + CGC_PLL_MUL_206_5 = BSP_CLOCKS_PLL_MUL(206U, 50U), ///< PLL multiplier of 206.50 + CGC_PLL_MUL_206_66 = BSP_CLOCKS_PLL_MUL(206U, 66U), ///< PLL multiplier of 206.66 + CGC_PLL_MUL_207_0 = BSP_CLOCKS_PLL_MUL(207U, 0U), ///< PLL multiplier of 207.00 + CGC_PLL_MUL_207_33 = BSP_CLOCKS_PLL_MUL(207U, 33U), ///< PLL multiplier of 207.33 + CGC_PLL_MUL_207_5 = BSP_CLOCKS_PLL_MUL(207U, 50U), ///< PLL multiplier of 207.50 + CGC_PLL_MUL_207_66 = BSP_CLOCKS_PLL_MUL(207U, 66U), ///< PLL multiplier of 207.66 + CGC_PLL_MUL_208_0 = BSP_CLOCKS_PLL_MUL(208U, 0U), ///< PLL multiplier of 208.00 + CGC_PLL_MUL_208_33 = BSP_CLOCKS_PLL_MUL(208U, 33U), ///< PLL multiplier of 208.33 + CGC_PLL_MUL_208_5 = BSP_CLOCKS_PLL_MUL(208U, 50U), ///< PLL multiplier of 208.50 + CGC_PLL_MUL_208_66 = BSP_CLOCKS_PLL_MUL(208U, 66U), ///< PLL multiplier of 208.66 + CGC_PLL_MUL_209_0 = BSP_CLOCKS_PLL_MUL(209U, 0U), ///< PLL multiplier of 209.00 + CGC_PLL_MUL_209_33 = BSP_CLOCKS_PLL_MUL(209U, 33U), ///< PLL multiplier of 209.33 + CGC_PLL_MUL_209_5 = BSP_CLOCKS_PLL_MUL(209U, 50U), ///< PLL multiplier of 209.50 + CGC_PLL_MUL_209_66 = BSP_CLOCKS_PLL_MUL(209U, 66U), ///< PLL multiplier of 209.66 + CGC_PLL_MUL_210_0 = BSP_CLOCKS_PLL_MUL(210U, 0U), ///< PLL multiplier of 210.00 + CGC_PLL_MUL_210_33 = BSP_CLOCKS_PLL_MUL(210U, 33U), ///< PLL multiplier of 210.33 + CGC_PLL_MUL_210_5 = BSP_CLOCKS_PLL_MUL(210U, 50U), ///< PLL multiplier of 210.50 + CGC_PLL_MUL_210_66 = BSP_CLOCKS_PLL_MUL(210U, 66U), ///< PLL multiplier of 210.66 + CGC_PLL_MUL_211_0 = BSP_CLOCKS_PLL_MUL(211U, 0U), ///< PLL multiplier of 211.00 + CGC_PLL_MUL_211_33 = BSP_CLOCKS_PLL_MUL(211U, 33U), ///< PLL multiplier of 211.33 + CGC_PLL_MUL_211_5 = BSP_CLOCKS_PLL_MUL(211U, 50U), ///< PLL multiplier of 211.50 + CGC_PLL_MUL_211_66 = BSP_CLOCKS_PLL_MUL(211U, 66U), ///< PLL multiplier of 211.66 + CGC_PLL_MUL_212_0 = BSP_CLOCKS_PLL_MUL(212U, 0U), ///< PLL multiplier of 212.00 + CGC_PLL_MUL_212_33 = BSP_CLOCKS_PLL_MUL(212U, 33U), ///< PLL multiplier of 212.33 + CGC_PLL_MUL_212_5 = BSP_CLOCKS_PLL_MUL(212U, 50U), ///< PLL multiplier of 212.50 + CGC_PLL_MUL_212_66 = BSP_CLOCKS_PLL_MUL(212U, 66U), ///< PLL multiplier of 212.66 + CGC_PLL_MUL_213_0 = BSP_CLOCKS_PLL_MUL(213U, 0U), ///< PLL multiplier of 213.00 + CGC_PLL_MUL_213_33 = BSP_CLOCKS_PLL_MUL(213U, 33U), ///< PLL multiplier of 213.33 + CGC_PLL_MUL_213_5 = BSP_CLOCKS_PLL_MUL(213U, 50U), ///< PLL multiplier of 213.50 + CGC_PLL_MUL_213_66 = BSP_CLOCKS_PLL_MUL(213U, 66U), ///< PLL multiplier of 213.66 + CGC_PLL_MUL_214_0 = BSP_CLOCKS_PLL_MUL(214U, 0U), ///< PLL multiplier of 214.00 + CGC_PLL_MUL_214_33 = BSP_CLOCKS_PLL_MUL(214U, 33U), ///< PLL multiplier of 214.33 + CGC_PLL_MUL_214_5 = BSP_CLOCKS_PLL_MUL(214U, 50U), ///< PLL multiplier of 214.50 + CGC_PLL_MUL_214_66 = BSP_CLOCKS_PLL_MUL(214U, 66U), ///< PLL multiplier of 214.66 + CGC_PLL_MUL_215_0 = BSP_CLOCKS_PLL_MUL(215U, 0U), ///< PLL multiplier of 215.00 + CGC_PLL_MUL_215_33 = BSP_CLOCKS_PLL_MUL(215U, 33U), ///< PLL multiplier of 215.33 + CGC_PLL_MUL_215_5 = BSP_CLOCKS_PLL_MUL(215U, 50U), ///< PLL multiplier of 215.50 + CGC_PLL_MUL_215_66 = BSP_CLOCKS_PLL_MUL(215U, 66U), ///< PLL multiplier of 215.66 + CGC_PLL_MUL_216_0 = BSP_CLOCKS_PLL_MUL(216U, 0U), ///< PLL multiplier of 216.00 + CGC_PLL_MUL_216_33 = BSP_CLOCKS_PLL_MUL(216U, 33U), ///< PLL multiplier of 216.33 + CGC_PLL_MUL_216_5 = BSP_CLOCKS_PLL_MUL(216U, 50U), ///< PLL multiplier of 216.50 + CGC_PLL_MUL_216_66 = BSP_CLOCKS_PLL_MUL(216U, 66U), ///< PLL multiplier of 216.66 + CGC_PLL_MUL_217_0 = BSP_CLOCKS_PLL_MUL(217U, 0U), ///< PLL multiplier of 217.00 + CGC_PLL_MUL_217_33 = BSP_CLOCKS_PLL_MUL(217U, 33U), ///< PLL multiplier of 217.33 + CGC_PLL_MUL_217_5 = BSP_CLOCKS_PLL_MUL(217U, 50U), ///< PLL multiplier of 217.50 + CGC_PLL_MUL_217_66 = BSP_CLOCKS_PLL_MUL(217U, 66U), ///< PLL multiplier of 217.66 + CGC_PLL_MUL_218_0 = BSP_CLOCKS_PLL_MUL(218U, 0U), ///< PLL multiplier of 218.00 + CGC_PLL_MUL_218_33 = BSP_CLOCKS_PLL_MUL(218U, 33U), ///< PLL multiplier of 218.33 + CGC_PLL_MUL_218_5 = BSP_CLOCKS_PLL_MUL(218U, 50U), ///< PLL multiplier of 218.50 + CGC_PLL_MUL_218_66 = BSP_CLOCKS_PLL_MUL(218U, 66U), ///< PLL multiplier of 218.66 + CGC_PLL_MUL_219_0 = BSP_CLOCKS_PLL_MUL(219U, 0U), ///< PLL multiplier of 219.00 + CGC_PLL_MUL_219_33 = BSP_CLOCKS_PLL_MUL(219U, 33U), ///< PLL multiplier of 219.33 + CGC_PLL_MUL_219_5 = BSP_CLOCKS_PLL_MUL(219U, 50U), ///< PLL multiplier of 219.50 + CGC_PLL_MUL_219_66 = BSP_CLOCKS_PLL_MUL(219U, 66U), ///< PLL multiplier of 219.66 + CGC_PLL_MUL_220_0 = BSP_CLOCKS_PLL_MUL(220U, 0U), ///< PLL multiplier of 220.00 + CGC_PLL_MUL_220_33 = BSP_CLOCKS_PLL_MUL(220U, 33U), ///< PLL multiplier of 220.33 + CGC_PLL_MUL_220_5 = BSP_CLOCKS_PLL_MUL(220U, 50U), ///< PLL multiplier of 220.50 + CGC_PLL_MUL_220_66 = BSP_CLOCKS_PLL_MUL(220U, 66U), ///< PLL multiplier of 220.66 + CGC_PLL_MUL_221_0 = BSP_CLOCKS_PLL_MUL(221U, 0U), ///< PLL multiplier of 221.00 + CGC_PLL_MUL_221_33 = BSP_CLOCKS_PLL_MUL(221U, 33U), ///< PLL multiplier of 221.33 + CGC_PLL_MUL_221_5 = BSP_CLOCKS_PLL_MUL(221U, 50U), ///< PLL multiplier of 221.50 + CGC_PLL_MUL_221_66 = BSP_CLOCKS_PLL_MUL(221U, 66U), ///< PLL multiplier of 221.66 + CGC_PLL_MUL_222_0 = BSP_CLOCKS_PLL_MUL(222U, 0U), ///< PLL multiplier of 222.00 + CGC_PLL_MUL_222_33 = BSP_CLOCKS_PLL_MUL(222U, 33U), ///< PLL multiplier of 222.33 + CGC_PLL_MUL_222_5 = BSP_CLOCKS_PLL_MUL(222U, 50U), ///< PLL multiplier of 222.50 + CGC_PLL_MUL_222_66 = BSP_CLOCKS_PLL_MUL(222U, 66U), ///< PLL multiplier of 222.66 + CGC_PLL_MUL_223_0 = BSP_CLOCKS_PLL_MUL(223U, 0U), ///< PLL multiplier of 223.00 + CGC_PLL_MUL_223_33 = BSP_CLOCKS_PLL_MUL(223U, 33U), ///< PLL multiplier of 223.33 + CGC_PLL_MUL_223_5 = BSP_CLOCKS_PLL_MUL(223U, 50U), ///< PLL multiplier of 223.50 + CGC_PLL_MUL_223_66 = BSP_CLOCKS_PLL_MUL(223U, 66U), ///< PLL multiplier of 223.66 + CGC_PLL_MUL_224_0 = BSP_CLOCKS_PLL_MUL(224U, 0U), ///< PLL multiplier of 224.00 + CGC_PLL_MUL_224_33 = BSP_CLOCKS_PLL_MUL(224U, 33U), ///< PLL multiplier of 224.33 + CGC_PLL_MUL_224_5 = BSP_CLOCKS_PLL_MUL(224U, 50U), ///< PLL multiplier of 224.50 + CGC_PLL_MUL_224_66 = BSP_CLOCKS_PLL_MUL(224U, 66U), ///< PLL multiplier of 224.66 + CGC_PLL_MUL_225_0 = BSP_CLOCKS_PLL_MUL(225U, 0U), ///< PLL multiplier of 225.00 + CGC_PLL_MUL_225_33 = BSP_CLOCKS_PLL_MUL(225U, 33U), ///< PLL multiplier of 225.33 + CGC_PLL_MUL_225_5 = BSP_CLOCKS_PLL_MUL(225U, 50U), ///< PLL multiplier of 225.50 + CGC_PLL_MUL_225_66 = BSP_CLOCKS_PLL_MUL(225U, 66U), ///< PLL multiplier of 225.66 + CGC_PLL_MUL_226_0 = BSP_CLOCKS_PLL_MUL(226U, 0U), ///< PLL multiplier of 226.00 + CGC_PLL_MUL_226_33 = BSP_CLOCKS_PLL_MUL(226U, 33U), ///< PLL multiplier of 226.33 + CGC_PLL_MUL_226_5 = BSP_CLOCKS_PLL_MUL(226U, 50U), ///< PLL multiplier of 226.50 + CGC_PLL_MUL_226_66 = BSP_CLOCKS_PLL_MUL(226U, 66U), ///< PLL multiplier of 226.66 + CGC_PLL_MUL_227_0 = BSP_CLOCKS_PLL_MUL(227U, 0U), ///< PLL multiplier of 227.00 + CGC_PLL_MUL_227_33 = BSP_CLOCKS_PLL_MUL(227U, 33U), ///< PLL multiplier of 227.33 + CGC_PLL_MUL_227_5 = BSP_CLOCKS_PLL_MUL(227U, 50U), ///< PLL multiplier of 227.50 + CGC_PLL_MUL_227_66 = BSP_CLOCKS_PLL_MUL(227U, 66U), ///< PLL multiplier of 227.66 + CGC_PLL_MUL_228_0 = BSP_CLOCKS_PLL_MUL(228U, 0U), ///< PLL multiplier of 228.00 + CGC_PLL_MUL_228_33 = BSP_CLOCKS_PLL_MUL(228U, 33U), ///< PLL multiplier of 228.33 + CGC_PLL_MUL_228_5 = BSP_CLOCKS_PLL_MUL(228U, 50U), ///< PLL multiplier of 228.50 + CGC_PLL_MUL_228_66 = BSP_CLOCKS_PLL_MUL(228U, 66U), ///< PLL multiplier of 228.66 + CGC_PLL_MUL_229_0 = BSP_CLOCKS_PLL_MUL(229U, 0U), ///< PLL multiplier of 229.00 + CGC_PLL_MUL_229_33 = BSP_CLOCKS_PLL_MUL(229U, 33U), ///< PLL multiplier of 229.33 + CGC_PLL_MUL_229_5 = BSP_CLOCKS_PLL_MUL(229U, 50U), ///< PLL multiplier of 229.50 + CGC_PLL_MUL_229_66 = BSP_CLOCKS_PLL_MUL(229U, 66U), ///< PLL multiplier of 229.66 + CGC_PLL_MUL_230_0 = BSP_CLOCKS_PLL_MUL(230U, 0U), ///< PLL multiplier of 230.00 + CGC_PLL_MUL_230_33 = BSP_CLOCKS_PLL_MUL(230U, 33U), ///< PLL multiplier of 230.33 + CGC_PLL_MUL_230_5 = BSP_CLOCKS_PLL_MUL(230U, 50U), ///< PLL multiplier of 230.50 + CGC_PLL_MUL_230_66 = BSP_CLOCKS_PLL_MUL(230U, 66U), ///< PLL multiplier of 230.66 + CGC_PLL_MUL_231_0 = BSP_CLOCKS_PLL_MUL(231U, 0U), ///< PLL multiplier of 231.00 + CGC_PLL_MUL_231_33 = BSP_CLOCKS_PLL_MUL(231U, 33U), ///< PLL multiplier of 231.33 + CGC_PLL_MUL_231_5 = BSP_CLOCKS_PLL_MUL(231U, 50U), ///< PLL multiplier of 231.50 + CGC_PLL_MUL_231_66 = BSP_CLOCKS_PLL_MUL(231U, 66U), ///< PLL multiplier of 231.66 + CGC_PLL_MUL_232_0 = BSP_CLOCKS_PLL_MUL(232U, 0U), ///< PLL multiplier of 232.00 + CGC_PLL_MUL_232_33 = BSP_CLOCKS_PLL_MUL(232U, 33U), ///< PLL multiplier of 232.33 + CGC_PLL_MUL_232_5 = BSP_CLOCKS_PLL_MUL(232U, 50U), ///< PLL multiplier of 232.50 + CGC_PLL_MUL_232_66 = BSP_CLOCKS_PLL_MUL(232U, 66U), ///< PLL multiplier of 232.66 + CGC_PLL_MUL_233_0 = BSP_CLOCKS_PLL_MUL(233U, 0U), ///< PLL multiplier of 233.00 + CGC_PLL_MUL_233_33 = BSP_CLOCKS_PLL_MUL(233U, 33U), ///< PLL multiplier of 233.33 + CGC_PLL_MUL_233_5 = BSP_CLOCKS_PLL_MUL(233U, 50U), ///< PLL multiplier of 233.50 + CGC_PLL_MUL_233_66 = BSP_CLOCKS_PLL_MUL(233U, 66U), ///< PLL multiplier of 233.66 + CGC_PLL_MUL_234_0 = BSP_CLOCKS_PLL_MUL(234U, 0U), ///< PLL multiplier of 234.00 + CGC_PLL_MUL_234_33 = BSP_CLOCKS_PLL_MUL(234U, 33U), ///< PLL multiplier of 234.33 + CGC_PLL_MUL_234_5 = BSP_CLOCKS_PLL_MUL(234U, 50U), ///< PLL multiplier of 234.50 + CGC_PLL_MUL_234_66 = BSP_CLOCKS_PLL_MUL(234U, 66U), ///< PLL multiplier of 234.66 + CGC_PLL_MUL_235_0 = BSP_CLOCKS_PLL_MUL(235U, 0U), ///< PLL multiplier of 235.00 + CGC_PLL_MUL_235_33 = BSP_CLOCKS_PLL_MUL(235U, 33U), ///< PLL multiplier of 235.33 + CGC_PLL_MUL_235_5 = BSP_CLOCKS_PLL_MUL(235U, 50U), ///< PLL multiplier of 235.50 + CGC_PLL_MUL_235_66 = BSP_CLOCKS_PLL_MUL(235U, 66U), ///< PLL multiplier of 235.66 + CGC_PLL_MUL_236_0 = BSP_CLOCKS_PLL_MUL(236U, 0U), ///< PLL multiplier of 236.00 + CGC_PLL_MUL_236_33 = BSP_CLOCKS_PLL_MUL(236U, 33U), ///< PLL multiplier of 236.33 + CGC_PLL_MUL_236_5 = BSP_CLOCKS_PLL_MUL(236U, 50U), ///< PLL multiplier of 236.50 + CGC_PLL_MUL_236_66 = BSP_CLOCKS_PLL_MUL(236U, 66U), ///< PLL multiplier of 236.66 + CGC_PLL_MUL_237_0 = BSP_CLOCKS_PLL_MUL(237U, 0U), ///< PLL multiplier of 237.00 + CGC_PLL_MUL_237_33 = BSP_CLOCKS_PLL_MUL(237U, 33U), ///< PLL multiplier of 237.33 + CGC_PLL_MUL_237_5 = BSP_CLOCKS_PLL_MUL(237U, 50U), ///< PLL multiplier of 237.50 + CGC_PLL_MUL_237_66 = BSP_CLOCKS_PLL_MUL(237U, 66U), ///< PLL multiplier of 237.66 + CGC_PLL_MUL_238_0 = BSP_CLOCKS_PLL_MUL(238U, 0U), ///< PLL multiplier of 238.00 + CGC_PLL_MUL_238_33 = BSP_CLOCKS_PLL_MUL(238U, 33U), ///< PLL multiplier of 238.33 + CGC_PLL_MUL_238_5 = BSP_CLOCKS_PLL_MUL(238U, 50U), ///< PLL multiplier of 238.50 + CGC_PLL_MUL_238_66 = BSP_CLOCKS_PLL_MUL(238U, 66U), ///< PLL multiplier of 238.66 + CGC_PLL_MUL_239_0 = BSP_CLOCKS_PLL_MUL(239U, 0U), ///< PLL multiplier of 239.00 + CGC_PLL_MUL_239_33 = BSP_CLOCKS_PLL_MUL(239U, 33U), ///< PLL multiplier of 239.33 + CGC_PLL_MUL_239_5 = BSP_CLOCKS_PLL_MUL(239U, 50U), ///< PLL multiplier of 239.50 + CGC_PLL_MUL_239_66 = BSP_CLOCKS_PLL_MUL(239U, 66U), ///< PLL multiplier of 239.66 + CGC_PLL_MUL_240_0 = BSP_CLOCKS_PLL_MUL(240U, 0U), ///< PLL multiplier of 240.00 + CGC_PLL_MUL_240_33 = BSP_CLOCKS_PLL_MUL(240U, 33U), ///< PLL multiplier of 240.33 + CGC_PLL_MUL_240_5 = BSP_CLOCKS_PLL_MUL(240U, 50U), ///< PLL multiplier of 240.50 + CGC_PLL_MUL_240_66 = BSP_CLOCKS_PLL_MUL(240U, 66U), ///< PLL multiplier of 240.66 + CGC_PLL_MUL_241_0 = BSP_CLOCKS_PLL_MUL(241U, 0U), ///< PLL multiplier of 241.00 + CGC_PLL_MUL_241_33 = BSP_CLOCKS_PLL_MUL(241U, 33U), ///< PLL multiplier of 241.33 + CGC_PLL_MUL_241_5 = BSP_CLOCKS_PLL_MUL(241U, 50U), ///< PLL multiplier of 241.50 + CGC_PLL_MUL_241_66 = BSP_CLOCKS_PLL_MUL(241U, 66U), ///< PLL multiplier of 241.66 + CGC_PLL_MUL_242_0 = BSP_CLOCKS_PLL_MUL(242U, 0U), ///< PLL multiplier of 242.00 + CGC_PLL_MUL_242_33 = BSP_CLOCKS_PLL_MUL(242U, 33U), ///< PLL multiplier of 242.33 + CGC_PLL_MUL_242_5 = BSP_CLOCKS_PLL_MUL(242U, 50U), ///< PLL multiplier of 242.50 + CGC_PLL_MUL_242_66 = BSP_CLOCKS_PLL_MUL(242U, 66U), ///< PLL multiplier of 242.66 + CGC_PLL_MUL_243_0 = BSP_CLOCKS_PLL_MUL(243U, 0U), ///< PLL multiplier of 243.00 + CGC_PLL_MUL_243_33 = BSP_CLOCKS_PLL_MUL(243U, 33U), ///< PLL multiplier of 243.33 + CGC_PLL_MUL_243_5 = BSP_CLOCKS_PLL_MUL(243U, 50U), ///< PLL multiplier of 243.50 + CGC_PLL_MUL_243_66 = BSP_CLOCKS_PLL_MUL(243U, 66U), ///< PLL multiplier of 243.66 + CGC_PLL_MUL_244_0 = BSP_CLOCKS_PLL_MUL(244U, 0U), ///< PLL multiplier of 244.00 + CGC_PLL_MUL_244_33 = BSP_CLOCKS_PLL_MUL(244U, 33U), ///< PLL multiplier of 244.33 + CGC_PLL_MUL_244_5 = BSP_CLOCKS_PLL_MUL(244U, 50U), ///< PLL multiplier of 244.50 + CGC_PLL_MUL_244_66 = BSP_CLOCKS_PLL_MUL(244U, 66U), ///< PLL multiplier of 244.66 + CGC_PLL_MUL_245_0 = BSP_CLOCKS_PLL_MUL(245U, 0U), ///< PLL multiplier of 245.00 + CGC_PLL_MUL_245_33 = BSP_CLOCKS_PLL_MUL(245U, 33U), ///< PLL multiplier of 245.33 + CGC_PLL_MUL_245_5 = BSP_CLOCKS_PLL_MUL(245U, 50U), ///< PLL multiplier of 245.50 + CGC_PLL_MUL_245_66 = BSP_CLOCKS_PLL_MUL(245U, 66U), ///< PLL multiplier of 245.66 + CGC_PLL_MUL_246_0 = BSP_CLOCKS_PLL_MUL(246U, 0U), ///< PLL multiplier of 246.00 + CGC_PLL_MUL_246_33 = BSP_CLOCKS_PLL_MUL(246U, 33U), ///< PLL multiplier of 246.33 + CGC_PLL_MUL_246_5 = BSP_CLOCKS_PLL_MUL(246U, 50U), ///< PLL multiplier of 246.50 + CGC_PLL_MUL_246_66 = BSP_CLOCKS_PLL_MUL(246U, 66U), ///< PLL multiplier of 246.66 + CGC_PLL_MUL_247_0 = BSP_CLOCKS_PLL_MUL(247U, 0U), ///< PLL multiplier of 247.00 + CGC_PLL_MUL_247_33 = BSP_CLOCKS_PLL_MUL(247U, 33U), ///< PLL multiplier of 247.33 + CGC_PLL_MUL_247_5 = BSP_CLOCKS_PLL_MUL(247U, 50U), ///< PLL multiplier of 247.50 + CGC_PLL_MUL_247_66 = BSP_CLOCKS_PLL_MUL(247U, 66U), ///< PLL multiplier of 247.66 + CGC_PLL_MUL_248_0 = BSP_CLOCKS_PLL_MUL(248U, 0U), ///< PLL multiplier of 248.00 + CGC_PLL_MUL_248_33 = BSP_CLOCKS_PLL_MUL(248U, 33U), ///< PLL multiplier of 248.33 + CGC_PLL_MUL_248_5 = BSP_CLOCKS_PLL_MUL(248U, 50U), ///< PLL multiplier of 248.50 + CGC_PLL_MUL_248_66 = BSP_CLOCKS_PLL_MUL(248U, 66U), ///< PLL multiplier of 248.66 + CGC_PLL_MUL_249_0 = BSP_CLOCKS_PLL_MUL(249U, 0U), ///< PLL multiplier of 249.00 + CGC_PLL_MUL_249_33 = BSP_CLOCKS_PLL_MUL(249U, 33U), ///< PLL multiplier of 249.33 + CGC_PLL_MUL_249_5 = BSP_CLOCKS_PLL_MUL(249U, 50U), ///< PLL multiplier of 249.50 + CGC_PLL_MUL_249_66 = BSP_CLOCKS_PLL_MUL(249U, 66U), ///< PLL multiplier of 249.66 + CGC_PLL_MUL_250_0 = BSP_CLOCKS_PLL_MUL(250U, 0U), ///< PLL multiplier of 250.00 + CGC_PLL_MUL_250_33 = BSP_CLOCKS_PLL_MUL(250U, 33U), ///< PLL multiplier of 250.33 + CGC_PLL_MUL_250_5 = BSP_CLOCKS_PLL_MUL(250U, 50U), ///< PLL multiplier of 250.50 + CGC_PLL_MUL_250_66 = BSP_CLOCKS_PLL_MUL(250U, 66U), ///< PLL multiplier of 250.66 + CGC_PLL_MUL_251_0 = BSP_CLOCKS_PLL_MUL(251U, 0U), ///< PLL multiplier of 251.00 + CGC_PLL_MUL_251_33 = BSP_CLOCKS_PLL_MUL(251U, 33U), ///< PLL multiplier of 251.33 + CGC_PLL_MUL_251_5 = BSP_CLOCKS_PLL_MUL(251U, 50U), ///< PLL multiplier of 251.50 + CGC_PLL_MUL_251_66 = BSP_CLOCKS_PLL_MUL(251U, 66U), ///< PLL multiplier of 251.66 + CGC_PLL_MUL_252_0 = BSP_CLOCKS_PLL_MUL(252U, 0U), ///< PLL multiplier of 252.00 + CGC_PLL_MUL_252_33 = BSP_CLOCKS_PLL_MUL(252U, 33U), ///< PLL multiplier of 252.33 + CGC_PLL_MUL_252_5 = BSP_CLOCKS_PLL_MUL(252U, 50U), ///< PLL multiplier of 252.50 + CGC_PLL_MUL_252_66 = BSP_CLOCKS_PLL_MUL(252U, 66U), ///< PLL multiplier of 252.66 + CGC_PLL_MUL_253_0 = BSP_CLOCKS_PLL_MUL(253U, 0U), ///< PLL multiplier of 253.00 + CGC_PLL_MUL_253_33 = BSP_CLOCKS_PLL_MUL(253U, 33U), ///< PLL multiplier of 253.33 + CGC_PLL_MUL_253_5 = BSP_CLOCKS_PLL_MUL(253U, 50U), ///< PLL multiplier of 253.50 + CGC_PLL_MUL_253_66 = BSP_CLOCKS_PLL_MUL(253U, 66U), ///< PLL multiplier of 253.66 + CGC_PLL_MUL_254_0 = BSP_CLOCKS_PLL_MUL(254U, 0U), ///< PLL multiplier of 254.00 + CGC_PLL_MUL_254_33 = BSP_CLOCKS_PLL_MUL(254U, 33U), ///< PLL multiplier of 254.33 + CGC_PLL_MUL_254_5 = BSP_CLOCKS_PLL_MUL(254U, 50U), ///< PLL multiplier of 254.50 + CGC_PLL_MUL_254_66 = BSP_CLOCKS_PLL_MUL(254U, 66U), ///< PLL multiplier of 254.66 + CGC_PLL_MUL_255_0 = BSP_CLOCKS_PLL_MUL(255U, 0U), ///< PLL multiplier of 255.00 + CGC_PLL_MUL_255_33 = BSP_CLOCKS_PLL_MUL(255U, 33U), ///< PLL multiplier of 255.33 + CGC_PLL_MUL_255_5 = BSP_CLOCKS_PLL_MUL(255U, 50U), ///< PLL multiplier of 255.50 + CGC_PLL_MUL_255_66 = BSP_CLOCKS_PLL_MUL(255U, 66U), ///< PLL multiplier of 255.66 + CGC_PLL_MUL_256_0 = BSP_CLOCKS_PLL_MUL(256U, 0U), ///< PLL multiplier of 256.00 + CGC_PLL_MUL_256_33 = BSP_CLOCKS_PLL_MUL(256U, 33U), ///< PLL multiplier of 256.33 + CGC_PLL_MUL_256_5 = BSP_CLOCKS_PLL_MUL(256U, 50U), ///< PLL multiplier of 256.50 + CGC_PLL_MUL_256_66 = BSP_CLOCKS_PLL_MUL(256U, 66U), ///< PLL multiplier of 256.66 + CGC_PLL_MUL_257_0 = BSP_CLOCKS_PLL_MUL(257U, 0U), ///< PLL multiplier of 257.00 + CGC_PLL_MUL_257_33 = BSP_CLOCKS_PLL_MUL(257U, 33U), ///< PLL multiplier of 257.33 + CGC_PLL_MUL_257_5 = BSP_CLOCKS_PLL_MUL(257U, 50U), ///< PLL multiplier of 257.50 + CGC_PLL_MUL_257_66 = BSP_CLOCKS_PLL_MUL(257U, 66U), ///< PLL multiplier of 257.66 + CGC_PLL_MUL_258_0 = BSP_CLOCKS_PLL_MUL(258U, 0U), ///< PLL multiplier of 258.00 + CGC_PLL_MUL_258_33 = BSP_CLOCKS_PLL_MUL(258U, 33U), ///< PLL multiplier of 258.33 + CGC_PLL_MUL_258_5 = BSP_CLOCKS_PLL_MUL(258U, 50U), ///< PLL multiplier of 258.50 + CGC_PLL_MUL_258_66 = BSP_CLOCKS_PLL_MUL(258U, 66U), ///< PLL multiplier of 258.66 + CGC_PLL_MUL_259_0 = BSP_CLOCKS_PLL_MUL(259U, 0U), ///< PLL multiplier of 259.00 + CGC_PLL_MUL_259_33 = BSP_CLOCKS_PLL_MUL(259U, 33U), ///< PLL multiplier of 259.33 + CGC_PLL_MUL_259_5 = BSP_CLOCKS_PLL_MUL(259U, 50U), ///< PLL multiplier of 259.50 + CGC_PLL_MUL_259_66 = BSP_CLOCKS_PLL_MUL(259U, 66U), ///< PLL multiplier of 259.66 + CGC_PLL_MUL_260_0 = BSP_CLOCKS_PLL_MUL(260U, 0U), ///< PLL multiplier of 260.00 + CGC_PLL_MUL_260_33 = BSP_CLOCKS_PLL_MUL(260U, 33U), ///< PLL multiplier of 260.33 + CGC_PLL_MUL_260_5 = BSP_CLOCKS_PLL_MUL(260U, 50U), ///< PLL multiplier of 260.50 + CGC_PLL_MUL_260_66 = BSP_CLOCKS_PLL_MUL(260U, 66U), ///< PLL multiplier of 260.66 + CGC_PLL_MUL_261_0 = BSP_CLOCKS_PLL_MUL(261U, 0U), ///< PLL multiplier of 261.00 + CGC_PLL_MUL_261_33 = BSP_CLOCKS_PLL_MUL(261U, 33U), ///< PLL multiplier of 261.33 + CGC_PLL_MUL_261_5 = BSP_CLOCKS_PLL_MUL(261U, 50U), ///< PLL multiplier of 261.50 + CGC_PLL_MUL_261_66 = BSP_CLOCKS_PLL_MUL(261U, 66U), ///< PLL multiplier of 261.66 + CGC_PLL_MUL_262_0 = BSP_CLOCKS_PLL_MUL(262U, 0U), ///< PLL multiplier of 262.00 + CGC_PLL_MUL_262_33 = BSP_CLOCKS_PLL_MUL(262U, 33U), ///< PLL multiplier of 262.33 + CGC_PLL_MUL_262_5 = BSP_CLOCKS_PLL_MUL(262U, 50U), ///< PLL multiplier of 262.50 + CGC_PLL_MUL_262_66 = BSP_CLOCKS_PLL_MUL(262U, 66U), ///< PLL multiplier of 262.66 + CGC_PLL_MUL_263_0 = BSP_CLOCKS_PLL_MUL(263U, 0U), ///< PLL multiplier of 263.00 + CGC_PLL_MUL_263_33 = BSP_CLOCKS_PLL_MUL(263U, 33U), ///< PLL multiplier of 263.33 + CGC_PLL_MUL_263_5 = BSP_CLOCKS_PLL_MUL(263U, 50U), ///< PLL multiplier of 263.50 + CGC_PLL_MUL_263_66 = BSP_CLOCKS_PLL_MUL(263U, 66U), ///< PLL multiplier of 263.66 + CGC_PLL_MUL_264_0 = BSP_CLOCKS_PLL_MUL(264U, 0U), ///< PLL multiplier of 264.00 + CGC_PLL_MUL_264_33 = BSP_CLOCKS_PLL_MUL(264U, 33U), ///< PLL multiplier of 264.33 + CGC_PLL_MUL_264_5 = BSP_CLOCKS_PLL_MUL(264U, 50U), ///< PLL multiplier of 264.50 + CGC_PLL_MUL_264_66 = BSP_CLOCKS_PLL_MUL(264U, 66U), ///< PLL multiplier of 264.66 + CGC_PLL_MUL_265_0 = BSP_CLOCKS_PLL_MUL(265U, 0U), ///< PLL multiplier of 265.00 + CGC_PLL_MUL_265_33 = BSP_CLOCKS_PLL_MUL(265U, 33U), ///< PLL multiplier of 265.33 + CGC_PLL_MUL_265_5 = BSP_CLOCKS_PLL_MUL(265U, 50U), ///< PLL multiplier of 265.50 + CGC_PLL_MUL_265_66 = BSP_CLOCKS_PLL_MUL(265U, 66U), ///< PLL multiplier of 265.66 + CGC_PLL_MUL_266_0 = BSP_CLOCKS_PLL_MUL(266U, 0U), ///< PLL multiplier of 266.00 + CGC_PLL_MUL_266_33 = BSP_CLOCKS_PLL_MUL(266U, 33U), ///< PLL multiplier of 266.33 + CGC_PLL_MUL_266_5 = BSP_CLOCKS_PLL_MUL(266U, 50U), ///< PLL multiplier of 266.50 + CGC_PLL_MUL_266_66 = BSP_CLOCKS_PLL_MUL(266U, 66U), ///< PLL multiplier of 266.66 + CGC_PLL_MUL_267_0 = BSP_CLOCKS_PLL_MUL(267U, 0U), ///< PLL multiplier of 267.00 + CGC_PLL_MUL_267_33 = BSP_CLOCKS_PLL_MUL(267U, 33U), ///< PLL multiplier of 267.33 + CGC_PLL_MUL_267_5 = BSP_CLOCKS_PLL_MUL(267U, 50U), ///< PLL multiplier of 267.50 + CGC_PLL_MUL_267_66 = BSP_CLOCKS_PLL_MUL(267U, 66U), ///< PLL multiplier of 267.66 + CGC_PLL_MUL_268_0 = BSP_CLOCKS_PLL_MUL(268U, 0U), ///< PLL multiplier of 268.00 + CGC_PLL_MUL_268_33 = BSP_CLOCKS_PLL_MUL(268U, 33U), ///< PLL multiplier of 268.33 + CGC_PLL_MUL_268_5 = BSP_CLOCKS_PLL_MUL(268U, 50U), ///< PLL multiplier of 268.50 + CGC_PLL_MUL_268_66 = BSP_CLOCKS_PLL_MUL(268U, 66U), ///< PLL multiplier of 268.66 + CGC_PLL_MUL_269_0 = BSP_CLOCKS_PLL_MUL(269U, 0U), ///< PLL multiplier of 269.00 + CGC_PLL_MUL_269_33 = BSP_CLOCKS_PLL_MUL(269U, 33U), ///< PLL multiplier of 269.33 + CGC_PLL_MUL_269_5 = BSP_CLOCKS_PLL_MUL(269U, 50U), ///< PLL multiplier of 269.50 + CGC_PLL_MUL_269_66 = BSP_CLOCKS_PLL_MUL(269U, 66U), ///< PLL multiplier of 269.66 + CGC_PLL_MUL_270_0 = BSP_CLOCKS_PLL_MUL(270U, 0U), ///< PLL multiplier of 270.00 + CGC_PLL_MUL_270_33 = BSP_CLOCKS_PLL_MUL(270U, 33U), ///< PLL multiplier of 270.33 + CGC_PLL_MUL_270_5 = BSP_CLOCKS_PLL_MUL(270U, 50U), ///< PLL multiplier of 270.50 + CGC_PLL_MUL_270_66 = BSP_CLOCKS_PLL_MUL(270U, 66U), ///< PLL multiplier of 270.66 + CGC_PLL_MUL_271_0 = BSP_CLOCKS_PLL_MUL(271U, 0U), ///< PLL multiplier of 271.00 + CGC_PLL_MUL_271_33 = BSP_CLOCKS_PLL_MUL(271U, 33U), ///< PLL multiplier of 271.33 + CGC_PLL_MUL_271_5 = BSP_CLOCKS_PLL_MUL(271U, 50U), ///< PLL multiplier of 271.50 + CGC_PLL_MUL_271_66 = BSP_CLOCKS_PLL_MUL(271U, 66U), ///< PLL multiplier of 271.66 + CGC_PLL_MUL_272_0 = BSP_CLOCKS_PLL_MUL(272U, 0U), ///< PLL multiplier of 272.00 + CGC_PLL_MUL_272_33 = BSP_CLOCKS_PLL_MUL(272U, 33U), ///< PLL multiplier of 272.33 + CGC_PLL_MUL_272_5 = BSP_CLOCKS_PLL_MUL(272U, 50U), ///< PLL multiplier of 272.50 + CGC_PLL_MUL_272_66 = BSP_CLOCKS_PLL_MUL(272U, 66U), ///< PLL multiplier of 272.66 + CGC_PLL_MUL_273_0 = BSP_CLOCKS_PLL_MUL(273U, 0U), ///< PLL multiplier of 273.00 + CGC_PLL_MUL_273_33 = BSP_CLOCKS_PLL_MUL(273U, 33U), ///< PLL multiplier of 273.33 + CGC_PLL_MUL_273_5 = BSP_CLOCKS_PLL_MUL(273U, 50U), ///< PLL multiplier of 273.50 + CGC_PLL_MUL_273_66 = BSP_CLOCKS_PLL_MUL(273U, 66U), ///< PLL multiplier of 273.66 + CGC_PLL_MUL_274_0 = BSP_CLOCKS_PLL_MUL(274U, 0U), ///< PLL multiplier of 274.00 + CGC_PLL_MUL_274_33 = BSP_CLOCKS_PLL_MUL(274U, 33U), ///< PLL multiplier of 274.33 + CGC_PLL_MUL_274_5 = BSP_CLOCKS_PLL_MUL(274U, 50U), ///< PLL multiplier of 274.50 + CGC_PLL_MUL_274_66 = BSP_CLOCKS_PLL_MUL(274U, 66U), ///< PLL multiplier of 274.66 + CGC_PLL_MUL_275_0 = BSP_CLOCKS_PLL_MUL(275U, 0U), ///< PLL multiplier of 275.00 + CGC_PLL_MUL_275_33 = BSP_CLOCKS_PLL_MUL(275U, 33U), ///< PLL multiplier of 275.33 + CGC_PLL_MUL_275_5 = BSP_CLOCKS_PLL_MUL(275U, 50U), ///< PLL multiplier of 275.50 + CGC_PLL_MUL_275_66 = BSP_CLOCKS_PLL_MUL(275U, 66U), ///< PLL multiplier of 275.66 + CGC_PLL_MUL_276_0 = BSP_CLOCKS_PLL_MUL(276U, 0U), ///< PLL multiplier of 276.00 + CGC_PLL_MUL_276_33 = BSP_CLOCKS_PLL_MUL(276U, 33U), ///< PLL multiplier of 276.33 + CGC_PLL_MUL_276_5 = BSP_CLOCKS_PLL_MUL(276U, 50U), ///< PLL multiplier of 276.50 + CGC_PLL_MUL_276_66 = BSP_CLOCKS_PLL_MUL(276U, 66U), ///< PLL multiplier of 276.66 + CGC_PLL_MUL_277_0 = BSP_CLOCKS_PLL_MUL(277U, 0U), ///< PLL multiplier of 277.00 + CGC_PLL_MUL_277_33 = BSP_CLOCKS_PLL_MUL(277U, 33U), ///< PLL multiplier of 277.33 + CGC_PLL_MUL_277_5 = BSP_CLOCKS_PLL_MUL(277U, 50U), ///< PLL multiplier of 277.50 + CGC_PLL_MUL_277_66 = BSP_CLOCKS_PLL_MUL(277U, 66U), ///< PLL multiplier of 277.66 + CGC_PLL_MUL_278_0 = BSP_CLOCKS_PLL_MUL(278U, 0U), ///< PLL multiplier of 278.00 + CGC_PLL_MUL_278_33 = BSP_CLOCKS_PLL_MUL(278U, 33U), ///< PLL multiplier of 278.33 + CGC_PLL_MUL_278_5 = BSP_CLOCKS_PLL_MUL(278U, 50U), ///< PLL multiplier of 278.50 + CGC_PLL_MUL_278_66 = BSP_CLOCKS_PLL_MUL(278U, 66U), ///< PLL multiplier of 278.66 + CGC_PLL_MUL_279_0 = BSP_CLOCKS_PLL_MUL(279U, 0U), ///< PLL multiplier of 279.00 + CGC_PLL_MUL_279_33 = BSP_CLOCKS_PLL_MUL(279U, 33U), ///< PLL multiplier of 279.33 + CGC_PLL_MUL_279_5 = BSP_CLOCKS_PLL_MUL(279U, 50U), ///< PLL multiplier of 279.50 + CGC_PLL_MUL_279_66 = BSP_CLOCKS_PLL_MUL(279U, 66U), ///< PLL multiplier of 279.66 + CGC_PLL_MUL_280_0 = BSP_CLOCKS_PLL_MUL(280U, 0U), ///< PLL multiplier of 280.00 + CGC_PLL_MUL_280_33 = BSP_CLOCKS_PLL_MUL(280U, 33U), ///< PLL multiplier of 280.33 + CGC_PLL_MUL_280_5 = BSP_CLOCKS_PLL_MUL(280U, 50U), ///< PLL multiplier of 280.50 + CGC_PLL_MUL_280_66 = BSP_CLOCKS_PLL_MUL(280U, 66U), ///< PLL multiplier of 280.66 + CGC_PLL_MUL_281_0 = BSP_CLOCKS_PLL_MUL(281U, 0U), ///< PLL multiplier of 281.00 + CGC_PLL_MUL_281_33 = BSP_CLOCKS_PLL_MUL(281U, 33U), ///< PLL multiplier of 281.33 + CGC_PLL_MUL_281_5 = BSP_CLOCKS_PLL_MUL(281U, 50U), ///< PLL multiplier of 281.50 + CGC_PLL_MUL_281_66 = BSP_CLOCKS_PLL_MUL(281U, 66U), ///< PLL multiplier of 281.66 + CGC_PLL_MUL_282_0 = BSP_CLOCKS_PLL_MUL(282U, 0U), ///< PLL multiplier of 282.00 + CGC_PLL_MUL_282_33 = BSP_CLOCKS_PLL_MUL(282U, 33U), ///< PLL multiplier of 282.33 + CGC_PLL_MUL_282_5 = BSP_CLOCKS_PLL_MUL(282U, 50U), ///< PLL multiplier of 282.50 + CGC_PLL_MUL_282_66 = BSP_CLOCKS_PLL_MUL(282U, 66U), ///< PLL multiplier of 282.66 + CGC_PLL_MUL_283_0 = BSP_CLOCKS_PLL_MUL(283U, 0U), ///< PLL multiplier of 283.00 + CGC_PLL_MUL_283_33 = BSP_CLOCKS_PLL_MUL(283U, 33U), ///< PLL multiplier of 283.33 + CGC_PLL_MUL_283_5 = BSP_CLOCKS_PLL_MUL(283U, 50U), ///< PLL multiplier of 283.50 + CGC_PLL_MUL_283_66 = BSP_CLOCKS_PLL_MUL(283U, 66U), ///< PLL multiplier of 283.66 + CGC_PLL_MUL_284_0 = BSP_CLOCKS_PLL_MUL(284U, 0U), ///< PLL multiplier of 284.00 + CGC_PLL_MUL_284_33 = BSP_CLOCKS_PLL_MUL(284U, 33U), ///< PLL multiplier of 284.33 + CGC_PLL_MUL_284_5 = BSP_CLOCKS_PLL_MUL(284U, 50U), ///< PLL multiplier of 284.50 + CGC_PLL_MUL_284_66 = BSP_CLOCKS_PLL_MUL(284U, 66U), ///< PLL multiplier of 284.66 + CGC_PLL_MUL_285_0 = BSP_CLOCKS_PLL_MUL(285U, 0U), ///< PLL multiplier of 285.00 + CGC_PLL_MUL_285_33 = BSP_CLOCKS_PLL_MUL(285U, 33U), ///< PLL multiplier of 285.33 + CGC_PLL_MUL_285_5 = BSP_CLOCKS_PLL_MUL(285U, 50U), ///< PLL multiplier of 285.50 + CGC_PLL_MUL_285_66 = BSP_CLOCKS_PLL_MUL(285U, 66U), ///< PLL multiplier of 285.66 + CGC_PLL_MUL_286_0 = BSP_CLOCKS_PLL_MUL(286U, 0U), ///< PLL multiplier of 286.00 + CGC_PLL_MUL_286_33 = BSP_CLOCKS_PLL_MUL(286U, 33U), ///< PLL multiplier of 286.33 + CGC_PLL_MUL_286_5 = BSP_CLOCKS_PLL_MUL(286U, 50U), ///< PLL multiplier of 286.50 + CGC_PLL_MUL_286_66 = BSP_CLOCKS_PLL_MUL(286U, 66U), ///< PLL multiplier of 286.66 + CGC_PLL_MUL_287_0 = BSP_CLOCKS_PLL_MUL(287U, 0U), ///< PLL multiplier of 287.00 + CGC_PLL_MUL_287_33 = BSP_CLOCKS_PLL_MUL(287U, 33U), ///< PLL multiplier of 287.33 + CGC_PLL_MUL_287_5 = BSP_CLOCKS_PLL_MUL(287U, 50U), ///< PLL multiplier of 287.50 + CGC_PLL_MUL_287_66 = BSP_CLOCKS_PLL_MUL(287U, 66U), ///< PLL multiplier of 287.66 + CGC_PLL_MUL_288_0 = BSP_CLOCKS_PLL_MUL(288U, 0U), ///< PLL multiplier of 288.00 + CGC_PLL_MUL_288_33 = BSP_CLOCKS_PLL_MUL(288U, 33U), ///< PLL multiplier of 288.33 + CGC_PLL_MUL_288_5 = BSP_CLOCKS_PLL_MUL(288U, 50U), ///< PLL multiplier of 288.50 + CGC_PLL_MUL_288_66 = BSP_CLOCKS_PLL_MUL(288U, 66U), ///< PLL multiplier of 288.66 + CGC_PLL_MUL_289_0 = BSP_CLOCKS_PLL_MUL(289U, 0U), ///< PLL multiplier of 289.00 + CGC_PLL_MUL_289_33 = BSP_CLOCKS_PLL_MUL(289U, 33U), ///< PLL multiplier of 289.33 + CGC_PLL_MUL_289_5 = BSP_CLOCKS_PLL_MUL(289U, 50U), ///< PLL multiplier of 289.50 + CGC_PLL_MUL_289_66 = BSP_CLOCKS_PLL_MUL(289U, 66U), ///< PLL multiplier of 289.66 + CGC_PLL_MUL_290_0 = BSP_CLOCKS_PLL_MUL(290U, 0U), ///< PLL multiplier of 290.00 + CGC_PLL_MUL_290_33 = BSP_CLOCKS_PLL_MUL(290U, 33U), ///< PLL multiplier of 290.33 + CGC_PLL_MUL_290_5 = BSP_CLOCKS_PLL_MUL(290U, 50U), ///< PLL multiplier of 290.50 + CGC_PLL_MUL_290_66 = BSP_CLOCKS_PLL_MUL(290U, 66U), ///< PLL multiplier of 290.66 + CGC_PLL_MUL_291_0 = BSP_CLOCKS_PLL_MUL(291U, 0U), ///< PLL multiplier of 291.00 + CGC_PLL_MUL_291_33 = BSP_CLOCKS_PLL_MUL(291U, 33U), ///< PLL multiplier of 291.33 + CGC_PLL_MUL_291_5 = BSP_CLOCKS_PLL_MUL(291U, 50U), ///< PLL multiplier of 291.50 + CGC_PLL_MUL_291_66 = BSP_CLOCKS_PLL_MUL(291U, 66U), ///< PLL multiplier of 291.66 + CGC_PLL_MUL_292_0 = BSP_CLOCKS_PLL_MUL(292U, 0U), ///< PLL multiplier of 292.00 + CGC_PLL_MUL_292_33 = BSP_CLOCKS_PLL_MUL(292U, 33U), ///< PLL multiplier of 292.33 + CGC_PLL_MUL_292_5 = BSP_CLOCKS_PLL_MUL(292U, 50U), ///< PLL multiplier of 292.50 + CGC_PLL_MUL_292_66 = BSP_CLOCKS_PLL_MUL(292U, 66U), ///< PLL multiplier of 292.66 + CGC_PLL_MUL_293_0 = BSP_CLOCKS_PLL_MUL(293U, 0U), ///< PLL multiplier of 293.00 + CGC_PLL_MUL_293_33 = BSP_CLOCKS_PLL_MUL(293U, 33U), ///< PLL multiplier of 293.33 + CGC_PLL_MUL_293_5 = BSP_CLOCKS_PLL_MUL(293U, 50U), ///< PLL multiplier of 293.50 + CGC_PLL_MUL_293_66 = BSP_CLOCKS_PLL_MUL(293U, 66U), ///< PLL multiplier of 293.66 + CGC_PLL_MUL_294_0 = BSP_CLOCKS_PLL_MUL(294U, 0U), ///< PLL multiplier of 294.00 + CGC_PLL_MUL_294_33 = BSP_CLOCKS_PLL_MUL(294U, 33U), ///< PLL multiplier of 294.33 + CGC_PLL_MUL_294_5 = BSP_CLOCKS_PLL_MUL(294U, 50U), ///< PLL multiplier of 294.50 + CGC_PLL_MUL_294_66 = BSP_CLOCKS_PLL_MUL(294U, 66U), ///< PLL multiplier of 294.66 + CGC_PLL_MUL_295_0 = BSP_CLOCKS_PLL_MUL(295U, 0U), ///< PLL multiplier of 295.00 + CGC_PLL_MUL_295_33 = BSP_CLOCKS_PLL_MUL(295U, 33U), ///< PLL multiplier of 295.33 + CGC_PLL_MUL_295_5 = BSP_CLOCKS_PLL_MUL(295U, 50U), ///< PLL multiplier of 295.50 + CGC_PLL_MUL_295_66 = BSP_CLOCKS_PLL_MUL(295U, 66U), ///< PLL multiplier of 295.66 + CGC_PLL_MUL_296_0 = BSP_CLOCKS_PLL_MUL(296U, 0U), ///< PLL multiplier of 296.00 + CGC_PLL_MUL_296_33 = BSP_CLOCKS_PLL_MUL(296U, 33U), ///< PLL multiplier of 296.33 + CGC_PLL_MUL_296_5 = BSP_CLOCKS_PLL_MUL(296U, 50U), ///< PLL multiplier of 296.50 + CGC_PLL_MUL_296_66 = BSP_CLOCKS_PLL_MUL(296U, 66U), ///< PLL multiplier of 296.66 + CGC_PLL_MUL_297_0 = BSP_CLOCKS_PLL_MUL(297U, 0U), ///< PLL multiplier of 297.00 + CGC_PLL_MUL_297_33 = BSP_CLOCKS_PLL_MUL(297U, 33U), ///< PLL multiplier of 297.33 + CGC_PLL_MUL_297_5 = BSP_CLOCKS_PLL_MUL(297U, 50U), ///< PLL multiplier of 297.50 + CGC_PLL_MUL_297_66 = BSP_CLOCKS_PLL_MUL(297U, 66U), ///< PLL multiplier of 297.66 + CGC_PLL_MUL_298_0 = BSP_CLOCKS_PLL_MUL(298U, 0U), ///< PLL multiplier of 298.00 + CGC_PLL_MUL_298_33 = BSP_CLOCKS_PLL_MUL(298U, 33U), ///< PLL multiplier of 298.33 + CGC_PLL_MUL_298_5 = BSP_CLOCKS_PLL_MUL(298U, 50U), ///< PLL multiplier of 298.50 + CGC_PLL_MUL_298_66 = BSP_CLOCKS_PLL_MUL(298U, 66U), ///< PLL multiplier of 298.66 + CGC_PLL_MUL_299_0 = BSP_CLOCKS_PLL_MUL(299U, 0U), ///< PLL multiplier of 299.00 + CGC_PLL_MUL_299_33 = BSP_CLOCKS_PLL_MUL(299U, 33U), ///< PLL multiplier of 299.33 + CGC_PLL_MUL_299_5 = BSP_CLOCKS_PLL_MUL(299U, 50U), ///< PLL multiplier of 299.50 + CGC_PLL_MUL_299_66 = BSP_CLOCKS_PLL_MUL(299U, 66U), ///< PLL multiplier of 299.66 + CGC_PLL_MUL_300_0 = BSP_CLOCKS_PLL_MUL(300U, 0U), ///< PLL multiplier of 300.00 + CGC_PLL_MUL_300_33 = BSP_CLOCKS_PLL_MUL(300U, 33U), ///< PLL multiplier of 300.33 + CGC_PLL_MUL_300_5 = BSP_CLOCKS_PLL_MUL(300U, 50U), ///< PLL multiplier of 300.50 + CGC_PLL_MUL_300_66 = BSP_CLOCKS_PLL_MUL(300U, 66U), ///< PLL multiplier of 300.66 + CGC_PLL_MUL_732_0 = BSP_CLOCKS_PLL_MUL(732U, 0U), ///< PLL multiplier of 732.00 + CGC_PLL_MUL_781_0 = BSP_CLOCKS_PLL_MUL(781U, 0U), ///< PLL multiplier of 781.00 +} cgc_pll_mul_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_clock_init(void); // Used internally by BSP + +#if BSP_TZ_NONSECURE_BUILD || BSP_SECONDARY_CORE_BUILD +void bsp_clock_freq_var_init(void); // Used internally by BSP + +#endif + +#if BSP_TZ_SECURE_BUILD +void r_bsp_clock_update_callback_set(bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory); + +#endif + +/* Used internally by CGC */ + +#if !BSP_CFG_USE_LOW_VOLTAGE_MODE +void bsp_prv_operating_mode_set(uint8_t operating_mode); + +#endif + +#if BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED +uint32_t bsp_prv_power_change_mstp_set(void); +void bsp_prv_power_change_mstp_clear(uint32_t mstp_clear_bitmask); + +#endif + +void bsp_prv_prepare_pll(uint32_t clock, uint32_t const * const p_pll_hz); + +#if !BSP_FEATURE_CGC_REGISTER_SET_B +void bsp_prv_clock_set(uint32_t clock, uint32_t sckdivcr, uint16_t sckdivcr2); + +#else +void bsp_prv_clock_set(uint32_t clock, uint8_t hocodiv, uint8_t mocodiv, uint8_t moscdiv); +uint32_t bsp_prv_clock_source_get(void); + +#endif + +/* RTC Initialization */ +#if BSP_FEATURE_RTC_IS_AVAILABLE || BSP_FEATURE_RTC_HAS_TCEN || BSP_FEATURE_SYSC_HAS_VBTICTLR +void R_BSP_Init_RTC(void); + +#endif + +#if BSP_FEATURE_LPM_RTC_REGISTER_CLOCK_DISABLE +bool bsp_prv_rtc_register_clock_set(bool enable); + +#endif + +#if BSP_CFG_SLEEP_MODE_DELAY_ENABLE || BSP_CFG_RTOS_SLEEP_MODE_DELAY_ENABLE +bool bsp_prv_clock_prepare_pre_sleep(void); +void bsp_prv_clock_prepare_post_sleep(bool cpuclk_slowed); + +#endif + +/* The public function is used to get state or initialize the sub-clock. */ +#if BSP_FEATURE_RTC_IS_IRTC +fsp_err_t R_BSP_SubclockStatusGet(); +fsp_err_t R_BSP_SubclockInitialize(); + +#endif + +#if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS +void bsp_prv_clear_pfb(void); +void bsp_prv_set_pfb(void); + +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.c new file mode 100644 index 00000000000..4368950994b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.c @@ -0,0 +1,311 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#if defined(__ICCARM__) + #define WEAK_ERROR_ATTRIBUTE + #define WEAK_INIT_ATTRIBUTE + #pragma weak fsp_error_log = fsp_error_log_internal + #pragma weak bsp_init = bsp_init_internal +#elif defined(__GNUC__) + + #define WEAK_ERROR_ATTRIBUTE __attribute__((weak, alias("fsp_error_log_internal"))) + + #define WEAK_INIT_ATTRIBUTE __attribute__((weak, alias("bsp_init_internal"))) +#endif + +#define FSP_SECTION_VERSION ".version" + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/** Prototype of initialization function called before main. This prototype sets the weak association of this + * function to an internal example implementation. If this function is defined in the application code, the + * application code version is used. */ + +void bsp_init(void * p_args) WEAK_INIT_ATTRIBUTE; + +void bsp_init_internal(void * p_args); /// Default initialization function + +#if (1 == BSP_CFG_ASSERT) + +/** Prototype of function called before errors are returned in FSP code if BSP_CFG_ASSERT is set to 1. This + * prototype sets the weak association of this function to an internal example implementation. */ + +void fsp_error_log(fsp_err_t err, const char * file, int32_t line) WEAK_ERROR_ATTRIBUTE; + +void fsp_error_log_internal(fsp_err_t err, const char * file, int32_t line); /// Default error logger function + +#endif +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_SECURE_BUILD == 1 +static bool bsp_valid_register_check(uint32_t register_address, + uint32_t const * const p_register_table, + uint32_t register_table_length); + +#endif + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/* FSP pack version structure. */ +static BSP_DONT_REMOVE const fsp_pack_version_t g_fsp_version BSP_PLACE_IN_SECTION (FSP_SECTION_VERSION) = +{ + .version_id_b = + { + .minor = FSP_VERSION_MINOR, + .major = FSP_VERSION_MAJOR, + .build = FSP_VERSION_BUILD, + .patch = FSP_VERSION_PATCH + } +}; + +/* Public FSP version name. */ +static BSP_DONT_REMOVE const uint8_t g_fsp_version_string[] BSP_PLACE_IN_SECTION(FSP_SECTION_VERSION) = + FSP_VERSION_STRING; + +/* Unique FSP version ID. */ +static BSP_DONT_REMOVE const uint8_t g_fsp_version_build_string[] BSP_PLACE_IN_SECTION(FSP_SECTION_VERSION) = + FSP_VERSION_BUILD_STRING; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Get the FSP version based on compile time macros. + * + * @param[out] p_version Memory address to return version information to. + * + * @retval FSP_SUCCESS Version information stored. + * @retval FSP_ERR_ASSERTION The parameter p_version is NULL. + **********************************************************************************************************************/ +fsp_err_t R_FSP_VersionGet (fsp_pack_version_t * const p_version) +{ +#if BSP_CFG_PARAM_CHECKING_ENABLE + + /** Verify parameters are valid */ + FSP_ASSERT(NULL != p_version); +#endif + + *p_version = g_fsp_version; + + return FSP_SUCCESS; +} + +#if (1 == BSP_CFG_ASSERT) + +/*******************************************************************************************************************//** + * Default error logger function, used only if fsp_error_log is not defined in the user application. + * + * @param[in] err The error code encountered. + * @param[in] file The file name in which the error code was encountered. + * @param[in] line The line number at which the error code was encountered. + **********************************************************************************************************************/ +void fsp_error_log_internal (fsp_err_t err, const char * file, int32_t line) +{ + /** Do nothing. Do not generate any 'unused' warnings. */ + FSP_PARAMETER_NOT_USED(err); + FSP_PARAMETER_NOT_USED(file); + FSP_PARAMETER_NOT_USED(line); +} + +#endif + +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_SECURE_BUILD == 1 + +/*******************************************************************************************************************//** + * Read a secure 8-bit STYPE3 register in the non-secure state. + * + * @param[in] p_reg The address of the secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +BSP_CMSE_NONSECURE_ENTRY uint8_t R_BSP_NSC_STYPE3_RegU8Read (uint8_t volatile const * p_reg) +{ + uint8_t volatile * p_reg_s = (uint8_t volatile *) ((uint32_t) p_reg & ~BSP_FEATURE_TZ_NS_OFFSET); + + /* Table of secure registers that may be read from the non-secure application. */ + static const uint32_t valid_addresses[] = + { + (uint32_t) &R_SYSTEM->SCKDIVCR2, + (uint32_t) &R_SYSTEM->SCKSCR, + (uint32_t) &R_SYSTEM->SPICKDIVCR, + (uint32_t) &R_SYSTEM->SPICKCR, + (uint32_t) &R_SYSTEM->SCICKDIVCR, + (uint32_t) &R_SYSTEM->SCICKCR, + (uint32_t) &R_SYSTEM->CANFDCKCR, + (uint32_t) &R_SYSTEM->PLLCR, + (uint32_t) &R_SYSTEM->PLL2CR, + (uint32_t) &R_SYSTEM->MOCOCR, + (uint32_t) &R_SYSTEM->OPCCR, + }; + + if (bsp_valid_register_check((uint32_t) p_reg_s, valid_addresses, + sizeof(valid_addresses) / sizeof(valid_addresses[0]))) + { + return *p_reg_s; + } + + /* Generate a trustzone access violation by accessing the non-secure aliased address. */ + return *((uint8_t volatile *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET)); +} + +/*******************************************************************************************************************//** + * Read a secure 16-bit STYPE3 register in the non-secure state. + * + * @param[in] p_reg The address of the secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +BSP_CMSE_NONSECURE_ENTRY uint16_t R_BSP_NSC_STYPE3_RegU16Read (uint16_t volatile const * p_reg) +{ + uint16_t volatile * p_reg_s = (uint16_t volatile *) ((uint32_t) p_reg & ~BSP_FEATURE_TZ_NS_OFFSET); + + /* Table of secure registers that may be read from the non-secure application. */ + static const uint32_t valid_addresses[] = + { + (uint32_t) &R_DTC->DTCSTS, + }; + + if (bsp_valid_register_check((uint32_t) p_reg_s, valid_addresses, + sizeof(valid_addresses) / sizeof(valid_addresses[0]))) + { + return *p_reg_s; + } + + /* Generate a trustzone access violation by accessing the non-secure aliased address. */ + return *((uint16_t volatile *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET)); +} + +/*******************************************************************************************************************//** + * Read a secure 32-bit STYPE3 register in the non-secure state. + * + * @param[in] p_reg The address of the secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +BSP_CMSE_NONSECURE_ENTRY uint32_t R_BSP_NSC_STYPE3_RegU32Read (uint32_t volatile const * p_reg) +{ + uint32_t volatile * p_reg_s = (uint32_t volatile *) ((uint32_t) p_reg & ~BSP_FEATURE_TZ_NS_OFFSET); + + /* Table of secure registers that may be read from the non-secure application. */ + static const uint32_t valid_addresses[] = + { + (uint32_t) &R_SYSTEM->SCKDIVCR, + }; + + if (bsp_valid_register_check((uint32_t) p_reg_s, valid_addresses, + sizeof(valid_addresses) / sizeof(valid_addresses[0]))) + { + return *p_reg_s; + } + + /* Generate a trustzone access violation by accessing the non-secure aliased address. */ + return *((uint32_t volatile *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET)); +} + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Default initialization function, used only if bsp_init is not defined in the user application. + **********************************************************************************************************************/ +void bsp_init_internal (void * p_args) +{ + /* Do nothing. */ + FSP_PARAMETER_NOT_USED(p_args); +} + +#if defined(__ARMCC_VERSION) + +/*******************************************************************************************************************//** + * Default implementation of assert for AC6. + **********************************************************************************************************************/ +__attribute__((weak, noreturn)) +void __aeabi_assert (const char * expr, const char * file, int line) +{ + FSP_PARAMETER_NOT_USED(expr); + FSP_PARAMETER_NOT_USED(file); + FSP_PARAMETER_NOT_USED(line); + __BKPT(0); + while (1) + { + /* Do nothing. */ + } +} + +#elif defined(__GNUC__) + +/* The default assert implementation for GCC brings in printing/formatting code. FSP overrides the default assert + * behavior to reduce code size. */ + + #if !BSP_CFG_USE_STANDARD_ASSERT + +/*******************************************************************************************************************//** + * Default implementation of assert for GCC. + **********************************************************************************************************************/ +BSP_WEAK_REFERENCE void __assert_func (const char * file, int line, const char * func, const char * expr) +{ + FSP_PARAMETER_NOT_USED(file); + FSP_PARAMETER_NOT_USED(line); + FSP_PARAMETER_NOT_USED(func); + FSP_PARAMETER_NOT_USED(expr); + __BKPT(0); + while (1) + { + /* Do nothing. */ + } +} + + #endif + +#endif + +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_SECURE_BUILD == 1 + +/*******************************************************************************************************************//** + * Check if a register address should be accessible by the non-secure application. + **********************************************************************************************************************/ +static bool bsp_valid_register_check (uint32_t register_address, + uint32_t const * const p_register_table, + uint32_t register_table_length) +{ + bool valid = false; + + /* Check if the given address is valid. */ + for (uint32_t i = 0; i < register_table_length; i++) + { + if (p_register_table[i] == register_address) + { + valid = true; + break; + } + } + + return valid; +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.h new file mode 100644 index 00000000000..9bd8157dea4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_common.h @@ -0,0 +1,764 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_COMMON_H +#define BSP_COMMON_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* C99 includes. */ +#include +#include +#include +#include +#include + +/* Different compiler support. */ +#include "../../inc/api/fsp_common_api.h" +#include "bsp_compiler_support.h" + +/* BSP module includes */ +#include "../../src/bsp/mcu/all/bsp_tfu.h" +#include "../../src/bsp/mcu/all/bsp_sdram.h" +#include "../../src/bsp/mcu/all/bsp_mmf.h" +#include "../../src/bsp/mcu/all/bsp_ipc.h" + +#include "bsp_linker_info.h" + +#include "bsp_cfg.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** Used to signify that an ELC event is not able to be used as an interrupt. */ +#define BSP_IRQ_DISABLED (0xFFU) + +/* Version of this module's code and API. */ + +#if 1 == BSP_CFG_RTOS /* ThreadX */ + #include "tx_user.h" + #if defined(TX_ENABLE_EVENT_TRACE) || defined(TX_ENABLE_EXECUTION_CHANGE_NOTIFY) + #include "tx_port.h" + #define FSP_CONTEXT_SAVE tx_isr_start((uint32_t) R_FSP_CurrentIrqGet()); + #define FSP_CONTEXT_RESTORE tx_isr_end((uint32_t) R_FSP_CurrentIrqGet()); + #else + #define FSP_CONTEXT_SAVE + #define FSP_CONTEXT_RESTORE + #endif +#else + #define FSP_CONTEXT_SAVE + #define FSP_CONTEXT_RESTORE +#endif + +/** Macro that can be defined in order to enable logging in FSP modules. */ +#ifndef FSP_LOG_PRINT + #define FSP_LOG_PRINT(X) +#endif + +/** Macro to log and return error without an assertion. */ +#ifndef FSP_RETURN + + #define FSP_RETURN(err) FSP_ERROR_LOG((err)); \ + return err; +#endif + +/** This function is called before returning an error code. To stop on a runtime error, define fsp_error_log in + * user code and do required debugging (breakpoints, stack dump, etc) in this function.*/ +#if (1 == BSP_CFG_ASSERT) + + #ifndef FSP_ERROR_LOG + #define FSP_ERROR_LOG(err) \ + fsp_error_log((err), __FILE__, __LINE__); + #endif +#else + + #define FSP_ERROR_LOG(err) +#endif + +/** Default assertion calls ::FSP_ERROR_RETURN if condition "a" is false. Used to identify incorrect use of API's in FSP + * functions. */ +#if (3 == BSP_CFG_ASSERT) + #define FSP_ASSERT(a) +#elif (2 == BSP_CFG_ASSERT) + #define FSP_ASSERT(a) {assert(a);} +#else + #define FSP_ASSERT(a) FSP_ERROR_RETURN((a), FSP_ERR_ASSERTION) +#endif // ifndef FSP_ASSERT + +/** All FSP error codes are returned using this macro. Calls ::FSP_ERROR_LOG function if condition "a" is false. Used + * to identify runtime errors in FSP functions. */ + +#define FSP_ERROR_RETURN(a, err) \ + { \ + if ((a)) \ + { \ + (void) 0; /* Do nothing */ \ + } \ + else \ + { \ + FSP_ERROR_LOG(err); \ + return err; \ + } \ + } + +/* Function-like macro used to wait for a condition to be met, most often used to wait for hardware register updates. + * This macro can be redefined to add a timeout if necessary. */ +#ifndef FSP_HARDWARE_REGISTER_WAIT + #define FSP_HARDWARE_REGISTER_WAIT(reg, required_value) while (reg != required_value) { /* Wait. */} +#endif + +#ifndef FSP_REGISTER_READ + +/* Read a register and discard the result. */ + #define FSP_REGISTER_READ(A) __ASM volatile ("" : : "r" (A)); +#endif + +/**************************************************************** + * + * This check is performed to select suitable ASM API with respect to core + * + * The macros __CORE__ , __ARM7EM__ and __ARM_ARCH_8M_BASE__ are undefined for GCC, but defined(__IAR_SYSTEMS_ICC__) is false for GCC, so + * the left half of the || expression evaluates to false for GCC regardless of the values of these macros. */ + +#if (defined(__IICARM__) && defined(RENESAS_CORTEX_M23)) || defined(RENESAS_CORTEX_M4) + #ifndef BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION + #define BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION (0U) + #endif +#else + #ifdef BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION + #undef BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION + #endif + #define BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION (0U) +#endif + +/* This macro defines a variable for saving previous mask value */ +#ifndef FSP_CRITICAL_SECTION_DEFINE + + #define FSP_CRITICAL_SECTION_DEFINE uint32_t old_mask_level = 0U +#endif + +/* These macros abstract methods to save and restore the interrupt state for different architectures. */ +#if (0 == BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION) + #define FSP_CRITICAL_SECTION_GET_CURRENT_STATE __get_PRIMASK + #define FSP_CRITICAL_SECTION_SET_STATE __set_PRIMASK + #define FSP_CRITICAL_SECTION_IRQ_MASK_SET (1U) +#else + #define FSP_CRITICAL_SECTION_GET_CURRENT_STATE __get_BASEPRI + #define FSP_CRITICAL_SECTION_SET_STATE __set_BASEPRI + #define FSP_CRITICAL_SECTION_IRQ_MASK_SET ((uint8_t) (BSP_CFG_IRQ_MASK_LEVEL_FOR_CRITICAL_SECTION << \ + (8U - __NVIC_PRIO_BITS))) +#endif + +/** This macro temporarily saves the current interrupt state and disables interrupts. */ +#ifndef FSP_CRITICAL_SECTION_ENTER + #define FSP_CRITICAL_SECTION_ENTER \ + old_mask_level = FSP_CRITICAL_SECTION_GET_CURRENT_STATE(); \ + FSP_CRITICAL_SECTION_SET_STATE(FSP_CRITICAL_SECTION_IRQ_MASK_SET) +#endif + +/** This macro restores the previously saved interrupt state, reenabling interrupts. */ +#ifndef FSP_CRITICAL_SECTION_EXIT + #define FSP_CRITICAL_SECTION_EXIT FSP_CRITICAL_SECTION_SET_STATE(old_mask_level) +#endif + +/* Number of Cortex processor exceptions, used as an offset from XPSR value for the IRQn_Type macro. */ +#define FSP_PRIV_CORTEX_PROCESSOR_EXCEPTIONS (16U) + +/** Used to signify that the requested IRQ vector is not defined in this system. */ +#define FSP_INVALID_VECTOR ((IRQn_Type) - 33) + +/* Private definition used in bsp_clocks and R_FSP_SystemClockHzGet. Each bitfield in SCKDIVCR is up to 4 bits wide. */ +#if (BSP_CFG_MCU_PART_SERIES == 8) + #define FSP_PRV_SCKDIVCR_DIV_MASK (0xFU) +#else + #define FSP_PRV_SCKDIVCR_DIV_MASK (0x7U) +#endif + +/* Use the secure registers for secure projects and flat projects. */ +#if !BSP_TZ_NONSECURE_BUILD && BSP_FEATURE_TZ_HAS_TRUSTZONE + #define FSP_PRIV_TZ_USE_SECURE_REGS (1) +#else + #define FSP_PRIV_TZ_USE_SECURE_REGS (0) +#endif + +/* Put certain BSP variables in uninitialized RAM when initializing BSP early. */ +#if BSP_CFG_EARLY_INIT + #define BSP_SECTION_EARLY_INIT BSP_PLACE_IN_SECTION(BSP_SECTION_NOINIT) +#else + #define BSP_SECTION_EARLY_INIT +#endif + +/* Used to determine if this project is part of a multicore FSP Solution. */ +#if defined(BSP_PARTITION_FLASH_CPU1_S_START) + #define BSP_MULTICORE_PROJECT (1) +#else + #define BSP_MULTICORE_PROJECT (0) +#endif + +#if (BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD) && BSP_FEATURE_TZ_VERSION == 2 +BSP_CMSE_NONSECURE_ENTRY uint8_t R_BSP_NSC_STYPE3_RegU8Read(uint8_t volatile const * p_reg); +BSP_CMSE_NONSECURE_ENTRY uint16_t R_BSP_NSC_STYPE3_RegU16Read(uint16_t volatile const * p_reg); +BSP_CMSE_NONSECURE_ENTRY uint32_t R_BSP_NSC_STYPE3_RegU32Read(uint32_t volatile const * p_reg); + +#endif + +#if BSP_FEATURE_TZ_HAS_TRUSTZONE && BSP_TZ_NONSECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + +/* + * If the STYPE3 register's security attribution is set to secure, the non-secure application must read the register + * from the secure application using the provided non-secure callable functions. + */ + #define FSP_STYPE3_REG8_READ(X, S) (!(S) ? X : (R_BSP_NSC_STYPE3_RegU8Read((uint8_t const volatile *) &X))) + #define FSP_STYPE3_REG16_READ(X, S) (!(S) ? X : (R_BSP_NSC_STYPE3_RegU16Read((uint16_t const volatile *) &X))) + #define FSP_STYPE3_REG32_READ(X, S) (!(S) ? X : (R_BSP_NSC_STYPE3_RegU32Read((uint32_t const volatile *) &X))) +#elif BSP_FEATURE_TZ_HAS_TRUSTZONE && BSP_TZ_SECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + +/*******************************************************************************************************************//** + * Read a non-secure 8-bit STYPE3 register in the secure state. + * + * @param[in] p_reg The address of the non-secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +__STATIC_INLINE uint8_t R_BSP_S_STYPE3_RegU8Read (uint8_t volatile const * p_reg) +{ + p_reg = (uint8_t volatile const *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET); + + return *p_reg; +} + +/*******************************************************************************************************************//** + * Read a non-secure 16-bit STYPE3 register in the secure state. + * + * @param[in] p_reg The address of the non-secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +__STATIC_INLINE uint16_t R_BSP_S_STYPE3_RegU16Read (uint16_t volatile const * p_reg) +{ + p_reg = (uint16_t volatile const *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET); + + return *p_reg; +} + +/*******************************************************************************************************************//** + * Read a non-secure 32-bit STYPE3 register in the secure state. + * + * @param[in] p_reg The address of the non-secure register. + * + * @return Value read from the register. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_S_STYPE3_RegU32Read (uint32_t volatile const * p_reg) +{ + p_reg = (uint32_t volatile const *) ((uint32_t) p_reg | BSP_FEATURE_TZ_NS_OFFSET); + + return *p_reg; +} + +/* + * If the STYPE3 register's security attribution is set to non-secure, the secure application must read the register + * using the non-secure aliased address. + */ + #define FSP_STYPE3_REG8_READ(X, S) ((S) ? (X) : R_BSP_S_STYPE3_RegU8Read((uint8_t const volatile *) &X)) + #define FSP_STYPE3_REG16_READ(X, S) ((S) ? (X) : R_BSP_S_STYPE3_RegU16Read((uint16_t const volatile *) &X)) + #define FSP_STYPE3_REG32_READ(X, S) ((S) ? (X) : R_BSP_S_STYPE3_RegU32Read((uint32_t const volatile *) &X)) +#else + #define FSP_STYPE3_REG8_READ(X, S) (X) + #define FSP_STYPE3_REG16_READ(X, S) (X) + #define FSP_STYPE3_REG32_READ(X, S) (X) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Different warm start entry locations in the BSP. */ +typedef enum e_bsp_warm_start_event +{ + BSP_WARM_START_RESET = 0, ///< Called almost immediately after reset. No C runtime environment, clocks, or IRQs. + BSP_WARM_START_POST_CLOCK, ///< Called after clock initialization. No C runtime environment or IRQs. + BSP_WARM_START_POST_C ///< Called after clocks and C runtime environment have been set up +} bsp_warm_start_event_t; + +/* Private enum used in R_FSP_SystemClockHzGet. Maps clock name to base bit in SCKDIVCR. */ +typedef enum e_fsp_priv_clock +{ + FSP_PRIV_CLOCK_PCLKD = 0, + FSP_PRIV_CLOCK_PCLKC = 4, + FSP_PRIV_CLOCK_PCLKB = 8, + FSP_PRIV_CLOCK_PCLKA = 12, + FSP_PRIV_CLOCK_BCLK = 16, + FSP_PRIV_CLOCK_PCLKE = 20, + FSP_PRIV_CLOCK_ICLK = 24, + FSP_PRIV_CLOCK_FCLK = 28, + FSP_PRIV_CLOCK_CPUCLK = 32, + FSP_PRIV_CLOCK_UNUSED = 255, ///< Sentinel value for unused clock +} fsp_priv_clock_t; + +/* Private enum used in R_FSP_SciSpiClockHzGe. Maps clock name to base bit in SCISPICKCR. */ +typedef enum e_fsp_priv_source_clock +{ + FSP_PRIV_CLOCK_HOCO = 0, ///< The high speed on chip oscillator + FSP_PRIV_CLOCK_MOCO = 1, ///< The middle speed on chip oscillator + FSP_PRIV_CLOCK_LOCO = 2, ///< The low speed on chip oscillator + FSP_PRIV_CLOCK_MAIN_OSC = 3, ///< The main oscillator + FSP_PRIV_CLOCK_SUBCLOCK = 4, ///< The subclock oscillator + FSP_PRIV_CLOCK_PLL = 5, ///< The PLL output + FSP_PRIV_CLOCK_PLL1P = 5, ///< The PLL1P output + FSP_PRIV_CLOCK_PLL2 = 6, ///< The PLL2 output + FSP_PRIV_CLOCK_PLL2P = 6, ///< The PLL2P output + FSP_PRIV_CLOCK_PLL1Q = 7, ///< The PLL1Q output + FSP_PRIV_CLOCK_PLL1R = 8, ///< The PLL1R output + FSP_PRIV_CLOCK_PLL2Q = 9, ///< The PLL2Q output + FSP_PRIV_CLOCK_PLL2R = 10, ///< The PLL2R output +} fsp_priv_source_clock_t; + +typedef struct st_bsp_unique_id +{ + union + { + uint32_t unique_id_words[4]; + uint8_t unique_id_bytes[16]; + }; +} bsp_unique_id_t; + +typedef struct st_bsp_part_number +{ + union + { + uint32_t part_number_words[4]; + uint8_t part_number_bytes[16]; + }; +} bsp_part_number_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +uint32_t R_BSP_SourceClockHzGet(fsp_priv_source_clock_t clock); + +/*********************************************************************************************************************** + * Global variables (defined in other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Return active interrupt vector number value + * + * @return Active interrupt vector number value + **********************************************************************************************************************/ +__STATIC_INLINE IRQn_Type R_FSP_CurrentIrqGet (void) +{ + xPSR_Type xpsr_value; + xpsr_value.w = __get_xPSR(); + + return (IRQn_Type) (xpsr_value.b.ISR - FSP_PRIV_CORTEX_PROCESSOR_EXCEPTIONS); +} + +/*******************************************************************************************************************//** + * Gets the frequency of a system clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_SystemClockHzGet (fsp_priv_clock_t clock) +{ + /* Check if the provided clock is an unused clock. */ + if (FSP_PRIV_CLOCK_UNUSED == clock) + { + return 0; + } + +#if !BSP_FEATURE_CGC_REGISTER_SET_B + uint32_t sckdivcr = FSP_STYPE3_REG32_READ(R_SYSTEM->SCKDIVCR, BSP_CFG_CLOCKS_SECURE); + uint32_t clock_div = (sckdivcr >> clock) & FSP_PRV_SCKDIVCR_DIV_MASK; + + #if BSP_FEATURE_CGC_HAS_CPUCLK + if (FSP_PRIV_CLOCK_CPUCLK == clock) + { + return SystemCoreClock; + } + + /* Get CPUCLK divisor */ + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + #if (BSP_CFG_CPU_CORE == 1) + uint32_t cpuclk_div = + (FSP_STYPE3_REG16_READ(R_SYSTEM->SCKDIVCR2, BSP_CFG_CLOCKS_SECURE) & R_SYSTEM_SCKDIVCR2_CPUCK1_Msk) >> + R_SYSTEM_SCKDIVCR2_CPUCK1_Pos; + #else + uint32_t cpuclk_div = FSP_STYPE3_REG16_READ(R_SYSTEM->SCKDIVCR2, BSP_CFG_CLOCKS_SECURE) & FSP_PRV_SCKDIVCR_DIV_MASK; + #endif + #else + uint32_t cpuclk_div = FSP_STYPE3_REG8_READ(R_SYSTEM->SCKDIVCR2, BSP_CFG_CLOCKS_SECURE) & FSP_PRV_SCKDIVCR_DIV_MASK; + #endif + + /* Determine if either divisor is a multiple of 3 */ + if ((cpuclk_div | clock_div) & 8U) + { + /* Convert divisor settings to their actual values */ + cpuclk_div = (cpuclk_div & 8U) ? (3U << (cpuclk_div & 7U)) : (1U << cpuclk_div); + clock_div = (clock_div & 8U) ? (3U << (clock_div & 7U)) : (1U << clock_div); + + /* Calculate clock with multiplication and division instead of shifting */ + return (SystemCoreClock * cpuclk_div) / clock_div; + } + else + { + return (SystemCoreClock << cpuclk_div) >> clock_div; + } + + #else + uint32_t iclk_div = (sckdivcr >> FSP_PRIV_CLOCK_ICLK) & FSP_PRV_SCKDIVCR_DIV_MASK; + + return (SystemCoreClock << iclk_div) >> clock_div; + #endif +#else + FSP_PARAMETER_NOT_USED(clock); + + return SystemCoreClock; +#endif +} + +/*******************************************************************************************************************//** + * Converts a clock's CKDIVCR register value to a clock divider (Eg: SPICKDIVCR). + * + * @return Clock Divider + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_ClockDividerGet (uint32_t ckdivcr) +{ + if (2U >= ckdivcr) + { + + /* clock_div: + * - Clock Divided by 1: 0 + * - Clock Divided by 2: 1 + * - Clock Divided by 4: 2 + */ + return 1U << ckdivcr; + } + else if (3U == ckdivcr) + { + + /* Clock Divided by 6 */ + return 6U; + } + else if (4U == ckdivcr) + { + + /* Clock Divided by 8 */ + return 8U; + } + else if (5U == ckdivcr) + { + + /* Clock Divided by 3 */ + return 3U; + } + else if (6U == ckdivcr) + { + + /* Clock Divided by 5 */ + return 5; + } + else if (7U == ckdivcr) + { + + /* Clock Divided by 10 */ + return 10; + } + else + { + /* The remaining case is ckdivcr = 8 which divides the clock by 16. */ + } + + /* Clock Divided by 16 */ + return 16U; +} + +#if BSP_FEATURE_BSP_HAS_SCISPI_CLOCK + +/*******************************************************************************************************************//** + * Gets the frequency of a SCI/SPI clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_SciSpiClockHzGet (void) +{ + uint32_t scispidivcr = R_SYSTEM->SCISPICKDIVCR; + uint32_t clock_div = R_FSP_ClockDividerGet(scispidivcr & FSP_PRV_SCKDIVCR_DIV_MASK); + fsp_priv_source_clock_t scispicksel = (fsp_priv_source_clock_t) R_SYSTEM->SCISPICKCR_b.SCISPICKSEL; + + return R_BSP_SourceClockHzGet(scispicksel) / clock_div; +} + +#endif +#if BSP_FEATURE_BSP_HAS_SPI_CLOCK + +/*******************************************************************************************************************//** + * Gets the frequency of a SPI clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_SpiClockHzGet (void) +{ + uint32_t spidivcr = FSP_STYPE3_REG8_READ(R_SYSTEM->SPICKDIVCR, BSP_CFG_CLOCKS_SECURE); + uint32_t clock_div = R_FSP_ClockDividerGet(spidivcr & FSP_PRV_SCKDIVCR_DIV_MASK); + fsp_priv_source_clock_t spicksel = + (fsp_priv_source_clock_t) ((FSP_STYPE3_REG8_READ(R_SYSTEM->SPICKCR, + BSP_CFG_CLOCKS_SECURE) & R_SYSTEM_SPICKCR_CKSEL_Msk) >> + R_SYSTEM_SPICKCR_CKSEL_Pos); + + return R_BSP_SourceClockHzGet(spicksel) / clock_div; +} + +#endif +#if BSP_FEATURE_BSP_HAS_SCI_CLOCK + +/*******************************************************************************************************************//** + * Gets the frequency of a SCI clock. + * + * @return Frequency of requested clock in Hertz. + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_FSP_SciClockHzGet (void) +{ + uint32_t scidivcr = FSP_STYPE3_REG8_READ(R_SYSTEM->SCICKDIVCR, BSP_CFG_CLOCKS_SECURE); + uint32_t clock_div = R_FSP_ClockDividerGet(scidivcr & FSP_PRV_SCKDIVCR_DIV_MASK); + fsp_priv_source_clock_t scicksel = + (fsp_priv_source_clock_t) (FSP_STYPE3_REG8_READ(R_SYSTEM->SCICKCR, + BSP_CFG_CLOCKS_SECURE) & R_SYSTEM_SCICKCR_SCICKSEL_Msk >> + R_SYSTEM_SCICKCR_SCICKSEL_Pos); + + return R_BSP_SourceClockHzGet(scicksel) / clock_div; +} + +#endif + +/*******************************************************************************************************************//** + * Get unique ID for this device. + * + * @return A pointer to the unique identifier structure + **********************************************************************************************************************/ +__STATIC_INLINE bsp_unique_id_t const * R_BSP_UniqueIdGet (void) +{ +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + + return (bsp_unique_id_t *) (BSP_FEATURE_BSP_UNIQUE_ID_POINTER | BSP_FEATURE_TZ_NS_OFFSET); +#else + + return (bsp_unique_id_t *) BSP_FEATURE_BSP_UNIQUE_ID_POINTER; +#endif +} + +/*******************************************************************************************************************//** + * Get part number for this device. + * + * @param[out] p_part_number Memory address to return MCU's part number to. + * + * @retval FSP_SUCCESS Part number information stored. + * @retval FSP_ERR_ASSERTION The parameter p_part_number is NULL. + * @retval FSP_ERR_NOT_FOUND An error occurred when retrieving data from part number register. + **********************************************************************************************************************/ +__STATIC_INLINE fsp_err_t R_BSP_PartNumberGet (bsp_part_number_t * const p_part_number) +{ +#if BSP_CFG_PARAM_CHECKING_ENABLE + + /** Verify parameters are valid */ + if (NULL == p_part_number) + { + return FSP_ERR_ASSERTION; + } +#endif + + /* Pointer to Part Numbering Register PNR */ +#if BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_NONSECURE_BUILD == 1 + bsp_part_number_t * p_pnr = (bsp_part_number_t *) (BSP_FEATURE_BSP_PART_NUMBER_POINTER | BSP_FEATURE_TZ_NS_OFFSET); +#else + bsp_part_number_t * p_pnr = (bsp_part_number_t *) BSP_FEATURE_BSP_PART_NUMBER_POINTER; +#endif + + /* In case part number is following the right order + * for example: R 7 F A 8 E 1 A F D C F B_ _ _ */ + if (p_pnr->part_number_bytes[0] == 'R') + { + memcpy(p_part_number, p_pnr, sizeof(bsp_part_number_t)); + } + /* In case part number is in reverse order, 'R' letter should be in position 12 + * for example: K N C 3 7 0 1 E 0 A F 7 R _ _ _ */ + else if (p_pnr->part_number_bytes[12] == 'R') + { + for (uint8_t i = 0; i < sizeof(bsp_part_number_t); i++) + { + if (i <= 12) + { + p_part_number->part_number_bytes[i] = p_pnr->part_number_bytes[12 - i]; + } + else + { + p_part_number->part_number_bytes[i] = p_pnr->part_number_bytes[i]; + } + } + } + else + { + return FSP_ERR_NOT_FOUND; + } + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Disables the flash cache. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_FlashCacheDisable (void) +{ +#if BSP_FEATURE_BSP_FLASH_CACHE + R_FCACHE->FCACHEE = 0U; +#endif + +#ifdef R_CACHE + #if BSP_FEATURE_BSP_CODE_CACHE_VERSION == 2 + uint32_t volatile * p_ccactl = &R_CACHE->CCACTL; + uint32_t volatile * p_ccawta = &R_CACHE->CCAWTA; + + #if BSP_TZ_SECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + if (1 == R_CPSCU->CACHESAR_b.CACHESA) + { + /* Access CCACTL using the non-secure alias. */ + p_ccactl = (uint32_t volatile *) ((uint32_t) p_ccactl | BSP_FEATURE_TZ_NS_OFFSET); + + /* Access CCAWTA using the non-secure alias. */ + p_ccawta = (uint32_t volatile *) ((uint32_t) p_ccawta | BSP_FEATURE_TZ_NS_OFFSET); + } + #endif + + /* Writeback and flush cache when disabling + * Refer to the CCAFCT register description in the relevant hardware manual */ + if (*p_ccawta & R_CACHE_CCAWTA_WT_Msk) + { + *p_ccactl = R_CACHE_CCACTL_FC_Msk; + } + else + { + *p_ccactl = R_CACHE_CCACTL_FC_Msk | R_CACHE_CCACTL_WB_Msk; + } + + FSP_HARDWARE_REGISTER_WAIT(R_CACHE->CCAFCT, 0U); + #else + + /* Disable the C-Cache. */ + R_CACHE->CCACTL = 0U; + #endif +#endif +} + +/*******************************************************************************************************************//** + * Enables the flash cache. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_FlashCacheEnable (void) +{ +#if BSP_FEATURE_BSP_FLASH_CACHE + + /* Invalidate the flash cache and wait until it is invalidated. (See section 55.3.2.2 "Operation" of the Flash Cache + * in the RA6M3 manual R01UH0878EJ0100). */ + R_FCACHE->FCACHEIV = 1U; + FSP_HARDWARE_REGISTER_WAIT(R_FCACHE->FCACHEIV, 0U); + + /* Enable flash cache. */ + R_FCACHE->FCACHEE = 1U; +#endif + +#ifdef R_CACHE + #if BSP_FEATURE_BSP_CODE_CACHE_VERSION == 1 + + /* Configure the C-Cache line size. */ + R_CACHE->CCALCF = BSP_CFG_C_CACHE_LINE_SIZE; + + /* Enable the C-Cache. */ + R_CACHE->CCACTL = 1U; + #else + uint32_t volatile * p_ccactl = &R_CACHE->CCACTL; + + /* Flush cache before enabling */ + R_CACHE->CCAFCT_b.FC = 1; + + /* Check that no flush or writeback are ongoing before enabling + * Refer to the CCAFCT register description in the relevant hardware manual */ + FSP_HARDWARE_REGISTER_WAIT(R_CACHE->CCAFCT, 0U); + + #if BSP_TZ_SECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + if (1 == R_CPSCU->CACHESAR_b.CACHESA) + { + /* Access CCACTL using the non-secure alias. */ + p_ccactl = (uint32_t volatile *) ((uint32_t) p_ccactl | BSP_FEATURE_TZ_NS_OFFSET); + } + #endif + + /* Enable the C-Cache. */ + *p_ccactl = 1U; + #endif +#endif +} + +#if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS && !BSP_SECONDARY_CORE_BUILD && defined(BSP_PARTITION_FLASH_CPU1_S_START) + #define BSP_CPU1ACTCSR_KEY_CODE 0xA5 + +/*******************************************************************************************************************//** + * Sets the secondary core VTOR and activates the secondary core. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_SecondaryCoreStart (void) +{ + /* Setup secondary CPU vector table */ + R_CPU_CTRL->CPU1INITVTOR = (uint32_t) BSP_PARTITION_FLASH_CPU1_S_START; + + /* When debugging multicore projects, CPU1 may already be activated by the debugger with CPU1WAITCR set to 1. + * This allows the debugger to connect to CPU1 prior to it being started by CPU0. + * If this is the case, then the secondary core must be started by clearing CPU1WAITCR. */ + R_CPU_CTRL->CPU1WAITCR = 0; + + /* Activate secondary CPU by setting key code and activation request in CPU1ACTCSR */ + R_CPU_CTRL->CPU1ACTCSR = (BSP_CPU1ACTCSR_KEY_CODE << R_CPU_CTRL_CPU1ACTCSR_KEY_Pos) | + R_CPU_CTRL_CPU1ACTCSR_ACTREQ_Msk; +} + +#endif + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#if (1 == BSP_CFG_ASSERT) + +/** Prototype of default function called before errors are returned in FSP code if BSP_CFG_LOG_ERRORS is set to 1. */ +void fsp_error_log(fsp_err_t err, const char * file, int32_t line); + +#endif + +/** In the event of an unrecoverable error the BSP will by default call the __BKPT() intrinsic function which will + * alert the user of the error. The user can override this default behavior by defining their own + * BSP_CFG_HANDLE_UNRECOVERABLE_ERROR macro. + */ +#if !defined(BSP_CFG_HANDLE_UNRECOVERABLE_ERROR) + + #define BSP_CFG_HANDLE_UNRECOVERABLE_ERROR(x) __BKPT((x)) +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h new file mode 100644 index 00000000000..9ddff68ed5d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h @@ -0,0 +1,90 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_COMPILER_SUPPORT_H + #define BSP_COMPILER_SUPPORT_H + + #if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) + #include "arm_cmse.h" + #endif + + #ifdef __cplusplus +extern "C" { + #endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + #if defined(__ARMCC_VERSION) /* AC6 compiler */ + +/* The AC6 linker requires uninitialized code to be placed in a section that starts with ".bss." Without this, load + * memory (ROM) is reserved unnecessarily. */ + #define BSP_UNINIT_SECTION_PREFIX ".bss" + #define BSP_DONT_REMOVE __attribute__((used)) + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #elif defined(__GNUC__) /* GCC compiler */ + #define BSP_UNINIT_SECTION_PREFIX + #define BSP_DONT_REMOVE __attribute__((used)) + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #elif defined(__ICCARM__) /* IAR compiler */ + #define BSP_UNINIT_SECTION_PREFIX + #define BSP_DONT_REMOVE __root + #define BSP_ATTRIBUTE_STACKLESS __stackless + #define BSP_FORCE_INLINE _Pragma("inline=forced") + #endif + + #define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".ram_noinit" + #define BSP_SECTION_FIXED_VECTORS ".fixed_vectors" + #define BSP_SECTION_APPLICATION_VECTORS ".application_vectors" + +/* Compiler neutral macros. */ + #define BSP_PLACE_IN_SECTION(x) __attribute__((section(x))) __attribute__((__used__)) + + #define BSP_ALIGN_VARIABLE(x) __attribute__((aligned(x))) + + #define BSP_WEAK_REFERENCE __attribute__((weak)) + +/** Stacks (and heap) must be sized and aligned to an integer multiple of this number. */ + #define BSP_STACK_ALIGNMENT (8) + +/*********************************************************************************************************************** + * TrustZone definitions + **********************************************************************************************************************/ + #if (defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) && !defined(__clang_analyzer__) + #if defined(__ICCARM__) /* IAR compiler */ + #define BSP_CMSE_NONSECURE_CALL __cmse_nonsecure_call + #define BSP_CMSE_NONSECURE_ENTRY __cmse_nonsecure_entry + #else + #define BSP_CMSE_NONSECURE_CALL __attribute__((cmse_nonsecure_call)) + #define BSP_CMSE_NONSECURE_ENTRY __attribute__((cmse_nonsecure_entry)) + #endif + #else + #define BSP_CMSE_NONSECURE_CALL + #define BSP_CMSE_NONSECURE_ENTRY + #endif + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end of addtogroup BSP_MCU) */ + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.c new file mode 100644 index 00000000000..56411fd2e4a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.c @@ -0,0 +1,205 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "bsp_delay.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_DELAY_NS_PER_SECOND (1000000000) +#define BSP_DELAY_US_PER_SECOND (1000000) +#define BSP_DELAY_NS_PER_US (1000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Delay for at least the specified duration in units and return. + * @param[in] delay The number of 'units' to delay. + * @param[in] units The 'base' (bsp_delay_units_t) for the units specified. Valid values are: + * BSP_DELAY_UNITS_SECONDS, BSP_DELAY_UNITS_MILLISECONDS, BSP_DELAY_UNITS_MICROSECONDS.@n + * For example:@n + * At 1 MHz one cycle takes 1 microsecond (.000001 seconds).@n + * At 12 MHz one cycle takes 1/12 microsecond or 83 nanoseconds.@n + * Therefore one run through bsp_prv_software_delay_loop() takes: + * ~ (83 * BSP_DELAY_LOOP_CYCLES) or 332 ns. + * A delay of 2 us therefore requires 2000ns/332ns or 6 loops. + * + * The 'theoretical' maximum delay that may be obtained is determined by a full 32 bit loop count and the system clock rate. + * @120MHz: ((0xFFFFFFFF loops * 4 cycles /loop) / 120000000) = 143 seconds. + * @32MHz: ((0xFFFFFFFF loops * 4 cycles /loop) / 32000000) = 536 seconds + * + * Note that requests for very large delays will be affected by rounding in the calculations and the actual delay + * achieved may be slightly longer. @32 MHz, for example, a request for 532 seconds will be closer to 536 seconds. + * + * Note also that if the calculations result in a loop_cnt of zero, the bsp_prv_software_delay_loop() function is not called + * at all. In this case the requested delay is too small (nanoseconds) to be carried out by the loop itself, and the + * overhead associated with executing the code to just get to this point has certainly satisfied the requested delay. + * + * @note This function calls bsp_cpu_clock_get() which ultimately calls R_CGC_SystemClockFreqGet() and therefore requires + * that the BSP has already initialized the CGC (which it does as part of the Sysinit). + * Care should be taken to ensure this remains the case if in the future this function were to be called as part + * of the BSP initialization. + * + * @note This function will delay for **at least** the specified duration. Due to overhead in calculating the correct number + * of loops to delay, very small delay values (generally 1-5 microseconds) may be significantly longer than specified. + * Approximate overhead for this function is as follows: + * - CM4: 20-50 cycles + * - CM33: 10-60 cycles + * - CM23: 75-200 cycles + * + * @note If more accurate microsecond timing must be performed in software it is recommended to use + * bsp_prv_software_delay_loop() directly. In this case, use BSP_DELAY_LOOP_CYCLES or BSP_DELAY_LOOPS_CALCULATE() + * to convert a calculated delay cycle count to a number of software delay loops. + * + * @note Delays may be longer than expected when compiler optimization is turned off. + * + * @warning The delay will be longer than specified on CM23 devices when the core clock is greater than 32 MHz. Setting + * BSP_DELAY_LOOP_CYCLES to 6 will improve accuracy at 48 MHz but will result in shorter than expected delays + * at lower speeds. + **********************************************************************************************************************/ + +void R_BSP_SoftwareDelay (uint32_t delay, bsp_delay_units_t units) +{ + uint32_t iclk_hz; + uint32_t loops_required = 0; + uint32_t total_us = (delay * units); /** Convert the requested time to microseconds. */ + + iclk_hz = SystemCoreClock; /** Get the system clock frequency in Hz. */ + +#if (BSP_CFG_MCU_PART_SERIES == 8) || (BSP_CFG_MCU_PART_SERIES == 6) + if (iclk_hz >= BSP_MOCO_HZ) + { + /* For larger system clock values the below calculation in the else causes inaccurate delays due to rounding errors: + * + * ns_per_cycle = BSP_DELAY_NS_PER_SECOND / iclk_hz + * + * For system clock values greater than the MOCO speed the following delay calculation is used instead. + * The value is always rounded up to ensure the delay is at least the supplied value. + */ + uint32_t cycles_per_us = (iclk_hz + (BSP_DELAY_US_PER_SECOND * BSP_DELAY_LOOP_CYCLES) - 1) / + (BSP_DELAY_US_PER_SECOND * BSP_DELAY_LOOP_CYCLES); + + uint64_t loops_required_u64 = ((uint64_t) total_us) * cycles_per_us; + + if (loops_required_u64 > UINT32_MAX) + { + loops_required = UINT32_MAX; + } + else + { + loops_required = (uint32_t) loops_required_u64; + } + } + else +#endif + { + uint32_t cycles_requested; + uint32_t ns_per_cycle; + uint64_t ns_64bits; + + /* Running on the Sub-clock (32768 Hz) there are 30517 ns/cycle. This means one cycle takes 31 us. One execution + * loop of the delay_loop takes 6 cycles which at 32768 Hz is 180 us. That does not include the overhead below prior to even getting + * to the delay loop. Given this, at this frequency anything less then a delay request of 122 us will not even generate a single + * pass through the delay loop. For this reason small delays (<=~200 us) at this slow clock rate will not be possible and such a request + * will generate a minimum delay of ~200 us.*/ + ns_per_cycle = BSP_DELAY_NS_PER_SECOND / iclk_hz; /** Get the # of nanoseconds/cycle. */ + + /* We want to get the time in total nanoseconds but need to be conscious of overflowing 32 bits. We also do not want to do 64 bit */ + /* division as that pulls in a division library. */ + ns_64bits = (uint64_t) total_us * (uint64_t) BSP_DELAY_NS_PER_US; // Convert to ns. + + /* Have we overflowed 32 bits? */ + if (ns_64bits <= UINT32_MAX) + { + /* No, we will not overflow. */ + cycles_requested = ((uint32_t) ns_64bits / ns_per_cycle); + loops_required = cycles_requested / BSP_DELAY_LOOP_CYCLES; + } + else + { + /* We did overflow. Try dividing down first. */ + total_us = (total_us / (ns_per_cycle * BSP_DELAY_LOOP_CYCLES)); + ns_64bits = (uint64_t) total_us * (uint64_t) BSP_DELAY_NS_PER_US; // Convert to ns. + + /* Have we overflowed 32 bits? */ + if (ns_64bits <= UINT32_MAX) + { + /* No, we will not overflow. */ + loops_required = (uint32_t) ns_64bits; + } + else + { + /* We still overflowed, use the max count for cycles */ + loops_required = UINT32_MAX; + } + } + } + + /** Only delay if the supplied parameters constitute a delay. */ + if (loops_required > (uint32_t) 0) + { + bsp_prv_software_delay_loop(loops_required); + } +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * This assembly language routine takes roughly 4 cycles per loop. 2 additional cycles + * occur when the loop exits. The 'naked' attribute indicates that the specified function does not need + * prologue/epilogue sequences generated by the compiler. + * @param[in] loop_cnt The number of loops to iterate. + **********************************************************************************************************************/ +BSP_ATTRIBUTE_STACKLESS void bsp_prv_software_delay_loop (__attribute__( + (unused)) uint32_t loop_cnt) +{ + __asm volatile ( +#if defined(RENESAS_CORTEX_M85) && (defined(__ARMCC_VERSION) || defined(__GNUC__)) + + /* Align the branch target to a 64-bit boundary, a CM85 specific optimization. */ + /* IAR does not support alignment control within inline assembly. */ + ".balign 8\n" +#endif + "sw_delay_loop: \n" +#if defined(__ICCARM__) || defined(__ARMCC_VERSION) || (defined(__llvm__) && !defined(__CLANG_TIDY__)) + " subs r0, #1 \n" ///< 1 cycle +#elif defined(__GNUC__) + " sub r0, r0, #1 \n" ///< 1 cycle +#endif + + " cmp r0, #0 \n" ///< 1 cycle + +/* CM0 and CM23 have a different instruction set */ +#if defined(__CORE_CM0PLUS_H_GENERIC) || defined(__CORE_CM23_H_GENERIC) + " bne sw_delay_loop \n" ///< 2 cycles +#else + " bne.n sw_delay_loop \n" ///< 2 cycles +#endif + " bx lr \n"); ///< 2 cycles +} diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.h new file mode 100644 index 00000000000..9bc9e9dad95 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_delay.h @@ -0,0 +1,77 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_DELAY_H +#define BSP_DELAY_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +#include "bsp_compiler_support.h" + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* The number of cycles required per software delay loop. */ +#ifndef BSP_DELAY_LOOP_CYCLES + #if defined(RENESAS_CORTEX_M85) + +/* On M85 cores, code alignment can affect execution speed. bsp_prv_software_delay_loop is aligned to 8 bytes for + * GCC and AC6, but IAR does not support aligning code. The below ensures the correct loop cycle count is used in + * this case. */ + #if defined(__ICCARM__) + #define BSP_DELAY_LOOP_CYCLES (((uint32_t) bsp_prv_software_delay_loop & 0x6) ? 2 : 1) + #else + #define BSP_DELAY_LOOP_CYCLES (1) + #endif + +/* On devices with Flash LP, ROM reads take an additional cycle when ICLK is greater than 32 MHz. */ + #elif BSP_FEATURE_CGC_HAS_MEMWAIT && !BSP_FEATURE_BSP_FLASH_CACHE && (BSP_FEATURE_BSP_CODE_CACHE_VERSION == 0) + #define BSP_DELAY_LOOP_CYCLES (4 + (2 * (uint32_t) (SystemCoreClock > 32000000))) + #else + #define BSP_DELAY_LOOP_CYCLES (4) + #endif +#endif + +/* Calculates the number of delay loops to pass to bsp_prv_software_delay_loop to achieve at least the requested cycle + * count delay. This is 1 loop longer than optimal if cycles is a multiple of BSP_DELAY_LOOP_CYCLES, but it ensures + * the requested number of loops is at least 1 since bsp_prv_software_delay_loop cannot be called with a loop count + * of 0. */ +#define BSP_DELAY_LOOPS_CALCULATE(cycles) (((cycles) / BSP_DELAY_LOOP_CYCLES) + 1U) + +/** Available delay units for R_BSP_SoftwareDelay(). These are ultimately used to calculate a total # of microseconds */ +typedef enum +{ + BSP_DELAY_UNITS_SECONDS = 1000000, ///< Requested delay amount is in seconds + BSP_DELAY_UNITS_MILLISECONDS = 1000, ///< Requested delay amount is in milliseconds + BSP_DELAY_UNITS_MICROSECONDS = 1 ///< Requested delay amount is in microseconds +} bsp_delay_units_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +BSP_ATTRIBUTE_STACKLESS void bsp_prv_software_delay_loop(uint32_t loop_cnt); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h new file mode 100644 index 00000000000..f388be32937 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/** @} (end addtogroup BSP_MCU) */ + +#ifndef BSP_EXCEPTIONS_H + #define BSP_EXCEPTIONS_H + + #ifdef __cplusplus +extern "C" { + #endif + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/* This list includes only Arm standard exceptions. Renesas interrupts are defined in vector_data.h. */ +typedef enum IRQn +{ + Reset_IRQn = -15, /* 1 Reset Vector invoked on Power up and warm reset */ + NonMaskableInt_IRQn = -14, /* 2 Non maskable Interrupt cannot be stopped or preempted */ + HardFault_IRQn = -13, /* 3 Hard Fault all classes of Fault */ + MemoryManagement_IRQn = -12, /* 4 Memory Management MPU mismatch, including Access Violation and No Match */ + BusFault_IRQn = -11, /* 5 Bus Fault Pre-Fetch-, Memory Access, other address/memory Fault */ + UsageFault_IRQn = -10, /* 6 Usage Fault i.e. Undef Instruction, Illegal State Transition */ + SecureFault_IRQn = -9, /* 7 Secure Fault Interrupt */ + SVCall_IRQn = -5, /* 11 System Service Call via SVC instruction */ + DebugMonitor_IRQn = -4, /* 12 Debug Monitor */ + PendSV_IRQn = -2, /* 14 Pendable request for system service */ + SysTick_IRQn = -1, /* 15 System Tick Timer */ +} IRQn_Type; + + #ifdef __cplusplus +} + #endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c new file mode 100644 index 00000000000..563f9f94c9d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +#if (BSP_FEATURE_ICU_NMIER_MAX_INDEX > 15U) + #define BSP_PRV_NMIER_T uint32_t +#else + #define BSP_PRV_NMIER_T uint16_t +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** This array holds callback functions. */ +bsp_grp_irq_cb_t g_bsp_group_irq_sources[BSP_FEATURE_ICU_NMIER_MAX_INDEX + 1] BSP_SECTION_EARLY_INIT; + +void NMI_Handler(void); +static void bsp_group_irq_call(bsp_grp_irq_t irq); + +/*******************************************************************************************************************//** + * Calls the callback function for an interrupt if a callback has been registered. + * + * @param[in] irq Which interrupt to check and possibly call. + * + * @retval FSP_SUCCESS Callback was called. + * @retval FSP_ERR_INVALID_ARGUMENT No valid callback has been registered for this interrupt source. + * + * @warning This function is called from within an interrupt + **********************************************************************************************************************/ +static void bsp_group_irq_call (bsp_grp_irq_t irq) +{ + /** Check for valid callback */ + if (NULL != g_bsp_group_irq_sources[irq]) + { + /** Callback has been found. Call it. */ + g_bsp_group_irq_sources[irq](irq); + } +} + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Register a callback function for supported interrupts. If NULL is passed for the callback argument then any + * previously registered callbacks are unregistered. + * + * @param[in] irq Interrupt for which to register a callback. + * @param[in] p_callback Pointer to function to call when interrupt occurs. + * + * @retval FSP_SUCCESS Callback registered + * @retval FSP_ERR_ASSERTION Callback pointer is NULL + **********************************************************************************************************************/ +fsp_err_t R_BSP_GroupIrqWrite (bsp_grp_irq_t irq, void (* p_callback)(bsp_grp_irq_t irq)) +{ +#if BSP_CFG_PARAM_CHECKING_ENABLE + + /* Check pointer for NULL value. */ + FSP_ASSERT(p_callback); +#endif + + /* Register callback. */ + g_bsp_group_irq_sources[irq] = p_callback; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Non-maskable interrupt handler. This exception is defined by the BSP, unlike other system exceptions, because + * there are many sources that map to the NMI exception. + **********************************************************************************************************************/ +void NMI_Handler (void) +{ + /* NMISR is masked by NMIER to prevent iterating over NMI status flags that are not enabled. */ + BSP_PRV_NMIER_T nmier = R_ICU->NMIER; + BSP_PRV_NMIER_T nmisr = R_ICU->NMISR & nmier; + + /* Loop over all NMI status flags */ + for (bsp_grp_irq_t irq = BSP_GRP_IRQ_IWDT_ERROR; irq <= (bsp_grp_irq_t) (BSP_FEATURE_ICU_NMIER_MAX_INDEX); irq++) + { + /* If the current irq status register is set call the irq callback. */ + if (0U != (nmisr & (1U << irq))) + { + (void) bsp_group_irq_call(irq); + } + } + + /* Clear status flags that have been handled. */ + R_ICU->NMICLR = nmisr; + +#if BSP_CFG_MCU_PART_SERIES == 8 + + /* Wait for NMISR to be cleared before exiting the ISR to prevent the IRQ from being regenerated. + * See section "13.2.12 NMICLR : Non-Maskable Interrupt Status Clear Register" in the RA8M1 manual + * R01UH0994EJ0100 */ + FSP_HARDWARE_REGISTER_WAIT((R_ICU->NMISR & nmisr), 0); +#endif +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h new file mode 100644 index 00000000000..5aede0736ca --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_GROUP_IRQ_H +#define BSP_GROUP_IRQ_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +#ifndef BSP_OVERRIDE_GROUP_IRQ_T + +/** Which interrupts can have callbacks registered. */ +typedef enum e_bsp_grp_irq +{ + BSP_GRP_IRQ_IWDT_ERROR = 0, ///< IWDT underflow/refresh error has occurred + BSP_GRP_IRQ_WDT_ERROR = 1, ///< WDT underflow/refresh error has occurred + BSP_GRP_IRQ_LVD1 = 2, ///< Voltage monitoring 1 interrupt + BSP_GRP_IRQ_LVD2 = 3, ///< Voltage monitoring 2 interrupt + BSP_GRP_IRQ_VBATT = 4, ///< VBATT monitor interrupt + BSP_GRP_IRQ_OSC_STOP_DETECT = 6, ///< Oscillation stop is detected + BSP_GRP_IRQ_NMI_PIN = 7, ///< NMI Pin interrupt + BSP_GRP_IRQ_RAM_PARITY = 8, ///< RAM Parity Error + BSP_GRP_IRQ_RAM_ECC = 9, ///< RAM ECC Error + BSP_GRP_IRQ_MPU_BUS_SLAVE = 10, ///< MPU Bus Slave Error + BSP_GRP_IRQ_MPU_BUS_MASTER = 11, ///< MPU Bus Master Error + BSP_GRP_IRQ_MPU_STACK = 12, ///< MPU Stack Error + BSP_GRP_IRQ_TRUSTZONE = 13, ///< MPU Stack Error + BSP_GRP_IRQ_CACHE_PARITY = 15, ///< MPU Stack Error +} bsp_grp_irq_t; + +#endif + +/* Callback type. */ +typedef void (* bsp_grp_irq_cb_t)(bsp_grp_irq_t irq); + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_group_interrupt_open(void); // Used internally by BSP + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.c new file mode 100644 index 00000000000..605fc63af26 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.c @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#include "bsp_guard.h" + +/* Only the secure project has nonsecure callable functions. */ +#if BSP_TZ_SECURE_BUILD + +/* If the CGG Security Attribution is configured to secure access only. */ + #if BSP_CFG_CLOCKS_SECURE == 1 + +/*******************************************************************************************************************//** + * Set the callback used by the secure project to notify the nonsecure project when the clock settings have changed. + * + * @retval FSP_SUCCESS Callback set. + * @retval FSP_ERR_ASSERTION An input parameter is invalid. + **********************************************************************************************************************/ +BSP_CMSE_NONSECURE_ENTRY fsp_err_t R_BSP_ClockUpdateCallbackSet (bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory) +{ + bsp_clock_update_callback_t p_callback_checked = + (bsp_clock_update_callback_t) cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE); + + bsp_clock_update_callback_args_t * p_callback_memory_checked = + (bsp_clock_update_callback_args_t *) cmse_check_address_range(p_callback_memory, + sizeof(bsp_clock_update_callback_args_t), + CMSE_AU_NONSECURE); + FSP_ASSERT(p_callback == p_callback_checked); + FSP_ASSERT(p_callback_memory == p_callback_memory_checked); + + r_bsp_clock_update_callback_set(p_callback_checked, p_callback_memory_checked); + + return FSP_SUCCESS; +} + + #endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.h new file mode 100644 index 00000000000..bb9617de61b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_guard.h @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_GUARD_H +#define BSP_GUARD_H + +#include "bsp_api.h" + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +#if BSP_TZ_SECURE_BUILD || BSP_TZ_NONSECURE_BUILD +BSP_CMSE_NONSECURE_ENTRY fsp_err_t R_BSP_ClockUpdateCallbackSet(bsp_clock_update_callback_t p_callback, + bsp_clock_update_callback_args_t * p_callback_memory); + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.c new file mode 100644 index 00000000000..b53d7b98056 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.c @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +volatile uint32_t g_protect_pfswe_counter BSP_SECTION_EARLY_INIT; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.h new file mode 100644 index 00000000000..418c753808d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_io.h @@ -0,0 +1,465 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @defgroup BSP_IO BSP I/O access + * @ingroup RENESAS_COMMON + * @brief This module provides basic read/write access to port pins. + * + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_IO_H +#define BSP_IO_H + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Private definition to set enumeration values. */ +#define BSP_IO_PRV_PFS_PSEL_OFFSET (24) +#define BSP_IO_PRV_8BIT_MASK (0xFF) +#define BSP_IO_PWPR_B0WI_OFFSET (7U) +#define BSP_IO_PWPR_PFSWE_OFFSET (6U) +#define BSP_IO_PFS_PDR_OUTPUT (4U) +#define BSP_IO_PRV_PIN_WRITE_MASK (0xFFFE3FFE) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Levels that can be set and read for individual pins */ +typedef enum e_bsp_io_level +{ + BSP_IO_LEVEL_LOW = 0, ///< Low + BSP_IO_LEVEL_HIGH ///< High +} bsp_io_level_t; + +/** Direction of individual pins */ +typedef enum e_bsp_io_dir +{ + BSP_IO_DIRECTION_INPUT = 0, ///< Input + BSP_IO_DIRECTION_OUTPUT ///< Output +} bsp_io_direction_t; + +/** Superset list of all possible IO ports. */ +typedef enum e_bsp_io_port +{ + BSP_IO_PORT_00 = 0x0000, ///< IO port 0 + BSP_IO_PORT_01 = 0x0100, ///< IO port 1 + BSP_IO_PORT_02 = 0x0200, ///< IO port 2 + BSP_IO_PORT_03 = 0x0300, ///< IO port 3 + BSP_IO_PORT_04 = 0x0400, ///< IO port 4 + BSP_IO_PORT_05 = 0x0500, ///< IO port 5 + BSP_IO_PORT_06 = 0x0600, ///< IO port 6 + BSP_IO_PORT_07 = 0x0700, ///< IO port 7 + BSP_IO_PORT_08 = 0x0800, ///< IO port 8 + BSP_IO_PORT_09 = 0x0900, ///< IO port 9 + BSP_IO_PORT_10 = 0x0A00, ///< IO port 10 + BSP_IO_PORT_11 = 0x0B00, ///< IO port 11 + BSP_IO_PORT_12 = 0x0C00, ///< IO port 12 + BSP_IO_PORT_13 = 0x0D00, ///< IO port 13 + BSP_IO_PORT_14 = 0x0E00, ///< IO port 14 +} bsp_io_port_t; + +/** Superset list of all possible IO port pins. */ +typedef enum e_bsp_io_port_pin_t +{ + BSP_IO_PORT_00_PIN_00 = 0x0000, ///< IO port 0 pin 0 + BSP_IO_PORT_00_PIN_01 = 0x0001, ///< IO port 0 pin 1 + BSP_IO_PORT_00_PIN_02 = 0x0002, ///< IO port 0 pin 2 + BSP_IO_PORT_00_PIN_03 = 0x0003, ///< IO port 0 pin 3 + BSP_IO_PORT_00_PIN_04 = 0x0004, ///< IO port 0 pin 4 + BSP_IO_PORT_00_PIN_05 = 0x0005, ///< IO port 0 pin 5 + BSP_IO_PORT_00_PIN_06 = 0x0006, ///< IO port 0 pin 6 + BSP_IO_PORT_00_PIN_07 = 0x0007, ///< IO port 0 pin 7 + BSP_IO_PORT_00_PIN_08 = 0x0008, ///< IO port 0 pin 8 + BSP_IO_PORT_00_PIN_09 = 0x0009, ///< IO port 0 pin 9 + BSP_IO_PORT_00_PIN_10 = 0x000A, ///< IO port 0 pin 10 + BSP_IO_PORT_00_PIN_11 = 0x000B, ///< IO port 0 pin 11 + BSP_IO_PORT_00_PIN_12 = 0x000C, ///< IO port 0 pin 12 + BSP_IO_PORT_00_PIN_13 = 0x000D, ///< IO port 0 pin 13 + BSP_IO_PORT_00_PIN_14 = 0x000E, ///< IO port 0 pin 14 + BSP_IO_PORT_00_PIN_15 = 0x000F, ///< IO port 0 pin 15 + + BSP_IO_PORT_01_PIN_00 = 0x0100, ///< IO port 1 pin 0 + BSP_IO_PORT_01_PIN_01 = 0x0101, ///< IO port 1 pin 1 + BSP_IO_PORT_01_PIN_02 = 0x0102, ///< IO port 1 pin 2 + BSP_IO_PORT_01_PIN_03 = 0x0103, ///< IO port 1 pin 3 + BSP_IO_PORT_01_PIN_04 = 0x0104, ///< IO port 1 pin 4 + BSP_IO_PORT_01_PIN_05 = 0x0105, ///< IO port 1 pin 5 + BSP_IO_PORT_01_PIN_06 = 0x0106, ///< IO port 1 pin 6 + BSP_IO_PORT_01_PIN_07 = 0x0107, ///< IO port 1 pin 7 + BSP_IO_PORT_01_PIN_08 = 0x0108, ///< IO port 1 pin 8 + BSP_IO_PORT_01_PIN_09 = 0x0109, ///< IO port 1 pin 9 + BSP_IO_PORT_01_PIN_10 = 0x010A, ///< IO port 1 pin 10 + BSP_IO_PORT_01_PIN_11 = 0x010B, ///< IO port 1 pin 11 + BSP_IO_PORT_01_PIN_12 = 0x010C, ///< IO port 1 pin 12 + BSP_IO_PORT_01_PIN_13 = 0x010D, ///< IO port 1 pin 13 + BSP_IO_PORT_01_PIN_14 = 0x010E, ///< IO port 1 pin 14 + BSP_IO_PORT_01_PIN_15 = 0x010F, ///< IO port 1 pin 15 + + BSP_IO_PORT_02_PIN_00 = 0x0200, ///< IO port 2 pin 0 + BSP_IO_PORT_02_PIN_01 = 0x0201, ///< IO port 2 pin 1 + BSP_IO_PORT_02_PIN_02 = 0x0202, ///< IO port 2 pin 2 + BSP_IO_PORT_02_PIN_03 = 0x0203, ///< IO port 2 pin 3 + BSP_IO_PORT_02_PIN_04 = 0x0204, ///< IO port 2 pin 4 + BSP_IO_PORT_02_PIN_05 = 0x0205, ///< IO port 2 pin 5 + BSP_IO_PORT_02_PIN_06 = 0x0206, ///< IO port 2 pin 6 + BSP_IO_PORT_02_PIN_07 = 0x0207, ///< IO port 2 pin 7 + BSP_IO_PORT_02_PIN_08 = 0x0208, ///< IO port 2 pin 8 + BSP_IO_PORT_02_PIN_09 = 0x0209, ///< IO port 2 pin 9 + BSP_IO_PORT_02_PIN_10 = 0x020A, ///< IO port 2 pin 10 + BSP_IO_PORT_02_PIN_11 = 0x020B, ///< IO port 2 pin 11 + BSP_IO_PORT_02_PIN_12 = 0x020C, ///< IO port 2 pin 12 + BSP_IO_PORT_02_PIN_13 = 0x020D, ///< IO port 2 pin 13 + BSP_IO_PORT_02_PIN_14 = 0x020E, ///< IO port 2 pin 14 + BSP_IO_PORT_02_PIN_15 = 0x020F, ///< IO port 2 pin 15 + + BSP_IO_PORT_03_PIN_00 = 0x0300, ///< IO port 3 pin 0 + BSP_IO_PORT_03_PIN_01 = 0x0301, ///< IO port 3 pin 1 + BSP_IO_PORT_03_PIN_02 = 0x0302, ///< IO port 3 pin 2 + BSP_IO_PORT_03_PIN_03 = 0x0303, ///< IO port 3 pin 3 + BSP_IO_PORT_03_PIN_04 = 0x0304, ///< IO port 3 pin 4 + BSP_IO_PORT_03_PIN_05 = 0x0305, ///< IO port 3 pin 5 + BSP_IO_PORT_03_PIN_06 = 0x0306, ///< IO port 3 pin 6 + BSP_IO_PORT_03_PIN_07 = 0x0307, ///< IO port 3 pin 7 + BSP_IO_PORT_03_PIN_08 = 0x0308, ///< IO port 3 pin 8 + BSP_IO_PORT_03_PIN_09 = 0x0309, ///< IO port 3 pin 9 + BSP_IO_PORT_03_PIN_10 = 0x030A, ///< IO port 3 pin 10 + BSP_IO_PORT_03_PIN_11 = 0x030B, ///< IO port 3 pin 11 + BSP_IO_PORT_03_PIN_12 = 0x030C, ///< IO port 3 pin 12 + BSP_IO_PORT_03_PIN_13 = 0x030D, ///< IO port 3 pin 13 + BSP_IO_PORT_03_PIN_14 = 0x030E, ///< IO port 3 pin 14 + BSP_IO_PORT_03_PIN_15 = 0x030F, ///< IO port 3 pin 15 + + BSP_IO_PORT_04_PIN_00 = 0x0400, ///< IO port 4 pin 0 + BSP_IO_PORT_04_PIN_01 = 0x0401, ///< IO port 4 pin 1 + BSP_IO_PORT_04_PIN_02 = 0x0402, ///< IO port 4 pin 2 + BSP_IO_PORT_04_PIN_03 = 0x0403, ///< IO port 4 pin 3 + BSP_IO_PORT_04_PIN_04 = 0x0404, ///< IO port 4 pin 4 + BSP_IO_PORT_04_PIN_05 = 0x0405, ///< IO port 4 pin 5 + BSP_IO_PORT_04_PIN_06 = 0x0406, ///< IO port 4 pin 6 + BSP_IO_PORT_04_PIN_07 = 0x0407, ///< IO port 4 pin 7 + BSP_IO_PORT_04_PIN_08 = 0x0408, ///< IO port 4 pin 8 + BSP_IO_PORT_04_PIN_09 = 0x0409, ///< IO port 4 pin 9 + BSP_IO_PORT_04_PIN_10 = 0x040A, ///< IO port 4 pin 10 + BSP_IO_PORT_04_PIN_11 = 0x040B, ///< IO port 4 pin 11 + BSP_IO_PORT_04_PIN_12 = 0x040C, ///< IO port 4 pin 12 + BSP_IO_PORT_04_PIN_13 = 0x040D, ///< IO port 4 pin 13 + BSP_IO_PORT_04_PIN_14 = 0x040E, ///< IO port 4 pin 14 + BSP_IO_PORT_04_PIN_15 = 0x040F, ///< IO port 4 pin 15 + + BSP_IO_PORT_05_PIN_00 = 0x0500, ///< IO port 5 pin 0 + BSP_IO_PORT_05_PIN_01 = 0x0501, ///< IO port 5 pin 1 + BSP_IO_PORT_05_PIN_02 = 0x0502, ///< IO port 5 pin 2 + BSP_IO_PORT_05_PIN_03 = 0x0503, ///< IO port 5 pin 3 + BSP_IO_PORT_05_PIN_04 = 0x0504, ///< IO port 5 pin 4 + BSP_IO_PORT_05_PIN_05 = 0x0505, ///< IO port 5 pin 5 + BSP_IO_PORT_05_PIN_06 = 0x0506, ///< IO port 5 pin 6 + BSP_IO_PORT_05_PIN_07 = 0x0507, ///< IO port 5 pin 7 + BSP_IO_PORT_05_PIN_08 = 0x0508, ///< IO port 5 pin 8 + BSP_IO_PORT_05_PIN_09 = 0x0509, ///< IO port 5 pin 9 + BSP_IO_PORT_05_PIN_10 = 0x050A, ///< IO port 5 pin 10 + BSP_IO_PORT_05_PIN_11 = 0x050B, ///< IO port 5 pin 11 + BSP_IO_PORT_05_PIN_12 = 0x050C, ///< IO port 5 pin 12 + BSP_IO_PORT_05_PIN_13 = 0x050D, ///< IO port 5 pin 13 + BSP_IO_PORT_05_PIN_14 = 0x050E, ///< IO port 5 pin 14 + BSP_IO_PORT_05_PIN_15 = 0x050F, ///< IO port 5 pin 15 + + BSP_IO_PORT_06_PIN_00 = 0x0600, ///< IO port 6 pin 0 + BSP_IO_PORT_06_PIN_01 = 0x0601, ///< IO port 6 pin 1 + BSP_IO_PORT_06_PIN_02 = 0x0602, ///< IO port 6 pin 2 + BSP_IO_PORT_06_PIN_03 = 0x0603, ///< IO port 6 pin 3 + BSP_IO_PORT_06_PIN_04 = 0x0604, ///< IO port 6 pin 4 + BSP_IO_PORT_06_PIN_05 = 0x0605, ///< IO port 6 pin 5 + BSP_IO_PORT_06_PIN_06 = 0x0606, ///< IO port 6 pin 6 + BSP_IO_PORT_06_PIN_07 = 0x0607, ///< IO port 6 pin 7 + BSP_IO_PORT_06_PIN_08 = 0x0608, ///< IO port 6 pin 8 + BSP_IO_PORT_06_PIN_09 = 0x0609, ///< IO port 6 pin 9 + BSP_IO_PORT_06_PIN_10 = 0x060A, ///< IO port 6 pin 10 + BSP_IO_PORT_06_PIN_11 = 0x060B, ///< IO port 6 pin 11 + BSP_IO_PORT_06_PIN_12 = 0x060C, ///< IO port 6 pin 12 + BSP_IO_PORT_06_PIN_13 = 0x060D, ///< IO port 6 pin 13 + BSP_IO_PORT_06_PIN_14 = 0x060E, ///< IO port 6 pin 14 + BSP_IO_PORT_06_PIN_15 = 0x060F, ///< IO port 6 pin 15 + + BSP_IO_PORT_07_PIN_00 = 0x0700, ///< IO port 7 pin 0 + BSP_IO_PORT_07_PIN_01 = 0x0701, ///< IO port 7 pin 1 + BSP_IO_PORT_07_PIN_02 = 0x0702, ///< IO port 7 pin 2 + BSP_IO_PORT_07_PIN_03 = 0x0703, ///< IO port 7 pin 3 + BSP_IO_PORT_07_PIN_04 = 0x0704, ///< IO port 7 pin 4 + BSP_IO_PORT_07_PIN_05 = 0x0705, ///< IO port 7 pin 5 + BSP_IO_PORT_07_PIN_06 = 0x0706, ///< IO port 7 pin 6 + BSP_IO_PORT_07_PIN_07 = 0x0707, ///< IO port 7 pin 7 + BSP_IO_PORT_07_PIN_08 = 0x0708, ///< IO port 7 pin 8 + BSP_IO_PORT_07_PIN_09 = 0x0709, ///< IO port 7 pin 9 + BSP_IO_PORT_07_PIN_10 = 0x070A, ///< IO port 7 pin 10 + BSP_IO_PORT_07_PIN_11 = 0x070B, ///< IO port 7 pin 11 + BSP_IO_PORT_07_PIN_12 = 0x070C, ///< IO port 7 pin 12 + BSP_IO_PORT_07_PIN_13 = 0x070D, ///< IO port 7 pin 13 + BSP_IO_PORT_07_PIN_14 = 0x070E, ///< IO port 7 pin 14 + BSP_IO_PORT_07_PIN_15 = 0x070F, ///< IO port 7 pin 15 + + BSP_IO_PORT_08_PIN_00 = 0x0800, ///< IO port 8 pin 0 + BSP_IO_PORT_08_PIN_01 = 0x0801, ///< IO port 8 pin 1 + BSP_IO_PORT_08_PIN_02 = 0x0802, ///< IO port 8 pin 2 + BSP_IO_PORT_08_PIN_03 = 0x0803, ///< IO port 8 pin 3 + BSP_IO_PORT_08_PIN_04 = 0x0804, ///< IO port 8 pin 4 + BSP_IO_PORT_08_PIN_05 = 0x0805, ///< IO port 8 pin 5 + BSP_IO_PORT_08_PIN_06 = 0x0806, ///< IO port 8 pin 6 + BSP_IO_PORT_08_PIN_07 = 0x0807, ///< IO port 8 pin 7 + BSP_IO_PORT_08_PIN_08 = 0x0808, ///< IO port 8 pin 8 + BSP_IO_PORT_08_PIN_09 = 0x0809, ///< IO port 8 pin 9 + BSP_IO_PORT_08_PIN_10 = 0x080A, ///< IO port 8 pin 10 + BSP_IO_PORT_08_PIN_11 = 0x080B, ///< IO port 8 pin 11 + BSP_IO_PORT_08_PIN_12 = 0x080C, ///< IO port 8 pin 12 + BSP_IO_PORT_08_PIN_13 = 0x080D, ///< IO port 8 pin 13 + BSP_IO_PORT_08_PIN_14 = 0x080E, ///< IO port 8 pin 14 + BSP_IO_PORT_08_PIN_15 = 0x080F, ///< IO port 8 pin 15 + + BSP_IO_PORT_09_PIN_00 = 0x0900, ///< IO port 9 pin 0 + BSP_IO_PORT_09_PIN_01 = 0x0901, ///< IO port 9 pin 1 + BSP_IO_PORT_09_PIN_02 = 0x0902, ///< IO port 9 pin 2 + BSP_IO_PORT_09_PIN_03 = 0x0903, ///< IO port 9 pin 3 + BSP_IO_PORT_09_PIN_04 = 0x0904, ///< IO port 9 pin 4 + BSP_IO_PORT_09_PIN_05 = 0x0905, ///< IO port 9 pin 5 + BSP_IO_PORT_09_PIN_06 = 0x0906, ///< IO port 9 pin 6 + BSP_IO_PORT_09_PIN_07 = 0x0907, ///< IO port 9 pin 7 + BSP_IO_PORT_09_PIN_08 = 0x0908, ///< IO port 9 pin 8 + BSP_IO_PORT_09_PIN_09 = 0x0909, ///< IO port 9 pin 9 + BSP_IO_PORT_09_PIN_10 = 0x090A, ///< IO port 9 pin 10 + BSP_IO_PORT_09_PIN_11 = 0x090B, ///< IO port 9 pin 11 + BSP_IO_PORT_09_PIN_12 = 0x090C, ///< IO port 9 pin 12 + BSP_IO_PORT_09_PIN_13 = 0x090D, ///< IO port 9 pin 13 + BSP_IO_PORT_09_PIN_14 = 0x090E, ///< IO port 9 pin 14 + BSP_IO_PORT_09_PIN_15 = 0x090F, ///< IO port 9 pin 15 + + BSP_IO_PORT_10_PIN_00 = 0x0A00, ///< IO port 10 pin 0 + BSP_IO_PORT_10_PIN_01 = 0x0A01, ///< IO port 10 pin 1 + BSP_IO_PORT_10_PIN_02 = 0x0A02, ///< IO port 10 pin 2 + BSP_IO_PORT_10_PIN_03 = 0x0A03, ///< IO port 10 pin 3 + BSP_IO_PORT_10_PIN_04 = 0x0A04, ///< IO port 10 pin 4 + BSP_IO_PORT_10_PIN_05 = 0x0A05, ///< IO port 10 pin 5 + BSP_IO_PORT_10_PIN_06 = 0x0A06, ///< IO port 10 pin 6 + BSP_IO_PORT_10_PIN_07 = 0x0A07, ///< IO port 10 pin 7 + BSP_IO_PORT_10_PIN_08 = 0x0A08, ///< IO port 10 pin 8 + BSP_IO_PORT_10_PIN_09 = 0x0A09, ///< IO port 10 pin 9 + BSP_IO_PORT_10_PIN_10 = 0x0A0A, ///< IO port 10 pin 10 + BSP_IO_PORT_10_PIN_11 = 0x0A0B, ///< IO port 10 pin 11 + BSP_IO_PORT_10_PIN_12 = 0x0A0C, ///< IO port 10 pin 12 + BSP_IO_PORT_10_PIN_13 = 0x0A0D, ///< IO port 10 pin 13 + BSP_IO_PORT_10_PIN_14 = 0x0A0E, ///< IO port 10 pin 14 + BSP_IO_PORT_10_PIN_15 = 0x0A0F, ///< IO port 10 pin 15 + + BSP_IO_PORT_11_PIN_00 = 0x0B00, ///< IO port 11 pin 0 + BSP_IO_PORT_11_PIN_01 = 0x0B01, ///< IO port 11 pin 1 + BSP_IO_PORT_11_PIN_02 = 0x0B02, ///< IO port 11 pin 2 + BSP_IO_PORT_11_PIN_03 = 0x0B03, ///< IO port 11 pin 3 + BSP_IO_PORT_11_PIN_04 = 0x0B04, ///< IO port 11 pin 4 + BSP_IO_PORT_11_PIN_05 = 0x0B05, ///< IO port 11 pin 5 + BSP_IO_PORT_11_PIN_06 = 0x0B06, ///< IO port 11 pin 6 + BSP_IO_PORT_11_PIN_07 = 0x0B07, ///< IO port 11 pin 7 + BSP_IO_PORT_11_PIN_08 = 0x0B08, ///< IO port 11 pin 8 + BSP_IO_PORT_11_PIN_09 = 0x0B09, ///< IO port 11 pin 9 + BSP_IO_PORT_11_PIN_10 = 0x0B0A, ///< IO port 11 pin 10 + BSP_IO_PORT_11_PIN_11 = 0x0B0B, ///< IO port 11 pin 11 + BSP_IO_PORT_11_PIN_12 = 0x0B0C, ///< IO port 11 pin 12 + BSP_IO_PORT_11_PIN_13 = 0x0B0D, ///< IO port 11 pin 13 + BSP_IO_PORT_11_PIN_14 = 0x0B0E, ///< IO port 11 pin 14 + BSP_IO_PORT_11_PIN_15 = 0x0B0F, ///< IO port 11 pin 15 + + BSP_IO_PORT_12_PIN_00 = 0x0C00, ///< IO port 12 pin 0 + BSP_IO_PORT_12_PIN_01 = 0x0C01, ///< IO port 12 pin 1 + BSP_IO_PORT_12_PIN_02 = 0x0C02, ///< IO port 12 pin 2 + BSP_IO_PORT_12_PIN_03 = 0x0C03, ///< IO port 12 pin 3 + BSP_IO_PORT_12_PIN_04 = 0x0C04, ///< IO port 12 pin 4 + BSP_IO_PORT_12_PIN_05 = 0x0C05, ///< IO port 12 pin 5 + BSP_IO_PORT_12_PIN_06 = 0x0C06, ///< IO port 12 pin 6 + BSP_IO_PORT_12_PIN_07 = 0x0C07, ///< IO port 12 pin 7 + BSP_IO_PORT_12_PIN_08 = 0x0C08, ///< IO port 12 pin 8 + BSP_IO_PORT_12_PIN_09 = 0x0C09, ///< IO port 12 pin 9 + BSP_IO_PORT_12_PIN_10 = 0x0C0A, ///< IO port 12 pin 10 + BSP_IO_PORT_12_PIN_11 = 0x0C0B, ///< IO port 12 pin 11 + BSP_IO_PORT_12_PIN_12 = 0x0C0C, ///< IO port 12 pin 12 + BSP_IO_PORT_12_PIN_13 = 0x0C0D, ///< IO port 12 pin 13 + BSP_IO_PORT_12_PIN_14 = 0x0C0E, ///< IO port 12 pin 14 + BSP_IO_PORT_12_PIN_15 = 0x0C0F, ///< IO port 12 pin 15 + + BSP_IO_PORT_13_PIN_00 = 0x0D00, ///< IO port 13 pin 0 + BSP_IO_PORT_13_PIN_01 = 0x0D01, ///< IO port 13 pin 1 + BSP_IO_PORT_13_PIN_02 = 0x0D02, ///< IO port 13 pin 2 + BSP_IO_PORT_13_PIN_03 = 0x0D03, ///< IO port 13 pin 3 + BSP_IO_PORT_13_PIN_04 = 0x0D04, ///< IO port 13 pin 4 + BSP_IO_PORT_13_PIN_05 = 0x0D05, ///< IO port 13 pin 5 + BSP_IO_PORT_13_PIN_06 = 0x0D06, ///< IO port 13 pin 6 + BSP_IO_PORT_13_PIN_07 = 0x0D07, ///< IO port 13 pin 7 + BSP_IO_PORT_13_PIN_08 = 0x0D08, ///< IO port 13 pin 8 + BSP_IO_PORT_13_PIN_09 = 0x0D09, ///< IO port 13 pin 9 + BSP_IO_PORT_13_PIN_10 = 0x0D0A, ///< IO port 13 pin 10 + BSP_IO_PORT_13_PIN_11 = 0x0D0B, ///< IO port 13 pin 11 + BSP_IO_PORT_13_PIN_12 = 0x0D0C, ///< IO port 13 pin 12 + BSP_IO_PORT_13_PIN_13 = 0x0D0D, ///< IO port 13 pin 13 + BSP_IO_PORT_13_PIN_14 = 0x0D0E, ///< IO port 13 pin 14 + BSP_IO_PORT_13_PIN_15 = 0x0D0F, ///< IO port 13 pin 15 + + BSP_IO_PORT_14_PIN_00 = 0x0E00, ///< IO port 14 pin 0 + BSP_IO_PORT_14_PIN_01 = 0x0E01, ///< IO port 14 pin 1 + BSP_IO_PORT_14_PIN_02 = 0x0E02, ///< IO port 14 pin 2 + BSP_IO_PORT_14_PIN_03 = 0x0E03, ///< IO port 14 pin 3 + BSP_IO_PORT_14_PIN_04 = 0x0E04, ///< IO port 14 pin 4 + BSP_IO_PORT_14_PIN_05 = 0x0E05, ///< IO port 14 pin 5 + BSP_IO_PORT_14_PIN_06 = 0x0E06, ///< IO port 14 pin 6 + BSP_IO_PORT_14_PIN_07 = 0x0E07, ///< IO port 14 pin 7 + BSP_IO_PORT_14_PIN_08 = 0x0E08, ///< IO port 14 pin 8 + BSP_IO_PORT_14_PIN_09 = 0x0E09, ///< IO port 14 pin 9 + BSP_IO_PORT_14_PIN_10 = 0x0E0A, ///< IO port 14 pin 10 + BSP_IO_PORT_14_PIN_11 = 0x0E0B, ///< IO port 14 pin 11 + BSP_IO_PORT_14_PIN_12 = 0x0E0C, ///< IO port 14 pin 12 + BSP_IO_PORT_14_PIN_13 = 0x0E0D, ///< IO port 14 pin 13 + BSP_IO_PORT_14_PIN_14 = 0x0E0E, ///< IO port 14 pin 14 + BSP_IO_PORT_14_PIN_15 = 0x0E0F, ///< IO port 14 pin 15 + BSP_IO_PORT_FF_PIN_FF = 0xFFFF, ///< Invalid IO port +} bsp_io_port_pin_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern volatile uint32_t g_protect_pfswe_counter; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Read the current input level of the pin. + * + * @param[in] pin The pin + * + * @retval Current input level + **********************************************************************************************************************/ +__STATIC_INLINE uint32_t R_BSP_PinRead (bsp_io_port_pin_t pin) +{ + /* Read pin level. */ + return R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS_b.PIDR; +} + +/*******************************************************************************************************************//** + * Set a pin to output and set the output level to the level provided. If PFS protection is enabled, disable PFS + * protection using R_BSP_PinAccessEnable() before calling this function. + * + * @param[in] pin The pin + * @param[in] level The level + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinWrite (bsp_io_port_pin_t pin, bsp_io_level_t level) +{ + /* Clear PMR, ASEL, ISEL and PODR bits. */ + uint32_t pfs_bits = R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS; + pfs_bits &= BSP_IO_PRV_PIN_WRITE_MASK; + + /* Set output level and pin direction to output. */ + uint32_t lvl = ((uint32_t) level | pfs_bits); +#if (3U == BSP_FEATURE_IOPORT_VERSION) + R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = (uint16_t) (BSP_IO_PFS_PDR_OUTPUT | lvl); +#else + R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = (BSP_IO_PFS_PDR_OUTPUT | lvl); +#endif +} + +/*******************************************************************************************************************//** + * Configure a pin. If PFS protection is enabled, disable PFS protection using R_BSP_PinAccessEnable() before calling + * this function. + * + * @param[in] pin The pin + * @param[in] cfg Configuration for the pin (PmnPFS register setting) + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinCfg (bsp_io_port_pin_t pin, uint32_t cfg) +{ + /* Configure a pin. */ +#if (3U == BSP_FEATURE_IOPORT_VERSION) + R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = (uint16_t) cfg; +#else + R_PFS->PORT[pin >> 8].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = cfg; +#endif +} + +/*******************************************************************************************************************//** + * Enable access to the PFS registers. Uses a reference counter to protect against interrupts that could occur + * via multiple threads or an ISR re-entering this code. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessEnable (void) +{ +#if BSP_CFG_PFS_PROTECT + + /** Get the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /** If this is first entry then allow writing of PFS. */ + if (0 == g_protect_pfswe_counter) + { + #if BSP_TZ_SECURE_BUILD || (BSP_FEATURE_TZ_VERSION == 2 && FSP_PRIV_TZ_USE_SECURE_REGS) + R_PMISC->PWPRS = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear BOWI bit - writing to PFSWE bit enabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_PFSWE_OFFSET; ///< Set PFSWE bit - writing to PFS register enabled + #endif + } + + /** Increment the protect counter */ + g_protect_pfswe_counter++; + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +#endif +} + +/*******************************************************************************************************************//** + * Disable access to the PFS registers. Uses a reference counter to protect against interrupts that could occur via + * multiple threads or an ISR re-entering this code. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_PinAccessDisable (void) +{ +#if BSP_CFG_PFS_PROTECT + + /** Get the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /** Is it safe to disable PFS register? */ + if (0 != g_protect_pfswe_counter) + { + /* Decrement the protect counter */ + g_protect_pfswe_counter--; + } + + /** Is it safe to disable writing of PFS? */ + if (0 == g_protect_pfswe_counter) + { + #if BSP_TZ_SECURE_BUILD || (BSP_FEATURE_TZ_VERSION == 2 && FSP_PRIV_TZ_USE_SECURE_REGS) + R_PMISC->PWPRS = 0; ///< Clear PFSWE bit - writing to PFSWE bit enabled + R_PMISC->PWPRS = 1U << BSP_IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFS register enabled + #else + R_PMISC->PWPR = 0; ///< Clear PFSWE bit - writing to PFS register disabled + R_PMISC->PWPR = 1U << BSP_IO_PWPR_B0WI_OFFSET; ///< Set BOWI bit - writing to PFSWE bit disabled + #endif + } + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +#endif +} + +/** @} (end addtogroup BSP_IO) */ + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.c new file mode 100644 index 00000000000..5e8a7da2b7e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.c @@ -0,0 +1,148 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#ifdef R_IPC + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* IPC0NMI is Core1 -> Core0, IPC1NMI is Core0 -> Core1 */ + #if (BSP_CFG_CPU_CORE == 0) + #define BSP_IPC_PRV_NMI_REG_SET IPC1NMI + #define BSP_IPC_PRV_NMI_REG_CLEAR IPC0NMI + #else + #define BSP_IPC_PRV_NMI_REG_SET IPC0NMI + #define BSP_IPC_PRV_NMI_REG_CLEAR IPC1NMI + #endif + + #define BSP_IPC_PRV_SEMAPHORE_CLEAR 1 + #define BSP_IPC_PRV_VALID_SEMAPHORE_MASK (0xFFFFU) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +static void ipc_nmi_internal_callback(bsp_grp_irq_t irq); + +static bsp_ipc_nmi_cb_t gp_nmi_callback = NULL; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Attempt to take IPC semaphore + * + * @param[in] p_semaphore_handle Semaphore handle corresponding to IPCSEMn to use. + * + * @retval FSP_SUCCESS Semaphore successfully taken + * @retval FSP_ERR_IN_USE Semaphore already taken + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT Specified semaphore doesn't exist on device + **********************************************************************************************************************/ +fsp_err_t R_BSP_IpcSemaphoreTake (bsp_ipc_semaphore_handle_t const * const p_semaphore_handle) +{ + #if BSP_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_semaphore_handle); + FSP_ERROR_RETURN(BSP_IPC_PRV_VALID_SEMAPHORE_MASK & (1 << p_semaphore_handle->semaphore_num), + FSP_ERR_IP_CHANNEL_NOT_PRESENT); + #endif + + FSP_ERROR_RETURN(!R_IPC->IPCSEM[p_semaphore_handle->semaphore_num], FSP_ERR_IN_USE); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Give/clear the IPC semaphore + * + * @param[in] p_semaphore_handle Semaphore handle corresponding to IPCSEMn to use. + * + * @retval FSP_SUCCESS Semaphore successfully given + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT Specified semaphore doesn't exist on device + **********************************************************************************************************************/ +fsp_err_t R_BSP_IpcSemaphoreGive (bsp_ipc_semaphore_handle_t const * const p_semaphore_handle) +{ + #if BSP_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_semaphore_handle); + FSP_ERROR_RETURN(BSP_IPC_PRV_VALID_SEMAPHORE_MASK & (1 << p_semaphore_handle->semaphore_num), + FSP_ERR_IP_CHANNEL_NOT_PRESENT); + #endif + + R_IPC->IPCSEM[p_semaphore_handle->semaphore_num] = BSP_IPC_PRV_SEMAPHORE_CLEAR; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Enable NMI for current core + * + * @param[in] p_callback Pointer to callback to use for NMI. + * + * @retval FSP_SUCCESS NMI request set + **********************************************************************************************************************/ +fsp_err_t R_BSP_IpcNmiEnable (bsp_ipc_nmi_cb_t p_callback) +{ + #if BSP_CFG_PARAM_CHECKING_ENABLE + FSP_ASSERT(NULL != p_callback); + #endif + + gp_nmi_callback = p_callback; + + /* Setup NMI callback */ + R_BSP_GroupIrqWrite(BSP_GRP_IRQ_IPC, ipc_nmi_internal_callback); + + /* Set IPCEN bit to enable NMI. NMIER bits cannot be cleared after reset, so no need to read-modify-write. */ + R_ICU->NMIER = R_ICU_NMIER_IPCEN_Msk; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Set NMI request for the opposing core + * + * @retval FSP_SUCCESS NMI request set + **********************************************************************************************************************/ +fsp_err_t R_BSP_IpcNmiRequestSet (void) +{ + R_IPC->BSP_IPC_PRV_NMI_REG_SET.SET = 1; + + return FSP_SUCCESS; +} + +/** @} (end addtogroup BSP_MCU) */ + +static void ipc_nmi_internal_callback (bsp_grp_irq_t irq) +{ + if (BSP_GRP_IRQ_IPC == irq) + { + /* Clear NMI request */ + R_IPC->BSP_IPC_PRV_NMI_REG_CLEAR.CLR = 1; + + if (NULL != gp_nmi_callback) + { + /* Call user callback */ + gp_nmi_callback(); + } + } +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.h new file mode 100644 index 00000000000..f243dfbe20f --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_ipc.h @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/** @} (end addtogroup BSP_MCU) */ + +#ifndef BSP_IPC_H +#define BSP_IPC_H + +#ifdef R_IPC + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Semaphore handle for IPC semaphores. */ +typedef struct st_bsp_ipc_semaphore_handle +{ + uint8_t semaphore_num; ///< Semaphore number, controls which IPCSEMn register is used. +} bsp_ipc_semaphore_handle_t; + +/** IPC NMI callback type. */ +typedef void (* bsp_ipc_nmi_cb_t)(void); + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +fsp_err_t R_BSP_IpcSemaphoreTake(bsp_ipc_semaphore_handle_t const * const p_semaphore_handle); +fsp_err_t R_BSP_IpcSemaphoreGive(bsp_ipc_semaphore_handle_t const * const p_semaphore_handle); +fsp_err_t R_BSP_IpcNmiRequestSet(void); +fsp_err_t R_BSP_IpcNmiEnable(bsp_ipc_nmi_cb_t p_callback); + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.c new file mode 100644 index 00000000000..7e9139f8b44 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.c @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/** ELC event definitions. */ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_IRQ_UINT32_MAX (0xFFFFFFFFU) +#define BSP_PRV_BITS_PER_WORD (32) + +#if (BSP_CFG_CPU_CORE == 1) + #define BSP_EVENT_NUM_TO_INTSELR(x) (x >> 5) // Convert event number to INTSELR register number + #define BSP_EVENT_NUM_TO_INTSELR_MASK(x) (1 << (x % 32)) // Convert event number to INTSELR bit mask +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/* This table is used to store the context in the ISR. */ +void * gp_renesas_isr_context[BSP_ICU_VECTOR_NUM_ENTRIES]; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_NUM_ENTRIES] BSP_WEAK_REFERENCE = +{ + (bsp_interrupt_event_t) 0 +}; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ +#if 0 == BSP_CFG_INLINE_IRQ_FUNCTIONS + #if BSP_FEATURE_ICU_HAS_IELSR + +/*******************************************************************************************************************//** + * Clear the interrupt status flag (IR) for a given interrupt. When an interrupt is triggered the IR bit + * is set. If it is not cleared in the ISR then the interrupt will trigger again immediately. + * + * @param[in] irq Interrupt for which to clear the IR bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqStatusClear (IRQn_Type irq) +{ + /* Clear the IR bit in the selected IELSR register. */ + R_ICU->IELSR_b[irq].IR = 0U; + + /* Read back the IELSR register to ensure that the IR bit is cleared. + * See section "13.5.1 Operations During an Interrupt" in the RA8M1 manual R01UH0994EJ0100. */ + FSP_REGISTER_READ(R_ICU->IELSR[irq]); +} + + #endif + +/*******************************************************************************************************************//** + * Clear the interrupt status flag (IR) for a given interrupt and clear the NVIC pending interrupt. + * + * @param[in] irq Interrupt for which to clear the IR bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqClearPending (IRQn_Type irq) +{ + #if BSP_FEATURE_ICU_HAS_IELSR + + /* Clear the IR bit in the selected IELSR register. */ + R_BSP_IrqStatusClear(irq); + + /* Flush memory transactions to ensure that the IR bit is cleared before clearing the pending bit in the NVIC. */ + __DMB(); + #endif + + /* The following statement is used in place of NVIC_ClearPendingIRQ to avoid including a branch for system + * exceptions every time an interrupt is cleared in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + NVIC->ICPR[(((uint32_t) irq) >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context. + * + * @param[in] irq The IRQ to configure. + * @param[in] priority NVIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqCfg (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + /* The following statement is used in place of NVIC_SetPriority to avoid including a branch for system exceptions + * every time a priority is configured in the NVIC. */ + #if (4U == __CORTEX_M) + NVIC->IPR[((uint32_t) irq)] = (uint8_t) ((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX); + #elif (33 == __CORTEX_M) + NVIC->IPR[((uint32_t) irq)] = (uint8_t) ((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX); + #elif (23 == __CORTEX_M) + NVIC->IPR[_IP_IDX(irq)] = ((uint32_t) (NVIC->IPR[_IP_IDX(irq)] & ~((uint32_t) UINT8_MAX << _BIT_SHIFT(irq))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX) << _BIT_SHIFT(irq))); + #else + NVIC_SetPriority(irq, priority); + #endif + + /* Store the context. The context is recovered in the ISR. */ + R_FSP_IsrContextSet(irq, p_context); +} + +/*******************************************************************************************************************//** + * Enable the IRQ in the NVIC (Without clearing the pending bit). + * + * @param[in] irq The IRQ to enable. Note that the enums listed for IRQn_Type are only those for the Cortex + * Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqEnableNoClear (IRQn_Type const irq) +{ + /* The following statement is used in place of NVIC_EnableIRQ to avoid including a branch for system exceptions + * every time an interrupt is enabled in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + + __COMPILER_BARRIER(); + NVIC->ISER[(_irq >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); + __COMPILER_BARRIER(); +} + +/*******************************************************************************************************************//** + * Clears pending interrupts in both ICU and NVIC, then enables the interrupt. + * + * @param[in] irq Interrupt for which to clear the IR bit and enable in the NVIC. Note that the enums listed + * for IRQn_Type are only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqEnable (IRQn_Type const irq) +{ + /* Clear pending interrupts in the ICU and NVIC. */ + R_BSP_IrqClearPending(irq); + + /* Enable the IRQ in the NVIC. */ + R_BSP_IrqEnableNoClear(irq); +} + +/*******************************************************************************************************************//** + * Disables interrupts in the NVIC. + * + * @param[in] irq The IRQ to disable in the NVIC. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqDisable (IRQn_Type const irq) +{ + /* The following statements is used in place of NVIC_DisableIRQ to avoid including a branch for system + * exceptions every time an interrupt is cleared in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + NVIC->ICER[(((uint32_t) irq) >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); + + __DSB(); + __ISB(); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context, clears pending interrupts, then enables the interrupt. + * + * @param[in] irq Interrupt number. + * @param[in] priority NVIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +void R_BSP_IrqCfgEnable (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + R_BSP_IrqCfg(irq, priority, p_context); + R_BSP_IrqEnable(irq); +} + +#endif // 0 == BSP_CFG_INLINE_IRQ_FUNCTIONS + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Using the vector table information section that has been built by the linker and placed into ROM in the + * .vector_info. section, this function will initialize the ICU so that configured ELC events will trigger interrupts + * in the NVIC. + * + **********************************************************************************************************************/ +void bsp_irq_cfg (void) +{ +#if FSP_PRIV_TZ_USE_SECURE_REGS + #if (BSP_FEATURE_TZ_VERSION == 2 && BSP_TZ_SECURE_BUILD == 0) + + /* On MCUs with this implementation of TrustZone, IRQ security attribution is set to secure by default. + * This means that flat projects do not need to set security attribution to secure. */ + #else + + /* Unprotect security registers. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + #if !BSP_TZ_SECURE_BUILD + + /* Set the DMAC channels to secure access. */ + #ifdef BSP_TZ_CFG_ICUSARC + R_CPSCU->ICUSARC = ~R_CPSCU_ICUSARC_SADMACn_Msk; + #endif + #endif + + /* Place all vectors in non-secure state unless they are used in the secure project. */ + uint32_t interrupt_security_state[BSP_ICU_VECTOR_MAX_ENTRIES / BSP_PRV_BITS_PER_WORD]; + memset(&interrupt_security_state, UINT8_MAX, sizeof(interrupt_security_state)); + + for (uint32_t i = 0U; i < BSP_ICU_VECTOR_NUM_ENTRIES; i++) + { + if (0U != g_interrupt_event_link_select[i]) + { + /* This is a secure vector. Clear the associated bit. */ + uint32_t index = i / BSP_PRV_BITS_PER_WORD; + uint32_t bit = i % BSP_PRV_BITS_PER_WORD; + interrupt_security_state[index] &= ~(1U << bit); + } + } + + /* The Secure Attribute managed within the ARM CPU NVIC must match the security attribution of IELSEn + * (Reference section 13.2.9 in the RA6M4 manual R01UH0890EJ0050). */ + uint32_t volatile * p_icusarg = &R_CPSCU->ICUSARG; + for (uint32_t i = 0U; i < BSP_ICU_VECTOR_MAX_ENTRIES / BSP_PRV_BITS_PER_WORD; i++) + { + p_icusarg[i] = interrupt_security_state[i]; + NVIC->ITNS[i] = interrupt_security_state[i]; + } + + /* Protect security registers. */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); + #endif +#endif + +#if BSP_FEATURE_ICU_HAS_IELSR + + /* Calculate the number of IELSR registers that need to be initialized. */ + uint32_t ielsr_count = BSP_ICU_VECTOR_MAX_ENTRIES - BSP_FEATURE_ICU_FIXED_IELSR_COUNT; + if (ielsr_count > BSP_ICU_VECTOR_NUM_ENTRIES) + { + ielsr_count = BSP_ICU_VECTOR_NUM_ENTRIES; + } + + for (uint32_t i = 0U; i < ielsr_count; i++) + { + if (0U != g_interrupt_event_link_select[i]) + { + R_ICU->IELSR[i] = (uint32_t) g_interrupt_event_link_select[i]; + + #if (BSP_CFG_CPU_CORE == 1) + + /* Set INTSELR for selected events. */ + uint32_t intselr_num = BSP_EVENT_NUM_TO_INTSELR((uint32_t) g_interrupt_event_link_select[i]); + uint32_t intselr = R_ICU->INTSELR[intselr_num]; + + intselr |= BSP_EVENT_NUM_TO_INTSELR_MASK((uint32_t) g_interrupt_event_link_select[i]); + R_ICU->INTSELR[intselr_num] = intselr; + #endif + } + } +#endif +} diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.h new file mode 100644 index 00000000000..e8f14e38636 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_irq.h @@ -0,0 +1,238 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/** @} (end addtogroup BSP_MCU) */ + +#ifndef BSP_IRQ_H +#define BSP_IRQ_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define BSP_ICU_VECTOR_MAX_ENTRIES (BSP_VECTOR_TABLE_MAX_ENTRIES - BSP_CORTEX_VECTOR_TABLE_ENTRIES) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ +extern void * gp_renesas_isr_context[BSP_ICU_VECTOR_NUM_ENTRIES]; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @brief Sets the ISR context associated with the requested IRQ. + * + * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this + * function. + * @param[in] p_context ISR context for IRQ. + **********************************************************************************************************************/ +__STATIC_INLINE void R_FSP_IsrContextSet (IRQn_Type const irq, void * p_context) +{ + /* This provides access to the ISR context array defined in bsp_irq.c. This is an inline function instead of + * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */ + gp_renesas_isr_context[irq] = p_context; +} + +/*******************************************************************************************************************//** + * @brief Finds the ISR context associated with the requested IRQ. + * + * @param[in] irq IRQ number (parameter checking must ensure the IRQ number is valid before calling this + * function. + * @return ISR context for IRQ. + **********************************************************************************************************************/ +__STATIC_INLINE void * R_FSP_IsrContextGet (IRQn_Type const irq) +{ + /* This provides access to the ISR context array defined in bsp_irq.c. This is an inline function instead of + * being part of bsp_irq.c for performance considerations because it is used in interrupt service routines. */ + return gp_renesas_isr_context[irq]; +} + +#if BSP_CFG_INLINE_IRQ_FUNCTIONS + + #if BSP_FEATURE_ICU_HAS_IELSR + +/*******************************************************************************************************************//** + * Clear the interrupt status flag (IR) for a given interrupt. When an interrupt is triggered the IR bit + * is set. If it is not cleared in the ISR then the interrupt will trigger again immediately. + * + * @param[in] irq Interrupt for which to clear the IR bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqStatusClear (IRQn_Type irq) +{ + /* Clear the IR bit in the selected IELSR register. */ + R_ICU->IELSR_b[irq].IR = 0U; + + /* Read back the IELSR register to ensure that the IR bit is cleared. + * See section "13.5.1 Operations During an Interrupt" in the RA8M1 manual R01UH0994EJ0100. */ + FSP_REGISTER_READ(R_ICU->IELSR[irq]); +} + + #endif + +/*******************************************************************************************************************//** + * Clear the interrupt status flag (IR) for a given interrupt and clear the NVIC pending interrupt. + * + * @param[in] irq Interrupt for which to clear the IR bit. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqClearPending (IRQn_Type irq) +{ + #if BSP_FEATURE_ICU_HAS_IELSR + + /* Clear the IR bit in the selected IELSR register. */ + R_BSP_IrqStatusClear(irq); + + /* Flush memory transactions to ensure that the IR bit is cleared before clearing the pending bit in the NVIC. */ + __DMB(); + #endif + + /* The following statement is used in place of NVIC_ClearPendingIRQ to avoid including a branch for system + * exceptions every time an interrupt is cleared in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + NVIC->ICPR[(((uint32_t) irq) >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context. + * + * @param[in] irq The IRQ to configure. + * @param[in] priority NVIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqCfg (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + /* The following statement is used in place of NVIC_SetPriority to avoid including a branch for system exceptions + * every time a priority is configured in the NVIC. */ + #if (4U == __CORTEX_M) + NVIC->IPR[((uint32_t) irq)] = (uint8_t) ((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX); + #elif (33 == __CORTEX_M) + NVIC->IPR[((uint32_t) irq)] = (uint8_t) ((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX); + #elif (23 == __CORTEX_M) + NVIC->IPR[_IP_IDX(irq)] = ((uint32_t) (NVIC->IPR[_IP_IDX(irq)] & ~((uint32_t) UINT8_MAX << _BIT_SHIFT(irq))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t) UINT8_MAX) << _BIT_SHIFT(irq))); + #else + NVIC_SetPriority(irq, priority); + #endif + + /* Store the context. The context is recovered in the ISR. */ + R_FSP_IsrContextSet(irq, p_context); +} + +/*******************************************************************************************************************//** + * Enable the IRQ in the NVIC (Without clearing the pending bit). + * + * @param[in] irq The IRQ to enable. Note that the enums listed for IRQn_Type are only those for the Cortex + * Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqEnableNoClear (IRQn_Type const irq) +{ + /* The following statement is used in place of NVIC_EnableIRQ to avoid including a branch for system exceptions + * every time an interrupt is enabled in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + + __COMPILER_BARRIER(); + NVIC->ISER[(_irq >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); + __COMPILER_BARRIER(); +} + +/*******************************************************************************************************************//** + * Clears pending interrupts in both ICU and NVIC, then enables the interrupt. + * + * @param[in] irq Interrupt for which to clear the IR bit and enable in the NVIC. Note that the enums listed + * for IRQn_Type are only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqEnable (IRQn_Type const irq) +{ + /* Clear pending interrupts in the ICU and NVIC. */ + R_BSP_IrqClearPending(irq); + + /* Enable the IRQ in the NVIC. */ + R_BSP_IrqEnableNoClear(irq); +} + +/*******************************************************************************************************************//** + * Disables interrupts in the NVIC. + * + * @param[in] irq The IRQ to disable in the NVIC. Note that the enums listed for IRQn_Type are + * only those for the Cortex Processor Exceptions Numbers. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqDisable (IRQn_Type const irq) +{ + /* The following statements is used in place of NVIC_DisableIRQ to avoid including a branch for system + * exceptions every time an interrupt is cleared in the NVIC. */ + uint32_t _irq = (uint32_t) irq; + NVIC->ICER[(((uint32_t) irq) >> 5UL)] = (uint32_t) (1UL << (_irq & 0x1FUL)); + + __DSB(); + __ISB(); +} + +/*******************************************************************************************************************//** + * Sets the interrupt priority and context, clears pending interrupts, then enables the interrupt. + * + * @param[in] irq Interrupt number. + * @param[in] priority NVIC priority of the interrupt + * @param[in] p_context The interrupt context is a pointer to data required in the ISR. + * + * @warning Do not call this function for system exceptions where the IRQn_Type value is < 0. + **********************************************************************************************************************/ +__STATIC_INLINE void R_BSP_IrqCfgEnable (IRQn_Type const irq, uint32_t priority, void * p_context) +{ + R_BSP_IrqCfg(irq, priority, p_context); + R_BSP_IrqEnable(irq); +} + +#else + #if BSP_FEATURE_ICU_HAS_IELSR +void R_BSP_IrqStatusClear(IRQn_Type irq); + + #endif +void R_BSP_IrqClearPending(IRQn_Type irq); +void R_BSP_IrqCfg(IRQn_Type const irq, uint32_t priority, void * p_context); +void R_BSP_IrqEnableNoClear(IRQn_Type const irq); +void R_BSP_IrqEnable(IRQn_Type const irq); +void R_BSP_IrqDisable(IRQn_Type const irq); +void R_BSP_IrqCfgEnable(IRQn_Type const irq, uint32_t priority, void * p_context); + +#endif + +/*******************************************************************************************************************//** + * @internal + * @addtogroup BSP_MCU_PRV Internal BSP Documentation + * @ingroup RENESAS_INTERNAL + * @{ + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_irq_cfg(void); // Used internally by BSP + +/** @} (end addtogroup BSP_MCU_PRV) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.c new file mode 100644 index 00000000000..045e84ba721 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.c @@ -0,0 +1,2050 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_macl.h" + +#if BSP_FEATURE_MACL_SUPPORTED + #if __has_include("arm_math_types.h") + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + + #ifndef INDEX_MASK + +/* This used to be defined in CMSIS DSP. But they have added an undef of the macro in utils.h and therefore it is no longer + * in scope for the uses of this file. */ + #define INDEX_MASK 0x0000003F + #endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +static inline void r_macl_wait_operation(void); + +static void r_macl_mul_q31(const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint32_t block_size); + +static void r_macl_scale_q31(const q31_t * p_src, q31_t scale_fract, int8_t shift, q31_t * p_dst, uint32_t block_size); + +static void r_macl_mat_mul_q31(const arm_matrix_instance_q31 * p_src_a, + const arm_matrix_instance_q31 * p_src_b, + arm_matrix_instance_q31 * p_dst); + +static void r_macl_mat_mul_acc_q31(const q31_t * p_in_a, + const q31_t * p_in_b, + q31_t * p_out, + uint16_t num_cols_a, + uint16_t num_cols_b); + +static void r_macl_mat_scale_q31(const arm_matrix_instance_q31 * p_src, + q31_t scale_fract, + int32_t shift, + arm_matrix_instance_q31 * p_dst); +static void r_macl_conv_q31(const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint8_t block_size); + +static uint32_t r_macl_recip_q31(q31_t in, q31_t * dst, const q31_t * p_recip_table); + +/*******************************************************************************************************************//** + * @addtogroup BSP_MACL + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Perform multiplication via MACL module. + * + * @param[in] p_src_a Pointer which point to data A. + * @param[in] p_src_b Pointer which point to data B. + * @param[out] p_dst Pointer to buffer which will hold the calculation result. + * @param[in] block_size Numbers of elements to be calculated. + **********************************************************************************************************************/ +void R_BSP_MaclMulQ31 (const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint32_t block_size) +{ + /* Enable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + r_macl_mul_q31(p_src_a, p_src_b, p_dst, block_size); + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; +} + +/*******************************************************************************************************************//** + * Perform scaling a vector by multiplying scalar via MACL module. + * + * @param[in] p_src Pointer which point to a vector. + * @param[in] scale_fract Pointer to the scalar number. + * @param[in] shift Number of bits to shift the result by + * @param[out] p_dst Pointer to buffer which will hold the calculation result. + * @param[in] block_size Numbers of elements to be calculated. + **********************************************************************************************************************/ +void R_BSP_MaclScaleQ31 (const q31_t * p_src, q31_t scale_fract, int8_t shift, q31_t * p_dst, uint32_t block_size) +{ + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + r_macl_scale_q31(p_src, scale_fract, shift, p_dst, block_size); +} + +/*******************************************************************************************************************//** + * Perform Q31 matrix multiplication via MACL module. + * + * @param[in] p_src_a Points to the first input matrix structure A. + * @param[in] p_src_b Points to the second input matrix structure B. + * @param[out] p_dst Points to the buffer which hold output matrix structure. + **********************************************************************************************************************/ +void R_BSP_MaclMatMulQ31 (const arm_matrix_instance_q31 * p_src_a, + const arm_matrix_instance_q31 * p_src_b, + arm_matrix_instance_q31 * p_dst) +{ + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + r_macl_mat_mul_q31(p_src_a, p_src_b, p_dst); +} + +/*******************************************************************************************************************//** + * Perform Q31 matrix and vector multiplication via MACL module. + * + * @param[in] p_src_mat Points to the first input matrix structure. + * @param[in] p_vec Points to the input vector. + * @param[out] p_dst Points to the buffer which hold the output vector. + **********************************************************************************************************************/ +void R_BSP_MaclMatVecMulQ31 (const arm_matrix_instance_q31 * p_src_mat, const q31_t * p_vec, q31_t * p_dst) +{ + uint16_t num_rows = p_src_mat->numRows; // Number of rows of input matrix + uint16_t num_cols = p_src_mat->numCols; // Number of columns of input matrix + const q31_t * p_src = p_src_mat->pData; // Input data matrix + const q31_t * p_in_vec = p_vec; // Input data vector + q31_t * p_out = p_dst; // Output data vector + uint16_t row = num_rows; // Loop counters + uint16_t num_cols_vec = 1; + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + /* Row loop of the matrix */ + do + { + /* Perform the multiply-accumulates a row in p_src with the input vector */ + r_macl_mat_mul_acc_q31(p_src, p_in_vec, p_out, num_cols, num_cols_vec); + + p_out++; + row--; + p_src += num_cols; + } while (row > 0U); +} + +/*******************************************************************************************************************//** + * Perform scaling a matrix by multiplying scalar via MACL module. + * + * @param[in] p_src Points to the vector. + * @param[in] scale_fract Points to the scalar number. + * @param[in] shift Number of bits to shift the result by + * @param[out] p_dst Points to the buffer which will hold the calculation result. + **********************************************************************************************************************/ +void R_BSP_MaclMatScaleQ31 (const arm_matrix_instance_q31 * p_src, + q31_t scale_fract, + int32_t shift, + arm_matrix_instance_q31 * p_dst) +{ + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + r_macl_mat_scale_q31(p_src, scale_fract, shift, p_dst); +} + +/*******************************************************************************************************************//** + * Perform the biquad cascade direct form I filter in Q31 via MACL module + * + * @param[in] p_biquad_csd_df1_inst Point to instance of the Q31 Biquad cascade structure + * @param[in] p_src Point to input sample to be filtered. + * @param[out] p_dst Point to buffer for storing filtered sample. + * @param[in] block_size Numbers of input sample. + **********************************************************************************************************************/ +void R_BSP_MaclBiquadCsdDf1Q31 (const arm_biquad_casd_df1_inst_q31 * p_biquad_csd_df1_inst, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size) +{ + const q31_t * p_coeffs = p_biquad_csd_df1_inst->pCoeffs; // Coefficient pointer + q31_t * p_state = p_biquad_csd_df1_inst->pState; // State pointer + const q31_t * p_src_local = p_src; // Local pointer for p_src + q31_t * p_dst_local = p_dst; // Local pointer for p_dst + uint32_t stage = p_biquad_csd_df1_inst->numStages; // Loop counter + uint32_t sample; // Loop counter + uint32_t state_update_element; // Update state buffer + uint32_t src_ctrl; // Control the value of source + uint32_t sample_ctrl; // Control the value of sample + uint32_t coeffs_ctrl; // Control the value of coefficient + uint32_t shift = ((uint32_t) p_biquad_csd_df1_inst->postShift + 1U); // Shift to be applied to the output + uint32_t r_shift = BSP_MACL_32_BIT - shift; // Shift to be applied to the output + volatile uint64_t * p_result_in_q62 = (uint64_t *) &(R_MACL->MULR0.MULRL); // Assign to address of MULR0 + + state_update_element = 0U; + coeffs_ctrl = 0U; + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + while (stage > 0U) + { + sample = block_size; + src_ctrl = 0U; + sample_ctrl = 0U; + + /** + * y[n] = b0 * x[n] + b1 * x[n - 1] + b2 * x[n -2] + a1 * y[n - 1] + a2 * y[n - 2] + */ + while (sample > 0U) + { + /* Clean result reg */ + R_MACL->MULRCLR = 0U; + + /* Calculate b0.x[n] */ + R_MACL->MAC32S = (uint32_t) p_src_local[src_ctrl]; + R_MACL->MULB0 = (uint32_t) p_coeffs[coeffs_ctrl]; + r_macl_wait_operation(); + + /* Calculate for b1.x[n-1] and a1.y[n-1] */ + if (sample_ctrl >= 1U) + { + /* b1 * x[n - 1] */ + R_MACL->MAC32S = (uint32_t) p_state[state_update_element]; + R_MACL->MULB0 = (uint32_t) p_coeffs[coeffs_ctrl + 1U]; + r_macl_wait_operation(); + + /* a1 * y[n - 1] */ + R_MACL->MAC32S = (uint32_t) p_state[state_update_element + 2U]; + R_MACL->MULB0 = (uint32_t) p_coeffs[coeffs_ctrl + 3U]; + r_macl_wait_operation(); + } + + /* Calculate for b2 * x[n - 2] and a2 * y[n - 2]*/ + if (sample_ctrl >= 2U) + { + /* b2 * x[n - 2] */ + R_MACL->MAC32S = (uint32_t) p_state[state_update_element + 1U]; + R_MACL->MULB0 = (uint32_t) p_coeffs[coeffs_ctrl + 2U]; + r_macl_wait_operation(); + + /* a2 * y[n - 2] */ + R_MACL->MAC32S = (uint32_t) p_state[state_update_element + 3U]; + R_MACL->MULB0 = (uint32_t) p_coeffs[coeffs_ctrl + 4U]; + r_macl_wait_operation(); + } + + /* Update state buffer */ + p_state[state_update_element + 1U] = p_state[state_update_element]; // x[n - 2] = x[n - 1] + p_state[state_update_element] = p_src_local[src_ctrl]; // x[n - 1] = x[n] + + /* Shift and write result to buffer */ + *p_dst_local = (q31_t) (*p_result_in_q62 >> r_shift); + + /* Update state buffer */ + p_state[state_update_element + 3U] = p_state[state_update_element + 2U]; // y[n - 2] = y[n - 1] + p_state[state_update_element + 2U] = *p_dst_local; // Update value of y[n-1] + + sample--; + src_ctrl++; + sample_ctrl++; + + /* Check before update addr of p_dst to prevent segmentation fault */ + if (sample != 0U) + { + p_dst_local++; + } + } + + p_src_local = p_dst; + p_dst_local = p_dst; + state_update_element += 4U; + coeffs_ctrl += 5U; + stage--; + } +} + +/*******************************************************************************************************************//** + * Perform the convolution in Q31 via MACL module. + * + * @param[in] p_src_a Point to input source A + * @param[in] src_a_len Length of source A + * @param[in] p_src_b Point to input source B + * @param[in] src_b_len Length of source B + * @param[out] p_dst Point to result buffer + **********************************************************************************************************************/ +void R_BSP_MaclConvQ31 (const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst) +{ + uint8_t src_a_ctrl; // Control the value of source A + uint8_t src_b_ctrl; // Control the value of source B + uint8_t element_ctrl; // Control the value of element + uint32_t src_a_len_local; // Local length of source A + uint32_t src_b_len_local; // Local length of source B + const q31_t * p_data_a; // Input source A pointer + const q31_t * p_data_b; // Input source B pointer + q31_t * p_dst_local = p_dst; // Output pointer + + src_a_ctrl = 1U; + src_b_ctrl = 1U; + element_ctrl = 1U; + + /* Enable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + /* The algorithm implementation is based on the lengths of the inputs. src B is always made to slide across src A. + * Therefore, length of B is always considered as shorter or equal to length of A */ + if (src_a_len >= src_b_len) + { + p_data_a = p_src_a; + p_data_b = p_src_b; + src_a_len_local = src_a_len; + src_b_len_local = src_b_len; + } + else + { + p_data_a = p_src_b; + p_data_b = p_src_a; + src_a_len_local = src_b_len; + src_b_len_local = src_a_len; + } + + /* Stage 1 */ + + /* sum = x[0] * y[0] + * sum = x[0] * y[1] + x[1] * y[0] + * .... + * sum = x[0] * y[srcBlen - 1] + x[1] * y[srcBlen - 2] +...+ x[srcBLen - 1] * y[0] + */ + while (src_b_ctrl < src_b_len_local) + { + /* Perform multiply-accumulate via MACL for convolution operation */ + r_macl_conv_q31(p_data_a, p_data_b, p_dst_local, element_ctrl); + + p_data_b++; + p_dst_local++; + element_ctrl++; + src_b_ctrl++; + src_a_ctrl++; + } + + /* Stage 2 */ + + /* sum = x[0] * y[srcBLen-1] + x[1] * y[srcBLen-2] +...+ x[srcBLen-1] * y[0] + * sum = x[1] * y[srcBLen-1] + x[2] * y[srcBLen-2] +...+ x[srcBLen] * y[0] + * .... + * sum = x[srcALen-srcBLen-2] * y[srcBLen-1] + x[srcALen] * y[srcBLen-2] +...+ x[srcALen-1] * y[0] + */ + while (src_a_ctrl <= src_a_len_local) + { + /* Perform multiply-accumulate via MACL for convolution operation */ + r_macl_conv_q31(p_data_a, p_data_b, p_dst_local, element_ctrl); + + p_data_a++; + p_dst_local++; + src_a_ctrl++; + } + + element_ctrl--; + + /* Stage 3 */ + + /* sum += x[srcALen-srcBLen+1] * y[srcBLen-1] + x[srcALen-srcBLen+2] * y[srcBLen-2] +...+ x[srcALen-1] * y[1] + * sum += x[srcALen-srcBLen+2] * y[srcBLen-1] + x[srcALen-srcBLen+3] * y[srcBLen-2] +...+ x[srcALen-1] * y[2] + * .... + * sum += x[srcALen-2] * y[srcBLen-1] + x[srcALen-1] * y[srcBLen-2] + * sum += x[srcALen-1] * y[srcBLen-1] + */ + while (element_ctrl > 0U) + { + /* Perform multiply-accumulate via MACL for convolution operation */ + r_macl_conv_q31(p_data_a, p_data_b, p_dst_local, element_ctrl); + + p_data_a++; + element_ctrl--; + p_dst_local++; + } + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; +} + +/*******************************************************************************************************************//** + * Perform the partial convolution in Q31 via MACL module. + * + * @param[in] p_src_a Point to input source A + * @param[in] src_a_len Length of source A + * @param[in] p_src_b Point to input source B + * @param[in] src_b_len Length of source B + * @param[out] p_dst Point to result buffer + * @param[in] first_idx The first output sample to start with + * @param[in] num_points The number of output points to be computed + * + * @retval ARM_MATH_SUCCESS Operation successful + * @retval ARM_MATH_ARGUMENT_ERROR Requested compute points is bigger than result size + **********************************************************************************************************************/ +arm_status R_BSP_MaclConvPartialQ31 (const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst, + uint32_t first_idx, + uint32_t num_points) +{ + /* Status of Partial convolution */ + arm_status status; + + /* Enable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + /* Check for range of output samples to be calculated */ + if ((first_idx + num_points) > (src_a_len + (src_b_len - 1U))) + { + /* Set status as ARM_MATH_ARGUMENT_ERROR */ + status = ARM_MATH_ARGUMENT_ERROR; + } + else + { + /* Loop to calculate convolution for output length number of values */ + for (uint32_t i = first_idx; i <= (first_idx + num_points - 1U); i++) + { + /* Clear the Result registers. */ + R_MACL->MULRCLR = 0U; + + /* Loop to perform MAC operations according to convolution equation */ + for (uint32_t j = 0U; j <= i; j++) + { + /* Check the array limitations */ + if (((i - j) < src_b_len) && (j < src_a_len)) + { + /* z[i] += x[i-j] * y[j] */ + R_MACL->MAC32S = (uint32_t) (p_src_a[j]); + R_MACL->MULB0 = (uint32_t) (p_src_b[i - j]); + r_macl_wait_operation(); + } + } + + /* Store the output in the destination buffer */ + p_dst[i] = (q31_t) R_MACL->MULR0.MULRH; + } + + /* Set status as ARM_MATH_SUCCESS */ + status = ARM_MATH_SUCCESS; + } + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + return status; +} + +/*******************************************************************************************************************//** + * Perform the Q31 FIR Decimate Q31 via MACL module. + * + * @param[in] p_fir_decimate_ins_q31 Pointer which point to an instance of the Q31 FIR Decimate structure. + * @param[in] p_src Pointer which point to the input vector. + * @param[out] p_dst Pointer to buffer which hold the output vector. + * @param[in] block_size Numbers of samples to be calculated. + **********************************************************************************************************************/ +void R_BSP_MaclFirDecimateQ31 (const arm_fir_decimate_instance_q31 * p_fir_decimate_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size) +{ + q31_t * p_state = p_fir_decimate_ins_q31->pState; // State pointer + const q31_t * p_coeffs = p_fir_decimate_ins_q31->pCoeffs; // Coefficient pointer + q31_t * p_state_cur; // Points to the current sample of the state + q31_t * p_state_buffer; // Temporary pointer for state buffer + const q31_t * p_coeff_buffer; // Temporary pointer for coefficient buffer + uint32_t num_taps = p_fir_decimate_ins_q31->numTaps; // Number of filter coefficients in the filter + uint32_t num_of_decimate_factor; // Number of decimation factor + uint32_t tap_cnt; // Loop counters + uint32_t blk_cnt; // Loop counters + + /* Enable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + /* p_fir_decimate_ins_q31->pState buffer contains previous frame (num_taps - 1) samples */ + /* p_state_cur points to the location where the new input data should be written */ + p_state_cur = p_fir_decimate_ins_q31->pState + (num_taps - 1U); + + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size / p_fir_decimate_ins_q31->M; + + while (blk_cnt > 0U) + { + /* Copy decimation factor number of new input samples into the state buffer */ + num_of_decimate_factor = p_fir_decimate_ins_q31->M; + + do + { + *p_state_cur++ = *p_src++; + --num_of_decimate_factor; + } while (num_of_decimate_factor > 0); + + /* Set accumulator to zero */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize state pointer */ + p_state_buffer = p_state; + + /* Initialize coeff pointer */ + p_coeff_buffer = p_coeffs; + + /* Initialize tap_cnt with number of taps */ + tap_cnt = num_taps; + + while (tap_cnt > 0U) + { + /* Perform the multiply-accumulate */ + /* Write state variable to register A */ + R_MACL->MAC32S = (uint32_t) *p_state_buffer++; + + /* Write coeficients to register B*/ + R_MACL->MULB0 = (uint32_t) *p_coeff_buffer++; + r_macl_wait_operation(); + + /* Decrement loop counter */ + tap_cnt--; + } + + /* Advance the state pointer by the decimation factor + * to process the next group of decimation factor number samples */ + p_state = p_state + p_fir_decimate_ins_q31->M; + + /* The result is in the accumulator, store in the destination buffer. */ + *p_dst++ = (q31_t) (R_MACL->MULR0.MULRH); + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Processing is complete. + * Now copy the last num_taps - 1 samples to the satrt of the state buffer. + * This prepares the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + p_state_cur = p_fir_decimate_ins_q31->pState; + + /* Initialize tap_cnt with number of taps */ + tap_cnt = (num_taps - 1U); + + /* Copy data */ + while (tap_cnt > 0U) + { + *p_state_cur++ = *p_state++; + + /* Decrement loop counter */ + tap_cnt--; + } + + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; +} + +/*******************************************************************************************************************//** + * Perform the Q31 FIR interpolator via MACL module. + * + * @param[in] p_fir_interpolate_ins_q31 Pointer which point to an instance of the Q31 FIR interpolator structure. + * @param[in] p_src Pointer which point to the input vector. + * @param[out] p_dst Pointer to buffer which hold the output vector. + * @param[in] block_size Numbers of samples to be calculated. + **********************************************************************************************************************/ +void R_BSP_MaclFirInterpolateQ31 (const arm_fir_interpolate_instance_q31 * p_fir_interpolate_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size) +{ + /* Disable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + q31_t * p_state = p_fir_interpolate_ins_q31->pState; // State pointer + const q31_t * p_coeffs = p_fir_interpolate_ins_q31->pCoeffs; // Coefficient pointer + q31_t * p_state_cur; // Points to the current sample of the state + q31_t * p_state_tmp; // Temporary pointer for state buffer + const q31_t * p_coef_tmp; // Temporary pointer for coefficient buffer + uint32_t coef_idx; // Index of coefficient + uint32_t factor_cnt; // Loop counters + uint32_t blk_cnt; // Loop counters + uint32_t tap_cnt; // Loop counters + uint32_t phase_len = p_fir_interpolate_ins_q31->phaseLength; // Length of each polyphase filter component + volatile uint64_t * p_result_r0 = (uint64_t *) &(R_MACL->MULR0.MULRL); // Assign to address of MULR0 + + /* p_state_cur points to the location where the new input data should be written */ + p_state_cur = p_fir_interpolate_ins_q31->pState + (phase_len - 1U); + + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + /* Copy new input sample into the state buffer */ + *p_state_cur++ = *p_src++; + + /* Address modifier index of coefficient buffer */ + coef_idx = 1U; + + /* Loop over the Interpolation factor. */ + factor_cnt = p_fir_interpolate_ins_q31->L; + + while (factor_cnt > 0U) + { + /* Clear registers */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize state pointer */ + p_state_tmp = p_state; + + /* Initialize coefficient pointer */ + p_coef_tmp = p_coeffs + (p_fir_interpolate_ins_q31->L - coef_idx); + + /* Initialize tap_cnt with number of samples */ + tap_cnt = phase_len; + + while (tap_cnt > 0U) + { + R_MACL->MAC32S = (uint32_t) (*p_state_tmp); + R_MACL->MULB0 = (uint32_t) (*p_coef_tmp); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + + tap_cnt--; + p_state_tmp++; + p_coef_tmp += p_fir_interpolate_ins_q31->L; + } + + /* The result is in the accumulator, store in the destination buffer. */ + *p_dst++ = (q31_t) (*p_result_r0 >> BSP_MACL_SHIFT_31_BIT); + + /* Increment the address modifier index of coefficient buffer */ + coef_idx++; + + /* Decrement the loop counter */ + factor_cnt--; + } + + /* Advance the state pointer by 1 to process the next group of interpolation factor number samples */ + p_state = p_state + 1; + + /* Decrement the loop counter */ + blk_cnt--; + } + + /* Points to the start of the state buffer */ + p_state_cur = p_fir_interpolate_ins_q31->pState; + + /* Initialize tap_cnt with number of samples */ + tap_cnt = (phase_len - 1U); + + /* Copy data */ + while (tap_cnt > 0U) + { + *p_state_cur++ = *p_state++; + + /* Decrement loop counter */ + tap_cnt--; + } +} + +/*******************************************************************************************************************//** + * Perform the Q31 Correlate via MACL module. + * + * @param[in] p_src_a Point to the first input sequence. + * @param[in] src_a_len Length of the first input sequence. + * @param[in] p_src_b Point to the second input sequence. + * @param[in] src_b_len Length of the second input sequence. + * @param[out] p_dst Points to the location where the output result is written. + * Length 2 * max(src_a_len, src_b_len) - 1. + **********************************************************************************************************************/ +void R_BSP_MaclCorrelateQ31 (const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst) +{ + const q31_t * p_in1; // InputA pointer + const q31_t * p_in2; // InputB pointer + q31_t * p_out = p_dst; // Output pointer + const q31_t * p_in_a_buf; // Intermediate inputA pointer + const q31_t * p_in_b_buf; // Intermediate inputB pointer + const q31_t * p_src1; // Intermediate pointers + uint32_t block_size1; // Loop counters + uint32_t block_size2; // Loop counters + uint32_t block_size3; // Loop counters + uint32_t len_diff_cnt; // Number of output samples + uint32_t cal_cnt; // Loop counters + uint32_t count; // Loop counters + int32_t inc = 1; // Destination address modifier + + /* Enable Fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + /* If src_a_len > src_b_len, + * (src_a_len - src_b_len) zeroes has to included in the starting of the output buffer */ + + /* If src_a_len < src_b_len, + * (src_b_len - src_a_len) zeroes has to included in the ending of the output buffer */ + if (src_a_len >= src_b_len) + { + /* Initialization of inputA pointer */ + p_in1 = p_src_a; + + /* Initialization of inputB pointer */ + p_in2 = p_src_b; + + /* When src_a_len > src_b_len, zero padding is done to srcB + * to make their lengths equal. + * Instead, (src_a_len - src_b_len) + * number of output samples are made zero */ + len_diff_cnt = src_a_len - src_b_len; + + /* Updating the pointer position to non zero value */ + p_out += len_diff_cnt; + } + else + { + /* Initialization of inputA pointer */ + p_in1 = p_src_b; + + /* Initialization of inputB pointer */ + p_in2 = p_src_a; + + /* src_b_len is always considered as shorter or equal to src_a_len */ + len_diff_cnt = src_b_len; + src_b_len = src_a_len; + src_a_len = len_diff_cnt; + + /* CORR(x, y) = Reverse order(CORR(y, x)) */ + /* Hence set the destination pointer to point to the last output sample */ + p_out = p_dst + ((src_a_len + src_b_len) - 2U); + + /* Destination address modifier is set to -1 */ + inc = -1; + } + + /* The function is internally + * divided into three stages according to the number of multiplications that has to be + * taken place between inputA samples and inputB samples. In the first stage of the + * algorithm, the multiplications increase by one for every iteration. + * In the second stage of the algorithm, src_b_len number of multiplications are done. + * In the third stage of the algorithm, the multiplications decrease by one + * for every iteration. + * The algorithm is implemented in three stages. + * The loop counters of each stage is initiated here. */ + block_size1 = src_b_len - 1U; + block_size2 = src_a_len - (src_b_len - 1U); + block_size3 = block_size1; + + /* -------------------------- + * Initializations of stage1 + * -------------------------*/ + + /* sum = x[0] * y[src_b_len - 1] + * sum = x[0] * y[src_b_len - 2] + x[1] * y[src_b_len - 1] + * .... + * sum = x[0] * y[0] + x[1] * y[1] +...+ x[src_b_len - 1] * y[src_b_len - 1] + *//* In this stage the MAC operations are increased by 1 for every iteration. + * The count variable holds the number of MAC operations performed */ + count = 1U; + + /* Working pointer of inputA */ + p_in_a_buf = p_in1; + + /* Working pointer of inputB */ + p_src1 = p_in2 + (src_b_len - 1U); + p_in_b_buf = p_src1; + + /* ------------------------ + * Stage1 process + * ----------------------*/ + + /* The first stage starts here */ + while (block_size1 > 0U) + { + /* Accumulator is made zero for every iteration */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize cal_cnt with number of samples */ + cal_cnt = count; + + while (cal_cnt > 0U) + { + /* Perform the multiply-accumulate */ + /* x[0] * y[src_b_len - 1] */ + R_MACL->MAC32S = (uint32_t) *p_in_a_buf++; + R_MACL->MULB0 = (uint32_t) *p_in_b_buf++; + r_macl_wait_operation(); + + /* Decrement loop counter */ + cal_cnt--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *p_out = (q31_t) (R_MACL->MULR0.MULRH); + + /* Destination pointer is updated according to the address modifier, inc */ + p_out += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + p_in_b_buf = p_src1 - count; + p_in_a_buf = p_in1; + + /* Increment MAC count */ + count++; + + /* Decrement loop counter */ + block_size1--; + } + + /* -------------------------- + * Initializations of stage2 + * ------------------------*/ + + /* sum = x[0] * y[0] + x[1] * y[1] +...+ x[src_b_len-1] * y[src_b_len-1] + * sum = x[1] * y[0] + x[2] * y[1] +...+ x[src_b_len] * y[src_b_len-1] + * .... + * sum = x[src_a_len-src_b_len-2] * y[0] + x[src_a_len-src_b_len-1] * y[1] +...+ x[src_a_len-1] * y[src_b_len-1] + *//* Working pointer of inputA */ + p_in_a_buf = p_in1; + + /* Working pointer of inputB */ + p_in_b_buf = p_in2; + + /* count is index by which the pointer p_in1 to be incremented */ + count = 0U; + + /* ------------------- + * Stage2 process + * ------------------*/ + + /* Stage2 depends on src_b_len as in this stage src_b_len number of MACS are performed. */ + + while (block_size2 > 0U) + { + /* Accumulator is made zero for every iteration */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize cal_cnt with number of samples */ + cal_cnt = src_b_len; + + while (cal_cnt > 0U) + { + /* Perform the multiply-accumulate */ + R_MACL->MAC32S = (uint32_t) *p_in_a_buf++; + R_MACL->MULB0 = (uint32_t) *p_in_b_buf++; + r_macl_wait_operation(); + + /* Decrement the loop counter */ + cal_cnt--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *p_out = (q31_t) (R_MACL->MULR0.MULRH); + + /* Destination pointer is updated according to the address modifier, inc */ + p_out += inc; + + /* Increment MAC count */ + count++; + + /* Update the inputA and inputB pointers for next MAC calculation */ + p_in_a_buf = p_in1 + count; + p_in_b_buf = p_in2; + + /* Decrement loop counter */ + block_size2--; + } + + /* -------------------------- + * Initializations of stage3 + * -------------------------*/ + + /* sum += x[src_a_len-src_b_len+1] * y[0] + x[src_a_len-src_b_len+2] * y[1] +...+ x[src_a_len-1] * y[src_b_len-1] + * sum += x[src_a_len-src_b_len+2] * y[0] + x[src_a_len-src_b_len+3] * y[1] +...+ x[src_a_len-1] * y[src_b_len-1] + * .... + * sum += x[src_a_len-2] * y[0] + x[src_a_len-1] * y[1] + * sum += x[src_a_len-1] * y[0] + *//* In this stage the MAC operations are decreased by 1 for every iteration. + * The count variable holds the number of MAC operations performed */ + count = src_b_len - 1U; + + /* Working pointer of inputA */ + p_src1 = p_in1 + (src_a_len - (src_b_len - 1U)); + p_in_a_buf = p_src1; + + /* Working pointer of inputB */ + p_in_b_buf = p_in2; + + /* ------------------- + * Stage3 process + * ------------------*/ + + while (block_size3 > 0U) + { + /* Accumulator is made zero for every iteration */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize cal_cnt with number of samples */ + cal_cnt = count; + + while (cal_cnt > 0U) + { + /* Perform the multiply-accumulate */ + R_MACL->MAC32S = (uint32_t) *p_in_a_buf++; + R_MACL->MULB0 = (uint32_t) *p_in_b_buf++; + r_macl_wait_operation(); + + /* Decrement loop counter */ + cal_cnt--; + } + + /* Store the result in the accumulator in the destination buffer. */ + *p_out = (q31_t) (R_MACL->MULR0.MULRH); + + /* Destination pointer is updated according to the address modifier, inc */ + p_out += inc; + + /* Update the inputA and inputB pointers for next MAC calculation */ + p_in_a_buf = ++p_src1; + p_in_b_buf = p_in2; + + /* Decrement MAC count */ + count--; + + /* Decrement loop counter */ + block_size3--; + } + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; +} + +/*******************************************************************************************************************//** + * Perform the Q31 FIR Sparse filter via MACL module. + * + * @note The number of p_fir_sparse_ins_q31->numTaps must be greater than or equal to 2 + * + * @param[in] p_fir_sparse_ins_q31 points to an instance of the Q31 sparse FIR structure + * @param[in] p_src points to the block of input data + * @param[out] p_dst points to the block of output data + * @param[in] p_scratch_in points to a temporary buffer of size blockSize + * @param[in] block_size number of input samples to process + **********************************************************************************************************************/ +void R_BSP_MaclFirSparseQ31 (arm_fir_sparse_instance_q31 * p_fir_sparse_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + q31_t * p_scratch_in, + uint32_t block_size) +{ + q31_t * p_state = p_fir_sparse_ins_q31->pState; + const q31_t * p_coeffs = p_fir_sparse_ins_q31->pCoeffs; + q31_t * p_scratch_tmp; + q31_t * p_state_tmp = p_state; + q31_t * p_scratch_in_tmp = p_scratch_in; + q31_t * p_out; + int32_t * p_tap_delay = p_fir_sparse_ins_q31->pTapDelay; + uint32_t delay_size = p_fir_sparse_ins_q31->maxDelay + block_size; + uint16_t num_taps = p_fir_sparse_ins_q31->numTaps; + int32_t read_index; + uint32_t tap_cnt; + uint32_t blk_cnt; + q31_t coeff = *p_coeffs++; + q31_t in; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + /* block_size of Input samples are copied into the state buffer */ + /* StateIndex points to the starting position to write in the state buffer */ + arm_circularWrite_f32((int32_t *) p_state_tmp, (int32_t) delay_size, &p_fir_sparse_ins_q31->stateIndex, 1, + (int32_t *) p_src, 1, block_size); + + /* Read Index, from where the state buffer should be read, is calculated. */ + read_index = (int32_t) (p_fir_sparse_ins_q31->stateIndex - block_size) - *p_tap_delay++; + + /* Wraparound of read_index */ + if (read_index < 0) + { + read_index += (int32_t) delay_size; + } + + /* Working pointer for state buffer is updated */ + p_state_tmp = p_state; + + /* block_size samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) p_state_tmp, (int32_t) delay_size, &read_index, 1, (int32_t *) p_scratch_in_tmp, + (int32_t *) p_scratch_in_tmp, (int32_t) block_size, 1, block_size); + + /* Working pointer for the scratch buffer of state values */ + p_scratch_tmp = p_scratch_in_tmp; + + /* Working pointer for scratch buffer of output values */ + p_out = p_dst; + + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + /* Perform Multiplication and store in destination buffer */ + R_MACL->MUL32S = (uint32_t) *p_scratch_tmp++; + R_MACL->MULB0 = (uint32_t) coeff; + r_macl_wait_operation(); + *p_out++ = (q31_t) R_MACL->MULR0.MULRH; + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *p_coeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + read_index = (int32_t) (p_fir_sparse_ins_q31->stateIndex - block_size) - *p_tap_delay++; + + /* Wraparound of read_index */ + if (read_index < 0) + { + read_index += (int32_t) delay_size; + } + + /* Loop over the number of taps. */ + tap_cnt = (uint32_t) num_taps - 2U; + + while (tap_cnt > 0U) + { + /* Working pointer for state buffer is updated */ + p_state_tmp = p_state; + + /* block_size samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) p_state_tmp, + (int32_t) delay_size, + &read_index, + 1, + (int32_t *) p_scratch_in_tmp, + (int32_t *) p_scratch_in_tmp, + (int32_t) block_size, + 1, + block_size); + + /* Working pointer for the scratch buffer of state values */ + p_scratch_tmp = p_scratch_in_tmp; + + /* Working pointer for scratch buffer of output values */ + p_out = p_dst; + + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + /* Perform Multiply-Accumulate */ + /* Initialize out value*/ + R_MACL->MULR0.MULRH = (uint32_t) *p_out; + R_MACL->MULR0.MULRL = 0x0; + + /* Assign p_scratch_tmp value to register*/ + R_MACL->MAC32S = (uint32_t) *p_scratch_tmp++; + + /* Assign coeff value to register. */ + R_MACL->MULB0 = (uint32_t) coeff; + r_macl_wait_operation(); + + /* Read the result in Q31*/ + *p_out++ = (q31_t) R_MACL->MULR0.MULRH; + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Load the coefficient value and + * increment the coefficient buffer for the next set of state values */ + coeff = *p_coeffs++; + + /* Read Index, from where the state buffer should be read, is calculated. */ + read_index = (int32_t) (p_fir_sparse_ins_q31->stateIndex - block_size) - *p_tap_delay++; + + /* Wraparound of read_index */ + if (read_index < 0) + { + read_index += (int32_t) delay_size; + } + + /* Decrement tap loop counter */ + tap_cnt--; + } + + /* Compute last tap without the final read of p_tap_delay */ + + /* Working pointer for state buffer is updated */ + p_state_tmp = p_state; + + /* block_size samples are read from the state buffer */ + arm_circularRead_f32((int32_t *) p_state_tmp, (int32_t) delay_size, &read_index, 1, (int32_t *) p_scratch_in_tmp, + (int32_t *) p_scratch_in_tmp, (int32_t) block_size, 1, block_size); + + /* Working pointer for the scratch buffer of state values */ + p_scratch_tmp = p_scratch_in_tmp; + + /* Working pointer for scratch buffer of output values */ + p_out = p_dst; + + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + /* Perform Multiply-Accumulate */ + /* Initialize out value*/ + R_MACL->MULR0.MULRH = (uint32_t) *p_out; + R_MACL->MULR0.MULRL = 0x0; + + /* Assign p_scratch_tmp value to register*/ + R_MACL->MAC32S = (uint32_t) *p_scratch_tmp++; + + /* Assign coeff value to register. */ + R_MACL->MULB0 = (uint32_t) coeff; + r_macl_wait_operation(); + + /* Read the result in Q31*/ + *p_out++ = (q31_t) R_MACL->MULR0.MULRH; + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Working output pointer is updated */ + p_out = p_dst; + + /* Output is converted into 1.31 format. */ + /* Initialize blk_cnt with number of samples */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + in = *p_out << BSP_MACL_SHIFT_1_BIT; + *p_out++ = in; + + /* Decrement loop counter */ + blk_cnt--; + } +} + +/*******************************************************************************************************************//** + * Perform the Q31 normalized LMS filter via MACL module. + * @param[in] p_lms_norm_ins_q31 points to an instance of the Q31 normalized LMS filter structure + * @param[in] p_src points to the block of input data + * @param[in] p_ref points to the block of reference data + * @param[out] p_out points to the block of output data + * @param[out] p_err points to the block of error data + * @param[in] block_size number of samples to process + **********************************************************************************************************************/ +void R_BSP_MaclLmsNormQ31 (arm_lms_norm_instance_q31 * p_lms_norm_ins_q31, + const q31_t * p_src, + q31_t * p_ref, + q31_t * p_out, + q31_t * p_err, + uint32_t block_size) +{ + q31_t * p_state = p_lms_norm_ins_q31->pState; // State pointer + q31_t * p_coeffs = p_lms_norm_ins_q31->pCoeffs; // Coefficient pointer + q31_t * p_state_curnt; // Points to the current sample of the state + q31_t * p_state_buf; // Temporary pointers for state + q31_t * p_coeffs_buf; // Coefficient buffers + q31_t mu = p_lms_norm_ins_q31->mu; // Adaptive factor + uint32_t num_taps = p_lms_norm_ins_q31->numTaps; // Number of filter coefficients in the filter + uint32_t tap_cnt; // Loop counters + uint32_t blk_cnt; // Loop counters + q31_t acc; // Accumulator + q63_t energy; // Energy of the input + q31_t err_data; // Error data sample + q31_t weight_factor; // Weight factor and state + q31_t data_in; + q31_t x0; // Temporary variable to hold input sample + q31_t error_x_mu; // Temporary variable to store error + q31_t one_by_energy; // Temporary variables to store mu product and reciprocal of energy + q31_t post_shift; // Post shift to be applied to weight after reciprocal calculation + q31_t acc_l; // Low accumulator + q31_t acc_h; // High accumulator + uint32_t u_shift = ((uint32_t) p_lms_norm_ins_q31->postShift + 1U); + uint32_t l_shift = BSP_MACL_32_BIT - u_shift; // Shift to be applied to the output + q63_t result_temp; // Temporary variable to read result register + volatile uint64_t * p_result_r4 = (uint64_t *) &(R_MACL->MULR4.MULRL); // Assign to address of MULR4 + uint32_t tmp_check; // Check overflow/underflow value + q63_t mul_tmp = 0; + energy = p_lms_norm_ins_q31->energy; // Frame energy + x0 = p_lms_norm_ins_q31->x0; // Input sample + + /* p_lms_norm_ins_q31->pState points to buffer which contains previous frame (num_taps - 1) samples */ + /* p_state_curnt points to the location where the new input data should be written */ + p_state_curnt = &(p_lms_norm_ins_q31->pState[(num_taps - 1U)]); + + /* Initialise loop count */ + blk_cnt = block_size; + + /* Clear the Result registers. */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + while (blk_cnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *p_state_curnt++ = *p_src; + + /* Initialize p_state pointer */ + p_state_buf = p_state; + + /* Initialize coefficient pointer */ + p_coeffs_buf = p_coeffs; + + /* Read the sample from input buffer */ + data_in = *p_src++; + + /* Update the energy calculation */ + R_MACL->MUL32S = (uint32_t) x0; + R_MACL->MULB1 = (uint32_t) x0; + r_macl_wait_operation(); + mul_tmp = (q63_t) R_MACL->MULR1.MULRH << BSP_MACL_SHIFT_32_BIT; + mul_tmp |= R_MACL->MULR1.MULRL; + energy = (energy << BSP_MACL_SHIFT_32_BIT) - (mul_tmp << 1); + R_MACL->MUL32S = (uint32_t) data_in; + R_MACL->MULB1 = (uint32_t) data_in; + r_macl_wait_operation(); + mul_tmp = (q63_t) R_MACL->MULR1.MULRH << BSP_MACL_SHIFT_32_BIT; + mul_tmp |= R_MACL->MULR1.MULRL; + + energy = (energy + (mul_tmp << 1)) >> BSP_MACL_SHIFT_32_BIT; + + /* Set the accumulator to zero */ + R_MACL->MULR0.MULRH = BSP_MACL_CLEAR_MULR_REG; + R_MACL->MULR0.MULRL = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize tap_cnt with number of samples */ + tap_cnt = num_taps; + + while (tap_cnt > 0U) + { + /* Perform the multiply-accumulate */ + R_MACL->MAC32S = (uint32_t) *p_state_buf++; + R_MACL->MULB0 = (uint32_t) *p_coeffs_buf++; + r_macl_wait_operation(); + + /* Decrement the loop counter */ + tap_cnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = (q31_t) (R_MACL->MULR0.MULRL >> l_shift); + + /* Calc upper part of acc */ + acc_h = (q31_t) R_MACL->MULR0.MULRH << u_shift; + + acc = acc_l | acc_h; + + /* Store the result from accumulator into the destination buffer. */ + *p_out++ = acc; + + /* Compute and store error */ + err_data = *p_ref++ - acc; + *p_err++ = err_data; + + /* Calculates the reciprocal of energy */ + post_shift = (q31_t) r_macl_recip_q31((q31_t) energy + DELTA_Q31, + &one_by_energy, + &p_lms_norm_ins_q31->recipTable[0]); + + /* Calculation of product of (e * mu) */ + /* Enable Fixed Point Mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + R_MACL->MUL32S = (uint32_t) err_data; + R_MACL->MULB4 = (uint32_t) mu; + r_macl_wait_operation(); + error_x_mu = (q31_t) R_MACL->MULR4.MULRH; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + /* Weighting factor for the normalized version */ + R_MACL->MUL32S = (uint32_t) error_x_mu; + R_MACL->MULB4 = (uint32_t) one_by_energy; + r_macl_wait_operation(); + result_temp = (q63_t) *p_result_r4; + weight_factor = clip_q63_to_q31(result_temp >> (31 - post_shift)); + + /* Initialize p_state pointer */ + p_state_buf = p_state; + + /* Initialize coefficient pointer */ + p_coeffs_buf = p_coeffs; + + /* Initialize tap_cnt with number of samples */ + tap_cnt = num_taps; + + while (tap_cnt > 0U) + { + /* Perform the multiply-accumulate */ + R_MACL->MULR5.MULRH = (uint32_t) (*p_coeffs_buf >> BSP_MACL_SHIFT_1_BIT); + R_MACL->MULR5.MULRL = (uint32_t) *p_coeffs_buf << BSP_MACL_SHIFT_31_BIT; + R_MACL->MAC32S = (uint32_t) weight_factor; + R_MACL->MULB5 = (uint32_t) *p_state_buf++; + r_macl_wait_operation(); + + tmp_check = (R_MACL->MULR5.MULRH >> BSP_MACL_SHIFT_30_BIT); + + /* Check overflow/underflow coefficient value */ + if (BSP_MACL_OVERFLOW_VALUE == tmp_check) + { + *p_coeffs_buf = (q31_t) BSP_MACL_Q31_MAX_VALUE; + } + else if (BSP_MACL_UNDERFLOW_VALUE == tmp_check) + { + *p_coeffs_buf = (q31_t) BSP_MACL_Q31_MIN_VALUE; + } + else + { + /* Enable fixed point mode. */ + R_MACL->MULC |= (uint8_t) R_MACL_MULC_MULFRAC_Msk; + + *p_coeffs_buf = (q31_t) R_MACL->MULR5.MULRH; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + } + + /* Increment the coefficient buffer */ + p_coeffs_buf++; + + /* Decrement loop counter */ + tap_cnt--; + } + + /* Read the sample from state buffer */ + x0 = *p_state; + + /* Advance state pointer by 1 for the next sample */ + p_state = p_state + 1; + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Save energy and x0 values for the next frame */ + p_lms_norm_ins_q31->energy = (q31_t) energy; + p_lms_norm_ins_q31->x0 = x0; + + /* Processing is complete. + * Now copy the last num_taps - 1 samples to the start of the state buffer. + * This prepares the state buffer for the next function call. */ + + /* Points to the start of the p_state buffer */ + p_state_curnt = p_lms_norm_ins_q31->pState; + + /* Initialize tap_cnt with number of samples */ + tap_cnt = (num_taps - 1U); + + while (tap_cnt > 0U) + { + *p_state_curnt++ = *p_state++; + + /* Decrement loop counter */ + tap_cnt--; + } +} + +/*******************************************************************************************************************//** + * Perform the Q31 LMS filter via MACL module. + * @param[in] p_lms_ins_q31 points to an instance of the Q31 normalized LMS filter structure + * @param[in] p_src points to the block of input data + * @param[in] p_ref points to the block of reference data + * @param[out] p_out points to the block of output data + * @param[out] p_err points to the block of error data + * @param[in] block_size number of samples to process + **********************************************************************************************************************/ +void R_BSP_MaclLmsQ31 (const arm_lms_instance_q31 * p_lms_ins_q31, + const q31_t * p_src, + q31_t * p_ref, + q31_t * p_out, + q31_t * p_err, + uint32_t block_size) +{ + q31_t * p_state = p_lms_ins_q31->pState; // State pointer + q31_t * p_coeffs = p_lms_ins_q31->pCoeffs; // Coefficient pointer + q31_t * p_state_curnt; // Points to the current sample of the state + q31_t * p_state_buf; // Temporary pointers for state + q31_t * p_coeffs_buf; // Coefficient buffers + q31_t mu = p_lms_ins_q31->mu; // Adaptive factor + uint32_t num_taps = p_lms_ins_q31->numTaps; // Number of filter coefficients in the filter + uint32_t tap_cnt; // Loop counters + uint32_t blk_cnt; // Loop counters + q63_t acc; // Accumulator + q31_t err_data = 0; // Error data sample + q31_t alpha; // Intermediate constant for taps update + q31_t acc_l; // Low accumulator + q31_t acc_h; // High accumulator + uint32_t u_shift = (p_lms_ins_q31->postShift + 1); + uint32_t l_shift = BSP_MACL_32_BIT - u_shift; // Shift to be applied to the output + uint32_t tmp_check; // Check overflow/underflow value + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + /* p_lms_ins_q31->pState points to buffer which contains previous frame (numTaps - 1) samples */ + /* pStateCurnt points to the location where the new input data should be written */ + p_state_curnt = &(p_lms_ins_q31->pState[(num_taps - 1U)]); + + /* initialise loop count */ + blk_cnt = block_size; + + while (blk_cnt > 0U) + { + /* Copy the new input sample into the state buffer */ + *p_state_curnt++ = *p_src++; + + /* Initialize pState pointer */ + p_state_buf = p_state; + + /* Initialize coefficient pointer */ + p_coeffs_buf = p_coeffs; + + /* Set the accumulator to zero */ + R_MACL->MULRCLR = BSP_MACL_CLEAR_MULR_REG; + + /* Initialize tapCnt with number of samples */ + tap_cnt = num_taps; + + while (tap_cnt > 0U) + { + /* Perform the multiply-accumulate */ + + R_MACL->MAC32S = (uint32_t) *p_state_buf++; + R_MACL->MULB0 = (uint32_t) *p_coeffs_buf++; + r_macl_wait_operation(); + + /* Decrement the loop counter */ + tap_cnt--; + } + + /* Converting the result to 1.31 format */ + /* Calc lower part of acc */ + acc_l = (q31_t) (R_MACL->MULR0.MULRL >> l_shift); + + /* Calc upper part of acc */ + acc_h = (q31_t) R_MACL->MULR0.MULRH << u_shift; + + acc = acc_l | acc_h; + + /* Store the result from accumulator into the destination buffer. */ + *p_out++ = (q31_t) acc; + + /* Compute and store error */ + err_data = *p_ref++ - (q31_t) acc; + *p_err++ = err_data; + + /* Compute alpha i.e. intermediate constant for taps update */ + /* Enable Fixed Point Mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + R_MACL->MUL32S = (uint32_t) err_data; + R_MACL->MULB4 = (uint32_t) mu; + r_macl_wait_operation(); + alpha = (q31_t) R_MACL->MULR4.MULRH; + + /* Initialize pState pointer */ + /* Advance state pointer by 1 for the next sample */ + p_state_buf = p_state++; + + /* Initialize coefficient pointer */ + p_coeffs_buf = p_coeffs; + + /* Initialize tapCnt with number of samples */ + tap_cnt = num_taps; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + while (tap_cnt > 0U) + { + /* Perform the multiply-accumulate */ + + /* coef = (q31_t) (((q63_t) alpha * (*px++)) >> (32)); + * pb = clip_q63_to_q31((q63_t) * pb + (coef << 1U)); */ + R_MACL->MULR5.MULRH = (uint32_t) (*p_coeffs_buf >> BSP_MACL_SHIFT_1_BIT); + R_MACL->MULR5.MULRL = (uint32_t) *p_coeffs_buf << BSP_MACL_SHIFT_31_BIT; + + R_MACL->MAC32S = (uint32_t) alpha; + R_MACL->MULB5 = (uint32_t) *p_state_buf++; + r_macl_wait_operation(); + + tmp_check = (R_MACL->MULR5.MULRH >> BSP_MACL_SHIFT_30_BIT); + + /* Check overflow/underflow coefficient value */ + if (BSP_MACL_OVERFLOW_VALUE == tmp_check) + { + *p_coeffs_buf = (q31_t) BSP_MACL_Q31_MAX_VALUE; + } + else if (BSP_MACL_UNDERFLOW_VALUE == tmp_check) + { + *p_coeffs_buf = (q31_t) BSP_MACL_Q31_MIN_VALUE; + } + else + { + /* Enable fixed point mode. */ + R_MACL->MULC |= (uint8_t) R_MACL_MULC_MULFRAC_Msk; + + *p_coeffs_buf = (q31_t) R_MACL->MULR5.MULRH; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + } + + /* Increment the coefficient buffer */ + p_coeffs_buf++; + + /* Decrement loop counter */ + tap_cnt--; + } + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Processing is complete. + * Now copy the last numTaps - 1 samples to the start of the state buffer. + * This prepares the state buffer for the next function call. */ + + /* Points to the start of the pState buffer */ + p_state_curnt = p_lms_ins_q31->pState; + + /* copy data */ + /* Initialize tapCnt with number of samples */ + tap_cnt = (num_taps - 1U); + + while (tap_cnt > 0U) + { + *p_state_curnt++ = *p_state++; + + /* Decrement loop counter */ + tap_cnt--; + } +} + +/*******************************************************************************************************************//** + * Perform the Q31 FIR filter via MACL module. + * + * @param[in] p_fir_inst Points to an instance of the Q31 FIR filter structure + * @param[in] p_src Points to the block of input data + * @param[in] p_ref Points to the block of reference data + * @param[out] p_out Points to the block of output data + * @param[out] p_err Points to the block of error data + * @param[in] block_size Number of samples to process + **********************************************************************************************************************/ +void R_BSP_MaclFirQ31 (const arm_fir_instance_q31 * p_fir_inst, const q31_t * p_src, q31_t * p_dst, uint32_t block_size) +{ + q31_t * p_state; // Pointer to state buffer which will be used to hold calculated sample + q31_t * p_state_curnt; // Intermediate pointer used to write sample into state buffer + q31_t * p_state_tmp; // Intermediate pointer to write sample value into register MAC32S + const q31_t * p_coeff_tmp; // Intermediate pointer to write coefficient into register MULB0 + const q31_t * p_coeffs; // Local pointer for p_Coeff of instance p_fir_inst + uint16_t num_taps; // Numbers of coefficient + uint32_t tap_cnt; // Loop count + uint32_t blk_cnt; // Loop count + + p_state = p_fir_inst->pState; + p_coeffs = p_fir_inst->pCoeffs; + + num_taps = p_fir_inst->numTaps; + blk_cnt = block_size; + + /* p_fir_inst->pState points to state array which contains previous frame (num_taps - 1) samples */ + /* p_state_curnt points to the location where the new input data should be written */ + p_state_curnt = &(p_fir_inst->pState[(num_taps - 1U)]); + + /* Enable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + + while (blk_cnt > 0U) + { + /* Copy one sample at a time into state buffer */ + *p_state_curnt++ = *p_src++; + + /* Initialize state pointer */ + p_state_tmp = p_state; + + /* Initialize Coefficient pointer */ + p_coeff_tmp = p_coeffs; + + tap_cnt = num_taps; + + /* Clean result reg */ + R_MACL->MULRCLR = 0U; + + /* Perform the multiply-accumulates */ + do + { + /* y[n] = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */ + R_MACL->MAC32S = (uint32_t) (*p_state_tmp++); + R_MACL->MULB0 = (uint32_t) (*p_coeff_tmp++); + + r_macl_wait_operation(); + + tap_cnt--; + } while (tap_cnt > 0U); + + /* Store result into destination buffer. */ + *p_dst++ = (q31_t) R_MACL->MULR0.MULRH; + + /* Advance state pointer by 1 for the next sample */ + p_state++; + + /* Decrement loop counter */ + blk_cnt--; + } + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + + /* Processing is complete. Now copy the last num_taps - 1 samples to the start of the state buffer. This prepares + * the state buffer for the next function call. */ + + /* Points to the start of the state buffer */ + p_state_curnt = p_fir_inst->pState; + + /* Initialize tapCnt with number of taps */ + tap_cnt = (num_taps - 1U); + + /* Copy remaining data */ + while (tap_cnt > 0U) + { + *p_state_curnt++ = *p_state++; + + /* Decrement loop counter */ + tap_cnt--; + } +} + +/*******************************************************************************************************************//** + * Waiting for MACL module finish 5 cycles of processing. + * + **********************************************************************************************************************/ +static inline void r_macl_wait_operation () +{ + /* Wait for 5 cycles */ + __asm volatile ( + "nop \n" + "nop \n" + "nop \n" + "nop \n" + "nop \n" + ); +} + +/*******************************************************************************************************************//** + * Multiplication operation of MACL module. + * + * @param[in] p_src_a Pointer to multiplied number. + * @param[in] p_src_b Pointer to multiplicand number. + * @param[out] p_dst Pointer to buffer which will hold the calculation result. + * @param[in] block_size Numbers of elements to be calculated. + **********************************************************************************************************************/ +static void r_macl_mul_q31 (const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint32_t block_size) +{ + const q31_t * p_src_a_local; + const q31_t * p_src_b_local; + q31_t * p_dst_local; + uint32_t block_size_cnt; + + block_size_cnt = block_size; + + p_src_a_local = p_src_a; + p_src_b_local = p_src_b; + p_dst_local = p_dst; + + /* Clean result register before perform the calculation */ + R_MACL->MULRCLR = 0U; + + while (block_size_cnt > 0U) + { + if ((*p_src_a_local == (q31_t) BSP_MACL_Q31_MIN_VALUE) && (*p_src_b_local == (q31_t) BSP_MACL_Q31_MIN_VALUE)) + { + /* Overflow case */ + *p_dst_local = (q31_t) BSP_MACL_Q31_MAX_VALUE; + } + else + { + /* Write value to perform the multiply operation */ + R_MACL->MUL32S = (uint32_t) (*p_src_a_local); + R_MACL->MULB0 = (uint32_t) (*p_src_b_local); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + + *p_dst_local = (q31_t) R_MACL->MULR0.MULRH; + } + + block_size_cnt--; + p_src_a_local++; + p_src_b_local++; + p_dst_local++; + } +} + +/*******************************************************************************************************************//** + * Perform scaling a vector by multiplying scalar via MACL module. + * + * @param[in] p_src Pointer which point to a vector. + * @param[in] scale_fract Pointer to the scalar number. + * @param[in] shift Number of bits to shift the result by + * @param[out] p_dst Pointer to buffer which will hold the calculation result. + * @param[in] block_size Numbers of elements to be calculated. + **********************************************************************************************************************/ +static void r_macl_scale_q31 (const q31_t * p_src, q31_t scale_fract, int8_t shift, q31_t * p_dst, uint32_t block_size) +{ + const q31_t * p_src_local; + q31_t * p_dst_local; + q31_t out; + uint32_t block_size_cnt; + bool shift_signed; + int32_t scale_shift; /* Shift to apply after scaling */ + + volatile uint32_t * p_result = &(R_MACL->MULR0.MULRH); + + block_size_cnt = block_size; + shift_signed = (bool) (shift & BSP_MACL_SHIFT_SIGN); + scale_shift = shift + 1; + + p_src_local = p_src; + p_dst_local = p_dst; + + /* Clean result register before perform the calculation */ + R_MACL->MULRCLR = 0U; + + /* Write data to register MUL32S. */ + R_MACL->MUL32S = (uint32_t) scale_fract; + + while (block_size_cnt > 0U) + { + /* Write data to register B */ + R_MACL->MULB0 = (uint32_t) (*p_src_local); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + + if (shift_signed == BSP_MACL_POSITIVE_NUM) + { + /* Read data to register MULRLn.MULRH */ + out = (q31_t) (*p_result) << scale_shift; + + if (*p_result != (uint32_t) (out >> scale_shift)) + { + /* Overflow/underflow check for shifting result */ + if (BSP_MACL_POSITIVE_NUM == (*p_result >> BSP_MACL_SHIFT_31_BIT)) + { + out = (q31_t) (BSP_MACL_Q31_MAX_VALUE); + } + else + { + out = (q31_t) (BSP_MACL_Q31_MIN_VALUE); + } + } + + /* Write out the result */ + *p_dst_local = out; + } + else + { + /* Read data to register MULRLn.MULRH. */ + out = (q31_t) (*p_result) >> -scale_shift; + + /* Write out the result */ + *p_dst_local = out; + } + + block_size_cnt--; + p_src_local++; + p_dst_local++; + } +} + +/*******************************************************************************************************************//** + * Perform Q31 matrix multiplication via MACL module. + * + * @param[in] p_src_a Points to the first input matrix structure A. + * @param[in] p_src_b Points to the second input matrix structure B. + * @param[out] p_dst Points to the buffer which hold output matrix structure. + **********************************************************************************************************************/ +static void r_macl_mat_mul_q31 (const arm_matrix_instance_q31 * p_src_a, + const arm_matrix_instance_q31 * p_src_b, + arm_matrix_instance_q31 * p_dst) +{ + const q31_t * p_in_a = p_src_a->pData; // Input data matrix pointer A + const q31_t * p_in_b; // Input data matrix pointer B + q31_t * p_out = p_dst->pData; // Output data matrix pointer + uint16_t num_rows_a = p_src_a->numRows; // Number of rows of input matrix A + uint16_t num_cols_b = p_src_b->numCols; // Number of columns of input matrix B + uint16_t num_cols_a = p_src_a->numCols; // Number of columns of input matrix A + uint16_t col; // Column loop counters + uint16_t row = num_rows_a; // Row loop counters + + /* Row loop */ + do + { + /* For every row wise process, column loop counter is to be initiated */ + col = num_cols_b; + + /* For every row wise process, p_in_b pointer is set to starting address of p_src_b data */ + p_in_b = p_src_b->pData; + + /* Column loop */ + do + { + /* Perform the multiply-accumulates a row in p_src_a with a column in p_src_b */ + r_macl_mat_mul_acc_q31(p_in_a, p_in_b, p_out, num_cols_a, num_cols_b); + + p_in_b++; + p_out++; + col--; + } while (col > 0U); + + row--; + p_in_a += num_cols_a; + } while (row > 0U); +} + +/*******************************************************************************************************************//** + * Perform the multiply-accumulates a row with a column. + * + * @param[in] p_in_a Points to the input data matrix pointer A. + * @param[in] p_in_b Points to the input data matrix pointer B. + * @param[out] p_out Points to the output data matrix pointer. + * @param[in] num_cols_a Number of columns of input matrix A. + * @param[in] num_cols_b Number of columns of input matrix B. + **********************************************************************************************************************/ +static void r_macl_mat_mul_acc_q31 (const q31_t * p_in_a, + const q31_t * p_in_b, + q31_t * p_out, + uint16_t num_cols_a, + uint16_t num_cols_b) +{ + uint16_t cnt = num_cols_a; + const q31_t * p_tmp_a = p_in_a; + const q31_t * p_tmp_b = p_in_b; + q31_t out_h; + q31_t out_l; + + R_MACL->MULRCLR = 0U; + + while (cnt > 0U) + { + R_MACL->MAC32S = (uint32_t) (*p_tmp_a); + R_MACL->MULB0 = (uint32_t) (*p_tmp_b); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + cnt--; + p_tmp_a++; + p_tmp_b += num_cols_b; + } + + /* Read data to register MULR0. */ + out_h = (q31_t) (R_MACL->MULR0.MULRH << BSP_MACL_SHIFT_1_BIT); + out_l = (q31_t) (R_MACL->MULR0.MULRL >> BSP_MACL_SHIFT_31_BIT); + *p_out = (out_h | out_l); +} + +/*******************************************************************************************************************//** + * Perform scaling a matrix by multiplying scalar via MACL module. + * + * @param[in] p_src Points to the input matrix. + * @param[in] scale_fract Fractional portion of the scale factor. + * @param[in] shift Number of bits to shift the result by + * @param[out] p_dst Points to the output matrix structure which will hold the calculation result. + **********************************************************************************************************************/ +static void r_macl_mat_scale_q31 (const arm_matrix_instance_q31 * p_src, + q31_t scale_fract, + int32_t shift, + arm_matrix_instance_q31 * p_dst) +{ + q31_t * p_in = p_src->pData; // Input data matrix pointer + q31_t * p_out = p_dst->pData; // Output data matrix pointer + uint32_t block_size; // Loop counter + q31_t out; // Temporary output data + int32_t scale_shift; // Shift to apply after scaling + volatile uint32_t * p_result = &(R_MACL->MULR0.MULRH); + + scale_shift = shift + 1; + + /* Total number of samples in input matrix */ + block_size = (uint32_t) (p_src->numRows * p_src->numCols); + + /* Clean result register before perform the calculation */ + R_MACL->MULRCLR = 0U; + + /* Write data to register MUL32S. */ + R_MACL->MUL32S = (uint32_t) scale_fract; + + while (block_size > 0U) + { + /* Write data to register B. */ + R_MACL->MULB0 = (uint32_t) (*p_in); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + + /* Read data to register MULRL.MULRH. */ + out = (q31_t) (*p_result) << scale_shift; + + if (*p_result != (uint32_t) (out >> scale_shift)) + { + /* Overflow/underflow check for shifting result */ + if (BSP_MACL_POSITIVE_NUM == (*p_result >> BSP_MACL_SHIFT_31_BIT)) + { + out = (q31_t) (BSP_MACL_Q31_MAX_VALUE); + } + else + { + out = (q31_t) (BSP_MACL_Q31_MIN_VALUE); + } + } + + /* Write out the result. */ + *p_out = out; + + block_size--; + p_in++; + p_out++; + } +} + +/*******************************************************************************************************************//** + * Perform multiply-accumulate via MACL for convolution operation. + * + * @param[in] check_value Value which got from result register MULRH. + * @param[out] p_dst Pointer to destination buffer. + **********************************************************************************************************************/ +void r_macl_conv_q31 (const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint8_t block_size) +{ + uint8_t cnt; + const q31_t * p_src_a_local; + const q31_t * p_src_b_local; + q31_t * p_dst_local; + + p_src_a_local = p_src_a; + p_src_b_local = p_src_b; + p_dst_local = p_dst; + + cnt = block_size; + + /* Clean register result */ + R_MACL->MULRCLR = 0U; + + /* Perform multiply-accumulate */ + while (cnt > 0) + { + R_MACL->MAC32S = (uint32_t) (*p_src_a_local); + R_MACL->MULB0 = (uint32_t) (*p_src_b_local); + + /* Wait for the calculation. */ + r_macl_wait_operation(); + + p_src_a_local++; + p_src_b_local--; + cnt--; + } + + /* Store result into desire buffer */ + *p_dst_local = (q31_t) R_MACL->MULR0.MULRH; +} + +/*******************************************************************************************************************//** + * Function to Calculates 1/in (reciprocal) value of Q31 Data type. + * + * @param[in] in Input data. + * @param[out] dst Point to output data. + * @param[in] p_recip_table Points to the reciprocal initial value table. + **********************************************************************************************************************/ + +uint32_t r_macl_recip_q31 (q31_t in, q31_t * dst, const q31_t * p_recip_table) +{ + q31_t out; + uint32_t temp_val; + uint32_t index; + uint32_t sign_bits; + uint64_t reg_val; + volatile uint64_t * p_result_r3 = (uint64_t *) &(R_MACL->MULR3.MULRL); + + /* Enable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_ENABLE; + if (in > 0) + { + sign_bits = ((uint32_t) (__CLZ((uint32_t) in) - 1)); + } + else + { + sign_bits = ((uint32_t) (__CLZ((uint32_t) (-in)) - 1)); + } + + /* Convert input sample to 1.31 format */ + in = (in << sign_bits); + + /* calculation of index for initial approximated Val */ + index = (uint32_t) (in >> 24); + index = (index & INDEX_MASK); + + /* 1.31 with exp 1 */ + out = p_recip_table[index]; + + /* calculation of reciprocal value */ + /* running approximation for two iterations */ + for (uint32_t i = 0U; i < 2U; i++) + { + R_MACL->MUL32S = (uint32_t) in; + R_MACL->MULB3 = (uint32_t) out; + r_macl_wait_operation(); + temp_val = R_MACL->MULR3.MULRH; + + /* Disable fixed point mode. */ + R_MACL->MULC = BSP_MACL_FIXED_POINT_MODE_DISABLE; + temp_val = BSP_MACL_Q31_MAX_VALUE - temp_val; + + /* 1.31 with exp 1 */ + /* out = (q31_t) (((q63_t) out * temp_val) >> 30); */ + R_MACL->MUL32S = (uint32_t) out; + R_MACL->MULB3 = temp_val; + r_macl_wait_operation(); + reg_val = *p_result_r3; + out = clip_q63_to_q31(((q63_t) reg_val) >> 30); + } + + /* write output */ + *dst = out; + + /* return num of sign_bits of out = 1/in value */ + return sign_bits + 1U; +} + + #endif +#endif + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MACL) + **********************************************************************************************************************/ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.h new file mode 100644 index 00000000000..416228d5c7c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_macl.h @@ -0,0 +1,164 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef RENESAS_MACL +#define RENESAS_MACL + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +#include +#include "bsp_api.h" + +#if BSP_FEATURE_MACL_SUPPORTED + #if __has_include("arm_math_types.h") + +/* Ignore certain math warnings in ARM CMSIS DSP headers */ + #if defined(__ARMCC_VERSION) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wsign-conversion" + #pragma clang diagnostic ignored "-Wimplicit-int-conversion" + #pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" + #elif defined(__GNUC__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wconversion" + #pragma GCC diagnostic ignored "-Wsign-conversion" + #pragma GCC diagnostic ignored "-Wfloat-conversion" + #endif + #if defined(__IAR_SYSTEMS_ICC__) + #pragma diag_suppress=Pe223 + #endif + + #include "arm_math_types.h" + #include "dsp/basic_math_functions.h" + #include "dsp/matrix_functions.h" + #include "dsp/filtering_functions.h" + #include "dsp/support_functions.h" + #include "dsp/fast_math_functions.h" + + #if defined(__IAR_SYSTEMS_ICC__) + #pragma diag_default=Pe223 + #endif + #if defined(__ARMCC_VERSION) + #pragma clang diagnostic pop + #elif defined(__GNUC__) + #pragma GCC diagnostic pop + #endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MACL + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Common macro used by MACL */ + #define BSP_MACL_FIXED_POINT_MODE_DISABLE (0x0) + #define BSP_MACL_FIXED_POINT_MODE_ENABLE (0x10) + + #define BSP_MACL_SHIFT_SIGN (0x80) + #define BSP_MACL_SHIFT_1_BIT (1U) + #define BSP_MACL_SHIFT_30_BIT (30U) + #define BSP_MACL_SHIFT_31_BIT (31U) + #define BSP_MACL_SHIFT_32_BIT (32U) + + #define BSP_MACL_32_BIT (32U) + + #define BSP_MACL_Q31_MAX_VALUE (0x7FFFFFFF) // Max value is 0.999999999534 + #define BSP_MACL_Q31_MIN_VALUE (0x80000000) // Min value is -1.0 + + #define BSP_MACL_OVERFLOW_VALUE (0x1) // 0b01 + #define BSP_MACL_UNDERFLOW_VALUE (0x2) // 0b10 + + #define BSP_MACL_CLEAR_MULR_REG (0x0U) + + #define BSP_MACL_POSITIVE_NUM (0U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +void R_BSP_MaclMulQ31(const q31_t * p_src_a, const q31_t * p_src_b, q31_t * p_dst, uint32_t block_size); +void R_BSP_MaclScaleQ31(const q31_t * p_src, q31_t scale_fract, int8_t shift, q31_t * p_dst, uint32_t block_size); +void R_BSP_MaclMatMulQ31(const arm_matrix_instance_q31 * p_src_a, + const arm_matrix_instance_q31 * p_src_b, + arm_matrix_instance_q31 * p_dst); +void R_BSP_MaclMatVecMulQ31(const arm_matrix_instance_q31 * p_src_mat, const q31_t * p_vec, q31_t * p_dst); +void R_BSP_MaclMatScaleQ31(const arm_matrix_instance_q31 * p_src, + q31_t scale_fract, + int32_t shift, + arm_matrix_instance_q31 * p_dst); +void R_BSP_MaclBiquadCsdDf1Q31(const arm_biquad_casd_df1_inst_q31 * p_biquad_csd_df1_inst, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size); +void R_BSP_MaclConvQ31(const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst); +arm_status R_BSP_MaclConvPartialQ31(const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst, + uint32_t first_idx, + uint32_t num_points); + +void R_BSP_MaclFirDecimateQ31(const arm_fir_decimate_instance_q31 * p_fir_decimate_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size); + +void R_BSP_MaclFirInterpolateQ31(const arm_fir_interpolate_instance_q31 * p_fir_interpolate_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + uint32_t block_size); + +void R_BSP_MaclCorrelateQ31(const q31_t * p_src_a, + uint32_t src_a_len, + const q31_t * p_src_b, + uint32_t src_b_len, + q31_t * p_dst); + +void R_BSP_MaclFirSparseQ31(arm_fir_sparse_instance_q31 * p_fir_sparse_ins_q31, + const q31_t * p_src, + q31_t * p_dst, + q31_t * p_scratch_in, + uint32_t block_size); + +void R_BSP_MaclLmsNormQ31(arm_lms_norm_instance_q31 * p_lms_norm_ins_q31, + const q31_t * p_src, + q31_t * p_ref, + q31_t * p_out, + q31_t * p_err, + uint32_t block_size); + +void R_BSP_MaclLmsQ31(const arm_lms_instance_q31 * p_lms_ins_q31, + const q31_t * p_src, + q31_t * p_ref, + q31_t * p_out, + q31_t * p_err, + uint32_t block_size); + +void R_BSP_MaclFirQ31(const arm_fir_instance_q31 * p_fir_inst, const q31_t * p_src, q31_t * p_dst, uint32_t block_size); + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MACL) + **********************************************************************************************************************/ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + + #endif +#endif +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h new file mode 100644 index 00000000000..9a373c0d97d --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_MCU_API_H +#define BSP_MCU_API_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP Linker Includes. */ +#include "bsp_linker_info.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +typedef struct st_bsp_event_info +{ + IRQn_Type irq; + elc_event_t event; +} bsp_event_info_t; + +typedef enum e_bsp_clocks_octaclk_div +{ + BSP_CLOCKS_OCTACLK_DIV_1 = 0, ///< Divide OCTA source clock by 1 + BSP_CLOCKS_OCTACLK_DIV_2, ///< Divide OCTA source clock by 2 + BSP_CLOCKS_OCTACLK_DIV_4, ///< Divide OCTA source clock by 4 + BSP_CLOCKS_OCTACLK_DIV_6, ///< Divide OCTA source clock by 6 + BSP_CLOCKS_OCTACLK_DIV_8, ///< Divide OCTA source clock by 8 + BSP_CLOCKS_OCTACLK_DIV_3, ///< Divide OCTA source clock by 3 + BSP_CLOCKS_OCTACLK_DIV_5 ///< Divide OCTA source clock by 5 +} bsp_clocks_octaclk_div_t; + +typedef enum e_bsp_clocks_source +{ + BSP_CLOCKS_CLOCK_HOCO = 0, ///< The high speed on chip oscillator. + BSP_CLOCKS_CLOCK_MOCO, ///< The middle speed on chip oscillator. + BSP_CLOCKS_CLOCK_LOCO, ///< The low speed on chip oscillator. + BSP_CLOCKS_CLOCK_MAIN_OSC, ///< The main oscillator. + BSP_CLOCKS_CLOCK_SUBCLOCK, ///< The subclock oscillator. + BSP_CLOCKS_CLOCK_PLL, ///< The PLL oscillator. + BSP_CLOCKS_CLOCK_PLL2, ///< The PLL2 oscillator. +} bsp_clocks_source_t; + +typedef struct st_bsp_octaclk_settings +{ + bsp_clocks_source_t source_clock; ///< OCTACLK source clock + bsp_clocks_octaclk_div_t divider; ///< OCTACLK divider +} bsp_octaclk_settings_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +void R_BSP_RegisterProtectEnable(bsp_reg_protect_t regs_to_protect); +void R_BSP_RegisterProtectDisable(bsp_reg_protect_t regs_to_unprotect); +fsp_err_t R_BSP_GroupIrqWrite(bsp_grp_irq_t irq, void (* p_callback)(bsp_grp_irq_t irq)); +void R_BSP_OctaclkUpdate(bsp_octaclk_settings_t * p_octaclk_setting); +void R_BSP_SoftwareDelay(uint32_t delay, bsp_delay_units_t units); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mmf.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mmf.h new file mode 100644 index 00000000000..9b7f1b143fd --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_mmf.h @@ -0,0 +1,141 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_MMF_H +#define BSP_MMF_H + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define MEMORY_MIRROR_REG_KEY (0xDBU) +#define MEMORY_MIRROR_BOUNDARY (0x80U) // 128 bytes +#define MEMORY_MIRROR_ADDR_MASK (0x007FFFFFU) + +/* The highest address which MMF able to support is the last address of code flash area which aligns with 128. */ +#define MEMORY_MIRROR_MAX_ADDR (BSP_FEATURE_FLASH_CODE_FLASH_START + BSP_ROM_SIZE_BYTES - MEMORY_MIRROR_BOUNDARY) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Enum for state of Memory Mirror Function. */ +typedef enum e_mmf_state +{ + MEMORY_MIRROR_DISABLED = 0, + MEMORY_MIRROR_ENABLED = 1, +} mmf_state_t; + +/** Status instance of Memory Mirror Function. */ +typedef struct st_mmf_status +{ + mmf_state_t mmf_state; // Current state of Memory Mirror Region. + uint32_t mmf_cur_addr; // Current address in register MMSFR. +} mmf_status_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Get the current status of Memory Mirror. + * + * @param[out] p_mmf_status Pointer to instance which used for storing the state of MMF after invoked this function. + * + * @retval FSP_SUCCESS MMF status retrieved successfully. + * @retval FSP_ERR_UNSUPPORTED MCU does not support MMF. + * @retval FSP_ERR_ASSERTION NULL pointer passed as argument. + * + * This function retrieves the current state of the MMF and the mirrored address into a user provided structure. + **********************************************************************************************************************/ +__STATIC_INLINE fsp_err_t R_BSP_MemoryMirrorStatusGet (mmf_status_t * p_mmf_status) +{ +#if BSP_FEATURE_BSP_MMF_SUPPORTED + #if BSP_CFG_PARAM_CHECKING_ENABLE + + /* Ensure that variable for storing the status of MMF was provided. */ + if (NULL == p_mmf_status) + { + return FSP_ERR_ASSERTION; + } + #endif + + p_mmf_status->mmf_state = (mmf_state_t) R_MMF->MMEN_b.EN; + p_mmf_status->mmf_cur_addr = R_MMF->MMSFR & MEMORY_MIRROR_ADDR_MASK; + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(p_mmf_status); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Set address for MMF region. + * + * @param[in] addr Address of memory region to be mirrored into MMF region. + * + * @retval FSP_SUCCESS Address is set successfully. + * @retval FSP_ERR_UNSUPPORTED MCU does not support MMF. + * @retval FSP_ERR_INVALID_ADDRESS Requested address is out of supported range. + * + * This function sets the memory address to be mirrored by MMF. + **********************************************************************************************************************/ +__STATIC_INLINE fsp_err_t R_BSP_MemoryMirrorAddrSet (const uint32_t addr) +{ +#if BSP_FEATURE_BSP_MMF_SUPPORTED + #if BSP_CFG_PARAM_CHECKING_ENABLE + + /* Ensure that requested address is in supported range and must align with 128 */ + if ((MEMORY_MIRROR_MAX_ADDR < addr) || (0 != addr % MEMORY_MIRROR_BOUNDARY)) + { + return FSP_ERR_INVALID_ADDRESS; + } + #endif + + /* If MMF is enabled, disable MMF before updating the address register. + * For disabling MMF, write 0xDB00 to register MMEN. */ + if (1U == R_MMF->MMEN_b.EN) + { + R_MMF->MMEN = ((uint32_t) (MEMORY_MIRROR_REG_KEY << R_MMF_MMSFR_KEY_Pos) | 0U); + } + + R_MMF->MMSFR = ((uint32_t) (MEMORY_MIRROR_REG_KEY << R_MMF_MMSFR_KEY_Pos) | addr); + + /* Enable MMF by writing 0xDB01 to register MMEN. After this point target memory address will be reflected into + * MMF region. */ + R_MMF->MMEN = ((uint32_t) (MEMORY_MIRROR_REG_KEY << R_MMF_MMSFR_KEY_Pos) | 1U); + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(addr); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h new file mode 100644 index 00000000000..a71bc9b544e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h @@ -0,0 +1,382 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_MODULE_H +#define BSP_MODULE_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +#if BSP_FEATURE_TZ_HAS_TRUSTZONE + +/* MSTPCRA is located in R_MSTP for Star devices. */ + #define R_BSP_MSTPCRA (R_MSTP->MSTPCRA) +#else + +/* MSTPCRA is located in R_SYSTEM for W1D and Peaks devices. */ + #define R_BSP_MSTPCRA (R_SYSTEM->MSTPCRA) +#endif + +/*******************************************************************************************************************//** + * Cancels the module stop state. + * + * @param ip fsp_ip_t enum value for the module to be stopped + * @param channel The channel. Use channel 0 for modules without channels. + **********************************************************************************************************************/ +#if BSP_CFG_MSTP_CHANGE_DELAY_ENABLE + #define R_BSP_MODULE_START(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) &= ~BSP_MSTP_BIT_ ## ip(channel); \ + FSP_REGISTER_READ(BSP_MSTP_REG_ ## ip(channel)); \ + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, \ + BSP_DELAY_UNITS_MICROSECONDS); \ + FSP_CRITICAL_SECTION_EXIT;} +#else + #define R_BSP_MODULE_START(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) &= \ + (BSP_MSTP_REG_TYPE_ ## ip(channel)) ~BSP_MSTP_BIT_ ## ip(channel); \ + FSP_REGISTER_READ(BSP_MSTP_REG_ ## ip(channel)); \ + FSP_CRITICAL_SECTION_EXIT;} +#endif + +/*******************************************************************************************************************//** + * Enables the module stop state. + * + * @param ip fsp_ip_t enum value for the module to be stopped + * @param channel The channel. Use channel 0 for modules without channels. + **********************************************************************************************************************/ +#if BSP_CFG_MSTP_CHANGE_DELAY_ENABLE + #define R_BSP_MODULE_STOP(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) |= BSP_MSTP_BIT_ ## ip(channel); \ + FSP_REGISTER_READ(BSP_MSTP_REG_ ## ip(channel)); \ + R_BSP_SoftwareDelay(BSP_CFG_CLOCK_SETTLING_DELAY_US, \ + BSP_DELAY_UNITS_MICROSECONDS); \ + FSP_CRITICAL_SECTION_EXIT;} +#else + #define R_BSP_MODULE_STOP(ip, channel) {FSP_CRITICAL_SECTION_DEFINE; \ + FSP_CRITICAL_SECTION_ENTER; \ + BSP_MSTP_REG_ ## ip(channel) |= BSP_MSTP_BIT_ ## ip(channel); \ + FSP_REGISTER_READ(BSP_MSTP_REG_ ## ip(channel)); \ + FSP_CRITICAL_SECTION_EXIT;} +#endif + +/** @} (end addtogroup BSP_MCU) */ + +#if 0U == BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRD + #if !BSP_FEATURE_BSP_MSTP_GPT_MSTPD5 + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) (1U << 6U) + #else + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) ((BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH >= \ + channel) ? (1U << 5U) : (1U << 6U)); + #endif + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_GPT_PDG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_GPT_PDG(channel) (1U << (31U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT_PDG(channel) uint32_t + + #define BSP_MSTP_REG_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + + #if BSP_MCU_GROUP_RA2A2 + +/* RA2A2 has a combination of AGT and AGTW. + * Ch 0-1: MSTPD[ 3: 2] (AGTW0, AGTW1) + * Ch 2-3: MSTPD[19:18] (AGT0, AGT1) + * Ch 4-5: MSTPD[ 1: 0] (AGT2, AGT3) + * Ch 6-9: MSTPD[10: 7] (AGT4, AGT5, AGT6, AGT7) + */ + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << \ + ((channel < BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT) \ + ? (3U - channel) \ + : ((channel < BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT + 2U) \ + ? (19U - channel + BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT) \ + : ((channel < BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT + 4U) \ + ? (1U - channel + BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT + \ + 2U) \ + : (10U - channel + \ + BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT + \ + 4U))))); + + #else + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (3U - channel)); + #endif + #define BSP_MSTP_REG_TYPE_FSP_IP_AGT(channel) uint32_t + + #define BSP_MSTP_REG_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #if BSP_FEATURE_BSP_MSTP_POEG_MSTPD13 + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); + #else + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U)); + #endif + #define BSP_MSTP_REG_TYPE_FSP_IP_POEG(channel) uint32_t +#else + #if (2U == BSP_FEATURE_ELC_VERSION) + #if BSP_MCU_GROUP_RA6T2 + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) (1U << 31); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_GPT_PDG(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT_PDG(channel) (1U << (31U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT_PDG(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (3U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_AGT(channel) uint32_t + #elif BSP_MCU_GROUP_RA8_GEN2 + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) (1U << \ + (31 - ((channel >= 4U && channel <= 9U) ? 4U : channel))) // GPT Channels 4-9 share stop bits on this MCU + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_GPT_PDG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_GPT_PDG(channel) (1U << (6U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT_PDG(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (5U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_AGT(channel) uint32_t + #else + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) (1U << (31 - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_GPT_PDG(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT_PDG(channel) (1U << (31U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT_PDG(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_AGT(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) (1U << (5U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_AGT(channel) uint32_t + #endif + #define BSP_MSTP_REG_FSP_IP_KEY(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_KEY(channel) (1U << 4U); + #define BSP_MSTP_REG_TYPE_FSP_IP_KEY(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_POEG(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_ULPT(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_ULPT(channel) (1U << (9U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_ULPT(channel) uint32_t + #else + #define BSP_MSTP_REG_FSP_IP_GPT(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT(channel) (1U << (31 - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_GPT_PDG(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_GPT_PDG(channel) (1U << (31U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_GPT_PDG(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_AGT(channel) *((3U >= channel) ? &R_MSTP->MSTPCRD : &R_MSTP->MSTPCRE) + #define BSP_MSTP_BIT_FSP_IP_AGT(channel) ((3U >= \ + channel) ? (1U << (3U - channel)) : (1U << \ + (15U - \ + (channel - 4U)))); + #define BSP_MSTP_REG_TYPE_FSP_IP_AGT(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_KEY(channel) R_MSTP->MSTPCRE + #define BSP_MSTP_BIT_FSP_IP_KEY(channel) (1U << (4U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_KEY(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_POEG(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_POEG(channel) (1U << (14U - channel)); + #define BSP_MSTP_REG_TYPE_FSP_IP_POEG(channel) uint32_t + #endif +#endif + +#define BSP_MSTP_REG_FSP_IP_NPU(channel) R_BSP_MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_NPU(channel) (1U << (16U)); + +#define BSP_MSTP_REG_FSP_IP_DMAC(channel) R_BSP_MSTPCRA +#if BSP_MCU_GROUP_RA8_GEN2 && (1U == BSP_CFG_CPU_CORE) + #define BSP_MSTP_BIT_FSP_IP_DMAC(channel) (1U << (23U)); +#else + #define BSP_MSTP_BIT_FSP_IP_DMAC(channel) (1U << (22U)); +#endif + +#define BSP_MSTP_REG_TYPE_FSP_IP_DMAC(channel) uint32_t + +#if BSP_FEATURE_CGC_REGISTER_SET_B + #define BSP_MSTP_REG_FSP_IP_DTC(channel) R_BSP_MSTPCRA + #define BSP_MSTP_BIT_FSP_IP_DTC(channel) (1U << (6U)) + #define BSP_MSTP_REG_TYPE_FSP_IP_DTC(channel) uint16_t +#else + #define BSP_MSTP_REG_FSP_IP_DTC(channel) R_BSP_MSTPCRA + #define BSP_MSTP_BIT_FSP_IP_DTC(channel) (1U << (22U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_DTC(channel) uint32_t +#endif +#define BSP_MSTP_REG_FSP_IP_CAN(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_CAN(channel) (1U << (2U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_CAN(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_CEC(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_CEC(channel) (1U << (3U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_CEC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_I3C(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_I3C(channel) (1U << (BSP_FEATURE_I3C_MSTP_OFFSET - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_I3C(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_IRDA(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_IRDA(channel) (1U << (5U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_IRDA(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_QSPI(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_QSPI(channel) (1U << (6U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_QSPI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SAU(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_SAU(channel) (1U << (6U + channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SAU(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_IIC(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_IIC(channel) (1U << (9U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_IIC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_IICA(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_IICA(channel) (1U << (10U + channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_IICA(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_USBFS(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_USBFS(channel) (1U << (11U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_USBFS(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_USBHS(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_USBHS(channel) (1U << (12U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_USBHS(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_EPTPC(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_EPTPC(channel) (1U << (13U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_EPTPC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_USBCC(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_USBCC(channel) (1U << (14U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_USBCC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_ETHER(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_ETHER(channel) (1U << (15U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_ETHER(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_UARTA(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_UARTA(channel) (1U << BSP_FEATURE_UARTA_MSTP_OFFSET); +#define BSP_MSTP_REG_TYPE_FSP_IP_UARTA(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_OSPI(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_OSPI(channel) (1U << (16U + channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_OSPI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SPI(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_BIT_FSP_IP_SPI(channel) (1U << (19U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SPI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SCI(channel) R_MSTP->MSTPCRB +#define BSP_MSTP_REG_TYPE_FSP_IP_SCI(channel) uint32_t +#define BSP_MSTP_BIT_FSP_IP_SCI(channel) (1U << (31U - channel)); +#define BSP_MSTP_REG_FSP_IP_CAC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_REG_TYPE_FSP_IP_CAC(channel) uint32_t +#define BSP_MSTP_BIT_FSP_IP_CAC(channel) (1U << (0U - channel)); +#define BSP_MSTP_REG_FSP_IP_CRC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_REG_TYPE_FSP_IP_CRC(channel) uint32_t +#define BSP_MSTP_BIT_FSP_IP_CRC(channel) (1U << (1U - channel)); +#define BSP_MSTP_REG_FSP_IP_PDC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_PDC(channel) (1U << (2U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_PDC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_CTSU(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_CTSU(channel) (1U << (3U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_CTSU(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SLCDC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SLCDC(channel) (1U << (4U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SLCDC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_GLCDC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_GLCDC(channel) (1U << (4U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_GLCDC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_JPEG(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_JPEG(channel) (1U << (5U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_JPEG(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_DRW(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_DRW(channel) (1U << (6U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_DRW(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SSI(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SSI(channel) (1U << (8U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SSI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SRC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SRC(channel) (1U << (9U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SRC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_MIPI_DSI(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_MIPI_DSI(channel) (1U << (10U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_MIPI_DSI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SDHIMMC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SDHIMMC(channel) (1U << (12U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SDHIMMC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_DOC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_DOC(channel) (1U << (13U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_DOC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_ELC(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_ELC(channel) (1U << (14U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_ELC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_MACL(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_MACL(channel) (1U << (15U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_MACL(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_CEU(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_REG_TYPE_FSP_IP_CEU(channel) uint32_t +#define BSP_MSTP_BIT_FSP_IP_CEU(channel) (1U << (16U - channel)); +#define BSP_MSTP_REG_FSP_IP_MIPI_CSI(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_MIPI_CSI(channel) (1U << (17U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_MIPI_CSI(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_TFU(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_TFU(channel) (1U << (20U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_TFU(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_IIRFA(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_IIRFA(channel) (1U << (21U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_IIRFA(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_PDM(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_PDM(channel) (1U << (24U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_PDM(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_CANFD(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_CANFD(channel) (1U << (27U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_CANFD(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_TRNG(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_TRNG(channel) (1U << (28U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_TRNG(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SCE(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_SCE(channel) (1U << (31U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SCE(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_AES(channel) R_MSTP->MSTPCRC +#define BSP_MSTP_BIT_FSP_IP_AES(channel) (1U << (31U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_AES(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_TAU(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_TAU(channel) (1U << (0U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_TAU(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_TML(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_TML(channel) (1U << (4U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_TML(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_ADC(channel) R_MSTP->MSTPCRD +#if BSP_MCU_GROUP_RA8_GEN2 + #define BSP_MSTP_BIT_FSP_IP_ADC(channel) (1U << (21U - channel)); +#else + #define BSP_MSTP_BIT_FSP_IP_ADC(channel) (1U << (16U - channel)); +#endif +#define BSP_MSTP_REG_TYPE_FSP_IP_ADC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_SDADC(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_SDADC(channel) (1U << (17U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_SDADC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_DAC(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_DAC(channel) (1U << (20U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_DAC(channel) uint32_t +#if (BSP_PERIPHERAL_DAC8_PRESENT) + #define BSP_MSTP_REG_FSP_IP_DAC8(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_DAC8(channel) (1U << (19U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_DAC8(channel) uint32_t +#endif +#define BSP_MSTP_REG_FSP_IP_TSN(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_TSN(channel) (1U << (22U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_TSN(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_RTC(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_RTC(channel) (1U << (23U)); +#define BSP_MSTP_REG_TYPE_FSP_IP_RTC(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_ACMPHS(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_ACMPHS(channel) (1U << (28U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_ACMPHS(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_ACMPLP(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_ACMPLP(channel) (1U << 29U); +#define BSP_MSTP_REG_TYPE_FSP_IP_ACMPLP(channel) uint32_t +#define BSP_MSTP_REG_FSP_IP_OPAMP(channel) R_MSTP->MSTPCRD +#define BSP_MSTP_BIT_FSP_IP_OPAMP(channel) (1U << (31U - channel)); +#define BSP_MSTP_REG_TYPE_FSP_IP_OPAMP(channel) uint32_t +#if (1U == BSP_FEATURE_CGC_HAS_OSTDCSE) + #define BSP_MSTP_REG_FSP_IP_SOSTD(channel) R_BSP_MSTPCRA + #define BSP_MSTP_BIT_FSP_IP_SOSTD(channel) (1U << (16U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_SOSTD(channel) uint32_t + #define BSP_MSTP_REG_FSP_IP_MOSTD(channel) R_BSP_MSTPCRA + #define BSP_MSTP_BIT_FSP_IP_MOSTD(channel) (1U << (17U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_MOSTD(channel) uint32_t +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c new file mode 100644 index 00000000000..86291ffb4fb --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Key code for writing PRCR register. */ +#define BSP_PRV_PRCR_KEY (0xA500U) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/** Used for holding reference counters for protection bits. */ +volatile uint16_t g_protect_counters[4] BSP_SECTION_EARLY_INIT; + +/** Masks for setting or clearing the PRCR register. Use -1 for size because PWPR in MPC is used differently. */ +static const uint16_t g_prcr_masks[] = +{ + 0x0001U, /* PRC0. */ + 0x0002U, /* PRC1. */ + 0x0008U, /* PRC3. */ + 0x0010U, /* PRC4. */ +}; + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Enable register protection. Registers that are protected cannot be written to. Register protection is + * enabled by using the Protect Register (PRCR) and the MPC's Write-Protect Register (PWPR). + * + * @param[in] regs_to_protect Registers which have write protection enabled. + **********************************************************************************************************************/ +void R_BSP_RegisterProtectEnable (bsp_reg_protect_t regs_to_protect) +{ + /** Get/save the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /* Is it safe to disable write access? */ + if (0U != g_protect_counters[regs_to_protect]) + { + /* Decrement the protect counter */ + g_protect_counters[regs_to_protect]--; + } + + /* Is it safe to disable write access? */ + if (0U == g_protect_counters[regs_to_protect]) + { + /** Enable protection using PRCR register. + * + * When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ +#if BSP_TZ_NONSECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + R_SYSTEM->PRCR_NS = ((R_SYSTEM->PRCR_NS | BSP_PRV_PRCR_KEY) & (uint16_t) (~g_prcr_masks[regs_to_protect])); +#else + R_SYSTEM->PRCR = ((R_SYSTEM->PRCR | BSP_PRV_PRCR_KEY) & (uint16_t) (~g_prcr_masks[regs_to_protect])); +#endif + } + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +} + +/*******************************************************************************************************************//** + * Disable register protection. Registers that are protected cannot be written to. Register protection is + * disabled by using the Protect Register (PRCR) and the MPC's Write-Protect Register (PWPR). + * + * @param[in] regs_to_unprotect Registers which have write protection disabled. + **********************************************************************************************************************/ +void R_BSP_RegisterProtectDisable (bsp_reg_protect_t regs_to_unprotect) +{ + /** Get/save the current state of interrupts */ + FSP_CRITICAL_SECTION_DEFINE; + FSP_CRITICAL_SECTION_ENTER; + + /* If this is first entry then disable protection. */ + if (0U == g_protect_counters[regs_to_unprotect]) + { + /** Disable protection using PRCR register. + * + * When writing to the PRCR register the upper 8-bits must be the correct key. Set lower bits to 0 to + * disable writes. */ +#if BSP_TZ_NONSECURE_BUILD && BSP_FEATURE_TZ_VERSION == 2 + R_SYSTEM->PRCR_NS = ((R_SYSTEM->PRCR_NS | BSP_PRV_PRCR_KEY) | g_prcr_masks[regs_to_unprotect]); +#else + R_SYSTEM->PRCR = ((R_SYSTEM->PRCR | BSP_PRV_PRCR_KEY) | g_prcr_masks[regs_to_unprotect]); +#endif + } + + /** Increment the protect counter */ + g_protect_counters[regs_to_unprotect]++; + + /** Restore the interrupt state */ + FSP_CRITICAL_SECTION_EXIT; +} + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h new file mode 100644 index 00000000000..ca4b64c203c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_REGISTER_PROTECTION_H +#define BSP_REGISTER_PROTECTION_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/** The different types of registers that can be protected. */ +typedef enum e_bsp_reg_protect +{ + /** Enables writing to the registers related to the clock generation circuit. */ + BSP_REG_PROTECT_CGC = 0, + + /** Enables writing to the registers related to operating modes, low power consumption, and battery backup + * function. */ + BSP_REG_PROTECT_OM_LPC_BATT, + + /** Enables writing to the registers related to the LVD: LVCMPCR, LVDLVLR, LVD1CR0, LVD1CR1, LVD1SR, LVD2CR0, + * LVD2CR1, LVD2SR. */ + BSP_REG_PROTECT_LVD, + + /** Enables writing to the registers related to the security function. */ + BSP_REG_PROTECT_SAR, +} bsp_reg_protect_t; + +/** @} (end addtogroup BSP_MCU) */ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* Public functions defined in bsp.h */ +void bsp_register_protect_open(void); // Used internally by BSP + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c new file mode 100644 index 00000000000..b58e49fed21 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c @@ -0,0 +1,104 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#if defined(__GNUC__) && !defined(__ARMCC_VERSION) +#include "bsp_api.h" +#include +#include + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +#if defined(__llvm__) +void * sbrk(ptrdiff_t incr); + +#else +caddr_t _sbrk(int incr); + +#endif + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * FSP implementation of the standard library _sbrk() function. + * @param[in] inc The number of bytes being asked for by malloc(). + * + * @note This function overrides the _sbrk version that exists in the newlib library that is linked with. + * That version improperly relies on the SP as part of it's allocation strategy. This is bad in general and + * worse in an RTOS environment. This version insures that we allocate the byte pool requested by malloc() + * only from our allocated HEAP area. Also note that newlib is pre-built and forces the pagesize used by + * malloc() to be 4096. That requires that we have a HEAP of at least 4096 if we are to support malloc(). + * @retval Address of allocated area if successful, -1 otherwise. + **********************************************************************************************************************/ + +#if defined(__llvm__) +void * sbrk (ptrdiff_t incr) +#else +caddr_t _sbrk (int incr) +#endif +{ +#if (BSP_CFG_HEAP_BYTES > 0) + extern uint8_t g_heap[BSP_CFG_HEAP_BYTES]; + + uint32_t bytes = (uint32_t) incr; + static uint32_t current_block_offset = 0; + char * current_block_address; + + current_block_address = (char *) &g_heap[current_block_offset]; + + /* The returned address must be aligned to a word boundary to prevent hard faults on cores that do not support + * unaligned access. We assume the heap starts on a word boundary and make sure all allocations are a multiple + * of 4. */ + bytes = (bytes + 3U) & (~3U); + if (current_block_offset + bytes > BSP_CFG_HEAP_BYTES) + { + /** Heap has overflowed */ + errno = ENOMEM; + + return (caddr_t) -1; + } + + current_block_offset += bytes; + + return (caddr_t) current_block_address; +#else + FSP_PARAMETER_NOT_USED(incr); + + /** Heap not allocated!!! */ + errno = ENOMEM; + + return (caddr_t) -1; +#endif +} + +#endif + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MCU) + *********************************************************************************************************************/ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.c new file mode 100644 index 00000000000..22999c9274a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.c @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @defgroup BSP_SDRAM BSP SDRAM support + * @ingroup RENESAS_COMMON + * @brief Code that initializes the SDRAMC and SDR SDRAM device memory. + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Due to hardware limitations of the SDRAM peripheral, + * it is not expected any of these need to be changeable by end user. + * Only sequential, single access at a time is supported. */ +#define BSP_PRV_SDRAM_MR_WB_SINGLE_LOC_ACC (1U) /* MR.M9 : Single Location Access */ +#define BSP_PRV_SDRAM_MR_OP_MODE (0U) /* MR.M8:M7 : Standard Operation */ +#define BSP_PRV_SDRAM_MR_BT_SEQUENTIAL (0U) /* MR.M3 Burst Type : Sequential */ +#define BSP_PRV_SDRAM_MR_BURST_LENGTH (0U) /* MR.M2:M0 Burst Length: 0(1 burst) */ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +#if 0 != BSP_FEATURE_SDRAM_START_ADDRESS + +/*******************************************************************************************************************//** + * @brief Initializes SDRAM. + * @param init_memory If true, this function will execute the initialization of the external modules. + * Otherwise, it will only initialize the SDRAMC and leave the memory in self-refresh mode. + * + * This function initializes SDRAMC and SDR SDRAM device. + * + * @note This function must only be called once after reset. + **********************************************************************************************************************/ +void R_BSP_SdramInit (bool init_memory) +{ + /** Setting for SDRAM initialization sequence */ + while (R_BUS->SDRAM.SDSR) + { + /* According to h/w manual, need to confirm that all the status bits in SDSR are 0 before SDICR modification. */ + } + + /* Must only write to SDIR once after reset. */ + R_BUS->SDRAM.SDIR = ((BSP_CFG_SDRAM_INIT_ARFI - 3U) << R_BUS_SDRAM_SDIR_ARFI_Pos) | + (BSP_CFG_SDRAM_INIT_ARFC << R_BUS_SDRAM_SDIR_ARFC_Pos) | + ((BSP_CFG_SDRAM_INIT_PRC - 3U) << R_BUS_SDRAM_SDIR_PRC_Pos); + + R_BUS->SDRAM.SDCCR = (BSP_CFG_SDRAM_BUS_WIDTH << R_BUS_SDRAM_SDCCR_BSIZE_Pos); /* set SDRAM bus width */ + + if (init_memory) + { + /* Enable the SDCLK output. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_CGC); + R_SYSTEM->SDCKOCR = 1; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_CGC); + + /** If requested, start SDRAM initialization sequence. */ + R_BUS->SDRAM.SDICR = 1U; + while (R_BUS->SDRAM.SDSR_b.INIST) + { + /* Wait the end of initialization sequence. */ + } + } + + /** Setting for SDRAM controller */ + R_BUS->SDRAM.SDAMOD = BSP_CFG_SDRAM_ACCESS_MODE; /* enable continuous access */ + R_BUS->SDRAM.SDCMOD = BSP_CFG_SDRAM_ENDIAN_MODE; /* set endian mode for SDRAM address space */ + + while (R_BUS->SDRAM.SDSR) + { + /* According to h/w manual, need to confirm that all the status bits in SDSR are 0 before SDMOD modification. */ + } + + if (init_memory) + { + /** Using LMR command, program the mode register */ + R_BUS->SDRAM.SDMOD = (BSP_PRV_SDRAM_MR_WB_SINGLE_LOC_ACC << 9) | + (BSP_PRV_SDRAM_MR_OP_MODE << 7) | + (BSP_CFG_SDRAM_TCL << 4) | + (BSP_PRV_SDRAM_MR_BT_SEQUENTIAL << 3) | + (BSP_PRV_SDRAM_MR_BURST_LENGTH << 0); + + /** wait at least tMRD time */ + while (R_BUS->SDRAM.SDSR_b.MRSST) + { + /* Wait until Mode Register setting done. */ + } + } + + /** Set timing parameters for SDRAM. Must do in single write. */ + R_BUS->SDRAM.SDTR = ((BSP_CFG_SDRAM_TRAS - 1U) << R_BUS_SDRAM_SDTR_RAS_Pos) | + ((BSP_CFG_SDRAM_TRCD - 1U) << R_BUS_SDRAM_SDTR_RCD_Pos) | + ((BSP_CFG_SDRAM_TRP - 1U) << R_BUS_SDRAM_SDTR_RP_Pos) | + ((BSP_CFG_SDRAM_TWR - 1U) << R_BUS_SDRAM_SDTR_WR_Pos) | + (BSP_CFG_SDRAM_TCL << R_BUS_SDRAM_SDTR_CL_Pos); + + /** Set row address offset for target SDRAM */ + R_BUS->SDRAM.SDADR = BSP_CFG_SDRAM_MULTIPLEX_ADDR_SHIFT; + + /* Set Auto-Refresh timings. */ + R_BUS->SDRAM.SDRFCR = ((BSP_CFG_SDRAM_TREFW - 1U) << R_BUS_SDRAM_SDRFCR_REFW_Pos) | + ((BSP_CFG_SDRAM_TRFC - 1U) << R_BUS_SDRAM_SDRFCR_RFC_Pos); + + /** Start Auto-refresh */ + R_BUS->SDRAM.SDRFEN = 1U; + + if (init_memory) + { + /** Enable SDRAM access */ + R_BUS->SDRAM.SDCCR = R_BUS_SDRAM_SDCCR_EXENB_Msk | (BSP_CFG_SDRAM_BUS_WIDTH << R_BUS_SDRAM_SDCCR_BSIZE_Pos); + } + else + { + /* If not initializing memory modules, start in self-refresh mode. */ + while (R_BUS->SDRAM.SDCCR_b.EXENB || (0U != R_BUS->SDRAM.SDSR)) + { + /* Wait for access to be disabled and no status bits set. */ + } + + /* Enable the self-refresh mode. */ + R_BUS->SDRAM.SDSELF = 1U; + } +} + +/*******************************************************************************************************************//** + * @brief Changes SDRAM from Auto-refresh to Self-refresh + * + * This function allows Software Standby and Deep Software Standby modes to be entered without data loss. + * + * @note SDRAM cannot be accessed after calling this function. Use @ref R_BSP_SdramSelfRefreshDisable to resume normal + * SDRAM operation. + **********************************************************************************************************************/ +void R_BSP_SdramSelfRefreshEnable (void) +{ + R_BUS->SDRAM.SDCCR = (BSP_CFG_SDRAM_BUS_WIDTH << R_BUS_SDRAM_SDCCR_BSIZE_Pos); + while (R_BUS->SDRAM.SDCCR_b.EXENB || (0U != R_BUS->SDRAM.SDSR)) + { + /* Wait for access to be disabled and no status bits set. */ + } + + /* Enable the self-refresh mode. */ + R_BUS->SDRAM.SDSELF = 1U; +} + +/*******************************************************************************************************************//** + * @brief Changes SDRAM from Self-refresh to Auto-refresh + * + * This function changes back to Auto-refresh and allows normal SDRAM operation to resume. + * + **********************************************************************************************************************/ +void R_BSP_SdramSelfRefreshDisable (void) +{ + if (0 == R_SYSTEM->SDCKOCR) + { + /* Enable the SDCLK output. It may not already be enabled here if recovering from Deep Software Standby. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_CGC); + R_SYSTEM->SDCKOCR = 1; + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_CGC); + } + + while (0U != R_BUS->SDRAM.SDSR) + { + /* Wait for all status bits to be cleared. */ + } + + /* Disable the self-refresh mode. */ + R_BUS->SDRAM.SDSELF = 0U; + + /* Reenable SDRAM bus access. */ + R_BUS->SDRAM.SDCCR = R_BUS_SDRAM_SDCCR_EXENB_Msk | (BSP_CFG_SDRAM_BUS_WIDTH << R_BUS_SDRAM_SDCCR_BSIZE_Pos); +} + +#endif + +/** @} (end addtogroup BSP_SDRAM) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.h new file mode 100644 index 00000000000..5ba56a63830 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_sdram.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_SDRAM_H +#define BSP_SDRAM_H + +#if 0 != BSP_FEATURE_SDRAM_START_ADDRESS + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +void R_BSP_SdramInit(bool init_memory); +void R_BSP_SdramSelfRefreshEnable(void); +void R_BSP_SdramSelfRefreshDisable(void); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER +#endif +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.c new file mode 100644 index 00000000000..b6f14841cc3 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.c @@ -0,0 +1,546 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if BSP_FEATURE_TZ_HAS_TRUSTZONE + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + #define BSP_PRV_TZ_REG_KEY (0xA500U) + #define BSP_PRV_AIRCR_VECTKEY (0x05FA0000U) + #define RA_NOT_DEFINED (0) + +/* Branch T3 Instruction (IMM11=-2) */ + #define BSP_PRV_INFINITE_LOOP (0xE7FE) + + #define BSP_SAU_REGION_CODE_FLASH_NSC (0U) + #define BSP_SAU_REGION_1_NS (1U) + #define BSP_SAU_REGION_SRAM_NSC (2U) + #define BSP_SAU_REGION_2_NS (3U) + #define BSP_SAU_REGION_3_NS (4U) + +/* Non-secure regions defined by the IDAU. These regions must be defined as non-secure in the SAU. */ + #define BSP_PRV_SAU_NS_REGION_1_BASE_ADDRESS (0x10000000U) + #define BSP_PRV_SAU_NS_REGION_1_LIMIT_ADDRESS (0x1FFFFFFFU) + #define BSP_PRV_SAU_NS_REGION_2_BASE_ADDRESS (0x30000000U) + #define BSP_PRV_SAU_NS_REGION_2_LIMIT_ADDRESS (0x3FFFFFFFU) + #define BSP_PRV_SAU_NS_REGION_3_BASE_ADDRESS (0x50000000U) + #define BSP_PRV_SAU_NS_REGION_3_LIMIT_ADDRESS (0xDFFFFFFFU) + +/* Protect DMAST/DTCST from nonsecure write access. */ + #if (1U == BSP_CFG_CPU_CORE) + #define DMACX_REGISTER_SHIFT (16) + #define DTCX_REGISTER_SHIFT (16) + #else + #define DMACX_REGISTER_SHIFT (0) + #define DTCX_REGISTER_SHIFT (0) + #endif + +/* Macros to align to next memory region for TZ (mainly to "find" NS locations) */ + #if defined(BSP_PARTITION_FLASH_CPU0_S_START) && (0U == BSP_CFG_CPU_CORE) + +/* Use partition macros for primary core */ + #define FLASH_NSC_START ((uint32_t *) BSP_PARTITION_FLASH_CPU0_C_START) + #define FLASH_NSC_LIMIT ((uint32_t) BSP_PARTITION_FLASH_CPU0_C_START + BSP_PARTITION_FLASH_CPU0_C_SIZE - 1) + #define FLASH_NS_START ((uint32_t *) BSP_PARTITION_FLASH_CPU0_N_START) + #define RAM_NSC_START ((uint32_t *) BSP_PARTITION_RAM_CPU0_C_START) + #define RAM_NSC_LIMIT ((uint32_t) BSP_PARTITION_RAM_CPU0_C_START + BSP_PARTITION_RAM_CPU0_C_SIZE - 1) + #define RAM_NS_START ((uint32_t *) BSP_PARTITION_RAM_CPU0_N_START) + #define DATA_FLASH_NS_START ((uint32_t *) BSP_PARTITION_DATA_FLASH_CPU0_N_START) + + #elif defined(BSP_PARTITION_FLASH_CPU1_S_START) && (1U == BSP_CFG_CPU_CORE) + +/* Use partition macros for secondary core */ + #define FLASH_NSC_START ((uint32_t *) BSP_PARTITION_FLASH_CPU1_C_START) + #define FLASH_NSC_LIMIT ((uint32_t) BSP_PARTITION_FLASH_CPU1_C_START + BSP_PARTITION_FLASH_CPU1_C_SIZE - 1) + #define FLASH_NS_START ((uint32_t *) BSP_PARTITION_FLASH_CPU1_N_START) + #define RAM_NSC_START ((uint32_t *) BSP_PARTITION_RAM_CPU1_C_START) + #define RAM_NSC_LIMIT ((uint32_t) BSP_PARTITION_RAM_CPU1_C_START + BSP_PARTITION_RAM_CPU1_C_SIZE - 1) + #define RAM_NS_START ((uint32_t *) BSP_PARTITION_RAM_CPU1_N_START) + #define DATA_FLASH_NS_START ((uint32_t *) BSP_PARTITION_DATA_FLASH_CPU1_N_START) + + #else + +/* Use legacy tail-chaining to find NS */ + #define FLASH_NS_START ((uint32_t *) ((((uint32_t) gp_ddsc_FLASH_END + 0x8000 - 1) & \ + 0xFFFF8000) | BSP_FEATURE_TZ_NS_OFFSET)) + #define FLASH_NSC_START ((uint32_t *) gp_ddsc_FLASH_NSC) + #define FLASH_NSC_LIMIT (((uint32_t) FLASH_NS_START & ~BSP_FEATURE_TZ_NS_OFFSET) - 1U) + #define RAM_NS_START ((uint32_t *) ((((uint32_t) gp_ddsc_RAM_END + 0x2000 - 1) & \ + 0xFFFFE000) | BSP_FEATURE_TZ_NS_OFFSET)) + #define RAM_NSC_START ((uint32_t *) gp_ddsc_RAM_NSC) + #define RAM_NSC_LIMIT (((uint32_t) RAM_NS_START & ~BSP_FEATURE_TZ_NS_OFFSET) - 1U) + #define DATA_FLASH_NS_START ((uint32_t *) ((((uint32_t) gp_ddsc_DATA_FLASH_END + 0x400 - 1) & \ + 0xFFFFFC00) | BSP_FEATURE_TZ_NS_OFFSET)) + + #endif + + #define RAM_NS_START_S_ALIAS ((uint32_t *) ((uint32_t) RAM_NS_START & ~BSP_FEATURE_TZ_NS_OFFSET)) + +/* Operation after detection registers. + * RA8 devices have the registers under MSA/BUS while other devices have them under TZF. */ + #ifdef R_TZF + #define BSP_PRV_OAD_REG R_TZF->TZFOAD + #define BSP_PRV_OAD_PT_REG R_TZF->TZFPT + #else + #define BSP_PRV_OAD_REG R_BUS->OAD.MSAOAD + #define BSP_PRV_OAD_PT_REG R_BUS->OAD.MSAPT + #endif + + #if BSP_SECONDARY_CORE_BUILD + +/* For a secure secondary core the SAR has already been written so it + * only needs to modify the security attributes it is using: + * - Secure (0) will always stay Secure + * - Non-secure (1) will either stay non-secure or become secure + * This is the same as using a bitwise AND. + */ + #define BSP_PRV_SAR_WRITE(register, value) register &= value + #else + #define BSP_PRV_SAR_WRITE(register, value) register = value + #endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ +void R_BSP_SecurityInit(void); +void R_BSP_PinCfgSecurityInit(void); +void R_BSP_ElcCfgSecurityInit(void); + +/*********************************************************************************************************************** + * External symbols + **********************************************************************************************************************/ + + #if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * bsp_nonsecure_func_t)(void); + #elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile bsp_nonsecure_func_t)(void); + #endif + + #if BSP_TZ_SECURE_BUILD + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Enter the non-secure code environment. + * + * This function configures the non-secure MSP and vector table then jumps to the non-secure project's Reset_Handler. + * + * @note This function (and therefore the non-secure code) should not return. + **********************************************************************************************************************/ +void R_BSP_NonSecureEnter (void) +{ + /* The NS vector table is at the start of the NS section in flash */ + uint32_t const * p_ns_vector_table = FLASH_NS_START; + + /* Set up the NS Reset_Handler to be called */ + uint32_t const * p_ns_reset_address = (uint32_t const *) ((uint32_t) p_ns_vector_table + sizeof(uint32_t)); + bsp_nonsecure_func_t p_ns_reset = (bsp_nonsecure_func_t) (*p_ns_reset_address); + + #if BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK + + /* Check if the NS application exists. If the address of the Reset_Handler is all '1's, then assume that + * the NS application has not been programmed. + * + * If the secure application attempts to jump to an invalid instruction, a HardFault will occur. If the + * MCU is in NSECSD state, then the debugger will be unable to connect and program the NS Application. Jumping to + * a valid instruction ensures that the debugger will be able to connect. + */ + if (UINT32_MAX == *p_ns_reset_address) + { + p_ns_reset = (bsp_nonsecure_func_t) ((uint32_t) RAM_NS_START); + + /* Write an infinite loop into start of NS RAM (Branch T3 Instruction (b.n )). */ + uint16_t * infinite_loop = (uint16_t *) ((uint32_t) RAM_NS_START); + *infinite_loop = BSP_PRV_INFINITE_LOOP; + + /* Set the NS stack pointer to a valid location in NS RAM. */ + __TZ_set_MSP_NS((uint32_t) RAM_NS_START + 0x20U); + + /* Jump to the infinite loop. */ + p_ns_reset(); + } + #endif + + /* Set the NS vector table address */ + SCB_NS->VTOR = (uint32_t) p_ns_vector_table; + + /* Set the NS stack pointer to the first entry in the NS vector table */ + __TZ_set_MSP_NS(p_ns_vector_table[0]); + + /* Jump to the NS Reset_Handler */ + p_ns_reset(); +} + +/** @} (end addtogroup BSP_MCU) */ + +/*******************************************************************************************************************//** + * Initialize security features for TrustZone. + * + * This function initializes ARM security register and Renesas SAR registers for secure projects. + * + * @note IDAU settings must be configured to match project settings with a separate configuration tool. + **********************************************************************************************************************/ +void R_BSP_SecurityInit (void) +{ + /* Disable PRCR for SARs. */ + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_SAR); + + #if 0 == BSP_FEATURE_TZ_HAS_DLM + + /* If DLM is not implemented, then the TrustZone partitions must be set at run-time. */ + R_PSCU->CFSAMONA = (uint32_t) FLASH_NS_START & ~BSP_FEATURE_TZ_NS_OFFSET & R_PSCU_CFSAMONA_CFS2_Msk; + R_PSCU->CFSAMONB = (uint32_t) FLASH_NSC_START & R_PSCU_CFSAMONB_CFS1_Msk; + R_PSCU->DFSAMON = (uint32_t) DATA_FLASH_NS_START & R_PSCU_DFSAMON_DFS_Msk; + R_PSCU->SSAMONA = (uint32_t) RAM_NS_START_S_ALIAS & R_PSCU_SSAMONA_SS2_Msk; + R_PSCU->SSAMONB = (uint32_t) RAM_NSC_START & R_PSCU_SSAMONB_SS1_Msk; + #endif + + #if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_ITCM) + + /* Total ITCM block size in bytes is equal to 2 ^ (BLKSZ + 5). */ + uint32_t itcm_block_exponent = + ((MEMSYSCTL->ITGU_CFG & MEMSYSCTL_ITGU_CFG_BLKSZ_Msk) >> MEMSYSCTL_ITGU_CFG_BLKSZ_Pos) + + 5U; + uint32_t itcm_block_size = (1U << itcm_block_exponent); + + /* The number of secure ITCM blocks is equal to size of the secure region in bytes divided by the ITCM block size. */ + uint32_t itcm_num_sec_blocks = + ((uint32_t) gp_ddsc_ITCM_END + itcm_block_size - 1 - (uint32_t) gp_ddsc_ITCM_START) >> + itcm_block_exponent; + + /* Set all secure blocks to '0' and all non-secure blocks to 1. */ + MEMSYSCTL->ITGU_LUT[0] = ~((1U << itcm_num_sec_blocks) - 1U); + #endif + + #if (BSP_CFG_CPU_CORE == 0) && (BSP_FEATURE_BSP_HAS_DTCM) + + /* Total DTCM block size in bytes is equal to 2 ^ (BLKSZ + 5). */ + uint32_t dtcm_block_exponent = + ((MEMSYSCTL->DTGU_CFG & MEMSYSCTL_DTGU_CFG_BLKSZ_Msk) >> MEMSYSCTL_DTGU_CFG_BLKSZ_Pos) + + 5U; + uint32_t dtcm_block_size = (1U << dtcm_block_exponent); + + /* The number of secure DTCM blocks is equal to size of the secure region in bytes divided by the DTCM block size. */ + uint32_t dtcm_num_sec_blocks = + ((uint32_t) gp_ddsc_DTCM_END + dtcm_block_size - 1 - (uint32_t) gp_ddsc_DTCM_START) >> + dtcm_block_exponent; + + /* Set all secure blocks to '0' and all non-secure blocks to 1. */ + MEMSYSCTL->DTGU_LUT[0] = ~((1U << dtcm_num_sec_blocks) - 1U); + #endif + + #if (BSP_CFG_CPU_CORE == 1) && defined(R_TCM) + #ifdef BSP_PARTITION_CTCM_CPU1_S_START + + /* Set boundary address for CTCM S/NS */ + R_CPSCU->TCMSABARC = BSP_PARTITION_CTCM_CPU1_S_START + BSP_PARTITION_CTCM_CPU1_S_SIZE; + #endif + #ifdef BSP_PARTITION_STCM_CPU1_S_START + + /* Set boundary address for STCM S/NS */ + R_CPSCU->TCMSABARS = BSP_PARTITION_STCM_CPU1_S_START + BSP_PARTITION_STCM_CPU1_S_SIZE; + #endif + #endif + + #if __SAUREGION_PRESENT + #if !BSP_SECONDARY_CORE_BUILD + + /* Configure IDAU to divide SRAM region into NSC/NS. */ + R_CPSCU->SRAMSABAR0 = (uint32_t) RAM_NS_START_S_ALIAS & R_CPSCU_SRAMSABAR0_SRAMSABAR_Msk; + R_CPSCU->SRAMSABAR1 = (uint32_t) RAM_NS_START_S_ALIAS & R_CPSCU_SRAMSABAR1_SRAMSABAR_Msk; + #if BSP_FEATURE_SRAM_HAS_EXTRA_SRAMSABAR + R_CPSCU->SRAMSABAR2 = (uint32_t) RAM_NS_START_S_ALIAS & R_CPSCU_SRAMSABAR2_SRAMSABAR_Msk; + R_CPSCU->SRAMSABAR3 = (uint32_t) RAM_NS_START_S_ALIAS & R_CPSCU_SRAMSABAR3_SRAMSABAR_Msk; + #endif + + #ifdef BSP_TZ_CFG_SRAMESAR + + /* Configure SRAM ECC Region as S/NS */ + R_CPSCU->SRAMESAR = BSP_TZ_CFG_SRAMESAR; + #endif + #endif + + /* Configure SAU region used for Code Flash Non-secure callable. */ + SAU->RNR = BSP_SAU_REGION_CODE_FLASH_NSC; + SAU->RBAR = (uint32_t) FLASH_NSC_START & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (FLASH_NSC_LIMIT & SAU_RLAR_LADDR_Msk) | SAU_RLAR_NSC_Msk | + SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure region 1: + * - ITCM + * - Code Flash + * - On-chip flash (Factory Flash) + * - On-chip flash (option-setting memory) + */ + SAU->RNR = BSP_SAU_REGION_1_NS; + SAU->RBAR = (uint32_t) BSP_PRV_SAU_NS_REGION_1_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = ((BSP_PRV_SAU_NS_REGION_1_LIMIT_ADDRESS) &SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure callable SRAM. */ + SAU->RNR = BSP_SAU_REGION_SRAM_NSC; + SAU->RBAR = (uint32_t) RAM_NSC_START & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (RAM_NSC_LIMIT & SAU_RLAR_LADDR_Msk) | SAU_RLAR_NSC_Msk | + SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure region 2: + * - DTCM + * - On-chip SRAM + * - Standby SRAM + * - On-chip flash (data flash) + */ + SAU->RNR = BSP_SAU_REGION_2_NS; + SAU->RBAR = ((uint32_t) BSP_PRV_SAU_NS_REGION_2_BASE_ADDRESS & SAU_RBAR_BADDR_Msk) | BSP_FEATURE_TZ_NS_OFFSET; + SAU->RLAR = (BSP_PRV_SAU_NS_REGION_2_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Configure SAU region used for Non-secure region 3: + * - Peripheral I/O registers + * - Flash I/O registers + * - External address space (CS area) + * - External address space (SDRAM area) + * - External address space (OSPI area) + */ + SAU->RNR = BSP_SAU_REGION_3_NS; + SAU->RBAR = BSP_PRV_SAU_NS_REGION_3_BASE_ADDRESS & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (BSP_PRV_SAU_NS_REGION_3_LIMIT_ADDRESS & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk; + + /* Enable the SAU. */ + SAU->CTRL = SAU_CTRL_ENABLE_Msk; + + #if __ICACHE_PRESENT == 1U + + /* Cache maintenance is required when changing security attribution of an address. + * Barrier instructions are required to guarantee intended operation + * (See Arm Cortex-M85 Technical Reference Manual Section 10.9.3). */ + SCB_InvalidateICache(); + #endif + #else + + /* Setting SAU_CTRL.ALLNS to 1 allows the security attribution of all addresses to be set by the IDAU in the + * system. */ + SAU->CTRL = SAU_CTRL_ALLNS_Msk; + #endif + + /* The following section of code to configure SCB->AIRCR, SCB->NSACR, and FPU->FPCCR is taken from + * system_ARMCM33.c in the CMSIS_5 repository. SCB->SCR SLEEPDEEPS bit is not configured because the + * SCB->SCR SLEEPDEEP bit is ignored on RA MCUs. */ + #if defined(SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) + + /* Configure whether non-secure projects have access to system reset, whether bus fault, hard fault, and NMI target + * secure or non-secure, and whether non-secure interrupt priorities are reduced to the lowest 8 priority levels. */ + SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | + SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk)) | + BSP_PRV_AIRCR_VECTKEY | + ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | + ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | + ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); + #endif + + #if defined(__FPU_USED) && (__FPU_USED == 1U) && \ + defined(TZ_FPU_NS_USAGE) && (TZ_FPU_NS_USAGE == 1U) + + /* Configure whether the FPU can be accessed in the non-secure project. */ + SCB->NSACR = (SCB->NSACR & ~(SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)) | + ((SCB_NSACR_CP10_11_VAL << SCB_NSACR_CP10_Pos) & (SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)); + + /* Configure whether FPU registers are always treated as non-secure (and therefore not preserved on the stack when + * switching from secure to non-secure), and whether the FPU registers should be cleared on exception return. */ + FPU->FPCCR = (FPU->FPCCR & ~(FPU_FPCCR_TS_Msk | FPU_FPCCR_CLRONRETS_Msk | FPU_FPCCR_CLRONRET_Msk)) | + ((FPU_FPCCR_TS_VAL << FPU_FPCCR_TS_Pos) & FPU_FPCCR_TS_Msk) | + ((FPU_FPCCR_CLRONRETS_VAL << FPU_FPCCR_CLRONRETS_Pos) & FPU_FPCCR_CLRONRETS_Msk) | + ((FPU_FPCCR_CLRONRET_VAL << FPU_FPCCR_CLRONRET_Pos) & FPU_FPCCR_CLRONRET_Msk); + #endif + + #if !BSP_SECONDARY_CORE_BUILD + #if BSP_FEATURE_BSP_HAS_TZFSAR + + /* Set TrustZone filter to Secure. */ + R_CPSCU->TZFSAR = ~R_CPSCU_TZFSAR_TZFSA0_Msk; + #endif + + /* Set TrustZone filter exception response. */ + BSP_PRV_OAD_PT_REG = BSP_PRV_TZ_REG_KEY + 1U; + BSP_PRV_OAD_REG = BSP_PRV_TZ_REG_KEY + BSP_TZ_CFG_EXCEPTION_RESPONSE; + BSP_PRV_OAD_PT_REG = BSP_PRV_TZ_REG_KEY + 0U; + #endif + + /* Initialize PSARs. */ + BSP_PRV_SAR_WRITE(R_PSCU->PSARB, BSP_TZ_CFG_PSARB); + BSP_PRV_SAR_WRITE(R_PSCU->PSARC, BSP_TZ_CFG_PSARC); + BSP_PRV_SAR_WRITE(R_PSCU->PSARD, BSP_TZ_CFG_PSARD); + BSP_PRV_SAR_WRITE(R_PSCU->PSARE, BSP_TZ_CFG_PSARE); + + #if !BSP_SECONDARY_CORE_BUILD + R_PSCU->MSSAR = BSP_TZ_CFG_MSSAR; + #endif + + /* Initialize Type 2 SARs. */ + #ifdef BSP_TZ_CFG_CSAR + R_CPSCU->CSAR = BSP_TZ_CFG_CSAR; /* Cache Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_CACHESAR + R_CPSCU->CACHESAR = BSP_TZ_CFG_CACHESAR; /* Cache Security Attribution. */ + #endif + #if !BSP_SECONDARY_CORE_BUILD + R_SYSTEM->RSTSAR = BSP_TZ_CFG_RSTSAR; /* RSTSRn Security Attribution. */ + #endif + BSP_PRV_SAR_WRITE(R_SYSTEM->LVDSAR, BSP_TZ_CFG_LVDSAR); /* LVD Security Attribution. */ + + #if !BSP_SECONDARY_CORE_BUILD + R_SYSTEM->CGFSAR = BSP_TZ_CFG_CGFSAR; /* CGC Security Attribution. */ + R_SYSTEM->LPMSAR = BSP_TZ_CFG_LPMSAR; /* LPM Security Attribution. */ + #ifdef BSP_TZ_CFG_DPFSAR + R_SYSTEM->DPFSAR = BSP_TZ_CFG_DPFSAR; /* Deep Standby Interrupt Factor Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_RSCSAR + R_SYSTEM->RSCSAR = BSP_TZ_CFG_RSCSAR; /* RAM Standby Control Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_PGCSAR + R_SYSTEM->PGCSAR = BSP_TZ_CFG_PGCSAR; /* Power Gating Control Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_BBFSAR + R_SYSTEM->BBFSAR = BSP_TZ_CFG_BBFSAR; /* Battery Backup Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_VBRSABAR + R_SYSTEM->VBRSABAR = BSP_TZ_CFG_VBRSABAR; /* Battery Backup Security Attribution (VBTBKRn). */ + #endif + #endif + + BSP_PRV_SAR_WRITE(R_CPSCU->ICUSARA, BSP_TZ_CFG_ICUSARA); /* External IRQ Security Attribution. */ + + #if !BSP_SECONDARY_CORE_BUILD + R_CPSCU->ICUSARB = BSP_TZ_CFG_ICUSARB; /* NMI Security Attribution. */ + #ifdef BSP_TZ_CFG_ICUSARC + R_CPSCU->ICUSARC = BSP_TZ_CFG_ICUSARC; /* DMAC Channel Security Attribution. */ + #endif + #endif + + #ifdef BSP_TZ_CFG_DMACCHSAR + R_CPSCU->DMACCHSAR |= (BSP_TZ_CFG_DMACCHSAR << DMACX_REGISTER_SHIFT); /* DMAC Channel Security Attribution. */ + #endif + + #if !BSP_SECONDARY_CORE_BUILD + #ifdef BSP_TZ_CFG_ICUSARD + R_CPSCU->ICUSARD = BSP_TZ_CFG_ICUSARD; /* SELSR0 Security Attribution. */ + #endif + R_CPSCU->ICUSARE = BSP_TZ_CFG_ICUSARE; /* WUPEN0 Security Attribution. */ + #ifdef BSP_TZ_CFG_ICUSARF + R_CPSCU->ICUSARF = BSP_TZ_CFG_ICUSARF; /* WUPEN1 Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_TEVTRCR + R_CPSCU->TEVTRCR = BSP_TZ_CFG_TEVTRCR; /* Trusted Event Route Enable. */ + #endif + #ifdef BSP_TZ_CFG_ELCSARA + R_ELC->ELCSARA = BSP_TZ_CFG_ELCSARA; /* ELCR, ELSEGR0, ELSEGR1 Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_FSAR + R_FCACHE->FSAR = BSP_TZ_CFG_FSAR; /* FLWT and FCKMHZ Security Attribution. */ + #endif + #ifdef BSP_TZ_CFG_MSAR + R_MRMS->MSAR = BSP_TZ_CFG_MSAR; /* MRAM Security Attribution. */ + #endif + + R_CPSCU->SRAMSAR = BSP_TZ_CFG_SRAMSAR; /* SRAM Security Attribution. */ + #ifdef BSP_TZ_CFG_STBRAMSAR + R_CPSCU->STBRAMSAR = BSP_TZ_CFG_STBRAMSAR; /* Standby RAM Security Attribution. */ + #endif + #endif + + R_CPSCU->MMPUSARA |= (BSP_TZ_CFG_MMPUSARA << DMACX_REGISTER_SHIFT); /* Security Attribution for the DMAC Bus Master MPU. */ + + #if !BSP_SECONDARY_CORE_BUILD + R_CPSCU->BUSSARA = BSP_TZ_CFG_BUSSARA; /* Security Attribution Register A for the BUS Control Registers. */ + R_CPSCU->BUSSARB = BSP_TZ_CFG_BUSSARB; /* Security Attribution Register B for the BUS Control Registers. */ + #ifdef BSP_TZ_CFG_BUSSARC + R_CPSCU->BUSSARC = BSP_TZ_CFG_BUSSARC; /* Security Attribution Register C for the BUS Control Registers. */ + #endif + #endif + + #ifdef BSP_TZ_CFG_IPCSAR + BSP_PRV_SAR_WRITE(R_CPSCU->IPCSAR, BSP_TZ_CFG_IPCSAR); /* IPC Security Attribution */ + #endif + + #if (defined(BSP_TZ_CFG_ICUSARC) && (BSP_TZ_CFG_ICUSARC != UINT32_MAX)) || \ + (defined(BSP_TZ_CFG_DMACCHSAR) && \ + ((BSP_TZ_CFG_DMACCHSAR & R_CPSCU_DMACCHSAR_DMACCHSARn_Msk) != R_CPSCU_DMACCHSAR_DMACCHSARn_Msk)) + + R_BSP_MODULE_START(FSP_IP_DMAC, 0); + + #if BSP_FEATURE_TZ_VERSION == 2 + + /* On MCUs with this implementation of trustzone, DMAST security attribution is set to secure after reset. */ + #else + + /* If any DMAC channels are required by secure program, disable nonsecure write access to DMAST + * in order to prevent the nonsecure program from disabling all DMAC channels. */ + R_CPSCU->DMACSAR &= ~(1U << DMACX_REGISTER_SHIFT); /* Protect DMAST from nonsecure write access. */ + #endif + + /* Ensure that DMAST is set so that the nonsecure program can use DMA. */ + R_DMA->DMAST = 1U; + #else + + /* On MCUs with this implementation of trustzone, DMACSAR security attribution is set to secure after reset. + * If the DMAC is not used in the secure application,then configure DMAST security attribution to non-secure. */ + R_CPSCU->DMACSAR = 1U; + #endif + + #if BSP_TZ_CFG_DTC_USED + R_BSP_MODULE_START(FSP_IP_DTC, 0); + + #if BSP_FEATURE_TZ_VERSION == 2 + + /* On MCUs with this implementation of trustzone, DTCST security attribution is set to secure after reset. */ + #else + + /* If the DTC is used by the secure program, disable nonsecure write access to DTCST + * in order to prevent the nonsecure program from disabling all DTC transfers. */ + R_CPSCU->DTCSAR &= ~(1U << DTCX_REGISTER_SHIFT); + #endif + + /* Ensure that DTCST is set so that the nonsecure program can use DTC. */ + R_DTC->DTCST = 1U; + #elif BSP_FEATURE_TZ_VERSION == 2 + + /* On MCUs with this implementation of trustzone, DTCST security attribution is set to secure after reset. + * If the DTC is not used in the secure application,then configure DTCST security attribution to non-secure. */ + R_CPSCU->DTCSAR |= (1U << DTCX_REGISTER_SHIFT); + #endif + + /* Initialize security attribution registers for Pins. */ + R_BSP_PinCfgSecurityInit(); + + /* Initialize security attribution registers for ELC. */ + R_BSP_ElcCfgSecurityInit(); + + /* Reenable PRCR for SARs. */ + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_SAR); +} + +/* This function is overridden by tooling. */ +BSP_WEAK_REFERENCE void R_BSP_PinCfgSecurityInit (void) +{ +} + +/* This function is overridden by tooling. */ +BSP_WEAK_REFERENCE void R_BSP_ElcCfgSecurityInit (void) +{ +} + + #endif +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.h new file mode 100644 index 00000000000..3ceb51f921a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_security.h @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_SECURITY_H +#define BSP_SECURITY_H + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +void R_BSP_NonSecureEnter(void); + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_tfu.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_tfu.h new file mode 100644 index 00000000000..98b09caee38 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/all/bsp_tfu.h @@ -0,0 +1,218 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef RENESAS_TFU +#define RENESAS_TFU + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* Mathematical Functions includes. */ +#ifdef __cplusplus + #include +#else + #include +#endif + +/** Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +#if BSP_FEATURE_TFU_SUPPORTED + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + + #define R_TFU_HYPOT_SCALING_FACTOR 0.607252935f + + #ifdef __GNUC__ /* and (arm)clang */ + #if (__STDC_VERSION__ < 199901L) && defined(__STRICT_ANSI__) && !defined(__cplusplus) + +/* No form of inline is available, it happens only when -std=c89, gnu89 and + * above are OK */ + #warning \ + "-std=c89 doesn't support type checking on TFU. Please use -std=gnu89 or higher for example -std=c99" + #else + #ifdef __GNUC_GNU_INLINE__ + +/* gnu89 semantics of inline and extern inline are essentially the exact + * opposite of those in C99 */ + #define BSP_TFU_INLINE extern inline __attribute__((always_inline)) + #else /* __GNUC_STDC_INLINE__ */ + #define BSP_TFU_INLINE static inline __attribute__((always_inline)) + #endif + #endif + #elif __ICCARM__ + #define BSP_TFU_INLINE + #else + #error "Compiler not supported!" + #endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Inline Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Calculates sine of the given angle. + * @param[in] angle The value of an angle in radian. + * + * @retval Sine value of an angle. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE float __sinf (float angle) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read sin from R_TFU->SCDT1 */ + return R_TFU->SCDT1; +} + +/*******************************************************************************************************************//** + * Calculates cosine of the given angle. + * @param[in] angle The value of an angle in radian. + * + * @retval Cosine value of an angle. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE float __cosf (float angle) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read cos from R_TFU->SCDT1 */ + return R_TFU->SCDT0; +} + +/*******************************************************************************************************************//** + * Calculates sine and cosine of the given angle. + * @param[in] angle The value of an angle in radian. + * @param[out] sin Sine value of an angle. + * @param[out] cos Cosine value of an angle. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE void __sincosf (float angle, float * sin, float * cos) +{ + /* Set the angle to R_TFU->SCDT1 */ + R_TFU->SCDT1 = angle; + + /* Read sin from R_TFU->SCDT1 */ + *sin = R_TFU->SCDT1; + + /* Read sin from R_TFU->SCDT1 */ + *cos = R_TFU->SCDT0; +} + +/*******************************************************************************************************************//** + * Calculates the arc tangent based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-Axis cordinate value. + * @param[in] x_cord X-Axis cordinate value. + * + * @retval Arc tangent for given values. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE float __atan2f (float y_cord, float x_cord) +{ + /* Set X-cordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-cordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read arctan(y/x) from R_TFU->ATDT1 */ + return R_TFU->ATDT1; +} + +/*******************************************************************************************************************//** + * Calculates the hypotenuse based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-cordinate value. + * @param[in] x_cord X-cordinate value. + * + * @retval Hypotenuse for given values. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE float __hypotf (float x_cord, float y_cord) +{ + /* Set X-coordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-coordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read sqrt (x_cord2 + y_cord2) from R_TFU->ATDT0 */ + return R_TFU->ATDT0 * R_TFU_HYPOT_SCALING_FACTOR; +} + +/*******************************************************************************************************************//** + * Calculates the arc tangent and hypotenuse based on given X-cordinate and Y-cordinate values. + * @param[in] y_cord Y-cordinate value. + * @param[in] x_cord X-cordinate value. + * @param[out] atan2 Arc tangent for given values. + * @param[out] hypot Hypotenuse for given values. + **********************************************************************************************************************/ + #if __ICCARM__ + #pragma inline = forced + #endif +BSP_TFU_INLINE void __atan2hypotf (float y_cord, float x_cord, float * atan2, float * hypot) +{ + /* Set X-coordinate to R_TFU->ATDT0 */ + R_TFU->ATDT0 = x_cord; + + /* set Y-coordinate to R_TFU->ATDT1 */ + R_TFU->ATDT1 = y_cord; + + /* Read arctan(y/x) from R_TFU->ATDT1 */ + *atan2 = R_TFU->ATDT1; + + /* Read sqrt (x_cord2 + y_cord2) from R_TFU->ATDT0 */ + *hypot = R_TFU->ATDT0 * R_TFU_HYPOT_SCALING_FACTOR; +} + + #if BSP_CFG_USE_TFU_MATHLIB + #define sinf(x) __sinf(x) + #define cosf(x) __cosf(x) + #define atan2f(y, x) __atan2f(y, x) + #define hypotf(x, y) __hypotf(x, y) + #define atan2hypotf(y, x, a, h) __atan2hypotf(y, x, a, h) + #define sincosf(a, s, c) __sincosf(a, s, c) + #endif + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end addtogroup BSP_MCU) */ + +/** Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER + +#endif /* RENESAS_TFU */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h new file mode 100644 index 00000000000..a60042d9e28 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_elc.h @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_ELC_H +#define BSP_ELC_H + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RA2A1 + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* UNCRUSTIFY-OFF */ + +/** Sources of event signals to be linked to other peripherals or the CPU + * @note This list is device specific. + * */ +typedef enum e_elc_event_ra2a1 +{ + ELC_EVENT_NONE = (0x0), // Link disabled + ELC_EVENT_ICU_IRQ0 = (0x001), // External pin interrupt 0 + ELC_EVENT_ICU_IRQ1 = (0x002), // External pin interrupt 1 + ELC_EVENT_ICU_IRQ2 = (0x003), // External pin interrupt 2 + ELC_EVENT_ICU_IRQ3 = (0x004), // External pin interrupt 3 + ELC_EVENT_ICU_IRQ4 = (0x005), // External pin interrupt 4 + ELC_EVENT_ICU_IRQ5 = (0x006), // External pin interrupt 5 + ELC_EVENT_ICU_IRQ6 = (0x007), // External pin interrupt 6 + ELC_EVENT_ICU_IRQ7 = (0x008), // External pin interrupt 7 + ELC_EVENT_DTC_COMPLETE = (0x009), // DTC transfer complete + ELC_EVENT_DTC_END = (0x00A), // DTC transfer end + ELC_EVENT_ICU_SNOOZE_CANCEL = (0x00B), // Canceling from Snooze mode + ELC_EVENT_FCU_FRDYI = (0x00C), // Flash ready interrupt + ELC_EVENT_LVD_LVD1 = (0x00D), // Voltage monitor 1 interrupt + ELC_EVENT_LVD_LVD2 = (0x00E), // Voltage monitor 2 interrupt + ELC_EVENT_CGC_MOSC_STOP = (0x00F), // Main Clock oscillation stop + ELC_EVENT_LPM_SNOOZE_REQUEST = (0x010), // Snooze entry + ELC_EVENT_AGT0_INT = (0x011), // AGT interrupt + ELC_EVENT_AGT0_COMPARE_A = (0x012), // Compare match A + ELC_EVENT_AGT0_COMPARE_B = (0x013), // Compare match B + ELC_EVENT_AGT1_INT = (0x014), // AGT interrupt + ELC_EVENT_AGT1_COMPARE_A = (0x015), // Compare match A + ELC_EVENT_AGT1_COMPARE_B = (0x016), // Compare match B + ELC_EVENT_IWDT_UNDERFLOW = (0x017), // IWDT underflow + ELC_EVENT_WDT_UNDERFLOW = (0x018), // WDT underflow + ELC_EVENT_RTC_ALARM = (0x019), // Alarm interrupt + ELC_EVENT_RTC_PERIOD = (0x01A), // Periodic interrupt + ELC_EVENT_RTC_CARRY = (0x01B), // Carry interrupt + ELC_EVENT_ADC0_SCAN_END = (0x01C), // End of A/D scanning operation + ELC_EVENT_ADC0_SCAN_END_B = (0x01D), // A/D scan end interrupt for group B + ELC_EVENT_ADC0_WINDOW_A = (0x01E), // Window A Compare match interrupt + ELC_EVENT_ADC0_WINDOW_B = (0x01F), // Window B Compare match interrupt + ELC_EVENT_ADC0_COMPARE_MATCH = (0x020), // Compare match + ELC_EVENT_ADC0_COMPARE_MISMATCH = (0x021), // Compare mismatch + ELC_EVENT_ACMPHS0_INT = (0x022), // High Speed Comparator channel 0 interrupt + ELC_EVENT_ACMPLP0_INT = (0x023), // Low Power Comparator channel 0 interrupt + ELC_EVENT_ACMPLP1_INT = (0x024), // Low Power Comparator channel 1 interrupt + ELC_EVENT_USBFS_INT = (0x025), // USBFS interrupt + ELC_EVENT_USBFS_RESUME = (0x026), // USBFS resume interrupt + ELC_EVENT_IIC0_RXI = (0x027), // Receive data full + ELC_EVENT_IIC0_TXI = (0x028), // Transmit data empty + ELC_EVENT_IIC0_TEI = (0x029), // Transmit end + ELC_EVENT_IIC0_ERI = (0x02A), // Transfer error + ELC_EVENT_IIC0_WUI = (0x02B), // Wakeup interrupt + ELC_EVENT_IIC1_RXI = (0x02C), // Receive data full + ELC_EVENT_IIC1_TXI = (0x02D), // Transmit data empty + ELC_EVENT_IIC1_TEI = (0x02E), // Transmit end + ELC_EVENT_IIC1_ERI = (0x02F), // Transfer error + ELC_EVENT_CTSU_WRITE = (0x030), // Write request interrupt + ELC_EVENT_CTSU_READ = (0x031), // Measurement data transfer request interrupt + ELC_EVENT_CTSU_END = (0x032), // Measurement end interrupt + ELC_EVENT_KEY_INT = (0x033), // Key interrupt + ELC_EVENT_DOC_INT = (0x034), // Data operation circuit interrupt + ELC_EVENT_CAC_FREQUENCY_ERROR = (0x035), // Frequency error interrupt + ELC_EVENT_CAC_MEASUREMENT_END = (0x036), // Measurement end interrupt + ELC_EVENT_CAC_OVERFLOW = (0x037), // Overflow interrupt + ELC_EVENT_CAN0_ERROR = (0x038), // Error interrupt + ELC_EVENT_CAN0_FIFO_RX = (0x039), // Receive FIFO interrupt + ELC_EVENT_CAN0_FIFO_TX = (0x03A), // Transmit FIFO interrupt + ELC_EVENT_CAN0_MAILBOX_RX = (0x03B), // Reception complete interrupt + ELC_EVENT_CAN0_MAILBOX_TX = (0x03C), // Transmission complete interrupt + ELC_EVENT_IOPORT_EVENT_1 = (0x03D), // Port 1 event + ELC_EVENT_IOPORT_EVENT_2 = (0x03E), // Port 2 event + ELC_EVENT_ELC_SOFTWARE_EVENT_0 = (0x03F), // Software event 0 + ELC_EVENT_ELC_SOFTWARE_EVENT_1 = (0x040), // Software event 1 + ELC_EVENT_POEG0_EVENT = (0x041), // Port Output disable 0 interrupt + ELC_EVENT_POEG1_EVENT = (0x042), // Port Output disable 1 interrupt + ELC_EVENT_SDADC0_ADI = (0x043), // End of SD A/D conversion (type 1) + ELC_EVENT_SDADC0_SCANEND = (0x044), // End of SD A/D scan + ELC_EVENT_SDADC0_CALIEND = (0x045), // End of SD A/D A/D calibration + ELC_EVENT_GPT0_CAPTURE_COMPARE_A = (0x046), // Capture/Compare match A + ELC_EVENT_GPT0_CAPTURE_COMPARE_B = (0x047), // Capture/Compare match B + ELC_EVENT_GPT0_COMPARE_C = (0x048), // Compare match C + ELC_EVENT_GPT0_COMPARE_D = (0x049), // Compare match D + ELC_EVENT_GPT0_COUNTER_OVERFLOW = (0x04A), // Overflow + ELC_EVENT_GPT0_COUNTER_UNDERFLOW = (0x04B), // Underflow + ELC_EVENT_GPT1_CAPTURE_COMPARE_A = (0x04C), // Capture/Compare match A + ELC_EVENT_GPT1_CAPTURE_COMPARE_B = (0x04D), // Capture/Compare match B + ELC_EVENT_GPT1_COMPARE_C = (0x04E), // Compare match C + ELC_EVENT_GPT1_COMPARE_D = (0x04F), // Compare match D + ELC_EVENT_GPT1_COUNTER_OVERFLOW = (0x050), // Overflow + ELC_EVENT_GPT1_COUNTER_UNDERFLOW = (0x051), // Underflow + ELC_EVENT_GPT2_CAPTURE_COMPARE_A = (0x052), // Capture/Compare match A + ELC_EVENT_GPT2_CAPTURE_COMPARE_B = (0x053), // Capture/Compare match B + ELC_EVENT_GPT2_COMPARE_C = (0x054), // Compare match C + ELC_EVENT_GPT2_COMPARE_D = (0x055), // Compare match D + ELC_EVENT_GPT2_COUNTER_OVERFLOW = (0x056), // Overflow + ELC_EVENT_GPT2_COUNTER_UNDERFLOW = (0x057), // Underflow + ELC_EVENT_GPT3_CAPTURE_COMPARE_A = (0x058), // Capture/Compare match A + ELC_EVENT_GPT3_CAPTURE_COMPARE_B = (0x059), // Capture/Compare match B + ELC_EVENT_GPT3_COMPARE_C = (0x05A), // Compare match C + ELC_EVENT_GPT3_COMPARE_D = (0x05B), // Compare match D + ELC_EVENT_GPT3_COUNTER_OVERFLOW = (0x05C), // Overflow + ELC_EVENT_GPT3_COUNTER_UNDERFLOW = (0x05D), // Underflow + ELC_EVENT_GPT4_CAPTURE_COMPARE_A = (0x05E), // Capture/Compare match A + ELC_EVENT_GPT4_CAPTURE_COMPARE_B = (0x05F), // Capture/Compare match B + ELC_EVENT_GPT4_COMPARE_C = (0x060), // Compare match C + ELC_EVENT_GPT4_COMPARE_D = (0x061), // Compare match D + ELC_EVENT_GPT4_COUNTER_OVERFLOW = (0x062), // Overflow + ELC_EVENT_GPT4_COUNTER_UNDERFLOW = (0x063), // Underflow + ELC_EVENT_GPT5_CAPTURE_COMPARE_A = (0x064), // Capture/Compare match A + ELC_EVENT_GPT5_CAPTURE_COMPARE_B = (0x065), // Capture/Compare match B + ELC_EVENT_GPT5_COMPARE_C = (0x066), // Compare match C + ELC_EVENT_GPT5_COMPARE_D = (0x067), // Compare match D + ELC_EVENT_GPT5_COUNTER_OVERFLOW = (0x068), // Overflow + ELC_EVENT_GPT5_COUNTER_UNDERFLOW = (0x069), // Underflow + ELC_EVENT_GPT6_CAPTURE_COMPARE_A = (0x06A), // Capture/Compare match A + ELC_EVENT_GPT6_CAPTURE_COMPARE_B = (0x06B), // Capture/Compare match B + ELC_EVENT_GPT6_COMPARE_C = (0x06C), // Compare match C + ELC_EVENT_GPT6_COMPARE_D = (0x06D), // Compare match D + ELC_EVENT_GPT6_COUNTER_OVERFLOW = (0x06E), // Overflow + ELC_EVENT_GPT6_COUNTER_UNDERFLOW = (0x06F), // Underflow + ELC_EVENT_OPS_UVW_EDGE = (0x070), // UVW edge event + ELC_EVENT_SCI0_RXI = (0x071), // Receive data full + ELC_EVENT_SCI0_TXI = (0x072), // Transmit data empty + ELC_EVENT_SCI0_TEI = (0x073), // Transmit end + ELC_EVENT_SCI0_ERI = (0x074), // Receive error + ELC_EVENT_SCI0_AM = (0x075), // Address match event + ELC_EVENT_SCI0_RXI_OR_ERI = (0x076), // Receive data full/Receive error + ELC_EVENT_SCI1_RXI = (0x077), // Receive data full + ELC_EVENT_SCI1_TXI = (0x078), // Transmit data empty + ELC_EVENT_SCI1_TEI = (0x079), // Transmit end + ELC_EVENT_SCI1_ERI = (0x07A), // Receive error + ELC_EVENT_SCI1_AM = (0x07B), // Address match event + ELC_EVENT_SCI9_RXI = (0x07C), // Receive data full + ELC_EVENT_SCI9_TXI = (0x07D), // Transmit data empty + ELC_EVENT_SCI9_TEI = (0x07E), // Transmit end + ELC_EVENT_SCI9_ERI = (0x07F), // Receive error + ELC_EVENT_SCI9_AM = (0x080), // Address match event + ELC_EVENT_SPI0_RXI = (0x081), // Receive buffer full + ELC_EVENT_SPI0_TXI = (0x082), // Transmit buffer empty + ELC_EVENT_SPI0_IDLE = (0x083), // Idle + ELC_EVENT_SPI0_ERI = (0x084), // Error + ELC_EVENT_SPI0_TEI = (0x085), // Transmission complete event + ELC_EVENT_SPI1_RXI = (0x086), // Receive buffer full + ELC_EVENT_SPI1_TXI = (0x087), // Transmit buffer empty + ELC_EVENT_SPI1_IDLE = (0x088), // Idle + ELC_EVENT_SPI1_ERI = (0x089), // Error + ELC_EVENT_SPI1_TEI = (0x08A), // Transmission complete event + ELC_EVENT_AES_WRREQ = (0x08B), // AES Write Request + ELC_EVENT_AES_RDREQ = (0x08C), // AES Read Request + ELC_EVENT_TRNG_RDREQ = (0x08D) // TRNG Read Request +} elc_event_t; + +#define BSP_PRV_VECT_ENUM(event,group) (ELC_ ## event) + +#define ELC_PERIPHERAL_NUM (23U) +#define BSP_OVERRIDE_ELC_PERIPHERAL_T +/** Possible peripherals to be linked to event signals + * @note This list is device specific. + * */ +typedef enum e_elc_peripheral +{ + ELC_PERIPHERAL_GPT_A = (0), + ELC_PERIPHERAL_GPT_B = (1), + ELC_PERIPHERAL_GPT_C = (2), + ELC_PERIPHERAL_GPT_D = (3), + ELC_PERIPHERAL_ADC0 = (8), + ELC_PERIPHERAL_ADC0_B = (9), + ELC_PERIPHERAL_DAC0 = (12), + ELC_PERIPHERAL_IOPORT1 = (14), + ELC_PERIPHERAL_IOPORT2 = (15), + ELC_PERIPHERAL_CTSU = (18), + ELC_PERIPHERAL_DA8_0 = (19), + ELC_PERIPHERAL_DA8_1 = (20), + ELC_PERIPHERAL_SDADC0 = (22) +} elc_peripheral_t; + +/** Positions of event link set registers (ELSRs) available on this MCU */ +#define BSP_ELC_PERIPHERAL_MASK (0x005CD30FU) + +/* UNCRUSTIFY-ON */ +/** @} (end addtogroup BSP_MCU_RA2A1) */ + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h new file mode 100644 index 00000000000..fb663be951c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_feature.h @@ -0,0 +1,615 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * + * AUTOGENERATED FILE. DO NOT EDIT. + * + **********************************************************************************************************************/ + +#ifndef BSP_FEATURE_H +#define BSP_FEATURE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +#include "bsp_peripheral.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** The main oscillator drive value is based upon the oscillator frequency selected in the configuration. */ +#define CGC_MAINCLOCK_DRIVE_RESERVED_MASK (0x0U) +#if (BSP_CFG_XTAL_HZ >= (10000000)) + #define CGC_MAINCLOCK_DRIVE (0x0U | CGC_MAINCLOCK_DRIVE_RESERVED_MASK) +#else + #define CGC_MAINCLOCK_DRIVE (0x1U | CGC_MAINCLOCK_DRIVE_RESERVED_MASK) +#endif + +// *UNCRUSTIFY-OFF* + +#define BSP_FEATURE_ACMPHS_IS_AVAILABLE (1UL) +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (3UL) // Operation stabilization wait time. +#define BSP_FEATURE_ACMPHS_VREF (ACMPHS_REFERENCE_IVREF5) // The IVREF selection that corresponds to the internal voltage reference. + +#define BSP_FEATURE_ACMPLP_IS_AVAILABLE (1UL) +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (1UL) // COMPSELn registers are available. +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (100UL) // Operation stabilization wait time. + +#define BSP_FEATURE_ADC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (0UL) // Check to see if the ADADC register is available on any ADC peripheral. +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (1UL) // Check to see if the ADCALEXE register is available on any ADC peripheral. +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKD) // Clock source used for the ADC peripheral. +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (0UL) // The Extended Input Control Register (ADEXICR) controls if sensors are enabled per group. +#define BSP_FEATURE_ADC_HAS_ADBUF (0UL) // Determine if the ADBUFn registers are present. +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (0UL) // Determine if the ADPRC field exists on the ADCER register. +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (0UL) // Determine if the ADRFMT field exists on the ADCER register. +#define BSP_FEATURE_ADC_HAS_ADHVREFCNT (0UL) // Determine if the ADHVREFCNT register is available. +#define BSP_FEATURE_ADC_HAS_PGA (0UL) // Determine if ADPGACR is present. +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (0UL) // Specifies configuration for the sample and hold circuit is available (specifically ADSHCR register). +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (1UL) // Determine if VREFAMPCNT is present. +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (16UL) // Maximum ADC resolution supported. +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (5000UL) // Minimum time, in nanoseconds, required for ADC sampling of the sensors. +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (1UL) // Specifies that the temperature and VREF sensors are exclusive to other ADC channel operations and cannot be executed concurrently. +#define BSP_FEATURE_ADC_TSN_SLOPE (-3650LL) // DEPRECATED; use BSP_FEATURE_TSN_SLOPE. +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x01FF01FFUL) // Mask of available channels in ADC unit 0. +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0x00UL) // Mask of available channels in ADC unit 1. +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (0x01UL) // Mask of whole, physical ADC units present in the MCU. + +#define BSP_FEATURE_ADC_B_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ADC_B_PGA_CHANNEL_MASK (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_ADC_B_PGA_SUPPORTED (0UL) // Feature not available on this device. +#define BSP_FEATURE_ADC_B_TSN_SLOPE (0UL) // Feature not available on this device. +#define BSP_FEATURE_ADC_B_UNIT_0_CHANNELS (0x00ULL) // Feature not available on this device. +#define BSP_FEATURE_ADC_B_UNIT_1_CHANNELS (0x00ULL) // Feature not available on this device. + +#define BSP_FEATURE_ADC_D_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ADC_D_CHANNELS (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_ADC_D_SCAN_MODE_CHANNELS (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_AGT_IS_AVAILABLE (1UL) +#define BSP_FEATURE_AGT_AGT_CHANNEL_COUNT (2U) // Number of channels for only AGT (not AGTW) peripherals. +#define BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT (0U) // Number of channels for only AGTW (not AGT) peripherals. +#define BSP_FEATURE_AGT_USE_AGTIOSEL_ALT (0UL) // Indicates use of AGTIOSEL_ALT instead of AGTIOSEL for AGTW instances. +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x03UL) // A mask of all valid AGTx channels. + +#define BSP_FEATURE_BSP_CODE_CACHE_VERSION (0UL) // Version of C-Cache implemented in a CM33 core. +#define BSP_FEATURE_BSP_FLASH_CACHE (1UL) // Flash cache is present. +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (1UL) // Constraints exist for flash cache operation either during power mode sequencing or flash programming access. +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0UL) // Indicates the prefetch buffer is available on the flash. +#define BSP_FEATURE_BSP_HAS_ADC_CLOCK (0UL) // Indicates there is a separate clock for the ADC. +#define BSP_FEATURE_BSP_HAS_CANFD_CLOCK (0UL) // Indicates there is a separate clock for the CANFD. +#define BSP_FEATURE_BSP_HAS_CEC_CLOCK (0UL) // Indicates there is a separate clock for the CEC. +#define BSP_FEATURE_BSP_HAS_CLOCK_SUPPLY_TYPEB (0UL) // Check for the ICSTATS bit field that specifies clock power architecture type. +#define BSP_FEATURE_BSP_HAS_DCDC_REGULATOR (0UL) // DCDCCTL register is present in SYSC. +#define BSP_FEATURE_BSP_HAS_DTCM (0UL) // Indicates DTCM is available. +#define BSP_FEATURE_BSP_HAS_ESW_CLOCK (0UL) // Flag indicating an extra peripheral clock is present. +#define BSP_FEATURE_BSP_HAS_ESWM_DOMAIN (0UL) // Indicates that the MCU has a power domain specifically for ESWM peripherals. +#define BSP_FEATURE_BSP_HAS_ESWPHY_CLOCK (0UL) // Flag indicating an extra peripheral clock is present. +#define BSP_FEATURE_BSP_HAS_ETHPHY_CLOCK (0UL) // Flag indicating an extra peripheral clock is present. +#define BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL0_CLOCK (0UL) // Flag indicating an extra peripheral clock is present. +#define BSP_FEATURE_BSP_HAS_EXTRA_PERIPHERAL1_CLOCK (0UL) // Flag indicating an extra peripheral clock is present. +#define BSP_FEATURE_BSP_HAS_FSXP_CLOCK (0UL) // Indicates FSXP (subsystem clock) is available. +#define BSP_FEATURE_BSP_HAS_GRAPHICS_DOMAIN (0UL) // Indicates that the MCU has a power domain specifically for graphics peripherals. +#define BSP_FEATURE_BSP_HAS_I3C_CLOCK (0UL) // Indicates there is a separate clock for the I3C. +#define BSP_FEATURE_BSP_HAS_IIC_CLOCK (0UL) // Indicates there is a separate IIC clock. +#define BSP_FEATURE_BSP_HAS_ITCM (0UL) // Indicates ITCM is available. +#define BSP_FEATURE_BSP_HAS_LCD_CLOCK (0UL) // Indicates there is a separate clock for the LCD. +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0UL) // Indicates there is a separate clock for the OSPI. +#define BSP_FEATURE_BSP_HAS_OFS2 (0UL) // Indicates the OFS2 register is available. +#define BSP_FEATURE_BSP_HAS_OFS3 (0UL) // OSF3 register is available; currently only available for RA8. +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (1UL) // Indicates the AES peripheral is available for an RA2 device. +#define BSP_FEATURE_BSP_HAS_SCE5 (0UL) // Indicates the SCE5 crypto engine is available. +#define BSP_FEATURE_BSP_HAS_SCI_CLOCK (0UL) // Indicates there is a separate SCI clock. +#define BSP_FEATURE_BSP_HAS_SCISPI_CLOCK (0UL) // Indicates there is a separate SCI SPI clock. +#define BSP_FEATURE_BSP_HAS_SDADC_CLOCK (1UL) // Indicates there is a separate clock for the SDADC. +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (1UL) // Indicates the MCU has security MPU systems available. +#define BSP_FEATURE_BSP_HAS_SP_MON (1UL) // Indicates the Stack Pointer monitor is available. +#define BSP_FEATURE_BSP_HAS_SPI_CLOCK (0UL) // Indicates there is a separate clock for the SPI. +#define BSP_FEATURE_BSP_HAS_SYRACCR (0UL) // SYRACCR register is available. +#define BSP_FEATURE_BSP_HAS_TZFSAR (0UL) // Specifies the TrustZone filter can be secured. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (0UL) // Indicates that a request bit must be set before changing USB clock settings. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (0UL) // Indicates the USB clock has a selectable source. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0UL) // Indicates the USBCKCR_ALT register should be used instead of USBCKCR. +#define BSP_FEATURE_BSP_HAS_USB60_CLOCK (0UL) // Indicates the USB60 clock is available. +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (0UL) // USBCKDIVCR register is available. +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0x407FB19CU) // Location of the FMIFRT register. +#define BSP_FEATURE_BSP_MMF_SUPPORTED (1UL) // Memory-mirror function is available. +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0x000FFFFFUL) // Mask for allowed address range of the MPU. +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5 (1UL) // GPT stop bits use MSTPCRD.MSTPD5. +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (0UL) // Largest channel number associated with GPT on the MSTPCRD.MSTPD5 field on this MCU. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (0UL) // Indicates the MSTP peripheral has an MSTPCRE register. +#define BSP_FEATURE_BSP_MSTP_POEG_MSTPD13 (0UL) // Indicates the MSTP uses bit 13 of MSTPCRD to control the POEG. +#define BSP_FEATURE_BSP_NUM_PMSAR (0UL) // Number of available Port Security Attribution Registers. +#define BSP_FEATURE_BSP_OFS_HAS_SECURITY_ATTRIBUTION (0UL) // Indicates security attribution settings for banks are present in the OFS registers. +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFF8FFFUL) // Inverted mask of the HOCOFRQx bit field of the OFS1 register. +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (12UL) // Offset to the OFS1.HOCOFRQx bitfield. +#define BSP_FEATURE_BSP_OSIS_PADDING (1UL) // Indicates there is 32-bits of padding between each 32-bit word of the OSIS ID registers. +#define BSP_FEATURE_BSP_PART_NUMBER_OFFSET (0x24UL) // Bit offset of the Part Number in the mcu info block. +#define BSP_FEATURE_BSP_PART_NUMBER_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + BSP_FEATURE_BSP_PART_NUMBER_OFFSET) // Address of the Part Numbering register (PNR). +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0UL) // Indicates extra modules must be manually stopped before switching the system clock from the PLL. +#define BSP_FEATURE_BSP_RESET_TRNG (1UL) // Specifies the TRNG must be reset after clock initialization to prevent excess current draw. +#define BSP_FEATURE_BSP_SCKDIVCR2_HAS_USB_CLOCK_DIV (0UL) // Indicates there is a USB clock divider setting as part of the SCKDIVCR2 register. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS (0UL) // Maximum frequency allowed before requiring five wait cycles. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS (0UL) // The maximum frequency allowed without having four ROM wait cycles. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (0UL) // The maximum frequency that can be used before wait cycles are necessary. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (0UL) // Maximum frequency allowed before requiring one wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (0UL) // Maximum frequency allowed before requiring three wait cycles. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (0UL) // Maximum frequency allowed before requiring two wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0x14UL) // Bit offset of the Unique ID in the mcu info block. +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER ((*(uint32_t *) BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION) + BSP_FEATURE_BSP_UNIQUE_ID_OFFSET) // Address of the MCU Unique ID register (UIDR). +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0UL) // VCC can switch to VBAT if the voltage drops too low. + +#define BSP_FEATURE_CAN_IS_AVAILABLE (1UL) +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (1UL) // Flag indicating that the ratio between PCLKA (or ICLK) and PCLKB must be 2:1 during CAN operation. +#define BSP_FEATURE_CAN_CLOCK (FSP_PRIV_CLOCK_ICLK) // Source clock for the CAN peripheral. +#define BSP_FEATURE_CAN_MCLOCK_ONLY (1UL) // Indicates that the only clock source for can is the CANMCLK. +#define BSP_FEATURE_CAN_NUM_CHANNELS (1UL) // Number of CAN peripherals. + +#define BSP_FEATURE_CANFD_IS_AVAILABLE (0UL) +#define BSP_FEATURE_CANFD_FD_SUPPORT (0) // Feature not available on this device. +#define BSP_FEATURE_CANFD_LITE (0UL) // Feature not available on this device. +#define BSP_FEATURE_CANFD_NUM_CHANNELS (0UL) // Feature not available on this device. +#define BSP_FEATURE_CANFD_NUM_INSTANCES (0UL) // Feature not available on this device. + +#define BSP_FEATURE_CGC_EXECUTE_FROM_LOCO (1UL) // Indicates the system clock can be sourced by the LOCO. +#define BSP_FEATURE_CGC_HAS_BCLK (0UL) // External Bus Clock is available. +#define BSP_FEATURE_CGC_HAS_CPUCLK (0UL) // CPU Clock is available. +#define BSP_FEATURE_CGC_HAS_CPUCLK1 (0UL) // CPU1 Clock is available. +#define BSP_FEATURE_CGC_HAS_FCLK (1UL) // FlashIF clock is available. +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0UL) // FLDWAITR register is available. +#define BSP_FEATURE_CGC_HAS_FLL (0UL) // FLL is available. +#define BSP_FEATURE_CGC_HAS_FLWT (0UL) // FLWT register is available. +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (1UL) // HOCOWTCR register is available. +#define BSP_FEATURE_CGC_HAS_MEMWAIT (1UL) // MEMWAIT register is available. +#define BSP_FEATURE_CGC_HAS_MRICLK (0UL) // MRAM bus clock is available. +#define BSP_FEATURE_CGC_HAS_NPUCLK (0UL) // NPU clock is available. +#define BSP_FEATURE_CGC_HAS_OSTDCSE (0UL) // OSTDCSE register is available. +#define BSP_FEATURE_CGC_HAS_PCLKA (0UL) // Peripheral module clock A is available. +#define BSP_FEATURE_CGC_HAS_PCLKB (1UL) // Peripheral module clock B is available. +#define BSP_FEATURE_CGC_HAS_PCLKC (0UL) // Peripheral module clock C is available. +#define BSP_FEATURE_CGC_HAS_PCLKD (1UL) // Peripheral module clock D is available. +#define BSP_FEATURE_CGC_HAS_PCLKE (0UL) // Peripheral module clock E is available. +#define BSP_FEATURE_CGC_HAS_PLL (0UL) // PLL is available. +#define BSP_FEATURE_CGC_HAS_PLL2 (0UL) // PLL2 is available. +#define BSP_FEATURE_CGC_HAS_SOPCCR (1UL) // SOPCCR register is available. +#define BSP_FEATURE_CGC_HAS_SOSC (1UL) // Sub-clock oscillator is available. +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (0UL) // SRAMPRCR2 register is available. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (0UL) // SRAM Wait State Control Register is available. +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (1UL) // Changes to OPCCR must only occur with HOCO is stopped or stable. +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (1UL) // HOCO wait control register changes value for 64 MHz speed. +#define BSP_FEATURE_CGC_HOCOWTCR_SCI_SNOOZE_VALUE (0UL) // HOCO stabilization wait time when using SCI0. +#define BSP_FEATURE_CGC_HOCOWTCR_VALUE (6UL) // HOCO stabilization wait time register value for 64 MHz. +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_16) // Reset value of the ICLK divider. +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (100UL) // LOCO stabilization time in microseconds. +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000UL) // Maximum frequency during low-speed operation. +#define BSP_FEATURE_CGC_LOW_SPEED_SUPPORT_MAIN_OSC (1UL) // The main clock oscillator is available in low-speed mode. +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (4000000UL) // Maximum frequency during low-voltage mode. +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (12000000UL) // Middle speed clock maximum frequency. +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (1UL) // MOCO stabilization time in microseconds. +#define BSP_FEATURE_CGC_MODRV_MASK (R_SYSTEM_MOMCR_MODRV1_Msk | CGC_MAINCLOCK_DRIVE_RESERVED_MASK) // Mask used on MODRV register. +#define BSP_FEATURE_CGC_MODRV_SHIFT (R_SYSTEM_MOMCR_MODRV1_Pos) // Shift used for MODRV register. +#define BSP_FEATURE_CGC_OSCILLATON_STOP_DETECT (1UL) // Oscillation stop detection is available. +#define BSP_FEATURE_CGC_PLL_HOCO_MAX_CPUCLK_HZ (0UL) // Maximum allowed clock speed when HOCO is the PLL source clock for the CPUCLK. +#define BSP_FEATURE_CGC_PLL_INPUT_POST_DIV_MAX_HZ (0UL) // Maximum input frequency for PLL (after input divider). +#define BSP_FEATURE_CGC_PLL_INPUT_POST_DIV_MIN_HZ (0UL) // Minimum input frequency for PLL (after input divider). +#define BSP_FEATURE_CGC_PLL_INPUT_PRE_DIV_MAX_HZ (0UL) // Maximum input frequency of the PLL (before input divider). +#define BSP_FEATURE_CGC_PLL_INPUT_PRE_DIV_MIN_HZ (0UL) // Minimum input frequency of the PLL (before input divider). +#define BSP_FEATURE_CGC_PLL_OUT_MAX_HZ (0UL) // Maximum output frequency for PLL unit 1. +#define BSP_FEATURE_CGC_PLL_OUT_MIN_HZ (0UL) // Minimum output frequency for PLL unit 1. +#define BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS (0UL) // Number of output clocks for PLL1. +#define BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS (0UL) // Number of output clocks for PLL2. +#define BSP_FEATURE_CGC_PLL2_OUT_MAX_HZ (0UL) // Maximum output frequency for PLL unit 2. +#define BSP_FEATURE_CGC_PLL2_OUT_MIN_HZ (0UL) // Minimum output frequency for PLL unit 2. +#define BSP_FEATURE_CGC_PLLCCR_TYPE (0UL) // Indicates the type of PLLCCR register and PLL. +#define BSP_FEATURE_CGC_PLLCCR_VCO_MAX_HZ (0UL) // PLL VCO maximum frequency. +#define BSP_FEATURE_CGC_PLLCCR_VCO_MIN_HZ (0UL) // PLL VCO minimum frequency. +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0UL) // Time required, in microseconds, between changing PLLCCR.PLLMUL to clearing PLLCR.PLLSTP. +#define BSP_FEATURE_CGC_REGISTER_SET_B (0UL) // Clock generation uses an alternative register set. +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0UL) // Requires the SCKDIVCR.BCLK bits [18:16] to match SCKDIVCR.PCLKB. +#define BSP_FEATURE_CGC_SCKDIVCR2_CPUCLK1_MATCHES_MRICLK (0UL) // Requires the SCKDIVCR2.CPUCLK1 bits to match SCKDIVCR2.MRICLK. +#define BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS (0UL) // Indicates the SCKDIVCR2 register has additional clocks. +#define BSP_FEATURE_CGC_SCKDIVCR2_NPUCLK_MATCHES_MRICLK (0UL) // Requires the bits [11:8] to match SCKDIVCR2.MRICLK. +#define BSP_FEATURE_CGC_SODRV_MASK (0x03UL) // Sub-clock drive field mask. +#define BSP_FEATURE_CGC_SODRV_SHIFT (0UL) // Sub-clock drive field shift. +#define BSP_FEATURE_CGC_SRAMPRCR_KW_OFFSET (1UL) // Bit offset for SRAMPRCR.KW field. +#define BSP_FEATURE_CGC_SRAMPRCR_KW_VALUE (0x78U) // Write enable key code for SRAMPRCR bit. +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0x02UL) // Reset value for the OPCCR regsiter. +#define BSP_FEATURE_CGC_STARTUP_SCKDIVCR (0x44000404UL) // Reset value for the SCKDIVCR register. +#define BSP_FEATURE_CGC_STARTUP_SCKDIVCR2 (0x00UL) // Reset value for the SCKDIVCR2 register. +#define BSP_FEATURE_CGC_STARTUP_SCKSCR (0x01UL) // Reset value for the SCKSCR register. + +#define BSP_FEATURE_CRC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_CRC_HAS_CRCCR0_LMS (1UL) // The CRC peripheral supports both LSB- and MSB-first calculations. +#define BSP_FEATURE_CRC_HAS_SNOOP (1UL) // The CRC peripheral can snoop on (monitor a) SCI data register for data to checksum. +#define BSP_FEATURE_CRC_POLYNOMIAL_MASK (0x3EU) // Mask of available CRC polynomials; should match the mask of indexes relating to r_crc_api.h::crc_polynomial_t. +#define BSP_FEATURE_CRC_SNOOP_ADDRESS_TYPE_TDR (0x03UL) // Used to indicate the type of register being snooped on; derived from the least-significant nybble of the address of SCI TDR registers. + +#define BSP_FEATURE_CRYPTO_HAS_AES (1UL) // AES support is available. +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (0UL) // AES support with key-wrapping is available. +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0UL) // AES CTR-DRBG pseudo random number support is available. +#define BSP_FEATURE_CRYPTO_HAS_ECC (0UL) // ECC support is available. +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0UL) // ECC support with key-wrapping is available. +#define BSP_FEATURE_CRYPTO_HAS_HASH (0UL) // Hashing support is available. +#define BSP_FEATURE_CRYPTO_HAS_RSA (0UL) // RSA support is available. +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0UL) // RSA support with key-wrapping is available. + +#define BSP_FEATURE_CTSU_IS_AVAILABLE (1UL) +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (4UL) // Number of CTSUCHAC registers. +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (4UL) // Number of CTSUCHTRC registers. +#define BSP_FEATURE_CTSU_HAS_TXVSEL (0UL) // CTSUCR0.CTSUTXVSEL field is available. +#define BSP_FEATURE_CTSU_VERSION (1UL) // Version of the CTSU peripheral. + +#define BSP_FEATURE_DAC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_DAC_AD_SYNC_UNIT_MASK (0x00UL) // DAADSCR register is available. +#define BSP_FEATURE_DAC_B_CHANNELS_PER_UNIT (0UL) // Number of available channels per DAC_B instance. +#define BSP_FEATURE_DAC_B_UNIT_COUNT (0UL) // Number of available DAC_B instance. +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (1UL) // DAPC register is available. +#define BSP_FEATURE_DAC_HAS_DA_AD_SYNCHRONIZE (1UL) // At least one channel supports A/D synchronization with the DAC. +#define BSP_FEATURE_DAC_HAS_DAASWCR_INTERNAL_OUTPUT_CONTROL (0UL) // DAC output can be routed to specific extra internal modules using DAASWCR register. +#define BSP_FEATURE_DAC_HAS_DAVREFCR (1UL) // DAVREFCR register is available. +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (0UL) // DAAMPCR register is available. + +#define BSP_FEATURE_DAC8_IS_AVAILABLE (1UL) +#define BSP_FEATURE_DAC8_CHANNELS_PER_UNIT (2UL) // Number of available channels per DAC8 instance. +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (1UL) // DACPC register is available. +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (1UL) // DACADSCR register is available. +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (1UL) // DAM register has DAMDn bit-fields. +#define BSP_FEATURE_DAC8_UNIT_COUNT (1UL) // Number of DAC8 instances available. + +#define BSP_FEATURE_DAC12_IS_AVAILABLE (1UL) +#define BSP_FEATURE_DAC12_CHANNELS_PER_UNIT (1UL) // Number of available channels per DAC12 instance. +#define BSP_FEATURE_DAC12_UNIT_COUNT (1UL) // Number of available DAC12 instance. + +#define BSP_FEATURE_DMAC_IS_AVAILABLE (0UL) +#define BSP_FEATURE_DMAC_HAS_DELSR (0UL) // Feature not available on this device. +#define BSP_FEATURE_DMAC_HAS_DMCTL (0UL) // Feature not available on this device. +#define BSP_FEATURE_DMAC_HAS_REPEAT_BLOCK_MODE (0UL) // Feature not available on this device. +#define BSP_FEATURE_DMAC_MAX_CHANNEL (0UL) // Feature not available on this device. + +#define BSP_FEATURE_DOC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_DOC_VERSION (1UL) // The version of the DOC peripheral. + +#define BSP_FEATURE_DTC_TRANSFER_INFO_ALIGNMENT (4UL) // Byte alignment that must be used for DTC transfer info structs. + +#define BSP_FEATURE_DWT_CYCCNT (0UL) // CYCNT register is available on CM33 and higher devices. + +#define BSP_FEATURE_ELC_VERSION (1UL) // Version of the ELC peripheral. + +#define BSP_FEATURE_ESC_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ESC_MAX_PORTS (0UL) // Feature not available on this device. + +#define BSP_FEATURE_ESWM_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ESWM_GWCA_PORT (0UL) // Feature not available on this device. +#define BSP_FEATURE_ESWM_MAX_QUEUE_NUM (0UL) // Feature not available on this device. + +#define BSP_FEATURE_ETHER_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0UL) // Feature not available on this device. +#define BSP_FEATURE_ETHER_MAX_QUEUE_NUM (0UL) // Feature not available on this device. +#define BSP_FEATURE_ETHER_SUPPORTS_TZ_SECURE (0UL) // Feature not available on this device. + +#define BSP_FEATURE_FLASH_ARC_NSEC_MULTIPLE_MAX_COUNT (0UL) // Number of bits per counter when ARC_NSEC is configured as multiple counters. +#define BSP_FEATURE_FLASH_ARC_NSEC_NUM_COUNTERS (0L) // Number of non-secure application anti-rollback counters that can be configured. +#define BSP_FEATURE_FLASH_ARC_NSEC_SINGLE_MAX_COUNT (0UL) // Number of counter bits available when using the ARC_NSEC counter as a single, large counter. +#define BSP_FEATURE_FLASH_ARC_OEMBL_MAX_COUNT (0UL) // Number of counter bits for the ARC_OEMBL counter. +#define BSP_FEATURE_FLASH_ARC_SEC_MAX_COUNT (0UL) // Number of counter bits for the ARC_SEC counter. +#define BSP_FEATURE_FLASH_CODE_FLASH_START (0x00UL) // Start address of the Code Flash region. +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x40100000UL) // Start address of the Data Flash region. +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (1UL) // Flash supports protected access window (AWS register is available). +#define BSP_FEATURE_FLASH_SUPPORTS_ANTI_ROLLBACK (0UL) // Flash supports anti-rollback counter (ARC_* registers are available). +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1UL) // ID code is supported (OSIS register is available). +#define BSP_FEATURE_FLASH_USER_LOCKABLE_AREA_SIZE (0UL) // Size of the user lockable areas (non-OFS registers). +#define BSP_FEATURE_FLASH_USER_LOCKABLE_AREA_START (0x00UL) // Start address of the first non-OFS lockable word by LK_CD_A0. + +#define BSP_FEATURE_FLASH_HP_IS_AVAILABLE (0UL) +#define BSP_FEATURE_FLASH_HP_CF_DUAL_BANK_START (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_HAS_BANKSEL (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_SUPPORTS_DUAL_BANK (0UL) // Feature not available on this device. +#define BSP_FEATURE_FLASH_HP_VERSION (0UL) // Feature not available on this device. + +#define BSP_FEATURE_FLASH_LP_IS_AVAILABLE (1UL) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0x0FFFUL) // Address mask for Access Window Setting addresses. +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (10UL) // Division shift to convert addresses to AWS blocks; block addresses only use the lower 22 bits [21:n] with the lowest bit determined by the mask width. +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0x0800UL) // Block size of code flash. +#define BSP_FEATURE_FLASH_LP_CF_DUAL_BANK_START (0x00UL) // Start address of the second bank. +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0x08UL) // Write size of code flash. +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0x0400UL) // Block size of data flash. +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0x01UL) // Write size of data flashmote. +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (FSP_PRIV_CLOCK_FCLK) // Clock source for the flash memory. +#define BSP_FEATURE_FLASH_LP_SUPPORTS_DUAL_BANK (0UL) // Dual bank is supported for FLASH_LP. +#define BSP_FEATURE_FLASH_LP_VERSION (3UL) // Version of the flash memory, either MF3 or MF4. + +#define BSP_FEATURE_GPT_IS_AVAILABLE (1UL) +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x01UL) // Mask of 32-bit GPT channel indices. +#define BSP_FEATURE_GPT_AD_DIRECT_START_CHANNEL_MASK (0x00UL) // Mask of GPT channels supporting A/D conversion start. +#define BSP_FEATURE_GPT_AD_DIRECT_START_SUPPORTED (0UL) // At least one GPT channel with A/D conversion start is available. +#define BSP_FEATURE_GPT_CLOCK_DIVIDER_STEP_SIZE (4UL) // Multiplicative step size of the clock divider (GTCR.TPCS). +#define BSP_FEATURE_GPT_CLOCK_DIVIDER_VALUE_7_9_VALID (0UL) // Whether or not the bit-values of 0b0111 and 0b1001 are valid divider settings (GTCR.TPCS). +#define BSP_FEATURE_GPT_EVENT_COUNT_CHANNEL_MASK (0x7FUL) // Mask of channels that support event count input (has GTUPSR register). +#define BSP_FEATURE_GPT_EVENT_COUNT_SUPPORTED (1UL) // At least one channel supports event counts. +#define BSP_FEATURE_GPT_GPTE_CHANNEL_MASK (0x00UL) // Mask of GPT channels that are the GPTE implementation. +#define BSP_FEATURE_GPT_GPTE_SUPPORTED (0UL) // At least one GPTE implementation is available, GPTE implementations have a GTITC register. +#define BSP_FEATURE_GPT_GPTEH_CHANNEL_MASK (0x00UL) // Mask of GPT channels that are the GPTEH implementation. +#define BSP_FEATURE_GPT_GPTEH_SUPPORTED (0UL) // At least one GPTEH implementation is available, GPTEH implementations have a PDG module. +#define BSP_FEATURE_GPT_GTDVU_CHANNEL_MASK (0x7FUL) // Mask of channels that support dead time control. +#define BSP_FEATURE_GPT_GTDVU_SUPPORTED (1UL) // At least one GPT channel with GTDVU support is available. +#define BSP_FEATURE_GPT_ODC_128_RESOLUTION_CHANNEL_MASK (0x00UL) // Mask of PWM channels which support 128-bit delay resolution. +#define BSP_FEATURE_GPT_ODC_128_RESOLUTION_SUPPORTED (0UL) // The PWM delay circuit supports 128-bit resolution for delays. +#define BSP_FEATURE_GPT_ODC_FRANGE_FREQ_MIN (0UL) // Minimum frequency for standard PDG operation, must set GTCLYCR.FRANGE bit below this value. +#define BSP_FEATURE_GPT_ODC_FRANGE_SET_BIT(gpt_frequency) (0UL) // Obtains the set bit based on the GPT frequency and the FRANGE threshold. +#define BSP_FEATURE_GPT_ODC_FREQ_MAX (0UL) // Maximum supported frequency of the PWM Delay Generation circuit. +#define BSP_FEATURE_GPT_ODC_FREQ_MIN (0UL) // Minimum supported frequency of the PWM Delay Generation circuit. +#define BSP_FEATURE_GPT_OPS_CHANNEL_MASK (0x01UL) // Mask of channels supporting output phase switching. +#define BSP_FEATURE_GPT_OPS_SUPPORTED (1UL) // At least one GPT channel with OPS support is available. +#define BSP_FEATURE_GPT_TPCS_SHIFT (1UL) // Shift value to convert TPCS bit values to real multiplicative values. + +#define BSP_FEATURE_I3C_IS_AVAILABLE (0UL) +#define BSP_FEATURE_I3C_HAS_HDR_MODE (0UL) // Feature not available on this device. +#define BSP_FEATURE_I3C_MAX_DEV_COUNT (0UL) // Feature not available on this device. +#define BSP_FEATURE_I3C_MSTP_OFFSET (0UL) // Feature not available on this device. +#define BSP_FEATURE_I3C_NTDTBP0_DEPTH (0UL) // Feature not available on this device. +#define BSP_FEATURE_I3C_NUM_CHANNELS (0UL) // Feature not available on this device. + +#define BSP_FEATURE_ICU_FIXED_IELSR_COUNT (0UL) // Number of IELSRn registers that have a fixed event source. +#define BSP_FEATURE_ICU_HAS_FILTER (1UL) // ICU contains digital input filtering. +#define BSP_FEATURE_ICU_HAS_IELSR (1UL) // ICU Event Link is available. +#define BSP_FEATURE_ICU_HAS_INTERRUPT_GROUPS (0UL) // Indicates that event links are grouped with multiple sources. +#define BSP_FEATURE_ICU_HAS_LOCO_FILTER (0UL) // Register IRQCR has LOCOSEL. +#define BSP_FEATURE_ICU_HAS_WUPEN1 (0UL) // WUPEN1 register is available. +#define BSP_FEATURE_ICU_HAS_WUPEN2 (0UL) // WUPEN2 register is available. +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0xFFUL) // Mask of available IRQ control registers. +#define BSP_FEATURE_ICU_NMIER_MAX_INDEX (12UL) // Maximum bit field index of valid fields of the NMIER register. +#define BSP_FEATURE_ICU_SBYEDCR_MASK (0x00ULL) // A mask of valid bits for [SBYEDCR1:SBYEDCR0]. +#define BSP_FEATURE_ICU_WUPEN_MASK (0xFB8F00FFULL) // A mask of valid bits for [WUPEN1:WUPEN0]. + +#define BSP_FEATURE_IIC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_IIC_B_BUS_FREE_TIME_MULTIPLIER (0UL) // Multiplication factor to calculate SDA bus free time. +#define BSP_FEATURE_IIC_B_CHECK_SCILV_BEFORE_MASTER_WRITE_TX_DATA (0UL) // SCL status needs to be checked before writing the transmission data in master mode. +#define BSP_FEATURE_IIC_B_FAST_MODE_PLUS (0x00UL) // Mask of channels which support "Fast Mode Plus": up to 1 Mbps bit rates. +#define BSP_FEATURE_IIC_B_VALID_CHANNEL_MASK (0x00UL) // Mask of available IIC_B or compatible I3C channels. +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0UL) // Mask of channels which support "Fast Mode Plus": up to 1 Mbps bit rates. +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0x03UL) // Mask of available IIC channels. + +#define BSP_FEATURE_IOPORT_ELC_PORTS (0x06UL) // Mask of valid indices for ELC signal mapping of port input data. +#define BSP_FEATURE_IOPORT_VERSION (1UL) // Version of the system PFS block. + +#define BSP_FEATURE_IWDT_IS_AVAILABLE (1UL) +#define BSP_FEATURE_IWDT_CLOCK_FREQUENCY (15000UL) // Frequency of the independent watchdog clock source. +#define BSP_FEATURE_IWDT_SUPPORTS_REGISTER_START_MODE (0UL) // IWDT peripheral supports register start mode. + +#define BSP_FEATURE_KINT_IS_AVAILABLE (1UL) +#define BSP_FEATURE_KINT_HAS_MSTP (0UL) // A module stop bit is provided for the KINT peripheral. + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY {} // An array of tuples (MSTP index, bit) that indicate which modules must enter the stop state before the system enters low power mode or when changes to SCKDIVCR are made. +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (0UL) // Indicates some modules must be explicitly stopped before entering low power modes or changing SCKDIVCR. +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x00ULL) // Mask of valid bit-fields of the DPSIEGRn registers. +#define BSP_FEATURE_LPM_DPSIER_MASK (0x00ULL) // Mask of valid bit-fields of the DPSIERn registers. +#define BSP_FEATURE_LPM_HAS_DEEP_SLEEP (0UL) // The device supports deep sleep mode. +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (0UL) // The device supports deep standby mode. +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DEEPCUT (0UL) // The DPSBYCR.DEEPCUT field is available. +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DPSBY (0UL) // The DPSBYCR.DPSBY field is available. +#define BSP_FEATURE_LPM_HAS_DPSBYCR_SRKEEP (0UL) // The DPSBYCR.SRKEEP field is available. +#define BSP_FEATURE_LPM_HAS_DPSIEGR3 (0UL) // The DPSIEGR3 register is available. +#define BSP_FEATURE_LPM_HAS_DPSIEGR4 (0UL) // The DPSIEGR4 register is available. +#define BSP_FEATURE_LPM_HAS_DPSIER4 (0UL) // The DPSIER4 register is available. +#define BSP_FEATURE_LPM_HAS_DPSIER5 (0UL) // The DPSIER5 register is available. +#define BSP_FEATURE_LPM_HAS_FLASH_MODE_SELECT (0UL) // The SBYCR.FLSTP field is available. +#define BSP_FEATURE_LPM_HAS_HOCO_STARTUP_SPEED_MODE (0UL) // The SBYCR.FWKUP field is available. +#define BSP_FEATURE_LPM_HAS_LDO_SKEEP (0UL) // PLL1LDOCR, PLL2LDOCR and HOCOLDOCR registers are available. +#define BSP_FEATURE_LPM_HAS_LPSCR (0UL) // The LPSCR register is available. +#define BSP_FEATURE_LPM_HAS_PDRAMSCR (0UL) // The PDRAMSCRn registers are available. +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0UL) // The SBYCR.OPE field is available. +#define BSP_FEATURE_LPM_HAS_SBYCR_SSBY (1UL) // The SBYCR.SSBY field is available. +#define BSP_FEATURE_LPM_HAS_SNOOZE (1UL) // The MCU supports Snooze. +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0UL) // The SNZEDCR1 register is available. +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0UL) // The SNZREQCR1 register is available. +#define BSP_FEATURE_LPM_HAS_STANDBY_SOSC_SELECT (0UL) // The SBYCR.RTCLPC field is available. +#define BSP_FEATURE_LPM_HAS_STCONR (0UL) // The STCONR register is available. +#define BSP_FEATURE_LPM_RTC_REGISTER_CLOCK_DISABLE (0UL) // RTC registers' clock should be disabled for additional power savings in LPM. +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (0UL) // Indicates that bit 14 of the SBYCR register should always be set. +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x9FUL) // Mask of valid bits for the SNZEDCRn registers. +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x738200FFULL) // Mask of valid bits for the SNZREQCRn registers. +#define BSP_FEATURE_LPM_STANDBY_MOCO_REQUIRED (0UL) // The Middle-speed On-Chip Oscillator must be operating prior to entering standby mode. +#define BSP_FEATURE_LPM_STANDBY_MODE_CLEAR_DTCST (0UL) // DTCST register must be cleared prior to entering standby mode. + +#define BSP_FEATURE_LVD_IS_AVAILABLE (1UL) +#define BSP_FEATURE_LVD_EXLVD_STABILIZATION_TIME_US (0UL) // Detection delay time for EXLVD pin input. +#define BSP_FEATURE_LVD_EXLVDVBAT_HI_THRESHOLD (LVD_THRESHOLD_NOT_AVAILABLE) // External LVD for VBAT reference voltage high threshold. +#define BSP_FEATURE_LVD_EXLVDVBAT_LOW_THRESHOLD (LVD_THRESHOLD_NOT_AVAILABLE) // External LVD for VBAT reference voltage low threshold. +#define BSP_FEATURE_LVD_EXLVDVRTC_HI_THRESHOLD (LVD_THRESHOLD_NOT_AVAILABLE) // External LVD for VRTC reference voltage high threshold. +#define BSP_FEATURE_LVD_EXLVDVRTC_LOW_THRESHOLD (LVD_THRESHOLD_NOT_AVAILABLE) // External LVD for VRTC reference voltage low threshold. +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (0UL) // Digital input filtering is available. +#define BSP_FEATURE_LVD_HAS_EXT_MONITOR (0UL) // Voltage monitoring is available for an external power supply via pin. +#define BSP_FEATURE_LVD_HAS_LVDLVLR (1UL) // LVDLVLR register is available. +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_4_29V) // Typical higher bound of the detection threshold for LVD1. +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_1_65V) // Typical lower bound of the detection threshold for LVD1. +#define BSP_FEATURE_LVD_MONITOR_1_STABILIZATION_TIME_US (300UL) // Maximum stabilization time to wait after LVD1 is enabled. +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_4_29V) // Typical higher bound of the detection threshold for LVD2. +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_3_84V) // Typical lower bound of the detection threshold for LVD2. +#define BSP_FEATURE_LVD_MONITOR_2_STABILIZATION_TIME_US (300UL) // Maximum stabilization time to wait after LVD2 is enabled. +#define BSP_FEATURE_LVD_MONITOR_MASK (0x03UL) // Mask of programmable monitors. +#define BSP_FEATURE_LVD_SUPPORT_RESET_ON_RISING_EDGE (0UL) // Voltage monitors support rising edge detections (i.e. +#define BSP_FEATURE_LVD_VBAT_STABILIZATION_TIME_US (0UL) // Detection delay time for EXLVDVBAT pin input. +#define BSP_FEATURE_LVD_VERSION (1UL) // Version of the LVD peripheral. +#define BSP_FEATURE_LVD_VRTC_LVL_STABILIZATION_TIME_US (0UL) // Stabilization wait time after writing to VRTLVDCR.LVL. +#define BSP_FEATURE_LVD_VRTC_STABILIZATION_TIME_US (0UL) // Detection delay time for VRTC pin input. + +#define BSP_FEATURE_MACL_SUPPORTED (0UL) // On-chip multiplier and multiply-accumulator is available. + +#define BSP_FEATURE_MIPI_CSI_IS_AVAILABLE (0UL) + +#define BSP_FEATURE_MIPI_DSI_IS_AVAILABLE (0UL) + +#define BSP_FEATURE_MIPI_PHY_IS_AVAILABLE (0UL) + +#define BSP_FEATURE_MRAM_IS_AVAILABLE (0UL) +#define BSP_FEATURE_MRAM_PROGRAMMING_SIZE_BYTES (0UL) // Feature not available on this device. + +#define BSP_FEATURE_OPAMP_IS_AVAILABLE (1UL) +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (2UL) // Width of the AMPSP bit-field. +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (1UL) // The op-amp has middle-speed capabilities. +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (1UL) // Op-amp input/output can be switched between different input/output combinations. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (4UL) // Minimum wait time required after turn on for high-speed mode, in microseconds. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (220UL) // Minimum wait time required after turn on for low power mode, in microseconds. +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (10UL) // Minimum wait time required after turn on for middle-speed mode, in microseconds. +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (1UL) // User configurable input offset trimming is available. +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0x07UL) // Mask of valid op-amp channels. + +#define BSP_FEATURE_OSPI_IS_AVAILABLE (0UL) +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_OSPI_B_IS_AVAILABLE (0UL) +#define BSP_FEATURE_OSPI_B_DEVICE_0_START_ADDRESS (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_OSPI_B_DEVICE_1_START_ADDRESS (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_OSPI_B_UNIT_COUNT (0UL) // Feature not available on this device. + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0x03UL) // Mask of valid channels for POEG. +#define BSP_FEATURE_POEG_HAS_POEGG_DERRST (0UL) // Indicates POEGG.DERRSTn registers are available. + +#define BSP_FEATURE_QSPI_IS_AVAILABLE (0UL) +#define BSP_FEATURE_QSPI_DEVICE_START_ADDRESS (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_RSIP_AES_B_SUPPORTED (0UL) // The device supports cryptography using AES_B. +#define BSP_FEATURE_RSIP_AES_SUPPORTED (1UL) // The device supports cryptography using AES. +#define BSP_FEATURE_RSIP_RSIP_E11A_SUPPORTED (0UL) // The device supports cryptography using RSIP-E11A. +#define BSP_FEATURE_RSIP_RSIP_E31A_SUPPORTED (0UL) // The device supports cryptography using RSIP-E31A. +#define BSP_FEATURE_RSIP_RSIP_E50D_SUPPORTED (0UL) // The device supports cryptography using RSIP-E50D. +#define BSP_FEATURE_RSIP_RSIP_E51A_SUPPORTED (0UL) // The device supports cryptography using RSIP-E51A. +#define BSP_FEATURE_RSIP_SCE5_SUPPORTED (0UL) // The device supports cryptography using SCE5. +#define BSP_FEATURE_RSIP_SCE5B_SUPPORTED (0UL) // The device supports cryptography using SCE5B. +#define BSP_FEATURE_RSIP_SCE7_SUPPORTED (0UL) // The device supports cryptography using SCE7. +#define BSP_FEATURE_RSIP_SCE9_SUPPORTED (0UL) // The device supports cryptography using SCE9. +#define BSP_FEATURE_RSIP_TRNG_SUPPORTED (0UL) // The device supports a TRNG module. + +#define BSP_FEATURE_RTC_IS_AVAILABLE (1UL) +#define BSP_FEATURE_RTC_HAS_ALARM1 (0UL) // Alarm 1 is available. +#define BSP_FEATURE_RTC_HAS_RADJ_ADJ6 (0UL) // ADJ6 is appended to upper part of RADJ.ADJ[0:5] as ADJ[6]. +#define BSP_FEATURE_RTC_HAS_ROPSEL (0UL) // The RCR4.ROPSEL field is available. +#define BSP_FEATURE_RTC_HAS_TCEN (0UL) // Timer capture is available. +#define BSP_FEATURE_RTC_IS_IRTC (0UL) // RTC has a separate power domain (VRTC) for the sub-clock oscillator and RTC peripheral. +#define BSP_FEATURE_RTC_RTCCR_CHANNELS (0UL) // Number of RTCCRn registers that are available. + +#define BSP_FEATURE_SAU_IS_AVAILABLE (0UL) +#define BSP_FEATURE_SAU_UART_VALID_CHANNEL_MASK (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_SCI_IS_AVAILABLE (1UL) +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (0x0203UL) // Mask of channels with data compare match (DCCR) available. +#define BSP_FEATURE_SCI_CHANNELS (0x0203UL) // Mask of available SCI channels. +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKB) // Clock source routed to the SCI peripherals. +#define BSP_FEATURE_SCI_IRDA_CHANNEL_MASK (0x00UL) // Mask of channels that support IrDA. +#define BSP_FEATURE_SCI_IRDA_SUPPORTED (0UL) // Indicates IrDA is supported on at least one SCI channel. +#define BSP_FEATURE_SCI_LIN_CHANNELS (0x00UL) // Mask of channels that can support LIN. +#define BSP_FEATURE_SCI_SPI_SCKSEL_VALUE (0UL) // Mask indicating CCR4.SCKSEL is available. +#define BSP_FEATURE_SCI_UART_ABCSE_RESTRICTED_CHANNELS (0x00UL) // List of channels that do not support ABCSE functionality. +#define BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS (0x00UL) // Mask of channels which support CTS external pins. +#define BSP_FEATURE_SCI_UART_DE_IS_INVERTED (0UL) // Indicates the PSEL value used to enable `DEn` output signal is opposite compared to other MCUs. +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x01UL) // Mask of channels which support the UART FIFO. +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16UL) // Depth of the UART FIFO if available. +#define BSP_FEATURE_SCI_VERSION (1UL) // Version of the SCI peripheral. + +#define BSP_FEATURE_SDHI_IS_AVAILABLE (0UL) +#define BSP_FEATURE_SDHI_CLOCK (FSP_PRIV_CLOCK_UNUSED) // Feature not available on this device. +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0UL) // Feature not available on this device. +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0UL) // Feature not available on this device. +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0UL) // Feature not available on this device. +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x00UL) // Start address of the external address space for SDRAM memory. + +#define BSP_FEATURE_SLCDC_IS_AVAILABLE (0UL) +#define BSP_FEATURE_SLCDC_CONTRAST_MAX (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_CONTRAST_MAX_4BIAS (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_HAS_VL1SEL (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_HAS_VLCD_MDSET2 (0UL) // Feature not available on this device. +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0UL) // Feature not available on this device. + +#define BSP_FEATURE_SPI_IS_AVAILABLE (1UL) +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKB) // Clock source for SPI peripherals. +#define BSP_FEATURE_SPI_HAS_SPCR3 (0UL) // SPCR3 register is available. +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (0UL) // SPCMDn.SSLKP field is available. +#define BSP_FEATURE_SPI_MAX_CHANNEL (2UL) // Number of available SPI channels. +#define BSP_FEATURE_SPI_SSL_LEVEL_KEEP_VALID_CHANNEL_MASK (0x00UL) // Mask of channel indices that support SSL Level Keep. + +#define BSP_FEATURE_SRAM_HAS_EXTRA_SRAMSABAR (0UL) // Flag indicating that SRAMSABAR2 and SRAMSABAR3 are present. +#define BSP_FEATURE_SRAM_SRAMWTSC_WAIT_CYCLE_ENABLE (0x00UL) // Mask of bits needed to enable SRAM wait for all regions. + +#define BSP_FEATURE_SSI_IS_AVAILABLE (0UL) +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (0UL) // Feature not available on this device. +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (0UL) // Feature not available on this device. + +#define BSP_FEATURE_SYSC_HAS_VBTICTLR (0UL) // System supports VBATT input control to the RTC. + +#define BSP_FEATURE_TAU_IS_AVAILABLE (0UL) +#define BSP_FEATURE_TAU_VALID_CHANNEL_MASK (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_TFU_IS_AVAILABLE (0UL) +#define BSP_FEATURE_TFU_SUPPORTED (0UL) // Feature not available on this device. + +#define BSP_FEATURE_TML_IS_AVAILABLE (0UL) +#define BSP_FEATURE_TML_MAX_CLOCK_DIVIDER (0UL) // Feature not available on this device. +#define BSP_FEATURE_TML_NUM_CHANNELS (0UL) // Feature not available on this device. +#define BSP_FEATURE_TML_VALID_CHANNEL_MASK (0x00UL) // Feature not available on this device. + +#define BSP_FEATURE_TRNG_HAS_MODULE_STOP (1UL) // A module stop control is available for TRNG. + +#define BSP_FEATURE_TSN_IS_AVAILABLE (1UL) +#define BSP_FEATURE_TSN_CALIBRATION_AVAILABLE (1UL) // Determine if the temperature sensor supports calibration, either factory or runtime. +#define BSP_FEATURE_TSN_CALIBRATION32_AVAILABLE (0UL) // Determine if TSCDR is available for TSN. +#define BSP_FEATURE_TSN_CALIBRATION32_MASK (0x00UL) // Mask of valid bits for TSN calibration. +#define BSP_FEATURE_TSN_CONTROL_AVAILABLE (0UL) // Determine if the TSCR register is present. +#define BSP_FEATURE_TSN_HAS_LOW_TEMP_REG (0UL) // Determine if the TSCDRL (Low Temperature) is present. +#define BSP_FEATURE_TSN_HAS_ROOM_TEMP_REG (0UL) // Determine if the TSCDRR (Room Temperature) is present. +#define BSP_FEATURE_TSN_SLOPE (-3650LL) // Typical slope for the temperature sensor, in uV/degC. + +#define BSP_FEATURE_TZ_IS_AVAILABLE (0UL) +#define BSP_FEATURE_TZ_HAS_DLM (0UL) // Feature not available on this device. +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (0UL) // Feature not available on this device. +#define BSP_FEATURE_TZ_NS_OFFSET (0x00UL) // Feature not available on this device. +#define BSP_FEATURE_TZ_VERSION (0UL) // Feature not available on this device. + +#define BSP_FEATURE_UARTA_IS_AVAILABLE (0UL) +#define BSP_FEATURE_UARTA_HAS_CLOCK_OUTPUT (0UL) // Feature not available on this device. +#define BSP_FEATURE_UARTA_MSTP_OFFSET (0UL) // Feature not available on this device. +#define BSP_FEATURE_UARTA_PCLK_RESTRICTION (0UL) // Feature not available on this device. + +#define BSP_FEATURE_ULPT_IS_AVAILABLE (0UL) +#define BSP_FEATURE_ULPT_MAX_CHANNEL_NUM (0UL) // Feature not available on this device. +#define BSP_FEATURE_ULPT_VALID_CHANNEL_MASK (0UL) // Feature not available on this device. + +#define BSP_FEATURE_USB_IS_AVAILABLE (1UL) +#define BSP_FEATURE_USB_HAS_NOT_HOST (1UL) // Indicates that USB Host mode is not available. +#define BSP_FEATURE_USB_HAS_PIPE04567 (1UL) // USB peripheral only has pipes 0, 4, 5, 6, and 7. +#define BSP_FEATURE_USB_HAS_TYPEC (0UL) // Supports USB-C control specifications. +#define BSP_FEATURE_USB_HAS_USBFS (1UL) // Supports USB 2.0 Full-Speed mode. +#define BSP_FEATURE_USB_HAS_USBFS_BC (1UL) // Supports battery charging in full-speed mode. +#define BSP_FEATURE_USB_HAS_USBHS (0UL) // Supports USB 2.0 High-Speed mode. +#define BSP_FEATURE_USB_HAS_USBHS_BC (0UL) // Supports battery charging in high-speed mode. +#define BSP_FEATURE_USB_HAS_USBLS_PERI (1UL) // Supports low-speed connections in device controller mode. +#define BSP_FEATURE_USB_REG_PHYSECTRL_CNEN (0UL) // Indicates the PHYSECTRL.CNEN field is available. +#define BSP_FEATURE_USB_REG_PHYSLEW (0UL) // Indicates the PHYSLEW register is available. +#define BSP_FEATURE_USB_REG_PHYSLEW_VALUE (0x00UL) // Reset value of the PHYSLEW register. +#define BSP_FEATURE_USB_REG_UCKSEL_UCKSELC (1UL) // Indicates the UCKSEL.UCKSELC bit field is available. +#define BSP_FEATURE_USB_REG_USBMC_VDCEN (1UL) // Indicates the USBMC.VDCEN bit field is available. +#define BSP_FEATURE_USB_REG_USBMC_VDDUSBE (1UL) // Indicates the USBMC.VDDUSBE bit field is available. + +#define BSP_FEATURE_VIN_IS_AVAILABLE (0UL) + +// *UNCRUSTIFY-ON* + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c new file mode 100644 index 00000000000..3c4a6738462 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_linker.c @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#include "bsp_api.h" + +/* UNCRUSTIFY-OFF */ + +/* boot loaded applications cannot set ofs registers (only do so in the boot loader) */ +#ifndef BSP_BOOTLOADED_APPLICATION +/** configuration register output to sections */ +#if defined BSP_CFG_OPTION_SETTING_OFS0 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs0") g_bsp_cfg_option_setting_ofs0[] = {BSP_CFG_OPTION_SETTING_OFS0}; +#endif +#if defined BSP_CFG_OPTION_SETTING_OFS1 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1") g_bsp_cfg_option_setting_ofs1[] = {BSP_CFG_OPTION_SETTING_OFS1}; +#endif +#if defined BSP_CFG_OPTION_SETTING_SECMPU +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_secmpu") g_bsp_cfg_option_setting_secmpu[] = {BSP_CFG_OPTION_SETTING_SECMPU}; +#endif +#if defined BSP_CFG_OPTION_SETTING_OSIS +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_osis") g_bsp_cfg_option_setting_osis[] = {BSP_CFG_OPTION_SETTING_OSIS}; +#endif +#endif // BSP_BOOTLOADED_APPLICATION + +/******************************/ +/* the init tables are located in bsp_linker_info.h */ +#define BSP_LINKER_C +#include "bsp_linker_info.h" + +/* UNCRUSTIFY-ON */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h new file mode 100644 index 00000000000..20b54e11fb8 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BSP_MCU + * @defgroup BSP_MCU_RA2A1 RA2A1 + * @includedoc config_bsp_ra2a1_fsp.html + * @{ + **********************************************************************************************************************/ + +#ifndef BSP_MCU_INFO_H +#define BSP_MCU_INFO_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/* BSP MCU Specific Includes. */ +#include "bsp_elc.h" +#include "bsp_feature.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef elc_event_t bsp_interrupt_event_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif + +/** @} (end defgroup BSP_MCU_RA2A1) */ diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h new file mode 100644 index 00000000000..aa0b80131a7 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h @@ -0,0 +1,61 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RA2A1 + * @{ + **********************************************************************************************************************/ + +/** @} (end addtogroup BSP_MCU_RA2A1) */ + +#ifndef BSP_OVERRIDE_H +#define BSP_OVERRIDE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* Define overrides required for this MCU. */ +#define BSP_OVERRIDE_LPM_SNOOZE_REQUEST_T + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/** Snooze request sources */ +typedef enum e_lpm_snooze_request +{ + LPM_SNOOZE_REQUEST_RXD0_FALLING = 0x00000000ULL, ///< Enable RXD0 falling edge snooze request + LPM_SNOOZE_REQUEST_IRQ0 = 0x00000001ULL, ///< Enable IRQ0 pin snooze request + LPM_SNOOZE_REQUEST_IRQ1 = 0x00000002ULL, ///< Enable IRQ1 pin snooze request + LPM_SNOOZE_REQUEST_IRQ2 = 0x00000004ULL, ///< Enable IRQ2 pin snooze request + LPM_SNOOZE_REQUEST_IRQ3 = 0x00000008ULL, ///< Enable IRQ3 pin snooze request + LPM_SNOOZE_REQUEST_IRQ4 = 0x00000010ULL, ///< Enable IRQ4 pin snooze request + LPM_SNOOZE_REQUEST_IRQ5 = 0x00000020ULL, ///< Enable IRQ5 pin snooze request + LPM_SNOOZE_REQUEST_IRQ6 = 0x00000040ULL, ///< Enable IRQ6 pin snooze request + LPM_SNOOZE_REQUEST_IRQ7 = 0x00000080ULL, ///< Enable IRQ7 pin snooze request + LPM_SNOOZE_REQUEST_KEY = 0x00020000ULL, ///< Enable KR snooze request + LPM_SNOOZE_REQUEST_ACMPLP0 = 0x00800000ULL, ///< Enable Low-speed analog comparator 0 snooze request + LPM_SNOOZE_REQUEST_RTC_ALARM = 0x01000000ULL, ///< Enable RTC alarm snooze request + LPM_SNOOZE_REQUEST_RTC_PERIOD = 0x02000000ULL, ///< Enable RTC period snooze request + LPM_SNOOZE_REQUEST_AGT1_UNDERFLOW = 0x10000000ULL, ///< Enable AGT1 underflow snooze request + LPM_SNOOZE_REQUEST_AGT1_COMPARE_A = 0x20000000ULL, ///< Enable AGT1 compare match A snooze request + LPM_SNOOZE_REQUEST_AGT1_COMPARE_B = 0x40000000ULL, ///< Enable AGT1 compare match B snooze request +} lpm_snooze_request_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h new file mode 100644 index 00000000000..0202e952160 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/bsp/mcu/ra2a1/bsp_peripheral.h @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * + * AUTOGENERATED FILE. DO NOT EDIT. + * + **********************************************************************************************************************/ + +#ifndef BSP_PERIPHERAL_H +#define BSP_PERIPHERAL_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +// *UNCRUSTIFY-OFF* + +#define BSP_PERIPHERAL_ACMP_PRESENT (1) +#define BSP_PERIPHERAL_ACMPHS_PRESENT (1) +#define BSP_PERIPHERAL_ACMPHS_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_ACMPHS_B_PRESENT (0) +#define BSP_PERIPHERAL_ACMPHS_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ACMPLP_PRESENT (1) +#define BSP_PERIPHERAL_ACMPLP_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_ADC_PRESENT (1) +#define BSP_PERIPHERAL_ADC_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_ADC_B_PRESENT (0) +#define BSP_PERIPHERAL_ADC_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ADC_D_PRESENT (0) +#define BSP_PERIPHERAL_ADC_D_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_AGT_PRESENT (1) +#define BSP_PERIPHERAL_AGT_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_AGTW_PRESENT (0) +#define BSP_PERIPHERAL_AGTW_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_AMI_PRESENT (0) +#define BSP_PERIPHERAL_ANALOG_PRESENT (1) +#define BSP_PERIPHERAL_BUS_PRESENT (1) +#define BSP_PERIPHERAL_CAC_PRESENT (1) +#define BSP_PERIPHERAL_CACHE_PRESENT (0) +#define BSP_PERIPHERAL_CAN_PRESENT (1) +#define BSP_PERIPHERAL_CAN_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_CANFD_PRESENT (0) +#define BSP_PERIPHERAL_CANFD_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_CEC_PRESENT (0) +#define BSP_PERIPHERAL_CEU_PRESENT (0) +#define BSP_PERIPHERAL_CGC_PRESENT (1) +#define BSP_PERIPHERAL_CPSCU_PRESENT (0) +#define BSP_PERIPHERAL_CPU_CTRL_PRESENT (0) +#define BSP_PERIPHERAL_CRC_PRESENT (1) +#define BSP_PERIPHERAL_CTSU_PRESENT (1) +#define BSP_PERIPHERAL_DAC_PRESENT (1) +#define BSP_PERIPHERAL_DAC_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_DAC_B_PRESENT (0) +#define BSP_PERIPHERAL_DAC_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_DAC8_PRESENT (1) +#define BSP_PERIPHERAL_DAC8_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_DAC12_PRESENT (1) +#define BSP_PERIPHERAL_DAC12_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_DEBUG_PRESENT (1) +#define BSP_PERIPHERAL_DMA_PRESENT (0) +#define BSP_PERIPHERAL_DMA_DMAC_PRESENT (0) +#define BSP_PERIPHERAL_DMA_DMAC_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_DOC_PRESENT (1) +#define BSP_PERIPHERAL_DOC_B_PRESENT (0) +#define BSP_PERIPHERAL_DRW_PRESENT (0) +#define BSP_PERIPHERAL_DTC_PRESENT (1) +#define BSP_PERIPHERAL_ECCAFL_PRESENT (0) +#define BSP_PERIPHERAL_ECCAFL_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ECCMB_PRESENT (0) +#define BSP_PERIPHERAL_ECCMB_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ELC_PRESENT (1) +#define BSP_PERIPHERAL_ELC_B_PRESENT (0) +#define BSP_PERIPHERAL_ESWM_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ETHERC_EDMAC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EDMAC_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ETHERC_EPTPC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EPTPC_CFG_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_MII_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_MII_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ETHERC_RMII_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_RMII_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_FACI_PRESENT (0) +#define BSP_PERIPHERAL_FCACHE_PRESENT (1) +#define BSP_PERIPHERAL_FLAD_PRESENT (0) +#define BSP_PERIPHERAL_FLASH_PRESENT (1) +#define BSP_PERIPHERAL_FLASH_HP_PRESENT (0) +#define BSP_PERIPHERAL_FLASH_LP_PRESENT (1) +#define BSP_PERIPHERAL_GLCDC_PRESENT (0) +#define BSP_PERIPHERAL_GPT_PRESENT (1) +#define BSP_PERIPHERAL_GPT_CHANNEL_MASK (0x7FU) +#define BSP_PERIPHERAL_GPT_GTCLK_PRESENT (0) +#define BSP_PERIPHERAL_GPT_ODC_PRESENT (0) +#define BSP_PERIPHERAL_GPT_ODC_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_GPT_OPS_PRESENT (1) +#define BSP_PERIPHERAL_GPT_POEG_PRESENT (1) +#define BSP_PERIPHERAL_GPT_POEG_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_I3C_PRESENT (0) +#define BSP_PERIPHERAL_I3C_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ICU_PRESENT (1) +#define BSP_PERIPHERAL_ICU_EXT_IRQ_PRESENT (1) +#define BSP_PERIPHERAL_ICU_EXT_IRQ_CHANNEL_MASK (0xFFU) +#define BSP_PERIPHERAL_IIC_PRESENT (1) +#define BSP_PERIPHERAL_IIC_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_IIC_B_PRESENT (0) +#define BSP_PERIPHERAL_IIC_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_IIC0WU_PRESENT (0) +#define BSP_PERIPHERAL_IIC0WU_B_PRESENT (0) +#define BSP_PERIPHERAL_IICA_PRESENT (0) +#define BSP_PERIPHERAL_IICA_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_IIRFA_PRESENT (0) +#define BSP_PERIPHERAL_IIRFA_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_IPC_PRESENT (0) +#define BSP_PERIPHERAL_IRDA_PRESENT (0) +#define BSP_PERIPHERAL_IRTC_PRESENT (0) +#define BSP_PERIPHERAL_IWDT_PRESENT (1) +#define BSP_PERIPHERAL_JPEG_PRESENT (0) +#define BSP_PERIPHERAL_KINT_PRESENT (1) +#define BSP_PERIPHERAL_KINT_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_MACL_PRESENT (0) +#define BSP_PERIPHERAL_MIPI_CSI_PRESENT (0) +#define BSP_PERIPHERAL_MIPI_DSI_PRESENT (0) +#define BSP_PERIPHERAL_MIPI_PHY_PRESENT (0) +#define BSP_PERIPHERAL_MMF_PRESENT (1) +#define BSP_PERIPHERAL_MPU_PRESENT (1) +#define BSP_PERIPHERAL_MPU_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_MRMS_PRESENT (0) +#define BSP_PERIPHERAL_MRRGE_PRESENT (0) +#define BSP_PERIPHERAL_MSTP_PRESENT (1) +#define BSP_PERIPHERAL_NPU_PRESENT (0) +#define BSP_PERIPHERAL_OCD_PRESENT (0) +#define BSP_PERIPHERAL_OPAMP_PRESENT (1) +#define BSP_PERIPHERAL_OPAMP_CHANNEL_MASK (0x7U) +#define BSP_PERIPHERAL_OSPI_PRESENT (0) +#define BSP_PERIPHERAL_OSPI_B_PRESENT (0) +#define BSP_PERIPHERAL_OSPI_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_PCLBUZ_PRESENT (0) +#define BSP_PERIPHERAL_PDC_PRESENT (0) +#define BSP_PERIPHERAL_PDM_PRESENT (0) +#define BSP_PERIPHERAL_PDM_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_PFS_PRESENT (1) +#define BSP_PERIPHERAL_PFS_B_PRESENT (0) +#define BSP_PERIPHERAL_PMISC_PRESENT (1) +#define BSP_PERIPHERAL_PORGA_PRESENT (0) +#define BSP_PERIPHERAL_PORT_PRESENT (1) +#define BSP_PERIPHERAL_PORT_CHANNEL_MASK (0x23FU) +#define BSP_PERIPHERAL_PSCU_PRESENT (0) +#define BSP_PERIPHERAL_PTPEDMAC_PRESENT (0) +#define BSP_PERIPHERAL_QSPI_PRESENT (0) +#define BSP_PERIPHERAL_RADIO_PRESENT (0) +#define BSP_PERIPHERAL_RSIP_PRESENT (1) +#define BSP_PERIPHERAL_RTC_PRESENT (1) +#define BSP_PERIPHERAL_RTC_C_PRESENT (0) +#define BSP_PERIPHERAL_SAU_PRESENT (0) +#define BSP_PERIPHERAL_SAU_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SAU_I2C_PRESENT (0) +#define BSP_PERIPHERAL_SAU_I2C_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SAU_SPI_PRESENT (0) +#define BSP_PERIPHERAL_SAU_SPI_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SAU_UART_PRESENT (0) +#define BSP_PERIPHERAL_SAU_UART_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SCI_PRESENT (1) +#define BSP_PERIPHERAL_SCI_CHANNEL_MASK (0x203U) +#define BSP_PERIPHERAL_SCI_B_PRESENT (0) +#define BSP_PERIPHERAL_SCI_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SDADC_PRESENT (1) +#define BSP_PERIPHERAL_SDADC_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_SDADC_B_PRESENT (0) +#define BSP_PERIPHERAL_SDADC_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SDHI_PRESENT (0) +#define BSP_PERIPHERAL_SDHI_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SLCDC_PRESENT (0) +#define BSP_PERIPHERAL_SPI_PRESENT (1) +#define BSP_PERIPHERAL_SPI_CHANNEL_MASK (0x3U) +#define BSP_PERIPHERAL_SPI_B_PRESENT (0) +#define BSP_PERIPHERAL_SPI_B_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SPMON_PRESENT (1) +#define BSP_PERIPHERAL_SRAM_PRESENT (1) +#define BSP_PERIPHERAL_SRC_PRESENT (0) +#define BSP_PERIPHERAL_SRCRAM_PRESENT (0) +#define BSP_PERIPHERAL_SSI_COMMON_PRESENT (0) +#define BSP_PERIPHERAL_SSIE_PRESENT (0) +#define BSP_PERIPHERAL_SSIE_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_SYSTEM_PRESENT (1) +#define BSP_PERIPHERAL_TAU_PRESENT (0) +#define BSP_PERIPHERAL_TAU_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_TFU_PRESENT (0) +#define BSP_PERIPHERAL_TML_PRESENT (0) +#define BSP_PERIPHERAL_TML_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_TRNG_PRESENT (0) +#define BSP_PERIPHERAL_TSD_PRESENT (0) +#define BSP_PERIPHERAL_TSN_PRESENT (1) +#define BSP_PERIPHERAL_TZF_PRESENT (0) +#define BSP_PERIPHERAL_UARTA_PRESENT (0) +#define BSP_PERIPHERAL_UARTA_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_UARTA_CK_PRESENT (0) +#define BSP_PERIPHERAL_UARTA_CK_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_ULPT_PRESENT (0) +#define BSP_PERIPHERAL_ULPT_CHANNEL_MASK (0x0U) +#define BSP_PERIPHERAL_USB_PRESENT (1) +#define BSP_PERIPHERAL_USB_CHANNEL_MASK (0x1U) +#define BSP_PERIPHERAL_USB_FS_PRESENT (1) +#define BSP_PERIPHERAL_USB_HS_PRESENT (0) +#define BSP_PERIPHERAL_USBCC_PRESENT (0) +#define BSP_PERIPHERAL_VIN_PRESENT (0) +#define BSP_PERIPHERAL_WDT_PRESENT (1) +#define BSP_PERIPHERAL_WDT_CHANNEL_MASK (0x1U) + +// *UNCRUSTIFY-ON* + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/r_ioport/r_ioport.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/r_ioport/r_ioport.c new file mode 100644 index 00000000000..c69e1085837 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/r_ioport/r_ioport.c @@ -0,0 +1,962 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include +#include "bsp_api.h" +#include "r_ioport.h" +#include "r_ioport_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/* "PORT" in ASCII, used to determine if the module is open */ +#define IOPORT_OPEN (0x504F5254U) +#define IOPORT_CLOSED (0x00000000U) + +/* Mask to get PSEL bitfield from PFS register. */ +#define BSP_PRV_PFS_PSEL_MASK (R_PFS_PORT_PIN_PmnPFS_PSEL_Msk) + +/* Shift to get pin 0 on a package in extended data. */ +#define IOPORT_PRV_EXISTS_B0_SHIFT (16UL) + +/* Mask to determine if any pins on port exist on this package. */ +#define IOPORT_PRV_PORT_EXISTS_MASK (0xFFFF0000U) + +/* Shift to get port in bsp_io_port_t and bsp_io_port_pin_t enums. */ +#define IOPORT_PRV_PORT_OFFSET (8U) + +#define IOPORT_PRV_PORT_BITS (0xFF00U) +#define IOPORT_PRV_PIN_BITS (0x00FFU) + +#define IOPORT_PRV_PCNTR_OFFSET 0x00000020U + +#define IOPORT_PRV_PERIPHERAL_FUNCTION (1U << 16) +#define IOPORT_PRV_CLEAR_BITS_MASK (0x1F01FCD5U) ///< Zero bits in mask must be written as zero to PFS register + +#define IOPORT_PRV_8BIT_MASK (0xFFU) +#define IOPORT_PRV_16BIT_MASK (0xFFFFU) +#define IOPORT_PRV_UPPER_16BIT_MASK (0xFFFF0000U) +#define IOPORT_PRV_PFENET_MASK (0x30U) + +#define IOPORT_PRV_SET_PWPR_PFSWE (0x40U) +#define IOPORT_PRV_SET_PWPR_BOWI (0x80U) + +#define IOPORT_PRV_PORT_ADDRESS(port_number) ((uint32_t) (R_PORT1 - R_PORT0) * (port_number) + R_PORT0) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ +static void r_ioport_pins_config(const ioport_cfg_t * p_cfg); + +static void r_ioport_hw_pin_event_output_data_write(bsp_io_port_t port, ioport_size_t pin, bsp_io_level_t pin_level); + +static void r_ioport_pfs_write(bsp_io_port_pin_t pin, uint32_t value); + +#if BSP_FEATURE_SYSC_HAS_VBTICTLR || BSP_FEATURE_RTC_HAS_TCEN +static void bsp_vbatt_init(ioport_cfg_t const * const p_pin_cfg); // Used internally by BSP + +#endif + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Global Variables + **********************************************************************************************************************/ + +/* IOPort Implementation of IOPort Driver */ +const ioport_api_t g_ioport_on_ioport = +{ + .open = R_IOPORT_Open, + .close = R_IOPORT_Close, + .pinsCfg = R_IOPORT_PinsCfg, + .pinCfg = R_IOPORT_PinCfg, + .pinEventInputRead = R_IOPORT_PinEventInputRead, + .pinEventOutputWrite = R_IOPORT_PinEventOutputWrite, + .pinRead = R_IOPORT_PinRead, + .pinWrite = R_IOPORT_PinWrite, + .portDirectionSet = R_IOPORT_PortDirectionSet, + .portEventInputRead = R_IOPORT_PortEventInputRead, + .portEventOutputWrite = R_IOPORT_PortEventOutputWrite, + .portRead = R_IOPORT_PortRead, + .portWrite = R_IOPORT_PortWrite, +}; + +#if BSP_FEATURE_SYSC_HAS_VBTICTLR || BSP_FEATURE_RTC_HAS_TCEN +static const bsp_io_port_pin_t g_vbatt_pins_input[] = +{ + BSP_IO_PORT_04_PIN_02, ///< Associated with VBTICTLR->VCH0INEN + BSP_IO_PORT_04_PIN_03, ///< Associated with VBTICTLR->VCH1INEN + BSP_IO_PORT_04_PIN_04 ///< Associated with VBTICTLR->VCH2INEN +}; +#endif + +/*******************************************************************************************************************//** + * @addtogroup IOPORT + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Initializes internal driver data, then calls pin configuration function to configure pins. + * + * @retval FSP_SUCCESS Pin configuration data written to PFS register(s) + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_ALREADY_OPEN Module is already open. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_Open (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_pin_cfg_data || 0 == p_cfg->number_of_pins); + FSP_ERROR_RETURN(IOPORT_OPEN != p_instance_ctrl->open, FSP_ERR_ALREADY_OPEN); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Set driver status to open */ + p_instance_ctrl->open = IOPORT_OPEN; + + r_ioport_pins_config(p_cfg); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Resets IOPORT registers. Implements @ref ioport_api_t::close + * + * @retval FSP_SUCCESS The IOPORT was successfully uninitialized + * @retval FSP_ERR_ASSERTION p_ctrl was NULL + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_Close (ioport_ctrl_t * const p_ctrl) +{ + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Set state to closed */ + p_instance_ctrl->open = IOPORT_CLOSED; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Configures the functions of multiple pins by loading configuration data into pin PFS registers. + * Implements @ref ioport_api_t::pinsCfg. + * + * This function initializes the supplied list of PmnPFS registers with the supplied values. This data can be generated + * by the Pins tab of the RA Configuration editor or manually by the developer. Different pin configurations can be + * loaded for different situations such as low power modes and testing. + * + * @retval FSP_SUCCESS Pin configuration data written to PFS register(s) + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinsCfg (ioport_ctrl_t * const p_ctrl, const ioport_cfg_t * p_cfg) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_cfg); + FSP_ASSERT(NULL != p_cfg->p_pin_cfg_data); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + r_ioport_pins_config(p_cfg); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Configures the settings of a pin. Implements @ref ioport_api_t::pinCfg. + * + * @retval FSP_SUCCESS Pin configured + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different pins. + * This function will change the configuration of the pin with the new configuration. For example it is not possible + * with this function to change the drive strength of a pin while leaving all the other pin settings unchanged. To + * achieve this the original settings with the required change will need to be written using this function. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinCfg (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, uint32_t cfg) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + +#if BSP_FEATURE_SYSC_HAS_VBTICTLR || BSP_FEATURE_RTC_HAS_TCEN + + /* Create temporary structure for handling VBATT pins. */ + ioport_cfg_t temp_cfg; + ioport_pin_cfg_t temp_pin_cfg; + + temp_pin_cfg.pin = pin; + temp_pin_cfg.pin_cfg = cfg; + + temp_cfg.number_of_pins = 1U; + temp_cfg.p_pin_cfg_data = &temp_pin_cfg; + + /* Handle any VBATT domain pin configuration. */ + bsp_vbatt_init(&temp_cfg); +#endif + + R_BSP_PinAccessEnable(); + + r_ioport_pfs_write(pin, cfg); + + R_BSP_PinAccessDisable(); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the level on a pin. Implements @ref ioport_api_t::pinRead. + * + * @retval FSP_SUCCESS Pin read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + * @note This function is re-entrant for different pins. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_value) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_pin_value); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + *p_pin_value = (bsp_io_level_t) R_BSP_PinRead(pin); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the value on an IO port. Implements @ref ioport_api_t::portRead. + * + * The specified port will be read, and the levels for all the pins will be returned. + * Each bit in the returned value corresponds to a pin on the port. For example, bit 7 corresponds + * to pin 7, bit 6 to pin 6, and so on. + * + * @retval FSP_SUCCESS Port read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * + * @note This function is re-entrant for different ports. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_port_value) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_port_value); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); +#if (3U == BSP_FEATURE_IOPORT_VERSION) + + /* Read current value of PIDR for the specified port */ + *p_port_value = p_ioport_regs->PIDR; +#else + + /* Read current value of PCNTR2 register for the specified port */ + *p_port_value = p_ioport_regs->PCNTR2 & IOPORT_PRV_16BIT_MASK; +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Writes to multiple pins on a port. Implements @ref ioport_api_t::portWrite. + * + * The input value will be written to the specified port. Each bit in the value parameter corresponds to a bit + * on the port. For example, bit 7 corresponds to pin 7, bit 6 to pin 6, and so on. + * Each bit in the mask parameter corresponds to a pin on the port. + * + * Only the bits with the corresponding bit in the mask value set will be updated. + * For example, value = 0xFFFF, mask = 0x0003 results in only bits 0 and 1 being updated. + * + * @retval FSP_SUCCESS Port written to + * @retval FSP_ERR_INVALID_ARGUMENT The port and/or mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different ports. This function makes use of the PCNTR3 register to atomically + * modify the levels on the specified pins on a port. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t value, ioport_size_t mask) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + ioport_size_t setbits; + ioport_size_t clrbits; + + /* High bits */ + setbits = value & mask; + + /* Low bits */ + /* Cast to ensure size */ + clrbits = (ioport_size_t) ((~value) & mask); + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); + +#if (3U == BSP_FEATURE_IOPORT_VERSION) + + /* Reset data in PORR, set data in POSR register */ + p_ioport_regs->PORR = (uint16_t) clrbits; + p_ioport_regs->POSR = (uint16_t) setbits; +#else + + /* PCNTR3 register: lower word = set data, upper word = reset_data */ + p_ioport_regs->PCNTR3 = (uint32_t) (((uint32_t) clrbits << 16) | setbits); +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Sets a pin's output either high or low. Implements @ref ioport_api_t::pinWrite. + * + * @retval FSP_SUCCESS Pin written to + * @retval FSP_ERR_INVALID_ARGUMENT The pin and/or level not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different pins. This function makes use of the PCNTR3 register to atomically + * modify the level on the specified pin on a port. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t level) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(level <= BSP_IO_LEVEL_HIGH, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + ioport_size_t setbits = 0U; + ioport_size_t clrbits = 0U; + bsp_io_port_t port = (bsp_io_port_t) (IOPORT_PRV_PORT_BITS & (ioport_size_t) pin); + + ioport_size_t shift = IOPORT_PRV_PIN_BITS & (ioport_size_t) pin; + ioport_size_t pin_mask = (ioport_size_t) (1U << shift); + + if (BSP_IO_LEVEL_LOW == level) + { + clrbits = pin_mask; + } + else + { + setbits = pin_mask; + } + + /* PCNTR register is updated instead of using PFS as access is atomic and PFS requires separate enable/disable + * using PWPR register */ + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); +#if (3U == BSP_FEATURE_IOPORT_VERSION) + + /* Reset data in PORR, set data in POSR register */ + p_ioport_regs->PORR = (uint16_t) clrbits; + p_ioport_regs->POSR = (uint16_t) setbits; +#else + + /* PCNTR3 register: lower word = set data, upper word = reset_data */ + p_ioport_regs->PCNTR3 = (uint32_t) (((uint32_t) clrbits << 16) | setbits); +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Sets the direction of individual pins on a port. Implements @ref ioport_api_t::portDirectionSet(). + * + * Multiple pins on a port can be set to inputs or outputs at once. + * Each bit in the mask parameter corresponds to a pin on the port. For example, bit 7 corresponds to + * pin 7, bit 6 to pin 6, and so on. If a bit is set to 1 then the corresponding pin will be changed to + * an input or an output as specified by the direction values. If a mask bit is set to 0 then the direction of + * the pin will not be changed. + * + * @retval FSP_SUCCESS Port direction updated + * @retval FSP_ERR_INVALID_ARGUMENT The port and/or mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different ports. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortDirectionSet (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t direction_values, + ioport_size_t mask) +{ + uint32_t orig_value; + uint32_t set_bits; + uint32_t clr_bits; + uint32_t write_value; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); +#if (3U == BSP_FEATURE_IOPORT_VERSION) + + /* Read current value of PDR register for the specified port */ + orig_value = p_ioport_regs->PDR; +#else + + /* Read current value of PCNTR1 register for the specified port */ + orig_value = p_ioport_regs->PCNTR1; +#endif + + /* High bits */ + set_bits = direction_values & mask; + + /* Low bits */ + /* Cast to ensure size */ + clr_bits = (uint32_t) ((~direction_values) & mask); + + /* New value to write to port direction register */ + write_value = orig_value; + write_value |= set_bits; + + /* Clear bits as needed */ + write_value &= ~clr_bits; +#if (3U == BSP_FEATURE_IOPORT_VERSION) + p_ioport_regs->PDR = (uint16_t) write_value; +#else + p_ioport_regs->PCNTR1 = write_value; +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Reads the value of the event input data. Implements @ref ioport_api_t::portEventInputRead(). + * + * The event input data for the port will be read. Each bit in the returned value corresponds to a pin on the port. + * For example, bit 7 corresponds to pin 7, bit 6 to pin 6, and so on. + * + * The port event data is captured in response to a trigger from the ELC. This function enables this data to be read. + * Using the event system allows the captured data to be stored when it occurs and then read back at a later time. + * + * @retval FSP_SUCCESS Port read + * @retval FSP_ERR_INVALID_ARGUMENT Port not a valid ELC port + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_UNSUPPORTED Function not supported. + * + * @note This function is re-entrant for different ports. + * + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_t port, ioport_size_t * p_event_data) +{ +#if (3U != BSP_FEATURE_IOPORT_VERSION) + #if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_event_data); + uint32_t port_number = port >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((BSP_FEATURE_IOPORT_ELC_PORTS & (1 << port_number)), FSP_ERR_INVALID_ARGUMENT); + #else + FSP_PARAMETER_NOT_USED(p_ctrl); + #endif + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS(port >> IOPORT_PRV_PORT_OFFSET & IOPORT_PRV_8BIT_MASK); + + /* Read current value of EIDR value from PCNTR2 register for the specified port */ + *p_event_data = p_ioport_regs->PCNTR2_b.EIDR; + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(port); + FSP_PARAMETER_NOT_USED(p_event_data); + + /* Return the unsupported error. */ + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Reads the value of the event input data of a specific pin. Implements @ref ioport_api_t::pinEventInputRead. + * + * The pin event data is captured in response to a trigger from the ELC. This function enables this data to be read. + * Using the event system allows the captured data to be stored when it occurs and then read back at a later time. + * + * @retval FSP_SUCCESS Pin read + * @retval FSP_ERR_ASSERTION NULL pointer + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_INVALID_ARGUMENT Port is not valid ELC PORT. + * @retval FSP_ERR_UNSUPPORTED Function not supported. + * + * @note This function is re-entrant. + * + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinEventInputRead (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t * p_pin_event) +{ +#if (3U != BSP_FEATURE_IOPORT_VERSION) + #if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ASSERT(NULL != p_pin_event); + uint32_t port_number = pin >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((BSP_FEATURE_IOPORT_ELC_PORTS & (1 << port_number)), FSP_ERR_INVALID_ARGUMENT); + #else + FSP_PARAMETER_NOT_USED(p_ctrl); + #endif + + ioport_size_t portvalue; + ioport_size_t mask; + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((pin >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); + + /* Read current value of EIDR value from PCNTR2 register for the specified port */ + portvalue = p_ioport_regs->PCNTR2_b.EIDR; + mask = (ioport_size_t) (1U << (IOPORT_PRV_PIN_BITS & (bsp_io_port_t) pin)); + + if ((portvalue & mask) == mask) + { + *p_pin_event = BSP_IO_LEVEL_HIGH; + } + else + { + *p_pin_event = BSP_IO_LEVEL_LOW; + } + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(p_ctrl); + FSP_PARAMETER_NOT_USED(pin); + FSP_PARAMETER_NOT_USED(p_pin_event); + + /* Return the unsupported error. */ + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * This function writes the set and reset event output data for a port. Implements + * @ref ioport_api_t::portEventOutputWrite. + * + * Using the event system enables a port state to be stored by this function in advance of being output on the port. + * The output to the port will occur when the ELC event occurs. + * + * The input value will be written to the specified port when an ELC event configured for that port occurs. + * Each bit in the value parameter corresponds to a bit on the port. For example, bit 7 corresponds to pin 7, + * bit 6 to pin 6, and so on. Each bit in the mask parameter corresponds to a pin on the port. + * + * @retval FSP_SUCCESS Port event data written + * @retval FSP_ERR_INVALID_ARGUMENT Port or Mask not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different ports. + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PortEventOutputWrite (ioport_ctrl_t * const p_ctrl, + bsp_io_port_t port, + ioport_size_t event_data, + ioport_size_t mask_value) +{ + ioport_size_t set_bits; + ioport_size_t reset_bits; + +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN(mask_value > (ioport_size_t) 0, FSP_ERR_INVALID_ARGUMENT); + uint32_t port_number = port >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((BSP_FEATURE_IOPORT_ELC_PORTS & (1 << port_number)), FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + set_bits = event_data & mask_value; + + /* Cast to ensure size */ + reset_bits = (ioport_size_t) ((~event_data) & mask_value); + + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); +#if (3U == BSP_FEATURE_IOPORT_VERSION) + + /* Reset data in EORR, set data in EOSR register */ + p_ioport_regs->EOSR = (uint16_t) set_bits; + p_ioport_regs->EORR = (uint16_t) reset_bits; +#else + + /* PCNTR4 register: lower word = set data, upper word = reset_data */ + p_ioport_regs->PCNTR4 = (uint32_t) (((uint32_t) reset_bits << 16) | set_bits); +#endif + + return FSP_SUCCESS; +} + +/**********************************************************************************************************************//** + * This function writes the event output data value to a pin. Implements @ref ioport_api_t::pinEventOutputWrite. + * + * Using the event system enables a pin state to be stored by this function in advance of being output on the pin. + * The output to the pin will occur when the ELC event occurs. + * + * @retval FSP_SUCCESS Pin event data written + * @retval FSP_ERR_INVALID_ARGUMENT Port or Pin or value not valid + * @retval FSP_ERR_NOT_OPEN The module has not been opened + * @retval FSP_ERR_ASSERTION NULL pointer + * + * @note This function is re-entrant for different ports. + * + **********************************************************************************************************************/ +fsp_err_t R_IOPORT_PinEventOutputWrite (ioport_ctrl_t * const p_ctrl, bsp_io_port_pin_t pin, bsp_io_level_t pin_value) +{ +#if (1 == IOPORT_CFG_PARAM_CHECKING_ENABLE) + ioport_instance_ctrl_t * p_instance_ctrl = (ioport_instance_ctrl_t *) p_ctrl; + FSP_ASSERT(NULL != p_instance_ctrl); + FSP_ERROR_RETURN(IOPORT_OPEN == p_instance_ctrl->open, FSP_ERR_NOT_OPEN); + FSP_ERROR_RETURN((pin_value == BSP_IO_LEVEL_HIGH) || (pin_value == BSP_IO_LEVEL_LOW), FSP_ERR_INVALID_ARGUMENT); + uint32_t port_number = pin >> IOPORT_PRV_PORT_OFFSET; + FSP_ERROR_RETURN((BSP_FEATURE_IOPORT_ELC_PORTS & (1 << port_number)), FSP_ERR_INVALID_ARGUMENT); +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif + + r_ioport_hw_pin_event_output_data_write((bsp_io_port_t) (pin & IOPORT_PRV_PORT_BITS), + (ioport_size_t) (pin & IOPORT_PRV_PIN_BITS), pin_value); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup IOPORT) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configures pins. + * + * @param[in] p_cfg Pin configuration data + **********************************************************************************************************************/ +void r_ioport_pins_config (const ioport_cfg_t * p_cfg) +{ +#if BSP_FEATURE_SYSC_HAS_VBTICTLR || BSP_FEATURE_RTC_HAS_TCEN + + /* Handle any VBATT domain pin configuration. */ + bsp_vbatt_init(p_cfg); +#endif + + uint16_t pin_count; + ioport_cfg_t * p_pin_data; + + p_pin_data = (ioport_cfg_t *) p_cfg; + + R_BSP_PinAccessEnable(); // Protect PWPR from re-entrancy + + for (pin_count = 0U; pin_count < p_pin_data->number_of_pins; pin_count++) + { + r_ioport_pfs_write(p_pin_data->p_pin_cfg_data[pin_count].pin, p_pin_data->p_pin_cfg_data[pin_count].pin_cfg); + } + + R_BSP_PinAccessDisable(); +} + +/*******************************************************************************************************************//** + * Writes the set and clear values on a pin of the port when an ELC event occurs. This allows accurate timing of + * pin output level. + * + * @param[in] port Port to read event data + * @param[in] pin Bit in the EORR/EOSR to be set + * @param[in] pin_level Event data for pin + **********************************************************************************************************************/ +static void r_ioport_hw_pin_event_output_data_write (bsp_io_port_t port, ioport_size_t pin, bsp_io_level_t pin_level) +{ + /* Get the port address */ + R_PORT0_Type * p_ioport_regs = IOPORT_PRV_PORT_ADDRESS((port >> IOPORT_PRV_PORT_OFFSET) & IOPORT_PRV_8BIT_MASK); + +#if (3U == BSP_FEATURE_IOPORT_VERSION) + uint16_t set_value_high = (uint16_t) (pin_level << pin); + uint16_t set_value_low = (uint16_t) ((!pin_level) << pin); + + /* Ensure the same bits are not set in both registers */ + p_ioport_regs->EORR &= ~set_value_high; + p_ioport_regs->EOSR = (p_ioport_regs->EOSR & ~set_value_low) | set_value_high; + p_ioport_regs->EORR |= set_value_low; +#else + uint32_t set_value = (uint32_t) (1 << pin); + + /* Read current value of PCNTR4 register */ + uint32_t port_value = p_ioport_regs->PCNTR4; + + if (BSP_IO_LEVEL_HIGH == pin_level) + { + /* To avoid setting bit high in both EOSR and EORR */ + port_value &= ~(set_value << 16); + + /* Set output high */ + port_value |= set_value; + } + else + { + /* To avoid setting bit high in both EOSR and EORR */ + port_value &= ~set_value; + + /* Set output low */ + port_value |= set_value << 16; + } + p_ioport_regs->PCNTR4 = port_value; +#endif +} + +/*******************************************************************************************************************//** + * Writes to the specified pin's PFS register + * + * @param[in] pin Pin to write PFS data for + * @param[in] value Value to be written to the PFS register + * + **********************************************************************************************************************/ +static void r_ioport_pfs_write (bsp_io_port_pin_t pin, uint32_t value) +{ +#if (3U != BSP_FEATURE_IOPORT_VERSION) + + /* PMR bits should be cleared before specifying PSEL. Reference section "20.7 Notes on the PmnPFS Register Setting" + * in the RA6M3 manual R01UH0886EJ0100. */ + if ((value & IOPORT_PRV_PERIPHERAL_FUNCTION) > 0) + { + /* Clear PMR */ + R_PFS->PORT[pin >> IOPORT_PRV_PORT_OFFSET].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS_b.PMR = 0; + + /* New config with PMR = 0 */ + R_PFS->PORT[pin >> IOPORT_PRV_PORT_OFFSET].PIN[pin & + BSP_IO_PRV_8BIT_MASK].PmnPFS = + (value & ~((uint32_t) IOPORT_PRV_PERIPHERAL_FUNCTION)); + } + + /* Write configuration */ + R_PFS->PORT[pin >> IOPORT_PRV_PORT_OFFSET].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = value; +#else + + /* Write configuration */ + R_PFS->PORT[pin >> IOPORT_PRV_PORT_OFFSET].PIN[pin & BSP_IO_PRV_8BIT_MASK].PmnPFS = (uint16_t) value; +#endif +} + +#if BSP_FEATURE_SYSC_HAS_VBTICTLR || BSP_FEATURE_RTC_HAS_TCEN + +/*******************************************************************************************************************//** + * @brief Initializes VBTICTLR register based on pin configuration. + * + * The VBTICTLR register may need to be modified based on the project's pin configuration. There is a set of pins that + * needs to be checked. If one of these pins is found in the pin configuration table then it will be tested to see if + * the appropriate VBTICTLR bit needs to be set or cleared. If one of the pins that is being searched for is not found + * then the accompanying VBTICTLR bit is left as-is. + **********************************************************************************************************************/ +static void bsp_vbatt_init (ioport_cfg_t const * const p_pin_cfg) +{ + uint32_t pin_index; + uint32_t vbatt_index; + + #if BSP_FEATURE_SYSC_HAS_VBTICTLR + R_SYSTEM_Type * p_system = R_SYSTEM; + #endif + #if BSP_FEATURE_RTC_HAS_TCEN + R_RTC_Type * p_rtc = R_RTC; + #endif + + #if BSP_TZ_SECURE_BUILD && BSP_FEATURE_TZ_NS_OFFSET > 0 + #if BSP_FEATURE_SYSC_HAS_VBTICTLR + if (1 == R_SYSTEM->BBFSAR_b.NONSEC2) + { + /* If security attribution of VBTICTLR is set to non-secure, then use the non-secure alias. */ + p_system = (R_SYSTEM_Type *) ((uint32_t) p_system | BSP_FEATURE_TZ_NS_OFFSET); + } + #endif + + #if BSP_FEATURE_RTC_HAS_TCEN + #if (BSP_FEATURE_TZ_NS_OFFSET == 0) + if (1 == R_PSCU->PSARE_b.PSARE2) + #else + if (1 == R_PSCU->PSARE_b.PSARE3) + #endif + { + /* If security attribution of RTC is set to non-secure, then use the non-secure alias. */ + p_rtc = (R_RTC_Type *) ((uint32_t) p_rtc | BSP_FEATURE_TZ_NS_OFFSET); + } + #endif + #endif + + /* Must loop over all pins as pin configuration table is unordered. */ + for (pin_index = 0U; pin_index < p_pin_cfg->number_of_pins; pin_index++) + { + /* Loop over VBATT input pins. */ + for (vbatt_index = 0U; + vbatt_index < (sizeof(g_vbatt_pins_input) / sizeof(g_vbatt_pins_input[0])); + vbatt_index++) + { + if (p_pin_cfg->p_pin_cfg_data[pin_index].pin == g_vbatt_pins_input[vbatt_index]) + { + /* Get PSEL value for pin. */ + uint32_t pfs_psel_value = p_pin_cfg->p_pin_cfg_data[pin_index].pin_cfg & BSP_PRV_PFS_PSEL_MASK; + + /* Check if pin is being used for RTC or AGT use. */ + if ((IOPORT_PERIPHERAL_AGT == pfs_psel_value) || (IOPORT_PERIPHERAL_CLKOUT_COMP_RTC == pfs_psel_value)) + { + /* Bit should be set to 1. */ + #if BSP_FEATURE_SYSC_HAS_VBTICTLR + #if BSP_TZ_NONSECURE_BUILD + if (0 == R_SYSTEM->BBFSAR_b.NONSEC2) + { + /* Do nothing: non secure build can't configure secure VBTICTLR register. */ + } + else + #endif + if (0 == (p_system->VBTICTLR & (uint8_t) (1U << vbatt_index))) + { + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + p_system->VBTICTLR |= (uint8_t) (1U << vbatt_index); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); + } + else + { + /* Do nothing: it is already enabled. */ + } + #endif + #if BSP_FEATURE_RTC_HAS_TCEN + #if BSP_TZ_NONSECURE_BUILD + #if (BSP_FEATURE_TZ_NS_OFFSET == 0) + if (0 == R_PSCU->PSARE_b.PSARE2) + #else + if (0 == R_PSCU->PSARE_b.PSARE3) + #endif + { + /* Do nothing: non secure build can't configure secure RTC registers. */ + } + else + #endif + { + if (0 == p_rtc->RTCCR[vbatt_index].RTCCR_b.TCEN) + { + p_rtc->RTCCR[vbatt_index].RTCCR_b.TCEN = 1; + R_BSP_SoftwareDelay(BSP_PRV_RTC_RESET_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + } + else + { + /* Do nothing: it is already enabled. */ + } + } + #endif + } + else + { + /* Bit should be cleared to 0. */ + #if BSP_FEATURE_SYSC_HAS_VBTICTLR + #if BSP_TZ_NONSECURE_BUILD + if (0 == R_SYSTEM->BBFSAR_b.NONSEC2) + { + /* Do nothing: non secure build can't configure secure VBTICTLR register. */ + } + else + #endif + if ((p_system->VBTICTLR & (uint8_t) (1U << vbatt_index)) > 0) + { + R_BSP_RegisterProtectDisable(BSP_REG_PROTECT_OM_LPC_BATT); + p_system->VBTICTLR &= (uint8_t) ~(1U << vbatt_index); + R_BSP_RegisterProtectEnable(BSP_REG_PROTECT_OM_LPC_BATT); + } + else + { + /* Do nothing: it is already disabled. */ + } + #endif + #if BSP_FEATURE_RTC_HAS_TCEN + #if BSP_TZ_NONSECURE_BUILD + #if (BSP_FEATURE_TZ_NS_OFFSET == 0) + if (0 == R_PSCU->PSARE_b.PSARE2) + #else + if (0 == R_PSCU->PSARE_b.PSARE3) + #endif + { + /* Do nothing: non secure build can't configure secure RTC registers. */ + } + else + #endif + { + if (p_rtc->RTCCR[vbatt_index].RTCCR_b.TCEN > 0) + { + p_rtc->RTCCR[vbatt_index].RTCCR_b.TCEN = 0; + R_BSP_SoftwareDelay(BSP_PRV_RTC_RESET_DELAY_US, BSP_DELAY_UNITS_MICROSECONDS); + } + else + { + /* Do nothing: it is already disabled. */ + } + } + #endif + } + } + } + } +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra/fsp/src/r_sci_uart/r_sci_uart.c b/bsp/renesas/ra2a1-ek/ra/fsp/src/r_sci_uart/r_sci_uart.c new file mode 100644 index 00000000000..26cd6c72ecf --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra/fsp/src/r_sci_uart/r_sci_uart.c @@ -0,0 +1,2029 @@ +/* +* Copyright (c) 2020 - 2025 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#include "r_sci_uart.h" +#include + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#ifndef SCI_UART_CFG_RX_ENABLE + #define SCI_UART_CFG_RX_ENABLE 1 +#endif +#ifndef SCI_UART_CFG_TX_ENABLE + #define SCI_UART_CFG_TX_ENABLE 1 +#endif + +/* Number of divisors in the data table used for baud rate calculation. */ +#define SCI_UART_NUM_DIVISORS_ASYNC (13U) + +/* Valid range of values for the modulation duty register is 128 - 256 (256 = modulation disabled). */ +#define SCI_UART_MDDR_MIN (128U) +#define SCI_UART_MDDR_MAX (256U) + +/* The bit rate register is 8-bits, so the maximum value is 255. */ +#define SCI_UART_BRR_MAX (255U) + +/* No limit to the number of bytes to read or write if DTC is not used. */ +#define SCI_UART_MAX_READ_WRITE_NO_DTC (0xFFFFFFFFU) + +/* Mask of invalid data bits in 9-bit mode. */ +#define SCI_UART_ALIGN_2_BYTES (0x1U) + +/* "SCIU" in ASCII. Used to determine if the control block is open. */ +#define SCI_UART_OPEN (0x53434955U) + +#define SCI_UART_SCMR_DEFAULT_VALUE (0xF2U) +#define SCI_UART_BRR_DEFAULT_VALUE (0xFFU) +#define SCI_UART_MDDR_DEFAULT_VALUE (0xFFU) +#define SCI_UART_FCR_DEFAULT_VALUE (0xF800) +#define SCI_UART_DCCR_DEFAULT_VALUE (0x40U) + +#define SCI_UART_FIFO_DAT_MASK (0x1FFU) + +#define FRDR_TDAT_MASK_9BITS (0x01FFU) +#define SPTR_SPB2D_BIT (1U) +#define SPTR_OUTPUT_ENABLE_MASK (0x04U) + +#define SCI_UART_SSR_FIFO_DR_RDF (0x41) + +#define SCI_UART_SPMR_CTSE_OFFSET (1U) + +/* SCI SCR register bit masks */ +#define SCI_SCR_TEIE_MASK (0x04U) ///< Transmit End Interrupt Enable +#define SCI_SCR_RE_MASK (0x10U) ///< Receive Enable +#define SCI_SCR_TE_MASK (0x20U) ///< Transmit Enable +#define SCI_SCR_RIE_MASK (0x40U) ///< Receive Interrupt Enable +#define SCI_SCR_TIE_MASK (0x80U) ///< Transmit Interrupt Enable + +/* SCI SEMR register bit offsets */ +#define SCI_UART_SEMR_BRME_OFFSET (2U) +#define SCI_UART_SEMR_ABCSE_OFFSET (3U) +#define SCI_UART_SEMR_ABCS_OFFSET (4U) +#define SCI_UART_SEMR_BGDM_OFFSET (6U) +#define SCI_UART_SEMR_BAUD_SETTING_MASK ((1U << SCI_UART_SEMR_BRME_OFFSET) | \ + (1U << SCI_UART_SEMR_ABCSE_OFFSET) | \ + (1U << SCI_UART_SEMR_ABCS_OFFSET) | (1U << SCI_UART_SEMR_BGDM_OFFSET)) + +/* SCI SMR register bit masks */ +#define SCI_SMR_CKS_VALUE_MASK (0x03U) ///< CKS: 2 bits + +/* SCI SSR register receiver error bit masks */ +#define SCI_SSR_ORER_MASK (0x20U) ///< overflow error +#define SCI_SSR_FER_MASK (0x10U) ///< framing error +#define SCI_SSR_PER_MASK (0x08U) ///< parity err +#define SCI_SSR_FIFO_RESERVED_MASK (0x02U) ///< Reserved bit mask for SSR_FIFO register +#define SCI_RCVR_ERR_MASK (SCI_SSR_ORER_MASK | SCI_SSR_FER_MASK | SCI_SSR_PER_MASK) + +#define SCI_REG_SIZE (R_SCI1_BASE - R_SCI0_BASE) + +#define SCI_UART_INVALID_8BIT_PARAM (0xFFU) +#define SCI_UART_INVALID_16BIT_PARAM (0xFFFFU) + +#define SCI_UART_DTC_MAX_TRANSFER (0x10000U) + +#define SCI_UART_FCR_TRIGGER_MASK (0xF) +#define SCI_UART_FCR_RSTRG_OFFSET (12) +#define SCI_UART_FCR_RTRG_OFFSET (8) +#define SCI_UART_FCR_TTRG_OFFSET (4) +#define SCI_UART_FCR_RESET_TX_RX (0x6) + +#define SCI_UART_9BIT_TRANSFER_BUFFER_OFFSET (0xB) +#define SCI_UART_FIFO_TRANSFER_BUFFER_OFFSET (0xC) + +#define SCI_UART_DTC_RX_TRANSFER_SETTINGS ((TRANSFER_MODE_NORMAL << TRANSFER_SETTINGS_MODE_BITS) | \ + (TRANSFER_SIZE_1_BYTE << TRANSFER_SETTINGS_SIZE_BITS) | \ + (TRANSFER_ADDR_MODE_FIXED << TRANSFER_SETTINGS_SRC_ADDR_BITS) | \ + (TRANSFER_IRQ_END << TRANSFER_SETTINGS_IRQ_BITS) | \ + (TRANSFER_ADDR_MODE_INCREMENTED << TRANSFER_SETTINGS_DEST_ADDR_BITS)) +#define SCI_UART_DTC_TX_TRANSFER_SETTINGS ((TRANSFER_MODE_NORMAL << TRANSFER_SETTINGS_MODE_BITS) | \ + (TRANSFER_SIZE_1_BYTE << TRANSFER_SETTINGS_SIZE_BITS) | \ + (TRANSFER_ADDR_MODE_INCREMENTED << TRANSFER_SETTINGS_SRC_ADDR_BITS) | \ + (TRANSFER_IRQ_END << TRANSFER_SETTINGS_IRQ_BITS) | \ + (TRANSFER_ADDR_MODE_FIXED << TRANSFER_SETTINGS_DEST_ADDR_BITS)) +#ifndef SCI_UART_FLOW_CONTROL_ACTIVE + #define SCI_UART_FLOW_CONTROL_ACTIVE BSP_IO_LEVEL_HIGH +#endif + +#ifndef SCI_UART_FLOW_CONTROL_INACTIVE + #define SCI_UART_FLOW_CONTROL_INACTIVE BSP_IO_LEVEL_LOW +#endif + +/*********************************************************************************************************************** + * Private constants + **********************************************************************************************************************/ +static const int32_t SCI_UART_100_PERCENT_X_1000 = 100000; +static const int32_t SCI_UART_MDDR_DIVISOR = 256; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) +static const uint32_t SCI_UART_MAX_BAUD_RATE_ERROR_X_1000 = 15000; +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +typedef struct st_baud_setting_const_t +{ + uint8_t bgdm : 1; /**< BGDM value to get divisor */ + uint8_t abcs : 1; /**< ABCS value to get divisor */ + uint8_t abcse : 1; /**< ABCSE value to get divisor */ + uint8_t cks : 2; /**< CKS value to get divisor (CKS = N) */ +} baud_setting_const_t; + +/* Noise filter setting definition */ +typedef enum e_noise_cancel_lvl +{ + NOISE_CANCEL_LVL1, /**< Noise filter level 1(weak) */ + NOISE_CANCEL_LVL2, /**< Noise filter level 2 */ + NOISE_CANCEL_LVL3, /**< Noise filter level 3 */ + NOISE_CANCEL_LVL4 /**< Noise filter level 4(strong) */ +} noise_cancel_lvl_t; + +#if defined(__ARMCC_VERSION) || defined(__ICCARM__) +typedef void (BSP_CMSE_NONSECURE_CALL * sci_uart_prv_ns_callback)(uart_callback_args_t * p_args); +#elif defined(__GNUC__) +typedef BSP_CMSE_NONSECURE_CALL void (*volatile sci_uart_prv_ns_callback)(uart_callback_args_t * p_args); +#endif + +/*********************************************************************************************************************** + * Private function prototypes + **********************************************************************************************************************/ + +static void r_sci_negate_de_pin(sci_uart_instance_ctrl_t const * const p_ctrl); + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + +static fsp_err_t r_sci_read_write_param_check(sci_uart_instance_ctrl_t const * const p_ctrl, + uint8_t const * const addr, + uint32_t const bytes); + +#endif + +#if BSP_PERIPHERAL_IRDA_PRESENT + #if SCI_UART_CFG_IRDA_SUPPORT +static void r_sci_irda_enable(sci_uart_extended_cfg_t const * const p_extended); +static void r_sci_irda_disable(sci_uart_extended_cfg_t const * const p_extended); + + #endif +#endif + +static void r_sci_uart_config_set(sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + +#if SCI_UART_CFG_DTC_SUPPORTED +static fsp_err_t r_sci_uart_transfer_configure(sci_uart_instance_ctrl_t * const p_ctrl, + transfer_instance_t const * p_transfer, + uint32_t * p_transfer_reg, + uint32_t address); + +static fsp_err_t r_sci_uart_transfer_open(sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + +static void r_sci_uart_transfer_close(sci_uart_instance_ctrl_t * p_ctrl); + +#endif + +static void r_sci_uart_baud_set(R_SCI0_Type * p_sci_reg, baud_setting_t const * const p_baud_setting); +static void r_sci_uart_call_callback(sci_uart_instance_ctrl_t * p_ctrl, uint32_t data, uart_event_t event); + +#if SCI_UART_CFG_FIFO_SUPPORT +static void r_sci_uart_fifo_cfg(sci_uart_instance_ctrl_t * const p_ctrl); + +#endif + +static void r_sci_irq_cfg(sci_uart_instance_ctrl_t * const p_ctrl, uint8_t const ipl, IRQn_Type const p_irq); + +static void r_sci_irqs_cfg(sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg); + +#if (SCI_UART_CFG_TX_ENABLE) +void r_sci_uart_write_no_transfer(sci_uart_instance_ctrl_t * const p_ctrl); + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) +void r_sci_uart_rxi_read_no_transfer(sci_uart_instance_ctrl_t * const p_ctrl); + +void sci_uart_rxi_isr(void); + +void r_sci_uart_read_data(sci_uart_instance_ctrl_t * const p_ctrl, uint32_t * const p_data); + +void sci_uart_eri_isr(void); + +#endif + +#if (SCI_UART_CFG_TX_ENABLE) +void sci_uart_txi_isr(void); +void sci_uart_tei_isr(void); + +#endif + +/*********************************************************************************************************************** + * Private global variables + **********************************************************************************************************************/ + +/* Baud rate divisor information (UART mode) */ +static const baud_setting_const_t g_async_baud[SCI_UART_NUM_DIVISORS_ASYNC] = +{ + {0U, 0U, 1U, 0U}, /* BGDM, ABCS, ABCSE, n */ + {1U, 1U, 0U, 0U}, + {1U, 0U, 0U, 0U}, + {0U, 0U, 1U, 1U}, + {0U, 0U, 0U, 0U}, + {1U, 0U, 0U, 1U}, + {0U, 0U, 1U, 2U}, + {0U, 0U, 0U, 1U}, + {1U, 0U, 0U, 2U}, + {0U, 0U, 1U, 3U}, + {0U, 0U, 0U, 2U}, + {1U, 0U, 0U, 3U}, + {0U, 0U, 0U, 3U} +}; + +static const uint16_t g_div_coefficient[SCI_UART_NUM_DIVISORS_ASYNC] = +{ + 6U, + 8U, + 16U, + 24U, + 32U, + 64U, + 96U, + 128U, + 256U, + 384U, + 512U, + 1024U, + 2048U, +}; + +/* UART on SCI HAL API mapping for UART interface */ +const uart_api_t g_uart_on_sci = +{ + .open = R_SCI_UART_Open, + .close = R_SCI_UART_Close, + .write = R_SCI_UART_Write, + .read = R_SCI_UART_Read, + .infoGet = R_SCI_UART_InfoGet, + .baudSet = R_SCI_UART_BaudSet, + .communicationAbort = R_SCI_UART_Abort, + .callbackSet = R_SCI_UART_CallbackSet, + .readStop = R_SCI_UART_ReadStop, + .receiveSuspend = R_SCI_UART_ReceiveSuspend, + .receiveResume = R_SCI_UART_ReceiveResume, +}; + +/*******************************************************************************************************************//** + * @addtogroup SCI_UART + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Configures the UART driver based on the input configurations. If reception is enabled at compile time, reception is + * enabled at the end of this function. Implements @ref uart_api_t::open + * + * @retval FSP_SUCCESS Channel opened successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block or configuration structure is NULL. + * @retval FSP_ERR_IP_CHANNEL_NOT_PRESENT The requested channel does not exist on this MCU. + * @retval FSP_ERR_INVALID_ARGUMENT Flow control is enabled but flow control pin is not defined or selected channel + * does not support "Hardware CTS and Hardware RTS" flow control. + * (or) restricted channel is selected. + * @retval FSP_ERR_ALREADY_OPEN Control block has already been opened or channel is being used by another + * instance. Call close() then open() to reconfigure. + * @retval FSP_ERR_INVALID_CHANNEL IrDA is requested for a channel that does not support IrDA. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::open + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Open (uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + + /* Check parameters. */ + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_cfg); + + FSP_ASSERT(p_cfg->p_extend); + FSP_ASSERT(((sci_uart_extended_cfg_t *) p_cfg->p_extend)->p_baud_setting); + FSP_ERROR_RETURN(SCI_UART_OPEN != p_ctrl->open, FSP_ERR_ALREADY_OPEN); + + /* Make sure this channel exists. */ + FSP_ERROR_RETURN(BSP_FEATURE_SCI_CHANNELS & (1U << p_cfg->channel), FSP_ERR_IP_CHANNEL_NOT_PRESENT); + + if (((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control == SCI_UART_FLOW_CONTROL_CTSRTS) + { + FSP_ERROR_RETURN( + ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control_pin != SCI_UART_INVALID_16BIT_PARAM, + FSP_ERR_INVALID_ARGUMENT); + } + + if (((sci_uart_extended_cfg_t *) p_cfg->p_extend)->flow_control == SCI_UART_FLOW_CONTROL_HARDWARE_CTSRTS) + { + FSP_ERROR_RETURN((0U != (((1U << (p_cfg->channel)) & BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS))), + FSP_ERR_INVALID_ARGUMENT); + } + + #if (SCI_UART_CFG_RS485_SUPPORT) + if (((sci_uart_extended_cfg_t *) p_cfg->p_extend)->rs485_setting.enable == SCI_UART_RS485_ENABLE) + { + FSP_ERROR_RETURN( + ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->rs485_setting.de_control_pin != SCI_UART_INVALID_16BIT_PARAM, + FSP_ERR_INVALID_ARGUMENT); + } + #endif + + #if BSP_PERIPHERAL_IRDA_PRESENT + #if SCI_UART_CFG_IRDA_SUPPORT + if (((sci_uart_extended_cfg_t *) p_cfg->p_extend)->irda_setting.ircr_bits_b.ire) + { + FSP_ERROR_RETURN(BSP_FEATURE_SCI_IRDA_CHANNEL_MASK & (1 << p_cfg->channel), FSP_ERR_INVALID_CHANNEL); + } + #endif + #endif + + FSP_ASSERT(p_cfg->rxi_irq >= 0); + FSP_ASSERT(p_cfg->txi_irq >= 0); + FSP_ASSERT(p_cfg->tei_irq >= 0); + FSP_ASSERT(p_cfg->eri_irq >= 0); +#endif + + /* Verify that the selected channel is not among the restricted channels when ABCSE is 1. Refer "Limitations" section of r_sci_uart module in FSP User Manual */ + FSP_ERROR_RETURN(!((BSP_FEATURE_SCI_UART_ABCSE_RESTRICTED_CHANNELS & (1 << p_cfg->channel)) && + ((sci_uart_extended_cfg_t *) p_cfg->p_extend)->p_baud_setting->semr_baudrate_bits_b.abcse), + FSP_ERR_INVALID_ARGUMENT); + + p_ctrl->p_reg = ((R_SCI0_Type *) (R_SCI0_BASE + (SCI_REG_SIZE * p_cfg->channel))); + + p_ctrl->fifo_depth = 0U; +#if SCI_UART_CFG_FIFO_SUPPORT + + /* Check if the channel supports fifo */ + if (BSP_FEATURE_SCI_UART_FIFO_CHANNELS & (1U << p_cfg->channel)) + { + p_ctrl->fifo_depth = BSP_FEATURE_SCI_UART_FIFO_DEPTH; + } +#endif + + p_ctrl->p_cfg = p_cfg; + + p_ctrl->p_callback = p_cfg->p_callback; + p_ctrl->p_context = p_cfg->p_context; + p_ctrl->p_callback_memory = NULL; + + p_ctrl->data_bytes = 1U; + if (UART_DATA_BITS_9 == p_cfg->data_bits) + { + p_ctrl->data_bytes = 2U; + } + + /* Configure the interrupts. */ + r_sci_irqs_cfg(p_ctrl, p_cfg); + +#if SCI_UART_CFG_DTC_SUPPORTED + + /* Configure the transfer interface for transmission and reception if provided. */ + fsp_err_t err = r_sci_uart_transfer_open(p_ctrl, p_cfg); + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); +#endif + + /* Negate driver enable if RS-485 mode is enabled. */ + r_sci_negate_de_pin(p_ctrl); + +#if BSP_PERIPHERAL_IRDA_PRESENT + #if SCI_UART_CFG_IRDA_SUPPORT + + /* Set the IrDA configuration settings provided in ::sci_uart_extended_cfg_t. */ + r_sci_irda_enable(p_cfg->p_extend); + #endif +#endif + + /* Enable the SCI channel */ + R_BSP_MODULE_START(FSP_IP_SCI, p_cfg->channel); + + /* Initialize registers as defined in section 34.3.7 "SCI Initialization in Asynchronous Mode" in the RA6M3 manual + * R01UH0886EJ0100 or the relevant section for the MCU being used. */ + p_ctrl->p_reg->SCR = 0U; + p_ctrl->p_reg->SSR = 0U; + p_ctrl->p_reg->SIMR1 = 0U; + p_ctrl->p_reg->SIMR2 = 0U; + p_ctrl->p_reg->SIMR3 = 0U; + p_ctrl->p_reg->CDR = 0U; + + /* Check if the channel supports address matching */ + if (BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS & (1U << p_cfg->channel)) + { + p_ctrl->p_reg->DCCR = SCI_UART_DCCR_DEFAULT_VALUE; + } + + /* Set the default level of the TX pin to 1. */ + p_ctrl->p_reg->SPTR = (uint8_t) (1U << SPTR_SPB2D_BIT) | SPTR_OUTPUT_ENABLE_MASK; + + /* Set the UART configuration settings provided in ::uart_cfg_t and ::sci_uart_extended_cfg_t. */ + r_sci_uart_config_set(p_ctrl, p_cfg); + + p_ctrl->p_tx_src = NULL; + p_ctrl->tx_src_bytes = 0U; + p_ctrl->p_rx_dest = NULL; + p_ctrl->rx_dest_bytes = 0; + + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_cfg->p_extend; + + uint32_t scr = ((uint8_t) p_extend->clock) & 0x3U; +#if (SCI_UART_CFG_RX_ENABLE) + + /* If reception is enabled at build time, enable reception. */ + /* NOTE: Transmitter and its interrupt are enabled in R_SCI_UART_Write(). */ + scr |= SCI_SCR_RE_MASK; + R_BSP_IrqEnable(p_ctrl->p_cfg->rxi_irq); + R_BSP_IrqEnable(p_ctrl->p_cfg->eri_irq); + + scr |= SCI_SCR_RIE_MASK; +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + R_BSP_IrqEnable(p_ctrl->p_cfg->txi_irq); + R_BSP_IrqEnable(p_ctrl->p_cfg->tei_irq); + scr |= SCI_SCR_TE_MASK; +#endif + p_ctrl->p_reg->SCR = (uint8_t) scr; + + p_ctrl->flow_pin = p_extend->flow_control_pin; + +#if SCI_UART_CFG_FLOW_CONTROL_SUPPORT + if (p_ctrl->flow_pin != SCI_UART_INVALID_16BIT_PARAM) + { + R_BSP_PinAccessEnable(); + R_BSP_PinWrite(p_ctrl->flow_pin, SCI_UART_FLOW_CONTROL_INACTIVE); + R_BSP_PinAccessDisable(); + } +#endif + + p_ctrl->open = SCI_UART_OPEN; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Aborts any in progress transfers. Disables interrupts, receiver, and transmitter. Closes lower level transfer + * drivers if used. Removes power. Implements @ref uart_api_t::close + * + * @retval FSP_SUCCESS Channel successfully closed. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Close (uart_ctrl_t * const p_api_ctrl) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + /* Mark the channel not open so other APIs cannot use it. */ + p_ctrl->open = 0U; + + /* Disable interrupts, receiver, and transmitter. Disable baud clock output.*/ + p_ctrl->p_reg->SCR = 0U; + +#if (SCI_UART_CFG_RX_ENABLE) + + /* If reception is enabled at build time, disable reception irqs. */ + R_BSP_IrqDisable(p_ctrl->p_cfg->rxi_irq); + R_BSP_IrqDisable(p_ctrl->p_cfg->eri_irq); +#endif +#if (SCI_UART_CFG_TX_ENABLE) + + /* If transmission is enabled at build time, disable transmission irqs. */ + R_BSP_IrqDisable(p_ctrl->p_cfg->txi_irq); + R_BSP_IrqDisable(p_ctrl->p_cfg->tei_irq); +#endif + +#if SCI_UART_CFG_DTC_SUPPORTED + + /* Close the lower level transfer instances. */ + r_sci_uart_transfer_close(p_ctrl); +#endif + + /* Remove power to the channel. */ + R_BSP_MODULE_STOP(FSP_IP_SCI, p_ctrl->p_cfg->channel); + + /* Negate driver enable if RS-485 mode is enabled. */ + r_sci_negate_de_pin(p_ctrl); + +#if BSP_PERIPHERAL_IRDA_PRESENT + #if SCI_UART_CFG_IRDA_SUPPORT + + /* To disable IrDA. */ + r_sci_irda_disable(p_ctrl->p_cfg->p_extend); + #endif +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Receives user specified number of bytes into destination buffer pointer. Implements @ref uart_api_t::read + * + * @retval FSP_SUCCESS Data reception successfully ends. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * Number of transfers outside the max or min boundary when transfer instance used + * @retval FSP_ERR_INVALID_ARGUMENT Destination address or data size is not valid for 9-bit mode. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A previous read operation is still in progress. + * @retval FSP_ERR_UNSUPPORTED SCI_UART_CFG_RX_ENABLE is set to 0 + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reset + * + * @note If 9-bit data length is specified at R_SCI_UART_Open call, p_dest must be aligned 16-bit boundary. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Read (uart_ctrl_t * const p_api_ctrl, uint8_t * const p_dest, uint32_t const bytes) +{ +#if (SCI_UART_CFG_RX_ENABLE) + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + fsp_err_t err = FSP_SUCCESS; + + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + err = r_sci_read_write_param_check(p_ctrl, p_dest, bytes); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + FSP_ERROR_RETURN(0U == p_ctrl->rx_dest_bytes, FSP_ERR_IN_USE); + #endif + + #if SCI_UART_CFG_DTC_SUPPORTED + + /* Configure transfer instance to receive the requested number of bytes if transfer is used for reception. */ + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + uint32_t size = bytes >> (p_ctrl->data_bytes - 1); + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + + /* Check that the number of transfers is within the 16-bit limit. */ + FSP_ASSERT(size <= SCI_UART_DTC_MAX_TRANSFER); + #endif + err = + p_ctrl->p_cfg->p_transfer_rx->p_api->reset(p_ctrl->p_cfg->p_transfer_rx->p_ctrl, NULL, (void *) p_dest, + (uint16_t) size); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + /* Save the destination address and size for use in rxi_isr. */ + p_ctrl->p_rx_dest = p_dest; + p_ctrl->rx_dest_bytes = bytes; + + return err; +#else + FSP_PARAMETER_NOT_USED(p_api_ctrl); + FSP_PARAMETER_NOT_USED(p_dest); + FSP_PARAMETER_NOT_USED(bytes); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Transmits user specified number of bytes from the source buffer pointer. Implements @ref uart_api_t::write + * + * @retval FSP_SUCCESS Data transmission finished successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * Number of transfers outside the max or min boundary when transfer instance used + * @retval FSP_ERR_INVALID_ARGUMENT Source address or data size is not valid for 9-bit mode. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_IN_USE A UART transmission is in progress + * @retval FSP_ERR_UNSUPPORTED SCI_UART_CFG_TX_ENABLE is set to 0 + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::reset + * + * @note If 9-bit data length is specified at R_SCI_UART_Open call, p_src must be aligned on a 16-bit boundary. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Write (uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes) +{ +#if (SCI_UART_CFG_TX_ENABLE) + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + #if SCI_UART_CFG_PARAM_CHECKING_ENABLE || SCI_UART_CFG_DTC_SUPPORTED + fsp_err_t err = FSP_SUCCESS; + #endif + + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + err = r_sci_read_write_param_check(p_ctrl, p_src, bytes); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + FSP_ERROR_RETURN(0U == p_ctrl->tx_src_bytes, FSP_ERR_IN_USE); + #endif + + #if (SCI_UART_CFG_RS485_SUPPORT) + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + + /* If RS-485 is enabled, then assert the driver enable pin at the start of a write transfer. */ + if (p_extend->rs485_setting.enable) + { + R_BSP_PinAccessEnable(); + + bsp_io_level_t level = SCI_UART_RS485_DE_POLARITY_HIGH == + p_extend->rs485_setting.polarity ? BSP_IO_LEVEL_HIGH : BSP_IO_LEVEL_LOW; + R_BSP_PinWrite(p_extend->rs485_setting.de_control_pin, level); + + R_BSP_PinAccessDisable(); + } + #endif + + /* Transmit interrupts must be disabled to start with. */ + p_ctrl->p_reg->SCR &= (uint8_t) ~(SCI_SCR_TIE_MASK | SCI_SCR_TEIE_MASK); + + /* If the fifo is not used the first write will be done from this function. Subsequent writes will be done + * from txi_isr. */ + #if SCI_UART_CFG_FIFO_SUPPORT + if (p_ctrl->fifo_depth > 0U) + { + p_ctrl->tx_src_bytes = bytes; + p_ctrl->p_tx_src = p_src; + } + else + #endif + { + p_ctrl->tx_src_bytes = bytes - p_ctrl->data_bytes; + p_ctrl->p_tx_src = p_src + p_ctrl->data_bytes; + } + + #if SCI_UART_CFG_DTC_SUPPORTED + + /* If a transfer instance is used for transmission, reset the transfer instance to transmit the requested + * data. */ + if ((NULL != p_ctrl->p_cfg->p_transfer_tx) && p_ctrl->tx_src_bytes) + { + uint32_t data_bytes = p_ctrl->data_bytes; + uint32_t num_transfers = p_ctrl->tx_src_bytes >> (data_bytes - 1); + p_ctrl->tx_src_bytes = 0U; + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + + /* Check that the number of transfers is within the 16-bit limit. */ + FSP_ASSERT(num_transfers <= SCI_UART_DTC_MAX_TRANSFER); + #endif + + err = p_ctrl->p_cfg->p_transfer_tx->p_api->reset(p_ctrl->p_cfg->p_transfer_tx->p_ctrl, + (void const *) p_ctrl->p_tx_src, + NULL, + (uint16_t) num_transfers); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + /* Trigger a TXI interrupt. This triggers the transfer instance or a TXI interrupt if the transfer instance is + * not used. */ + p_ctrl->p_reg->SCR |= SCI_SCR_TIE_MASK; + #if SCI_UART_CFG_FIFO_SUPPORT + if (p_ctrl->fifo_depth == 0U) + #endif + { + /* On channels with no FIFO, the first byte is sent from this function to trigger the first TXI event. This + * method is used instead of setting TE and TIE at the same time as recommended in the hardware manual to avoid + * the one frame delay that occurs when the TE bit is set. */ + if (2U == p_ctrl->data_bytes) + { + p_ctrl->p_reg->FTDRHL = *((uint16_t *) (p_src)) | (uint16_t) ~(SCI_UART_FIFO_DAT_MASK); + } + else + { + p_ctrl->p_reg->TDR = *(p_src); + } + } + + return FSP_SUCCESS; +#else + FSP_PARAMETER_NOT_USED(p_api_ctrl); + FSP_PARAMETER_NOT_USED(p_src); + FSP_PARAMETER_NOT_USED(bytes); + + return FSP_ERR_UNSUPPORTED; +#endif +} + +/*******************************************************************************************************************//** + * Updates the user callback and has option of providing memory for callback structure. + * Implements uart_api_t::callbackSet + * + * @retval FSP_SUCCESS Callback updated successfully. + * @retval FSP_ERR_ASSERTION A required pointer is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_NO_CALLBACK_MEMORY p_callback is non-secure and p_callback_memory is either secure or NULL. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_CallbackSet (uart_ctrl_t * const p_api_ctrl, + void ( * p_callback)(uart_callback_args_t *), + void * const p_context, + uart_callback_args_t * const p_callback_memory) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_callback); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if BSP_TZ_SECURE_BUILD + + /* Get security state of p_callback */ + bool callback_is_secure = + (NULL == cmse_check_address_range((void *) p_callback, sizeof(void *), CMSE_AU_NONSECURE)); + + #if SCI_UART_CFG_PARAM_CHECKING_ENABLE + + /* In secure projects, p_callback_memory must be provided in non-secure space if p_callback is non-secure */ + uart_callback_args_t * const p_callback_memory_checked = cmse_check_pointed_object(p_callback_memory, + CMSE_AU_NONSECURE); + FSP_ERROR_RETURN(callback_is_secure || (NULL != p_callback_memory_checked), FSP_ERR_NO_CALLBACK_MEMORY); + #endif +#endif + + /* Store callback and context */ +#if BSP_TZ_SECURE_BUILD + p_ctrl->p_callback = callback_is_secure ? p_callback : + (void (*)(uart_callback_args_t *))cmse_nsfptr_create(p_callback); +#else + p_ctrl->p_callback = p_callback; +#endif + p_ctrl->p_context = p_context; + p_ctrl->p_callback_memory = p_callback_memory; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Updates the baud rate using the clock selected in Open. p_baud_setting is a pointer to a baud_setting_t structure. + * Implements @ref uart_api_t::baudSet + * + * @warning This terminates any in-progress transmission. + * + * @retval FSP_SUCCESS Baud rate was successfully changed. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL or the UART is not configured to use the + * internal clock. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_INVALID_ARGUMENT Restricted channel is selected. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_BaudSet (uart_ctrl_t * const p_api_ctrl, void const * const p_baud_setting) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + /* Verify that the On-Chip baud rate generator is currently selected. */ + FSP_ASSERT((p_ctrl->p_reg->SCR_b.CKE & 0x2) == 0U); +#endif + + /* Verify that the selected channel is not among the restricted channels when ABCSE is 1. Refer "Limitations" section of r_sci_uart module in FSP User Manual */ + FSP_ERROR_RETURN(!((BSP_FEATURE_SCI_UART_ABCSE_RESTRICTED_CHANNELS & (1 << p_ctrl->p_cfg->channel)) && + (((baud_setting_t *) p_baud_setting)->semr_baudrate_bits_b.abcse)), + FSP_ERR_INVALID_ARGUMENT); + + /* Save SCR configurations except transmit interrupts. Resuming transmission after reconfiguring baud settings is + * not supported. */ + uint8_t preserved_scr = p_ctrl->p_reg->SCR & (uint8_t) ~(SCI_SCR_TIE_MASK | SCI_SCR_TEIE_MASK); + + /* Disables transmitter and receiver. This terminates any in-progress transmission. */ + p_ctrl->p_reg->SCR = preserved_scr & (uint8_t) ~(SCI_SCR_TE_MASK | SCI_SCR_RE_MASK | SCI_SCR_RIE_MASK); + p_ctrl->p_tx_src = NULL; + + /* Apply new baud rate register settings. */ + r_sci_uart_baud_set(p_ctrl->p_reg, p_baud_setting); + + /* Restore all settings except transmit interrupts. */ + p_ctrl->p_reg->SCR = preserved_scr; + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Provides the driver information, including the maximum number of bytes that can be received or transmitted at a time. + * Implements @ref uart_api_t::infoGet + * + * @retval FSP_SUCCESS Information stored in provided p_info. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_InfoGet (uart_ctrl_t * const p_api_ctrl, uart_info_t * const p_info) +{ +#if SCI_UART_CFG_PARAM_CHECKING_ENABLE || SCI_UART_CFG_DTC_SUPPORTED + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; +#else + FSP_PARAMETER_NOT_USED(p_api_ctrl); +#endif + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ASSERT(p_info); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + + p_info->read_bytes_max = SCI_UART_MAX_READ_WRITE_NO_DTC; + p_info->write_bytes_max = SCI_UART_MAX_READ_WRITE_NO_DTC; + +#if (SCI_UART_CFG_RX_ENABLE) + + /* Store number of bytes that can be read at a time. */ + #if SCI_UART_CFG_DTC_SUPPORTED + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + p_info->read_bytes_max = SCI_UART_DTC_MAX_TRANSFER; + } + #endif +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + + /* Store number of bytes that can be written at a time. */ + #if SCI_UART_CFG_DTC_SUPPORTED + if (NULL != p_ctrl->p_cfg->p_transfer_tx) + { + p_info->write_bytes_max = SCI_UART_DTC_MAX_TRANSFER; + } + #endif +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Provides API to abort ongoing transfer. Transmission is aborted after the current character is transmitted. + * Reception is still enabled after abort(). Any characters received after abort() and before the transfer + * is reset in the next call to read(), will arrive via the callback function with event UART_EVENT_RX_CHAR. + * Implements @ref uart_api_t::communicationAbort + * + * @retval FSP_SUCCESS UART transaction aborted successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_UNSUPPORTED The requested Abort direction is unsupported. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::disable + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_Abort (uart_ctrl_t * const p_api_ctrl, uart_dir_t communication_to_abort) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + fsp_err_t err = FSP_ERR_UNSUPPORTED; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + if (UART_DIR_TX & communication_to_abort) + { + err = FSP_SUCCESS; + p_ctrl->p_reg->SCR &= (uint8_t) ~(SCI_SCR_TIE_MASK | SCI_SCR_TEIE_MASK); + #if SCI_UART_CFG_DTC_SUPPORTED + if (NULL != p_ctrl->p_cfg->p_transfer_tx) + { + err = p_ctrl->p_cfg->p_transfer_tx->p_api->disable(p_ctrl->p_cfg->p_transfer_tx->p_ctrl); + } + #endif + + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_ctrl->fifo_depth) + { + /* Reset the transmit fifo */ + p_ctrl->p_reg->FCR_b.TFRST = 1U; + + /* Wait until TFRST cleared after 1 PCLK according to section 34.2.26 "FIFO Control Register (FCR) in the + * RA6M3 manual R01UH0886EJ0100 or the relevant section for the MCU being used.*/ + FSP_HARDWARE_REGISTER_WAIT(p_ctrl->p_reg->FCR_b.TFRST, 0U); + } + #endif + p_ctrl->tx_src_bytes = 0U; + + /* Negate driver enable if RS-485 mode is enabled. */ + r_sci_negate_de_pin(p_ctrl); + + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } +#endif +#if (SCI_UART_CFG_RX_ENABLE) + if (UART_DIR_RX & communication_to_abort) + { + err = FSP_SUCCESS; + + p_ctrl->rx_dest_bytes = 0U; + #if SCI_UART_CFG_DTC_SUPPORTED + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + err = p_ctrl->p_cfg->p_transfer_rx->p_api->disable(p_ctrl->p_cfg->p_transfer_rx->p_ctrl); + } + #endif + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_ctrl->fifo_depth) + { + /* Reset the receive fifo */ + p_ctrl->p_reg->FCR_b.RFRST = 1U; + + /* Wait until RFRST cleared after 1 PCLK according to section 34.2.26 "FIFO Control Register (FCR) in the + * RA6M3 manual R01UH0886EJ0100 or the relevant section for the MCU being used.*/ + FSP_HARDWARE_REGISTER_WAIT(p_ctrl->p_reg->FCR_b.RFRST, 0U); + } + #endif + } +#endif + + return err; +} + +/*******************************************************************************************************************//** + * Provides API to abort ongoing read. Reception is still enabled after abort(). Any characters received after abort() + * and before the transfer is reset in the next call to read(), will arrive via the callback function with event + * UART_EVENT_RX_CHAR. + * Implements @ref uart_api_t::readStop + * + * @retval FSP_SUCCESS UART transaction aborted successfully. + * @retval FSP_ERR_ASSERTION Pointer to UART control block is NULL. + * @retval FSP_ERR_NOT_OPEN The control block has not been opened. + * @retval FSP_ERR_UNSUPPORTED The requested Abort direction is unsupported. + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::disable + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_ReadStop (uart_ctrl_t * const p_api_ctrl, uint32_t * remaining_bytes) +{ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) p_api_ctrl; + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_ctrl); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + *remaining_bytes = p_ctrl->rx_dest_bytes; + p_ctrl->rx_dest_bytes = 0U; + #if SCI_UART_CFG_DTC_SUPPORTED + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + fsp_err_t err = p_ctrl->p_cfg->p_transfer_rx->p_api->disable(p_ctrl->p_cfg->p_transfer_rx->p_ctrl); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + transfer_properties_t transfer_info; + err = p_ctrl->p_cfg->p_transfer_rx->p_api->infoGet(p_ctrl->p_cfg->p_transfer_rx->p_ctrl, &transfer_info); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + *remaining_bytes = transfer_info.transfer_length_remaining; + } + #endif +#else + + return FSP_ERR_UNSUPPORTED; +#endif + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Calculates baud rate register settings. Evaluates and determines the best possible settings set to the baud rate + * related registers. + * @note For limitations of this API, refer to the 'Limitations' section of r_sci_uart module in FSP User Manual. + * + * @param[in] baudrate Baud rate [bps]. For example, 19200, 57600, 115200, etc. + * @param[in] bitrate_modulation Enable bitrate modulation + * @param[in] baud_rate_error_x_1000 Max baud rate error. At most <baud_rate_percent_error> x 1000 required + * for module to function. Absolute max baud_rate_error is 15000 (15%). + * @param[out] p_baud_setting Baud setting information stored here if successful + * + * @retval FSP_SUCCESS Baud rate is set successfully + * @retval FSP_ERR_ASSERTION Null pointer + * @retval FSP_ERR_INVALID_ARGUMENT Baud rate is '0', error in calculated baud rate is larger than requested + * max error, or requested max error in baud rate is larger than 15%. + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_BaudCalculate (uint32_t baudrate, + bool bitrate_modulation, + uint32_t baud_rate_error_x_1000, + baud_setting_t * const p_baud_setting) +{ +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(p_baud_setting); + FSP_ERROR_RETURN(SCI_UART_MAX_BAUD_RATE_ERROR_X_1000 >= baud_rate_error_x_1000, FSP_ERR_INVALID_ARGUMENT); + FSP_ERROR_RETURN((0U != baudrate), FSP_ERR_INVALID_ARGUMENT); +#endif + + p_baud_setting->brr = SCI_UART_BRR_MAX; + p_baud_setting->semr_baudrate_bits_b.brme = 0U; + p_baud_setting->mddr = SCI_UART_MDDR_MIN; + + /* Find the best BRR (bit rate register) value. + * In table g_async_baud, divisor values are stored for BGDM, ABCS, ABCSE and N values. Each set of divisors + * is tried, and the settings with the lowest bit rate error are stored. The formula to calculate BRR is as + * follows and it must be 255 or less: + * BRR = (PCLK / (div_coefficient * baud)) - 1 + */ + int32_t hit_bit_err = SCI_UART_100_PERCENT_X_1000; + uint8_t hit_mddr = 0U; + uint32_t divisor = 0U; + + uint32_t freq_hz = R_FSP_SystemClockHzGet(BSP_FEATURE_SCI_CLOCK); + + for (uint32_t select_16_base_clk_cycles = 0U; + select_16_base_clk_cycles <= 1U && (hit_bit_err > ((int32_t) baud_rate_error_x_1000)); + select_16_base_clk_cycles++) + { + for (uint32_t i = 0U; i < SCI_UART_NUM_DIVISORS_ASYNC; i++) + { + /* if select_16_base_clk_cycles == true: Skip this calculation for divisors that are not achievable with 16 base clk cycles per bit. + * if select_16_base_clk_cycles == false: Skip this calculation for divisors that are only achievable without 16 base clk cycles per bit. + */ + if (((uint8_t) select_16_base_clk_cycles) ^ (g_async_baud[i].abcs | g_async_baud[i].abcse)) + { + continue; + } + + divisor = (uint32_t) g_div_coefficient[i] * baudrate; + uint32_t temp_brr = freq_hz / divisor; + + if (temp_brr <= (SCI_UART_BRR_MAX + 1U)) + { + while (temp_brr > 0U) + { + temp_brr -= 1U; + + /* Calculate the bit rate error. The formula is as follows: + * bit rate error[%] = {(PCLK / (baud * div_coefficient * (BRR + 1)) - 1} x 100 + * calculates bit rate error[%] to three decimal places + */ + int32_t err_divisor = (int32_t) (divisor * (temp_brr + 1U)); + + /* Promoting to 64 bits for calculation, but the final value can never be more than 32 bits, as + * described below, so this cast is safe. + * 1. (temp_brr + 1) can be off by an upper limit of 1 due to rounding from the calculation: + * freq_hz / divisor, or: + * freq_hz / divisor <= (temp_brr + 1) < (freq_hz / divisor) + 1 + * 2. Solving for err_divisor: + * freq_hz <= err_divisor < freq_hz + divisor + * 3. Solving for bit_err: + * 0 >= bit_err >= (freq_hz * 100000 / (freq_hz + divisor)) - 100000 + * 4. freq_hz >= divisor (or temp_brr would be -1 and we would never enter this while loop), so: + * 0 >= bit_err >= 100000 / freq_hz - 100000 + * 5. Larger frequencies yield larger bit errors (absolute value). As the frequency grows, + * the bit_err approaches -100000, so: + * 0 >= bit_err >= -100000 + * 6. bit_err is between -100000 and 0. This entire range fits in an int32_t type, so the cast + * to (int32_t) is safe. + */ + int32_t bit_err = (int32_t) (((((int64_t) freq_hz) * SCI_UART_100_PERCENT_X_1000) / + err_divisor) - SCI_UART_100_PERCENT_X_1000); + + uint8_t mddr = 0U; + if (bitrate_modulation) + { + /* Calculate the MDDR (M) value if bit rate modulation is enabled, + * The formula to calculate MBBR (from the M and N relationship given in the hardware manual) is as follows + * and it must be between 128 and 255. + * MDDR = ((div_coefficient * baud * 256) * (BRR + 1)) / PCLK */ + mddr = (uint8_t) ((uint32_t) err_divisor / (freq_hz / SCI_UART_MDDR_MAX)); + + /* MDDR value must be greater than or equal to SCI_UART_MDDR_MIN. */ + if (mddr < SCI_UART_MDDR_MIN) + { + break; + } + + /* Adjust bit rate error for bit rate modulation. The following formula is used: + * bit rate error [%] = ((bit rate error [%, no modulation] + 100) * MDDR / 256) - 100 + */ + bit_err = (((bit_err + SCI_UART_100_PERCENT_X_1000) * (int32_t) mddr) / + SCI_UART_MDDR_DIVISOR) - SCI_UART_100_PERCENT_X_1000; + } + + /* Take the absolute value of the bit rate error. */ + if (bit_err < 0) + { + bit_err = -bit_err; + } + + /* If the absolute value of the bit rate error is less than the previous lowest absolute value of + * bit rate error, then store these settings as the best value. + */ + if (bit_err < hit_bit_err) + { + p_baud_setting->semr_baudrate_bits_b.bgdm = g_async_baud[i].bgdm; + p_baud_setting->semr_baudrate_bits_b.abcs = g_async_baud[i].abcs; + p_baud_setting->semr_baudrate_bits_b.abcse = g_async_baud[i].abcse; + p_baud_setting->cks = g_async_baud[i].cks; + p_baud_setting->brr = (uint8_t) temp_brr; + hit_bit_err = bit_err; + hit_mddr = mddr; + } + + if (bitrate_modulation) + { + p_baud_setting->semr_baudrate_bits_b.brme = 1U; + p_baud_setting->mddr = hit_mddr; + } + else + { + break; + } + } + } + } + } + + /* Return an error if the percent error is larger than the maximum percent error allowed for this instance */ + FSP_ERROR_RETURN((hit_bit_err <= (int32_t) baud_rate_error_x_1000), FSP_ERR_INVALID_ARGUMENT); + + return FSP_SUCCESS; +} + +/*******************************************************************************************************************//** + * Suspend Reception + * + * @retval FSP_ERR_UNSUPPORTED Functionality not supported by this driver instance + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_ReceiveSuspend (uart_ctrl_t * const p_api_ctrl) +{ + FSP_PARAMETER_NOT_USED(p_api_ctrl); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * Resume Reception + * + * @retval FSP_ERR_UNSUPPORTED Functionality not supported by this driver instance + **********************************************************************************************************************/ +fsp_err_t R_SCI_UART_ReceiveResume (uart_ctrl_t * const p_api_ctrl) +{ + FSP_PARAMETER_NOT_USED(p_api_ctrl); + + return FSP_ERR_UNSUPPORTED; +} + +/*******************************************************************************************************************//** + * @} (end addtogroup SCI_UART) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private Functions + **********************************************************************************************************************/ + +/*******************************************************************************************************************//** + * Negate the DE pin if it is enabled. + * + * @param[in] p_ctrl Pointer to the control block for the channel. + **********************************************************************************************************************/ +static void r_sci_negate_de_pin (sci_uart_instance_ctrl_t const * const p_ctrl) +{ +#if (SCI_UART_CFG_RS485_SUPPORT) + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_ctrl->p_cfg->p_extend; + + /* If RS-485 is enabled, then negate the driver enable pin at the end of a write transfer. */ + if (p_extend->rs485_setting.enable) + { + R_BSP_PinAccessEnable(); + + bsp_io_level_t level = SCI_UART_RS485_DE_POLARITY_HIGH == + p_extend->rs485_setting.polarity ? BSP_IO_LEVEL_LOW : BSP_IO_LEVEL_HIGH; + R_BSP_PinWrite(p_extend->rs485_setting.de_control_pin, level); + + R_BSP_PinAccessDisable(); + } + +#else + FSP_PARAMETER_NOT_USED(p_ctrl); +#endif +} + +#if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + +/*******************************************************************************************************************//** + * Parameter error check function for read/write. + * + * @param[in] p_ctrl Pointer to the control block for the channel + * @param[in] addr Pointer to the buffer + * @param[in] bytes Number of bytes to read or write + * + * @retval FSP_SUCCESS No parameter error found + * @retval FSP_ERR_NOT_OPEN The control block has not been opened + * @retval FSP_ERR_ASSERTION Pointer to UART control block or configuration structure is NULL + * @retval FSP_ERR_INVALID_ARGUMENT Address is not aligned to 2-byte boundary or size is the odd number when the data + * length is 9-bit + **********************************************************************************************************************/ +static fsp_err_t r_sci_read_write_param_check (sci_uart_instance_ctrl_t const * const p_ctrl, + uint8_t const * const addr, + uint32_t const bytes) +{ + FSP_ASSERT(p_ctrl); + FSP_ASSERT(addr); + FSP_ASSERT(0U != bytes); + FSP_ERROR_RETURN(SCI_UART_OPEN == p_ctrl->open, FSP_ERR_NOT_OPEN); + + if (2U == p_ctrl->data_bytes) + { + /* Do not allow odd buffer address if data length is 9 bits. */ + FSP_ERROR_RETURN((0U == ((uint32_t) addr & SCI_UART_ALIGN_2_BYTES)), FSP_ERR_INVALID_ARGUMENT); + + /* Do not allow odd number of data bytes if data length is 9 bits. */ + FSP_ERROR_RETURN(0U == (bytes % 2U), FSP_ERR_INVALID_ARGUMENT); + } + + return FSP_SUCCESS; +} + +#endif +#if SCI_UART_CFG_DTC_SUPPORTED + +/*******************************************************************************************************************//** + * Subroutine to apply common UART transfer settings. + * + * @param[in] p_cfg Pointer to UART specific configuration structure + * @param[in] p_transfer Pointer to transfer instance to configure + * + * @retval FSP_SUCCESS UART transfer drivers successfully configured + * @retval FSP_ERR_ASSERTION Invalid pointer + **********************************************************************************************************************/ +static fsp_err_t r_sci_uart_transfer_configure (sci_uart_instance_ctrl_t * const p_ctrl, + transfer_instance_t const * p_transfer, + uint32_t * p_transfer_reg, + uint32_t sci_buffer_address) +{ + /* Configure the transfer instance, if enabled. */ + #if (SCI_UART_CFG_PARAM_CHECKING_ENABLE) + FSP_ASSERT(NULL != p_transfer->p_api); + FSP_ASSERT(NULL != p_transfer->p_ctrl); + FSP_ASSERT(NULL != p_transfer->p_cfg); + FSP_ASSERT(NULL != p_transfer->p_cfg->p_info); + FSP_ASSERT(NULL != p_transfer->p_cfg->p_extend); + #endif + transfer_info_t * p_info = p_transfer->p_cfg->p_info; + + /* Casting for compatibility with 7 or 8 bit mode. */ + *p_transfer_reg = sci_buffer_address; + + #if SCI_UART_CFG_FIFO_SUPPORT + if (p_ctrl->fifo_depth > 0U) + { + /* Casting for compatibility with 7 or 8 bit mode. */ + *p_transfer_reg = sci_buffer_address + SCI_UART_FIFO_TRANSFER_BUFFER_OFFSET; + } + #endif + + if (UART_DATA_BITS_9 == p_ctrl->p_cfg->data_bits) + { + p_info->transfer_settings_word_b.size = TRANSFER_SIZE_2_BYTE; + + /* Casting for compatibility with 7 or 8 bit mode. */ + *p_transfer_reg = sci_buffer_address + SCI_UART_9BIT_TRANSFER_BUFFER_OFFSET; + } + + fsp_err_t err = p_transfer->p_api->open(p_transfer->p_ctrl, p_transfer->p_cfg); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + + return FSP_SUCCESS; +} + +#endif + +#if SCI_UART_CFG_DTC_SUPPORTED + +/*******************************************************************************************************************//** + * Configures UART related transfer drivers (if enabled). + * + * @param[in] p_ctrl Pointer to UART control structure + * @param[in] p_cfg Pointer to UART specific configuration structure + * + * @retval FSP_SUCCESS UART transfer drivers successfully configured + * @retval FSP_ERR_ASSERTION Invalid pointer or required interrupt not enabled in vector table + * + * @return See @ref RENESAS_ERROR_CODES or functions called by this function for other possible + * return codes. This function calls: + * * @ref transfer_api_t::open + **********************************************************************************************************************/ +static fsp_err_t r_sci_uart_transfer_open (sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg) +{ + fsp_err_t err = FSP_SUCCESS; + + #if (SCI_UART_CFG_RX_ENABLE) + + /* If a transfer instance is used for reception, apply UART specific settings and open the transfer instance. */ + if (NULL != p_cfg->p_transfer_rx) + { + transfer_info_t * p_info = p_cfg->p_transfer_rx->p_cfg->p_info; + + p_info->transfer_settings_word = SCI_UART_DTC_RX_TRANSFER_SETTINGS; + + err = + r_sci_uart_transfer_configure(p_ctrl, p_cfg->p_transfer_rx, (uint32_t *) &p_info->p_src, + (uint32_t) &(p_ctrl->p_reg->RDR)); + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + #if (SCI_UART_CFG_TX_ENABLE) + + /* If a transfer instance is used for transmission, apply UART specific settings and open the transfer instance. */ + if (NULL != p_cfg->p_transfer_tx) + { + transfer_info_t * p_info = p_cfg->p_transfer_tx->p_cfg->p_info; + + p_info->transfer_settings_word = SCI_UART_DTC_TX_TRANSFER_SETTINGS; + + err = r_sci_uart_transfer_configure(p_ctrl, + p_cfg->p_transfer_tx, + (uint32_t *) &p_info->p_dest, + (uint32_t) &p_ctrl->p_reg->TDR); + + #if (SCI_UART_CFG_RX_ENABLE) + if ((err != FSP_SUCCESS) && (NULL != p_cfg->p_transfer_rx)) + { + p_cfg->p_transfer_rx->p_api->close(p_cfg->p_transfer_rx->p_ctrl); + } + #endif + FSP_ERROR_RETURN(FSP_SUCCESS == err, err); + } + #endif + + return err; +} + +#endif + +#if BSP_PERIPHERAL_IRDA_PRESENT + #if SCI_UART_CFG_IRDA_SUPPORT + +/*******************************************************************************************************************//** + * Init IrDA module based on user configurations. + * + * @param[in] p_extended Pointer to extended settings + **********************************************************************************************************************/ +static void r_sci_irda_enable (sci_uart_extended_cfg_t const * const p_extended) +{ + /* The ire bit should only be set for the channel that is IrDA capable */ + if (p_extended->irda_setting.ircr_bits_b.ire) + { + /* Enable the IrDA interface */ + R_BSP_MODULE_START(FSP_IP_IRDA, 0); + + R_IRDA->IRCR = p_extended->irda_setting.ircr_bits; + } +} + +/*******************************************************************************************************************//** + * Stop IrDA module. + * + * @param[in] p_extended Pointer to extended settings + **********************************************************************************************************************/ +static void r_sci_irda_disable (sci_uart_extended_cfg_t const * const p_extended) +{ + /* Only disable IrDA interface on the channel it is enabled. */ + if (p_extended->irda_setting.ircr_bits_b.ire) + { + /* Don't need to clear IRCR as interface is to be disabled. */ + + /* Disable the IrDA interface */ + R_BSP_MODULE_STOP(FSP_IP_IRDA, 0); + } +} + + #endif +#endif + +/*******************************************************************************************************************//** + * Configures UART related registers based on user configurations. + * + * @param[in] p_ctrl Pointer to UART control structure + * @param[in] p_cfg Pointer to UART specific configuration structure + **********************************************************************************************************************/ +static void r_sci_uart_config_set (sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg) +{ +#if SCI_UART_CFG_FIFO_SUPPORT + + /* Configure FIFO related registers. */ + r_sci_uart_fifo_cfg(p_ctrl); +#else + + /* If fifo support is disabled and the current channel supports fifo make sure it's disabled. */ + if (BSP_FEATURE_SCI_UART_FIFO_CHANNELS & (1U << p_cfg->channel)) + { + p_ctrl->p_reg->FCR = SCI_UART_FCR_DEFAULT_VALUE; + } +#endif + + /* Configure parity and stop bits. */ + uint32_t smr = (((uint32_t) p_cfg->parity << 4U) | ((uint32_t) p_cfg->stop_bits << 3U)); + uint32_t scmr = SCI_UART_SCMR_DEFAULT_VALUE; + + /* Configure data size. */ + if (UART_DATA_BITS_7 == p_cfg->data_bits) + { + /* Set the SMR.CHR bit & SCMR.CHR1 bit as selected (Character Length) + * Character Length + * (CHR1,CHR) + * (1, 1) Transmit/receive in 7-bit data length*3 + */ + smr |= (1U << 6); + } + else if (UART_DATA_BITS_9 == p_cfg->data_bits) + { + /* Set the SMR.CHR bit & SCMR.CHR1 bit as selected (Character Length) + * Character Length + * (CHR1,CHR) + * (0, 0) Transmit/receive in 9-bit data length + */ + scmr &= ~(1U << 4); + } + else + { + /* Do nothing. Default is 8-bit mode. */ + } + + /* Write to the SMR register. */ + p_ctrl->p_reg->SMR = (uint8_t) smr; + + /* Write to the SCMR register. */ + p_ctrl->p_reg->SCMR = (uint8_t) scmr; + + sci_uart_extended_cfg_t * p_extend = (sci_uart_extended_cfg_t *) p_cfg->p_extend; + + /* Configure flow control if CTS/RTS flow control is enabled. */ +#if BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS + if (p_extend->flow_control == SCI_UART_FLOW_CONTROL_HARDWARE_CTSRTS) + { + p_ctrl->p_reg->SPMR = R_SCI0_SPMR_CSTPEN_Msk | R_SCI0_SPMR_CTSE_Msk; + } + else +#endif + { + p_ctrl->p_reg->SPMR = ((uint8_t) (p_extend->flow_control << R_SCI0_SPMR_CTSE_Pos) & R_SCI0_SPMR_CTSE_Msk); + } + + uint32_t semr = 0; + + /* Starts reception on falling edge of RXD if enabled in extension (otherwise reception starts at low level + * of RXD). */ + semr |= (p_extend->rx_edge_start & 1U) << 7; + + /* Enables the noise cancellation, fixed to the minimum level, if enabled in the extension. */ + semr |= (p_extend->noise_cancel & 1U) << 5; + + p_ctrl->p_reg->SNFR = NOISE_CANCEL_LVL1; + + if ((SCI_UART_CLOCK_EXT8X == p_extend->clock) || (SCI_UART_CLOCK_EXT16X == p_extend->clock)) + { + /* Use external clock for baud rate */ + p_ctrl->p_reg->BRR = SCI_UART_BRR_DEFAULT_VALUE; + + if (SCI_UART_CLOCK_EXT8X == p_extend->clock) + { + /* Set baud rate as (external clock / 8) */ + semr |= 1U << SCI_UART_SEMR_ABCS_OFFSET; + } + + p_ctrl->p_reg->SEMR = (uint8_t) semr; + } + else + { + p_ctrl->p_reg->SEMR = (uint8_t) semr; + + /* Set the baud rate settings for the internal baud rate generator. */ + r_sci_uart_baud_set(p_ctrl->p_reg, p_extend->p_baud_setting); + } +} + +#if SCI_UART_CFG_FIFO_SUPPORT + +/*******************************************************************************************************************//** + * Resets FIFO related registers. + * + * @param[in] p_ctrl Pointer to UART instance control + * @param[in] p_cfg Pointer to UART configuration structure + **********************************************************************************************************************/ +static void r_sci_uart_fifo_cfg (sci_uart_instance_ctrl_t * const p_ctrl) +{ + if (0U != p_ctrl->fifo_depth) + { + /* Enable the fifo and set the tx and rx reset bits */ + uint32_t fcr = 1U; + + #if (SCI_UART_CFG_RX_ENABLE) + #if SCI_UART_CFG_DTC_SUPPORTED + + /* If DTC is used keep the receive trigger at the default level of 0. */ + if (NULL == p_ctrl->p_cfg->p_transfer_rx) + #endif + { + /* Otherwise, set receive trigger number as configured by the user. */ + sci_uart_extended_cfg_t const * p_extend = p_ctrl->p_cfg->p_extend; + + /* RTRG(Receive FIFO Data Trigger Number) controls when the RXI interrupt will be generated. If data is + * received but the trigger number is not met the RXI interrupt will be generated after 15 ETUs from + * the last stop bit in asynchronous mode. For more information see the FIFO Selected section of "Serial + * Data Reception in Asynchronous Mode" in the RA6M3 manual R01UH0886EJ0100 or the relevant section for + * the MCU being used. */ + fcr |= (((p_ctrl->fifo_depth - 1U) & p_extend->rx_fifo_trigger) & SCI_UART_FCR_TRIGGER_MASK) << + SCI_UART_FCR_RTRG_OFFSET; + } + + /* RTS asserts when the amount of received data stored in the fifo is equal or less than this value. */ + fcr |= ((p_ctrl->fifo_depth - 1U) & SCI_UART_FCR_TRIGGER_MASK) << SCI_UART_FCR_RSTRG_OFFSET; + #endif + + /* Set the FCR and reset the fifos. */ + p_ctrl->p_reg->FCR = (uint16_t) (fcr | SCI_UART_FCR_RESET_TX_RX); + + /* Wait for the fifo reset to complete after 1 PCLK according to section 34.2.26 "FIFO Control Register (FCR) + * in the RA6M3 manual R01UH0886EJ0100 or the relevant section for the MCU being used.*/ + FSP_HARDWARE_REGISTER_WAIT(p_ctrl->p_reg->FCR, fcr); + } +} + +#endif + +/*******************************************************************************************************************//** + * Sets interrupt priority and initializes vector info. + * + * @param[in] p_ctrl Pointer to driver control block + * @param[in] ipl Interrupt priority level + * @param[in] irq IRQ number for this interrupt + **********************************************************************************************************************/ +static void r_sci_irq_cfg (sci_uart_instance_ctrl_t * const p_ctrl, uint8_t const ipl, IRQn_Type const irq) +{ + /* Disable interrupts, set priority, and store control block in the vector information so it can be accessed + * from the callback. */ + R_BSP_IrqDisable(irq); + R_BSP_IrqStatusClear(irq); + R_BSP_IrqCfg(irq, ipl, p_ctrl); +} + +/*******************************************************************************************************************//** + * Sets interrupt priority and initializes vector info for all interrupts. + * + * @param[in] p_ctrl Pointer to UART instance control block + * @param[in] p_cfg Pointer to UART specific configuration structure + **********************************************************************************************************************/ +static void r_sci_irqs_cfg (sci_uart_instance_ctrl_t * const p_ctrl, uart_cfg_t const * const p_cfg) +{ +#if (SCI_UART_CFG_RX_ENABLE) + + /* ERI is optional. */ + r_sci_irq_cfg(p_ctrl, p_cfg->eri_ipl, p_cfg->eri_irq); + r_sci_irq_cfg(p_ctrl, p_cfg->rxi_ipl, p_cfg->rxi_irq); +#endif +#if (SCI_UART_CFG_TX_ENABLE) + r_sci_irq_cfg(p_ctrl, p_cfg->txi_ipl, p_cfg->txi_irq); + + r_sci_irq_cfg(p_ctrl, p_cfg->tei_ipl, p_cfg->tei_irq); +#endif +} + +#if SCI_UART_CFG_DTC_SUPPORTED + +/*******************************************************************************************************************//** + * Closes transfer interfaces. + * + * @param[in] p_ctrl Pointer to UART instance control block + **********************************************************************************************************************/ +static void r_sci_uart_transfer_close (sci_uart_instance_ctrl_t * p_ctrl) +{ + #if (SCI_UART_CFG_RX_ENABLE) + if (NULL != p_ctrl->p_cfg->p_transfer_rx) + { + p_ctrl->p_cfg->p_transfer_rx->p_api->close(p_ctrl->p_cfg->p_transfer_rx->p_ctrl); + } + #endif + #if (SCI_UART_CFG_TX_ENABLE) + if (NULL != p_ctrl->p_cfg->p_transfer_tx) + { + p_ctrl->p_cfg->p_transfer_tx->p_api->close(p_ctrl->p_cfg->p_transfer_tx->p_ctrl); + } + #endif +} + +#endif + +/*******************************************************************************************************************//** + * Changes baud rate based on predetermined register settings. + * + * @param[in] p_sci_reg Base pointer for SCI registers + * @param[in] p_baud_setting Pointer to other divisor related settings + * + * @note The transmitter and receiver (TE and RE bits in SCR) must be disabled prior to calling this function. + **********************************************************************************************************************/ +static void r_sci_uart_baud_set (R_SCI0_Type * p_sci_reg, baud_setting_t const * const p_baud_setting) +{ + /* Set BRR register value. */ + p_sci_reg->BRR = p_baud_setting->brr; + + /* Set clock source for the on-chip baud rate generator. */ + p_sci_reg->SMR_b.CKS = (uint8_t) (SCI_SMR_CKS_VALUE_MASK & p_baud_setting->cks); + + /* Set MDDR register value. */ + p_sci_reg->MDDR = p_baud_setting->mddr; + + /* Set clock divisor settings. */ + p_sci_reg->SEMR = (uint8_t) ((p_sci_reg->SEMR & ~(SCI_UART_SEMR_BAUD_SETTING_MASK)) | + (p_baud_setting->semr_baudrate_bits & SCI_UART_SEMR_BAUD_SETTING_MASK)); +} + +/*******************************************************************************************************************//** + * Calls user callback. + * + * @param[in] p_ctrl Pointer to UART instance control block + * @param[in] data See uart_callback_args_t in r_uart_api.h + * @param[in] event Event code + **********************************************************************************************************************/ +static void r_sci_uart_call_callback (sci_uart_instance_ctrl_t * p_ctrl, uint32_t data, uart_event_t event) +{ + uart_callback_args_t args; + + /* Store callback arguments in memory provided by user if available. This allows callback arguments to be + * stored in non-secure memory so they can be accessed by a non-secure callback function. */ + uart_callback_args_t * p_args = p_ctrl->p_callback_memory; + if (NULL == p_args) + { + /* Store on stack */ + p_args = &args; + } + else + { + /* Save current arguments on the stack in case this is a nested interrupt. */ + args = *p_args; + } + + p_args->channel = p_ctrl->p_cfg->channel; + p_args->data = data; + p_args->event = event; + p_args->p_context = p_ctrl->p_context; + +#if BSP_TZ_SECURE_BUILD + + /* p_callback can point to a secure function or a non-secure function. */ + if (!cmse_is_nsfptr(p_ctrl->p_callback)) + { + /* If p_callback is secure, then the project does not need to change security state. */ + p_ctrl->p_callback(p_args); + } + else + { + /* If p_callback is Non-secure, then the project must change to Non-secure state in order to call the callback. */ + sci_uart_prv_ns_callback p_callback = (sci_uart_prv_ns_callback) (p_ctrl->p_callback); + p_callback(p_args); + } + +#else + + /* If the project is not Trustzone Secure, then it will never need to change security state in order to call the callback. */ + p_ctrl->p_callback(p_args); +#endif + if (NULL != p_ctrl->p_callback_memory) + { + /* Restore callback memory in case this is a nested interrupt. */ + *p_ctrl->p_callback_memory = args; + } +} + +#if (SCI_UART_CFG_TX_ENABLE) + +/*******************************************************************************************************************//** + * TXI interrupt processing for UART mode. TXI interrupt fires when the data in the data register or FIFO register has + * been transferred to the data shift register, and the next data can be written. This interrupt writes the next data. + * After the last data byte is written, this interrupt disables the TXI interrupt and enables the TEI (transmit end) + * interrupt. + **********************************************************************************************************************/ +void sci_uart_txi_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Clear pending IRQ to make sure it doesn't fire again after exiting */ + R_BSP_IrqStatusClear(irq); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + if ((NULL == p_ctrl->p_cfg->p_transfer_tx) && (0U != p_ctrl->tx_src_bytes)) + { + /* Write the data to the FIFO if the channel has a FIFO. Otherwise write data based on size to the transmit + * register. Write to 16-bit TDRHL for 9-bit data, or 8-bit TDR otherwise. */ + #if SCI_UART_CFG_FIFO_SUPPORT + if (0U != p_ctrl->fifo_depth) + { + uint32_t fifo_count = (uint32_t) p_ctrl->p_reg->FDR_b.T; + for (uint32_t cnt = fifo_count; (cnt < p_ctrl->fifo_depth) && p_ctrl->tx_src_bytes; cnt++) + { + if (2U == p_ctrl->data_bytes) + { + p_ctrl->p_reg->FTDRHL = + (uint16_t) (*((uint16_t *) p_ctrl->p_tx_src) | (uint16_t) ~(SCI_UART_FIFO_DAT_MASK)); + } + else + { + p_ctrl->p_reg->FTDRL = *p_ctrl->p_tx_src; + } + + p_ctrl->tx_src_bytes -= p_ctrl->data_bytes; + p_ctrl->p_tx_src += p_ctrl->data_bytes; + } + + /* Clear TDFE flag */ + /* Don't acess the flag via bit fields because bit 1 is reserved. It must be written as '1' and has an */ + /* undefined read value. Bit fields will attempt to do a read-modify-write which could have unintended */ + /* side effects provided the undefined read behavior. */ + uint8_t ssr_fifo = + (uint8_t) ((p_ctrl->p_reg->SSR_FIFO | SCI_SSR_FIFO_RESERVED_MASK) & ~R_SCI0_SSR_FIFO_TDFE_Msk); + p_ctrl->p_reg->SSR_FIFO = ssr_fifo; + } + else + #endif + { + if ((2U == p_ctrl->data_bytes)) + { + /* Write 16-bit data to TDRHL register */ + p_ctrl->p_reg->TDRHL = *((uint16_t *) (p_ctrl->p_tx_src)) | (uint16_t) ~(SCI_UART_FIFO_DAT_MASK); + } + else + { + /* Write 1byte (uint8_t) data to (uint8_t) data register */ + p_ctrl->p_reg->TDR = *(p_ctrl->p_tx_src); + } + + /* Update pointer to the next data and number of remaining bytes in the control block. */ + p_ctrl->tx_src_bytes -= p_ctrl->data_bytes; + p_ctrl->p_tx_src += p_ctrl->data_bytes; + } + } + + if (0U == p_ctrl->tx_src_bytes) + { + /* After all data has been transmitted, disable transmit interrupts and enable the transmit end interrupt. */ + uint8_t scr_temp = p_ctrl->p_reg->SCR; + scr_temp |= SCI_SCR_TEIE_MASK; + scr_temp &= (uint8_t) ~SCI_SCR_TIE_MASK; + p_ctrl->p_reg->SCR = scr_temp; + + p_ctrl->p_tx_src = NULL; + + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_TX_DATA_EMPTY); + } + } + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE +} + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + +/*******************************************************************************************************************//** + * RXI interrupt processing for UART mode. RXI interrupt happens when data arrives to the data register or the FIFO + * register. This function calls callback function when it meets conditions below. + * - UART_EVENT_RX_COMPLETE: The number of data which has been read reaches to the number specified in R_SCI_UART_Read() + * if a transfer instance is used for reception. + * - UART_EVENT_RX_CHAR: Data is received asynchronously (read has not been called) + * + * This interrupt also calls the callback function for RTS pin control if it is registered in R_SCI_UART_Open(). This is + * special functionality to expand SCI hardware capability and make RTS/CTS hardware flow control possible. If macro + * 'SCI_UART_CFG_FLOW_CONTROL_SUPPORT' is set, it is called at the beginning in this function to set the RTS pin high, + * then it is called again just before leaving this function to set the RTS pin low. + * @retval none + **********************************************************************************************************************/ +void sci_uart_rxi_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Clear pending IRQ to make sure it doesn't fire again after exiting */ + R_BSP_IrqStatusClear(irq); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + #if SCI_UART_CFG_DTC_SUPPORTED + if ((p_ctrl->p_cfg->p_transfer_rx == NULL) || (0 == p_ctrl->rx_dest_bytes)) + #endif + { + #if (SCI_UART_CFG_FLOW_CONTROL_SUPPORT) + if (p_ctrl->flow_pin != SCI_UART_INVALID_16BIT_PARAM) + { + R_BSP_PinAccessEnable(); + + /* Pause the transmission of data from the other device. */ + R_BSP_PinWrite(p_ctrl->flow_pin, SCI_UART_FLOW_CONTROL_ACTIVE); + } + #endif + + uint32_t data; + #if SCI_UART_CFG_FIFO_SUPPORT + do + { + if ((p_ctrl->fifo_depth > 0U)) + { + if (p_ctrl->p_reg->FDR_b.R > 0U) + { + data = p_ctrl->p_reg->FRDRHL & FRDR_TDAT_MASK_9BITS; + } + else + { + break; + } + } + else if (2U == p_ctrl->data_bytes) + #else + { + if (2U == p_ctrl->data_bytes) + #endif + { + data = p_ctrl->p_reg->RDRHL & FRDR_TDAT_MASK_9BITS; + } + else + { + data = p_ctrl->p_reg->RDR; + } + + if (0 == p_ctrl->rx_dest_bytes) + { + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + /* Call user callback with the data. */ + r_sci_uart_call_callback(p_ctrl, data, UART_EVENT_RX_CHAR); + } + } + else + { + memcpy((void *) p_ctrl->p_rx_dest, &data, p_ctrl->data_bytes); + p_ctrl->p_rx_dest += p_ctrl->data_bytes; + p_ctrl->rx_dest_bytes -= p_ctrl->data_bytes; + + if (0 == p_ctrl->rx_dest_bytes) + { + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } + } + } + + #if SCI_UART_CFG_FIFO_SUPPORT + } while ((p_ctrl->fifo_depth > 0U) && ((p_ctrl->p_reg->FDR_b.R) > 0U)); + + if (p_ctrl->fifo_depth > 0U) + { + p_ctrl->p_reg->SSR_FIFO = (uint8_t) ~(SCI_UART_SSR_FIFO_DR_RDF); + } + + #else + } + #endif + #if (SCI_UART_CFG_FLOW_CONTROL_SUPPORT) + if (p_ctrl->flow_pin != SCI_UART_INVALID_16BIT_PARAM) + { + /* Resume the transmission of data from the other device. */ + R_BSP_PinWrite(p_ctrl->flow_pin, SCI_UART_FLOW_CONTROL_INACTIVE); + R_BSP_PinAccessDisable(); + } + #endif + } + + #if SCI_UART_CFG_DTC_SUPPORTED + else + { + p_ctrl->rx_dest_bytes = 0; + + p_ctrl->p_rx_dest = NULL; + + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + /* Call callback */ + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_RX_COMPLETE); + } + } + #endif + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE +} + +#endif + +#if (SCI_UART_CFG_TX_ENABLE) + +/*******************************************************************************************************************//** + * TEI interrupt processing for UART mode. The TEI interrupt fires after the last byte is transmitted on the TX pin. + * The user callback function is called with the UART_EVENT_TX_COMPLETE event code (if it is registered in + * R_SCI_UART_Open()). + **********************************************************************************************************************/ +void sci_uart_tei_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + /* Receiving TEI(transmit end interrupt) means the completion of transmission, so call callback function here. */ + p_ctrl->p_reg->SCR &= (uint8_t) ~(SCI_SCR_TIE_MASK | SCI_SCR_TEIE_MASK); + + /* Negate driver enable if RS-485 mode is enabled. */ + r_sci_negate_de_pin(p_ctrl); + + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + r_sci_uart_call_callback(p_ctrl, 0U, UART_EVENT_TX_COMPLETE); + } + + /* Clear pending IRQ to make sure it doesn't fire again after exiting */ + R_BSP_IrqStatusClear(irq); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE +} + +#endif + +#if (SCI_UART_CFG_RX_ENABLE) + +/*******************************************************************************************************************//** + * ERI interrupt processing for UART mode. When an ERI interrupt fires, the user callback function is called if it is + * registered in R_SCI_UART_Open() with the event code that triggered the interrupt. + **********************************************************************************************************************/ +void sci_uart_eri_isr (void) +{ + /* Save context if RTOS is used */ + FSP_CONTEXT_SAVE; + + IRQn_Type irq = R_FSP_CurrentIrqGet(); + + /* Recover ISR context saved in open. */ + sci_uart_instance_ctrl_t * p_ctrl = (sci_uart_instance_ctrl_t *) R_FSP_IsrContextGet(irq); + + uint32_t data = 0U; + uart_event_t event; + + /* Read data. */ + if ( + #if SCI_UART_CFG_FIFO_SUPPORT + (p_ctrl->fifo_depth > 0U) || + #endif + (2U == p_ctrl->data_bytes)) + { + { + data = p_ctrl->p_reg->RDRHL & SCI_UART_FIFO_DAT_MASK; + } + } + else + { + data = p_ctrl->p_reg->RDR; + } + + /* Determine cause of error. */ + event = (uart_event_t) (p_ctrl->p_reg->SSR & SCI_RCVR_ERR_MASK); + + /* Check if there is a break detected. */ + if ((UART_EVENT_ERR_FRAMING == (event & UART_EVENT_ERR_FRAMING)) && (0U == p_ctrl->p_reg->SPTR_b.RXDMON)) + { + event |= UART_EVENT_BREAK_DETECT; + } + + /* Clear error condition. */ + p_ctrl->p_reg->SSR &= (uint8_t) (~SCI_RCVR_ERR_MASK); + + /* Negate driver enable if RS-485 mode is enabled. */ + r_sci_negate_de_pin(p_ctrl); + + /* If a callback was provided, call it with the argument */ + if (NULL != p_ctrl->p_callback) + { + /* Call callback. */ + r_sci_uart_call_callback(p_ctrl, data, event); + } + + /* Clear pending IRQ to make sure it doesn't fire again after exiting */ + R_BSP_IrqStatusClear(irq); + + /* Restore context if RTOS is used */ + FSP_CONTEXT_RESTORE; +} + +#endif diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/SConscript b/bsp/renesas/ra2a1-ek/ra_cfg/SConscript new file mode 100644 index 00000000000..21af4711c50 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/SConscript @@ -0,0 +1,19 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + if GetOption('target') != 'mdk5': + src = Glob('*.c') + CPPPATH = [cwd+'/fsp_cfg', cwd + '/fsp_cfg/bsp'] + +group += DefineGroup('ra_cfg', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/board_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/board_cfg.h new file mode 100644 index 00000000000..9c76e238a77 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/board_cfg.h @@ -0,0 +1,5 @@ +/* generated configuration header file - do not edit */ +#ifndef BOARD_CFG_H_ +#define BOARD_CFG_H_ +#include "../../../ra/board/ra2a1_ek/board.h" +#endif /* BOARD_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h new file mode 100644 index 00000000000..eb7dc786166 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_cfg.h @@ -0,0 +1,63 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_CFG_H_ +#define BSP_CFG_H_ +#ifdef __cplusplus + extern "C" { + #endif + + #include "bsp_clock_cfg.h" + #include "bsp_mcu_family_cfg.h" + #include "bsp_mcu_ofs_cfg.h" + #include "board_cfg.h" + #include "vector_data.h" + #define RA_NOT_DEFINED 0 + #ifndef BSP_CFG_RTOS + #if (RA_NOT_DEFINED) != (RA_NOT_DEFINED) + #define BSP_CFG_RTOS (2) + #elif (RA_NOT_DEFINED) != (RA_NOT_DEFINED) + #define BSP_CFG_RTOS (1) + #else + #define BSP_CFG_RTOS (0) + #endif + #endif + #ifndef BSP_CFG_RTC_USED + #define BSP_CFG_RTC_USED (RA_NOT_DEFINED) + #endif + #undef RA_NOT_DEFINED + #if defined(_RA_BOOT_IMAGE) + #define BSP_CFG_BOOT_IMAGE (1) + #endif + #define BSP_CFG_MCU_VCC_MV (3300) + #define BSP_CFG_STACK_MAIN_BYTES (0x400) + #define BSP_CFG_HEAP_BYTES (0) + #define BSP_CFG_PARAM_CHECKING_ENABLE (0) + #define BSP_CFG_ASSERT (0) + + #define BSP_CFG_PFS_PROTECT ((1)) + + #define BSP_CFG_C_RUNTIME_INIT ((1)) + #define BSP_CFG_EARLY_INIT ((0)) + + #define BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET ((0)) + + #ifndef BSP_CLOCK_CFG_MAIN_OSC_POPULATED + #define BSP_CLOCK_CFG_MAIN_OSC_POPULATED (1) + #endif + + #ifndef BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE + #define BSP_CLOCK_CFG_MAIN_OSC_CLOCK_SOURCE (0) + #endif + #ifndef BSP_CLOCK_CFG_SUBCLOCK_DRIVE + #define BSP_CLOCK_CFG_SUBCLOCK_DRIVE (0) + #endif + #ifndef BSP_CLOCK_CFG_SUBCLOCK_POPULATED + #define BSP_CLOCK_CFG_SUBCLOCK_POPULATED (1) + #endif + #ifndef BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS + #define BSP_CLOCK_CFG_SUBCLOCK_STABILIZATION_MS 1000 + #endif + + #ifdef __cplusplus + } + #endif +#endif /* BSP_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h new file mode 100644 index 00000000000..eb82f469776 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h @@ -0,0 +1,5 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_CFG_H_ +#define BSP_MCU_DEVICE_CFG_H_ +#define BSP_CFG_MCU_PART_SERIES (2) +#endif /* BSP_MCU_DEVICE_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h new file mode 100644 index 00000000000..3bef5d3960e --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h @@ -0,0 +1,12 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_R7FA2A1AB3CFM + #define BSP_MCU_FEATURE_SET ('A') + #define BSP_ROM_SIZE_BYTES (262144) + #define BSP_RAM_SIZE_BYTES (32768) + #define BSP_DATA_FLASH_SIZE_BYTES (8192) + #define BSP_NUMBER_OF_CORES (1) + #define BSP_PACKAGE_LQFP + #define BSP_PACKAGE_PINS (64) +#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h new file mode 100644 index 00000000000..7adf8c3e0a7 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h @@ -0,0 +1,42 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_FAMILY_CFG_H_ +#define BSP_MCU_FAMILY_CFG_H_ +#ifdef __cplusplus + extern "C" { + #endif + + #include "bsp_mcu_device_pn_cfg.h" + #include "bsp_mcu_device_cfg.h" + #include "../../../ra/fsp/src/bsp/mcu/ra2a1/bsp_override.h" + #include "../../../ra/fsp/src/bsp/mcu/ra2a1/bsp_mcu_info.h" + #include "bsp_clock_cfg.h" + #define BSP_MCU_GROUP_RA2A1 (1) + #define BSP_LOCO_HZ (32768) + #define BSP_MOCO_HZ (8000000) + #define BSP_SUB_CLOCK_HZ (32768) + #if BSP_CFG_HOCO_FREQUENCY == 0 + #define BSP_HOCO_HZ (24000000) + #elif BSP_CFG_HOCO_FREQUENCY == 2 + #define BSP_HOCO_HZ (32000000) + #elif BSP_CFG_HOCO_FREQUENCY == 4 + #define BSP_HOCO_HZ (48000000) + #elif BSP_CFG_HOCO_FREQUENCY == 5 + #define BSP_HOCO_HZ (64000000) + #else + #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h" + #endif + + #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U) + #define BSP_VECTOR_TABLE_MAX_ENTRIES (48U) + #define BSP_CFG_INLINE_IRQ_FUNCTIONS (0) + + #ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT + #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9) + #endif + + /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */ + #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector) + #ifdef __cplusplus + } + #endif +#endif /* BSP_MCU_FAMILY_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h new file mode 100644 index 00000000000..e194ffe3a98 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_mcu_ofs_cfg.h @@ -0,0 +1,14 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_OFS_CFG_H_ +#define BSP_MCU_OFS_CFG_H_ +#ifndef BSP_CFG_OPTION_SETTING_OFS0 +#define OFS_IWDT (0xA001A001 | 1 << 1 | 3 << 2 | 15 << 4 | 3 << 8 | 3 << 10 | 1 << 12 | 1 << 14) +#define OFS_WDT (1 << 17 | 3 << 18 | 15 << 20 | 3 << 24 | 3 << 26 | 1 << 28 | 1 << 30) +#define BSP_CFG_OPTION_SETTING_OFS0 (OFS_IWDT | OFS_WDT) +#endif +#ifndef BSP_CFG_OPTION_SETTING_OFS1 +#define BSP_CFG_OPTION_SETTING_OFS1_NO_HOCOFRQ (0xFFFF8EC3 | (1 <<2) | (3 << 3) | (1 << 8)) + +#define BSP_CFG_OPTION_SETTING_OFS1 ((uint32_t) BSP_CFG_OPTION_SETTING_OFS1_NO_HOCOFRQ | ((uint32_t) BSP_CFG_HOCO_FREQUENCY << BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET)) +#endif +#endif /* BSP_MCU_OFS_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h new file mode 100644 index 00000000000..b3861f89676 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h @@ -0,0 +1,16 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_PIN_CFG_H_ +#define BSP_PIN_CFG_H_ +#include "r_ioport.h" + +/* Common macro for FSP header files. There is also a corresponding FSP_FOOTER macro at the end of this file. */ +FSP_HEADER + + +extern const ioport_cfg_t g_bsp_pin_cfg; /* RA2A1-EK.pincfg */ + +void BSP_PinConfigSecurityInit(); + +/* Common macro for FSP header files. There is also a corresponding FSP_HEADER macro at the top of this file. */ +FSP_FOOTER +#endif /* BSP_PIN_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_ioport_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_ioport_cfg.h new file mode 100644 index 00000000000..d2688bf5ba3 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_ioport_cfg.h @@ -0,0 +1,13 @@ +/* generated configuration header file - do not edit */ +#ifndef R_IOPORT_CFG_H_ +#define R_IOPORT_CFG_H_ +#ifdef __cplusplus +extern "C" { +#endif + +#define IOPORT_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) + +#ifdef __cplusplus +} +#endif +#endif /* R_IOPORT_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_sci_uart_cfg.h b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_sci_uart_cfg.h new file mode 100644 index 00000000000..d91dd0b7513 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_cfg/fsp_cfg/r_sci_uart_cfg.h @@ -0,0 +1,17 @@ +/* generated configuration header file - do not edit */ +#ifndef R_SCI_UART_CFG_H_ +#define R_SCI_UART_CFG_H_ +#ifdef __cplusplus + extern "C" { + #endif + + #define SCI_UART_CFG_PARAM_CHECKING_ENABLE (BSP_CFG_PARAM_CHECKING_ENABLE) + #define SCI_UART_CFG_FIFO_SUPPORT (0) + #define SCI_UART_CFG_DTC_SUPPORTED (0) + #define SCI_UART_CFG_FLOW_CONTROL_SUPPORT (0) + #define SCI_UART_CFG_RS485_SUPPORT (0) + #define SCI_UART_CFG_IRDA_SUPPORT (0) + #ifdef __cplusplus + } + #endif +#endif /* R_SCI_UART_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_gen/SConscript b/bsp/renesas/ra2a1-ek/ra_gen/SConscript new file mode 100644 index 00000000000..3e7427d975b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/SConscript @@ -0,0 +1,18 @@ +Import('RTT_ROOT') +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = [] +group = [] +CPPPATH = [] + +if rtconfig.PLATFORM in ['iccarm']: + print("\nThe current project does not support IAR build\n") + Return('group') +elif rtconfig.PLATFORM in ['gcc', 'armclang']: + if GetOption('target') != 'mdk5': + src = Glob('*.c') + CPPPATH = [cwd, ] +group = DefineGroup('ra_gen', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/ra2a1-ek/ra_gen/bsp_clock_cfg.h b/bsp/renesas/ra2a1-ek/ra_gen/bsp_clock_cfg.h new file mode 100644 index 00000000000..b62e482b5e1 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/bsp_clock_cfg.h @@ -0,0 +1,17 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_CLOCK_CFG_H_ +#define BSP_CLOCK_CFG_H_ +#define BSP_CFG_CLOCKS_SECURE (0) +#define BSP_CFG_CLOCKS_OVERRIDE (0) +#define BSP_CFG_XTAL_HZ (12000000) /* XTAL 12000000Hz */ +#define BSP_CFG_HOCO_FREQUENCY (4) /* HOCO 48MHz */ +#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_HOCO) /* Clock Src: HOCO */ +#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */ +#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKB Div /2 */ +#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* PCLKD Div /1 */ +#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* FCLK Div /2 */ +#define BSP_CFG_SDADC_CLOCK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* SDADCCLK Disabled */ +#define BSP_CFG_SDADCCLK_DIV (7) /* SDADCCLK Div /12 */ +#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */ +#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */ +#endif /* BSP_CLOCK_CFG_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_gen/common_data.c b/bsp/renesas/ra2a1-ek/ra_gen/common_data.c new file mode 100644 index 00000000000..50036c0adcb --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/common_data.c @@ -0,0 +1,11 @@ +/* generated common source file - do not edit */ +#include "common_data.h" +ioport_instance_ctrl_t g_ioport_ctrl; +const ioport_instance_t g_ioport = + { + .p_api = &g_ioport_on_ioport, + .p_ctrl = &g_ioport_ctrl, + .p_cfg = &g_bsp_pin_cfg, + }; +void g_common_init(void) { +} diff --git a/bsp/renesas/ra2a1-ek/ra_gen/common_data.h b/bsp/renesas/ra2a1-ek/ra_gen/common_data.h new file mode 100644 index 00000000000..6a08cbee095 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/common_data.h @@ -0,0 +1,20 @@ +/* generated common header file - do not edit */ +#ifndef COMMON_DATA_H_ +#define COMMON_DATA_H_ +#include +#include "bsp_api.h" +#include "r_ioport.h" +#include "bsp_pin_cfg.h" +FSP_HEADER +#define IOPORT_CFG_NAME g_bsp_pin_cfg +#define IOPORT_CFG_OPEN R_IOPORT_Open +#define IOPORT_CFG_CTRL g_ioport_ctrl + +/* IOPORT Instance */ +extern const ioport_instance_t g_ioport; + +/* IOPORT control structure. */ +extern ioport_instance_ctrl_t g_ioport_ctrl; +void g_common_init(void); +FSP_FOOTER +#endif /* COMMON_DATA_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_gen/hal_data.c b/bsp/renesas/ra2a1-ek/ra_gen/hal_data.c new file mode 100644 index 00000000000..ae38a9efd64 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/hal_data.c @@ -0,0 +1,97 @@ +/* generated HAL source file - do not edit */ +#include "hal_data.h" +sci_uart_instance_ctrl_t g_uart0_ctrl; + + baud_setting_t g_uart0_baud_setting = + { + /* Baud rate calculated with 0.160% error. */ .semr_baudrate_bits_b.abcse = 0, .semr_baudrate_bits_b.abcs = 0, .semr_baudrate_bits_b.bgdm = 1, .cks = 0, .brr = 12, .mddr = (uint8_t) 256, .semr_baudrate_bits_b.brme = false + }; + + /** UART extended configuration for UARTonSCI HAL driver */ + const sci_uart_extended_cfg_t g_uart0_cfg_extend = + { + .clock = SCI_UART_CLOCK_INT, + .rx_edge_start = SCI_UART_START_BIT_FALLING_EDGE, + .noise_cancel = SCI_UART_NOISE_CANCELLATION_DISABLE, + .rx_fifo_trigger = SCI_UART_RX_FIFO_TRIGGER_MAX, + .p_baud_setting = &g_uart0_baud_setting, + .flow_control = SCI_UART_FLOW_CONTROL_RTS, + #if 0xFF != 0xFF + .flow_control_pin = BSP_IO_PORT_FF_PIN_0xFF, + #else + .flow_control_pin = (bsp_io_port_pin_t) UINT16_MAX, + #endif + .rs485_setting = { + .enable = SCI_UART_RS485_DISABLE, + .polarity = SCI_UART_RS485_DE_POLARITY_HIGH, + #if 0xFF != 0xFF + .de_control_pin = BSP_IO_PORT_FF_PIN_0xFF, + #else + .de_control_pin = (bsp_io_port_pin_t) UINT16_MAX, + #endif + }, + .irda_setting = { + .ircr_bits_b.ire = 0, + .ircr_bits_b.irrxinv = 0, + .ircr_bits_b.irtxinv = 0, + }, + }; + + /** UART interface configuration */ + const uart_cfg_t g_uart0_cfg = + { + .channel = 0, + .data_bits = UART_DATA_BITS_8, + .parity = UART_PARITY_OFF, + .stop_bits = UART_STOP_BITS_1, + .p_callback = user_uart0_callback, + .p_context = NULL, + .p_extend = &g_uart0_cfg_extend, +#define RA_NOT_DEFINED (1) +#if (RA_NOT_DEFINED == RA_NOT_DEFINED) + .p_transfer_tx = NULL, +#else + .p_transfer_tx = &RA_NOT_DEFINED, +#endif +#if (RA_NOT_DEFINED == RA_NOT_DEFINED) + .p_transfer_rx = NULL, +#else + .p_transfer_rx = &RA_NOT_DEFINED, +#endif +#undef RA_NOT_DEFINED + .rxi_ipl = (2), + .txi_ipl = (2), + .tei_ipl = (2), + .eri_ipl = (2), +#if defined(VECTOR_NUMBER_SCI0_RXI) + .rxi_irq = VECTOR_NUMBER_SCI0_RXI, +#else + .rxi_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_TXI) + .txi_irq = VECTOR_NUMBER_SCI0_TXI, +#else + .txi_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_TEI) + .tei_irq = VECTOR_NUMBER_SCI0_TEI, +#else + .tei_irq = FSP_INVALID_VECTOR, +#endif +#if defined(VECTOR_NUMBER_SCI0_ERI) + .eri_irq = VECTOR_NUMBER_SCI0_ERI, +#else + .eri_irq = FSP_INVALID_VECTOR, +#endif + }; + +/* Instance structure to use this module. */ +const uart_instance_t g_uart0 = +{ + .p_ctrl = &g_uart0_ctrl, + .p_cfg = &g_uart0_cfg, + .p_api = &g_uart_on_sci +}; +void g_hal_init(void) { +g_common_init(); +} diff --git a/bsp/renesas/ra2a1-ek/ra_gen/hal_data.h b/bsp/renesas/ra2a1-ek/ra_gen/hal_data.h new file mode 100644 index 00000000000..32b2ce34886 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/hal_data.h @@ -0,0 +1,24 @@ +/* generated HAL header file - do not edit */ +#ifndef HAL_DATA_H_ +#define HAL_DATA_H_ +#include +#include "bsp_api.h" +#include "common_data.h" +#include "r_sci_uart.h" + #include "r_uart_api.h" +FSP_HEADER +/** UART on SCI Instance. */ + extern const uart_instance_t g_uart0; + + /** Access the UART instance using these structures when calling API functions directly (::p_api is not used). */ + extern sci_uart_instance_ctrl_t g_uart0_ctrl; + extern const uart_cfg_t g_uart0_cfg; + extern const sci_uart_extended_cfg_t g_uart0_cfg_extend; + + #ifndef user_uart0_callback + void user_uart0_callback(uart_callback_args_t * p_args); + #endif +void hal_entry(void); +void g_hal_init(void); +FSP_FOOTER +#endif /* HAL_DATA_H_ */ diff --git a/bsp/renesas/ra2a1-ek/ra_gen/main.c b/bsp/renesas/ra2a1-ek/ra_gen/main.c new file mode 100644 index 00000000000..42c5904834c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/main.c @@ -0,0 +1,6 @@ +/* generated main source file - do not edit */ +#include "hal_data.h" + int main(void) { + hal_entry(); + return 0; + } diff --git a/bsp/renesas/ra2a1-ek/ra_gen/pin_data.c b/bsp/renesas/ra2a1-ek/ra_gen/pin_data.c new file mode 100644 index 00000000000..8ee454caa20 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/pin_data.c @@ -0,0 +1,127 @@ +/* generated pin source file - do not edit */ +#include "bsp_api.h" +#include "r_ioport.h" + + +const ioport_pin_cfg_t g_bsp_pin_cfg_data[] = { + { + .pin = BSP_IO_PORT_00_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU) + }, + { + .pin = BSP_IO_PORT_00_PIN_03, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_01_PIN_08, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG) + }, + { + .pin = BSP_IO_PORT_01_PIN_11, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI) + }, + { + .pin = BSP_IO_PORT_01_PIN_12, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI) + }, + { + .pin = BSP_IO_PORT_02_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_02_PIN_05, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_02_PIN_06, + .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_03_PIN_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG) + }, + { + .pin = BSP_IO_PORT_03_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8) + }, + { + .pin = BSP_IO_PORT_03_PIN_02, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8) + }, + { + .pin = BSP_IO_PORT_03_PIN_03, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI) + }, + { + .pin = BSP_IO_PORT_03_PIN_04, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SPI) + }, + { + .pin = BSP_IO_PORT_04_PIN_07, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS) + }, + { + .pin = BSP_IO_PORT_04_PIN_09, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_CTSU) + }, + { + .pin = BSP_IO_PORT_04_PIN_10, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9) + }, + { + .pin = BSP_IO_PORT_04_PIN_11, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9) + }, + { + .pin = BSP_IO_PORT_09_PIN_14, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS) + }, + { + .pin = BSP_IO_PORT_09_PIN_15, + .pin_cfg = ((uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_USB_FS) + }, +}; + +const ioport_cfg_t g_bsp_pin_cfg = { + .number_of_pins = sizeof(g_bsp_pin_cfg_data)/sizeof(ioport_pin_cfg_t), + .p_pin_cfg_data = &g_bsp_pin_cfg_data[0], +}; + +#if BSP_TZ_SECURE_BUILD + +void R_BSP_PinCfgSecurityInit(void); + +/* Initialize SAR registers for secure pins. */ +void R_BSP_PinCfgSecurityInit(void) +{ + #if (2U == BSP_FEATURE_IOPORT_VERSION) + uint32_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR]; + #else + uint16_t pmsar[BSP_FEATURE_BSP_NUM_PMSAR]; + #endif + memset(pmsar, 0xFF, BSP_FEATURE_BSP_NUM_PMSAR * sizeof(R_PMISC->PMSAR[0])); + + + for(uint32_t i = 0; i < g_bsp_pin_cfg.number_of_pins; i++) + { + uint32_t port_pin = g_bsp_pin_cfg.p_pin_cfg_data[i].pin; + uint32_t port = port_pin >> 8U; + uint32_t pin = port_pin & 0xFFU; + pmsar[port] &= (uint16_t) ~(1U << pin); + } + + for(uint32_t i = 0; i < BSP_FEATURE_BSP_NUM_PMSAR; i++) + { + #if (2U == BSP_FEATURE_IOPORT_VERSION) + #if BSP_SECONDARY_CORE_BUILD + R_PMISC->PMSAR[i].PMSAR &= (uint16_t) pmsar[i]; + #else + R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i]; + #endif + #else + R_PMISC->PMSAR[i].PMSAR = pmsar[i]; + #endif + } + +} +#endif diff --git a/bsp/renesas/ra2a1-ek/ra_gen/vector_data.c b/bsp/renesas/ra2a1-ek/ra_gen/vector_data.c new file mode 100644 index 00000000000..ca8b9bd77ce --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/vector_data.c @@ -0,0 +1,21 @@ +/* generated vector source file - do not edit */ + #include "bsp_api.h" + /* Do not build these data structures if no interrupts are currently allocated because IAR will have build errors. */ + #if VECTOR_DATA_IRQ_COUNT > 0 + BSP_DONT_REMOVE const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_NUM_ENTRIES] BSP_PLACE_IN_SECTION(BSP_SECTION_APPLICATION_VECTORS) = + { + [0] = sci_uart_rxi_isr, /* SCI0 RXI (Receive data full) */ + [1] = sci_uart_txi_isr, /* SCI0 TXI (Transmit data empty) */ + [2] = sci_uart_tei_isr, /* SCI0 TEI (Transmit end) */ + [3] = sci_uart_eri_isr, /* SCI0 ERI (Receive error) */ + }; + #if BSP_FEATURE_ICU_HAS_IELSR + const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_NUM_ENTRIES] = + { + [0] = BSP_PRV_VECT_ENUM(EVENT_SCI0_RXI,GROUP0), /* SCI0 RXI (Receive data full) */ + [1] = BSP_PRV_VECT_ENUM(EVENT_SCI0_TXI,GROUP1), /* SCI0 TXI (Transmit data empty) */ + [2] = BSP_PRV_VECT_ENUM(EVENT_SCI0_TEI,GROUP2), /* SCI0 TEI (Transmit end) */ + [3] = BSP_PRV_VECT_ENUM(EVENT_SCI0_ERI,GROUP3), /* SCI0 ERI (Receive error) */ + }; + #endif + #endif \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/ra_gen/vector_data.h b/bsp/renesas/ra2a1-ek/ra_gen/vector_data.h new file mode 100644 index 00000000000..3d3f47428c5 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/ra_gen/vector_data.h @@ -0,0 +1,32 @@ +/* generated vector header file - do not edit */ + #ifndef VECTOR_DATA_H + #define VECTOR_DATA_H + #ifdef __cplusplus + extern "C" { + #endif + /* Number of interrupts allocated */ + #ifndef VECTOR_DATA_IRQ_COUNT + #define VECTOR_DATA_IRQ_COUNT (4) + #endif + /* ISR prototypes */ + void sci_uart_rxi_isr(void); + void sci_uart_txi_isr(void); + void sci_uart_tei_isr(void); + void sci_uart_eri_isr(void); + + /* Vector table allocations */ + #define VECTOR_NUMBER_SCI0_RXI ((IRQn_Type) 0) /* SCI0 RXI (Receive data full) */ + #define SCI0_RXI_IRQn ((IRQn_Type) 0) /* SCI0 RXI (Receive data full) */ + #define VECTOR_NUMBER_SCI0_TXI ((IRQn_Type) 1) /* SCI0 TXI (Transmit data empty) */ + #define SCI0_TXI_IRQn ((IRQn_Type) 1) /* SCI0 TXI (Transmit data empty) */ + #define VECTOR_NUMBER_SCI0_TEI ((IRQn_Type) 2) /* SCI0 TEI (Transmit end) */ + #define SCI0_TEI_IRQn ((IRQn_Type) 2) /* SCI0 TEI (Transmit end) */ + #define VECTOR_NUMBER_SCI0_ERI ((IRQn_Type) 3) /* SCI0 ERI (Receive error) */ + #define SCI0_ERI_IRQn ((IRQn_Type) 3) /* SCI0 ERI (Receive error) */ + /* The number of entries required for the ICU vector table. */ + #define BSP_ICU_VECTOR_NUM_ENTRIES (4) + + #ifdef __cplusplus + } + #endif + #endif /* VECTOR_DATA_H */ \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/rasc_launcher.bat b/bsp/renesas/ra2a1-ek/rasc_launcher.bat new file mode 100644 index 00000000000..451893077b4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/rasc_launcher.bat @@ -0,0 +1,83 @@ +@echo off +REM RASC launcher 2024-08-05 + +setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION + +REM First parameter is (possibly non-existent) file containing RASC version to invoke +set "RascVersionFile=%~1" + +REM RASC version handler script is located in the same directory as this launcher script +set "RascVersionHandler=%~dp0rasc_version.bat" + +REM Shift to leave remaining parameters as input parameters to RASC +shift + +REM Define input and output files +set "InputFile=%~dp0configuration.xml" +set "OutputFile=%~dp0output.rasc" + +REM Check if --gensmartbundle is passed, 9th param is .axf file +if "%~3"=="--gensmartbundle" ( + set "InputFile=%~9" + set "OutputFile=%~dpn9.sbd" +) +REM Check if input file exists +if not exist "%InputFile%" ( + echo [ERROR] Input file "%InputFile%" does not exist. Exiting. + exit /b 1 +) +REM Check if output file exists +if not exist "%OutputFile%" ( + echo [INFO] Output file "%OutputFile%" does not exist. Proceeding with RASC invocation... + goto :InvokeRasc +) +REM Compare timestamps of input and output files +xcopy /L /D /Y "%InputFile%" "%OutputFile%" | findstr /B /C:"1 " > nul +if not errorlevel 1 ( + echo [INFO] Input file "%InputFile%" is newer than output file "%OutputFile%". Proceeding with RASC invocation... + goto :InvokeRasc +) else ( + echo [INFO] Input file "%InputFile%" is older than output file "%OutputFile%". Skipping RASC invocation. + exit /b 0 +) +:InvokeRasc + +REM Invoke rasc_version.bat to check rasc_version.txt and update it if required +REM If user selection of RASC version is required then the first non-interactive call will exit with error status +REM In that case we re-invoke in a new command shell to allow user interaction +call "%RascVersionHandler%" "%RascVersionFile%" NonInteractive || start /wait "Renesas" cmd /c ""%RascVersionHandler%" "%RascVersionFile%"" +if errorlevel 1 exit /b 1 + +REM Extract specific RASC version from file +REM echo "%RascVersionFile%" +if exist "%RascVersionFile%" ( + + REM echo DEBUG: Have version file: "%RascVersionFile%" + + set /a idx=0 + for /f "usebackq tokens=*" %%a in ("%RascVersionFile%") do ( + if !idx! EQU 2 ( + set "RascExe=%%a" + ) + set /a idx+=1 + ) +) + +REM Synchronous behaviour for build pre/post steps +set "WaitRasc=" +IF "%~3"=="--generate" SET CLI=true +IF "%~3"=="--gensmartbundle" SET CLI=true +IF "%CLI%"=="true" ( + SET "WaitRasc=/b /wait" + SET RascExe=%RascExe:rasc.exe=rascc.exe% +) + +set Parameters= +for %%a in (%*) do ( + if defined FirstParamSkipped set Parameters=!Parameters! %%a + set FirstParamSkipped=true +) +REM echo DEBUG: Launching "%RascExe%" %Parameters% +start "" %WaitRasc% "%RascExe%" %Parameters% +if not errorlevel 1 goto :EOF +exit /b 1 diff --git a/bsp/renesas/ra2a1-ek/rasc_version.bat b/bsp/renesas/ra2a1-ek/rasc_version.bat new file mode 100644 index 00000000000..46a6a8262e0 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/rasc_version.bat @@ -0,0 +1,225 @@ +@echo off +REM RASC version handler 2024-08-05 + +setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION + +REM Initialisations +set "RascVersionFileHeader=# RASC version and installation file" +set "RascDescRootKey=SOFTWARE\Renesas\RASC\Installations" +set "VersionUnknown=Unknown" +set "RascVersionValueName=Version" +set "RascExeValueName=ExePath" +set "RascSearchPath=C:\Renesas" +set /a NumRascs=0 +set "TargetRascVersion=" +set "TargetRascExe=" +set "TargetRascVersionDiffers=" + +REM First parameter is (possibly non-existent) file containing RASC version to invoke +set "RascVersionFile=%~1" + +REM Second parameter specifies non-interactive mode +set "NonInteractiveMode=%~2" + +REM Extract specific RASC version from file +REM echo "%RascVersionFile%" +if exist "%RascVersionFile%" ( + + REM echo DEBUG: Have version file: "%RascVersionFile%" + + set /a idx=0 + for /f "usebackq tokens=*" %%a in ("%RascVersionFile%") do ( + if !idx! EQU 0 ( + if not "%%a" == "%RascVersionFileHeader%" ( + REM echo DEBUG: Header doesn't match + + goto _EndVersionFileParse + ) + ) + if !idx! EQU 1 ( + set "TargetRascVersion=%%a" + ) + if !idx! EQU 2 ( + set "TargetRascExe=%%a" + ) + set /a idx+=1 + ) +) + +:_EndVersionFileParse + +REM echo DEBUG: Target version: "%TargetRascVersion%" +REM echo DEBUG: Target exe: "%TargetRascExe%" + +REM Search through registry RASC descriptions for match on exe path and version +for %%h in (HKCU HKLM) do ( + for %%v in (32 64) do ( + for /f "usebackq skip=1 tokens=*" %%a in (`reg query "%%h\%RascDescRootKey%" /reg:%%v 2^>nul`) do ( + set "RascDescKey=%%a" + set "RascVersion=" + set "RascExe=" + + REM echo DEBUG: Desc Key: !RascDescKey! + + for /f "usebackq skip=2 tokens=3" %%b in (`reg query "!RascDescKey!" /v "%RascVersionValueName%" /reg:%%v 2^>nul`) do ( + set "RascVersion=%%b" + ) + + REM echo DEBUG: Version: !RascVersion! + + for /f "usebackq skip=2 tokens=2*" %%b in (`reg query "!RascDescKey!" /v "%RascExeValueName%" /reg:%%v 2^>nul`) do ( + REM %%b is value name, so %%c is the value - supports values with spaces + set "RascExe=%%c" + ) + + REM echo DEBUG: Exe: !RascExe! + + if not defined RascExe ( + REM Error - unable to extract executable + set ErrorMessage=Unable to extract RASC executable path from the registry + goto _Error + ) + + REM Check if exe exists, otherwise assume it's been removed + if exist "!RascExe!" ( + REM Check for specified target version and exe path match + if defined RascVersion ( + if defined TargetRascVersion ( + if /i "!RascExe!" == "%TargetRascExe%" ( + REM echo "!RascVersion!" + REM echo "%TargetRascVersion%" + if "!RascVersion!" == "%TargetRascVersion%" ( + + REM echo DEBUG: Found match + + goto _RascVersionRewrite + ) else ( + REM Indicate target RASC has a different version than + REM the registry entry. In this case, target RASC has + REM changed, so possibly prompt the user to select a + REM RASC again + set "TargetRascVersionDiffers=true" + ) + ) + ) + ) else ( + REM Error - unable to extract version + set ErrorMessage=Unable to extract RASC version from the registry + goto _Error + ) + + call :SubAddFoundRasc "!RascExe!" "!RascVersion!" + ) + ) + ) +) + +REM If target RASC exists and doesn't differ from the registry version (i.e. +REM was not found in the registry), just run it +if defined TargetRascExe ( + if exist "%TargetRascExe%" ( + if not defined TargetRascVersionDiffers ( + set "RascExe=%TargetRascExe%" + set "RascVersion=%VersionUnknown%" + goto _RascVersionRewrite + ) + ) +) + +if %NumRascs% EQU 0 ( + REM No entries found in the registry, search C:\Renesas\ as fallback + echo/ + echo Searching in "%RascSearchPath%" for RA Smart Configurator installations ... + for /f "usebackq tokens=*" %%a in (`dir "%RascSearchPath%\rasc.exe" /s /b 2^>nul`) do ( + if not "%%a" == "" ( + call :SubAddFoundRasc "%%a" "%VersionUnknown%" + ) + ) +) + +if %NumRascs% EQU 0 ( + REM Still no RASCs found - give up + set ErrorMessage=No "RA Smart Configurator" installations found, download one from renesas.com + goto _Error +) + +if %NumRascs% EQU 1 ( + set "RascExe=%RascExeList[0]%" + set "RascVersion=%RascVersionList[0]%" + goto _RascVersionRewrite +) + +REM Exit with status 1 if choice required in non-interactive mode +if not "%NonInteractiveMode%"=="" exit /b 1 + +REM Prompt for user to choose from multiple RASCs +echo/ +echo Multiple RA Smart Configurators installed: +set /a RascIdxMax=%NumRascs% - 1 +set Choices="" +for /l %%a in (0,1,%RascIdxMax%) do ( + echo %%a: Version !RascVersionList[%%a]! ^("!RascExeList[%%a]!"^) + set "Choices=!Choices!%%a" +) +echo/ +set /a ChosenIdx=%NumRascs% +if %RascIdxMax% GTR 9 ( + set /p InputIdx=Select which one to run [0-%RascIdxMax%]? + REM Check if the input string is a number + set "NonNumber=" & for /f "delims=0123456789" %%i in ("!InputIdx!") do set "NonNumber=%%i" + if not defined NonNumber ( + set /a ChosenIdx=!InputIdx! + ) +) else ( + choice /c %Choices% /m "Select which one to run" + set /a ChosenIdx=!ERRORLEVEL! - 1 +) +if %ChosenIdx% GEQ %NumRascs% ( + REM Out of range + set ErrorMessage=Invalid selection + goto _Error +) +set "RascExe=!RascExeList[%ChosenIdx%]!" +set "RascVersion=!RascVersionList[%ChosenIdx%]!" + +:_RascVersionRewrite + +REM Carefully re-write specific version file, if required +if exist "%RascVersionFile%" ( + if not defined TargetRascVersion ( + if not defined TargetRascExe ( + REM Unexpected version file contents, skip rewriting + goto _EndRascVersionRewrite + ) + ) +) + +if "!RascVersion!" == "%TargetRascVersion%" ( + if /i "!RascExe!" == "%TargetRascExe%" ( + REM Version file already up-to-date, skip rewriting + goto _EndRascVersionRewrite + ) +) + +echo %RascVersionFileHeader%>"%RascVersionFile%" +echo %RascVersion%>>"%RascVersionFile%" +echo %RascExe%>>"%RascVersionFile%" + +:_EndRascVersionRewrite +goto :EOF + +REM Add specified RASC to pseudo-list +REM Parameters: +REM 1: RascExe +REM 2: RascVersion +:SubAddFoundRasc +set "RascExeList[%NumRascs%]=%~1" +set "RascVersionList[%NumRascs%]=%~2" +set /a NumRascs+=1 +goto :EOF + +:_Error +echo/ +echo %ErrorMessage% +if "%NonInteractiveMode%"=="" pause +exit /b 1 diff --git a/bsp/renesas/ra2a1-ek/rasc_version.txt b/bsp/renesas/ra2a1-ek/rasc_version.txt new file mode 100644 index 00000000000..db3a9cac09c --- /dev/null +++ b/bsp/renesas/ra2a1-ek/rasc_version.txt @@ -0,0 +1,3 @@ +# RASC version and installation file +6.0.0 +D:\Renesas\RASC\eclipse\rasc.exe diff --git a/bsp/renesas/ra2a1-ek/rtconfig.h b/bsp/renesas/ra2a1-ek/rtconfig.h new file mode 100644 index 00000000000..e67d54e9cc4 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/rtconfig.h @@ -0,0 +1,419 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +/* klibc options */ + +/* rt_vsnprintf options */ + +/* end of rt_vsnprintf options */ + +/* rt_vsscanf options */ + +/* end of rt_vsscanf options */ + +/* rt_memset options */ + +/* end of rt_memset options */ + +/* rt_memcpy options */ + +/* end of rt_memcpy options */ + +/* rt_memmove options */ + +/* end of rt_memmove options */ + +/* rt_memcmp options */ + +/* end of rt_memcmp options */ + +/* rt_strstr options */ + +/* end of rt_strstr options */ + +/* rt_strcasecmp options */ + +/* end of rt_strcasecmp options */ + +/* rt_strncpy options */ + +/* end of rt_strncpy options */ + +/* rt_strcpy options */ + +/* end of rt_strcpy options */ + +/* rt_strncmp options */ + +/* end of rt_strncmp options */ + +/* rt_strcmp options */ + +/* end of rt_strcmp options */ + +/* rt_strlen options */ + +/* end of rt_strlen options */ + +/* rt_strnlen options */ + +/* end of rt_strnlen options */ +/* end of klibc options */ +#define RT_NAME_MAX 8 +#define RT_CPUS_NR 1 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 256 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 + +/* kservice options */ + +/* end of kservice options */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_SMALL_MEM +#define RT_USING_SMALL_MEM_AS_HEAP +#define RT_USING_HEAP +/* end of Memory Management */ +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 128 +#define RT_CONSOLE_DEVICE_NAME "uart0" +#define RT_VER_NUM 0x50201 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_HW_ATOMIC +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M23 + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V2 +#define RT_SERIAL_BUF_STRATEGY_OVERWRITE +#define RT_SERIAL_USING_DMA +#define RT_USING_PIN +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Memory protection */ + +/* end of Memory protection */ + +/* Utilities */ + +/* end of Utilities */ + +/* Using USB legacy version */ + +/* end of Using USB legacy version */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ + +/* WCH HAL & SDK Drivers */ + +/* end of WCH HAL & SDK Drivers */ + +/* AT32 HAL & SDK Drivers */ + +/* end of AT32 HAL & SDK Drivers */ + +/* HC32 DDL Drivers */ + +/* end of HC32 DDL Drivers */ + +/* NXP HAL & SDK Drivers */ + +/* end of NXP HAL & SDK Drivers */ + +/* NUVOTON Drivers */ + +/* end of NUVOTON Drivers */ + +/* GD32 Drivers */ + +/* end of GD32 Drivers */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define SOC_FAMILY_RENESAS_RA +#define SOC_SERIES_R7FA2A1 + +/* Hardware Drivers Config */ + +#define SOC_R7FA2A1AB + +/* Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_UART +#define BSP_USING_UART0 +#define BSP_UART0_RX_BUFSIZE 256 +#define BSP_UART0_TX_BUFSIZE 0 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Hardware Drivers Config */ + +#endif diff --git a/bsp/renesas/ra2a1-ek/rtconfig.py b/bsp/renesas/ra2a1-ek/rtconfig.py new file mode 100644 index 00000000000..480fee8a699 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/rtconfig.py @@ -0,0 +1,97 @@ +import os +import sys + +# toolchains options +ARCH='arm' +CPU='cortex-m23' +CROSS_TOOL='gcc' + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'D:/Renesas/FSP/toolchains/gcc_arm/13.2.rel1/bin' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armclang' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files/IAR Systems/Embedded Workbench 8.0' + +BUILD = 'debug' +# BUILD = 'release' +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + NM = PREFIX + 'nm' + + DEVICE = ' -mcpu=cortex-m23 -mthumb -ffunction-sections -fdata-sections' + CFLAGS = DEVICE + ' -Dgcc' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T script/fsp.ld -L script/' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O0 -gdwarf-2 -g -Wall' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -Os' + + POST_ACTION = OBJCPY + ' -O ihex $TARGET rtthread.hex\n' + SIZE + ' $TARGET \n' + # POST_ACTION += OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M23' + + CFLAGS = ' -mcpu=Cortex-M23 -xc -std=c99 --target=arm-arm-none-eabi -c' + CFLAGS += ' -fno-rtti -funsigned-char -ffunction-sections' + CFLAGS += ' -Wno-license-management -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal' + + AFLAGS = DEVICE + ' --apcs=interwork ' + + LFLAGS = DEVICE + ' --scatter ' + 'script/fsp.scat' + LFLAGS +=' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map --strict' + LFLAGS += ' --diag_suppress 6319,6314 --summary_stderr --info summarysizes' + LFLAGS += ' --map --load_addr_map_info --xref --callgraph --symbols' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O0' + AFLAGS += ' -g' + else: + CFLAGS += ' -Os' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET \n' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/script/bsp_link/GCC/bsp_linker_info.h b/bsp/renesas/ra2a1-ek/script/bsp_link/GCC/bsp_linker_info.h new file mode 100644 index 00000000000..38a8fb9dda7 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/bsp_link/GCC/bsp_linker_info.h @@ -0,0 +1,116 @@ +/* UNCRUSTIFY-OFF */ +#ifndef BSP_LINKER_H +#define BSP_LINKER_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/******* Solution Definitions *************/ +#define BSP_PARTITION_RAM_CPU0_START (0x20000000) +#define BSP_PARTITION_RAM_CPU0_SIZE (0x8000) +#define BSP_PARTITION_FLASH_CPU0_START (0x00000000) +#define BSP_PARTITION_FLASH_CPU0_SIZE (0x40000) +#define BSP_PARTITION_DATA_FLASH_CPU0_START (0x40100000) +#define BSP_PARTITION_DATA_FLASH_CPU0_SIZE (0x2000) + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +/* linker generated initialization table data structures types */ +typedef enum e_bsp_init_mem +{ + INIT_MEM_ZERO, + INIT_MEM_FLASH, + INIT_MEM_DATA_FLASH, + INIT_MEM_RAM, + INIT_MEM_DTCM, + INIT_MEM_ITCM, + INIT_MEM_CTCM, + INIT_MEM_STCM, + INIT_MEM_OSPI0_CS0, + INIT_MEM_OSPI0_CS1, + INIT_MEM_OSPI1_CS0, + INIT_MEM_OSPI1_CS1, + INIT_MEM_QSPI_FLASH, + INIT_MEM_SDRAM, +} bsp_init_mem_t; + +typedef struct st_bsp_init_type +{ + uint32_t copy_64 :8; /* if 1, must use 64 bit copy operation (to keep ecc happy) */ + uint32_t external :8; /* =1 if either source or destination is external, else 0 */ + uint32_t source_type :8; + uint32_t destination_type :8; +} bsp_init_type_t; + +typedef struct st_bsp_init_zero_info +{ + uint32_t *const p_base; + uint32_t *const p_limit; + bsp_init_type_t type; +} bsp_init_zero_info_t; + +typedef struct st_bsp_init_copy_info +{ + uint32_t *const p_base; + uint32_t *const p_limit; + uint32_t *const p_load; + bsp_init_type_t type; +} bsp_init_copy_info_t; + +typedef struct st_bsp_init_info +{ + uint32_t zero_count; + bsp_init_zero_info_t const *const p_zero_list; + uint32_t copy_count; + bsp_init_copy_info_t const *const p_copy_list; +} bsp_init_info_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +extern bsp_init_info_t const g_init_info; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#endif // BSP_LINKER_H +#ifdef BSP_LINKER_C +/*********************************************************************************************************************** + * Objects allocated by bsp_linker.c + **********************************************************************************************************************/ +/* DDSC symbol definitions */ +/* Zero initialization tables */ +extern uint32_t __ram_zero$$Base; +extern uint32_t __ram_zero$$Limit; +static const bsp_init_zero_info_t zero_list[] = +{ + {.p_base = &__ram_zero$$Base, .p_limit = &__ram_zero$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_RAM}} +}; +/* Load initialization tables */ +extern uint32_t __ram_from_data_flash$$Base; +extern uint32_t __ram_from_data_flash$$Limit; +extern uint32_t __ram_from_data_flash$$Load; +extern uint32_t __ram_from_flash$$Base; +extern uint32_t __ram_from_flash$$Limit; +extern uint32_t __ram_from_flash$$Load; +static const bsp_init_copy_info_t copy_list[] = +{ + {.p_base = &__ram_from_data_flash$$Base, .p_limit = &__ram_from_data_flash$$Limit, .p_load = &__ram_from_data_flash$$Load,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_DATA_FLASH, .destination_type = INIT_MEM_RAM}}, + {.p_base = &__ram_from_flash$$Base, .p_limit = &__ram_from_flash$$Limit, .p_load = &__ram_from_flash$$Load,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_RAM}} +}; + +/* initialization data structure */ +const bsp_init_info_t g_init_info = +{ + .zero_count = sizeof(zero_list) / sizeof(zero_list[0]), + .p_zero_list = zero_list, + .copy_count = sizeof(copy_list) / sizeof(copy_list[0]), + .p_copy_list = copy_list +}; + +#endif // BSP_LINKER_C + +/* UNCRUSTIFY-ON */ diff --git a/bsp/renesas/ra2a1-ek/script/bsp_link/Keil/bsp_linker_info.h b/bsp/renesas/ra2a1-ek/script/bsp_link/Keil/bsp_linker_info.h new file mode 100644 index 00000000000..a46f2e64e8a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/bsp_link/Keil/bsp_linker_info.h @@ -0,0 +1,138 @@ + /* UNCRUSTIFY-OFF */ +#ifndef BSP_LINKER_H +#define BSP_LINKER_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/******* Solution Definitions *************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ +/* linker generated initialization table data structures types */ +typedef enum e_bsp_init_mem +{ + INIT_MEM_ZERO, + INIT_MEM_FLASH, + INIT_MEM_DATA_FLASH, + INIT_MEM_RAM, + INIT_MEM_DTCM, + INIT_MEM_ITCM, + INIT_MEM_CTCM, + INIT_MEM_STCM, + INIT_MEM_OSPI0_CS0, + INIT_MEM_OSPI0_CS1, + INIT_MEM_OSPI1_CS0, + INIT_MEM_OSPI1_CS1, + INIT_MEM_QSPI_FLASH, + INIT_MEM_SDRAM, +} bsp_init_mem_t; + +typedef struct st_bsp_init_type +{ + uint32_t copy_64 : 8; /* if 1, must use 64 bit copy operation (to keep ecc happy) */ + uint32_t external : 8; /* =1 if either source or destination is external, else 0 */ + uint32_t source_type : 8; + uint32_t destination_type : 8; +} bsp_init_type_t; + +typedef struct st_bsp_init_zero_info +{ + uint32_t * const p_base; + uint32_t * const p_limit; + bsp_init_type_t type; +} bsp_init_zero_info_t; + +typedef struct st_bsp_init_copy_info +{ + uint32_t * const p_base; + uint32_t * const p_limit; + uint32_t * const p_load; + bsp_init_type_t type; +} bsp_init_copy_info_t; + +typedef struct st_bsp_init_info +{ + uint32_t zero_count; + bsp_init_zero_info_t const * const p_zero_list; + uint32_t copy_count; + bsp_init_copy_info_t const * const p_copy_list; +} bsp_init_info_t; + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +extern bsp_init_info_t const g_init_info; + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#endif // BSP_LINKER_H +#ifdef BSP_LINKER_C +/*********************************************************************************************************************** + * Objects allocated by bsp_linker.c + **********************************************************************************************************************/ +/* DDSC symbol definitions */ +extern const uint32_t Image$$__ddsc_DATA_FLASH_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_DATA_FLASH_START = &Image$$__ddsc_DATA_FLASH_START$$Base; +extern const uint32_t Image$$__ddsc_DATA_FLASH_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_DATA_FLASH_END = &Image$$__ddsc_DATA_FLASH_END$$Base; +extern const uint32_t Image$$__ddsc_FLASH_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_FLASH_START = &Image$$__ddsc_FLASH_START$$Base; +extern const uint32_t Image$$__ddsc_FLASH_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_FLASH_END = &Image$$__ddsc_FLASH_END$$Base; +extern const uint32_t Image$$__ddsc_RAM_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_RAM_START = &Image$$__ddsc_RAM_START$$Base; +extern const uint32_t Image$$__ddsc_RAM_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_RAM_END = &Image$$__ddsc_RAM_END$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OFS0_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OFS0_START = &Image$$__ddsc_OPTION_SETTING_OFS0_START$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OFS0_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OFS0_END = &Image$$__ddsc_OPTION_SETTING_OFS0_END$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OFS1_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OFS1_START = &Image$$__ddsc_OPTION_SETTING_OFS1_START$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OFS1_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OFS1_END = &Image$$__ddsc_OPTION_SETTING_OFS1_END$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_SECMPU_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_SECMPU_START = &Image$$__ddsc_OPTION_SETTING_SECMPU_START$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_SECMPU_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_SECMPU_END = &Image$$__ddsc_OPTION_SETTING_SECMPU_END$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OSIS_START$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OSIS_START = &Image$$__ddsc_OPTION_SETTING_OSIS_START$$Base; +extern const uint32_t Image$$__ddsc_OPTION_SETTING_OSIS_END$$Base; +BSP_DONT_REMOVE uint32_t const * const gp_ddsc_OPTION_SETTING_OSIS_END = &Image$$__ddsc_OPTION_SETTING_OSIS_END$$Base; +/* Zero initialization tables */ +extern uint32_t Image$$__ram_zero$$ZI$$Base; +extern uint32_t Image$$__ram_zero$$ZI$$Limit; +static const bsp_init_zero_info_t zero_list[] = +{ + {.p_base = &Image$$__ram_zero$$ZI$$Base, .p_limit = &Image$$__ram_zero$$ZI$$Limit,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_ZERO, .destination_type = INIT_MEM_RAM}} +}; +/* Load initialization tables */ +extern uint32_t Image$$__ram_from_data_flash$$Base; +extern uint32_t Image$$__ram_from_data_flash$$Limit; +extern uint32_t Load$$__ram_from_data_flash$$Base; +extern uint32_t Image$$__ram_from_flash$$Base; +extern uint32_t Image$$__ram_from_flash$$Limit; +extern uint32_t Load$$__ram_from_flash$$Base; +static const bsp_init_copy_info_t copy_list[] = +{ + {.p_base = &Image$$__ram_from_data_flash$$Base, .p_limit = &Image$$__ram_from_data_flash$$Limit, .p_load = &Load$$__ram_from_data_flash$$Base,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_DATA_FLASH, .destination_type = INIT_MEM_RAM}}, + {.p_base = &Image$$__ram_from_flash$$Base, .p_limit = &Image$$__ram_from_flash$$Limit, .p_load = &Load$$__ram_from_flash$$Base,.type={.copy_64 = 0, .external = 0, .source_type = INIT_MEM_FLASH, .destination_type = INIT_MEM_RAM}} +}; + +/* initialization data structure */ +const bsp_init_info_t g_init_info = +{ + .zero_count = sizeof(zero_list) / sizeof(zero_list[0]), + .p_zero_list = zero_list, + .copy_count = sizeof(copy_list) / sizeof(copy_list[0]), + .p_copy_list = copy_list +}; + +#endif // BSP_LINKER_C + +/* UNCRUSTIFY-ON */ diff --git a/bsp/renesas/ra2a1-ek/script/fsp.ld b/bsp/renesas/ra2a1-ek/script/fsp.ld new file mode 100644 index 00000000000..72df0bf78ae --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/fsp.ld @@ -0,0 +1,6 @@ +/* + Linker File for Renesas FSP +*/ + +INCLUDE memory_regions.ld +INCLUDE fsp_gen.ld diff --git a/bsp/renesas/ra2a1-ek/script/fsp.scat b/bsp/renesas/ra2a1-ek/script/fsp.scat new file mode 100644 index 00000000000..b82b01086b7 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/fsp.scat @@ -0,0 +1,3 @@ +#! armclang -mcpu=cortex-m23 --target=arm-arm-none-eabi -E -x c -I. +#include "memory_regions.scat" +#include "fsp_gen.scat" diff --git a/bsp/renesas/ra2a1-ek/script/fsp_gen.ld b/bsp/renesas/ra2a1-ek/script/fsp_gen.ld new file mode 100644 index 00000000000..b3080eed2eb --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/fsp_gen.ld @@ -0,0 +1,330 @@ +MEMORY +{ + RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + FLASH (rx) : ORIGIN = FLASH_START, LENGTH = FLASH_LENGTH + DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH + OPTION_SETTING_OFS0 (r) : ORIGIN = OPTION_SETTING_OFS0_START, LENGTH = OPTION_SETTING_OFS0_LENGTH + OPTION_SETTING_OFS1 (r) : ORIGIN = OPTION_SETTING_OFS1_START, LENGTH = OPTION_SETTING_OFS1_LENGTH + OPTION_SETTING_SECMPU (r) : ORIGIN = OPTION_SETTING_SECMPU_START, LENGTH = OPTION_SETTING_SECMPU_LENGTH + OPTION_SETTING_OSIS (r) : ORIGIN = OPTION_SETTING_OSIS_START, LENGTH = OPTION_SETTING_OSIS_LENGTH + FLASH_GAP (rx) : ORIGIN = FLASH_GAP_START, LENGTH = FLASH_GAP_LENGTH +} + +/* code entry point...need to define to keep crt0 _start out */ +ENTRY( Reset_Handler) +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a) + +SECTIONS +{ + .text : + { + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + + /* section information for initial. */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + . = ALIGN(4); + KEEP(*(FalPartTable)) + + }> FLASH + /***** DATA_FLASH memory section allocations ******/ + .data_flash.startof (READONLY) : + { + __ddsc_DATA_FLASH_START = .; + + }> DATA_FLASH + /***** RAM memory section allocations ******/ + .ram.startof : + { + __ddsc_RAM_START = .; + + }> RAM + __ram_dtc_vector$$ (NOLOAD) : + { + __ram_dtc_vector$$Base = .; + *(.fsp_dtc_vector_table) + __ram_dtc_vector$$Limit = .; + }> RAM + /* ram initialized from data_flash */ + __ram_from_data_flash$$ : + { + __ram_from_data_flash$$Base = .;__ram_from_data_flash$$Load = LOADADDR(__ram_from_data_flash$$); + /* section.ram.from_data_flash */ + *(.ram_from_data_flash) + /* section.ram.code_from_data_flash */ + *(.ram_code_from_data_flash) + __ram_from_data_flash$$Limit = .; + }> RAM AT > DATA_FLASH + + __data_flash_readonly$$ (READONLY) : + { + __data_flash_readonly$$Base = .; + /* section.data_flash.readonly */ + *(.data_flash) + /* section.data_flash.code */ + *(.data_flash_code) + __data_flash_readonly$$Limit = .; + }> DATA_FLASH + __data_flash_noinit$$ (NOLOAD) : + { + __data_flash_noinit$$Base = .; + /* section.data_flash.noinit */ + *(.data_flash_noinit) + __data_flash_noinit$$Limit = .; + }> DATA_FLASH + .data_flash.endof ALIGN(.,512) (READONLY) : + { + __ddsc_DATA_FLASH_END = .; + + }> DATA_FLASH + + /***** FLASH memory section allocations ******/ + .flash.startof (READONLY) : + { + __ddsc_FLASH_START = .; + + }> FLASH_GAP + /* MCU vector table */ + __flash_vectors$$ (READONLY) : + { + __flash_vectors$$Base = .; _VECTORS = .; + KEEP(*(.fixed_vectors)) + KEEP(*(.application_vectors)) + __flash_vectors$$Limit = .; + }> FLASH_GAP + /* Sections that can be used to fill flash gap */ + __flash_readonly_gap$$ (READONLY) : + { + __flash_readonly_gap$$Base = .; + /* section.flash.readonly_gap */ + *bsp_linker.?*(.rodata.*) + *(.flash_gap) + /* section.flash.code_gap */ + *startup.?*(.text.Reset_Handler) + *system.?*(.text.*) + *(.flash_gap_code) + __flash_readonly_gap$$Limit = .; + }> FLASH_GAP + + /***** FLASH memory section allocations ******/ + __flash_noinit$$ (NOLOAD) : + { + __flash_noinit$$Base = .; + /* section.flash.noinit */ + *(.flash_noinit) + __flash_noinit$$Limit = .; + }> FLASH + /***** RAM memory section allocations ******/ + /* ram initialized from flash */ + __ram_from_flash$$ : + { + __ram_from_flash$$Base = .;__ram_from_flash$$Load = LOADADDR(__ram_from_flash$$); + /* section.ram.from_flash */ + *(.ram_from_flash) + /* section.ram.code_from_flash */ + *(.ram_code_from_flash) + *(.data*) + *(vtable) + __ram_from_flash$$Limit = .; + }> RAM AT > FLASH + /* Non-initialized ram */ + __ram_noinit$$ (NOLOAD) : + { + __ram_noinit$$Base = .; + /* section.ram.noinit */ + *(.bss.g_heap) + *(.bss.g_main_stack) + *(.ram_noinit) + *(.noinit) + __ram_noinit$$Limit = .; + }> RAM + /* Zeroed ram */ + __ram_zero$$ (NOLOAD) : + { + __ram_zero$$Base = .; + /* section.ram.zero */ + *(.ram) + *(.bss*) + __ram_zero$$Limit = .; + }> RAM + /* Thread Stacks */ + __ram_thread_stack$$ (NOLOAD) : ALIGN(8) + { + __ram_thread_stack$$Base = .; + KEEP(*(.stack?*)) + __ram_thread_stack$$Limit = .; + }> RAM + .ram.endof ALIGN(.,512) : + { + __ddsc_RAM_END = .; + + }> RAM + + __flash_readonly$$ (READONLY) : + { + __flash_readonly$$Base = .; + /* section.flash.readonly */ + *(.flash) + /* section.flash.code */ + *(.flash_code) + *(.text*) + *(.rodata*) + KEEP(*(.mcuboot_sce9_key)) + KEEP(*(.version)) + __flash_readonly$$Limit = .; + }> FLASH + __flash_ctor$$ (READONLY) : + { + + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + EXCLUDE_FILE (*crtend?.o *crtend.o) *(.ctors) + *(SORT(.ctors.*)) + *(.ctors) + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + EXCLUDE_FILE (*crtend?.o *crtend.o) *(.dtors) + *(SORT(.dtors.*)) + *(.dtors) + + }> FLASH + __flash_preinit_array$$ (READONLY) : + { + __preinit_array_start = .; + KEEP(*(.preinit_array)) + __preinit_array_end = .; + }> FLASH + __flash_.got$$ (READONLY) : + { + + *(.got.plt) + *(.got) + + }> FLASH + __flash_init_array$$ (READONLY) : + { + __init_array_start = .; + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + __init_array_end = .; + }> FLASH + __flash_fini_array$$ (READONLY) : + { + __fini_array_start = .; + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + __fini_array_end = .; + }> FLASH + /* Discard exception tables */ + /DISCARD/ (READONLY) : + { + + *(.ARM.extab*) + *(.gnu.linkonce.armextab.*) + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + + }> FLASH + /* Dummy section to hold required exidx labels */ + __flash_arm.exidx$$ (READONLY) : + { + __exidx_start = .; + __exidx_end = .; + }> FLASH + .flash.endof ALIGN(.,512) (READONLY) : + { + __ddsc_FLASH_END = .; + + }> FLASH + + /***** OPTION_SETTING_OFS0 memory section allocations ******/ + .option_setting_ofs0.startof (READONLY) : + { + __ddsc_OPTION_SETTING_OFS0_START = .; + + }> OPTION_SETTING_OFS0 + /* Option Function Select Register 0 */ + __option_setting_ofs0_reg$$ (READONLY) : + { + __option_setting_ofs0_reg$$Base = .; + KEEP(*(.option_setting_ofs0)) + __option_setting_ofs0_reg$$Limit = .; + }> OPTION_SETTING_OFS0 + .option_setting_ofs0.endof (READONLY) : + { + __ddsc_OPTION_SETTING_OFS0_END = .; + + }> OPTION_SETTING_OFS0 + + /***** OPTION_SETTING_OFS1 memory section allocations ******/ + .option_setting_ofs1.startof (READONLY) : + { + __ddsc_OPTION_SETTING_OFS1_START = .; + + }> OPTION_SETTING_OFS1 + /* Option Function Select Register 1 */ + __option_setting_ofs1_reg$$ (READONLY) : + { + __option_setting_ofs1_reg$$Base = .; + KEEP(*(.option_setting_ofs1)) + __option_setting_ofs1_reg$$Limit = .; + }> OPTION_SETTING_OFS1 + .option_setting_ofs1.endof (READONLY) : + { + __ddsc_OPTION_SETTING_OFS1_END = .; + + }> OPTION_SETTING_OFS1 + + /***** OPTION_SETTING_SECMPU memory section allocations ******/ + .option_setting_secmpu.startof (READONLY) : + { + __ddsc_OPTION_SETTING_SECMPU_START = .; + + }> OPTION_SETTING_SECMPU + /* Security MPU Registers */ + __option_setting_secmpu_reg$$ (READONLY) : + { + __option_setting_secmpu_reg$$Base = .; + KEEP(*(.option_setting_secmpu)) + __option_setting_secmpu_reg$$Limit = .; + }> OPTION_SETTING_SECMPU + .option_setting_secmpu.endof (READONLY) : + { + __ddsc_OPTION_SETTING_SECMPU_END = .; + + }> OPTION_SETTING_SECMPU + + /***** OPTION_SETTING_OSIS memory section allocations ******/ + .option_setting_osis.startof (READONLY) : + { + __ddsc_OPTION_SETTING_OSIS_START = .; + + }> OPTION_SETTING_OSIS + /* OCD/Serial Programmer ID setting register */ + __option_setting_osis_reg$$ (READONLY) : + { + __option_setting_osis_reg$$Base = .; + KEEP(*(.option_setting_osis)) + __option_setting_osis_reg$$Limit = .; + }> OPTION_SETTING_OSIS + .option_setting_osis.endof (READONLY) : + { + __ddsc_OPTION_SETTING_OSIS_END = .; + + }> OPTION_SETTING_OSIS + +} + diff --git a/bsp/renesas/ra2a1-ek/script/memory_regions.ld b/bsp/renesas/ra2a1-ek/script/memory_regions.ld new file mode 100644 index 00000000000..451c2e6472b --- /dev/null +++ b/bsp/renesas/ra2a1-ek/script/memory_regions.ld @@ -0,0 +1,17 @@ +/* generated memory regions file - do not edit */ +RAM_START = 0x20000000; +RAM_LENGTH = 0x00008000; +FLASH_START = 0x00000440; +FLASH_LENGTH = 0x0003fbc0; +DATA_FLASH_START = 0x40100000; +DATA_FLASH_LENGTH = 0x00002000; +OPTION_SETTING_OFS0_START = 0x00000400; +OPTION_SETTING_OFS0_LENGTH = 0x00000004; +OPTION_SETTING_OFS1_START = 0x00000404; +OPTION_SETTING_OFS1_LENGTH = 0x00000004; +OPTION_SETTING_SECMPU_START = 0x00000408; +OPTION_SETTING_SECMPU_LENGTH = 0x00000034; +OPTION_SETTING_OSIS_START = 0x01010018; +OPTION_SETTING_OSIS_LENGTH = 0x00000020; +FLASH_GAP_START = 0x00000000; +FLASH_GAP_LENGTH = 0x00000400; diff --git a/bsp/renesas/ra2a1-ek/src/hal_entry.c b/bsp/renesas/ra2a1-ek/src/hal_entry.c new file mode 100644 index 00000000000..f73dd37f56a --- /dev/null +++ b/bsp/renesas/ra2a1-ek/src/hal_entry.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2025-08-17 CYFS first version + */ + +#include +#include "hal_data.h" +#include +#define LED_PIN BSP_IO_PORT_02_PIN_05 /* Onboard LED pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + while (1) + { + rt_pin_write(LED_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} + diff --git a/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW b/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW new file mode 100644 index 00000000000..f892a9a5744 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW @@ -0,0 +1,1878 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 188 122 + + + 346 + Code Coverage + 1410 160 + + + 204 + Performance Analyzer + 1570 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 106 106 106 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser - *** Not Enabled *** + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 1 + + -1 + -1 + + + -1 + -1 + + + 251 + 65 + 1615 + 1131 + + + + 0 + + 260 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000100000000000000010000003B453A5C52542D7468726561645C72742D7468726561645C6273705C72656E657361735C72613261312D656B5C7372635C68616C5F656E7472792E63000000000B68616C5F656E7472792E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000008D010000690100004706000088030000 + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 440100004F0000007007000013010000 + + + 16 + 8D01000069010000B90700002D020000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D01000055020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D01000055020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D01000055020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D01000055020000 + + + 16 + 3C00000053000000B801000067030000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0000000086020000FE05000036030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000ED02000070070000C5030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000089020000FB0500001D030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000660000003D010000CA010000 + + + 16 + 3C00000053000000B801000067030000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000089020000FB0500001D030000 + + + 16 + 3C00000053000000F403000017010000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000089020000FB0500001D030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000089020000FB0500001D030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000089020000FB0500001D030000 + + + 16 + 3C00000053000000B801000067030000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 47010000660000006D070000FA000000 + + + 16 + 3C00000053000000F403000017010000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 33060000660000006D070000E4020000 + + + 16 + 3C000000530000007C01000064010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0000000036030000FE05000049030000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000040300006D070000AC030000 + + + 16 + 3C000000530000007C01000064010000 + + + + 3334 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000130100007007000017010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000008D01000069010000B90700002D020000440100004F00000070070000130100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F00000030060000FD020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000007906000069010000B907000017040000300600004F00000070070000FD02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F000000440100006E020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000490000006901000089010000FD020000000000004F000000400100006E0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E902000070070000ED02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000004900000007040000B9070000DF04000000000000ED02000070070000C503000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000ED020000BC030000C503000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000006E020000FE05000072020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000490000000103000047060000C50300000000000072020000FE050000360300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF24536F757263652042726F77736572202D202A2A2A204E6F7420456E61626C6564202A2A2A00000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2556 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000752414D5F454E44960000000000000001000752414D5F454E4400000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000085461726765745F3196000000000000000100085461726765745F31000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 2560 + 1440 + + + + + + 1 + 0 + + 100 + 0 + + .\src\hal_entry.c + 20 + 14 + 16 + 1 + + 0 + + + + +
diff --git a/bsp/renesas/ra2a1-ek/template.uvoptx b/bsp/renesas/ra2a1-ek/template.uvoptx new file mode 100644 index 00000000000..16b3f0a4043 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/template.uvoptx @@ -0,0 +1,218 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp; *.cc; *.cxx + 0 + + + + 0 + 0 + + + + Target_1 + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 1 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 4 + + + + + + + + + + + Segger\JL2CM3.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) + + + 0 + JL2CM3 + -O111 -N00("ARM CoreSight SW-DP") -S2 -ZTIFSpeedSel5000 -A0 -C-1 -JU1 -JI127.0.0.1 -JP0 -RST0 -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD0 -FC800 -FN0 + + + 0 + UL2V8M + UL2V8M(-S0 -C0 -P0 ) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Source Group 1 + 0 + 0 + 0 + 0 + + + + :Renesas RA Smart Configurator:Common Sources + 0 + 0 + 0 + 0 + + 2 + 1 + 1 + 0 + 0 + 0 + .\src\hal_entry.c + hal_entry.c + 0 + 0 + + + + + ::Flex Software + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/renesas/ra2a1-ek/template.uvprojx b/bsp/renesas/ra2a1-ek/template.uvprojx new file mode 100644 index 00000000000..55dea48e661 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/template.uvprojx @@ -0,0 +1,433 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target_1 + 0x4 + ARM-ADS + 6210000::V6.21::ARMCLANG + 1 + + + R7FA2A1AB + Renesas + Renesas.RA_DFP.6.0.0 + https://www2.renesas.eu/Keil_MDK_Packs/ + CPUTYPE("Cortex-M23") CLOCK(12000000) ELITTLE + + + + 0 + + + + + + + + + + + $$Device:R7FA2A1AB$SVD\R7FA2A1AB.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + rtthread + 1 + 0 + 1 + 1 + 0 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out" && echo. > "$Poutput.rasc"" + + 0 + 0 + 2 + 0 + + + 1 + 0 + cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --gensmartbundle --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" "$L%L" 2> "%%TEMP%%\rasc_stderr.out"" + + 0 + 0 + 2 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMV8M.DLL + -MPU + DCM.DLL + -pCM4 + SARMV8M.DLL + -MPU + TCM.DLL + -pCM23 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 0 + 1 + 0 + 0 + 1 + -1 + + 1 + + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M23" + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 3 + 6 + 0 + 0 + 0 + 0 + 0 + + -ffunction-sections -Wno-license-management -Wunused -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal -Wno-unused-but-set-variable -Wno-implicit-function-declaration -Wno-deprecated-non-prototype -Wno-int-conversion -Oz -D_RENESAS_RA_ -D_RA_CORE=CM23 -D_RA_ORDINAL=1 + + + + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + --via=via/rasc_armasm.via + + + + + + + 0 + 0 + 0 + 0 + 0 + 0 + + + + .\script\fsp.scat + + + --via=via/rasc_armlink.via + + + + + + + + Source Group 1 + + + :Renesas RA Smart Configurator:Common Sources + + + hal_entry.c + 1 + .\src\hal_entry.c + + + + + ::Flex Software + + + + + + + + + + + + + + + + + + + + + + + + + + + + + template + 1 + + + + +
diff --git a/bsp/renesas/ra2a1-ek/via/rasc_armasm.via b/bsp/renesas/ra2a1-ek/via/rasc_armasm.via new file mode 100644 index 00000000000..6be7b6124ee --- /dev/null +++ b/bsp/renesas/ra2a1-ek/via/rasc_armasm.via @@ -0,0 +1 @@ +# generated via file - do not edit \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/via/rasc_armclang.via b/bsp/renesas/ra2a1-ek/via/rasc_armclang.via new file mode 100644 index 00000000000..78b91d410d6 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/via/rasc_armclang.via @@ -0,0 +1,20 @@ +-ffunction-sections +-Wno-license-management +-Wunused +-Wuninitialized +-Wall +-Wextra +-Wmissing-declarations +-Wconversion +-Wpointer-arith +-Wshadow +-Waggregate-return +-Wfloat-equal +-Wno-unused-but-set-variable +-Wno-implicit-function-declaration +-Wno-deprecated-non-prototype +-Wno-int-conversion +-Oz +-D_RA_CORE=CM23 +-D_RENESAS_RA_ +-D_RA_ORDINAL=1 \ No newline at end of file diff --git a/bsp/renesas/ra2a1-ek/via/rasc_armlink.via b/bsp/renesas/ra2a1-ek/via/rasc_armlink.via new file mode 100644 index 00000000000..322db780935 --- /dev/null +++ b/bsp/renesas/ra2a1-ek/via/rasc_armlink.via @@ -0,0 +1,6 @@ +# generated via file - do not edit +--entry=Reset_Handler +--library_type=microlib +--no_startup +--legacyalign +--diag_suppress=6319,6314,3912 \ No newline at end of file From 63b7dd43d7b17ce12034faa1d2ce603d3a9a4689 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Mon, 18 Aug 2025 12:05:49 +0800 Subject: [PATCH 2/6] fix_some_bug --- bsp/renesas/ra2a1-ek/README.md | 6 +- bsp/renesas/ra2a1-ek/SConscript | 2 +- bsp/renesas/ra2a1-ek/board/ports/SConscript | 3 - .../picture/PixPin_2025-08-17_23-43-47.png | Bin 729368 -> 0 bytes bsp/renesas/ra2a1-ek/project.uvoptx | 30 +- bsp/renesas/ra2a1-ek/project.uvprojx | 40 +- bsp/renesas/ra2a1-ek/rasc_launcher.bat | 83 - bsp/renesas/ra2a1-ek/rasc_version.bat | 225 -- bsp/renesas/ra2a1-ek/rasc_version.txt | 3 - bsp/renesas/ra2a1-ek/rtconfig.py | 10 +- bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW | 1878 ----------------- bsp/renesas/ra2a1-ek/template.uvprojx | 8 +- 12 files changed, 49 insertions(+), 2239 deletions(-) delete mode 100644 bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png delete mode 100644 bsp/renesas/ra2a1-ek/rasc_launcher.bat delete mode 100644 bsp/renesas/ra2a1-ek/rasc_version.bat delete mode 100644 bsp/renesas/ra2a1-ek/rasc_version.txt delete mode 100644 bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW diff --git a/bsp/renesas/ra2a1-ek/README.md b/bsp/renesas/ra2a1-ek/README.md index 79dfe5b253d..f16563373b5 100644 --- a/bsp/renesas/ra2a1-ek/README.md +++ b/bsp/renesas/ra2a1-ek/README.md @@ -144,9 +144,11 @@ void hal_entry(void) 1.需要下载 [e² studio](https://www.renesas.cn/zh/software-tool/e-studio) 集成开发环境,使用目录下的GCC工具链`toolchains\gcc_arm\13.2.rel1\bin` -2.修改`rtconfig.py`中的工具链路径 +2.设置env中的工具链路径 -![PixPin_2025-08-17_23-43-47](docs/picture/PixPin_2025-08-17_23-43-47.png) +```bash + set RTT_EXEC_PATH=\toolchains\gcc_arm\13.2.rel1\bin +``` 3.fsp的使用,打开当前目录下的`configuration.xml` diff --git a/bsp/renesas/ra2a1-ek/SConscript b/bsp/renesas/ra2a1-ek/SConscript index 755bc2294b5..a92456b49ca 100644 --- a/bsp/renesas/ra2a1-ek/SConscript +++ b/bsp/renesas/ra2a1-ek/SConscript @@ -19,7 +19,7 @@ elif rtconfig.PLATFORM in ['gcc', 'armclang']: if rtconfig.PLATFORM in ['armclang']: CPPPATH = [cwd + '/script/bsp_link/Keil'] elif rtconfig.PLATFORM in ['gcc']: - CPPPATH = [cwd + 'script/bsp_link/GCC'] + CPPPATH = [cwd + '/script/bsp_link/GCC'] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) for d in list: path = os.path.join(cwd, d) diff --git a/bsp/renesas/ra2a1-ek/board/ports/SConscript b/bsp/renesas/ra2a1-ek/board/ports/SConscript index 4871d7248bf..24dd24f510b 100644 --- a/bsp/renesas/ra2a1-ek/board/ports/SConscript +++ b/bsp/renesas/ra2a1-ek/board/ports/SConscript @@ -6,9 +6,6 @@ cwd = GetCurrentDir() src = [] -if GetDepend(['BSP_USING_RW007']): - src += Glob('drv_rw007.c') - CPPPATH = [cwd] LOCAL_CFLAGS = '' diff --git a/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png b/bsp/renesas/ra2a1-ek/docs/picture/PixPin_2025-08-17_23-43-47.png deleted file mode 100644 index d14d62789a23ae6cc0ce8c06182fc841d857fadb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729368 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

4w>v2Cx!`_W>~9{afUS1h}-AaN;$ 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 $vtONaK3g<+=F&4LYbP>OG(V16}% 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%0A57!m@jkgo`wUopxUF=`mudK-(WYZ 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 -I4Phq*XpT9)I-r*hZWbm%uL#1 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 z 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¬H-ydT$;LSeJ9b>FzFaNv#FhWl~Np$f`6ry?BdMi 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 diff --git a/bsp/renesas/ra2a1-ek/project.uvoptx b/bsp/renesas/ra2a1-ek/project.uvoptx index c522b197e3d..57c5bde5ae9 100644 --- a/bsp/renesas/ra2a1-ek/project.uvoptx +++ b/bsp/renesas/ra2a1-ek/project.uvoptx @@ -492,8 +492,8 @@ 0 0 0 - ..\..\..\components\finsh\cmd.c - cmd.c + ..\..\..\components\finsh\shell.c + shell.c 0 0 @@ -516,8 +516,8 @@ 0 0 0 - ..\..\..\components\finsh\shell.c - shell.c + ..\..\..\components\finsh\cmd.c + cmd.c 0 0 @@ -724,8 +724,8 @@ 0 0 0 - ..\..\..\src\klibc\kstdio.c - kstdio.c + ..\..\..\src\klibc\rt_vsnprintf_tiny.c + rt_vsnprintf_tiny.c 0 0 @@ -736,8 +736,8 @@ 0 0 0 - ..\..\..\src\klibc\kerrno.c - kerrno.c + ..\..\..\src\klibc\kstring.c + kstring.c 0 0 @@ -748,8 +748,8 @@ 0 0 0 - ..\..\..\src\klibc\rt_vsnprintf_tiny.c - rt_vsnprintf_tiny.c + ..\..\..\src\klibc\rt_vsscanf.c + rt_vsscanf.c 0 0 @@ -760,8 +760,8 @@ 0 0 0 - ..\..\..\src\klibc\kstring.c - kstring.c + ..\..\..\src\klibc\kerrno.c + kerrno.c 0 0 @@ -772,8 +772,8 @@ 0 0 0 - ..\..\..\src\klibc\rt_vsscanf.c - rt_vsscanf.c + ..\..\..\src\klibc\kstdio.c + kstdio.c 0 0 @@ -849,7 +849,7 @@ :Renesas RA Smart Configurator:Common Sources - 1 + 0 0 0 0 diff --git a/bsp/renesas/ra2a1-ek/project.uvprojx b/bsp/renesas/ra2a1-ek/project.uvprojx index e34377d006a..aad22649121 100644 --- a/bsp/renesas/ra2a1-ek/project.uvprojx +++ b/bsp/renesas/ra2a1-ek/project.uvprojx @@ -70,9 +70,9 @@ 0 - 1 + 0 0 - cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out" && echo. > "$Poutput.rasc"" + 0 0 @@ -80,9 +80,9 @@ 0 - 1 + 0 0 - cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --gensmartbundle --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" "$L%L" 2> "%%TEMP%%\rasc_stderr.out"" + 0 0 @@ -338,9 +338,9 @@ 0 -ffunction-sections -Wno-license-management -Wunused -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal -Wno-unused-but-set-variable -Wno-implicit-function-declaration -Wno-deprecated-non-prototype -Wno-int-conversion -Oz -D_RENESAS_RA_ -D_RA_CORE=CM23 -D_RA_ORDINAL=1 - RT_USING_LIBC, RT_USING_ARMLIBC, __STDC_LIMIT_MACROS, __CLK_TCK=RT_TICK_PER_SECOND, __RTTHREAD__ + RT_USING_ARMLIBC, __CLK_TCK=RT_TICK_PER_SECOND, __STDC_LIMIT_MACROS, __RTTHREAD__, RT_USING_LIBC - ..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\poll;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\libraries\HAL_Drivers;..\..\..\components\libc\compilers\common\extension;..\..\..\libcpu\arm\cortex-m23;..\..\..\components\libc\posix\ipc;board\ports;..\..\..\components\libc\posix\io\eventfd;..\libraries\HAL_Drivers\config;..\..\..\components\drivers\smp_call;..\..\..\components\libc\compilers\common\include;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\epoll;..\..\..\include;script\bsp_link\Keil;..\..\..\components\libc\compilers\common\extension\fcntl\octal;board;..\..\..\components\finsh;.;..\..\..\libcpu\arm\common;..\..\..\components\drivers\phy;..\..\..\components\drivers\include + ..\..\..\libcpu\arm\common;..\..\..\components\libc\posix\io\epoll;..\..\..\components\finsh;..\..\..\components\drivers\include;board\ports;..\libraries\HAL_Drivers\config;..\..\..\components\libc\posix\io\poll;..\..\..\include;..\..\..\components\drivers\include;..\..\..\components\drivers\phy;..\..\..\components\drivers\smp_call;..\..\..\components\libc\posix\ipc;..\..\..\components\libc\compilers\common\extension\fcntl\octal;board;script\bsp_link\Keil;..\..\..\components\libc\compilers\common\include;..\libraries\HAL_Drivers;.;..\..\..\components\drivers\include;..\..\..\libcpu\arm\cortex-m23;..\..\..\components\drivers\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\drivers\include;..\..\..\components\libc\posix\io\eventfd @@ -1280,9 +1280,9 @@ Finsh - cmd.c + shell.c 1 - ..\..\..\components\finsh\cmd.c + ..\..\..\components\finsh\shell.c msh.c @@ -1290,9 +1290,9 @@ ..\..\..\components\finsh\msh.c - shell.c + cmd.c 1 - ..\..\..\components\finsh\shell.c + ..\..\..\components\finsh\cmd.c msh_parse.c @@ -2093,16 +2093,6 @@ klibc - - kstdio.c - 1 - ..\..\..\src\klibc\kstdio.c - - - kerrno.c - 1 - ..\..\..\src\klibc\kerrno.c - rt_vsnprintf_tiny.c 1 @@ -2118,6 +2108,16 @@ 1 ..\..\..\src\klibc\rt_vsscanf.c + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.c + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.c + diff --git a/bsp/renesas/ra2a1-ek/rasc_launcher.bat b/bsp/renesas/ra2a1-ek/rasc_launcher.bat deleted file mode 100644 index 451893077b4..00000000000 --- a/bsp/renesas/ra2a1-ek/rasc_launcher.bat +++ /dev/null @@ -1,83 +0,0 @@ -@echo off -REM RASC launcher 2024-08-05 - -setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION - -REM First parameter is (possibly non-existent) file containing RASC version to invoke -set "RascVersionFile=%~1" - -REM RASC version handler script is located in the same directory as this launcher script -set "RascVersionHandler=%~dp0rasc_version.bat" - -REM Shift to leave remaining parameters as input parameters to RASC -shift - -REM Define input and output files -set "InputFile=%~dp0configuration.xml" -set "OutputFile=%~dp0output.rasc" - -REM Check if --gensmartbundle is passed, 9th param is .axf file -if "%~3"=="--gensmartbundle" ( - set "InputFile=%~9" - set "OutputFile=%~dpn9.sbd" -) -REM Check if input file exists -if not exist "%InputFile%" ( - echo [ERROR] Input file "%InputFile%" does not exist. Exiting. - exit /b 1 -) -REM Check if output file exists -if not exist "%OutputFile%" ( - echo [INFO] Output file "%OutputFile%" does not exist. Proceeding with RASC invocation... - goto :InvokeRasc -) -REM Compare timestamps of input and output files -xcopy /L /D /Y "%InputFile%" "%OutputFile%" | findstr /B /C:"1 " > nul -if not errorlevel 1 ( - echo [INFO] Input file "%InputFile%" is newer than output file "%OutputFile%". Proceeding with RASC invocation... - goto :InvokeRasc -) else ( - echo [INFO] Input file "%InputFile%" is older than output file "%OutputFile%". Skipping RASC invocation. - exit /b 0 -) -:InvokeRasc - -REM Invoke rasc_version.bat to check rasc_version.txt and update it if required -REM If user selection of RASC version is required then the first non-interactive call will exit with error status -REM In that case we re-invoke in a new command shell to allow user interaction -call "%RascVersionHandler%" "%RascVersionFile%" NonInteractive || start /wait "Renesas" cmd /c ""%RascVersionHandler%" "%RascVersionFile%"" -if errorlevel 1 exit /b 1 - -REM Extract specific RASC version from file -REM echo "%RascVersionFile%" -if exist "%RascVersionFile%" ( - - REM echo DEBUG: Have version file: "%RascVersionFile%" - - set /a idx=0 - for /f "usebackq tokens=*" %%a in ("%RascVersionFile%") do ( - if !idx! EQU 2 ( - set "RascExe=%%a" - ) - set /a idx+=1 - ) -) - -REM Synchronous behaviour for build pre/post steps -set "WaitRasc=" -IF "%~3"=="--generate" SET CLI=true -IF "%~3"=="--gensmartbundle" SET CLI=true -IF "%CLI%"=="true" ( - SET "WaitRasc=/b /wait" - SET RascExe=%RascExe:rasc.exe=rascc.exe% -) - -set Parameters= -for %%a in (%*) do ( - if defined FirstParamSkipped set Parameters=!Parameters! %%a - set FirstParamSkipped=true -) -REM echo DEBUG: Launching "%RascExe%" %Parameters% -start "" %WaitRasc% "%RascExe%" %Parameters% -if not errorlevel 1 goto :EOF -exit /b 1 diff --git a/bsp/renesas/ra2a1-ek/rasc_version.bat b/bsp/renesas/ra2a1-ek/rasc_version.bat deleted file mode 100644 index 46a6a8262e0..00000000000 --- a/bsp/renesas/ra2a1-ek/rasc_version.bat +++ /dev/null @@ -1,225 +0,0 @@ -@echo off -REM RASC version handler 2024-08-05 - -setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION - -REM Initialisations -set "RascVersionFileHeader=# RASC version and installation file" -set "RascDescRootKey=SOFTWARE\Renesas\RASC\Installations" -set "VersionUnknown=Unknown" -set "RascVersionValueName=Version" -set "RascExeValueName=ExePath" -set "RascSearchPath=C:\Renesas" -set /a NumRascs=0 -set "TargetRascVersion=" -set "TargetRascExe=" -set "TargetRascVersionDiffers=" - -REM First parameter is (possibly non-existent) file containing RASC version to invoke -set "RascVersionFile=%~1" - -REM Second parameter specifies non-interactive mode -set "NonInteractiveMode=%~2" - -REM Extract specific RASC version from file -REM echo "%RascVersionFile%" -if exist "%RascVersionFile%" ( - - REM echo DEBUG: Have version file: "%RascVersionFile%" - - set /a idx=0 - for /f "usebackq tokens=*" %%a in ("%RascVersionFile%") do ( - if !idx! EQU 0 ( - if not "%%a" == "%RascVersionFileHeader%" ( - REM echo DEBUG: Header doesn't match - - goto _EndVersionFileParse - ) - ) - if !idx! EQU 1 ( - set "TargetRascVersion=%%a" - ) - if !idx! EQU 2 ( - set "TargetRascExe=%%a" - ) - set /a idx+=1 - ) -) - -:_EndVersionFileParse - -REM echo DEBUG: Target version: "%TargetRascVersion%" -REM echo DEBUG: Target exe: "%TargetRascExe%" - -REM Search through registry RASC descriptions for match on exe path and version -for %%h in (HKCU HKLM) do ( - for %%v in (32 64) do ( - for /f "usebackq skip=1 tokens=*" %%a in (`reg query "%%h\%RascDescRootKey%" /reg:%%v 2^>nul`) do ( - set "RascDescKey=%%a" - set "RascVersion=" - set "RascExe=" - - REM echo DEBUG: Desc Key: !RascDescKey! - - for /f "usebackq skip=2 tokens=3" %%b in (`reg query "!RascDescKey!" /v "%RascVersionValueName%" /reg:%%v 2^>nul`) do ( - set "RascVersion=%%b" - ) - - REM echo DEBUG: Version: !RascVersion! - - for /f "usebackq skip=2 tokens=2*" %%b in (`reg query "!RascDescKey!" /v "%RascExeValueName%" /reg:%%v 2^>nul`) do ( - REM %%b is value name, so %%c is the value - supports values with spaces - set "RascExe=%%c" - ) - - REM echo DEBUG: Exe: !RascExe! - - if not defined RascExe ( - REM Error - unable to extract executable - set ErrorMessage=Unable to extract RASC executable path from the registry - goto _Error - ) - - REM Check if exe exists, otherwise assume it's been removed - if exist "!RascExe!" ( - REM Check for specified target version and exe path match - if defined RascVersion ( - if defined TargetRascVersion ( - if /i "!RascExe!" == "%TargetRascExe%" ( - REM echo "!RascVersion!" - REM echo "%TargetRascVersion%" - if "!RascVersion!" == "%TargetRascVersion%" ( - - REM echo DEBUG: Found match - - goto _RascVersionRewrite - ) else ( - REM Indicate target RASC has a different version than - REM the registry entry. In this case, target RASC has - REM changed, so possibly prompt the user to select a - REM RASC again - set "TargetRascVersionDiffers=true" - ) - ) - ) - ) else ( - REM Error - unable to extract version - set ErrorMessage=Unable to extract RASC version from the registry - goto _Error - ) - - call :SubAddFoundRasc "!RascExe!" "!RascVersion!" - ) - ) - ) -) - -REM If target RASC exists and doesn't differ from the registry version (i.e. -REM was not found in the registry), just run it -if defined TargetRascExe ( - if exist "%TargetRascExe%" ( - if not defined TargetRascVersionDiffers ( - set "RascExe=%TargetRascExe%" - set "RascVersion=%VersionUnknown%" - goto _RascVersionRewrite - ) - ) -) - -if %NumRascs% EQU 0 ( - REM No entries found in the registry, search C:\Renesas\ as fallback - echo/ - echo Searching in "%RascSearchPath%" for RA Smart Configurator installations ... - for /f "usebackq tokens=*" %%a in (`dir "%RascSearchPath%\rasc.exe" /s /b 2^>nul`) do ( - if not "%%a" == "" ( - call :SubAddFoundRasc "%%a" "%VersionUnknown%" - ) - ) -) - -if %NumRascs% EQU 0 ( - REM Still no RASCs found - give up - set ErrorMessage=No "RA Smart Configurator" installations found, download one from renesas.com - goto _Error -) - -if %NumRascs% EQU 1 ( - set "RascExe=%RascExeList[0]%" - set "RascVersion=%RascVersionList[0]%" - goto _RascVersionRewrite -) - -REM Exit with status 1 if choice required in non-interactive mode -if not "%NonInteractiveMode%"=="" exit /b 1 - -REM Prompt for user to choose from multiple RASCs -echo/ -echo Multiple RA Smart Configurators installed: -set /a RascIdxMax=%NumRascs% - 1 -set Choices="" -for /l %%a in (0,1,%RascIdxMax%) do ( - echo %%a: Version !RascVersionList[%%a]! ^("!RascExeList[%%a]!"^) - set "Choices=!Choices!%%a" -) -echo/ -set /a ChosenIdx=%NumRascs% -if %RascIdxMax% GTR 9 ( - set /p InputIdx=Select which one to run [0-%RascIdxMax%]? - REM Check if the input string is a number - set "NonNumber=" & for /f "delims=0123456789" %%i in ("!InputIdx!") do set "NonNumber=%%i" - if not defined NonNumber ( - set /a ChosenIdx=!InputIdx! - ) -) else ( - choice /c %Choices% /m "Select which one to run" - set /a ChosenIdx=!ERRORLEVEL! - 1 -) -if %ChosenIdx% GEQ %NumRascs% ( - REM Out of range - set ErrorMessage=Invalid selection - goto _Error -) -set "RascExe=!RascExeList[%ChosenIdx%]!" -set "RascVersion=!RascVersionList[%ChosenIdx%]!" - -:_RascVersionRewrite - -REM Carefully re-write specific version file, if required -if exist "%RascVersionFile%" ( - if not defined TargetRascVersion ( - if not defined TargetRascExe ( - REM Unexpected version file contents, skip rewriting - goto _EndRascVersionRewrite - ) - ) -) - -if "!RascVersion!" == "%TargetRascVersion%" ( - if /i "!RascExe!" == "%TargetRascExe%" ( - REM Version file already up-to-date, skip rewriting - goto _EndRascVersionRewrite - ) -) - -echo %RascVersionFileHeader%>"%RascVersionFile%" -echo %RascVersion%>>"%RascVersionFile%" -echo %RascExe%>>"%RascVersionFile%" - -:_EndRascVersionRewrite -goto :EOF - -REM Add specified RASC to pseudo-list -REM Parameters: -REM 1: RascExe -REM 2: RascVersion -:SubAddFoundRasc -set "RascExeList[%NumRascs%]=%~1" -set "RascVersionList[%NumRascs%]=%~2" -set /a NumRascs+=1 -goto :EOF - -:_Error -echo/ -echo %ErrorMessage% -if "%NonInteractiveMode%"=="" pause -exit /b 1 diff --git a/bsp/renesas/ra2a1-ek/rasc_version.txt b/bsp/renesas/ra2a1-ek/rasc_version.txt deleted file mode 100644 index db3a9cac09c..00000000000 --- a/bsp/renesas/ra2a1-ek/rasc_version.txt +++ /dev/null @@ -1,3 +0,0 @@ -# RASC version and installation file -6.0.0 -D:\Renesas\RASC\eclipse\rasc.exe diff --git a/bsp/renesas/ra2a1-ek/rtconfig.py b/bsp/renesas/ra2a1-ek/rtconfig.py index 480fee8a699..b0294f9de74 100644 --- a/bsp/renesas/ra2a1-ek/rtconfig.py +++ b/bsp/renesas/ra2a1-ek/rtconfig.py @@ -4,7 +4,7 @@ # toolchains options ARCH='arm' CPU='cortex-m23' -CROSS_TOOL='gcc' +CROSS_TOOL='keil' if os.getenv('RTT_CC'): CROSS_TOOL = os.getenv('RTT_CC') @@ -14,13 +14,13 @@ # EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR if CROSS_TOOL == 'gcc': PLATFORM = 'gcc' - EXEC_PATH = r'D:/Renesas/FSP/toolchains/gcc_arm/13.2.rel1/bin' + EXEC_PATH = r'C:\Users\XXYYZZ' elif CROSS_TOOL == 'keil': PLATFORM = 'armclang' EXEC_PATH = r'C:/Keil_v5' -elif CROSS_TOOL == 'iar': - PLATFORM = 'iccarm' - EXEC_PATH = r'C:/Program Files/IAR Systems/Embedded Workbench 8.0' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') BUILD = 'debug' # BUILD = 'release' diff --git a/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW b/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW deleted file mode 100644 index f892a9a5744..00000000000 --- a/bsp/renesas/ra2a1-ek/template.uvguix.CYFSybW +++ /dev/null @@ -1,1878 +0,0 @@ - - - - -6.1 - -

### uVision Project, (C) Keil Software
- - - - - - - - - - 38003 - Registers - 188 122 - - - 346 - Code Coverage - 1410 160 - - - 204 - Performance Analyzer - 1570 - - - - - - 35141 - Event Statistics - - 200 50 700 - - - 1506 - Symbols - - 106 106 106 - - - 1936 - Watch 1 - - 200 133 133 - - - 1937 - Watch 2 - - 200 133 133 - - - 1935 - Call Stack + Locals - - 200 133 133 - - - 2506 - Trace Data - - 75 135 130 95 70 230 200 150 - - - 466 - Source Browser - *** Not Enabled *** - 500 - 300 - - - - - - - - 1 - 1 - 0 - 0 - -1 - - - - - - - 44 - 0 - 1 - - -1 - -1 - - - -1 - -1 - - - 251 - 65 - 1615 - 1131 - - - - 0 - - 260 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000100000000000000010000003B453A5C52542D7468726561645C72742D7468726561645C6273705C72656E657361735C72613261312D656B5C7372635C68616C5F656E7472792E63000000000B68616C5F656E7472792E6300000000C5D4F200FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000008D010000690100004706000088030000 - - - - 0 - Build - - -1 - -1 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 440100004F0000007007000013010000 - - - 16 - 8D01000069010000B90700002D020000 - - - - 1005 - 1005 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000660000003D01000055020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 109 - 109 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000660000003D01000055020000 - - - 16 - 3C00000053000000B801000067030000 - - - - 1465 - 1465 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1466 - 1466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1467 - 1467 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1468 - 1468 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1506 - 1506 - 0 - 0 - 0 - 0 - 32767 - 0 - 16384 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 1913 - 1913 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1935 - 1935 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 1936 - 1936 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 1937 - 1937 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 1939 - 1939 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1940 - 1940 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1941 - 1941 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 1942 - 1942 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 195 - 195 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000660000003D01000055020000 - - - 16 - 3C00000053000000B801000067030000 - - - - 196 - 196 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000660000003D01000055020000 - - - 16 - 3C00000053000000B801000067030000 - - - - 197 - 197 - 1 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 0000000086020000FE05000036030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 198 - 198 - 0 - 0 - 0 - 0 - 32767 - 0 - 32768 - 0 - - 16 - 00000000ED02000070070000C5030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 199 - 199 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000089020000FB0500001D030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 203 - 203 - 0 - 0 - 0 - 0 - 32767 - 0 - 8192 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 204 - 204 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 221 - 221 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 00000000000000000000000000000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 2506 - 2506 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 2507 - 2507 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 343 - 343 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 346 - 346 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 35141 - 35141 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35824 - 35824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 35885 - 35885 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35886 - 35886 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35887 - 35887 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35888 - 35888 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35889 - 35889 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35890 - 35890 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35891 - 35891 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35892 - 35892 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35893 - 35893 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35894 - 35894 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35895 - 35895 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35896 - 35896 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35897 - 35897 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35898 - 35898 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35899 - 35899 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35900 - 35900 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35901 - 35901 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35902 - 35902 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35903 - 35903 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35904 - 35904 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 35905 - 35905 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 38003 - 38003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000660000003D010000CA010000 - - - 16 - 3C00000053000000B801000067030000 - - - - 38007 - 38007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000089020000FB0500001D030000 - - - 16 - 3C00000053000000F403000017010000 - - - - 436 - 436 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000089020000FB0500001D030000 - - - 16 - 3C00000053000000B801000067030000 - - - - 437 - 437 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 440 - 440 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 463 - 463 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000089020000FB0500001D030000 - - - 16 - 3C00000053000000B801000067030000 - - - - 466 - 466 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0300000089020000FB0500001D030000 - - - 16 - 3C00000053000000B801000067030000 - - - - 470 - 470 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 47010000660000006D070000FA000000 - - - 16 - 3C00000053000000F403000017010000 - - - - 50000 - 50000 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50001 - 50001 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50002 - 50002 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50003 - 50003 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50004 - 50004 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50005 - 50005 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50006 - 50006 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50007 - 50007 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50008 - 50008 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50009 - 50009 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50010 - 50010 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50011 - 50011 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50012 - 50012 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50013 - 50013 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50014 - 50014 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50015 - 50015 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50016 - 50016 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50017 - 50017 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50018 - 50018 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 50019 - 50019 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 33060000660000006D070000E4020000 - - - 16 - 3C000000530000007C01000064010000 - - - - 59392 - 59392 - 1 - 0 - 0 - 0 - 966 - 0 - 8192 - 0 - - 16 - 0000000000000000D10300001C000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59393 - 0 - 1 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 0000000036030000FE05000049030000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59399 - 59399 - 1 - 0 - 0 - 0 - 476 - 0 - 8192 - 1 - - 16 - 000000001C000000E701000038000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 59400 - 59400 - 0 - 0 - 0 - 0 - 612 - 0 - 8192 - 2 - - 16 - 00000000380000006F02000054000000 - - - 16 - 0A0000000A0000006E0000006E000000 - - - - 824 - 824 - 0 - 0 - 0 - 0 - 32767 - 0 - 4096 - 0 - - 16 - 03000000040300006D070000AC030000 - - - 16 - 3C000000530000007C01000064010000 - - - - 3334 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFF44010000130100007007000017010000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000008D01000069010000B90700002D020000440100004F00000070070000130100000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF2C0600004F00000030060000FD020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000007906000069010000B907000017040000300600004F00000070070000FD02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF400100004F000000440100006E020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000490000006901000089010000FD020000000000004F000000400100006E0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF00000000E902000070070000ED02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000004900000007040000B9070000DF04000000000000ED02000070070000C503000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB8030000ED020000BC030000C503000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000006E020000FE05000072020000010000000100001004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000001000000490000000103000047060000C50300000000000072020000FE050000360300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF24536F757263652042726F77736572202D202A2A2A204E6F7420456E61626C6564202A2A2A00000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 - - - 59392 - File - - 2556 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000752414D5F454E44960000000000000001000752414D5F454E4400000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 1423 - 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 - - - - 59399 - Build - - 976 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000085461726765745F3196000000000000000100085461726765745F31000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 583 - 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 - - - - 59400 - Debug - - 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 - - - 898 - 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 - - - - 0 - 2560 - 1440 - - - - - - 1 - 0 - - 100 - 0 - - .\src\hal_entry.c - 20 - 14 - 16 - 1 - - 0 - - - - - diff --git a/bsp/renesas/ra2a1-ek/template.uvprojx b/bsp/renesas/ra2a1-ek/template.uvprojx index 55dea48e661..d89374cfc3d 100644 --- a/bsp/renesas/ra2a1-ek/template.uvprojx +++ b/bsp/renesas/ra2a1-ek/template.uvprojx @@ -70,9 +70,9 @@ 0 - 1 + 0 0 - cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out" && echo. > "$Poutput.rasc"" + 0 0 @@ -80,9 +80,9 @@ 0 - 1 + 0 0 - cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --gensmartbundle --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" "$L%L" 2> "%%TEMP%%\rasc_stderr.out"" + 0 0 From c43f8a2b91eff5241a47eb99c6d811be693c0725 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Mon, 18 Aug 2025 14:06:52 +0800 Subject: [PATCH 3/6] adjust ld --- bsp/renesas/ra2a1-ek/script/fsp_gen.ld | 60 +++++++++++++------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/bsp/renesas/ra2a1-ek/script/fsp_gen.ld b/bsp/renesas/ra2a1-ek/script/fsp_gen.ld index b3080eed2eb..3792b908fc7 100644 --- a/bsp/renesas/ra2a1-ek/script/fsp_gen.ld +++ b/bsp/renesas/ra2a1-ek/script/fsp_gen.ld @@ -41,7 +41,7 @@ SECTIONS }> FLASH /***** DATA_FLASH memory section allocations ******/ - .data_flash.startof (READONLY) : + .data_flash.startof : { __ddsc_DATA_FLASH_START = .; @@ -69,7 +69,7 @@ SECTIONS __ram_from_data_flash$$Limit = .; }> RAM AT > DATA_FLASH - __data_flash_readonly$$ (READONLY) : + __data_flash_readonly$$ : { __data_flash_readonly$$Base = .; /* section.data_flash.readonly */ @@ -85,20 +85,21 @@ SECTIONS *(.data_flash_noinit) __data_flash_noinit$$Limit = .; }> DATA_FLASH - .data_flash.endof ALIGN(.,512) (READONLY) : + + .data_flash.endof : { + . = ALIGN(512); __ddsc_DATA_FLASH_END = .; }> DATA_FLASH - /***** FLASH memory section allocations ******/ - .flash.startof (READONLY) : + .flash.startof : { __ddsc_FLASH_START = .; }> FLASH_GAP /* MCU vector table */ - __flash_vectors$$ (READONLY) : + __flash_vectors$$ : { __flash_vectors$$Base = .; _VECTORS = .; KEEP(*(.fixed_vectors)) @@ -106,7 +107,7 @@ SECTIONS __flash_vectors$$Limit = .; }> FLASH_GAP /* Sections that can be used to fill flash gap */ - __flash_readonly_gap$$ (READONLY) : + __flash_readonly_gap$$ : { __flash_readonly_gap$$Base = .; /* section.flash.readonly_gap */ @@ -173,7 +174,7 @@ SECTIONS }> RAM - __flash_readonly$$ (READONLY) : + __flash_readonly$$ : { __flash_readonly$$Base = .; /* section.flash.readonly */ @@ -186,7 +187,7 @@ SECTIONS KEEP(*(.version)) __flash_readonly$$Limit = .; }> FLASH - __flash_ctor$$ (READONLY) : + __flash_ctor$$ : { *crtbegin.o(.ctors) @@ -201,27 +202,27 @@ SECTIONS *(.dtors) }> FLASH - __flash_preinit_array$$ (READONLY) : + __flash_preinit_array$$ : { __preinit_array_start = .; KEEP(*(.preinit_array)) __preinit_array_end = .; }> FLASH - __flash_.got$$ (READONLY) : + __flash_.got$$ : { *(.got.plt) *(.got) }> FLASH - __flash_init_array$$ (READONLY) : + __flash_init_array$$ : { __init_array_start = .; KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) __init_array_end = .; }> FLASH - __flash_fini_array$$ (READONLY) : + __flash_fini_array$$ : { __fini_array_start = .; KEEP(*(SORT(.fini_array.*))) @@ -229,7 +230,7 @@ SECTIONS __fini_array_end = .; }> FLASH /* Discard exception tables */ - /DISCARD/ (READONLY) : + /DISCARD/ : { *(.ARM.extab*) @@ -239,88 +240,89 @@ SECTIONS }> FLASH /* Dummy section to hold required exidx labels */ - __flash_arm.exidx$$ (READONLY) : + __flash_arm.exidx$$ : { __exidx_start = .; __exidx_end = .; }> FLASH - .flash.endof ALIGN(.,512) (READONLY) : + + .flash.endof : { + . = ALIGN(512); __ddsc_FLASH_END = .; }> FLASH - /***** OPTION_SETTING_OFS0 memory section allocations ******/ - .option_setting_ofs0.startof (READONLY) : + .option_setting_ofs0.startof : { __ddsc_OPTION_SETTING_OFS0_START = .; }> OPTION_SETTING_OFS0 /* Option Function Select Register 0 */ - __option_setting_ofs0_reg$$ (READONLY) : + __option_setting_ofs0_reg$$ : { __option_setting_ofs0_reg$$Base = .; KEEP(*(.option_setting_ofs0)) __option_setting_ofs0_reg$$Limit = .; }> OPTION_SETTING_OFS0 - .option_setting_ofs0.endof (READONLY) : + .option_setting_ofs0.endof : { __ddsc_OPTION_SETTING_OFS0_END = .; }> OPTION_SETTING_OFS0 /***** OPTION_SETTING_OFS1 memory section allocations ******/ - .option_setting_ofs1.startof (READONLY) : + .option_setting_ofs1.startof : { __ddsc_OPTION_SETTING_OFS1_START = .; }> OPTION_SETTING_OFS1 /* Option Function Select Register 1 */ - __option_setting_ofs1_reg$$ (READONLY) : + __option_setting_ofs1_reg$$ : { __option_setting_ofs1_reg$$Base = .; KEEP(*(.option_setting_ofs1)) __option_setting_ofs1_reg$$Limit = .; }> OPTION_SETTING_OFS1 - .option_setting_ofs1.endof (READONLY) : + .option_setting_ofs1.endof : { __ddsc_OPTION_SETTING_OFS1_END = .; }> OPTION_SETTING_OFS1 /***** OPTION_SETTING_SECMPU memory section allocations ******/ - .option_setting_secmpu.startof (READONLY) : + .option_setting_secmpu.startof : { __ddsc_OPTION_SETTING_SECMPU_START = .; }> OPTION_SETTING_SECMPU /* Security MPU Registers */ - __option_setting_secmpu_reg$$ (READONLY) : + __option_setting_secmpu_reg$$ : { __option_setting_secmpu_reg$$Base = .; KEEP(*(.option_setting_secmpu)) __option_setting_secmpu_reg$$Limit = .; }> OPTION_SETTING_SECMPU - .option_setting_secmpu.endof (READONLY) : + .option_setting_secmpu.endof : { __ddsc_OPTION_SETTING_SECMPU_END = .; }> OPTION_SETTING_SECMPU /***** OPTION_SETTING_OSIS memory section allocations ******/ - .option_setting_osis.startof (READONLY) : + .option_setting_osis.startof : { __ddsc_OPTION_SETTING_OSIS_START = .; }> OPTION_SETTING_OSIS /* OCD/Serial Programmer ID setting register */ - __option_setting_osis_reg$$ (READONLY) : + __option_setting_osis_reg$$ : { __option_setting_osis_reg$$Base = .; KEEP(*(.option_setting_osis)) __option_setting_osis_reg$$Limit = .; }> OPTION_SETTING_OSIS - .option_setting_osis.endof (READONLY) : + .option_setting_osis.endof : { __ddsc_OPTION_SETTING_OSIS_END = .; From 07de27ca1eb1ce895a2df084a7a9f8d7f85a2974 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Mon, 18 Aug 2025 16:18:47 +0800 Subject: [PATCH 4/6] update readme --- bsp/renesas/ra2a1-ek/README.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/bsp/renesas/ra2a1-ek/README.md b/bsp/renesas/ra2a1-ek/README.md index f16563373b5..4a5ba682691 100644 --- a/bsp/renesas/ra2a1-ek/README.md +++ b/bsp/renesas/ra2a1-ek/README.md @@ -142,17 +142,9 @@ void hal_entry(void) **GCC** -1.需要下载 [e² studio](https://www.renesas.cn/zh/software-tool/e-studio) 集成开发环境,使用目录下的GCC工具链`toolchains\gcc_arm\13.2.rel1\bin` +1.fsp的使用,打开当前目录下的`configuration.xml` -2.设置env中的工具链路径 - -```bash - set RTT_EXEC_PATH=\toolchains\gcc_arm\13.2.rel1\bin -``` - -3.fsp的使用,打开当前目录下的`configuration.xml` - -4.配置完外设之后点击`Generate Project Content`按钮即可生成所需驱动文件。 +2.配置完外设之后点击`Generate Project Content`按钮即可生成所需驱动文件。 **注意:重新生成配置需要把当前路径下的`bsp_linker_info.h`删掉** From bfa213bfff3d73c2d07c2b8a51c24ec9c23280a7 Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Wed, 20 Aug 2025 21:33:17 +0800 Subject: [PATCH 5/6] Improve the compilation --- bsp/renesas/ra2a1-ek/SConstruct | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bsp/renesas/ra2a1-ek/SConstruct b/bsp/renesas/ra2a1-ek/SConstruct index d00d0dbeaac..530767a0ed1 100644 --- a/bsp/renesas/ra2a1-ek/SConstruct +++ b/bsp/renesas/ra2a1-ek/SConstruct @@ -50,5 +50,11 @@ objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) # include drivers objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) +#删除FSP生成的文件 +file_to_remove = "bsp_linker_info.h" +if os.path.exists(file_to_remove): + print(f"Removing {file_to_remove} before build...") + os.remove(file_to_remove) + # make a building DoBuilding(TARGET, objs) From ffc55d2b7fddcb00e225e925338a0a5c17b973ce Mon Sep 17 00:00:00 2001 From: CYFS <2805686936@qq.com> Date: Thu, 21 Aug 2025 16:07:10 +0800 Subject: [PATCH 6/6] adjust gpio and scons --- bsp/renesas/ra2a1-ek/SConstruct | 18 ++++-- bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h | 72 +++++++-------------- bsp/renesas/tools/startup_check.py | 6 ++ 3 files changed, 40 insertions(+), 56 deletions(-) diff --git a/bsp/renesas/ra2a1-ek/SConstruct b/bsp/renesas/ra2a1-ek/SConstruct index 530767a0ed1..a66fe568f37 100644 --- a/bsp/renesas/ra2a1-ek/SConstruct +++ b/bsp/renesas/ra2a1-ek/SConstruct @@ -44,17 +44,23 @@ Export('SDK_LIB') rtconfig.BSP_LIBRARY_TYPE = None +def startup_check(): + import subprocess + startup_check_path = os.getcwd() + "/../tools/startup_check.py" + + if os.path.exists(startup_check_path): + try: + subprocess.call(["python", startup_check_path]) + except: + subprocess.call(["python3", startup_check_path]) + +RegisterPreBuildingAction(startup_check) + # prepare building environment objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) # include drivers objs.extend(SConscript(os.path.join(libraries_path_prefix, 'HAL_Drivers', 'SConscript'))) -#删除FSP生成的文件 -file_to_remove = "bsp_linker_info.h" -if os.path.exists(file_to_remove): - print(f"Removing {file_to_remove} before build...") - os.remove(file_to_remove) - # make a building DoBuilding(TARGET, objs) diff --git a/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h b/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h index 294477ee31e..55e997c58de 100644 --- a/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h +++ b/bsp/renesas/ra2a1-ek/board/ports/gpio_cfg.h @@ -5,11 +5,11 @@ * * Change Logs: * Date Author Notes - * 2022-01-19 Sherman first version + * 2025-08-21 CYFS first version */ /* Number of IRQ channels on the device */ -#define RA_IRQ_MAX 16 +#define RA_IRQ_MAX 7 /* PIN to IRQx table */ #define PIN2IRQX_TABLE \ @@ -17,65 +17,37 @@ switch (pin) \ { \ case BSP_IO_PORT_04_PIN_00: \ - case BSP_IO_PORT_02_PIN_06: \ - case BSP_IO_PORT_01_PIN_05: \ - return 0; \ + case BSP_IO_PORT_00_PIN_01: \ case BSP_IO_PORT_02_PIN_05: \ - case BSP_IO_PORT_01_PIN_01: \ - case BSP_IO_PORT_01_PIN_04: \ + return 0; \ + case BSP_IO_PORT_04_PIN_08: \ + case BSP_IO_PORT_04_PIN_07: \ + case BSP_IO_PORT_05_PIN_02: \ return 1; \ - case BSP_IO_PORT_02_PIN_03: \ - case BSP_IO_PORT_01_PIN_00: \ + case BSP_IO_PORT_01_PIN_10: \ case BSP_IO_PORT_02_PIN_13: \ + case BSP_IO_PORT_05_PIN_01: \ return 2; \ - case BSP_IO_PORT_02_PIN_02: \ - case BSP_IO_PORT_01_PIN_10: \ + case BSP_IO_PORT_01_PIN_09: \ case BSP_IO_PORT_02_PIN_12: \ + case BSP_IO_PORT_05_PIN_00: \ return 3; \ - case BSP_IO_PORT_04_PIN_02: \ - case BSP_IO_PORT_01_PIN_11: \ - case BSP_IO_PORT_04_PIN_11: \ + case BSP_IO_PORT_00_PIN_00: \ + case BSP_IO_PORT_03_PIN_02: \ + case BSP_IO_PORT_01_PIN_00: \ return 4; \ + case BSP_IO_PORT_03_PIN_01: \ case BSP_IO_PORT_04_PIN_01: \ - case BSP_IO_PORT_03_PIN_02: \ - case BSP_IO_PORT_04_PIN_10: \ + case BSP_IO_PORT_01_PIN_01: \ return 5; \ - case BSP_IO_PORT_03_PIN_01: \ - case BSP_IO_PORT_00_PIN_00: \ - case BSP_IO_PORT_04_PIN_09: \ + case BSP_IO_PORT_02_PIN_06: \ + case BSP_IO_PORT_01_PIN_11: \ + case BSP_IO_PORT_01_PIN_04: \ return 6; \ - case BSP_IO_PORT_00_PIN_01: \ - case BSP_IO_PORT_04_PIN_08: \ + case BSP_IO_PORT_04_PIN_09: \ + case BSP_IO_PORT_01_PIN_12: \ + case BSP_IO_PORT_01_PIN_05: \ return 7; \ - case BSP_IO_PORT_00_PIN_02: \ - case BSP_IO_PORT_03_PIN_05: \ - case BSP_IO_PORT_04_PIN_15: \ - return 8; \ - case BSP_IO_PORT_00_PIN_04: \ - case BSP_IO_PORT_03_PIN_04: \ - case BSP_IO_PORT_04_PIN_14: \ - return 9; \ - case BSP_IO_PORT_00_PIN_05: \ - case BSP_IO_PORT_07_PIN_09: \ - return 10; \ - case BSP_IO_PORT_05_PIN_01: \ - case BSP_IO_PORT_00_PIN_06: \ - case BSP_IO_PORT_07_PIN_08: \ - return 11; \ - case BSP_IO_PORT_05_PIN_02: \ - case BSP_IO_PORT_00_PIN_08: \ - return 12; \ - case BSP_IO_PORT_00_PIN_15: \ - case BSP_IO_PORT_00_PIN_09: \ - return 13; \ - case BSP_IO_PORT_04_PIN_03: \ - case BSP_IO_PORT_05_PIN_12: \ - case BSP_IO_PORT_05_PIN_05: \ - return 14; \ - case BSP_IO_PORT_04_PIN_04: \ - case BSP_IO_PORT_05_PIN_11: \ - case BSP_IO_PORT_05_PIN_06: \ - return 15; \ default : \ return -1; \ } \ diff --git a/bsp/renesas/tools/startup_check.py b/bsp/renesas/tools/startup_check.py index 94f4a012b81..8280e9a47db 100644 --- a/bsp/renesas/tools/startup_check.py +++ b/bsp/renesas/tools/startup_check.py @@ -60,5 +60,11 @@ def startup_check(): # else: # print "File {file_path} is unchanged." + # rm bsp_linker_info.h + file_to_remove = "bsp_linker_info.h" + if os.path.exists(file_to_remove): + print(f"Removing {file_to_remove} before build...") + os.remove(file_to_remove) + if __name__ == "__main__": startup_check()

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