From 09bb0764beb217bc6a69f7700f8c10aa45fb2354 Mon Sep 17 00:00:00 2001 From: XYX12306 <2669599387@qq.com> Date: Wed, 30 Oct 2024 23:24:17 +0800 Subject: [PATCH] [bsp][renesas] initial commit for ra6e2-fpb --- .github/workflows/bsp_buildings.yml | 1 + .../libraries/HAL_Drivers/config/drv_config.h | 24 + .../HAL_Drivers/config/ra6e2/adc_config.h | 42 + .../HAL_Drivers/config/ra6e2/can_config.h | 48 + .../HAL_Drivers/config/ra6e2/dac_config.h | 41 + .../HAL_Drivers/config/ra6e2/lcd_config.h | 31 + .../HAL_Drivers/config/ra6e2/pwm_config.h | 68 + .../HAL_Drivers/config/ra6e2/timer_config.h | 67 + .../HAL_Drivers/config/ra6e2/uart_config.h | 136 + bsp/renesas/libraries/Kconfig | 6 + bsp/renesas/ra6e2-fpb/.config | 1186 + bsp/renesas/ra6e2-fpb/.gitignore | 5 + bsp/renesas/ra6e2-fpb/.ignore_format.yml | 9 + bsp/renesas/ra6e2-fpb/.secure_azone | 64 + bsp/renesas/ra6e2-fpb/.secure_xml | 99 + .../ra6e2-fpb/.settings/standalone.prefs | 24 + bsp/renesas/ra6e2-fpb/EventRecorderStub.scvd | 9 + bsp/renesas/ra6e2-fpb/Kconfig | 17 + bsp/renesas/ra6e2-fpb/README.md | 186 + bsp/renesas/ra6e2-fpb/SConscript | 27 + bsp/renesas/ra6e2-fpb/SConstruct | 54 + bsp/renesas/ra6e2-fpb/board/Kconfig | 58 + bsp/renesas/ra6e2-fpb/board/SConscript | 16 + bsp/renesas/ra6e2-fpb/board/board.h | 38 + bsp/renesas/ra6e2-fpb/board/ports/SConscript | 22 + bsp/renesas/ra6e2-fpb/board/ports/gpio_cfg.h | 66 + bsp/renesas/ra6e2-fpb/buildinfo.gpdsc | 162 + bsp/renesas/ra6e2-fpb/configuration.xml | 411 + .../ra6e2-fpb/docs/picture/fpb-ra6e2.png | Bin 0 -> 1353810 bytes bsp/renesas/ra6e2-fpb/docs/picture/jflash.png | Bin 0 -> 42791 bytes .../ra6e2-fpb/docs/picture/jflash1.png | Bin 0 -> 16306 bytes .../ra6e2-fpb/docs/picture/jflash2.png | Bin 0 -> 19477 bytes .../ra6e2-fpb/docs/picture/jflash3.png | Bin 0 -> 23186 bytes .../ra6e2-fpb/docs/picture/readme_faq1.png | Bin 0 -> 19419 bytes bsp/renesas/ra6e2-fpb/memory_regions.scat | 22 + bsp/renesas/ra6e2-fpb/project.uvoptx | 846 + bsp/renesas/ra6e2-fpb/project.uvprojx | 2328 ++ bsp/renesas/ra6e2-fpb/ra/SConscript | 25 + .../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/ra6e2-fpb/ra/arm/CMSIS_6/LICENSE | 201 + .../ra6e2-fpb/ra/board/ra6e2_fpb/board.h | 47 + .../ra6e2-fpb/ra/board/ra6e2_fpb/board_init.c | 48 + .../ra6e2-fpb/ra/board/ra6e2_fpb/board_init.h | 44 + .../ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.c | 56 + .../ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.h | 60 + .../ra6e2-fpb/ra/fsp/inc/api/bsp_api.h | 101 + .../ra6e2-fpb/ra/fsp/inc/api/fsp_common_api.h | 380 + .../ra6e2-fpb/ra/fsp/inc/api/r_ioport_api.h | 192 + .../ra6e2-fpb/ra/fsp/inc/api/r_transfer_api.h | 388 + .../ra6e2-fpb/ra/fsp/inc/api/r_uart_api.h | 254 + .../ra6e2-fpb/ra/fsp/inc/fsp_features.h | 297 + .../ra6e2-fpb/ra/fsp/inc/fsp_version.h | 76 + .../ra6e2-fpb/ra/fsp/inc/instances/r_ioport.h | 522 + .../ra/fsp/inc/instances/r_sci_uart.h | 247 + .../cmsis/Device/RENESAS/Include/R7FA6E2BB.h | 24687 ++++++++++++++++ .../cmsis/Device/RENESAS/Include/renesas.h | 150 + .../bsp/cmsis/Device/RENESAS/Include/system.h | 44 + .../bsp/cmsis/Device/RENESAS/Source/startup.c | 143 + .../bsp/cmsis/Device/RENESAS/Source/system.c | 873 + .../ra/fsp/src/bsp/mcu/all/board_sdram.h | 32 + .../ra/fsp/src/bsp/mcu/all/bsp_clocks.c | 3387 +++ .../ra/fsp/src/bsp/mcu/all/bsp_clocks.h | 1716 ++ .../ra/fsp/src/bsp/mcu/all/bsp_common.c | 311 + .../ra/fsp/src/bsp/mcu/all/bsp_common.h | 620 + .../src/bsp/mcu/all/bsp_compiler_support.h | 109 + .../ra/fsp/src/bsp/mcu/all/bsp_delay.c | 203 + .../ra/fsp/src/bsp/mcu/all/bsp_delay.h | 73 + .../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 + .../ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.c | 27 + .../ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.h | 464 + .../ra/fsp/src/bsp/mcu/all/bsp_irq.c | 274 + .../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 | 158 + .../ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h | 56 + .../ra/fsp/src/bsp/mcu/all/bsp_module_stop.h | 371 + .../src/bsp/mcu/all/bsp_register_protection.c | 119 + .../src/bsp/mcu/all/bsp_register_protection.h | 60 + .../fsp/src/bsp/mcu/all/bsp_rom_registers.c | 246 + .../ra/fsp/src/bsp/mcu/all/bsp_sbrk.c | 92 + .../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 | 634 + .../ra/fsp/src/bsp/mcu/all/bsp_security.h | 33 + .../ra/fsp/src/bsp/mcu/all/bsp_tfu.h | 218 + .../ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h | 261 + .../ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h | 482 + .../fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h | 405 + .../ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h | 44 + .../ra6e2-fpb/ra/fsp/src/r_ioport/r_ioport.c | 962 + .../ra/fsp/src/r_sci_uart/r_sci_uart.c | 2008 ++ bsp/renesas/ra6e2-fpb/ra_cfg/SConscript | 19 + .../ra6e2-fpb/ra_cfg/fsp_cfg/bsp/board_cfg.h | 5 + .../ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_cfg.h | 62 + .../ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h | 5 + .../fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h | 11 + .../ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h | 377 + .../ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h | 56 + .../ra6e2-fpb/ra_cfg/fsp_cfg/r_ioport_cfg.h | 13 + .../ra6e2-fpb/ra_cfg/fsp_cfg/r_sci_uart_cfg.h | 17 + bsp/renesas/ra6e2-fpb/ra_gen/SConscript | 19 + bsp/renesas/ra6e2-fpb/ra_gen/bsp_clock_cfg.h | 28 + bsp/renesas/ra6e2-fpb/ra_gen/common_data.c | 11 + bsp/renesas/ra6e2-fpb/ra_gen/common_data.h | 20 + bsp/renesas/ra6e2-fpb/ra_gen/hal_data.c | 97 + bsp/renesas/ra6e2-fpb/ra_gen/hal_data.h | 24 + bsp/renesas/ra6e2-fpb/ra_gen/main.c | 6 + bsp/renesas/ra6e2-fpb/ra_gen/pin_data.c | 203 + bsp/renesas/ra6e2-fpb/ra_gen/vector_data.c | 21 + bsp/renesas/ra6e2-fpb/ra_gen/vector_data.h | 29 + bsp/renesas/ra6e2-fpb/rasc_launcher.bat | 240 + bsp/renesas/ra6e2-fpb/rasc_version.txt | 3 + bsp/renesas/ra6e2-fpb/rtconfig.h | 341 + bsp/renesas/ra6e2-fpb/rtconfig.py | 102 + bsp/renesas/ra6e2-fpb/script/fsp.ld | 786 + bsp/renesas/ra6e2-fpb/script/fsp.scat | 882 + .../ra6e2-fpb/script/memory_regions.ld | 21 + bsp/renesas/ra6e2-fpb/src/hal_entry.c | 31 + bsp/renesas/ra6e2-fpb/template.uvoptx | 218 + bsp/renesas/ra6e2-fpb/template.uvprojx | 424 + 164 files changed, 110229 insertions(+) create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/adc_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/can_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/dac_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/lcd_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/pwm_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/timer_config.h create mode 100644 bsp/renesas/libraries/HAL_Drivers/config/ra6e2/uart_config.h create mode 100644 bsp/renesas/ra6e2-fpb/.config create mode 100644 bsp/renesas/ra6e2-fpb/.gitignore create mode 100644 bsp/renesas/ra6e2-fpb/.ignore_format.yml create mode 100644 bsp/renesas/ra6e2-fpb/.secure_azone create mode 100644 bsp/renesas/ra6e2-fpb/.secure_xml create mode 100644 bsp/renesas/ra6e2-fpb/.settings/standalone.prefs create mode 100644 bsp/renesas/ra6e2-fpb/EventRecorderStub.scvd create mode 100644 bsp/renesas/ra6e2-fpb/Kconfig create mode 100644 bsp/renesas/ra6e2-fpb/README.md create mode 100644 bsp/renesas/ra6e2-fpb/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/SConstruct create mode 100644 bsp/renesas/ra6e2-fpb/board/Kconfig create mode 100644 bsp/renesas/ra6e2-fpb/board/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/board/board.h create mode 100644 bsp/renesas/ra6e2-fpb/board/ports/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/board/ports/gpio_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/buildinfo.gpdsc create mode 100644 bsp/renesas/ra6e2-fpb/configuration.xml create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/fpb-ra6e2.png create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/jflash.png create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/jflash1.png create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/jflash2.png create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/jflash3.png create mode 100644 bsp/renesas/ra6e2-fpb/docs/picture/readme_faq1.png create mode 100644 bsp/renesas/ra6e2-fpb/memory_regions.scat create mode 100644 bsp/renesas/ra6e2-fpb/project.uvoptx create mode 100644 bsp/renesas/ra6e2-fpb/project.uvprojx create mode 100644 bsp/renesas/ra6e2-fpb/ra/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/LICENSE create mode 100644 bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/bsp_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/fsp_common_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_ioport_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_transfer_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_uart_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_features.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_version.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_ioport.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_sci_uart.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA6E2BB.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/board_sdram.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_tfu.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/r_ioport/r_ioport.c create mode 100644 bsp/renesas/ra6e2-fpb/ra/fsp/src/r_sci_uart/r_sci_uart.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/board_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/r_ioport_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/r_sci_uart_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/SConscript create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/bsp_clock_cfg.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/common_data.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/common_data.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/hal_data.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/hal_data.h create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/main.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/pin_data.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/vector_data.c create mode 100644 bsp/renesas/ra6e2-fpb/ra_gen/vector_data.h create mode 100644 bsp/renesas/ra6e2-fpb/rasc_launcher.bat create mode 100644 bsp/renesas/ra6e2-fpb/rasc_version.txt create mode 100644 bsp/renesas/ra6e2-fpb/rtconfig.h create mode 100644 bsp/renesas/ra6e2-fpb/rtconfig.py create mode 100644 bsp/renesas/ra6e2-fpb/script/fsp.ld create mode 100644 bsp/renesas/ra6e2-fpb/script/fsp.scat create mode 100644 bsp/renesas/ra6e2-fpb/script/memory_regions.ld create mode 100644 bsp/renesas/ra6e2-fpb/src/hal_entry.c create mode 100644 bsp/renesas/ra6e2-fpb/template.uvoptx create mode 100644 bsp/renesas/ra6e2-fpb/template.uvprojx diff --git a/.github/workflows/bsp_buildings.yml b/.github/workflows/bsp_buildings.yml index 2fc9fabca80..458f33aa996 100644 --- a/.github/workflows/bsp_buildings.yml +++ b/.github/workflows/bsp_buildings.yml @@ -235,6 +235,7 @@ jobs: - "renesas/ra6m4-iot" - "renesas/ra6m3-ek" - "renesas/ra6m3-hmi-board" + - "renesas/ra6e2-fpb" - "renesas/ra4m2-eco" - "renesas/ra2l1-cpk" - "renesas/ra8m1-ek" diff --git a/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h b/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h index b44abab812f..8e227c14505 100644 --- a/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h +++ b/bsp/renesas/libraries/HAL_Drivers/config/drv_config.h @@ -155,6 +155,30 @@ extern "C" #endif /* SOC_SERIES_R9A07G0 */ +#if defined(SOC_SERIES_R7FA6E2) +#include "ra6e2/uart_config.h" + +#ifdef BSP_USING_ADC +#include "ra6e2/adc_config.h" +#endif + +#ifdef BSP_USING_DAC +#include "ra6e2/dac_config.h" +#endif + +#ifdef BSP_USING_PWM +#include "ra6e2/pwm_config.h" +#endif + +#ifdef BSP_USING_TIM +#include "ra6e2/timer_config.h" +#endif + +#ifdef BSP_USING_CAN +#include "ra6e2/can_config.h" +#endif +#endif /* SOC_SERIES_R7FA6E2 */ + #ifdef __cplusplus } #endif diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/adc_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/adc_config.h new file mode 100644 index 00000000000..b6dab3ca6a2 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/adc_config.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-19 Mr.Tiger 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/ra6e2/can_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/can_config.h new file mode 100644 index 00000000000..9b63a0c56bc --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/can_config.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-29 mazhiyuan 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/ra6e2/dac_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/dac_config.h new file mode 100644 index 00000000000..99c30532b28 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/dac_config.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-08-19 Mr.Tiger 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/ra6e2/lcd_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/lcd_config.h new file mode 100644 index 00000000000..92eda2da19f --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/lcd_config.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2006-2024, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2024-03-01 Rbb666 the first version + */ +#ifndef __LCD_CONFIG_H_ +#define __LCD_CONFIG_H_ + +typedef enum +{ + ROTATION_ZERO = 0, + ROTATION_090 = 90, + ROTATION_180 = 180, + ROTATION_270 = 270, +} bsp_rotation; + +#define LCD_WIDTH DISPLAY_HSIZE_INPUT0 +#define LCD_HEIGHT DISPLAY_VSIZE_INPUT0 +#define LCD_BITS_PER_PIXEL DISPLAY_BITS_PER_PIXEL_INPUT1 +#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 +#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) + +#define ENABLE_DOUBLE_BUFFER (0) + +#define LCD_BL_PIN BSP_IO_PORT_01_PIN_00 + +#endif diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/pwm_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/pwm_config.h new file mode 100644 index 00000000000..217cbc0b645 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/pwm_config.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-10-26 KevinXu 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/ra6e2/timer_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/timer_config.h new file mode 100644 index 00000000000..adbd4f27e4a --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/timer_config.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2023-09-04 Rbb666 first version + */ + +#ifndef __TIMER_CONFIG_H__ +#define __TIMER_CONFIG_H__ + +#include +#include +#include "hal_data.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define PLCKD_PRESCALER_MAX_SELECT 7 + +/* RA6M3: Frequency ratio: PCLKA:PCLKD = 1:N (N = 1/2/4/8/16/32/64) */ +#define PLCKD_PRESCALER_120M (BSP_FEATURE_GPT_ODC_FREQ_MAX) +#define PLCKD_PRESCALER_60M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 2) +#define PLCKD_PRESCALER_30M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 4) +#define PLCKD_PRESCALER_15M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 8) +#define PLCKD_PRESCALER_7_5M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 16) +#define PLCKD_PRESCALER_3_75M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 32) +#define PLCKD_PRESCALER_1_875M (BSP_FEATURE_GPT_ODC_FREQ_MAX / 64) + +#ifndef TMR_DEV_INFO_CONFIG +#define TMR_DEV_INFO_CONFIG \ + { \ + .maxfreq = 120000000, \ + .minfreq = 1875000, \ + .maxcnt = 0XFFFFFFFF, \ + .cntmode = HWTIMER_CNTMODE_UP, \ + } +#endif /* TIM_DEV_INFO_CONFIG */ + +enum +{ +#ifdef BSP_USING_TIM0 + BSP_TIMER0_INDEX, +#endif +#ifdef BSP_USING_TIM1 + BSP_TIMER1_INDEX, +#endif + BSP_TIMERS_NUM +}; + +#define TIMER_DRV_INITIALIZER(num) \ + { \ + .name = "timer" #num, \ + .g_cfg = &g_timer##num##_cfg, \ + .g_ctrl = &g_timer##num##_ctrl, \ + .g_timer = &g_timer##num, \ + } + +#ifdef __cplusplus +} +#endif + +#endif /* __TIMER_CONFIG_H__ */ diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/uart_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/uart_config.h new file mode 100644 index 00000000000..a374567b369 --- /dev/null +++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6e2/uart_config.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-07-29 KyleChan 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_UART2) +#ifndef UART2_CONFIG +#define UART2_CONFIG \ + { \ + .name = "uart2", \ + .p_api_ctrl = &g_uart2_ctrl, \ + .p_cfg = &g_uart2_cfg, \ + } +#endif /* UART2_CONFIG */ +#endif /* BSP_USING_UART2 */ + +#if defined(BSP_USING_UART3) +#ifndef UART3_CONFIG +#define UART3_CONFIG \ + { \ + .name = "uart3", \ + .p_api_ctrl = &g_uart3_ctrl, \ + .p_cfg = &g_uart3_cfg, \ + } +#endif /* UART3_CONFIG */ +#endif /* BSP_USING_UART3 */ + +#if defined(BSP_USING_UART4) +#ifndef UART4_CONFIG +#define UART4_CONFIG \ + { \ + .name = "uart4", \ + .p_api_ctrl = &g_uart4_ctrl, \ + .p_cfg = &g_uart4_cfg, \ + } +#endif /* UART4_CONFIG */ +#endif /* BSP_USING_UART4 */ + +#if defined(BSP_USING_UART5) +#ifndef UART5_CONFIG +#define UART5_CONFIG \ + { \ + .name = "uart5", \ + .p_api_ctrl = &g_uart5_ctrl, \ + .p_cfg = &g_uart5_cfg, \ + } +#endif /* UART5_CONFIG */ +#endif /* BSP_USING_UART5 */ + + +#if defined(BSP_USING_UART6) +#ifndef UART6_CONFIG +#define UART6_CONFIG \ + { \ + .name = "uart6", \ + .p_api_ctrl = &g_uart6_ctrl, \ + .p_cfg = &g_uart6_cfg, \ + } +#endif /* UART6_CONFIG */ +#endif /* BSP_USING_UART6 */ + +#if defined(BSP_USING_UART7) +#ifndef UART7_CONFIG +#define UART7_CONFIG \ + { \ + .name = "uart7", \ + .p_api_ctrl = &g_uart7_ctrl, \ + .p_cfg = &g_uart7_cfg, \ + } +#endif /* UART7_CONFIG */ +#endif /* BSP_USING_UART7 */ + +#if defined(BSP_USING_UART8) +#ifndef UART8_CONFIG +#define UART8_CONFIG \ + { \ + .name = "uart8", \ + .p_api_ctrl = &g_uart8_ctrl, \ + .p_cfg = &g_uart8_cfg, \ + } +#endif /* UART8_CONFIG */ +#endif /* BSP_USING_UART8 */ + +#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 37b8fcc847c..8aad8b4fc58 100644 --- a/bsp/renesas/libraries/Kconfig +++ b/bsp/renesas/libraries/Kconfig @@ -43,4 +43,10 @@ config SOC_SERIES_R9A07G0 bool select ARCH_ARM_CORTEX_R52 select SOC_FAMILY_RENESAS + default n + +config SOC_SERIES_R7FA6E2 + bool + select ARCH_ARM_CORTEX_M33 + select SOC_FAMILY_RENESAS default n \ No newline at end of file diff --git a/bsp/renesas/ra6e2-fpb/.config b/bsp/renesas/ra6e2-fpb/.config new file mode 100644 index 00000000000..4c0b5775ba9 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.config @@ -0,0 +1,1186 @@ + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_SMART is not set +# CONFIG_RT_USING_NANO 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_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 optimization +# +# CONFIG_RT_USING_TINY_FFS is not set +# end of kservice optimization + +# +# klibc optimization +# +# CONFIG_RT_KLIBC_USING_STDLIB is not set +# CONFIG_RT_KLIBC_USING_TINY_SIZE is not set +# CONFIG_RT_KLIBC_USING_PRINTF_LONGLONG is not set +# end of klibc optimization + +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_OVERFLOW_CHECK=y + +# +# 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=0x50200 +# 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_RT_USING_CPU_FFS=y +CONFIG_ARCH_ARM=y +CONFIG_ARCH_ARM_CORTEX_M=y +CONFIG_ARCH_ARM_CORTEX_M33=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_USING_DMA=y +# 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_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_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 +# 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 +# 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 +# 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 +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL 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_DSP 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_CHERRYUSB 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_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO 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 +# 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_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_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 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 +# 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_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 +# 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 +# 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_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 +# 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_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=y +CONFIG_SOC_SERIES_R7FA6E2=y + +# +# Hardware Drivers Config +# +CONFIG_SOC_R7FA6E2BB=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/ra6e2-fpb/.gitignore b/bsp/renesas/ra6e2-fpb/.gitignore new file mode 100644 index 00000000000..9ac428c1b3e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.gitignore @@ -0,0 +1,5 @@ +/RTE +/Listings +/Objects +ra_cfg.txt + diff --git a/bsp/renesas/ra6e2-fpb/.ignore_format.yml b/bsp/renesas/ra6e2-fpb/.ignore_format.yml new file mode 100644 index 00000000000..af51bf92aa6 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.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/ra6e2-fpb/.secure_azone b/bsp/renesas/ra6e2-fpb/.secure_azone new file mode 100644 index 00000000000..52b91a3d985 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.secure_azone @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra6e2-fpb/.secure_xml b/bsp/renesas/ra6e2-fpb/.secure_xml new file mode 100644 index 00000000000..8d87b3da01d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.secure_xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra6e2-fpb/.settings/standalone.prefs b/bsp/renesas/ra6e2-fpb/.settings/standalone.prefs new file mode 100644 index 00000000000..e71dfedd814 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/.settings/standalone.prefs @@ -0,0 +1,24 @@ +#Sun Oct 27 23:48:31 CST 2024 +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#5.5.0/all=607301841,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h|1605847057,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h|703213290,ra/fsp/inc/fsp_version.h|2923157824,ra/fsp/inc/api/fsp_common_api.h|984154367,ra/fsp/inc/api/r_ioport_api.h|2578112255,ra/fsp/inc/api/bsp_api.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.content/com.renesas.cdt.ddsc.content.defaultlinkerscript=script/fsp.scat +com.renesas.cdt.ddsc.threads.configurator/collapse/module.driver.uart_on_sci_uart.1669822211=false +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#6.1.0+fsp.5.5.0/all=1441545198,ra/arm/CMSIS_6/LICENSE|1219721305,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h|409404162,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h|3759822293,ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h|956077447,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h|3181146757,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h|3011809468,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h|3557548549,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h|1716662092,ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h|432601292,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h|215226313,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h|3033126542,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h|2145813412,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h|3716711724,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h|2642675438,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h|1528066797,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h|3285488134,ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h|3342995321,ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h|862174236,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h|3422691989,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h|440777068,ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h|3070162158,ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h|1573341164,ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h|1753083115,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h|271089146,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h|1964429271,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h|2951442685,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h|1572899130,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h|163659099,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h|1179088122,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h|2095512231,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h|2703360002,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h|3180041419,ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h|117658130,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h|1790528804,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h|987654843,ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.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|154254372,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h|681720804,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h|718227869,ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#device\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.contentgen.options/options/suppresswarningspaths=ra/arm +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#ra6e2_fpb\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#device\#\#R7FA6E2BB3CFM\#\#5.5.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#5.5.0/all=3455513762,ra/fsp/src/r_ioport/r_ioport.c|2745191493,ra/fsp/inc/instances/r_ioport.h|984154367,ra/fsp/inc/api/r_ioport_api.h +com.renesas.cdt.ddsc.packs.componentfiles/Arm\#\#CMSIS\#\#CMSIS5\#\#CoreM\#\#\#\#6.1.0+fsp.5.5.0/libraries= +com.renesas.cdt.ddsc.settingseditor/com.renesas.cdt.ddsc.settingseditor.active_page=SWPConfigurator +com.renesas.cdt.ddsc.project.standalone.projectgenerationoptions/isCpp=false +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#events\#\#\#\#5.5.0/all= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_ioport\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#HAL\ Drivers\#\#all\#\#r_sci_uart\#\#\#\#5.5.0/all=4077763839,ra/fsp/src/r_sci_uart/r_sci_uart.c|1050842453,ra/fsp/inc/instances/r_sci_uart.h|2184748992,ra/fsp/inc/api/r_transfer_api.h|1365856538,ra/fsp/inc/api/r_uart_api.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#Common\#\#all\#\#fsp_common\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#Board\#\#ra6e2_fpb\#\#\#\#5.5.0/all=1381046541,ra/board/ra6e2_fpb/board.h|1528657985,ra/board/ra6e2_fpb/board_init.c|681177226,ra/board/ra6e2_fpb/board_init.h|2772293690,ra/board/ra6e2_fpb/board_leds.c|1936324734,ra/board/ra6e2_fpb/board_leds.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#device\#\#R7FA6E2BB3CFM\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#fsp\#\#\#\#5.5.0/all=2546093092,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c|3276693394,ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c|407111472,ra/fsp/src/bsp/mcu/all/bsp_common.c|1933227766,ra/fsp/src/bsp/mcu/all/bsp_group_irq.h|3911931782,ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c|1386088601,ra/fsp/src/bsp/mcu/all/bsp_delay.c|2797403644,ra/fsp/src/bsp/mcu/all/bsp_sdram.c|1605565920,ra/fsp/src/bsp/mcu/all/bsp_tfu.h|1514141478,ra/fsp/src/bsp/mcu/all/bsp_macl.c|2583260336,ra/fsp/src/bsp/mcu/all/bsp_security.h|1820625425,ra/fsp/src/bsp/mcu/all/bsp_exceptions.h|1254321900,ra/fsp/src/bsp/mcu/all/bsp_common.h|3182992915,ra/fsp/src/bsp/mcu/all/bsp_io.h|3476082743,ra/fsp/src/bsp/mcu/all/board_sdram.h|4246582758,ra/fsp/src/bsp/mcu/all/bsp_group_irq.c|2323020791,ra/fsp/src/bsp/mcu/all/bsp_register_protection.c|1490618937,ra/fsp/src/bsp/mcu/all/bsp_delay.h|1750764556,ra/fsp/src/bsp/mcu/all/bsp_sbrk.c|4161080445,ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h|3275847891,ra/fsp/src/bsp/mcu/all/bsp_register_protection.h|3561046660,ra/fsp/src/bsp/mcu/all/bsp_clocks.h|1746951639,ra/fsp/src/bsp/mcu/all/bsp_guard.c|3787004779,ra/fsp/src/bsp/mcu/all/bsp_sdram.h|892781819,ra/fsp/src/bsp/mcu/all/bsp_clocks.c|2935422572,ra/fsp/src/bsp/mcu/all/bsp_macl.h|996969774,ra/fsp/src/bsp/mcu/all/bsp_security.c|4109231342,ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h|3211935645,ra/fsp/src/bsp/mcu/all/bsp_io.c|997181494,ra/fsp/src/bsp/mcu/all/bsp_module_stop.h|4014147970,ra/fsp/src/bsp/mcu/all/bsp_irq.h|3817098077,ra/fsp/src/bsp/mcu/all/bsp_guard.h|107417934,ra/fsp/src/bsp/mcu/all/bsp_irq.c|4028248479,ra/fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h|4185404797,ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h|784900941,ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h|3972235245,ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h|1164417254,ra/fsp/inc/fsp_features.h|2745191493,ra/fsp/inc/instances/r_ioport.h|1032438424,script/fsp.scat|346195372,script/ac6/fsp_keep.via +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#fsp\#\#\#\#5.5.0/libraries= +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#device\#\#\#\#5.5.0/all=751037218,ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA6E2BB.h +com.renesas.cdt.ddsc.packs.componentfiles/Renesas\#\#BSP\#\#ra6e2\#\#events\#\#\#\#5.5.0/libraries= diff --git a/bsp/renesas/ra6e2-fpb/EventRecorderStub.scvd b/bsp/renesas/ra6e2-fpb/EventRecorderStub.scvd new file mode 100644 index 00000000000..2956b296838 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/EventRecorderStub.scvd @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/bsp/renesas/ra6e2-fpb/Kconfig b/bsp/renesas/ra6e2-fpb/Kconfig new file mode 100644 index 00000000000..9274e3b0513 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/README.md b/bsp/renesas/ra6e2-fpb/README.md new file mode 100644 index 00000000000..74433ae60d0 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/README.md @@ -0,0 +1,186 @@ +# 瑞萨 FPB-RA6E2 开发板 BSP 说明 + +## 简介 + +本文档为瑞萨 FPB-RA6E2 开发板提供的 BSP (板级支持包) 说明。通过阅读快速上手章节开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。 + +主要内容如下: + +- 开发板介绍 +- BSP 快速上手指南 + +## 开发板介绍 + +基于瑞萨 RA6E2 MCU 开发的 FPB-RA6E2 MCU 评估板,通过灵活配置软件包和 IDE,可帮助用户对 RA6E2 MCU 群组的特性轻松进行评估,并对嵌入系统应用程序进行开发。 + +开发板正面外观如下图: + +![image-20211011174017429](docs/picture/fpb-ra6e2.png) + +该开发板常用 **板载资源** 如下: + +- MCU:R7FA6E2BB3CFM,200MHz,Arm Cortex®-M33 内核,256kB 代码闪存, 40kB SRAM +- 调试接口:板载 J-Link 接口 +- 扩展接口:两个 PMOD 连接器 + +**更多详细资料及工具** + +## 外设支持 + +本 BSP 目前对外设的支持情况如下: + +| **片上外设** | **支持情况** | **备注** | +| :----------------- | :----------------- | :------------- | +| UART | 支持 | UART0 为默认日志输出端口 | +| GPIO | 支持 | | +| IIC | 支持 | 软件 | +| WDT | 支持 | | +| RTC | 支持 | | +| ADC | 支持 | | +| DAC | 支持 | | +| SPI | 支持 | | +| FLASH | 支持 | | +| PWM | 支持 | | +| CAN | 支持 | | +| 持续更新中... | | | +| **外接外设** | **支持情况** | **备注** | +| WiFi 模块 | 支持 | [RW007 WiFi 网络模块](https://github.com/RT-Thread-packages/rw007) | +| 温湿度传感器 | 支持 | [HS300x 温湿度模块](https://github.com/Guozhanxin/hs300x) | +| 室内空气质量传感器 | 支持 | [zmod4410 室内空气质量模块](https://github.com/ShermanShao/zmod4410) | +| 光线传感器 | 支持 | [isl29035光线传感器模块](https://github.com/ShermanShao/isl29035) | + + +## 使用说明 + +使用说明分为如下两个章节: + +- 快速上手 + + 本章节是为刚接触 RT-Thread 的新手准备的使用说明,遵循简单的步骤即可将 RT-Thread 操作系统运行在该开发板上,看到实验效果 。 +- 进阶使用 + + 本章节是为需要在 RT-Thread 操作系统上使用更多开发板资源的开发者准备的。通过使用 ENV 工具对 BSP 进行配置,可以开启更多板载资源,实现更多高级功能。 + +### 快速上手 + +本 BSP 目前仅提供 MDK5 工程。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 + +**硬件连接** + +使用 USB 数据线连接开发板到 PC,使用 J-link 接口下载和 DEBUG 程序。使用 USB 转串口工具连接 UART0:P411(TXD)、P410(RXD)。 + +**编译下载** + +- 编译:双击 project.uvprojx 文件,打开 MDK5 工程,编译程序。 + +> 注意:此工程需要使用 J-Flash Lite 工具烧录程序。建议使用 V8.10 及以上版本烧录工程。[J-Link 下载链接](https://www.segger.com/downloads/jlink/) + +- 下载:打开 J-Flash lite 工具,选择芯片型号 R7FA6E2BB,点击 OK 进入工具。选择 BSP 目录下 MDK 编译出的 /object/rtthread.hex 文件,点击 Program Device 按钮开始烧录。具体操作过程可参考下图步骤: + +![image-20211011181555421](docs/picture/jflash1.png) + +![image-20211011182047981](docs/picture/jflash2.png) + +![image-20211011182434519](docs/picture/jflash.png) + +![image-20211011182949604](docs/picture/jflash3.png) + +**查看运行结果** + +下载程序成功之后,系统会自动运行并打印系统信息。 + +连接开发板对应串口到 PC , 在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息。输入 help 命令可查看系统中支持的命令。 + +```bash + \ | / +- RT - Thread Operating System + / | \ 5.2.0 build Oct 28 2024 02:29:19 + 2006 - 2024 Copyright by rt-thread team + +Hello RT-Thread! +msh > +msh >help +RT-Thread shell commands: +pin - pin [option] +reboot - Reboot System +help - RT-Thread shell help +ps - List threads in the system +free - Show the memory usage in the system +clear - clear the terminal screen +version - show RT-Thread version information +list - list objects +backtrace - print backtrace of a thread + +msh > +``` + +**应用入口函数** + +应用层的入口函数在 **bsp\ra6e2-fpb\src\hal_emtry.c** 中 的 `void hal_entry(void)` 。用户编写的源文件可直接放在 src 目录下。 + +```c +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} +``` + +### 进阶使用 + +**资料及文档** + +- [开发板官网主页](https://www.renesas.cn/zh/products/microcontrollers-microprocessors/ra-cortex-m-mcus/fpb-ra6e2-fast-prototyping-board-ra6e2-mcu-group) +- [开发板用户手册](https://www.renesas.cn/zh/document/mat/fpb-ra6e2-v1-users-manual?r=25433341) +- [瑞萨RA MCU 基础知识](https://www2.renesas.cn/cn/zh/document/gde/1520091) +- [RA6 MCU 快速设计指南](https://www2.renesas.cn/cn/zh/document/apn/ra6-quick-design-guide) +- [RA6E2_datasheet](https://www.renesas.cn/zh/document/dst/ra6e2-group-datasheet?language=en) +- [RA6E2 Group User’s Manual: Hardware](https://www.renesas.cn/zh/document/mah/ra6e2-group-users-manual-hardware?language=en) + +**FSP 配置** + +需要修改瑞萨的 BSP 外设配置或添加新的外设端口,需要用到瑞萨的 [FSP](https://www.renesas.cn/zh/software-tool/flexible-software-package-fsp#documents) 配置工具。请务必按照如下步骤完成配置。配置中有任何问题可到[RT-Thread 社区论坛](https://club.rt-thread.org/)中提问。 + +1. [下载灵活配置软件包 (FSP) | Renesas](https://www.renesas.cn/zh/software-tool/flexible-software-package-fsp),请使用 FSP 5.5.0 版本 +2. 下载安装完成后,需要添加 FPB-RA6E2 开发板的官方板级支持包 +> 打开[ FPB-RA6E2 开发板详情页](https://www.renesas.cn/zh/products/microcontrollers-microprocessors/ra-cortex-m-mcus/fpb-ra6e2-fast-prototyping-board-ra6e2-mcu-group),在**“下载”**列表中找到 **”FPB-RA6E2板级支持包“**,点击链接即可下载 +3. 如何将 **”FPB-RA6E2板级支持包“**添加到 FSP 中,请参考文档[如何导入板级支持包](https://www.renesas.cn/zh/software-tool/flexible-software-package-fsp) +4. 请查看文档:[使用瑞萨 FSP 配置工具](./docs/使用瑞萨FSP配置工具.md)。在 MDK 中通过添加自定义命名来打开当前工程的 FSP 配置。 + +**ENV 配置** + +- 如何使用 ENV 工具:[RT-Thread env 工具用户手册](https://www.rt-thread.org/document/site/#/development-tools/env/env) + +此 BSP 默认只开启了 UART0 的功能,如果需使用更多高级功能例如组件、软件包等,需要利用 ENV 工具进行配置。 + +步骤如下: +1. 在 bsp 下打开 env 工具。 +2. 输入`menuconfig`命令配置工程,配置好之后保存退出。 +3. 输入`pkgs --update`命令更新软件包。 +4. 输入`scons --target=mdk5` 命令重新生成工程。 + + +## FAQ + +### 使用 MDK 的 DEBUG 时如果遇到提示 “Error: Flash Download failed Cortex-M33” 怎么办? + +可按照下图操作,修改 Utilities 中的选项: + +![image-20211214102231248](docs/picture/readme_faq1.png) + +## 联系人信息 + +在使用过程中若您有任何的想法和建议,建议您通过以下方式来联系到我们 [RT-Thread 社区论坛](https://club.rt-thread.org/) + +## 贡献代码 + +如果您对 FPB-RA6E2 感兴趣,并且有一些好玩的项目愿意与大家分享的话欢迎给我们贡献代码,您可以参考 [如何向 RT-Thread 代码贡献](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/development-guide/github/github)。 diff --git a/bsp/renesas/ra6e2-fpb/SConscript b/bsp/renesas/ra6e2-fpb/SConscript new file mode 100644 index 00000000000..aee8a3bb36d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/SConscript @@ -0,0 +1,27 @@ +# 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': + CPPPATH = [cwd] + src = Glob('./src/*.c') + +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/ra6e2-fpb/SConstruct b/bsp/renesas/ra6e2-fpb/SConstruct new file mode 100644 index 00000000000..d00d0dbeaac --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/board/Kconfig b/bsp/renesas/ra6e2-fpb/board/Kconfig new file mode 100644 index 00000000000..afe2c0897ba --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/board/Kconfig @@ -0,0 +1,58 @@ +menu "Hardware Drivers Config" + + config SOC_R7FA6E2BB + bool + select SOC_SERIES_R7FA6E2 + 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 + endif + + endmenu + + menu "Board extended module Drivers" + + endmenu +endmenu diff --git a/bsp/renesas/ra6e2-fpb/board/SConscript b/bsp/renesas/ra6e2-fpb/board/SConscript new file mode 100644 index 00000000000..a27ea8e470c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/board/board.h b/bsp/renesas/ra6e2-fpb/board/board.h new file mode 100644 index 00000000000..1150ac56460 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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 40 /* 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 __RAM_segment_used_end__; +#define HEAP_BEGIN (&__RAM_segment_used_end__) +#endif + +#define HEAP_END RA_SRAM_END + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/renesas/ra6e2-fpb/board/ports/SConscript b/bsp/renesas/ra6e2-fpb/board/ports/SConscript new file mode 100644 index 00000000000..4871d7248bf --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/board/ports/gpio_cfg.h b/bsp/renesas/ra6e2-fpb/board/ports/gpio_cfg.h new file mode 100644 index 00000000000..af2010fd63d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/board/ports/gpio_cfg.h @@ -0,0 +1,66 @@ +/* + * 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 15 + +/* PIN to IRQx table */ +#define PIN2IRQX_TABLE \ +{ \ + switch (pin) \ + { \ + case BSP_IO_PORT_04_PIN_00: \ + case BSP_IO_PORT_01_PIN_05: \ + case BSP_IO_PORT_02_PIN_06: \ + return 0; \ + case BSP_IO_PORT_01_PIN_01: \ + case BSP_IO_PORT_01_PIN_04: \ + case BSP_IO_PORT_02_PIN_05: \ + return 1; \ + case BSP_IO_PORT_01_PIN_00: \ + case BSP_IO_PORT_02_PIN_13: \ + return 2; \ + case BSP_IO_PORT_01_PIN_10: \ + case BSP_IO_PORT_02_PIN_12: \ + return 3; \ + case BSP_IO_PORT_01_PIN_11: \ + case BSP_IO_PORT_04_PIN_11: \ + case BSP_IO_PORT_04_PIN_02: \ + return 4; \ + case BSP_IO_PORT_03_PIN_02: \ + case BSP_IO_PORT_04_PIN_10: \ + case BSP_IO_PORT_04_PIN_01: \ + return 5; \ + case BSP_IO_PORT_03_PIN_01: \ + case BSP_IO_PORT_04_PIN_09: \ + case BSP_IO_PORT_00_PIN_00: \ + return 6; \ + case BSP_IO_PORT_04_PIN_08: \ + case BSP_IO_PORT_00_PIN_01: \ + return 7; \ + case BSP_IO_PORT_00_PIN_02: \ + return 8; \ + case BSP_IO_PORT_03_PIN_04: \ + case BSP_IO_PORT_00_PIN_04: \ + return 9; \ + case BSP_IO_PORT_00_PIN_05: \ + return 10; \ + case BSP_IO_PORT_00_PIN_06: \ + return 11; \ + case BSP_IO_PORT_00_PIN_08: \ + return 12; \ + case BSP_IO_PORT_00_PIN_15: \ + return 13; \ + case BSP_IO_PORT_04_PIN_03: \ + return 14; \ + default : \ + return -1; \ + } \ +} diff --git a/bsp/renesas/ra6e2-fpb/buildinfo.gpdsc b/bsp/renesas/ra6e2-fpb/buildinfo.gpdsc new file mode 100644 index 00000000000..273d48071d2 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/buildinfo.gpdsc @@ -0,0 +1,162 @@ + + + Renesas + Project Content + Project content managed by the Renesas Smart Configurator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra6e2-fpb/configuration.xml b/bsp/renesas/ra6e2-fpb/configuration.xml new file mode 100644 index 00000000000..10065febe3a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/configuration.xml @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Board Support Package Common Files + Renesas.RA.5.5.0.pack + + + I/O Port + Renesas.RA.5.5.0.pack + + + Arm CMSIS Version 6 - Core (M) + Arm.CMSIS6.6.1.0+fsp.5.5.0.pack + + + RA6E2-FPB Board Support Files + Renesas.RA_board_ra6e2_fpb.5.5.0.pack + + + Board support package for R7FA6E2BB3CFM + Renesas.RA_mcu_ra6e2.5.5.0.pack + + + Board support package for RA6E2 + Renesas.RA_mcu_ra6e2.5.5.0.pack + + + Board support package for RA6E2 - FSP Data + Renesas.RA_mcu_ra6e2.5.5.0.pack + + + Board support package for RA6E2 - Events + Renesas.RA_mcu_ra6e2.5.5.0.pack + + + SCI UART + Renesas.RA.5.5.0.pack + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/renesas/ra6e2-fpb/docs/picture/fpb-ra6e2.png b/bsp/renesas/ra6e2-fpb/docs/picture/fpb-ra6e2.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc1d8c92d8f520fc9135a7ea143819f7f20f075 GIT binary patch literal 1353810 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�K65Yix0ysy$s#F^P%mP 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ŭoe?m#BO;2%S?3js6(wX|2A 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�%<}2*EA8TE`_Am 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 z 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

uam=hwCfw-5YC_{`~4v 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

b5}Ui2=;NqA8b^KpJ+yv5^c=?) z!lLzO5tZK!1F8#=1^ptuYx~->DD2pbu-s0V`ewqK+J(M*A{-)$P|~?c1gncC-9pzn ziy%D>M(#y0A+h!?MseGy$nsLqxemU04X{rxModj7+BY4+Mox>k^(+<;B$YRhV#A(i zvGdsLsPEp3;N(^`EIy2d14j|JU>F8IB~Y-TvEL*S_v^>v5wkQ*u*nkgur>9E^qlNn z#Q_aDYlZkgO7CtW!RaJ=*Ib`O>=~-_Jg&1R+CKvNFKwFTj{^Gdl{*1C2Y2JKNP_gS z5YFQ#x0749OZy~1XAvGgbPOLaJ|NzR;{Im?`V4J{|Bt=D0MF`L`v2kJ?ry<}yL;}q zySux42yqXDkOTrG1PJc#6lC9Giycwx}7VvTMM)?f9fKnr)J^Rzki6%-8~{moWG+TEG>*-WNs(`T~ALB#^zQc zNSuy=F_vlQKv`7}%S@eM5t0V)!d39C-3*Vqov>W7h2VUkq?<)?J$qAh2~0%J-bdBOiW=_rCoBz1z3I z*Vh>`D?K9l}#{cx}K0>^9a^C5+qmldx(JW`^f_Uoud{qq)ULVY#AcbLP>zWggP_^ zbcP{z{bo@FbdHA0k#{*D55onIymC(Q$tJWkioqgMpj4?*cM2@R%B~YQbKxy?b{<4@ za27&6L($XPf;}4>aAr>f9y{5BXU}!ug@=0Z(%J2J?#w>)tgb+6R2W<>eIPUPgtvnq zYL*w{$ewnb*xQO{9@>fLFYLv$=eOhh!47QOxB{(Bc}P!AfQ^kSY#f3SmsyJqdoE%1 zj`IjFZbR1U-RM5^3f3Ha8XfzeLUP4sc*oTup?CutyU(F*#}(9VIwKTmj_}&J<%;NF zI}SXHI$CmIBsI58Ofm`xxI#z8CoZ5DJ1&>3pj&7Gm0Vdk#_`UKMu zk!O|xeG);ja2MkdXDS0MbLjp#5ZVla8wSGh?r9k1m5$-QSr{6SjUoQD^v=LY_Y{nF zP7-sAMWlKv(rGt@KO^Bi`LmOVl*_|AJDZ5Ss0oPoU zFZ$-34Pq>{uk-98FxNU1#sN9-&1gnKSvP9d9Y@o~=KPN*8Xu(gwUsVE*n}-1@K!w?Em4+n;Tq<$C=3$vWWU9)k13_}k?!?5@j2ZlE80 ztleO5ZG-MpFkn4JI7TCZy{wHDt9~`gzCPo ze<=*Zs-fmxB+Aq*hg{5eFTs4bLh-k8SOxMrPoQ$sIRxjmLd!V@OKpN^83kEnK8iZ_ zp^4hsprSSy1?ND^Hysu+%TY>jUa|cG9MkHt$eGG70lM(Kx(}eU{8d2bXyaUN8GzY~ zf&qPza{}f&B?{>N{{a2oGKEAD&=nzF0(Cx)pYv`|mjIpX&9M8({Q#Y}JqXYxclLY9 z5NZR4(>EGHWr2n3@*w)X!SpSMQ2#f=K3T|cD*G(MsNWM}lZ>GxN+t~XaRlY@axk}` zZ3MYW)b2C5kG7%q-;84 ^s>HsT3->bG4+NbVXKx~C&BvlFd5pGIlh354ag!!EQ0 zHq`G$mr&l3~^xxQyBk*Y43v&W=WhA7LE_k+N;TIM;-YB zBaB!;Kt4lT$dLIaP?}2>eJ;Db-$Rrw?kj^9SYgN_8w^__!-!?}7^Citahk4}pzV%H zx}KPB^ih>$!c}GrQWtN0lrU_VJ90_eY$2GVBt!t0q?AaI5Qo9aOzTqfIio;j0U&1$U z?!&dWHsGgsI&k~_PT>7+;GLbg{nkNTfAch6J+~Y6DQWOEwm^MmJU)2h0PyWa;Hwk( z_NC3Z{mx$Clf$_2=63x3#f|vvrR{k5=sHvvXTiqK9sW@{Xxn-MtG1m+aBh~@+wlmx4?c?nm)^yu!_Nz)xuNGAsyCd$inV9Z zu=P=7wH$`74=Kri5zrZ$7`XXZ26P5-$%@X9{?7tBTcp@EURZ+Z`FK9oc=KSAKvK*? zsPl>x`xqvtQW=1p1vZp4k{d?|is_E=C085v=E66oJne$23f^ zO{GpSg*y8b%r;NOWMcv~(6Rd9H*3YCNdnAgIMKVc%Ob@y4I|7+u_L(` zpfhYUEHGrwcFw_kk3v%3(*;PdwfGL8^E4380tG;i6M^IYU4Z`I93+mn@qh-$E>L#N z5SbU`9y;F` zcS4=Y+(arb<187_Lou9`$ssl*wviZ2KsMAd9>X0IFpOY+a9p&|cgC=r5 z++o^YauA|-GfXdt6kiS=MD@;+Eo-DSIwerOVvBJAG(1xgTF`;2btkZK&*NyO_AoFq zPqa~?LB81CQ;$zx*om8OZv)<;JsG-`e8eM`Dh((e!$WN{EgbjzY(0jzX`Wq z>%-y3c;vX6BFvvy47fI{(^C;^)2%q!@F$g=? zI!w5I^S9wL$M02{%DS>+4t@6=`Ucd_Ipkr6T{b3Az0mP57J$BT@1w|Q+6t@SEEszy z!Ym*aE(xV5S-TGnyDq>#e--otG6kT^5-U-)<04jUJqMe(3b~8BnH0B#m3UI-E#%gz zf42pl%cGcIObWarpf7Odl$G*w`~Ly@z#;+qOnS#s8_IGoKpzOwx!y2@-%tJupff<; zOE@kCw<+9?a6Aicw>UMVl0leAoyc>^hfx2@GKjvD5`8BndOjs8=W-|~p>{~gDv5-^ z+&T?PHW?)87)1TqFcNlo=fO{&iZjV?hQP)Wd)yu2GSs$Uw`Nl>LeMawz^2Ig5v%j-j9*9D}M zcf&n-1rqB!(6a9&IuD;m&Bpy`>OO+in@*#n_pHbSv61R|QA0260x}R=uolIw#}HYx z8Cq_6m~F#@i&WmJPo3soEcXgvp>|)1-h&d=86|qhN>uiFS^!Tskb48tx2EkJEN~`$ zX9jeR;liFb|4Bgqv+^K7=l+Q6l?37vgez|Q1DsPE&%s<-w^ekN=XRgdtg-x00J^Pr zoCtg@Ja8u}BRMhcP9F4>s0ai)JHWx-8a4#3oCjTBU;hrEt7__C{t{KpQ_+KwOAulz zJ5jdtA~LpIggXJcN!eByR_ug9^=^XmT`;Vp^}21)uk9mH-}09LUA?*&>UEo;QNKkT z!`C;h-4BbJL$Izn4BOg+aBVz*a4P#r>vp5(@)P*zr|Wp+*{jISj)RYzIb=5au(L52 zF76EIzK)LYbF>kF{*U+G5P<&9^Ow*P?hD_g%V4H$jkyHo4Cs>x)c?-|I-keK@p;m` zY+mPWyl)`r{bxji{(H$l=P1fR_pB%bouep=w*(uNlxeFdR3)^Qlo@Obsqmjlp2Y5&Qbd^OV1H8{@aYBGwj1BQ*o1GNZN{%} zt|LWu1FpT;jBiNr$u4~Q^j2(MRRRlB8@Twyqjl3!Y}j`h9M!b6^8i*-N9Gv49LffM z0?y4{(_l;rxl3>nvMPH}yZ#tzNF0KTVd|a^?}S>EuRVbk>rcWdzE-&V%au!3&gFp4 z03!jq)Tt>G1TX0q6W=@pW~>q^mLl`okXq4$wDKOf$CQhdEDqtzN#QMlZ`Nvr6>k*z zh}oh#5TLU#STjhoGQ@Lp=MbRJ^~e#yv?S{}yZiEeC<3}!@bI_;R z5s(ZB=&VRnXC>gA6>R!F-ba8kl>l~z1;M#RCMmcXm~5Ygan6|-?U9XPKG_)TOQ7Bl z=p)@|yF;3A!JcSAN~>v_kSPSilL;JIc&;2zpI|_nPWLTFw&}N7*`IF4WibFV%>3kH z?j!!@dFC9Me;NVmR3lPWNik#LfL9ZYsIz4N=WwxG+OPnv_y zQHL4Od7dBxI$M<)(5LnT`fP#`26Qo(kN}f{E^0ui|*5=ZEE^cQm)6_q+q;Vng}d6+$;oB=z5c^LSRIldrISWk$bpd{ZRzRm%-gH0cK`0 z)RYzC?{7T8zq%5)Uati{;P$MQ+QT)t{`PA8_%_2j=SAO%+wbniu~mtv z4z)p|xgO#zERY~`L8^NoVqE>NEUwHo?<>7osn z4>ZP!0U#a>8*j#G%eYKrVZ0TU4+8ZmR6a%;L}ICX4l>pp!>WVNAiv`f^49D_Xkjay z5>~*SuDQJXICu`af8iQv`lLb2CquZkSMRut;_g#02`do+;-;AfiFB1>V2zb}b|EE& zn!!>Yh>3w*4(LLD2j~){6TmSbQk~*_*+j6T%RXUDt=G z{0=xqR6xs?`eFmpy{LcDvdM&rtN^*CdkDaJr^E4^rrcW27vD+B^bt zYOe;#Xi4q065aD4yErJxqNy#6f|7m!2I&Q2m_e}cOq$5q6{tVGp9TGXF79GLT|syd zO#m=`GXdvZN2wlg+aQcUbUnp1Zg-@AJ0HU$Qs2_wBBH!m7&x1d2xv$B%nYiFa=@0~ z8&6MSaOXMoe19y{sSn^OH#~sH-l06*O>Utl{fI;YbQT759^7U5BcRLVfX;gR91{ZV zzXs?tG;QD%lmrL&a4cS^gGJL9Av-M#Z*U&;J-tYY3`K~O1Du^?aCEkVxv3e942*?) zyRMNbRMoUFe~}85RdiwL5sK`VUaUO&1PXRtfqTO)7?o~eF_%zEzqsqE-dtBwfhLr55SV(oGs|i%?A+Fei-4a zx1;myRebpK&v@dcr%;%mgdiU~SX<~rW@RoikOX-I5~w>0m;SV%Kz#j9KcGKz35~)2 z@L8-16CG>JRK0!r>iOZ}>tT0B!O2GLrRcj2P^})-Ci%9MV=wk`cM>>W<$vzZA zsV^HIb{|0h^*2Dj{m%gUnS*-~=It(WeKT+}oHK+nfc_Z^^@Btah6fU9V1PveeF?rr z5Vi*l07yB?rEQAW=D!EJCq2Y2X|TqxO>3I z%?-Zpo(K;PL9kyCJe=L(;pPojS6?_dd%?oS1?t*nn5nFeDRWdYYpDU|Yg!^Ay#m=) zYhms|3gKKM44KLE&-E~bD>tnVSxl9EA%Xe=g7NuO=~-xf$U+MYU1W)oi*3bd9nVQ0 z$_GJ}H`WZ9_yltp#?}U@*9uv&Aw>fCXFbMicmqHfCidUMS|vs58~4 z#x69j630)!fTy4Q5H-b3@UpPN=}n}3{`fG#b}s>T0|9v>!S@;wp%@=;q~$i+b`UpS zK8zzRF8oy2v^1KtOClAhXmU2!;e98D-tru=i1{+;R>nE7rl-AsU8u zkyzPtQsgfW%xs35L#!CYm}KZD8hlpt8PX*{pUBn|5(Z-tV8kd$q#olmUCU%q&~}MM zd|4-Yjz5jm$}S{Tu7h`4C5(KNq2U?}RobuXmkGy|2BB;UYX(6J!yF4+4VSp*30P-E zh+TYn$!@?4+;W8buTYez6J@1=??Va{$B-@sisS9l{9d-mvq;u;-p>7X(EW2TOu>RamLQDbW+HnD_mN&119Y8)yev5(ac!Z@Q4Qn*Qp>v!LitVSFROHxW%N##zS%QCw!&!XQK ziaG-&TW;xlutl6fVHB17(MHi?T|Nh$zfYW)dp_SaSHLJk#29^sj%YFPGLN8rsYkxB z5VO^d2V(eM#u{+mUaEII=b4m#hI-DqE+Cx;Ye-q0NJ<6IrJn0b_hp|>WiXkpPmsvZ zK+45Tw)WEdo=op_v#nQFSh)xGNex)+LGPQ& zv=nW61l8YRq=XHzjv}Qs5`!$mL@=q*j>#BF^PZ zeHT%ksl4*>W9a#K?mDN18fy`ZrGBZ1YwE$eQ;(wKz+d$>yZ1VP?~dX7clP7l)=Ff0SRlpD3{ggU z$ab>D-iCa7o;w_ILv-31^)}DfU zb{lm3@?afXExZ#r7qoX?2bNLUWM$hiwHaxv4TgMgU4v_Z? zL%JmL!9aO^Wns5lj<(H%f;{zx%N7qL@qiK!4zY!t=bwxAsDD3CDdAv^GwB%i+~C*+ zQ>h;EAQcZ}G5GP65RNx6j>^I;j`;3K{T!{2rZ!`QUZ|)8JYYD%Jeed>)JxIU(YF_Q z*X^hbGpIZ9bP~E|Km3oTdOO}G85619o=o?_!4DbGXV81#!2~flVH!+A?G&|bQ>YK- zXXfXWp7-vhcy^M3mO>QX-$3#k$PX;s{&AbgBDIeal(R_l(G^8Z;pty8q_ePh4GTlE z$h<(;W`G__?eP!})s==zsI*QXdd9tF^G&xavxGx9Bgo@XAk+%jO~od?J0 zD)?uvMreK)+!I>}yq81GF%!$^dW)>mu+TCU3(XRRB|Ro@16FN4Pf))FUhxG;ENRAC z(q;ONK85gMvdMGJ z>G`N%8p?wYv{a&Ut3=<3V{UNljbXO*{t3`W(fV*IBb+6J2O+r*agb9E_{vlF=F<0N zFqhK7`P_kvcbZA9A`8UdXh;nwMBu#qmzXL7jppPg;e)u8UAHD_6eQokD|bO6>R z*u!od?VCbCw$MHTOB}*QDmp{&Oc?qVK$}FF`Y*2kJa{Hq+9#R?6PWvAjG+(p=iV5t z3Rbu68^2rboh_~iR9(7SgFDzY;W z>EaA8S4Y^|TEooH6lNxtP}4Sqil#2qRJDZY=v%V2Fz_xZX zOzO4@i@6T9&myQ>CBbx+-0fYPL0rhr0hc_tTtNB&OI>zruj->~ZKG>#hcQ9CY26-} z)$fIQ{Q+1s9E4-rF}SqsLt^g<)E~ZtSHHf7CtiLYD@t?V;b;Ln;xAiknMhsj;phP` zM<;~3yCEYW0DpV#X`YbS*a$PU95Hr@9KOerj8v6jsH!c7 zs1Yxz5hJNs6Qo;Xw5kKfsXAh!nlmP8x{_Y$j*0r7m}ulpeS=S92+$w&`yMuC@U;DHaDbs*hyZjMyqz5p?Cl9Z4-X+>LBa6#^n#t0OrC?*#u;Xo zjxaEiK|{v^3ssCTcQL0uuz;$O6CyLJkx77N>_#1tvay(V&cWe^DHB|CIY!<{U9u-x*U4 z-7!|%jsEt-WFzYAsl#S?;Sp<2U&3>HRV*T)PYtzyWC`{kegan?ehZZa_3*K@#+l6o zCC2y29{V+=G2(A8~2pkf;&^7AjS@WMP3FU&Ub z!$d7l0rTAXPopJU(Z(4Ekpj=KDxd4h$_Fd7zXx>sZBizAB%R%~*==?2Xtv7ncDCB{_OT`emWEMcDP4zUwqrKI z3VS%P=R!Yh@IZj29MHKuiGhiJKo=Hz0y_DWgCvYMB)Bu8>(RFHM)V%~0iC1JGXyR0 z$Q9AoC5s`KIW9X~H`u*hjTBkFHhVKnr1vLHLEvcytN<<`MM%po5-!w!MCGqWT4gsX z*B-{IzK2k|;W#!PdJ>*-< z5FC;lMIPj7vIJqx97XpulEIo3M~3vFq*M-}c8i4rNsXX-Fr0vU7}X&bUgvEL?$W-Y zR5y4|D+{mlHV!T~-hsfD%FZ}jQdk|rU`)zZa@$5U>^h1yBxQ}A@b(UctBoxxGU5oj z>+!)O8}apX>+r?nl?3U{xb{*ZzI%z*Ki>p=bqF6lw+Xw~WFaru4vCJYh_^OEbDTe( z+tZHkU)YDwo?M6bA8*7zUhBo-o+@O;1jAKkgNVpD)VK9u)4@w<*mN8r`D>u=l0|(1 z)m5DodgrB7FN!eCI2Xe$vN6Pro{!4GL@GlJLc{61%y7+uX<8fX^Vh>Hc_mB|8=)Rl ziUm}sRR}zcBFbSFSqV+ATyUUAwv6co7Q-&72}Yr1LNR6#=j|Mr@oqp@6baDfU_P*j zfhqz3_S)b+E!@e+-TcaHFl0 z=pAy9Mmm<36X>`3H)lE|3qa=qH3k4FD~24<`576+C9i=$ieg*)N9hN2GY;fAu-tKn zA4s^(rM6D$e+H7f;apMpeT#u&x)*6cm$NI3p*B@Yk2uUEOo)JU0n4;a0n$fWGl<_? zM$`9XOE?SvJ%ZX}mf`fHc7=by)Y2<_v+VP$GtI3C7q zQ@L)ngub~3we5P|`683dB6<#G0%s8jmD+1wD%1JO#u0FeEJtDMPE>E$N08owx~_fL zbl@>;KKKmMmv4l3bSctGSJAeIu>JTW*s%K?+Ir8Rr1gOCBJwZW46Tqd(SMIHp?6FD z!$>P?!>DYs_kdjJol&{v_HQ`#D?H_A1eJL?oKt_zL;Y~+YLN1n*f^K@I~epbL#gk0>M+?ri*Md)JK_8 z*)|LnQ#O^YgQ4r40MFD)*o5YZw73hYZBh5i!F;zgYER+?m`im-3_e&#P@5nJ^ikUG z1nABfw2T0KQ9q#1{p*0fz{D9*IV<4q8x7T^y3kfu!@8E$xc2LH96WspbvfCHc6NrR zBe90Hr2uqGGh1ltnFvT%RndgXQg!I)n84P>ALXr^uZ-y>G zI=iVekTawkRqldO)oy54F^Jz=r%ji4V5}?~+ z6zvFLrq+@pW}ZsINEtJw1hl1O&pv z#T6z7hS1SAfVz&6$U!)dDi;T8n6GApsf%F@al7&KQ$xW$iOYJ!PNO)-Ji$0_S#>^vQenyG=o zQ&cc`t^r0av&J|Ld$DAz`zRF|CTO_|caEug-k44e*(?GUhL}5%u&KjjSwu=UH()bO z{4vGA4O0yqG1JJAz{dr%joqoyB*54A5!Oj=>=s>O84TIcMsuoXE_pW zwQ+b=7Vynw+nQ5h9fnUt5dvbCW8?0J zNwIw#ZtNCM9miaYU?@|?ooY2OpflibN5lghOPmRWNb%C~N<%^0K5RVsG+MTuLs8pK z~XT7DUS3eYDI*zl4ea51OzA`twufX?&K8Nk`a zT@lcEyJTJG0CT*q2}E{LyS^{f?5Q(Nsw0JEFLE3DM4+AY z>WxUP*?`1~wTLKgK|of$u)1>DR;EssJwteuexgYbMjQB(BA@V=0i6e=SjiY;5`|F& znIny;F*oVAQj?-Kl@xOxFyZ;r45H$@(6RhI*<#My`CBrm|0{q#%PCR3A9lg#GRH2s z{JYcX{jg=i~S~eC&e&eW6SCJpp~PDZvH-`b1-b{eD2_yun-^8PI1Dd~ms9 zOCej)7)ZDbak*f(b`B87bH%y5@_c`mDaP~-NM@4)sY3hxGg^>UyBQ7Cfwu}v_+!|0 z{xt#S4C1S|Uxar;C7i;GP)&7~|Mp3&!V;eIZ4&|&Q$H-B&eoasS8Y5k0yuf*tP%6} z*(2nSfX+eTegkx#gDwHNqDa7gKS1Ywqv_jEa!x0S$5`t?OtSTXL1a2ISNEdlR|~6vlYsk-bg$`lW67^4V7W{mJF{;)zlM^mc0Nj^LY@58+T}3G#wu zh>>X_Kz|n2WP0MYNI_LuP4);D|W1 z_wL8`lTV_)_at27>#&6C#Wa@`epZAPGa^hhenbE(vWT(39%;5Nh{_(EYImoxxiY0qE@3 zPJlkhE(0T2s2>|b?LDVu8%gDDv<QC9*W~vc^xM_g!iZbv@g`Q_3O#D+}8ju0=pezxH(lR8A{!WE; zcqS}E(?w)*%is)H1d{k?!kqLbOJ6$PFAGNAIWP|{hGj${OhdAv7mx-uPwJQGSy^8l zuN?ptmsI*zp`@S1BaU*~Q(sZV!wb_QHq&-MD!_tX3X|Q|m!QZ#a(X z0}SXtF^Bb&UQ|4wY5i(iwkmtL-5UOF9AP(jhD`yLPJ0_ z{8i0Fwya4@?&jnS zJuPi4Tc(NyDms|8SQAs`sbIzuEzBc8pS(Z|W9DgKriM9^SF|C!z8l)kkx-hhMU_$y zO0%g_vrJNl(lml}f^DT)ngs3IROz)bNLd?0lyxwCo)%_lT0qUh75aAG(6jM?wz(5D zjAWR%R3D?JEv0K}V90zUj9O}e(LCpZAbqT=t$e|LVJ-g5#Q_dYBjuD16Sbz9*gA@zHI>R_CuM)gVF7FbcD+()K_mjU0=sbs%0hIxrmDVXnA;P_l z^Thk5H=}*mqv+WEFgo`uoaz1kg^f3hZ zL$y3fDJCWNF9JHlIlF8N>v=z*-?5_8b*7Vo&VbG$eJ@4jmf@5KRTKf8_pudvIz97) z0DXpo+?|%E0w@AHZ&P+>H*SJo0(3?2=D+zm4DAmBbdE^Q>B{8yE(dfD*2i!@#f;!Y zSkLMHXd6R|1nBI#csHPP-QY6E3Ln=EwxCO{{R}-4ptJRSiE}ngg3Hl$_*v|`^cIdj z_Mrgt9cN#`&U3G#anospWw!{A7AwC@VKJBBJ*R%F*kg{ynN)m#E{3DjA58;hc)eGt{b(R9vaR}v@c z=q-U3POQNcP%7~qaTBXvYstD!Q=0_t@j8?m30PytSmH=8Eq)mcHva+iZHyG_dRIa65Wd zD)WP>EDm={#b{DgM-h+@b4!MjV;shM65NyWGTk#BGhL~i5EzS;h4da7GDHjrg0HEj z@>nH29g6p}(mvUkKy&~wm*kF{`v71m$+QOmI=jG&c8CCi%O1C5+}=rmF11sV3$`eu zR9?BvavfthS9MFoA_r;Ap+8A+nu@YR5m6N9I3@WCf^E9K0C552lJMUWoHLlq;hY1;aa|o^PW8H9*6IlpD z-)u2u&LX4;OYI|}=^hQc*nGI8E{9iEt%w2PmD>j0&{8b$%o63At>FUB*?cgYSH={|$QoqQ9Jlw~L!G6&%#*pqqb&Squ4*>>rMM!6taWSu(mVXA& zdCC`;u?a?0m)UE?(4U?=27x)PNT}>a!J0iN>ez#_bq7$p`8XQ-PN1gu2(2H+%3Y_? zwCy+=x1K=5mXoO4L`!PV8oSR3Y3eyE&z8}9hR!>M@{Na(-?1BUH9fG1D93b@Fiba& zfSOynFu15WMty1lJ43{0(|p>K*M zDwRf4xEoP_$@9pyYIi`hhArc}pkE~ibcXDK z;QP;r$bC+*uV1yRKM36(`mKF1Y}gOOCIa-PgD|Hh1A4@|BdFYW0ndK%11>-JB34wC z!a-&U2RnP%+c^tB=akA$R<;Oqc1A&1IDUBhb>P~Uc8eK9tz6E;K&k;j9dPH2hi{L8w|q#4S?=#C*LQ*xe$VL77qe-e|J}S zxwydB-Cel2vjtsWTSox;!ll}nud0XX%4(RoKm&`l%*6cjDGPM5P)~-K+*+h8Ukw#Y zUnq@R0;S0W*b-BWQMbW3O_{K$kJogd0_iH;g{B#h;;4`l zeHMZBT!QwQT5edN??#HQFKm3M;Y`d!Vo?>c%bSo>-YVwM`^A;P);AOCHW8Su?}e$l zE|_KHj)i8vSghv-EdqQA&>y+-CK}3D3qar9z8v`MD6YS?2H(E40zbZ9iJ#wV#r5~w zagBgm0QzSK3Bu3ga!)goY>jZBDTko`Dt>vt54S&94}8*xUq9>>d4lojCOW^JAb%5X zy}b_?cDBOR&JE5UaRShL_FqMIeJ|>_oDuU;ql(wTg&OLB4+{G!X=tIwv5xumj!uA4hJ(cIc9_rs^DzMUJu5*$^z=1?a2<%0(Uoj4em(NifGe z6miwP*iWFb;lxwOZSKSJ&b`QK?nO#%7h+emp`ddoy3am`HOC)EOzlRIp6Ee<&QQmI z&Pzo==fC;){|un>b`B87!pbWvuDo4>cgdp8fX?Tzvc*fu8hStZtANf*CcA5M=g!JH zEBx%@u0q?KV=54mxk|V`#}>6Cs$dnu@|%%Ty zevjh8BvL~EDxfo*v#4 zp=aJ57k3se6Qhku@uOqdn#s@2fX?q-yn7S5d;2oiT$qPdVfF4u(S7(S^c;CwEc;Hq zi0x-y76UTu>dw}3YyT|a0>7gDfPneE7vB^Cm=a6ZB08r9=_|U#T=aDW=PNdzg+o%a zn1{^JCI@s<^68xk<^C=}A53Lk0&xa&$zsmic;DSX{(E32uoZ!)7}BXeQrj`fkzmp` z0870RAWK+|oThDJ;PBw_C$W+sJ;>7wu2y;|P4&ZxzAC)?L@(Zacq7jCHli~x6@~r* z2sbf9gqZ=BhuPzuOP#p(7PXUq-;7^AUW*^zYQv4UHsI#lJMr@yJ8|oc&A^BI@%3v* zu)C`UzOGJ?$y||D+<^9NC$Qt(i)f{H8B*Gf`HlpT?EPV%icyZKP_m4G5`m)<0kx7N zJ)3tnMpJzq8AytXUpj{Rrem-NZ6{C}N$ufS8MS}bkyNfDz-ilNP+jFIDXgGNV9s@k z*Cl8l2+SqQFm7$eKP1L*ATerHZP9V5BBOD^y7 z_EjF(j9t_R2Jb&B|8D@g)Mv0r^U>K$fdO5bi#`yb51}$5f%v`T-f&L!n659b#jfoA zayOW>R|wZn7A5)~93)N%fw>&exn8HpUBXRcMAf*mdb$?7s9S4nO)X4nFb*_FQ-Y`!BzYqmR9b6OX-vV^`n7kt=WG&?S-! z@8R%;4{-G2hd6QReVinH^UULK;rL^(WBX|08PAJQwG0%>k&y?B%Gxn(Q!FWAyjMj3;aDu$S zOYI5JZ3xgUNbfc!z5TBN`Z6m|0qDNLiBMP3hx$AftX;YKjs?9jKM&#d1hE!oB7!>u zx`WIGhGsUTcbkhG=(Fc9#WF1um^%0%jdbtz$DhE8T^A9wdN%?3Rv6WBp7Nd0sM`hg znqAN&FxRWv3;pVS1lfE30N($MXcL_45S;UMI1jo$!MQ=>0T>XR8#f(-S>t}Vv>rkP z_2rd&FX55*|ABpHFCwQP9}dJ@_V$hf(48IK1fV-w+6X`|43EH1@4qbo{k_K?#_EV< z0q7cP#sbi%5Ri{okwf}l1@v*$2aNU35P&`;s#E~_*wA!To_P4bAJ8Q@z8jDwNFHdr z^ta-9((x?(H(!?lS~~V#@*qHe(C;&xvnawjN5J=SauC9R&Tj4=PEG>QBSJ#KbI{qv zT|-S1^XIETRl^YT=BZ)Ql=+yqPz$pcXkx~EO{nPFATg^F*~?c!-^LG069~{JEW_Z* zY8W<+pnSq&jGC*35wq1WeC9HYoT-8d^VBhCsUDVTn?c9G8oCDNFf+A=%+d~yHumsx zbU~=M52F185gZtXC58m!D#jQ*R|CTr=wQ6687661Qh~G*GFd~0sap1!uI+?bdaeZ6 zZvEncd3tVGsOt<(6L(lT2Ei*N4zX#u$Sf*DL0K(|${P`rT#T@|LimK|!p=7ZMvf6; zuwlNTGv?{oW3jdyH1xgU;+2G+ttW8h(yM5wS`Bv#3-mN*QzhGruU~4y-=8VM_b-*< z#@kJ}@!o1&|8Na%ih1b!NiN}P?`i^c6YQ^NKz|(gV5b0ae7Xz2ey|m{-r-}n;P!i6 zB7od4ZymwK?Q7uU>I+xzM6~yw#O5PU2r#bOdIsGmUqVygCDdRJIrP*A*h-zmmNUjdd2kFX6o4iR&W3exCW5l-se?a^U6)@+W%p_5d1Z;|8|*^J zZgjH=B>1~=WafVtpfilKFqliif3pI@5Y8Yvkc&HS#(2*w%CIl?{zI?utC0DT+*Hd|Z-pgW~vp?AJe zY9&BtP#R?vCITDsyOE}3a9}u&3eAAdR&-@5E1YI9rgXiSzQEHMmbdLg%a(J(jh#JQ z*mEMKd;>gUSHRpm4PNmTC|bD-?YpjE?cS?sqvKX@IV%R&xc)Y5xqz_Z_0aao7cTf5 z*o&iV{~plgY1Qs1@$|Q3MgI-Fe{*M-_T3He@?+vL${|A@h>2ihv^{+@7y7mi5d??f z!fo0nsvLQZyRiM}a{|(9Yukhemc6+FlEd9mmKBctI3J|?c_7Zw86hUth%hzB%G78) zeP9i4e{>k%y}JQlzte&r|JH_IKi!01KkCD;)UM)#eZbor@WYGk1nh_L$@8btTDbyN z=Jv30^haVrqp+gyzVa5zx15JTSQ$nWG_#v4=YUtT4u=vc_evbq**OV=yfO&PGckxn z$(I1$I|WK^^v>K9G1ip>G@eE8Ii)H=Pz8{dHXi;Iz9H3n6Ds#qFE~x%XcA7>HjMrrLiJ&^ZH5rJi+idNX-+zeaCfKW1a9|ic}ew% z?}y4G!z{al4-DUO;UIVS7Wq8=f!>=We}HmD`8NPM4-iZJhOna3d*&D6sLgS2pFvcG0ukSu~`t^HJwI(y2V zdmozD?m|Q7F4VQ{MD@xYsA}1X+UC7zTzLr1t@}{lv=Pl~y6MfN5i(p~t zXC095_df~fi_P7Hi+fN+8gw*GptV399nGuoBO&_9OQ%qkk&a*+0$BodwxIJIbUPa- zVL{h2wi0gcvlcAF5-nrsTDl=PwH%Gx&!V{R970y_>j!iW_9g-P9s%gu)%yvm3D60u zb?X?e2bO`LTv4>D_*#3RL)X%&+Yh~lgU}@~H)uL60NuP{AKY6HBE0jEaB)BR;=5Sc z-G`WjL^u&s+1lC(KzDWa5W!9*3wm*66mEX_u5fYx?D?m$HZBu>DyGm>H^G!;MwqmW zxaZ$sL7!k9A^?4yPbNkL=LtX`6<>yNVHv18`N;nbKvx8034*2lcLVX=z|0WN=kwop zpYvz#|3QHMpx^hgw-TZV=e|yM0?vJ%9fgZ~fQQ>1K#vLwM}UtnEKE$Hr>P4|BLaLE zA6V#_W8QRSESkL(OO(~IP+1K+TIPs}%0NMWEo|+4F>R(Arp{2ur0E3n)73F*{6dVM zv;gBK&BM3}b1-q@TuhsyjJdNGVd(-DXe`lym7y6dbPQmvqYr2LO@AuT(e56|2nj`A zQVPOisll=Hz{G_b7(HhxCN0#)w59qahC-$`8`)-oWz-Od{ey|<4*^2aWAMoCK;G=D%m>$K2 zZ5+kj3r-$!=-7M;eaD|ha^-r&Rdi8@cz`<0J;-m_hlp$f`Is7nrnVrlWCIeHuZK&_ za;VsZ!qhz#G5MVY2Z!JqR}Ezg4k|(&jyW~b1m3^5p8p2u+zD|9#nz%Z*7B5f7GXum zU%eN-XP?L3D{o@w#aFO$#~JLn^b!s~^)9wuc^NDBT|z`1}Xjw=&GbV zb0qJC(hbP0=@s*lv+6b>xvC3!EBl0tI|F(`IC6>woTWdKIIxl&?-8drx4_Zp!b0O!ir+uQl@bziQ``H4`fIgi7 zo!`Z8-UuZ0P9{*fn(dlQ-!p}PJWae~cCqE0yi-UaQ2?VBf?T%(z-_kiDPKzIp`9gM;EjSVW@BHIfeCmu43!aX9b{FZ9D_ttTiGv z8xMl~2Iz?d=%lF9x4Ik96@i>B=8{ES0`><1`fw`qO7uHQR8|I2`5Wa(WrRBX@iuZ7 z=7j`{_R)37uHA*Moma7K-xVw`Uj;9(AYnaVmvmcm>O*WD5nwGtsD%Y8qWtm5_Eot4 z#xZ>MLN~sDzX#X;wgLZmdkwyQXFWkWwV9tBlv~ef+mFvT;l``G@xfyUv6=wgS>_IV zr(lF7FUOi~XN0FoE-6S_K?N8|^<*&B2PL{cB~nHi%#}RSpyZhjC29+mJdz2_>2Dui zPr^`-M2vDv!Z=c9C)!iH(QiR#7xx7`MT6ae`@x)D+8NBp==fs1et?*tem9WcE%K=5 z_ZA)`Ut4c+(}A%6AU>po_#7kE7u1C45}9+&8Q5qSR@mq zr$Qd#yWeWgP)=|z=Ahfk=cco8xs#&1PoTe9##8wj&+ty=kpX=yy{CH#52)Nrxb6J6 z0Q!A|+p2pBN6qJSbKD0B7k>Ji+W?laR`gsX>`u+X^PX9Rm7BijVEUd6=yIrLYxuyz zb@pCx&LAoe{3c&2o+q~;%i&xAI@N0-0?tXOtrJV*a4~qtIn;S@!6Lo^#hWi+-PxD1 z`skym>N|#-Er(IldkFPCN6^x98Y?%P!>YCC(cEzs?OU&4^_B~0?Y%@o>%EVmb<^Vn zA&;PW!zEO=pG4i-lV~IeZy*4#?>a`ylW6HakG3tBQPX)8^|Y_K?*h804Qo5{Jfaz< zsC;s!0*Tj&+JyYEnO5b}BwL=2X>78+a zJ!z1L+kS4}`I|9JGg$LrILDF@0paK!%_C8!cQ&73e7-3!>2DJW&^cgS9A=V8Dfk%1 z9|Y(;4UhXgPNS&ImVN?WJ)aDE*5`2asn5~Udl88Ro$!k)fPX|f>6oFUhkC=?ClG#q zVek)%hPQtNJiNl->K+Uiw_tdn=reU}5S?2N|IlP;YZyaq?lKX@{qt-8 zz^)^^Q5+wK082|aSenD!%mk(eCa|`!gPyS^G>JX5O)N2oIAM{dF_!4tK<1x}oK@S9 zzU~nGnsx|4H>v#%(A8@92uRne*)O14ubyS^J!K#$R}_YQjoQ7?tlJ08`h(DJJPe(t zBhYJ>1G;6yUU;IFAPSGd^Ni8<&D z=(j$4PXvkk=Jl7+lUjfP;tg$0GfY)6#zan^_HO|6iNpZoov6BkHN$RqY_vA z-vM+9uq8-VgyVr+%2}l2cpu-d;x@%=^WOvAlcGEb&>!^sihwRG=ly`raL&ST&U4Tu z7x(D!2n6~0!^+GYhT6Kwh)F0a026gRm}wfpNL3FqBO5qdxga4T88R~` zESakY^(FeyQZa&-nkm#4>%o93rICgq37xBH2y-2(fO@8|GcbjNkvUvUEnugk2S+`9 z_*z*b+{qC!bT8@t{wR!(M^kMx`~oAeXsIS9Pn(Mwvln8HvI^$TSH-;f8c<%Ki3N*v zuxN=MmQul9rfMP=6*H(3xa(+Hz(CIuX2w>qG&O^Ti6N{^4Pi&`)LABjtGzR5FD8bD<^L()-Z*NmNQhS;9J-Rp=sr296ERj%L}SttFMRE%j59nOIz^q zV-@)LN;bZEx)8TstH-ZzHxqnw{@-=L`&$Um&*6zJE0JoWhXZwKz_(Wk#&;5k_lSJx z_@EEB-`+sm=vX|RRajJwAFYW21{k`#OS-!olt#LxLAtv;C8dT2r3C421Svtfk?w9d z`}?2goQt`h*%y0$wbr{-ns28)H}YuUrcSCzO^>h@$#!h7^ZYZ2KWWrF|52zn-AG5r zsb$gi-s|aOCZYdqJH-&86(+>b`vl%^p_f>tN0F2P@>X*IhocFv^XYrF;qSWN{}285aIw1vC-9-}bSPgPkh6>pTD0dMohpvncy6 zg%?>%Y+2V##fmeSdG1VF`%c}voHrI4C4v<21D=UeE<~!(ddEH91(Rtm2yKdJB4Wx7 zCHN%D5J2X5=C==@k7J5u8g(9Ya3X>TARC~vKX;^rQ#<(APq2@Mp=E-kkO?ZI4hv4C z3?#&gstHPP_Fe|_W%E_5#<>vkRQYHHiwMlr4ks89(S5>^-POuq%IyYT2t!FBSZr9& zc&_EQ^H*|p`hC#`%Os$=fdL@V@K}5EmI?*3H<1yW@-y5>n+RlZ1M??-TDpUJ3$YW> zi7PZgJ0K-xyhCGf1RjwEwkyy5$DDNXH>E(J2MS9ZMi- z;}9MCMM^9_KSi_j7pp_b$ZbDgSZk`!PfX)XsG*C|*J8Fj?&u|0Ivk;>wHR#CTI_&^ z&D(1>(tWSWQ)fypmE}R$i|dY9Or1Y*`7e{E+o#M56W_x+4Sdl1>z;8@{=5KFO zv!y!=bE zlG-P$V=*nfYYTqF&UhH&bXDMgK$~hk%awZpNdwZkyqR*>yzLj|+)8vz==WAysLwE- zgWwC7-4X_sKpU7Zv8&F@IkY;R^O(hB^S}n3f?$i#nz`jqTXB4o0ZGr=A54{xWzG#v z5&Q?`$1jIR)HEXv5x;-I>sd1Yc8#+(st$)odDqm2t?oTdSo{v9+ zxtLskJGBi;IDG~19H6gi0IEBVynbrIr6_q!hLuVD# z<|!G?W-tGKhOb52F|^8x`9098(0v5}56Kh3HAYYKFh=d4n}Y*x+B)4&;MJT2z~l6? z65`;aA<=V()wrz07aK8mgyl)mkh*`Q3+>*${WAm^_)Qy>F1htzHFer=kz(56_nQNI zlFqtfShMMEvzcLpS5;>7(d`4s+mPfbOc{7xMg#e6%33@f7QTmhGs*1|`hKBL^K zSg4jTT`)p7MK8E$mh>N;6(uttg6;G#g@kDN&>%+amr%?zoM6Itb(?JD;Gb@o>QjQ5 zE$qB9fpdIP&yEgQpRAL>3pX% z95Xz@Kfa1VwB2og!Gj|?H2y}3!M2}b8!con^-uJnpL!-b*Ea>1hS29$L$LNgBZ=!E zh5P#TM$Awy2=vb^66BM^o?n%(U!ezQr=#Mt{0ODzHE$at9~r6cUkkt}6lf-`!N;$7 zk2-*qRNdc>k-k-oy4Z3%>$>7wi7(!57-q8mjYi@u&0wJ04@|(9Mm6NmiOxd@Ym(b{ za>uvvq(g!{)P5j<9y_4E%D=Ja^>HQ;?s`&XJEfD%IkmN?mj?gF{?6j%RenPy-Tns) zuKwvST?w-6cOIX|s;Fgoye#ImQkv|4$Z~kdyn;epsP9+(HE=UhU7N$x4v8EFOVOi@ zn1)lZc_Joo{?ta-N%c{?>VFC4Er7|~i({oKO)+Z5{_d-$in;jX%*;XL7WAzh!)&Lf zp^r|ux)o`2Y}vHnCn=&N5eH;^*c^`MR6wtV#v;os%iuUa0O^qM(VHnmSQ_JP9Fvy% zAyuOUyvYrICaj^G+70MP*fb1v!8gtf&P}pTkucIg-=Pd-FWgpON;U96R#3nqvnU8n z`Ah^i6$Ki>d!rJYy>Bgv3#iKClBoC4sS!v{RZ;@)u~?%%N`=biPfp@r_x(kxONGYG z*k8DZhwqSGf=?ru4@A9+{9gcr;yeJx))F;I>9eF~3i&e|J`Fko`~!N|Yl6JE{jH$= znS)jtJ3?$kXMo6okL;{>@8pSQO_$%DPVL{|I<}tH?1strYIS_bfV=z}kjr%l=v0SU z5l}no0SXXRNYbX4SU#=^;$3zk5nR{9i}F(`EN0gnX{Mo2Brclox<5o(ByMGCf*jkm z^s7;bU=*9Q=w9WXU~_T&mV#~RdhyK<$ez1c`)++siPqXXA(XTyI^!i{xGV!O?0ev2@5$R!vW;)60 zozXDbh_iL@7hUEg>&}HN{PDcEoTVxC3>s(2%g=us&XDaD{CWeMCsrli8Wh{C+2J;~hl=E@*r`YA6{ z_5|48b`$!n$dwR}eEOc0e}mT)uZbc7!AnI!+AX4hN+YTGv1c71%h=Z3a~ygNYM~x3 z0}8_)JTt>k=Rrq!y(u4wR4t5V!@A+;>F_YUQS5i%(J1Cm){8>b8Ju3^a_+{>it!OO2tIR&zA!yRr6Ot@pCO`K4q9gXK zQDm%Ij#=AwqU^lD{4K>?c%%dF@1eHwDVLsMMtcltokC*^jt#=cf3Px-3F6a&YbYd6 zMzi#~9a0*iE-);FcWwpn>JZg08wUzis)V4-7(ShTRy;cuMUFCyM#EGY6=$3?!+p(e z$Kw=Ky>k=++1Wm-D&jKZL5>@?kl27W=KzyWnTZHLfw58WI)X00iw1-KcgZ@|%w>h@ zKU;mszR2I0r?!|Ovn+W>%;A_#N|#EHfCbk}z1g3)y@NEEA2aBqAubZ~7F-jjPCb>Y z+5!#Dh}O4%x2|9Hb5{&vw%f;C+=pFB7u(?E`L(xfR9W>=EYz|HLDu%%9Q%W1=|zrX zOvl~V_)A`*p*1h6(ea|+eN~HVjxgT|-9bH`h-RGxsofiP>^+OkPhiuU&Prd4RUr%2 zqSv%a6=&0T?|ZR@?J}=BIW-0qN1X8p7+Gn-xfY7%D#@#1+oe!_~B7nh-(QvDb}SK%mrbZ$miUDWp+9(>76 z634`MN4)Mj1~@A|=tA;EMfRpf9w3aan;f&AN5FtFl^0abSx zVasNbDf}mQQhg*F1gg-T;_@j&>@c8cAM|_Bk!e%K?_!JF5|fq4q%@iy%-bsfqOoAu z+3mbn!*4n|+y(i(?o5v!(H5o~(dC=3w`LO^1zPQe*(ij932F^{<=H#KC)d5#`1qPl<)4I(S6cuhu4i%QH&{C4?C1+L$+RFwxRp-Kja{jo z5p*mu^orlAGV5(t$ETm=eLoR~?zeUx6HToSGU^1IQ1!7gIbZqyE{qR zk7h7!yCA}LIKir_Gq;`8I*%t9{F~)o?H4acWcL@;v*yBGvvADfQ{52+6h8_0-Y0=PzOB-~BL)3V-&=-P$ozT4Hl(5|x-{^_nWYCh5+ zh`nIy)!G%KVLL%06LZ~fUSj1{?7FE4Xmp?|z|OrtZ9#O~lT(7Q
=S%DuLg2iT- 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

*m<86$2(w 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%0Ac7Z> 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

#4%4| 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 z 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�?xK%*$ybO$NS6FAlxkdmB*WNFm&SyG9LtkTf*qo$@! zt)rTloP)Hqd?X|p5EYYw#MC^*Cj}%qNfgIaDa@Hh7_+4S=M=-7Cz6{lk_&rrJ}RAM zXsa*B?EYpfTReb`YnNdEw%zD&A3)nmf=f>1dJ)SL2pW(OZLBzjW4>&1${(#+qgobZXVY zCD^`p9rkVBh+FpV!ELu3$K~^91;7Qc{SDZD@D%QU`Yr4}bOB9`gG!0(YN*5NMg6$x zz%raZu?n{yUx_ofti}10n{e*LcC45`ga!eIw(5oGZ`lODy&DzIS`7EJVctL+7E7gD zIW&URvxl*Av>$W&1>#!kP+i>)o1+a4ZHq84Z#!#_RG@XAB0gLykc+*nin2I z`S4D(uDS)@p&iKdkD|0~IqDYdLB;4cSi4rBxOI^L{2ch_Y(f3f187)w5FR;4t9nxT z5E48B-~#F6L4CZ$2$aXTdj!rk`6#G!NxLDWxkm!x8b*p^P#XPyB#JQ7KEYgra}Cfn zA)srJPC%btz_rZ-fX+znv-A}L#C}ZHdlaN|36&YrAxC6O$F6rFPXK-QirM(>m+!%E zKYtT`{?=yv@Rd~}oAA@Ocj5&YZ9qe<50MF(2udtb^T)Yb0NvU- z_ne~UugS4#I*!JB6`*rqfaeJ5Q?tqypobc&5M5A<*xVX44R6H$TOY*O%01{ATZ68V zC1~lJhuW4tRM#{rOH{Q_6hcwb+5~JgK+lg)L~cwR@)HtJSz3xVQB2*1g~*7GK%^+v zv}S97PDPlCAeF_4kkEeubSj<%b6R)_ko-;Mi}1!d=rvW+!BGOQVDRaW$@m{1i-o{`)qDnOt0iGUth`<(O51Iup(0*TQA+Ik)60uUF7;;sQY zm43RO(sDc=S~Z22X-rENv&ctygYm z1oWJ=L}Ut(n~gcBl1|TME<#319KwU9ej=dLf=(BAf-(V_`K!6QYZi3=rWKotH_ub? zCTvsT=69lXn$XSPRQk1aYH&m4pJ2)7Q0Q5p4Pt1nxZ?qx`KbYg2I>4wxM8rV|0{sb z3ufA7$B3%cgw{&5!cj{|fC zaq@k+&+^Op+>D*TGOPj~%KtEec4=XWa*N~uH6fi*;?>evE-Gd=WM^kzUuKOmWeS75 zeF)+oCxmm&y`6AAb4JKNK{~;m(XhD&I>DUol7v;lI+x>O-n#7;V9q>C1R(L<8rRe5CD zXB)}-p$%ja$ThciZZ%-1a3E0wbf%T*7(XC!BjEsBgtS*0&=as(m)O2B|Eepcj@B?x z8iQyypsgja5`t=*{nctJ0RvGnVm_x_a9KJAxtk$nBmn3$r5w$`#EF4Hp^4H~8FEw6 z(k9=}U5wm(owQfdXGDgpb?-R`mUF>ts#;YU_Idp(YCH#<_&)s2{)qho2c>edb5;F` z;d=FM2eIru6B`^5hwN5g03nXd_|ckOHV{$QXGsr9UMhw`0SNZ zUTdW+H^{p+3XC?wDdou_?_(_UqtscCIm@?W?e3e=FgPE2fu^{eB7~&s5s{XIn9O3t z=tS2`Dn+F9(GddX@p>~t5(`zl8H246o%1$f#qN`699@evv*;0`CrnN$$D}l0z$1>+ z(hOz<7h2%&8pGlZ2e5eKKKKQAv&+1Q7yUCVB?qAb|3Pt?vX$qi79l337~!!62#YC1 zvd)S8k~+9*dogd_ZmiyO67?f1k!o*5cu}RYpmT~|FayMuh<>BypSLUPd8)Zf;JgcZ zb2rA;pTfEO-@=+bx1reEjRd_DvFRoia5*?qr*!0`v^=Dw6(Chth_uWiq-U9sp)W%^ zS4uK9ATv*N*7n6Xap$wR?U6Szd-XvKtvG=B^uZNP=&KXmx>|Gq z*{^p9PuMHeZ=N@16hN0|P?7x^XM%9MVDSoEy7O+#owoo5g>+*tgUKX3U^1e(qyWak z9BB))U@)W!W27NJKVJo_EF$!l%C%(z<`$b0u0BE6arIjO-eL>DI^mt7+{$fE6hhz+ z?n0s5zu=npM~3w8S=o9u=)i!fjHhCd{@0MKQyzd>qQm5-q{AdI?=CUHFYjDwb71T8 z<+ytOJT9L;jlG*TVCnD>`WqY2RU_YA(o*mc60#_uiK83I}YOJo%?Xh zo`bl2@+{tc`As~2>0!+6Spu)K8zt5rWR&$H(>wQnAJ8|iSfVV|gk*v#g@DfA8c6@& z5e>e%KOTCuduvdvfiY$L|9_JF6D;3AZuCFnh1dKmK^FT;v?^RZ}THWmyGWA4B(#`=dae`q!qkIu!skui)7jiRTmOIhJL zFOXnXsv5Qr$|S26WYqFr4oxWCg9L2opH00=`WnhH+Es_; zb2_nQ`Fxz%x(7QJtw*=N8Mz7Bhz&|WN=z2g1^AOozAOhSJzFTucr?L{wADOQpee=pyIJ|u)&fR<* zHy^%9MPs-5>alU}Ex7vR8`!evxQcL3I6t;+8J@nf2jBeMZTQ94@4_#>aS6Zq=4Jfp zJNMzw-+2Ph-FXN*7cNA%y$cP+Ef}uu!11lC@Y=&i@WtnD#&=)42S0x6A^hNtd-1(D zFX2lsp1|XmcVg%2MR1im;qkViXJkF@eBce-^W^8zF?T0iEz7WE_np{r_8A9y<*nIv8tiI&|bgn<4Eb5x;J0X2M zsE?OV0`wS5kAn1c@2FZUJ)IHcokK{m%l!q^#{>F}*?)FMsqMOj`cPHta@|M=j3{NPht1ytb?6~P}3@qG&{`u=MFmDx_d*`CEp-U;EtWQ-^<~SJE;up}8 zI_D`gp-38ULu4FsqGMswWuPoWz$`Wv=@Ai#pCwA6C`j6pXH*2K2vZrPBB%j6L6D$C z%PqGQ%}P{9n5%A33Zj|=S?+pF(^q2g*_u09zz0J9ffe`3p|HTN7T&em?iK* zK%X*&^Opa$i#q|FkWMT5M**Gt1UV|cbTcKWYA~o-iD_Y`QmYL@Xi9IuJvI_)u?a|v zjz@ZYk^*!_Y*m3R<^F7EIJicT@Of%b?iOXVJh04~whlT0Jy(~6ECKT3TzPMf&gW!^ zLK>zbAb*mJJLkaCDowcHzz1QRLRWTe4m!b{%0Kg-*HG!#g0=BGQQ>ELnSLtrS{gru zNY3#ORS-m|W*+f>_*`1oG`QgXH9#k{Yfzyb8*f49JqYQa~Q=o+k!x1ei)ZZH_G13KZHb8T;n-_!7{?M64vOF$uw(FUhS(zjZa|G z->3%Y33ggprnd#-Mi4-m$1Fz#SC%90QwZ)HAR){rav4d1#$*x37vS7y)|KYQ7Uf#( zmHeeJy>v%aZmFV>)=E3Yw#s76N1Bu+0y+Vl>+5TS5t?Y}Wqwrqy;3F{CC^IKAQ6S% znO-T%iY;}B^@L@c?W0z2SYNfeqyakLpXns1j~|d2FHA4DOfSnFujM}Thyw%4f-dEU z?XNaa$}I;eDD-aPIS$}*a3V83ORZf`Q06-DGo_47oG@LU7!4^H`6=gD0Y`#)x*>Lbw~|!_hFJj#=wQ;A)k*P&8E|hGU15s8QuX5# z4P}^>FYnVaiUn);V(I1s=onjxnx47vwvE72+l{j7PGw=Y*Z0F#(=RYS3{UMS{B`qC zQ9mD5jq}may9k>OoyP8ySJ1X_BXrJY1m$@#GhZOx)N~!tBTCy4Yw8HNx0eOrJX>_5 zrMoWS*8AVanuAwR)wdevx=|E*J5b{9L{WJw%vGIAtd*UxRdp+|SNFkDJqTCz2;9|U zO6W;>?t#~F`ROlU_S&Op7}$ ze+D}*JdK^A_c6xN!HZ8}-?=Ao^Ocve_2x%VJF*Mu&e@1Ib|AL64F=KoN-GCZ>TO4{ zqZ*|apOi~KtR-&PN7z4MGWRKf`GW_ldSIj&1iF*`gclQyQz?p8sc z6|BoW>>fXCQYWm^&T-4BtWK#P&hh}D`@D?;y;6=HwbCBf!c*P|S4D&HKsC(Lj+jI* zD72ViD9lGzt{w(?{~SXG3|VQ?H%VX0!S-mwU)!*> z>GhH~t;jZaBFRjz+4(B|)c-o56GX=YI$hrR`@aLYpCq)zYxh<_EB71^zPv_zE=7Z6 z{txA&_xq@5_xm`x(f^DWUc>ho|LpPaI{w{mB%cK64bp&97$lDKvuP=ziz+*3g8SU= zZY=2S!s3Bmte8E7b@RuREAH;qtFdq0I_zG%27A`6#n$D^ux-V1>|MVOo0l%Zx&`yG zOV01vyiE$>Mr>TR3hNgy#fAlov3_hGRu7M0d0#Ka1akZR9(2pQ_Ex&lSK~&n$Z)d{ zOS;>zdu$2zjIO|nwjnf@x?#;MfW=^hDaVL>QO=6>xiIGzqBPwApTJsWZYk<=Oc=IR zq1|LhtE8EcA{(mxssnG3PP(seKm~~#8fL(_Iq2;hLVy1t=FA?&qIq+%a>+t9SBCR| zc5L5^YEcXe?KN1iVL#5@^E8&P-=)B0#b`G!A6t$$AJ~i^e)<4@{oY>u_RBl)A79;p z|9pQR{_)ilz;_2vdSEIDpiPr9=xb5o8xbvYm(K>rG8izJv@407j;{H!#`?+VZ{^Vn5 zUUUGCuGN^m{I$K3+Zw=uvcOxA!BB?lcTiCt#jvk^eUjBEdR<2umBntgTAIZ362b zkq~pUl3==wl{R1|=XMpK^?nM}sPP}*SO3=;SDJ$hSPnVFff)vZ>m#Y`g&Gc$SYF^tFd*d8;)cFd3%5>uSm z0aKW>+3aS++1+rm*-c_6F`xfA)w;4gkz~i&{r>)Xo};?dx9+V=@2Bdmw*(7nrBbDX z&T(ODoKg)fq$utR5~mjQvfKg#=!*2+E6*1fVVLDAm}+h6FtW9|2sdsTqTTa=UXo1! zOpQf;MuJfa;X6E7Zm}MClVtP?B>e)s5EAB%$mjqA>4F-;wE$fn3aSXPBuJOkdaiO; z`RiH;0Mtq;KwjwLF35=@h%W?XrKXH^&F5kZSl3p+QEQ)C{jACt`%<1(8B5CF%G=6U$EpefrD{Rf{i9ZFxwu<^u5W`{)fMpr3e)3gz{H?5Hw(QTc9!k1$zyiq8h(>j z5z<$gU~!UK)HNP@XL}b~8*J|yB+j%d`+BA|roWD}tVmu4DIQnogp_$e_l!BN)FT<^=_1pq__a6M;b`taXRDiF%=^nZi2hE#OPs@I+5&Xl!@8gJ%<3LhCE-Fif4jUrkzrRhE~7E`E#k+^7Xv;|Duwcc}lb8Cp&On3|dmplg(i9;&XanAa!9oNrQm z6rv-7&AZ6TOR@q0%3GtMwgRq>Hq=&?nsSmihpzY8eb5ExdT#Wr>bcQ6EmtZRcU7cW zl@U@DpPz;IlqKsq7MSa~(Qou_R;n%|7NF}Kb-qfwT)oDFKJ}^WJD~2d7t{iQj)?D9}~)FI2jei%(uyI z-i-ouhblsNKdIY_?Mx2-Wrh4AGw3 zdHxx!I&?nPopT{pA31^9gD0?Z{|U_OJ&Bn;mtkh-<;GiZX3wSAcBdM zKSN!C#?g&PsBoKjFp3!ykk^BNLN`|AweVYB4gbO_G!gpO>^T=Zj$e)qhfZS4IhSF_ zi8I)6>{6^h!hDpUv`cQ|r?6q)71)00T5R2S71nM)h1qTA;G8QzfW0TLL)-W!q&D;- zqN0el%an2PV!u|_x$2q6&#YNYC6t_L{ z1;YLpFuCg#DrvjP4s3F7LQD5HwD<0SePA!_!v}brhtM{43@tO~pk{P08YcF`K64mt z6MNAzxC@KA1IDEkAwIR( zC?Tx`Nf~7()$*u>JVYnvoB7o2N+hPs10lyKF0I%En9e9|MT2t;w%%!U4$k1h%df}L z^Do6J0;a9Qg*F@Sk7l)qSEIJ39Cg(tXs9kV&vSik1L|uu92#x^dP2DRgY!Mv%=@^x zy@P=5KvRbUZBE|bv~eU&w>UHc72heGmRcRO5jr{yd^htwWPVE~(sKRA?&^la?KY{s zs|${<9(2n4(LMxc>mcuG&nN^=*9e^Iw$VGp^XWyCi?$6ptg@vJ<&BjnuPH@&RUt}B zbB!lJZAB@nOG{BzQo{Ez-|>xPN4|ShQ8_t2f%DHlAA9!f!O-w1&#eWel~pL_`&P;; zDn$-CCo8Yq#9AsVX+mW=zwzXVl5(})H=wArhWRz3tfB>l6%ORr45{gw;9Ov@-!9zOVp_Pr#kAOO7E0SJ z2k6$arPOcZJ_P9M<81)lPC$1M&I#)JNYQxj;Y~Z-+m9Waw&8-~=i}0gF2iLfPveSH zr*ZiOCvfJXb8+3N^Kr|Sm*9b0uE*04-;Xao^KpFhg=g`V=RRfh;wPS@p2Fup`7}Q9 z$V2$p1NY;FkADo``r?=Hh38+yvrl~-&pi4Vp83c}@X1FW!P6gp5FfkmK78h3ruW>1 zC-1%;pZM^-Mvve3K|J}u9e9@edFtjn@yT01#Pn`FbnT6}@0x3I&vn<~#>+3kB^nm( z*b!WN$;G(r=y9Am=LD`fb|Eg=ei)}V?Z>`}RoG0(-@JO%1PI%_b_Dx(ug9e)`J1aw z;mny+*tT^eHf~slO&d01`_^sPxqSzA?c9!Y4j;g!-0$%dC(%RLs%q}zi~CaCcHdLj zd+A~k_1&Yu56%I;cM30kosj;cXK~y9 zy_l)4#24?o1o-Qx3Fueh^`D-P*S~ie@bg=_%@z3bzn+gj|L{EE_qXBIpFWC5ZaZy) zR?KcZj)y+}4LtaXf5P;(lNjH2F)q2|leqM*XVJq4u4~hUDCLVf&pr#+`g1Tv0N;GU z&A9aLr*Z1ek7M5z_u%xspTyA{9>VO=YhdF88eczTT;C0#+xS4+2;S`!p*+6*ZN(DY z7fOB7O~3ROk7677`_{EcYuCQkA)#^BGe&*w4B{GQ5Zy3pK->h0YZ^5Hu z%=AqU=dsB3J)}l1V;)FXOL|CIk7+^IkZ6H9b~C(LU_lqc3ww}Q*o*9fPE;1wVW!)L z|NQcOz|S7WAHQ`Pzxl#B_|+Fq;J?0l62JW7x%mEPj^W#%I*q%o-Uqj>4#{b`NG@nZ zcy6l!@fE6Z&lR9IFl~Sj<)2MZ=Q_VawcNLP`l9FAup*-cq0CoN>R0Z$5^E1$%@5^K z46Hr`=jdi^JA4V&?>+}zqiamXj)Eb{HCS;ETpHuq*@M*@wu%N)Q*i|f2p1U<(MSuA zLVQ3lf@y#W%#{jeG%mR!xm$oE_w&f$U?eJHFCk7wprB2ynU=9BK$Hus;8`s+Enc?2Zjq*WZY!Fg{Xk^j|i=?p|LPJb$^$Ul`QpEG9&>%ukI8x%`jJs-M zb+rj_)Me*>T|LH~-Qxl+xAq|eQJzTdV>Es{O~0(HGy)(YL1|h-5)I!_6Od>g-W2%B z+v?lOGVt{`!Hd#j6OfgXhSK~(=Bs{=GjDES?M$y>Ud0OYVutGvXzhvCY^;$5ba`FIrrwJ-G z*xO@*{i$n#`jA?wMhDPxxo=k%E1(zijUljdKWZTl@b@+SNp(FH1=`og)4x>nYL$zM z3`cTe5>k>AO`4aRO#{2toSRy*%7HSWDyd(~Guk8qKckZM}~n2D4EFLeyWi0+}CLd3CKxHBRnRWY*>-A z005{qNkl7N0(6x_O<4u9Q!`DOr6;Bu&mFl!t8z!K(8|wB1(IrAkBf{o_i#4v zDXFTczzj2{duM!f0)0J%Q{J<3!Pby&8iGx&*Q!wHpt0_3p)p#RZ|)}nx@kp^QP4I| zw-isFyr#UDl&bPYl@{g21t_IqEKdV@b7=TKLATzKs$dh8Ta{Y!cG0}`+$zh%Vu7Iz%r^`qjw^M~DRuCjp*-F09@Ny-Atxsf@w~Rm zH-_(x;NVaK`CN8&uA)KO=WP^6{0>r300Z#C`gP#0n55hU2=H8IPHDt zun+QlhfE*zMlNgV=tqO254p7t)c5ci-f{@;^?PWq>_YdZedyVI5WSlYqj%#u=-+fc z1~y%6FK84907h~m)Q&_+MN^ClK zttUNvIf4FaxL55(VwDTg{ess<2QJ&4$vQ6!k*)jWVMIL{^U_VFAp zz2|vc{^8Hz()*vo^^boU*F5%lT=)1FaP?!K#nm5u5!XEWSzOCyH$MJF-1Nj(@PQ}3 zZgksYU&pNve;M~Z_0PEZp)cX8d!NP0+dhH8Ef*rEaRMc_RVZ&?jY`K_l(nrve$z_i zHm*c=^D1Q7)|f7jSyT=ot+;y=a@$uSt$rMZ?Q2ldu>na{6Uen~M0(?D#8ytQEQhEb zL>IOrD!&PFg-wL@HpJxCBbK&NTDcvmW$lQ}szF3%H4=+j%(|rFR>T)HAv}XX&+Rg+ zoJLxnP}q#TS~rH*9>AvkCo!?%08Umx)Qy<#|R3z4HF+ zC6g%NtIIWHf(&-JDEEMoqnpz`Lul*lg^kaVgYOeZAJ_GA9jDuQZ@2Ltckmgv^ZP8d z_w<_Ol8x^ksjb5WyPm`TA#@E6!^wR}n(iN<ASizx@NS+xpSr7=o*399=`x=;FGL z;W0G2dr?QQZ*X^^w$q7fhYb~cca=2Mp{S-Bb$s6H`ChNHab1fY)qEz~ctBcN|JfF9es3BDs9Kwm*#Sh4zu0rU_3^H1Li z=x;6n^!EtrUWc}Co`+-$Xe}3ar55NeCAr62(`SS3duaiGH(AGK?N6!Zm9Hui79PuD zdauW)<<>eam#ksntlwG7HLYb@*W22JzBUW!RbK6!wxQeB3U?ciod%Km{mHdra(EOc z&N+^!9{U)cedaUx^d~=s&pi7KKK1NVc;UrQ<6r*uTloEd{~B+;^$IV|>r7u|%8NRu zx88UYuf6grUi#yo@Q45UJ%0P^-YH!jl~-Rk(+jWr8*i9f!~DJV)?2(k-ZaZz zfBjXw_S!3WgZsj3T&Zkcf1T-HIR6JTm_J_qFY5Pr{ZGFk@cxPV3ts=9KjKfn{4M_T zJKw|SKlVv{_yZrntyiAJ2d_SX`#x}iiRAt1N6+9pU%VgBK6xW9Ilc+U_H4kutsAg& z^H%KHMX29<2z&PK$NnP+aLxti;-bqgLz|-)HT6B%zyEUFe%s^Nzvn28$adUxdJCR^ z!TKY>R+cqJUJ5ln8n0FS@$1AO$w zA7F^nvj?xjouB$=T>I#kvHpTvQ9Zg71+KNI8{3Jxk?nADgzwdeX(p`CMRC{o=Yn)I%v#-$84F!dZiZZwtbXaHUss^AQ0N%`H#%yrN(s(_=q4wvoUh#x$A7vB8gqxj=jZ@{mgJB2@d z`6|5h&$r`u|8x(Yedto`T{nPA8nvm4jgZ%fsDk#h0KIV@&?U8`dnH#JP!BHbfWO8{ zPgl#j4T&{_D0Hr&k#XD@4RyV1(a<{!$H+SLPH#l-fpDC!naXx@^bUE4$k`kU?5$5S=48pcP#hZL1pL7gN; zLpJ>kX^aZ+dR%H1Y(_&xsfl8qnGlWCm{24}a6bwn6|e$9H2fAC_ySl(?2TZaa(zz- z3qeYhT09jHs2bhv9VUK-+|AW}MH+IC(!f{i+c4iP1E%87Wp6`6c?Ak{GLe%^z@V|6 z92ISVKh(z;LB7nJ2Cu*JWPXC?5E{Q~$(O+^_)1AiC5+{xqO8)mWm>M9nwD{^{=23n zjvvAKRw5dwRi#BJVZND!ngoK3hFA+DuvtUOEi7+Id4~u2AvPiei7}pFe1$m$rgc^B z`f5Q|rGq>M)E`@^JP3L^yFC>m>c7^|f|C4V1L%TskBe>;&qd=YEBf`@_@y75#1khoghXSci)I0^=5(NT|?| zNWr{r0fBPM_BMT2jnU2gtW+&yA-w)^aWP0rjzd~n3W`heVdpnuY;+hiIW_3&P6L3MGVfdln9jtmJzxWDf_7)vT^OV+)t${=|F%0M;0 zY$S$|pYez$Q1jEKl+ zGiI}25W$!CmEd<_-hqN)AAdv!1S2*i5((ikybt3Eub$Wj^30Ib70S`rW>QspXw2|J z!eV4}1iS-$;2r2o`NNC%trvmai1(@y_rJpXZFwSZ3+Dac?GpfBzX13L1Q|FF3JNli z7aJXe+S*zJa_V>9(9nbyxwkiZA{1LgWT^#4m17x6Nd)Fp6L>8>G0{Xy*RWVtSxcJN z5NAnzb~FNl;y9?gNM3R#>PoB7NkDhE@fm4ynz$@|?S1HJ=R2ge+rWA+4blMz-&vgm ztI}#@CuSl$DINK#xdzgsLs-_n8VZc}mx(qWK!7E%uJAW~n4<}p$%!5h61lqTSXFVQ zibShxggkr{WnAZI+}j%(4W!G(Q&P*5#^_Eb{OMg6N(f(ASt)ruj6Byjg3q=p5Y=y8 zt@rwkyh+rrUHQq|L#fqWM5(}B@Gi;oNXMWq9;$?pcTaK>VL2)SfdRaJe16Puj6N&i z$LC3@zn>36LV^&_=O;Ba8HovTgxn}(Wu~LLx|)E__py!lk%GZFJz(73?SYRz+FS7ZnvDIXRWE9B)8bqXwu_z^WKf-gtY#n6H?qLZgC-# z(2-c%f!Hbs66@TY?xA|;)Q@;dm)39A~@gX z5g|P=-;xc11+7#IB8mx{#dgG&IT2sg#qTz4hnila#OfX-*Y+X1bqp0f>(D&D8}{h~ zXrJ1T=FwfKAKZqPvE8Wc--5!9S)?@#Bd)R!F@o62e#8*Y6YEEfk_f)38qJ1EZosgy!1Pzvxlz7 zj*PoYv8T#2fo z8KcVK)u^A@ftu+ZsGizx)Uav~Y&>t*j`PsF_aanHZ%66aCgk?5LaK8d3AQ1`w+$kp zZJ4(C2vS-`k={%-@xG!m<~3@RN!vQBY0OmEWH(PDyJaP^cn>HZRBHQb1L)Dc8{svy z8(u39!)xOO@LqEi@iV*e(7*oY-vYW&&P>mx@ACH#1G*(^9~SId5Ns{`N3;-}t$hlP zb$rVAy=vk9EG@RqI(Fr^*zc@)^IKaZ`r8TVoL*QKav>9>54l|i(go<_gM&Et=rKI? z_!D^kQ_tar=bp#2&wmP^eC}zy__^osFW>z({_DSg!)x~%uN`6ft#?8<85^&?`WF8D z@~im6|GbRf|Nei>#eeD5zvB0Q`~!af(jW2XS6?x|)-V71=IdrX(c7e2{@Pn_;+41F zz$ zeXjxZ-TMz<@3Dh8cJesRKXsvrLfX*SkG;Dt!>u=c!~puraR+X{VFy0MEMIfgN~`Z(@;>Ys4$C%z5W>Z2IieiGMx z^b0t3@2AX=Y?DW>Lc`P^+n-*PGUJ3(#X6Zv%QHKS1#wr+lTRO>24ws2Z5 z@c$5?cO#_8fv}=>L=<%(vak~|g!2Rg=v~Oj??6eZ0~H0e7$bz-Go35$CBfT&@Q*Q75Po@&XXG9 zOZnwC!7rm8!CbEjf}q@X_@uWOK#wl#HZRWN&ROKPjUltX4|$C}sAwNVi+c=?z6s+B zB|sk>=)>?3jYGmrPdANHrvr7h)yT=tL{cIRNdkH};n%cu${34PYP!;q^aHxKzYCVzhtCn3e{yNJ?(W|YYn$+4UXjI@RwcKimCPhQG z3||Y-LpUAf2VbrnO8_sUyN75gkpSCmg7yNBz(QFb2XMG^hpTgc-Fs z%E*-~r;K3@*`&Um<;6uNUm5HwuLz!l;6?dZ2L3{$U-O~<{$?y<8TbmGRGe32`spgF zxnNPQ-*WdBJgQ%|KwaG!6xqDn*<)Z{BVnk2v&va+@+xNy|D1iXuy7D)G&S@=E{_0z-iXuUy z@>SV|@qW=Yw90j%RNg9Qd4nj@x2}thxvZeTQz6mWX}(3uV@5+_PRh-GrE!f`d5?{Z zqqlp&T=%@(BBT+}V|krIBcl++`^7hyfbJJK2k5?hb~H4UKksFKg!_abI)E?}5`(1h zSfoWKo32uA)vDm`pgIY!1R5G_oh^1a1v!m%gtlCQ5clm*2qmDeAh3A}UU=P%2;lP~ zq`oaJV@iPa@)e*5y#vtwe0=8tT`fmCCsjPCrBkV(w$o-eQMl!WlAkFkPd3un;_{SG zvLfS-x1gbd^+XCoyx1rdP}2G0Fhrh;-wQO4yOZS|{9NJuh(E~!P?0(5yt2$c11 zl81;~+a*D|TClZDZs>BYx4Ols>w;Rb7rN6+aIuiwZuUw|$cUkK=G zJ+~m;k}5OL2J}SkM_w5Le*W`bC-OqEqzV>|b`hgK_xz1o(RDquGBQzJSp`MPw}4oX zEN>=_>e0*NPLWd^C?;puF%~pj4hVx@Y8a9~>BD&QVY;H+$tP zSNp>J0uvZd8fa!df_7aC0lQ+DC|{M60A2f0zQ#L(?~A}7ev{@PUDNRi z(MZqWy_C*(Oj0bLyGSG?GG8uJ#a=^W4chH3aCEf6*=|D*A;?WAS9JG=mM#=EcOt#M zgRso+d4&^E1m~zS7otktMuNWZayLRNTt?xgo%0GSaU!(1!`K9tf(qJ~R0t(_4=uEt zVZ@YAEcYE-*=^F83OB+ExQ_cysOm*Z!;pav-Og}oaUjy{y}U0K>Wj3U<<^1CLG>z+Y&_bjq{*C4BJJu>>KflbI9-Hz0;ZAcy7 zhUAegNFUvS%&A?-pE-bnH3yM0v=#9K8xY&Q4q=@u5o(`CuwxQow8bM>2J%|9x|J^M zT564=ltQJp%pk3K2I(!lS801o*$UiD+dZ|5_ITd{K;LvByygJ?;qU&;0J`Bf{j&hw z(n7df;_qDn-9YFvvVc^wz|{iT|7}2*EI?Mif^;jd_abY53y)v>SP0e&^IYn83%9WV z-8vp?e-@yt1!TbG#Atv2JfMI4i6`+{!uc0J`yxL7{HO8RXP?GbKl?m>@UP#-OaJ{_ zUbNRJ0WnkK7BP2W3CARCy!ltc^~PyAdhbGd@XCKYhDUC{9IduKbdB#f zckgBQ;O0laj7`U` zGXX`MQwQK)b(G8R!xi^GkEsLKAe#W5!WV$m|9sx9-9C#LJK+PJ!QJ6dpH^90Tu-+)^#+JFz7+=!#whcGqV zh8n_o294X~>@p-4wIM2BL1k>FU%Mj1dlwSE3)2pQIaw~00vZD~G?>&XDfm(Am<&j{Qmg-_T5#28 zR%3C>5ne=aJk~kbyR&= zt$v;At13fK{pzj$=aQziEP#-uA*kf;nV67FtE6Fc|f|ptSqU8x7fH=F)uDQO`&;IYxW8sLb?U!a?hS~(GCg; zCZN;Uj^{l=WoBogrH$W)u`x_DKPwoX;7VYlycB7Dc8Y*b$g!@kV9M(Au5(pco_(&8 zmRZ+W*F)DuK%}k&0t5{rbeIHbj-qBOf0Z8fdvBAj>8 z5Hs%IO&#c>ap!7kgQKnim4qI(M(Y|0)_nL(c=5U|2IVW5m*gdRQv`D_U#7gDeFB2v z%WE7!KsORZ$0eYyrrrb*Q>&xALsYq>RIR#_fJ$*36qms22d-3Qt$W70pBGBY1nCO4 zsOMeXMKY4oP*qX^N3*AOv)j>we%Am73FDF~*`&d)F^u$#6VeCKSV2H1*rz3=nAUT- zuLtpb6sN+7?+TAgwB^?C&ubBGT7h*xC~u8}u1W@t0WRr%B#$2rGp6ymC7V13>OJFz ztLuhFAjn9|G%fK_5z!`inGfGd^Z8PK@>rOg_T_a559PIui8oT02i=p+we`lsNZvep z7iwC=oM~REjz`nIon6qdV`T+J#+^T!=MWzihX}s&A0k5t z^DznLc~|*lr)8M{PXb~C!+b^r$-0)FN>fkEy_ISk1@BwIX z#~5kyj-p~CV$3y?$B(*fsIu19*lL0SI@>gSpxt!iFvAHp+swSSlebS+3ZGpbe{6WP zIbV54s5}FLbl>V-p~@(}tAcrLBl*3E;`@wgcntH7=lzwQjQo-U)HK$jmG-5Lwz(<< z1nAuY^rlYKH+G`1-htHWb^>xc!ix#exhFz0T8uuGVt_dO86(wRsXLO%q6N z95>RuAUoSmn4;~qoCMh!+%}8b%5_lET!rV+c0VhHKcJVq&s zkRC}$mm&!1QZPX~gg_ovJA!ZmyQFC?)4EUs`%;Ri9z+c7xWwu{Bv_y|7m4zWL8pDPGnSeBE7s)g#^?#dYR6CJMNKdM>BdNyDW3VBmsvYT6W|aduH66&U?WCN@6VNwyA-|~``K>+3 zr!A9j>qW7x2c@=dl(ci&K7b~L zXewr4Gol7JBD#MQA_?Mx)hBhWR2;LcSDAfN|1XXn!pLVC1)2JvlgD{)Rq zw6UdR!nu^zI?H=ym65<)T^!Qe*BC%o-YbUpz-#8n|9e2UV00-h1lEP>ISX#zudMwn z+@JEapxOfWrDV0bOZxr7-wLL6jtjwB>ldDresBHG+D_A2rgehz0ekcO{;d6|KdK;I z?t}vLiJ>9WLUX~n=i!;BK90{l{{p`F!VCDy^UvZ-&wUc#`0NY#>A!vlfBpUMc<}`0 zq~jwO-RS9Z<6E93|@KV5BS~heuiKE@+bK1Z~qf7z4SZ0_S&ELGXc8X z<(H7vDsGAY1n+NxpiaHc={L->h4;~$c>R@^@QeTaA^!O*FW{LE-+_lea5?Tga|BP^ zc_DuC^#}3luRe$Ge(qk}etIuX?q821n^$As2By1q;S@c)l2{WwCr=2+sBLk7=1OfNuJmH+djk5~N!api5S;I7yHmR?~}MzKBEk zQVuKYG&SoH<-Le3lbcze=`WR1(T&s+8`2ADL>873d`nPYQ%pmz5X}vRW(bEXksCp!z3?UEd-G%M&5yG$Kk9x(Gz_R9Lc6CHUNG*dg*PIYOCbb% z0eetJ10u5<5l^U3D{etvc^fJf)s%qV+dB>?!MR7q9}U4y8l~+tJ{xF==FN_18IncnUM;dl7^rZ z!S&Gupsd6+G?v%%{n3rFzDeWOu9kCGTQ8g~6hCeT&{+mOT>~ail8#fxwju?~*bWU2 zGX}TZVFltcv}F)Vn$|K;U@aP|VbO?-O-4p$o&j_X&D81aG5!0yTzzIdWoJjXNj0y? z`2uuXn-lqY#mG$0GWn`C-pW^b$R*c027jKXmMPVIa9{|xjX=DD_+=NFfMk8$Lk7q- zKKG=?=+^YmBnJCNO~3ozxrp-W3tyC5g5a#}$HpTlD8zGL`2`SI<)*6^F+cc71SzGu{}L0E5ucD`U{MuWYRMfRpCqIc%tyvC zG%!3Lby^^4<*nn=Fj4Aykd~5ex+AEJtuod16jZ6K1yM@1OzU)wRnEFDI_CUb8u(SU z22z#R(7-6BM^<98e*yyp#a?G0MtT+3U=r?*9#mJF#m8w21Ow{gg_IYj^dmWwA8kuv(06sKG_|FbGd+b@mhA)G@&-H z6sb`O2q*aKIw|m*8JAiu<3^mPR;&my^7itiUcO=Q@(=Zh$LGWQz%MWi{wkxOFa#5< z)bF^ymNq~apHW^zdBUh-O&%}{0bP|BYKgXD8%U~5QbmU+EL#)DLH8~JeXQ35=##v!#|NoCPo;sqq1ga>dYk|~ z5;38?pLyN<6cSS&wZo_Bzkx)uZ)PloWI2$M#K#UPdMoPz8^)Rxtv zrM}gST4RRMYvDJEX`5no)U}vY^V&|{K3T~u=a?kKhQ$)lBN5`u=g5?;t|{SsF4eok zKbYSFez&6HV$C&&r{EFcS|R_nskj_sO5K2!<;2owh@9` z`8{nzV0O!#H0`PUmRFlEp7G|cZIAJS%xLWAaSkH0ZOACsK^S)oA-iJ)Sw<7c=;U>A z@!ECGBC357;r1zn(*6$ZT#b;Gvq#~z`68@XcLWKud+^A=d0gBLJL%v57l3X-^I}>Ey6;yD;ac?P$bxjid4FezfpfVmUUJb%eER8UObhyFKl2%U<+Go`mtJ@V z-}wCV_{qP08-M=&f);eSotxJ4Hz;1o1(LhF=kHC^!u{vJ{1Jb8>A&&vpZ|bYU;DFJ z_LgZi7sM|i?L+SEnze2iPRK$2b*5VU7xh`UR+&GpdF>_q*Drs7?|I05(@_~92njC-y+gcCbf;^^jC9ND@77aTf(Qzwq%#JPKM?40d5 ze(p|OdHD%UPfxsgP|uC-Wq z{05x9`%~C>>;{Z(J&8*{_z9f6`3dYkc?Z@Vz8+)SF2SKQ58{T8ei>_zf56n>{w<(; z!2E4Mf2WJh*|J^|s@1cWsn*tVp%S2bAYCo#qKf<1A)C7nI#p-AT(rGH6ppR zo<@Ow{0O6W;k<{J@N3MOiP^4Ih4#eM?;k;0HR8AMTJMm)UnfK`R0ZX+Y4J z2rh1)t0-`JTJ+^+m(zk6u1hOzM@~gM3Tb>))j81K-iPk)VKaE zl9g9T11Aw7gw zG3ikM7<#$~P5G-*K%NV=1Uf-|LTrjLnxleQz5%?RKEZ^O;l*P`4{AuAU-bH0F9(` zFz3kgGG#kg#u{T;=c+(dDw{N3o0Q}X6L3wQ3N5^5Lo8qAsl1h!6?t2MuKN3i%{ocl z33Po0nkrwb93|x?m{nO@GWm0zRqnbjf-qgH8lJB_A9@vBk@*VH#|Pd9bWh;Hw*fsf zEtmPGB8>O3?iF9d&$@kUpnC&IhxsLs`yYgqqZZbW@qqRNDfFf~HaJ&1!8V zDBHT=s%s~px1cVM?~`a=&%j9Ytf=D1i|69aXGY-d6%a9}C?juwk5&Z7z&j**UcMnQ zMgctDK+Z=*#vv&&-9##O^Zqr^%;(Akl_a3c)mtr*a!Xc!VYx4-r=}U#Yq=!L%f@)x z5R5Gs?1j>@kf2~wnJ1|tM3rT2a^F`s5ay+4wAVe1o~|J?G*_3C?~5+p-#zjS88H2s z<;|fy7c_J&pyvqGc8Xyh2TjiB1zX_l+c zztT2URB)M8Q&wf(8S%U~!nqHBUegt-44Ly(@K*U#^ZooO%?I(GSGfw%bJDWR$PWt6 zImq(u=QFBwjL)o&WvYLakUokDjXt4DPC{)3pP`J{WD}=Auo}qw#h1^jDg+c!eX&&c zRyeO`Gyyj{BA(A~4l4MrYA2vuEFUJ*?r{>Z=;e z`6|GoU6JIQ_&sXuU|vpBajhV6N&FT^@p~Cu)Mnh!RoSgb>{3vH6M>X}p(@KAgl&G0 z`MnJ+?SwypJAmI^zmg8KP8I4Q6>bDqx))7D%iVKccLZ;K<6|p&5l1OC!O*xYve>ge ziaI-u;5tEhtbn|72np50gu7vrYCevDu3^=Z<=#%fOeL77)l5o`(P zk#)ngjV6)YK0}*HcG4tmq={vv?Gg#+2?Sj2Czi0QZi8_IWvv&4YxvuxQbBk$_py{> zcr4a*6!VGXZ=?twn-oI84rPAf%*$G)X)V*bFdoxVGC6ZO+9cB^O>So1tvn_hkCpJ9=Hzj9P9xbhjYOkWh;z*%#^ueN4Rcii&^f~x51>E*EUL5 z^lyY$_gZ*$&LYgY+H^aWmIC$U_EknH_SHzUuQ4)k-mw;`-Rs{0=qt9Ig!lTRNL;lS zANk(@gBEmw=yI~aSF)hif?R8V|A;KW*0i-x3#7Gd;jz4%tbJO?Cs|;=aGz)I_w3&- z+{OZQm6d|lNt(6*z0c_|eb5Ey>t<$f*~O;}pug~$XYt&pK8Y{Q0s7a!@H~F}-G9QL ze*YUnv!`|YO$BW;q50qNxR<~FhLM5vcl>#-_*>j=;k5MTo7@j&&0Fh@l!)OijyH?n z!W+!<)i>Y3UwK2l^vWA}O`9^yH(n#Szw#3P{NF#vPrv&meD&Fn;!BS|h!0(T3YY9z zgWE6Ni(h{8N#GCP#*e@J2p+utI4;~dgA?1=;Nk;2an<=parLR=xcuY+oW6K3t~z}P z58rzeHg8&ow%##pIqwSG_SB2mckyKypLXMsdrsh`pWcs`es~@J^rOr1^1ok>KmEt$ z_`|=S#$SJShTwf00sLX=IowG=U*BAWFA?hTr>D41E#{}Wj$r=F8}ZuD3Fg1M1#kT7 zMy4OeUw-g0eE5db1oUBa4ei0TAN(Zldh}~%9CYXOK^(p2AzXU*C$aUS+c0(TN;qZ@ zVdlUYTz%hjb1ml|#hJT5ZD4)><@e#t{V#C)PvfH7pT@Bp9))A=xyB7@p^Llcf&W`T zw;+A7)cTzO-C8c!DFf$}K0>jro)3`#T^|`ix+l8(=zOZ-*aYbMhzZieYX*(Gdnmy? zteQYvDVFz3?jPfiFL{-WC1u=01G*(e^LzMv#Vfqe4r1DYt1+_bq9Ke~Ar2&ZnO}ZYzl6@(<)5iK18h-){yBS`` z8q-)qMX67;;9RNJ3(&I&e(_NW2F?vYGPOWm2B`qV0DCY&HJISY<4}cwQbC`9x4Np{ z0O{z+6hUs%81rV_U55a@hiSi=768Z0;oNz+;; z*fTASVUdXB?~*gJQB+!G#x>OtD7{0Y2Fh*DF0>Kq+BK%IfSm?!D-HbG#uhV#kXqs5 zV`ccVtOh9`?-Qhx0qYZWS z%?8d(2^N_dd1lxmwW=wgmRh(3;A)u?kSn#M=C zLvx3!>blp4=)a|B1skKEg))ir#M3Qa&StFN>ABQKN%>nr8}UDN7QtZoDXbOB&#ahd6c zp>f{LxaZ7QW6K*zcMh26xX(3$p&pibcfSF2(|v(}uD;glb8Yevq|ZUQ={{jawbv*C zf&P3~g_vmX@w^Xn`Rv>3nla4#Me0%Bb3ysEyq)hbrB<*$!FzQ{HByr^5Eq|}aNei> z0ct@Ppeuk`fQgWA<_VD=K=*|Y0a6k3wY>t>sn2|KMIG&;F4|CT+G? zXUM?0fPJ8&8}_;uROZbAdNAJ=yiZi2$tH~DHDeUI0GCqJdi z+nhhwsiMeJ*~RCYt)?*Y-g%X}Mgqc8F-+Ot|NukwTUe#@+b&{4XC3TUD ztmOBf-**K(Q{Xcz_?ar|wOjzNe(wr=re)ST&FgsNtru0^kJzdq#Mg`d^`&l{Vi``be8-SbHHyS)mS+vivzFyaX*ZW3tqfNUOiO* zW_S&4gV!*jUFqOfcnuK7M|Qw_bSHeqb{T12%LVpcU275MV*VYg<`u{LKuWNClt?g_ z1m~%aHAaH-jE;4@SJokodB+ZJfzRkZc&$2S0NrQ9F(j?t_x}dat=8vvlLfLC#9Gj6 z!R-5$HIBNbwLc4}tz)+GdoQx~xe&e=TW6h<@?GqA*1XmU&WAdfo(1UrgmOW;TF(XO z3jDKrY6_<=ya=EC_$LgYKmX}Z5zwE*=b!&1zVi9!@PmK-7XI+NUlEuI=5M@;H~#wa z+(ji=6U>cE`>ULni~Cuu{SGPko1(hELh@#6^qTg;<#Lm^w$nZo!QJwD|0@^$8q!+!oo(y{#Y4|w@^Kf({c`DuLqWB1@Q_uqyGuDA%7>|BK#j&H%& zpSq2Z{uI9W#Lc+>>Z7>g@FrY-WE-wM{}66Ht)b-3#Z6Zn!3S?VjtB3)9N&2H<2bZ$ zHyUUhZanug-1X@%VgISq7#(xrv3m&HzxW7V`_T>f^A9h@pa1=0y!;=R;Ez8!iC2Gm z1=rn5_!gi)k2{WS#=4dwd{Kb@$0zaTFRsMvzdA)AKZ7@Zd98`yE#QAHw*a%dwWrF1X`qTzKa**n9QEm_B*~Dn@oA*S&EOFkfqezM1Ik zoYxCG);8t&$SjiTBclLw@wVytFW?jEgWc`5YzplRRVU_&`s>3Sy(XARpbOqP( z!zu+Ab-^#+g@9tUzKJZp6n>CH%LYyASKh(( z9SEp)&dG(K>Mj}%{O}9@%R3QY;Y4~>2XZRyD5z{lX|)YCbq*Rx4g=2`Mo8m%mX}tT z)~m|$D$`n$o|@rtMV^ydA|$y9n^u$vf^h_mqR1eGhI^!WMHP;Xi83u{>XTYcAZ)5_ zL{m)znyQ=3_{M6z&{)T6kyA8t^=XwWypBPx=IW!VJS633ww4Y;PA8gqY$bU`rvGbFOakH~ zd7fcWrr)GexsqyHhM%Nq<9g5IP@ZA&EE`3H&dx#};i9ss(F~8`=Nx;h8zW%BGk*pT>B89s5MUA1EL6rlBT6d8rMp-UW%h} zoJ0d(-3SWObI?lYcdMM;edzAswN&6grjq)VYM49qD^*|8()?oNWoS4pPdT4`zSeoF z%(YC{LEC6stADY6t9@v!Y`HdT-^NXs(y?fmJ4w@8rftd!O3e7$#$cZ-L+x9#uB*yg z()7Zz*0C4^pLrK#<(dA`x?jvtdbSP>5)c(=P;hR}+f+Dp8;Gx}s5TWa85vnfP~YhI zM8wFwUje@2lMta`TRgW&0#5{wMXvmw3NT)K&TF|U$+C0uP|5R9*OP|ER+Ba}e+3+D zt!;;`hWAoQ12R$z5EGY$sKji9Bxb=oCIvnTnOKpS2`?`5D0f~f5^~`ipAEnGO!&oR z!#6ey{&Nb7&O&fBpa0~1Gpa;wtqrb@KGSNi;BEZ`^$x<6`Y0=~n1YDa5tJ3sOD*Vv z^RN(AdZnG=U5?RG=c5n~DHJxkd@_R#f}BzRC)u7aSaHu5VmO z404jP&{jiR#5G`~b9A*h(b?RA*6L=nPHA&xqgkePl|_|ENlG`}E>zj1{`v|=r*0aG z8t?0?ZYl)U6+ZK++_DvbPnAEa98>i9#+-6;Jo_mysrqA z6}hFzj7u}et;!^IIWmyU{R@iKHN*qxDuZCG(D5)|y(V@%c60FMJ-fA5}DX`v+kKud7A}@Zz;J@eX)h71uz^Re`DQ z1oF62ki_`pH01Igk(ZXtOClK zpt4*qFFNB%$LVFo@471RqiSdus5O_;yq2rNUM|>DeB;=>G#^vPe7UVW^&%?yn<~!N zjG9R2g1kh+pMrD=G9@ij#B|A8r(j;PY1Efn{kqj)p+*crtNMGZKeyHYdnw6AlFg)G zZ`z;b&TJxdQ${GF;Hr5+ytQ8EVgb0e zTP&3Xy2*sbl#aDV0!ST~0b!j_3sZr#%8%ukP&;lU827+4*HKAz1p7LcLG8+Sq^XT8 zgQnR<)1>BEB(>3|QGR&F<=mPU$m%~WY7N8Gyb(&Um1&C90;0wI?oZ2KA%$DpYFITjjdK+gYwl0X;}5Ul)&G7OFa7?H z_@CeY0sr;e|G`gx^b7pv=fA`M{O0#OwqM~T^>hF6H}IX$K8jC0c%yM|zyHihTtx`K z^3Vo6c>TF}>h9Bo-($Gt(gV2ee8TUA2XM>jb8+X@7nmX0K6veMJbd>hc=pNL@r!@^ zCeA;03^g4+Sa<9c?*7b|vH#-BFgo0cr|!9k5dOG{)c)7+U4mDBdNKa`(@XI34=%>* zKRoRT5cjhW5zs${+mEluI$IvTpg!n-d>pU;>~g&N%M0=5FHd`5{byGKzrE4p>i(Paq152zU*$S+<&F%o8G

q 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≀wuTEOF|h65h|;1?@*G__z+4w!~~=p31*qnl-I6J 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 literal 0 HcmV?d00001 diff --git a/bsp/renesas/ra6e2-fpb/memory_regions.scat b/bsp/renesas/ra6e2-fpb/memory_regions.scat new file mode 100644 index 00000000000..ba168020b72 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/memory_regions.scat @@ -0,0 +1,22 @@ + + /* generated memory regions file - do not edit */ + #define RAM_START 0x20000000 + #define RAM_LENGTH 0xA000 + #define FLASH_START 0x00000000 + #define FLASH_LENGTH 0x40000 + #define DATA_FLASH_START 0x08000000 + #define DATA_FLASH_LENGTH 0x1000 + #define OPTION_SETTING_START 0x0100A100 + #define OPTION_SETTING_LENGTH 0x100 + #define OPTION_SETTING_S_START 0x0100A200 + #define OPTION_SETTING_S_LENGTH 0x100 + #define ID_CODE_START 0x0100A120 + #define ID_CODE_LENGTH 0x10 + #define SDRAM_START 0x80010000 + #define SDRAM_LENGTH 0x0 + #define QSPI_FLASH_START 0x60000000 + #define QSPI_FLASH_LENGTH 0x4000000 + #define OSPI_DEVICE_0_START 0x80020000 + #define OSPI_DEVICE_0_LENGTH 0x0 + #define OSPI_DEVICE_1_START 0x80030000 + #define OSPI_DEVICE_1_LENGTH 0x0 diff --git a/bsp/renesas/ra6e2-fpb/project.uvoptx b/bsp/renesas/ra6e2-fpb/project.uvoptx new file mode 100644 index 00000000000..6926243e92e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/project.uvoptx @@ -0,0 +1,846 @@ + + + + 1.0 + +

### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc; *.md + *.plm + *.cpp + 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 + -U1087147653 -O111 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FCA000 -FN3 -FF0RA6E2_256K.FLM -FS00 -FL040000 -FP0($$Device:R7FA6E2BB$Flash\RA6E2_256K.FLM) -FF1RA6E2_CONF.FLM -FS1100A100 -FL1200 -FP1($$Device:R7FA6E2BB$Flash\RA6E2_CONF.FLM) -FF2RA6E2_DATA_C256K.FLM -FS28000000 -FL21000 -FP2($$Device:R7FA6E2BB$Flash\RA6E2_DATA_C256K.FLM) + + + 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\msh.c + msh.c + 0 + 0 + + + 4 + 25 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\shell.c + shell.c + 0 + 0 + + + 4 + 26 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\msh_parse.c + msh_parse.c + 0 + 0 + + + 4 + 27 + 1 + 0 + 0 + 0 + ..\..\..\components\finsh\cmd.c + cmd.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\klibc\kerrno.c + kerrno.c + 0 + 0 + + + 5 + 36 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstdio.c + kstdio.c + 0 + 0 + + + 5 + 37 + 1 + 0 + 0 + 0 + ..\..\..\src\klibc\kstring.c + kstring.c + 0 + 0 + + + 5 + 38 + 1 + 0 + 0 + 0 + ..\..\..\src\kservice.c + kservice.c + 0 + 0 + + + 5 + 39 + 1 + 0 + 0 + 0 + ..\..\..\src\mem.c + mem.c + 0 + 0 + + + 5 + 40 + 1 + 0 + 0 + 0 + ..\..\..\src\object.c + object.c + 0 + 0 + + + 5 + 41 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_comm.c + scheduler_comm.c + 0 + 0 + + + 5 + 42 + 1 + 0 + 0 + 0 + ..\..\..\src\scheduler_up.c + scheduler_up.c + 0 + 0 + + + 5 + 43 + 1 + 0 + 0 + 0 + ..\..\..\src\thread.c + thread.c + 0 + 0 + + + 5 + 44 + 1 + 0 + 0 + 0 + ..\..\..\src\timer.c + timer.c + 0 + 0 + + + + + libcpu + 0 + 0 + 0 + 0 + + 6 + 45 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\atomic_arm.c + atomic_arm.c + 0 + 0 + + + 6 + 46 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\div0.c + div0.c + 0 + 0 + + + 6 + 47 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\common\showmem.c + showmem.c + 0 + 0 + + + 6 + 48 + 2 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S + 0 + 0 + + + 6 + 49 + 1 + 0 + 0 + 0 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c + 0 + 0 + + + + + :Renesas RA Smart Configurator:Common Sources + 0 + 0 + 0 + 0 + + 7 + 50 + 1 + 0 + 0 + 0 + .\src\hal_entry.c + hal_entry.c + 0 + 0 + + + + + ::Flex Software + 1 + 0 + 0 + 1 + + + diff --git a/bsp/renesas/ra6e2-fpb/project.uvprojx b/bsp/renesas/ra6e2-fpb/project.uvprojx new file mode 100644 index 00000000000..1dbf702c867 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/project.uvprojx @@ -0,0 +1,2328 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + 6220000::V6.22::ARMCLANG + 1 + + + R7FA6E2BB + Renesas + Renesas.RA_DFP.5.5.0 + https://www2.renesas.eu/Keil_MDK_Packs/ + CPUTYPE("Cortex-M33") DSP TZ FPU3(SFPU) CLOCK(12000000) ELITTLE + + + + 0 + + + + + + + + + + + $$Device:R7FA6E2BB$SVD\R7FA6E2BB.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd /c "start "Renesas" /w cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out""" + + 0 + 0 + 2 + 0 + + + 1 + 0 + cmd /c "start "Renesas" /w 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 + -pCM33 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 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-M33" + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 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 + 3 + 0 + 0 + 0 + 0 + 0 + + -Wno-license-management -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal + __CLK_TCK=RT_TICK_PER_SECOND, __STDC_LIMIT_MACROS, RT_USING_LIBC, __RTTHREAD__, RT_USING_ARMLIBC + + board\ports;..\..\..\components\libc\compilers\common\extension\fcntl\octal;..\..\..\components\libc\posix\io\poll;..\..\..\components\libc\posix\ipc;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\drivers\smp;..\..\..\libcpu\arm\common;..\..\..\components\libc\compilers\common\include;board;..\..\..\components\libc\posix\io\eventfd;..\..\..\components\drivers\include;..\libraries\HAL_Drivers\config;..\..\..\libcpu\arm\cortex-m4;..\libraries\HAL_Drivers;.;..\..\..\include;..\..\..\components\libc\compilers\common\extension;..\..\..\components\libc\posix\io\epoll;..\..\..\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 + + + + + 6319,6314 + + + + + + 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 + + + msh.c + 1 + ..\..\..\components\finsh\msh.c + + + shell.c + 1 + ..\..\..\components\finsh\shell.c + + + msh_parse.c + 1 + ..\..\..\components\finsh\msh_parse.c + + + cmd.c + 1 + ..\..\..\components\finsh\cmd.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__ + + + + + + + + + kerrno.c + 1 + ..\..\..\src\klibc\kerrno.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__ + + + + + + + + + kstdio.c + 1 + ..\..\..\src\klibc\kstdio.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__ + + + + + + + + + kstring.c + 1 + ..\..\..\src\klibc\kstring.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__ + + + + + + + + + + + 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-m4\context_rvds.S + + + cpuport.c + 1 + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + + + + + :Renesas RA Smart Configurator:Common Sources + + + hal_entry.c + 1 + .\src\hal_entry.c + + + + + ::Flex Software + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/bsp/renesas/ra6e2-fpb/ra/SConscript b/bsp/renesas/ra6e2-fpb/ra/SConscript new file mode 100644 index 00000000000..88feb6712cf --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/SConscript @@ -0,0 +1,25 @@ +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 += [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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_armclang_a.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_clang_a.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_cp15.h new file mode 100644 index 00000000000..582b1bc54fe --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_gcc_a.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/cmsis_iccarm_a.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/a-profile/irq_ctrl.h new file mode 100644 index 00000000000..7264fb9367f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_armclang.h new file mode 100644 index 00000000000..446d21a918f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_clang.h new file mode 100644 index 00000000000..872e16c838a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_compiler.h new file mode 100644 index 00000000000..cf3f5b027dd --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_gcc.h new file mode 100644 index 00000000000..4771466f065 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/cmsis_version.h new file mode 100644 index 00000000000..849a8a4a15d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_ca.h new file mode 100644 index 00000000000..df5a95d7148 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0.h new file mode 100644 index 00000000000..eeb599fc77f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm0plus.h new file mode 100644 index 00000000000..1ee9457560f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm1.h new file mode 100644 index 00000000000..d41cf05b336 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm23.h new file mode 100644 index 00000000000..d6337a4848b --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm3.h new file mode 100644 index 00000000000..624b9f69b02 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm33.h new file mode 100644 index 00000000000..5f7d9b1575c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm35p.h new file mode 100644 index 00000000000..def2589fadb --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm4.h new file mode 100644 index 00000000000..8354ccfbcff --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm52.h new file mode 100644 index 00000000000..a6195940426 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm55.h new file mode 100644 index 00000000000..a7c9f7436b4 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm7.h new file mode 100644 index 00000000000..182081940b7 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_cm85.h new file mode 100644 index 00000000000..8a8b8954f95 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc000.h new file mode 100644 index 00000000000..4d85c48d081 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_sc300.h new file mode 100644 index 00000000000..670d9114133 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/core_starmc1.h new file mode 100644 index 00000000000..3b4e93e4135 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_cachel1.h new file mode 100644 index 00000000000..d7338a72e0a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv7m_mpu.h new file mode 100644 index 00000000000..5a4eba231c1 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv81m_pac.h new file mode 100644 index 00000000000..648cf886476 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_mpu.h new file mode 100644 index 00000000000..d743af12c78 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/armv8m_pmu.h new file mode 100644 index 00000000000..fb165331730 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_armclang_m.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_clang_m.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_gcc_m.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_iccarm_m.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/m-profile/cmsis_tiarmclang_m.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_armclang_r.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_clang_r.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/r-profile/cmsis_gcc_r.h b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/CMSIS/Core/Include/tz_context.h new file mode 100644 index 00000000000..e095956a8cb --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/arm/CMSIS_6/LICENSE b/bsp/renesas/ra6e2-fpb/ra/arm/CMSIS_6/LICENSE new file mode 100644 index 00000000000..8dada3edaf5 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra/board/ra6e2_fpb/board.h b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board.h new file mode 100644 index 00000000000..2c16dd033b1 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board.h @@ -0,0 +1,47 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BOARDS + * @defgroup BOARD_RA6E2_FPB for the RA6E2-FPB board + * @brief BSP for the RA6E2-FPB Board + * + * The RA6E2_FPB is a development kit for the Renesas R7FA6E2BB3CFM microcontroller in a LQFP64 package. + * + * @{ + **********************************************************************************************************************/ + +#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_RA6E2_FPB + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/** @} (end defgroup BOARD_RA6E2_FPB) */ + +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.c b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.c new file mode 100644 index 00000000000..71a1478257f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.c @@ -0,0 +1,48 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA6E2_FPB + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +#if defined(BOARD_RA6E2_FPB) + +/*********************************************************************************************************************** + * 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_RA6E2_FPB) */ diff --git a/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.h b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.h new file mode 100644 index 00000000000..9ba81f6102d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_init.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA6E2_FPB + * @brief Board specific code for the RA6E2-FPB Board + * + * This include file is specific to the RA6E2-FPB 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 addtogroup BOARD_RA6E2_FPB) */ diff --git a/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.c b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.c new file mode 100644 index 00000000000..d7a8a7b138a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.c @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BOARD_RA6E2_FPB_LEDS + * + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Includes + **********************************************************************************************************************/ +#include "bsp_api.h" +#if defined(BOARD_RA6E2_FPB) + +/*********************************************************************************************************************** + * 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_07, ///< LED1 + (uint16_t) BSP_IO_PORT_02_PIN_06, ///< LED2 +}; + +/*********************************************************************************************************************** + * 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_RA6E2_FPB_LEDS) */ diff --git a/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.h b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.h new file mode 100644 index 00000000000..10e0869e487 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/board/ra6e2_fpb/board_leds.h @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BOARD_RA6E2_FPB + * @defgroup BOARD_RA6E2_FPB_LEDS Board LEDs + * @brief LED information for this board. + * + * This is code specific to the FPB 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_LED2, ///< LED2 +} 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_RA6E2_FPB_LEDS) */ diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/bsp_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/bsp_api.h new file mode 100644 index 00000000000..55f1f12c6be --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/bsp_api.h @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/inc/api/fsp_common_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/fsp_common_api.h new file mode 100644 index 00000000000..7ee5d454f83 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/fsp_common_api.h @@ -0,0 +1,380 @@ +/* +* Copyright (c) 2020 - 2024 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 + + /* 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. + + /* 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 + + /* 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/ra6e2-fpb/ra/fsp/inc/api/r_ioport_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_ioport_api.h new file mode 100644 index 00000000000..b38e4761ff8 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_ioport_api.h @@ -0,0 +1,192 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/inc/api/r_transfer_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_transfer_api.h new file mode 100644 index 00000000000..c4faab288f1 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_transfer_api.h @@ -0,0 +1,388 @@ +/* +* Copyright (c) 2020 - 2024 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_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 const * 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 * 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/ra6e2-fpb/ra/fsp/inc/api/r_uart_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_uart_api.h new file mode 100644 index 00000000000..72af5b028a8 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/api/r_uart_api.h @@ -0,0 +1,254 @@ +/* +* Copyright (c) 2020 - 2024 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 const * 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 const * 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[in] baudrate Baud rate in bps. + */ + 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 * 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); +} 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/ra6e2-fpb/ra/fsp/inc/fsp_features.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_features.h new file mode 100644 index 00000000000..692175d08bb --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_features.h @@ -0,0 +1,297 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/inc/fsp_version.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_version.h new file mode 100644 index 00000000000..19dc9d42fef --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/fsp_version.h @@ -0,0 +1,76 @@ +/* +* Copyright (c) 2020 - 2024 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 (5U) + +/** FSP pack minor version. */ + #define FSP_VERSION_MINOR (5U) + +/** 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 ("5.5.0") + +/** Unique FSP version ID. */ + #define FSP_VERSION_BUILD_STRING ("Built with Renesas Advanced Flexible Software Package version 5.5.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/ra6e2-fpb/ra/fsp/inc/instances/r_ioport.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_ioport.h new file mode 100644 index 00000000000..b410276f66c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_ioport.h @@ -0,0 +1,522 @@ +/* +* Copyright (c) 2020 - 2024 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 const * 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 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 ouput + 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/ra6e2-fpb/ra/fsp/inc/instances/r_sci_uart.h b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_sci_uart.h new file mode 100644 index 00000000000..0bcb38223fa --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/inc/instances/r_sci_uart.h @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2020 - 2024 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 const * 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 acheive 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 * 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); + +/*******************************************************************************************************************//** + * @} (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/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA6E2BB.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA6E2BB.h new file mode 100644 index 00000000000..fe59ca6adf6 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/R7FA6E2BB.h @@ -0,0 +1,24687 @@ +/* + * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause + * + * @file ./out/R7FA6E2BB.h + * @brief CMSIS HeaderFile + * @version 1.00.00 + */ + +/** @addtogroup Renesas Electronics Corporation + * @{ + */ + +/** @addtogroup R7FA6E2BB + * @{ + */ + +#ifndef R7FA6E2BB_H + #define R7FA6E2BB_H + + #ifdef __cplusplus +extern "C" { + #endif + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/* ========================== Configuration of the ARM Cortex-M33 Processor and Core Peripherals =========================== */ + #define __CM33_REV 0x0004U /*!< CM33 Core Revision */ + #define __NVIC_PRIO_BITS 4 /*!< 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 1 /*!< FPU present */ + #define __FPU_DP 0 /*!< Double Precision FPU */ + #define __DSP_PRESENT 1 /*!< DSP extension present */ + #define __SAUREGION_PRESENT 0 /*!< SAU region present */ + +/** @} */ /* End of group Configuration_of_CMSIS */ + + #include "core_cm33.h" /*!< ARM Cortex-M33 processor and core peripherals */ + #include "system.h" /*!< R7FA6E2BB 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_CANFD_CFDC [CFDC] (Channel Control/Status) + */ +typedef struct +{ + union + { + __IOM uint32_t NCFG; /*!< (@ 0x00000000) Channel Nominal Bitrate Configuration Register */ + + struct + { + __IOM uint32_t NBRP : 10; /*!< [9..0] Channel Nominal Baud Rate Prescaler */ + __IOM uint32_t NSJW : 7; /*!< [16..10] Resynchronization Jump Width */ + __IOM uint32_t NTSEG1 : 8; /*!< [24..17] Timing Segment 1 */ + __IOM uint32_t NTSEG2 : 7; /*!< [31..25] Timing Segment 2 */ + } NCFG_b; + }; + + union + { + __IOM uint32_t CTR; /*!< (@ 0x00000004) Channel Control Registers */ + + struct + { + __IOM uint32_t CHMDC : 2; /*!< [1..0] Channel Mode Control */ + __IOM uint32_t CSLPR : 1; /*!< [2..2] Channel Sleep Request */ + __IOM uint32_t RTBO : 1; /*!< [3..3] Return from Bus-Off */ + uint32_t : 4; + __IOM uint32_t BEIE : 1; /*!< [8..8] Bus Error Interrupt Enable */ + __IOM uint32_t EWIE : 1; /*!< [9..9] Error Warning Interrupt Enable */ + __IOM uint32_t EPIE : 1; /*!< [10..10] Error Passive Interrupt Enable */ + __IOM uint32_t BOEIE : 1; /*!< [11..11] Bus-Off Entry Interrupt Enable */ + __IOM uint32_t BORIE : 1; /*!< [12..12] Bus-Off Recovery Interrupt Enable */ + __IOM uint32_t OLIE : 1; /*!< [13..13] Overload Interrupt Enable */ + __IOM uint32_t BLIE : 1; /*!< [14..14] Bus Lock Interrupt Enable */ + __IOM uint32_t ALIE : 1; /*!< [15..15] Arbitration Lost Interrupt Enable */ + __IOM uint32_t TAIE : 1; /*!< [16..16] Transmission abort Interrupt Enable */ + __IOM uint32_t EOCOIE : 1; /*!< [17..17] Error occurrence counter overflow Interrupt enable */ + __IOM uint32_t SOCOIE : 1; /*!< [18..18] Successful Occurrence Counter Overflow Interrupt enable */ + __IOM uint32_t TDCVFIE : 1; /*!< [19..19] Transceiver Delay Compensation Violation Interrupt + * enable */ + uint32_t : 1; + __IOM uint32_t BOM : 2; /*!< [22..21] Channel Bus-Off Mode */ + __IOM uint32_t ERRD : 1; /*!< [23..23] Channel Error Display */ + __IOM uint32_t CTME : 1; /*!< [24..24] Channel Test Mode Enable */ + __IOM uint32_t CTMS : 2; /*!< [26..25] Channel Test Mode Select */ + uint32_t : 3; + __IOM uint32_t CRCT : 1; /*!< [30..30] CRC Error Test */ + __IOM uint32_t ROM : 1; /*!< [31..31] Restricted Operation Mode */ + } CTR_b; + }; + + union + { + __IOM uint32_t STS; /*!< (@ 0x00000008) Channel Status Registers */ + + struct + { + __IM uint32_t CRSTSTS : 1; /*!< [0..0] Channel RESET Status */ + __IM uint32_t CHLTSTS : 1; /*!< [1..1] Channel HALT Status */ + __IM uint32_t CSLPSTS : 1; /*!< [2..2] Channel SLEEP Status */ + __IM uint32_t EPSTS : 1; /*!< [3..3] Channel Error Passive Status */ + __IM uint32_t BOSTS : 1; /*!< [4..4] Channel Bus-Off Status */ + __IM uint32_t TRMSTS : 1; /*!< [5..5] Channel Transmit Status */ + __IM uint32_t RECSTS : 1; /*!< [6..6] Channel Receive Status */ + __IM uint32_t COMSTS : 1; /*!< [7..7] Channel Communication Status */ + __IOM uint32_t ESIF : 1; /*!< [8..8] Error State Indication Flag */ + uint32_t : 7; + __IM uint32_t REC : 8; /*!< [23..16] Reception Error Count */ + __IOM uint32_t TEC : 8; /*!< [31..24] Transmission Error Count */ + } STS_b; + }; + + union + { + __IOM uint32_t ERFL; /*!< (@ 0x0000000C) Channel Error Flag Registers */ + + struct + { + __IOM uint32_t BEF : 1; /*!< [0..0] Bus Error Flag */ + __IOM uint32_t EWF : 1; /*!< [1..1] Error Warning Flag */ + __IOM uint32_t EPF : 1; /*!< [2..2] Error Passive Flag */ + __IOM uint32_t BOEF : 1; /*!< [3..3] Bus-Off Entry Flag */ + __IOM uint32_t BORF : 1; /*!< [4..4] Bus-Off Recovery Flag */ + __IOM uint32_t OVLF : 1; /*!< [5..5] Overload Flag */ + __IOM uint32_t BLF : 1; /*!< [6..6] Bus Lock Flag */ + __IOM uint32_t ALF : 1; /*!< [7..7] Arbitration Lost Flag */ + __IOM uint32_t SERR : 1; /*!< [8..8] Stuff Error */ + __IOM uint32_t FERR : 1; /*!< [9..9] Form Error */ + __IOM uint32_t AERR : 1; /*!< [10..10] Acknowledge Error */ + __IOM uint32_t CERR : 1; /*!< [11..11] CRC Error */ + __IOM uint32_t B1ERR : 1; /*!< [12..12] Bit 1 Error */ + __IOM uint32_t B0ERR : 1; /*!< [13..13] Bit 0 Error */ + __IOM uint32_t ADERR : 1; /*!< [14..14] Acknowledge Delimiter Error */ + uint32_t : 1; + __IM uint32_t CRCREG : 15; /*!< [30..16] CRC Register value */ + uint32_t : 1; + } ERFL_b; + }; +} R_CANFD_CFDC_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_CANFD_CFDC2 [CFDC2] (Channel Configuration Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t DCFG; /*!< (@ 0x00000000) Channel Data Bitrate Configuration Register */ + + struct + { + __IOM uint32_t DBRP : 8; /*!< [7..0] Channel Data Baud Rate Prescaler */ + __IOM uint32_t DTSEG1 : 5; /*!< [12..8] Timing Segment 1 */ + uint32_t : 3; + __IOM uint32_t DTSEG2 : 4; /*!< [19..16] Timing Segment 2 */ + uint32_t : 4; + __IOM uint32_t DSJW : 4; /*!< [27..24] Resynchronization Jump Width */ + uint32_t : 4; + } DCFG_b; + }; + + union + { + __IOM uint32_t FDCFG; /*!< (@ 0x00000004) Channel CAN-FD Configuration Register */ + + struct + { + __IOM uint32_t EOCCFG : 3; /*!< [2..0] Error Occurrence Counter Configuration */ + uint32_t : 5; + __IOM uint32_t TDCOC : 1; /*!< [8..8] Transceiver Delay Compensation Offset Configuration */ + __IOM uint32_t TDCE : 1; /*!< [9..9] Transceiver Delay Compensation Enable */ + __IOM uint32_t ESIC : 1; /*!< [10..10] Error State Indication Configuration */ + uint32_t : 5; + __IOM uint32_t TDCO : 8; /*!< [23..16] Transceiver Delay Compensation Offset */ + uint32_t : 4; + __IOM uint32_t FDOE : 1; /*!< [28..28] FD only enable */ + __IOM uint32_t REFE : 1; /*!< [29..29] RX edge filter enable */ + __IOM uint32_t CLOE : 1; /*!< [30..30] Classical CAN only enable */ + uint32_t : 1; + } FDCFG_b; + }; + + union + { + __IOM uint32_t FDCTR; /*!< (@ 0x00000008) Channel CAN-FD Control Register */ + + struct + { + __IOM uint32_t EOCCLR : 1; /*!< [0..0] Error Occurrence Counter Clear */ + __IOM uint32_t SOCCLR : 1; /*!< [1..1] Successful Occurrence Counter Clear */ + uint32_t : 30; + } FDCTR_b; + }; + + union + { + __IOM uint32_t FDSTS; /*!< (@ 0x0000000C) Channel CAN-FD Status Register */ + + struct + { + __IM uint32_t TDCR : 8; /*!< [7..0] Transceiver Delay Compensation Result */ + __IOM uint32_t EOCO : 1; /*!< [8..8] Error occurrence counter overflow */ + __IOM uint32_t SOCO : 1; /*!< [9..9] Successful occurrence counter overflow */ + uint32_t : 5; + __IOM uint32_t TDCVF : 1; /*!< [15..15] Transceiver Delay Compensation Violation Flag */ + __IM uint32_t EOC : 8; /*!< [23..16] Error occurrence counter register */ + __IM uint32_t SOC : 8; /*!< [31..24] Successful occurrence counter register */ + } FDSTS_b; + }; + + union + { + __IOM uint32_t FDCRC; /*!< (@ 0x00000010) Channel CAN-FD CRC Register */ + + struct + { + __IM uint32_t CRCREG : 21; /*!< [20..0] CRC Register value */ + uint32_t : 3; + __IM uint32_t SCNT : 4; /*!< [27..24] Stuff bit count */ + uint32_t : 4; + } FDCRC_b; + }; + __IM uint32_t RESERVED[3]; +} R_CANFD_CFDC2_Type; /*!< Size = 32 (0x20) */ + +/** + * @brief R_CANFD_CFDGAFL [CFDGAFL] (Global Acceptance Filter List Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) Global Acceptance Filter List ID Registers */ + + struct + { + __IOM uint32_t GAFLID : 29; /*!< [28..0] Global Acceptance Filter List Entry ID Field */ + __IOM uint32_t GAFLLB : 1; /*!< [29..29] Global Acceptance Filter List Entry Loopback Configuration */ + __IOM uint32_t GAFLRTR : 1; /*!< [30..30] Global Acceptance Filter List Entry RTR Field */ + __IOM uint32_t GAFLIDE : 1; /*!< [31..31] Global Acceptance Filter List Entry IDE Field */ + } ID_b; + }; + + union + { + __IOM uint32_t M; /*!< (@ 0x00000004) Global Acceptance Filter List Mask Registers */ + + struct + { + __IOM uint32_t GAFLIDM : 29; /*!< [28..0] Global Acceptance Filter List ID Mask Field */ + __IOM uint32_t GAFLIFL1 : 1; /*!< [29..29] Global Acceptance Filter List Information Label 1 */ + __IOM uint32_t GAFLRTRM : 1; /*!< [30..30] Global Acceptance Filter List Entry RTR Mask */ + __IOM uint32_t GAFLIDEM : 1; /*!< [31..31] Global Acceptance Filter List IDE Mask */ + } M_b; + }; + + union + { + __IOM uint32_t P0; /*!< (@ 0x00000008) Global Acceptance Filter List Pointer 0 Registers */ + + struct + { + __IOM uint32_t GAFLDLC : 4; /*!< [3..0] Global Acceptance Filter List DLC Field */ + uint32_t : 3; + __IOM uint32_t GAFLIFL0 : 1; /*!< [7..7] Global Acceptance Filter List Information Label 0 */ + __IOM uint32_t GAFLRMDP : 5; /*!< [12..8] Global Acceptance Filter List RX Message Buffer Direction + * Pointer */ + uint32_t : 2; + __IOM uint32_t GAFLRMV : 1; /*!< [15..15] Global Acceptance Filter List RX Message Buffer Valid */ + __IOM uint32_t GAFLPTR : 16; /*!< [31..16] Global Acceptance Filter List Pointer Field */ + } P0_b; + }; + + union + { + __IOM uint32_t P1; /*!< (@ 0x0000000C) Global Acceptance Filter List Pointer 1 Registers */ + + struct + { + __IOM uint32_t GAFLFDP : 9; /*!< [8..0] Global Acceptance Filter List FIFO Direction Pointer */ + uint32_t : 23; + } P1_b; + }; +} R_CANFD_CFDGAFL_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_CANFD_CFDTHL [CFDTHL] (Channel TX History List) + */ +typedef struct +{ + union + { + __IM uint32_t ACC0; /*!< (@ 0x00000000) Channel TX History List Access Registers 0 */ + + struct + { + __IM uint32_t BT : 3; /*!< [2..0] Buffer Type */ + __IM uint32_t BN : 7; /*!< [9..3] Buffer No. */ + uint32_t : 6; + __IM uint32_t TMTS : 16; /*!< [31..16] Transmit Timestamp */ + } ACC0_b; + }; + + union + { + __IOM uint32_t ACC1; /*!< (@ 0x00000004) Channel TX History List Access Registers 1 */ + + struct + { + __IM uint32_t TID : 16; /*!< [15..0] Transmit ID */ + __IM uint32_t TIFL : 2; /*!< [17..16] Transmit Information Label */ + uint32_t : 14; + } ACC1_b; + }; +} R_CANFD_CFDTHL_Type; /*!< Size = 8 (0x8) */ + +/** + * @brief R_CANFD_CFDRF [CFDRF] (RX FIFO Access Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ID; /*!< (@ 0x00000000) RX FIFO Access ID Register */ + + struct + { + __IM uint32_t RFID : 29; /*!< [28..0] RX FIFO Buffer ID Field */ + uint32_t : 1; + __IM uint32_t RFRTR : 1; /*!< [30..30] RX FIFO Buffer RTR Frame */ + __IM uint32_t RFIDE : 1; /*!< [31..31] RX FIFO Buffer IDE Bit */ + } ID_b; + }; + + union + { + __IM uint32_t PTR; /*!< (@ 0x00000004) RX FIFO Access Pointer Register */ + + struct + { + __IM uint32_t RFTS : 16; /*!< [15..0] RX FIFO Timestamp Field */ + uint32_t : 12; + __IM uint32_t RFDLC : 4; /*!< [31..28] RX FIFO Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IM uint32_t FDSTS; /*!< (@ 0x00000008) RX FIFO Access CAN-FD Status Register */ + + struct + { + __IM uint32_t RFESI : 1; /*!< [0..0] Error State Indicator bit */ + __IM uint32_t RFBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IM uint32_t RFFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IM uint32_t RFIFL : 2; /*!< [9..8] RX FIFO Buffer Information Label Field */ + uint32_t : 6; + __IM uint32_t RFPTR : 16; /*!< [31..16] RX FIFO Buffer Pointer Field */ + } FDSTS_b; + }; + + union + { + __IM uint8_t DF[64]; /*!< (@ 0x0000000C) RX FIFO Access Data Field Registers */ + + struct + { + __IM uint8_t RFDB : 8; /*!< [7..0] RX FIFO Buffer Data Byte */ + } DF_b[64]; + }; +} R_CANFD_CFDRF_Type; /*!< Size = 76 (0x4c) */ + +/** + * @brief R_CANFD_CFDCF [CFDCF] (Common FIFO Access Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) Common FIFO Access ID Register */ + + struct + { + __IOM uint32_t CFID : 29; /*!< [28..0] Common FIFO Buffer ID Field */ + __IOM uint32_t THLEN : 1; /*!< [29..29] THL Entry enable */ + __IOM uint32_t CFRTR : 1; /*!< [30..30] Common FIFO Buffer RTR Frame */ + __IOM uint32_t CFIDE : 1; /*!< [31..31] Common FIFO Buffer IDE Bit */ + } ID_b; + }; + + union + { + __IOM uint32_t PTR; /*!< (@ 0x00000004) Common FIFO Access Pointer Register */ + + struct + { + __IOM uint32_t CFTS : 16; /*!< [15..0] Common FIFO Timestamp Field */ + uint32_t : 12; + __IOM uint32_t CFDLC : 4; /*!< [31..28] Common FIFO Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IOM uint32_t FDSTS; /*!< (@ 0x00000008) Common FIFO Access CAN-FD Status Register */ + + struct + { + __IOM uint32_t CFESI : 1; /*!< [0..0] Error State Indicator bit */ + __IOM uint32_t CFBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IOM uint32_t CFFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IOM uint32_t CFIFL : 2; /*!< [9..8] Common FIFO Buffer Information Label Field */ + uint32_t : 6; + __IOM uint32_t CFPTR : 16; /*!< [31..16] Common FIFO Buffer Pointer Field */ + } FDSTS_b; + }; + + union + { + __IOM uint8_t DF[64]; /*!< (@ 0x0000000C) Common FIFO Access Data Field Registers */ + + struct + { + __IOM uint8_t CFDB : 8; /*!< [7..0] Common FIFO Buffer Data Byte */ + } DF_b[64]; + }; +} R_CANFD_CFDCF_Type; /*!< Size = 76 (0x4c) */ + +/** + * @brief R_CANFD_CFDTM [CFDTM] (TX Message Buffer Access Registers) + */ +typedef struct +{ + union + { + __IOM uint32_t ID; /*!< (@ 0x00000000) TX Message Buffer ID Register */ + + struct + { + __IOM uint32_t TMID : 29; /*!< [28..0] TX Message Buffer ID Field */ + __IOM uint32_t THLEN : 1; /*!< [29..29] Tx History List Entry */ + __IOM uint32_t TMRTR : 1; /*!< [30..30] TX Message Buffer RTR Frame */ + __IOM uint32_t TMIDE : 1; /*!< [31..31] TX Message Buffer IDE Bit */ + } ID_b; + }; + + union + { + __IOM uint32_t PTR; /*!< (@ 0x00000004) TX Message Buffer Pointer Register */ + + struct + { + __IOM uint32_t TMTS : 16; /*!< [15..0] TX Message Buffer Timestamp Field */ + uint32_t : 12; + __IOM uint32_t TMDLC : 4; /*!< [31..28] TX Message Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IOM uint32_t FDCTR; /*!< (@ 0x00000008) TX Message Buffer CAN-FD Control Register */ + + struct + { + __IOM uint32_t TMESI : 1; /*!< [0..0] Error State Indicator bit */ + __IOM uint32_t TMBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IOM uint32_t TMFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IOM uint32_t TMIFL : 2; /*!< [9..8] TX Message Buffer Information Label Field */ + uint32_t : 6; + __IOM uint32_t TMPTR : 16; /*!< [31..16] TX Message Buffer Pointer Field */ + } FDCTR_b; + }; + + union + { + __IOM uint8_t DF[64]; /*!< (@ 0x0000000C) TX Message Buffer Data Field Registers */ + + struct + { + __IOM uint8_t TMDB : 8; /*!< [7..0] TX Message Buffer Data Byte */ + } DF_b[64]; + }; +} R_CANFD_CFDTM_Type; /*!< Size = 76 (0x4c) */ + +/** + * @brief R_CANFD_CFDRM_RM [RM] (RX Message Buffer Access Registers) + */ +typedef struct +{ + union + { + __IM uint32_t ID; /*!< (@ 0x00000000) RX Message Buffer ID Register */ + + struct + { + __IM uint32_t RMID : 29; /*!< [28..0] RX Message Buffer ID Field */ + uint32_t : 1; + __IM uint32_t RMRTR : 1; /*!< [30..30] RX Message Buffer RTR Frame */ + __IM uint32_t RMIDE : 1; /*!< [31..31] RX Message Buffer IDE Bit */ + } ID_b; + }; + + union + { + __IM uint32_t PTR; /*!< (@ 0x00000004) RX Message Buffer Pointer Register */ + + struct + { + __IM uint32_t RMTS : 16; /*!< [15..0] RX Message Buffer Timestamp Field */ + uint32_t : 12; + __IM uint32_t RMDLC : 4; /*!< [31..28] RX Message Buffer DLC Field */ + } PTR_b; + }; + + union + { + __IM uint32_t FDSTS; /*!< (@ 0x00000008) RX Message Buffer CAN-FD Status Register */ + + struct + { + __IM uint32_t RMESI : 1; /*!< [0..0] Error State Indicator bit */ + __IM uint32_t RMBRS : 1; /*!< [1..1] Bit Rate Switch bit */ + __IM uint32_t RMFDF : 1; /*!< [2..2] CAN FD Format bit */ + uint32_t : 5; + __IM uint32_t RMIFL : 2; /*!< [9..8] RX Message Buffer Information Label Field */ + uint32_t : 6; + __IM uint32_t RMPTR : 16; /*!< [31..16] RX Message Buffer Pointer Field */ + } FDSTS_b; + }; + + union + { + __IM uint8_t DF[64]; /*!< (@ 0x0000000C) RX Message Buffer Data Field Registers */ + + struct + { + __IM uint8_t RMDB : 8; /*!< [7..0] RX Message Buffer Data Byte */ + } DF_b[64]; + }; +} R_CANFD_CFDRM_RM_Type; /*!< Size = 76 (0x4c) */ + +/** + * @brief R_CANFD_CFDRM [CFDRM] (RX Message Buffer Access Clusters) + */ +typedef struct +{ + __IOM R_CANFD_CFDRM_RM_Type RM[8]; /*!< (@ 0x00000000) RX Message Buffer Access Registers */ + __IM uint32_t RESERVED[104]; +} R_CANFD_CFDRM_Type; /*!< Size = 1024 (0x400) */ + +/** + * @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_GROUP_REGION [REGION] (Address region control) + */ +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 */ + __IOM uint16_t PP : 1; /*!< [3..3] Privilege protection */ + uint16_t : 12; + } 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_GROUP_REGION_Type; /*!< Size = 16 (0x10) */ + +/** + * @brief R_MPU_MMPU_GROUP [GROUP] ([DMAC0..CEU] MMPU Registers) + */ +typedef struct +{ + union + { + __IOM uint16_t EN; /*!< (@ 0x00000000) MMPU enable register */ + + struct + { + __IOM uint16_t ENABLE : 1; /*!< [0..0] Bus master MPU of DMAC enable */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } EN_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t ENPT; /*!< (@ 0x00000004) MMPU enable protect register */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register EN */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } ENPT_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint16_t RPT; /*!< (@ 0x00000008) MMPU Regions Protect Register Non-Secure */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } RPT_b; + }; + __IM uint16_t RESERVED2; + + union + { + __IOM uint16_t RPT_SEC; /*!< (@ 0x0000000C) MMPU Regions Protect Register Secure (DMAC only) */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } RPT_SEC_b; + }; + __IM uint16_t RESERVED3; + __IM uint32_t RESERVED4[60]; + __IOM R_MPU_MMPU_GROUP_REGION_Type REGION[8]; /*!< (@ 0x00000100) Address region control */ + __IM uint32_t RESERVED5[32]; +} R_MPU_MMPU_GROUP_Type; /*!< Size = 512 (0x200) */ + +/** + * @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_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_PFS_VLSEL [VLSEL] (VLSEL) + */ +typedef struct +{ + __IM uint8_t RESERVED[389]; + + union + { + __IOM uint8_t VL1SEL; /*!< (@ 0x00000185) VL1 Select Control Register */ + + struct + { + __IOM uint8_t SELVL : 1; /*!< [0..0] VL1 Voltage Connection Switching Control */ + uint8_t : 7; + } VL1SEL_b; + }; +} R_PFS_VLSEL_Type; /*!< Size = 390 (0x186) */ + +/** + * @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_ADC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief A/D Converter (R_ADC0) + */ + +typedef struct /*!< (@ 0x40170000) 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_PSCU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Peripheral Security Control Unit (R_PSCU) + */ + +typedef struct /*!< (@ 0x400E0000) R_PSCU Structure */ +{ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t PSARB; /*!< (@ 0x00000004) Peripheral Security Attribution Register B */ + + struct + { + __IOM uint32_t PSARB0 : 1; /*!< [0..0] UARTA and the MSTPCRB.MSTPB0 Bit Security Attribution */ + __IOM uint32_t PSARB1 : 1; /*!< [1..1] CAN1 and the MSTPCRB.MSTPB1 bit security attribution */ + __IOM uint32_t PSARB2 : 1; /*!< [2..2] CAN0 and the MSTPCRB.MSTPB2 bit security attribution */ + __IOM uint32_t PSARB3 : 1; /*!< [3..3] CEC and the MSTPCRB.MSTPB3 bit security attribution */ + __IOM uint32_t PSARB4 : 1; /*!< [4..4] I3C and the MSTPCRB.MSTPB4 Bit Security Attribution */ + __IOM uint32_t PSARB5 : 1; /*!< [5..5] IrDA and the MSTPCRB.MSTPB5 Bit Security Attribution */ + __IM uint32_t PSARB6 : 1; /*!< [6..6] QSPI and the MSTPCRB.MSTPB6 bit security attribution */ + __IOM uint32_t PSARB7 : 1; /*!< [7..7] IIC2 and the MSTPCRB.MSTPB7 bit security attribution */ + __IOM uint32_t PSARB8 : 1; /*!< [8..8] IIC1 and the MSTPCRB.MSTPB8 bit security attribution */ + __IOM uint32_t PSARB9 : 1; /*!< [9..9] IIC0 and the MSTPCRB.MSTPB9 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARB11 : 1; /*!< [11..11] USBFS and the MSTPCRB.MSTPB11 bit security attribution */ + __IOM uint32_t PSARB12 : 1; /*!< [12..12] USBHS and the MSTPCRB.MSTPB12 bit security attribution */ + uint32_t : 2; + __IM uint32_t PSARB15 : 1; /*!< [15..15] ETHER0/EDMAC0, the MSTPCRB.MSTPB15 bit and the PFENET.PHYMODE0 + * bit security attribution */ + __IM uint32_t PSARB16 : 1; /*!< [16..16] OSPI and the MSTPCRB.MSTPB16 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARB18 : 1; /*!< [18..18] RSPI1 and the MSTPCRB.MSTPB18 bit security attribution */ + __IOM uint32_t PSARB19 : 1; /*!< [19..19] RSPI0 and the MSTPCRB.MSTPB19 bit security attribution */ + uint32_t : 2; + __IOM uint32_t PSARB22 : 1; /*!< [22..22] SCI9 and the MSTPCRB.MSTPB22 bit security attribution */ + __IOM uint32_t PSARB23 : 1; /*!< [23..23] SCI8 and the MSTPCRB.MSTPB23 bit security attribution */ + __IOM uint32_t PSARB24 : 1; /*!< [24..24] SCI7 and the MSTPCRB.MSTPB24 bit security attribution */ + __IOM uint32_t PSARB25 : 1; /*!< [25..25] SCI6 and the MSTPCRB.MSTPB25 bit security attribution */ + __IOM uint32_t PSARB26 : 1; /*!< [26..26] SCI5 and the MSTPCRB.MSTPB26 bit security attribution */ + __IOM uint32_t PSARB27 : 1; /*!< [27..27] SCI4 and the MSTPCRB.MSTPB27 bit security attribution */ + __IOM uint32_t PSARB28 : 1; /*!< [28..28] SCI3 and the MSTPCRB.MSTPB28 bit security attribution */ + __IOM uint32_t PSARB29 : 1; /*!< [29..29] SCI2 and the MSTPCRB.MSTPB29 bit security attribution */ + __IOM uint32_t PSARB30 : 1; /*!< [30..30] SCI1 and the MSTPCRB.MSTPB30 bit security attribution */ + __IOM uint32_t PSARB31 : 1; /*!< [31..31] SCI0 and the MSTPCRB.MSTPB31 bit security attribution */ + } PSARB_b; + }; + + union + { + __IOM uint32_t PSARC; /*!< (@ 0x00000008) Peripheral Security Attribution Register C */ + + struct + { + __IOM uint32_t PSARC0 : 1; /*!< [0..0] CAC and the MSTPCRC.MSTPC0 bit security attribution */ + __IOM uint32_t PSARC1 : 1; /*!< [1..1] CRC and the MSTPCRC.MSTPC1 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARC3 : 1; /*!< [3..3] CTSU and the MSTPCRC.MSTPC3 bit security attribution */ + __IOM uint32_t PSARC4 : 1; /*!< [4..4] SLCDC and the MSTPCRB.MSTPC4 Bit Security Attribution */ + uint32_t : 3; + __IOM uint32_t PSARC8 : 1; /*!< [8..8] SSIE0 and the MSTPCRC.MSTPC8 bit security attribution */ + uint32_t : 3; + __IOM uint32_t PSARC12 : 1; /*!< [12..12] SDHI0 and the MSTPCRC.MSTPC12 bit security attribution */ + __IOM uint32_t PSARC13 : 1; /*!< [13..13] DOC and the MSTPCRC.MSTPC13 bit security attribution */ + uint32_t : 6; + __IOM uint32_t PSARC20 : 1; /*!< [20..20] TFU and the MSTPCRC.MSTPC20 bit security attribution */ + uint32_t : 6; + __IOM uint32_t PSARC27 : 1; /*!< [27..27] CANFD0 and the MSTPCRC.MSTPC27 bit security attribution */ + uint32_t : 3; + __IOM uint32_t PSARC31 : 1; /*!< [31..31] TSIP and the MSTPCRC.MSTPC31 bit security attribution */ + } PSARC_b; + }; + + union + { + __IOM uint32_t PSARD; /*!< (@ 0x0000000C) Peripheral Security Attribution Register D */ + + struct + { + __IOM uint32_t PSARD0 : 1; /*!< [0..0] AGT3 and the MSTPCRD.MSTPD0 bit security attribution */ + __IOM uint32_t PSARD1 : 1; /*!< [1..1] AGT2 and the MSTPCRD.MSTPD1 bit security attribution */ + __IOM uint32_t PSARD2 : 1; /*!< [2..2] AGT1 and the MSTPCRD.MSTPD2 bit security attribution */ + __IOM uint32_t PSARD3 : 1; /*!< [3..3] AGT0 and the MSTPCRD.MSTPD3 bit security attribution */ + uint32_t : 7; + __IOM uint32_t PSARD11 : 1; /*!< [11..11] PGI3 and the MSTPCRD.MSTPD11 bit security attribution */ + __IOM uint32_t PSARD12 : 1; /*!< [12..12] PGI2 and the MSTPCRD.MSTPD12 bit security attribution */ + __IOM uint32_t PSARD13 : 1; /*!< [13..13] PGI1 and the MSTPCRD.MSTPD13 bit security attribution */ + __IOM uint32_t PSARD14 : 1; /*!< [14..14] PGI0 and the MSTPCRD.MSTPD14 bit security attribution */ + __IOM uint32_t PSARD15 : 1; /*!< [15..15] ADC1 and the MSTPCRD.MSTPD15 bit security attribution */ + __IOM uint32_t PSARD16 : 1; /*!< [16..16] ADC0 and the MSTPCRD.MSTPD16 bit security attribution */ + uint32_t : 2; + __IOM uint32_t PSARD19 : 1; /*!< [19..19] DAC121 and the MSTPCRD.MSTPD19 bit security attribution */ + __IOM uint32_t PSARD20 : 1; /*!< [20..20] DAC120 and the MSTPCRD.MSTPD20 bit security attribution */ + uint32_t : 1; + __IOM uint32_t PSARD22 : 1; /*!< [22..22] TSN and the MSTPCRD.MSTPD22 bit security attribution */ + uint32_t : 2; + __IOM uint32_t PSARD25 : 1; /*!< [25..25] ACMPHS3 and the MSTPCRD.MSTPD25 bit security attribution */ + __IOM uint32_t PSARD26 : 1; /*!< [26..26] ACMPHS2 and the MSTPCRD.MSTPD26 bit security attribution */ + __IOM uint32_t PSARD27 : 1; /*!< [27..27] ACMPHS1 and the MSTPCRD.MSTPD27 bit security attribution */ + __IOM uint32_t PSARD28 : 1; /*!< [28..28] ACMPHS0 and the MSTPCRD.MSTPD28 bit security attribution */ + __IOM uint32_t PSARD29 : 1; /*!< [29..29] ACMPLP and the MSTPCRD.MSTPD29 Bit Security Attribution */ + uint32_t : 2; + } PSARD_b; + }; + + union + { + __IOM uint32_t PSARE; /*!< (@ 0x00000010) Peripheral Security Attribution Register E */ + + struct + { + __IOM uint32_t PSARE0 : 1; /*!< [0..0] WDT security attribution */ + __IOM uint32_t PSARE1 : 1; /*!< [1..1] IWDT security attribution */ + __IOM uint32_t PSARE2 : 1; /*!< [2..2] RTC security attribution */ + uint32_t : 11; + __IOM uint32_t PSARE14 : 1; /*!< [14..14] AGT5 and the MSTPCRE.MSTPE14 bit security attribution */ + __IOM uint32_t PSARE15 : 1; /*!< [15..15] AGT4 and the MSTPCRE.MSTPE15 bit security attribution */ + uint32_t : 6; + __IOM uint32_t PSARE22 : 1; /*!< [22..22] GPT9 and the MSTPCRE.MSTPE22 bit security attribution */ + __IOM uint32_t PSARE23 : 1; /*!< [23..23] GPT8 and the MSTPCRE.MSTPE23 bit security attribution */ + __IOM uint32_t PSARE24 : 1; /*!< [24..24] GPT7 and the MSTPCRE.MSTPE24 bit security attribution */ + __IOM uint32_t PSARE25 : 1; /*!< [25..25] GPT6 and the MSTPCRE.MSTPE25 bit security attribution */ + __IOM uint32_t PSARE26 : 1; /*!< [26..26] GPT5 and the MSTPCRE.MSTPE26 bit security attribution */ + __IOM uint32_t PSARE27 : 1; /*!< [27..27] GPT4 and the MSTPCRE.MSTPE27 bit security attribution */ + __IOM uint32_t PSARE28 : 1; /*!< [28..28] GPT3 and the MSTPCRE.MSTPE28 bit security attribution */ + __IOM uint32_t PSARE29 : 1; /*!< [29..29] GPT2 and the MSTPCRE.MSTPE29 bit security attribution */ + __IOM uint32_t PSARE30 : 1; /*!< [30..30] GPT1 and the MSTPCRE.MSTPE30 bit security attribution */ + __IOM uint32_t PSARE31 : 1; /*!< [31..31] GPT0 and the MSTPCRE.MSTPE31 bit security attribution */ + } PSARE_b; + }; + + union + { + __IOM uint32_t MSSAR; /*!< (@ 0x00000014) Module Stop Security Attribution Register */ + + struct + { + __IOM uint32_t MSSAR0 : 1; /*!< [0..0] The MSTPCRC.MSTPC14 bit security attribution */ + __IOM uint32_t MSSAR1 : 1; /*!< [1..1] The MSTPCRA.MSTPA22 bit security attribution */ + __IOM uint32_t MSSAR2 : 1; /*!< [2..2] The MSTPCRA.MSTPA7 bit security attribution */ + __IOM uint32_t MSSAR3 : 1; /*!< [3..3] The MSTPCRA.MSTPA0 bit security attribution */ + __IOM uint32_t MSSAR4 : 1; /*!< [4..4] The MSTPCRA.MSMSTPA16 Bit Security Attribution */ + uint32_t : 27; + } MSSAR_b; + }; + + union + { + __IOM uint32_t CFSAMONA; /*!< (@ 0x00000018) Code Flash Security Attribution Monitor Register + * A */ + + struct + { + uint32_t : 15; + __IOM uint32_t CFS2 : 9; /*!< [23..15] Code Flash Secure area 2 */ + uint32_t : 8; + } CFSAMONA_b; + }; + + union + { + __IOM uint32_t CFSAMONB; /*!< (@ 0x0000001C) Code Flash Security Attribution Monitor Register + * B */ + + struct + { + uint32_t : 10; + __IOM uint32_t CFS1 : 14; /*!< [23..10] Code Flash Secure area 1 */ + uint32_t : 8; + } CFSAMONB_b; + }; + + union + { + __IOM uint32_t DFSAMON; /*!< (@ 0x00000020) Data Flash Security Attribution Monitor Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t DFS : 6; /*!< [15..10] Data flash Secure area */ + uint32_t : 16; + } DFSAMON_b; + }; + + union + { + __IOM uint32_t SSAMONA; /*!< (@ 0x00000024) SRAM Security Attribution Monitor Register A */ + + struct + { + uint32_t : 13; + __IOM uint32_t SS2 : 8; /*!< [20..13] SRAM Secure area 2 */ + uint32_t : 11; + } SSAMONA_b; + }; + + union + { + __IOM uint32_t SSAMONB; /*!< (@ 0x00000028) SRAM Security Attribution Monitor Register B */ + + struct + { + uint32_t : 10; + __IOM uint32_t SS1 : 11; /*!< [20..10] SRAM secure area 1 */ + uint32_t : 11; + } SSAMONB_b; + }; + + union + { + __IM uint32_t DLMMON; /*!< (@ 0x0000002C) Device Lifecycle Management State Monitor Register */ + + struct + { + __IM uint32_t DLMMON : 4; /*!< [3..0] Device Lifecycle Management State Monitor */ + uint32_t : 28; + } DLMMON_b; + }; +} R_PSCU_Type; /*!< Size = 48 (0x30) */ + +/* =========================================================================================================================== */ +/* ================ 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 /*!< (@ 0x40083600) 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_CANFD0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Controller Area Network - Flexible Data (CAN-FD) Module (R_CANFD0) + */ + +typedef struct /*!< (@ 0x400B0000) R_CANFD0 Structure */ +{ + __IOM R_CANFD_CFDC_Type CFDC[1]; /*!< (@ 0x00000000) Channel Control/Status */ + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t CFDGCFG; /*!< (@ 0x00000014) Global Configuration Register */ + + struct + { + __IOM uint32_t TPRI : 1; /*!< [0..0] Transmission Priority */ + __IOM uint32_t DCE : 1; /*!< [1..1] DLC Check Enable */ + __IOM uint32_t DRE : 1; /*!< [2..2] DLC Replacement Enable */ + __IOM uint32_t MME : 1; /*!< [3..3] Mirror Mode Enable */ + __IOM uint32_t DCS : 1; /*!< [4..4] Data Link Controller Clock Select */ + __IOM uint32_t CMPOC : 1; /*!< [5..5] CAN-FD message Payload overflow configuration */ + uint32_t : 2; + __IOM uint32_t TSP : 4; /*!< [11..8] Timestamp Prescaler */ + __IOM uint32_t TSSS : 1; /*!< [12..12] Timestamp Source Select */ + uint32_t : 3; + __IOM uint32_t ITRCP : 16; /*!< [31..16] Interval Timer Reference Clock Prescaler */ + } CFDGCFG_b; + }; + + union + { + __IOM uint32_t CFDGCTR; /*!< (@ 0x00000018) Global Control Register */ + + struct + { + __IOM uint32_t GMDC : 2; /*!< [1..0] Global Mode Control */ + __IOM uint32_t GSLPR : 1; /*!< [2..2] Global Sleep Request */ + uint32_t : 5; + __IOM uint32_t DEIE : 1; /*!< [8..8] DLC check Interrupt Enable */ + __IOM uint32_t MEIE : 1; /*!< [9..9] Message lost Error Interrupt Enable */ + __IOM uint32_t THLEIE : 1; /*!< [10..10] TX History List Entry Lost Interrupt Enable */ + __IOM uint32_t CMPOFIE : 1; /*!< [11..11] CAN-FD message payload overflow Flag Interrupt enable */ + uint32_t : 4; + __IOM uint32_t TSRST : 1; /*!< [16..16] Timestamp Reset */ + uint32_t : 15; + } CFDGCTR_b; + }; + + union + { + __IOM uint32_t CFDGSTS; /*!< (@ 0x0000001C) Global Status Register */ + + struct + { + __IM uint32_t GRSTSTS : 1; /*!< [0..0] Global Reset Status */ + __IM uint32_t GHLTSTS : 1; /*!< [1..1] Global Halt Status */ + __IM uint32_t GSLPSTS : 1; /*!< [2..2] Global Sleep Status */ + __IM uint32_t GRAMINIT : 1; /*!< [3..3] Global RAM Initialisation */ + uint32_t : 28; + } CFDGSTS_b; + }; + + union + { + __IOM uint32_t CFDGERFL; /*!< (@ 0x00000020) Global Error Flag Register */ + + struct + { + __IOM uint32_t DEF : 1; /*!< [0..0] DLC Error Flag */ + __IM uint32_t MES : 1; /*!< [1..1] Message Lost Error Status */ + __IM uint32_t THLES : 1; /*!< [2..2] TX History List Entry Lost Error Status */ + __IOM uint32_t CMPOF : 1; /*!< [3..3] CAN-FD message payload overflow Flag */ + uint32_t : 12; + __IOM uint32_t EEF0 : 1; /*!< [16..16] ECC Error Flag for Channel 0 */ + uint32_t : 15; + } CFDGERFL_b; + }; + + union + { + __IOM uint32_t CFDGTSC; /*!< (@ 0x00000024) Global Timestamp Counter Register */ + + struct + { + __IM uint32_t TS : 16; /*!< [15..0] Timestamp Value */ + uint32_t : 16; + } CFDGTSC_b; + }; + + union + { + __IOM uint32_t CFDGAFLECTR; /*!< (@ 0x00000028) Global Acceptance Filter List Entry Control Register */ + + struct + { + __IOM uint32_t AFLPN : 4; /*!< [3..0] Acceptance Filter List Page Number */ + uint32_t : 4; + __IOM uint32_t AFLDAE : 1; /*!< [8..8] Acceptance Filter List Data Access Enable */ + uint32_t : 23; + } CFDGAFLECTR_b; + }; + + union + { + __IOM uint32_t CFDGAFLCFG0; /*!< (@ 0x0000002C) Global Acceptance Filter List Configuration Register + * 0 */ + + struct + { + __IOM uint32_t RNC1 : 9; /*!< [8..0] Rule Number for Channel 1 */ + uint32_t : 7; + __IOM uint32_t RNC0 : 9; /*!< [24..16] Rule Number for Channel 0 */ + uint32_t : 7; + } CFDGAFLCFG0_b; + }; + + union + { + __IOM uint32_t CFDRMNB; /*!< (@ 0x00000030) RX Message Buffer Number Register */ + + struct + { + __IOM uint32_t NRXMB : 8; /*!< [7..0] Number of RX Message Buffers */ + __IOM uint32_t RMPLS : 3; /*!< [10..8] Reception Message Buffer Payload Data Size */ + uint32_t : 21; + } CFDRMNB_b; + }; + + union + { + __IOM uint32_t CFDRMND0; /*!< (@ 0x00000034) RX Message Buffer New Data Register 0 */ + + struct + { + __IOM uint32_t RMNSu : 32; /*!< [31..0] RX Message Buffer New Data Status */ + } CFDRMND0_b; + }; + + union + { + __IOM uint32_t CFDRMIEC; /*!< (@ 0x00000038) RX Message Buffer Interrupt Enable Configuration + * Register */ + + struct + { + __IOM uint32_t RMIE : 32; /*!< [31..0] RX Message Buffer Interrupt Enable */ + } CFDRMIEC_b; + }; + + union + { + __IOM uint32_t CFDRFCC[2]; /*!< (@ 0x0000003C) RX FIFO Configuration / Control Registers */ + + struct + { + __IOM uint32_t RFE : 1; /*!< [0..0] RX FIFO Enable */ + __IOM uint32_t RFIE : 1; /*!< [1..1] RX FIFO Interrupt Enable */ + uint32_t : 2; + __IOM uint32_t RFPLS : 3; /*!< [6..4] Rx FIFO Payload Data Size configuration */ + uint32_t : 1; + __IOM uint32_t RFDC : 3; /*!< [10..8] RX FIFO Depth Configuration */ + uint32_t : 1; + __IOM uint32_t RFIM : 1; /*!< [12..12] RX FIFO Interrupt Mode */ + __IOM uint32_t RFIGCV : 3; /*!< [15..13] RX FIFO Interrupt Generation Counter Value */ + uint32_t : 16; + } CFDRFCC_b[2]; + }; + + union + { + __IOM uint32_t CFDRFSTS[2]; /*!< (@ 0x00000044) RX FIFO Status Registers */ + + struct + { + __IM uint32_t RFEMP : 1; /*!< [0..0] RX FIFO Empty */ + __IM uint32_t RFFLL : 1; /*!< [1..1] RX FIFO Full */ + __IOM uint32_t RFMLT : 1; /*!< [2..2] RX FIFO Message Lost */ + __IOM uint32_t RFIF : 1; /*!< [3..3] RX FIFO Interrupt Flag */ + uint32_t : 4; + __IM uint32_t RFMC : 8; /*!< [15..8] RX FIFO Message Count */ + uint32_t : 16; + } CFDRFSTS_b[2]; + }; + + union + { + __IOM uint32_t CFDRFPCTR[2]; /*!< (@ 0x0000004C) RX FIFO Pointer Control Registers */ + + struct + { + __OM uint32_t RFPC : 8; /*!< [7..0] RX FIFO Pointer Control */ + uint32_t : 24; + } CFDRFPCTR_b[2]; + }; + + union + { + __IOM uint32_t CFDCFCC[1]; /*!< (@ 0x00000054) Common FIFO Configuration / Control Registers */ + + struct + { + __IOM uint32_t CFE : 1; /*!< [0..0] Common FIFO Enable */ + __IOM uint32_t CFRXIE : 1; /*!< [1..1] Common FIFO RX Interrupt Enable */ + __IOM uint32_t CFTXIE : 1; /*!< [2..2] Common FIFO TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t CFPLS : 3; /*!< [6..4] Common FIFO Payload Data size configuration */ + uint32_t : 1; + __IOM uint32_t CFM : 2; /*!< [9..8] Common FIFO Mode */ + __IOM uint32_t CFITSS : 1; /*!< [10..10] Common FIFO Interval Timer Source Select */ + __IOM uint32_t CFITR : 1; /*!< [11..11] Common FIFO Interval Timer Resolution */ + __IOM uint32_t CFIM : 1; /*!< [12..12] Common FIFO Interrupt Mode */ + __IOM uint32_t CFIGCV : 3; /*!< [15..13] Common FIFO Interrupt Generation Counter Value */ + __IOM uint32_t CFTML : 5; /*!< [20..16] Common FIFO TX Message Buffer Link */ + __IOM uint32_t CFDC : 3; /*!< [23..21] Common FIFO Depth Configuration */ + __IOM uint32_t CFITT : 8; /*!< [31..24] Common FIFO Interval Transmission Time */ + } CFDCFCC_b[1]; + }; + + union + { + __IOM uint32_t CFDCFSTS[1]; /*!< (@ 0x00000058) Common FIFO Status Registers */ + + struct + { + __IM uint32_t CFEMP : 1; /*!< [0..0] Common FIFO Empty */ + __IM uint32_t CFFLL : 1; /*!< [1..1] Common FIFO Full */ + __IOM uint32_t CFMLT : 1; /*!< [2..2] Common FIFO Message Lost */ + __IOM uint32_t CFRXIF : 1; /*!< [3..3] Common RX FIFO Interrupt Flag */ + __IOM uint32_t CFTXIF : 1; /*!< [4..4] Common TX FIFO Interrupt Flag */ + uint32_t : 3; + __IM uint32_t CFMC : 8; /*!< [15..8] Common FIFO Message Count */ + uint32_t : 16; + } CFDCFSTS_b[1]; + }; + + union + { + __IOM uint32_t CFDCFPCTR[1]; /*!< (@ 0x0000005C) Common FIFO Pointer Control Registers */ + + struct + { + __OM uint32_t CFPC : 8; /*!< [7..0] Common FIFO Pointer Control */ + uint32_t : 24; + } CFDCFPCTR_b[1]; + }; + + union + { + __IM uint32_t CFDFESTS; /*!< (@ 0x00000060) FIFO Empty Status Register */ + + struct + { + __IM uint32_t RFXEMP : 2; /*!< [1..0] RX FIF0 Empty Status */ + uint32_t : 6; + __IM uint32_t CFXEMP : 1; /*!< [8..8] Common FIF0 Empty Status */ + uint32_t : 23; + } CFDFESTS_b; + }; + + union + { + __IM uint32_t CFDFFSTS; /*!< (@ 0x00000064) FIFO Full Status Register */ + + struct + { + __IM uint32_t RFXFLL : 2; /*!< [1..0] RX FIF0 Full Status */ + uint32_t : 6; + __IM uint32_t CFXFLL : 1; /*!< [8..8] Common FIF0 Full Status */ + uint32_t : 23; + } CFDFFSTS_b; + }; + + union + { + __IM uint32_t CFDFMSTS; /*!< (@ 0x00000068) FIFO Message Lost Status Register */ + + struct + { + __IM uint32_t RFXMLT : 2; /*!< [1..0] RX FIFO Msg Lost Status */ + uint32_t : 6; + __IM uint32_t CFXMLT : 1; /*!< [8..8] Common FIFO Msg Lost Status */ + uint32_t : 23; + } CFDFMSTS_b; + }; + + union + { + __IOM uint32_t CFDRFISTS; /*!< (@ 0x0000006C) RX FIFO Interrupt Flag Status Register */ + + struct + { + __IM uint32_t RFXIF : 2; /*!< [1..0] RX FIFO[x] Interrupt Flag Status */ + uint32_t : 30; + } CFDRFISTS_b; + }; + + union + { + __IOM uint8_t CFDTMC[4]; /*!< (@ 0x00000070) TX Message Buffer Control Registers */ + + struct + { + __IOM uint8_t TMTR : 1; /*!< [0..0] TX Message Buffer Transmission Request */ + __IOM uint8_t TMTAR : 1; /*!< [1..1] TX Message Buffer Transmission abort Request */ + __IOM uint8_t TMOM : 1; /*!< [2..2] TX Message Buffer One-shot Mode */ + uint8_t : 5; + } CFDTMC_b[4]; + }; + + union + { + __IOM uint8_t CFDTMSTS[4]; /*!< (@ 0x00000074) TX Message Buffer Status Registers */ + + struct + { + __IM uint8_t TMTSTS : 1; /*!< [0..0] TX Message Buffer Transmission Status */ + __IOM uint8_t TMTRF : 2; /*!< [2..1] TX Message Buffer Transmission Result Flag */ + __IM uint8_t TMTRM : 1; /*!< [3..3] TX Message Buffer Transmission Request Mirrored */ + __IM uint8_t TMTARM : 1; /*!< [4..4] TX Message Buffer Transmission abort Request Mirrored */ + uint8_t : 3; + } CFDTMSTS_b[4]; + }; + + union + { + __IM uint32_t CFDTMTRSTS[1]; /*!< (@ 0x00000078) TX Message Buffer Transmission Request Status + * Register */ + + struct + { + __IM uint32_t CFDTMTRSTSg : 4; /*!< [3..0] TX Message Buffer Transmission Request Status */ + uint32_t : 28; + } CFDTMTRSTS_b[1]; + }; + + union + { + __IM uint32_t CFDTMTARSTS[1]; /*!< (@ 0x0000007C) TX Message Buffer Transmission Abort Request + * Status Register */ + + struct + { + __IM uint32_t CFDTMTARSTSg : 4; /*!< [3..0] TX Message Buffer Transmission abort Request Status */ + uint32_t : 28; + } CFDTMTARSTS_b[1]; + }; + + union + { + __IM uint32_t CFDTMTCSTS[1]; /*!< (@ 0x00000080) TX Message Buffer Transmission Completion Status + * Register */ + + struct + { + __IM uint32_t CFDTMTCSTSg : 4; /*!< [3..0] TX Message Buffer Transmission Completion Status */ + uint32_t : 28; + } CFDTMTCSTS_b[1]; + }; + + union + { + __IM uint32_t CFDTMTASTS[1]; /*!< (@ 0x00000084) TX Message Buffer Transmission Abort Status Register */ + + struct + { + __IM uint32_t CFDTMTASTSg : 4; /*!< [3..0] TX Message Buffer Transmission abort Status */ + uint32_t : 28; + } CFDTMTASTS_b[1]; + }; + + union + { + __IOM uint32_t CFDTMIEC[1]; /*!< (@ 0x00000088) TX Message Buffer Interrupt Enable Configuration + * Register */ + + struct + { + __IOM uint32_t TMIEg : 4; /*!< [3..0] TX Message Buffer Interrupt Enable */ + uint32_t : 28; + } CFDTMIEC_b[1]; + }; + + union + { + __IOM uint32_t CFDTXQCC0[1]; /*!< (@ 0x0000008C) TX Queue Configuration / Control Registers 0 */ + + struct + { + __IOM uint32_t TXQE : 1; /*!< [0..0] TX Queue Enable */ + uint32_t : 4; + __IOM uint32_t TXQTXIE : 1; /*!< [5..5] TX Queue TX Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t TXQIM : 1; /*!< [7..7] TX Queue Interrupt Mode */ + __IOM uint32_t TXQDC : 2; /*!< [9..8] TX Queue Depth Configuration */ + uint32_t : 22; + } CFDTXQCC0_b[1]; + }; + + union + { + __IOM uint32_t CFDTXQSTS0[1]; /*!< (@ 0x00000090) TX Queue Status Registers 0 */ + + struct + { + __IM uint32_t TXQEMP : 1; /*!< [0..0] TX Queue Empty */ + __IM uint32_t TXQFLL : 1; /*!< [1..1] TX Queue Full */ + __IOM uint32_t TXQTXIF : 1; /*!< [2..2] TX Queue TX Interrupt Flag */ + uint32_t : 5; + __IM uint32_t TXQMC : 6; /*!< [13..8] TX Queue Message Count */ + uint32_t : 18; + } CFDTXQSTS0_b[1]; + }; + + union + { + __IOM uint32_t CFDTXQPCTR0[1]; /*!< (@ 0x00000094) TX Queue Pointer Control Registers 0 */ + + struct + { + __OM uint32_t TXQPC : 8; /*!< [7..0] TX Queue Pointer Control */ + uint32_t : 24; + } CFDTXQPCTR0_b[1]; + }; + + union + { + __IOM uint32_t CFDTHLCC[1]; /*!< (@ 0x00000098) TX History List Configuration / Control Register */ + + struct + { + __IOM uint32_t THLE : 1; /*!< [0..0] TX History List Enable */ + uint32_t : 7; + __IOM uint32_t THLIE : 1; /*!< [8..8] TX History List Interrupt Enable */ + __IOM uint32_t THLIM : 1; /*!< [9..9] TX History List Interrupt Mode */ + __IOM uint32_t THLDTE : 1; /*!< [10..10] TX History List Dedicated TX Enable */ + uint32_t : 21; + } CFDTHLCC_b[1]; + }; + + union + { + __IOM uint32_t CFDTHLSTS[1]; /*!< (@ 0x0000009C) TX History List Status Register */ + + struct + { + __IM uint32_t THLEMP : 1; /*!< [0..0] TX History List Empty */ + __IM uint32_t THLFLL : 1; /*!< [1..1] TX History List Full */ + __IOM uint32_t THLELT : 1; /*!< [2..2] TX History List Entry Lost */ + __IOM uint32_t THLIF : 1; /*!< [3..3] TX History List Interrupt Flag */ + uint32_t : 4; + __IM uint32_t THLMC : 6; /*!< [13..8] TX History List Message Count */ + uint32_t : 18; + } CFDTHLSTS_b[1]; + }; + + union + { + __IOM uint32_t CFDTHLPCTR[1]; /*!< (@ 0x000000A0) TX History List Pointer Control Registers */ + + struct + { + __OM uint32_t THLPC : 8; /*!< [7..0] TX History List Pointer Control */ + uint32_t : 24; + } CFDTHLPCTR_b[1]; + }; + + union + { + __IOM uint32_t CFDGTINTSTS0; /*!< (@ 0x000000A4) Global TX Interrupt Status Register 0 */ + + struct + { + __IM uint32_t TSIF0 : 1; /*!< [0..0] TX Successful Interrupt Flag Channel 0 */ + __IM uint32_t TAIF0 : 1; /*!< [1..1] TX Abort Interrupt Flag Channel 0 */ + __IM uint32_t TQIF0 : 1; /*!< [2..2] TX Queue Interrupt Flag Channel 0 */ + __IM uint32_t CFTIF0 : 1; /*!< [3..3] COM FIFO TX/GW Mode Interrupt Flag Channel 0 */ + __IM uint32_t THIF0 : 1; /*!< [4..4] TX History List Interrupt Channel 0 */ + uint32_t : 27; + } CFDGTINTSTS0_b; + }; + + union + { + __IOM uint32_t CFDGTSTCFG; /*!< (@ 0x000000A8) Global Test Configuration Register */ + + struct + { + uint32_t : 16; + __IOM uint32_t RTMPS : 10; /*!< [25..16] RAM Test Mode Page Select */ + uint32_t : 6; + } CFDGTSTCFG_b; + }; + + union + { + __IOM uint32_t CFDGTSTCTR; /*!< (@ 0x000000AC) Global Test Control Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t RTME : 1; /*!< [2..2] RAM Test Mode Enable */ + uint32_t : 29; + } CFDGTSTCTR_b; + }; + + union + { + __IOM uint32_t CFDGFDCFG; /*!< (@ 0x000000B0) Global FD Configuration register */ + + struct + { + __IOM uint32_t RPED : 1; /*!< [0..0] RES bit Protocol exception disable */ + uint32_t : 7; + __IOM uint32_t TSCCFG : 2; /*!< [9..8] Timestamp capture configuration */ + uint32_t : 22; + } CFDGFDCFG_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t CFDGLOCKK; /*!< (@ 0x000000B8) Global Lock Key Register */ + + struct + { + __OM uint32_t LOCK : 16; /*!< [15..0] Lock Key */ + uint32_t : 16; + } CFDGLOCKK_b; + }; + __IM uint32_t RESERVED2; + + union + { + __IOM uint32_t CFDGAFLIGNENT; /*!< (@ 0x000000C0) Global AFL Ignore Entry Register */ + + struct + { + __IOM uint32_t IRN : 5; /*!< [4..0] Ignore Rule Number */ + uint32_t : 27; + } CFDGAFLIGNENT_b; + }; + + union + { + __IOM uint32_t CFDGAFLIGNCTR; /*!< (@ 0x000000C4) Global AFL Ignore Control Register */ + + struct + { + __IOM uint32_t IREN : 1; /*!< [0..0] Ignore Rule Enable */ + uint32_t : 7; + __OM uint32_t KEY : 8; /*!< [15..8] Key code */ + uint32_t : 16; + } CFDGAFLIGNCTR_b; + }; + + union + { + __IOM uint32_t CFDCDTCT; /*!< (@ 0x000000C8) DMA Transfer Control Register */ + + struct + { + __IOM uint32_t RFDMAE0 : 1; /*!< [0..0] DMA Transfer Enable for RXFIFO 0 */ + __IOM uint32_t RFDMAE1 : 1; /*!< [1..1] DMA Transfer Enable for RXFIFO 1 */ + uint32_t : 6; + __IOM uint32_t CFDMAE0 : 1; /*!< [8..8] DMA Transfer Enable for Common FIFO 0 of channel 0 */ + uint32_t : 23; + } CFDCDTCT_b; + }; + + union + { + __IM uint32_t CFDCDTSTS; /*!< (@ 0x000000CC) DMA Transfer Status Register */ + + struct + { + __IM uint32_t RFDMASTS0 : 1; /*!< [0..0] DMA Transfer Status for RX FIFO 0 */ + __IM uint32_t RFDMASTS1 : 1; /*!< [1..1] DMA Transfer Status for RX FIFO 1 */ + uint32_t : 6; + __IM uint32_t CFDMASTS0 : 1; /*!< [8..8] DMA Transfer Status only for Common FIFO 0 of channel + * 0 */ + uint32_t : 23; + } CFDCDTSTS_b; + }; + __IM uint32_t RESERVED3[2]; + + union + { + __IOM uint32_t CFDGRSTC; /*!< (@ 0x000000D8) Global SW reset Register */ + + struct + { + __IOM uint32_t SRST : 1; /*!< [0..0] SW reset */ + uint32_t : 7; + __OM uint32_t KEY : 8; /*!< [15..8] Key code */ + uint32_t : 16; + } CFDGRSTC_b; + }; + __IM uint32_t RESERVED4[9]; + __IOM R_CANFD_CFDC2_Type CFDC2[1]; /*!< (@ 0x00000100) Channel Configuration Registers */ + __IOM R_CANFD_CFDGAFL_Type CFDGAFL[16]; /*!< (@ 0x00000120) Global Acceptance Filter List Registers */ + __IM uint32_t RESERVED5[24]; + + union + { + __IOM uint32_t CFDRPGACC[64]; /*!< (@ 0x00000280) RAM Test Page Access Registers */ + + struct + { + __IOM uint32_t RDTA : 32; /*!< [31..0] RAM Data Test Access */ + } CFDRPGACC_b[64]; + }; + __IM uint32_t RESERVED6[104]; + __IOM R_CANFD_CFDRF_Type CFDRF[2]; /*!< (@ 0x00000520) RX FIFO Access Registers */ + __IOM R_CANFD_CFDCF_Type CFDCF[1]; /*!< (@ 0x000005B8) Common FIFO Access Registers */ + __IOM R_CANFD_CFDTM_Type CFDTM[4]; /*!< (@ 0x00000604) TX Message Buffer Access Registers */ + __IM uint32_t RESERVED7[3]; + __IOM R_CANFD_CFDTHL_Type CFDTHL[1]; /*!< (@ 0x00000740) Channel TX History List */ + __IM uint32_t RESERVED8[118]; + __IOM R_CANFD_CFDRM_Type CFDRM[4]; /*!< (@ 0x00000920) RX Message Buffer Access Clusters */ +} R_CANFD_Type; /*!< Size = 6432 (0x1920) */ + +/* =========================================================================================================================== */ +/* ================ R_CRC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Cyclic Redundancy Check (CRC) Calculator (R_CRC) + */ + +typedef struct /*!< (@ 0x40108000) 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_DAC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief D/A Converter (R_DAC) + */ + +typedef struct /*!< (@ 0x40171000) 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_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/interupt */ + __IOM uint32_t DBGSTOP_LVD1 : 1; /*!< [17..17] Mask bit for LVD reset/interupt */ + __IOM uint32_t DBGSTOP_LVD2 : 1; /*!< [18..18] Mask bit for LVD reset/interupt */ + 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_DMA ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMA Controller Common (R_DMA) + */ + +typedef struct /*!< (@ 0x40005200) R_DMA Structure */ +{ + union + { + __IOM uint8_t DMAST; /*!< (@ 0x00000000) DMAC Module Activation Register */ + + struct + { + __IOM uint8_t DMST : 1; /*!< [0..0] DMAC Operation Enable */ + uint8_t : 7; + } DMAST_b; + }; + __IM uint8_t RESERVED; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[3]; + + union + { + __IOM uint8_t DMCTL; /*!< (@ 0x00000010) DMAC Control Register */ + + struct + { + __IOM uint8_t PR : 1; /*!< [0..0] Priority Control Select */ + uint8_t : 3; + __IOM uint8_t ERCH : 1; /*!< [4..4] Clear Channel Select */ + uint8_t : 3; + } DMCTL_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; + __IM uint32_t RESERVED5[11]; + + union + { + __IOM uint32_t DMECHR; /*!< (@ 0x00000040) DMAC Error Channel Register */ + + struct + { + __IM uint32_t DMECH : 4; /*!< [3..0] DMAC Error channel */ + uint32_t : 4; + __IM uint32_t DMECHSAM : 1; /*!< [8..8] DMAC Error channel Security Attribution Monitor */ + uint32_t : 7; + __IOM uint32_t DMESTA : 1; /*!< [16..16] DMAC Error Status */ + uint32_t : 15; + } DMECHR_b; + }; + __IM uint32_t RESERVED6[15]; + + union + { + __IOM uint32_t DELSR[8]; /*!< (@ 0x00000080) DMAC Event Link Setting Register */ + + struct + { + __IOM uint32_t DELS : 9; /*!< [8..0] DMAC Event Link Select */ + 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]; + }; +} R_DMA_Type; /*!< Size = 160 (0xa0) */ + +/* =========================================================================================================================== */ +/* ================ R_DMAC0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief DMA Controller (R_DMAC0) + */ + +typedef struct /*!< (@ 0x40005000) R_DMAC0 Structure */ +{ + union + { + __IOM uint32_t DMSAR; /*!< (@ 0x00000000) DMA Source Address Register */ + + struct + { + __IOM uint32_t DMSAR : 32; /*!< [31..0] Specifies the transfer source start address. */ + } DMSAR_b; + }; + + union + { + __IOM uint32_t DMDAR; /*!< (@ 0x00000004) DMA Destination Address Register */ + + struct + { + __IOM uint32_t DMDAR : 32; /*!< [31..0] Specifies the transfer destination start address. */ + } DMDAR_b; + }; + + union + { + __IOM uint32_t DMCRA; /*!< (@ 0x00000008) DMA Transfer Count Register */ + + struct + { + __IOM uint32_t DMCRAL : 16; /*!< [15..0] Lower bits of transfer count */ + __IOM uint32_t DMCRAH : 10; /*!< [25..16] Upper bits of transfer count */ + uint32_t : 6; + } DMCRA_b; + }; + + union + { + __IOM uint32_t DMCRB; /*!< (@ 0x0000000C) DMA Block Transfer Count Register */ + + struct + { + __IOM uint32_t DMCRBL : 16; /*!< [15..0] Functions as a number of block, repeat or repeat-block + * transfer counter. */ + __IOM uint32_t DMCRBH : 16; /*!< [31..16] Specifies the number of block transfer operations or + * repeat transfer operations. */ + } DMCRB_b; + }; + + union + { + __IOM uint16_t DMTMD; /*!< (@ 0x00000010) DMA Transfer Mode Register */ + + struct + { + __IOM uint16_t DCTG : 2; /*!< [1..0] Transfer Request Source Select */ + uint16_t : 6; + __IOM uint16_t SZ : 2; /*!< [9..8] Transfer Data Size Select */ + __IOM uint16_t TKP : 1; /*!< [10..10] Transfer Keeping */ + uint16_t : 1; + __IOM uint16_t DTS : 2; /*!< [13..12] Repeat Area Select */ + __IOM uint16_t MD : 2; /*!< [15..14] Transfer Mode Select */ + } DMTMD_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint8_t DMINT; /*!< (@ 0x00000013) DMA Interrupt Setting Register */ + + struct + { + __IOM uint8_t DARIE : 1; /*!< [0..0] Destination Address Extended Repeat Area Overflow Interrupt + * Enable */ + __IOM uint8_t SARIE : 1; /*!< [1..1] Source Address Extended Repeat Area Overflow Interrupt + * Enable */ + __IOM uint8_t RPTIE : 1; /*!< [2..2] Repeat Size End Interrupt Enable */ + __IOM uint8_t ESIE : 1; /*!< [3..3] Transfer Escape End Interrupt Enable */ + __IOM uint8_t DTIE : 1; /*!< [4..4] Transfer End Interrupt Enable */ + uint8_t : 3; + } DMINT_b; + }; + + union + { + __IOM uint16_t DMAMD; /*!< (@ 0x00000014) DMA Address Mode Register */ + + struct + { + __IOM uint16_t DARA : 5; /*!< [4..0] Destination Address Extended Repeat Area Specifies the + * extended repeat area on the destination address. For details + * on the settings. */ + __IOM uint16_t DADR : 1; /*!< [5..5] Destination Address Update Select After Reload */ + __IOM uint16_t DM : 2; /*!< [7..6] Destination Address Update Mode */ + __IOM uint16_t SARA : 5; /*!< [12..8] Source Address Extended Repeat Area Specifies the extended + * repeat area on the source address. For details on the settings. */ + __IOM uint16_t SADR : 1; /*!< [13..13] Source Address Update Select After Reload */ + __IOM uint16_t SM : 2; /*!< [15..14] Source Address Update Mode */ + } DMAMD_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint32_t DMOFR; /*!< (@ 0x00000018) DMA Offset Register */ + + struct + { + __IOM uint32_t DMOFR : 32; /*!< [31..0] Specifies the offset when offset addition is selected + * as the address update mode for transfer source or destination. */ + } DMOFR_b; + }; + + union + { + __IOM uint8_t DMCNT; /*!< (@ 0x0000001C) DMA Transfer Enable Register */ + + struct + { + __IOM uint8_t DTE : 1; /*!< [0..0] DMA Transfer Enable */ + uint8_t : 7; + } DMCNT_b; + }; + + union + { + __IOM uint8_t DMREQ; /*!< (@ 0x0000001D) DMA Software Start Register */ + + struct + { + __IOM uint8_t SWREQ : 1; /*!< [0..0] DMA Software Start */ + uint8_t : 3; + __IOM uint8_t CLRS : 1; /*!< [4..4] DMA Software Start Bit Auto Clear Select */ + uint8_t : 3; + } DMREQ_b; + }; + + union + { + __IOM uint8_t DMSTS; /*!< (@ 0x0000001E) DMA Status Register */ + + struct + { + __IOM uint8_t ESIF : 1; /*!< [0..0] Transfer Escape End Interrupt Flag */ + uint8_t : 3; + __IOM uint8_t DTIF : 1; /*!< [4..4] Transfer End Interrupt Flag */ + uint8_t : 2; + __IM uint8_t ACT : 1; /*!< [7..7] DMA Active Flag */ + } DMSTS_b; + }; + __IM uint8_t RESERVED2; + __IOM uint32_t DMSRR; /*!< (@ 0x00000020) DMA Source Reload Address Register */ + __IOM uint32_t DMDRR; /*!< (@ 0x00000024) DMA Destination Reload Address Register */ + + union + { + __IOM uint32_t DMSBS; /*!< (@ 0x00000028) DMA Source Buffer Size Register */ + + struct + { + __IOM uint32_t DMSBSL : 16; /*!< [15..0] Functions as data transfer counter in repeat-block transfer + * mode */ + __IOM uint32_t DMSBSH : 16; /*!< [31..16] Specifies the repeat-area size in repeat-block transfer + * mode */ + } DMSBS_b; + }; + + union + { + __IOM uint32_t DMDBS; /*!< (@ 0x0000002C) DMA Destination Buffer Size Register */ + + struct + { + __IOM uint32_t DMDBSL : 16; /*!< [15..0] Functions as data transfer counter in repeat-block transfer + * mode */ + __IOM uint32_t DMDBSH : 16; /*!< [31..16] Specifies the repeat-area size in repeat-block transfer + * mode */ + } DMDBS_b; + }; + + union + { + __IOM uint8_t DMBWR; /*!< (@ 0x00000030) DMA Bufferable Write Enable Register */ + + struct + { + __IOM uint8_t BWE : 1; /*!< [0..0] Bufferable Write Enable */ + uint8_t : 7; + } DMBWR_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; +} R_DMAC0_Type; /*!< Size = 52 (0x34) */ + +/* =========================================================================================================================== */ +/* ================ R_DOC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Data Operation Circuit (R_DOC) + */ + +typedef struct /*!< (@ 0x40109000) 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 /*!< (@ 0x40082000) 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_HP_CMD ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Application Command Interface Command-Issuing Area (R_FACI_HP_CMD) + */ + +typedef struct /*!< (@ 0x407E0000) R_FACI_HP_CMD Structure */ +{ + union + { + __IOM uint16_t FACI_CMD16; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ + __IOM uint8_t FACI_CMD8; /*!< (@ 0x00000000) FACI Command Issuing Area (halfword access) */ + }; +} R_FACI_HP_CMD_Type; /*!< Size = 2 (0x2) */ + +/* =========================================================================================================================== */ +/* ================ R_FACI_HP ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Flash Application Command Interface (R_FACI_HP) + */ + +typedef struct /*!< (@ 0x407FE000) R_FACI_HP Structure */ +{ + __IM uint32_t RESERVED[4]; + + union + { + __IOM uint8_t FASTAT; /*!< (@ 0x00000010) Flash Access Status */ + + struct + { + uint8_t : 3; + __IOM uint8_t DFAE : 1; /*!< [3..3] Data Flash Access Error */ + __IM uint8_t CMDLK : 1; /*!< [4..4] Command Lock */ + uint8_t : 2; + __IOM uint8_t CFAE : 1; /*!< [7..7] Code Flash Access Error */ + } FASTAT_b; + }; + __IM uint8_t RESERVED1; + __IM uint16_t RESERVED2; + + union + { + __IOM uint8_t FAEINT; /*!< (@ 0x00000014) Flash Access Error Interrupt Enable */ + + struct + { + uint8_t : 3; + __IOM uint8_t DFAEIE : 1; /*!< [3..3] Data Flash Access Error Interrupt Enable */ + __IOM uint8_t CMDLKIE : 1; /*!< [4..4] Command Lock Interrupt Enable */ + uint8_t : 2; + __IOM uint8_t CFAEIE : 1; /*!< [7..7] Code Flash Access Error Interrupt Enable */ + } FAEINT_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4; + + union + { + __IOM uint8_t FRDYIE; /*!< (@ 0x00000018) Flash Ready Interrupt Enable */ + + struct + { + __IOM uint8_t FRDYIE : 1; /*!< [0..0] FRDY Interrupt Enable */ + uint8_t : 7; + } FRDYIE_b; + }; + __IM uint8_t RESERVED5; + __IM uint16_t RESERVED6; + __IM uint32_t RESERVED7[5]; + + union + { + __IOM uint32_t FSADDR; /*!< (@ 0x00000030) Flash Start Address */ + + struct + { + __IOM uint32_t FSA : 32; /*!< [31..0] Start Address of Flash Sequencer Command Target Area + * These bits can be written when FRDY bit of FSTATR register + * is '1'. Writing to these bits in FRDY = '0' is ignored. */ + } FSADDR_b; + }; + + union + { + __IOM uint32_t FEADDR; /*!< (@ 0x00000034) Flash End Address */ + + struct + { + __IOM uint32_t FEA : 32; /*!< [31..0] End Address of Flash Sequencer Command Target Area Specifies + * end address of target area in 'Blank Check' command. These + * bits can be written when FRDY bit of FSTATR register is + * '1'. Writing to these bits in FRDY = '0' is ignored. */ + } FEADDR_b; + }; + __IM uint32_t RESERVED8[3]; + + union + { + __IOM uint16_t FMEPROT; /*!< (@ 0x00000044) Flash P/E Mode Entry Protection Register */ + + struct + { + __IOM uint16_t CEPROT : 1; /*!< [0..0] Code Flash P/E Mode Entry ProtectionWriting to this bit + * is only possible when the FRDY bit in the FSTATR register + * is 1. Writing to this bit while the FRDY bit = 0 isignored.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY bits is D9h.Written values + * are not retained by these bits (always read as 0x00).Only + * secure access can write to this register. Both secure access + * and non-secure read access are allowed. Non-secure writeaccess + * is denied, but TrustZo */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FMEPROT_b; + }; + __IM uint16_t RESERVED9; + __IM uint32_t RESERVED10[12]; + + union + { + __IOM uint16_t FBPROT0; /*!< (@ 0x00000078) Flash Block Protection Register */ + + struct + { + __IOM uint16_t BPCN0 : 1; /*!< [0..0] Block Protection for Non-secure CancelThis bit can be + * written when the FRDY bit in the FSTATR register is 1. + * Writing to this bit is ignored when the FRDY bit is 0.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY[7:0] bits is 0x78.Written + * values are not retained by these bits (always read as 0x00). */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FBPROT0_b; + }; + __IM uint16_t RESERVED11; + + union + { + __IOM uint16_t FBPROT1; /*!< (@ 0x0000007C) Flash Block Protection for Secure Register */ + + struct + { + __IOM uint16_t BPCN1 : 1; /*!< [0..0] Block Protection for Secure CancelWriting to this bit + * is only possible when the FRDY bit in the FSTATR register + * is 1. Writing to this bit while FRDY bit = 0 is ignored.Writing + * to this bit is only possible when 16 bits are written and + * the value written to the KEY[7:0] bits is 0xB1.Written + * values are not retained by these bits (always read as 0x00). */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FBPROT1_b; + }; + __IM uint16_t RESERVED12; + + union + { + __IM uint32_t FSTATR; /*!< (@ 0x00000080) Flash Status */ + + struct + { + uint32_t : 6; + __IM uint32_t FLWEERR : 1; /*!< [6..6] Flash Write/Erase Protect Error Flag */ + uint32_t : 1; + __IM uint32_t PRGSPD : 1; /*!< [8..8] Programming-Suspended Status */ + __IM uint32_t ERSSPD : 1; /*!< [9..9] Erasure-Suspended Status */ + __IM uint32_t DBFULL : 1; /*!< [10..10] Data Buffer Full */ + __IM uint32_t SUSRDY : 1; /*!< [11..11] Suspend Ready */ + __IM uint32_t PRGERR : 1; /*!< [12..12] Programming Error */ + __IM uint32_t ERSERR : 1; /*!< [13..13] Erasure Error */ + __IM uint32_t ILGLERR : 1; /*!< [14..14] Illegal Command Error */ + __IM uint32_t FRDY : 1; /*!< [15..15] Flash Ready */ + uint32_t : 4; + __IM uint32_t OTERR : 1; /*!< [20..20] Other Error */ + __IOM uint32_t SECERR : 1; /*!< [21..21] Security Error */ + __IM uint32_t FESETERR : 1; /*!< [22..22] FENTRY Setting Error */ + __IM uint32_t ILGCOMERR : 1; /*!< [23..23] Illegal Command Error */ + uint32_t : 8; + } FSTATR_b; + }; + + union + { + __IOM uint16_t FENTRYR; /*!< (@ 0x00000084) Program/Erase Mode Entry */ + + struct + { + __IOM uint16_t FENTRYC : 1; /*!< [0..0] Code Flash P/E Mode Entry These bits can be written when + * FRDY bit in FSTATR register is '1'. Writing to this bit + * in FRDY = '0' is ignored. Writing to these bits is enabled + * only when this register is accessed in 16-bit size and + * H'AA is written to KEY bits */ + uint16_t : 6; + __IOM uint16_t FENTRYD : 1; /*!< [7..7] Data Flash P/E Mode Entry These bits can be written when + * FRDY bit in FSTATR register is '1'. Writing to this bit + * in FRDY = '0' is ignored. Writing to these bits is enabled + * only when this register is accessed in 16-bit size and + * H'AA is written to KEY bits. */ + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FENTRYR_b; + }; + __IM uint16_t RESERVED13; + __IM uint32_t RESERVED14; + + union + { + __IOM uint16_t FSUINITR; /*!< (@ 0x0000008C) Flash Sequencer Set-up Initialize */ + + struct + { + __IOM uint16_t SUINIT : 1; /*!< [0..0] Set-up Initialization This bit can be written when FRDY + * bit of FSTATR register is '1'. Writing to this bit in FRDY + * = '0' is ignored. Writing to these bits is enabled only + * when this register is accessed in 16-bit size and H'2D + * is written to KEY bits. */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FSUINITR_b; + }; + __IM uint16_t RESERVED15; + __IM uint32_t RESERVED16[4]; + + union + { + __IM uint16_t FCMDR; /*!< (@ 0x000000A0) Flash Sequencer Command */ + + struct + { + __IM uint16_t PCMDR : 8; /*!< [7..0] Previous Command Register */ + __IM uint16_t CMDR : 8; /*!< [15..8] Command Register */ + } FCMDR_b; + }; + __IM uint16_t RESERVED17; + __IM uint32_t RESERVED18[11]; + + union + { + __IOM uint8_t FBCCNT; /*!< (@ 0x000000D0) Blank Check Control */ + + struct + { + __IOM uint8_t BCDIR : 1; /*!< [0..0] Blank Check Direction */ + uint8_t : 7; + } FBCCNT_b; + }; + __IM uint8_t RESERVED19; + __IM uint16_t RESERVED20; + + union + { + __IM uint8_t FBCSTAT; /*!< (@ 0x000000D4) Blank Check Status */ + + struct + { + __IM uint8_t BCST : 1; /*!< [0..0] Blank Check Status Bit */ + uint8_t : 7; + } FBCSTAT_b; + }; + __IM uint8_t RESERVED21; + __IM uint16_t RESERVED22; + + union + { + __IM uint32_t FPSADDR; /*!< (@ 0x000000D8) Programmed Area Start Address */ + + struct + { + __IM uint32_t PSADR : 19; /*!< [18..0] Programmed Area Start Address NOTE: Indicates address + * of the first programmed data which is found in 'Blank Check' + * command execution. */ + uint32_t : 13; + } FPSADDR_b; + }; + + union + { + __IM uint32_t FAWMON; /*!< (@ 0x000000DC) Flash Access Window Monitor */ + + struct + { + __IM uint32_t FAWS : 11; /*!< [10..0] Start Sector Address for Access Window NOTE: These bits + * indicate the start sector address for setting the access + * window that is located in the configuration area. */ + uint32_t : 4; + __IM uint32_t FSPR : 1; /*!< [15..15] Protection Flag of programming the Access Window, Boot + * Flag and Temporary Boot Swap Control and 'Config Clear' + * command execution */ + __IM uint32_t FAWE : 11; /*!< [26..16] End Sector Address for Access Window NOTE: These bits + * indicate the end sector address for setting the access + * window that is located in the configuration area. */ + uint32_t : 4; + __IM uint32_t BTFLG : 1; /*!< [31..31] Flag of Start-Up area select for Boot Swap */ + } FAWMON_b; + }; + + union + { + __IOM uint16_t FCPSR; /*!< (@ 0x000000E0) FCU Process Switch */ + + struct + { + __IOM uint16_t ESUSPMD : 1; /*!< [0..0] Erasure-Suspended Mode */ + uint16_t : 15; + } FCPSR_b; + }; + __IM uint16_t RESERVED23; + + union + { + __IOM uint16_t FPCKAR; /*!< (@ 0x000000E4) Flash Sequencer Processing Clock Frequency Notification */ + + struct + { + __IOM uint16_t PCKA : 8; /*!< [7..0] Flash Sequencer Processing Clock Frequency These bits + * can be written when FRDY bit in FSTATR register is '1'. + * Writing to this bit in FRDY = '0' is ignored. Writing to + * these bits is enabled only when this register is accessed + * in 16-bit size and H'1E is written to KEY bits. */ + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FPCKAR_b; + }; + __IM uint16_t RESERVED24; + + union + { + __IOM uint16_t FSUACR; /*!< (@ 0x000000E8) Flash Start-Up Area Control Register */ + + struct + { + __IOM uint16_t SAS : 2; /*!< [1..0] Start Up Area Select These bits can be written when FRDY + * bit in FSTATR register is '1'. Writing to this bit in FRDY + * = '0' is ignored. Writing to these bits is enabled only + * when this register is accessed in 16-bit size and H'66 + * is written to KEY bits. */ + uint16_t : 6; + __OM uint16_t KEY : 8; /*!< [15..8] KEY Code */ + } FSUACR_b; + }; + __IM uint16_t RESERVED25; +} R_FACI_HP_Type; /*!< Size = 236 (0xec) */ + +/* =========================================================================================================================== */ +/* ================ 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 /*!< (@ 0x40169000) 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 : 3; + __IOM uint32_t TPCS : 4; /*!< [26..23] 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 /*!< (@ 0x40169A00) 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 /*!< (@ 0x4008A000) 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 /*!< (@ 0x4009F000) 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 /*!< (@ 0x40083200) 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_I3C0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I3C Bus Interface (R_I3C0) + */ + +typedef struct /*!< (@ 0x4011F000) R_I3C0 Structure */ +{ + union + { + __IOM uint32_t PRTS; /*!< (@ 0x00000000) Protocol Selection Register */ + + struct + { + __IOM uint32_t PRTMD : 1; /*!< [0..0] Protocol Mode */ + uint32_t : 31; + } PRTS_b; + }; + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t CECTL; /*!< (@ 0x00000010) Clock Enable Control Resisters */ + + struct + { + __IOM uint32_t CLKE : 1; /*!< [0..0] Clock Enable */ + uint32_t : 31; + } CECTL_b; + }; + + union + { + __IOM uint32_t BCTL; /*!< (@ 0x00000014) Bus Control Register */ + + struct + { + __IOM uint32_t INCBA : 1; /*!< [0..0] Include I3C Broadcast Address */ + uint32_t : 6; + __IOM uint32_t BMDS : 1; /*!< [7..7] Bus Mode Selection */ + __IOM uint32_t HJACKCTL : 1; /*!< [8..8] Hot-Join Acknowledge Control */ + uint32_t : 20; + __IOM uint32_t ABT : 1; /*!< [29..29] Abort */ + __IOM uint32_t RSM : 1; /*!< [30..30] Resume */ + __IOM uint32_t BUSE : 1; /*!< [31..31] Bus Enable */ + } BCTL_b; + }; + + union + { + __IOM uint32_t MSDVAD; /*!< (@ 0x00000018) Master Device Address Register */ + + struct + { + uint32_t : 16; + __IOM uint32_t MDYAD : 7; /*!< [22..16] Master Dynamic Address */ + uint32_t : 8; + __IOM uint32_t MDYADV : 1; /*!< [31..31] Master Dynamic Address Valid */ + } MSDVAD_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t RSTCTL; /*!< (@ 0x00000020) Reset Control Register */ + + struct + { + __IOM uint32_t RI3CRST : 1; /*!< [0..0] I3C Software Reset */ + __IOM uint32_t CMDQRST : 1; /*!< [1..1] Command Queue Software Reset */ + __IOM uint32_t RSPQRST : 1; /*!< [2..2] Response Queue Software Reset */ + __IOM uint32_t TDBRST : 1; /*!< [3..3] Transmit Data Buffer Software Reset */ + __IOM uint32_t RDBRST : 1; /*!< [4..4] Receive Data Buffer Software Reset */ + __IOM uint32_t IBIQRST : 1; /*!< [5..5] IBI Queue Software Reset */ + __IOM uint32_t RSQRST : 1; /*!< [6..6] Receive Status Queue Software Reset */ + uint32_t : 2; + __IOM uint32_t HCMDQRST : 1; /*!< [9..9] High Priority Command Queue Software Reset */ + __IOM uint32_t HRSPQRST : 1; /*!< [10..10] High Priority Response Queue Software Rese */ + __IOM uint32_t HTDBRST : 1; /*!< [11..11] High Priority Tx Data Buffer Software Reset */ + __IOM uint32_t HRDBRST : 1; /*!< [12..12] High Priority Rx Data Buffer Software Reset */ + uint32_t : 3; + __IOM uint32_t INTLRST : 1; /*!< [16..16] Internal Software Reset */ + uint32_t : 15; + } RSTCTL_b; + }; + + union + { + __IOM uint32_t PRSST; /*!< (@ 0x00000024) Present State Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t CRMS : 1; /*!< [2..2] Current Master */ + uint32_t : 1; + __IM uint32_t TRMD : 1; /*!< [4..4] Transmit/Receive Mode */ + uint32_t : 2; + __OM uint32_t PRSSTWP : 1; /*!< [7..7] Present State Write Protect */ + uint32_t : 24; + } PRSST_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t INST; /*!< (@ 0x00000030) Internal Status Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t INEF : 1; /*!< [10..10] Internal Error Flag */ + uint32_t : 21; + } INST_b; + }; + + union + { + __IOM uint32_t INSTE; /*!< (@ 0x00000034) Internal Status Enable Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t INEE : 1; /*!< [10..10] Internal Error Enable */ + uint32_t : 21; + } INSTE_b; + }; + + union + { + __IOM uint32_t INIE; /*!< (@ 0x00000038) Internal Interrupt Enable Register */ + + struct + { + uint32_t : 10; + __IOM uint32_t INEIE : 1; /*!< [10..10] Internal Error Interrupt Enable */ + uint32_t : 21; + } INIE_b; + }; + + union + { + __IOM uint32_t INSTFC; /*!< (@ 0x0000003C) Internal Status Force Register */ + + struct + { + uint32_t : 10; + __OM uint32_t INEFC : 1; /*!< [10..10] Internal Error Force */ + uint32_t : 21; + } INSTFC_b; + }; + __IM uint32_t RESERVED3; + + union + { + __IM uint32_t DVCT; /*!< (@ 0x00000044) Device Characteristic Table Register */ + + struct + { + uint32_t : 19; + __IM uint32_t IDX : 5; /*!< [23..19] DCT Table Index */ + uint32_t : 8; + } DVCT_b; + }; + __IM uint32_t RESERVED4[4]; + + union + { + __IOM uint32_t IBINCTL; /*!< (@ 0x00000058) IBI Notify Control Register */ + + struct + { + __IOM uint32_t NRHJCTL : 1; /*!< [0..0] Notify Rejected Hot-Join Control */ + __IOM uint32_t NRMRCTL : 1; /*!< [1..1] Notify Rejected Master Request Control */ + uint32_t : 1; + __IOM uint32_t NRSIRCTL : 1; /*!< [3..3] Notify Rejected Slave Interrupt Request Control */ + uint32_t : 28; + } IBINCTL_b; + }; + __IM uint32_t RESERVED5; + + union + { + __IOM uint32_t BFCTL; /*!< (@ 0x00000060) Bus Function Control Register */ + + struct + { + __IOM uint32_t MALE : 1; /*!< [0..0] Master Arbitration-Lost Detection Enable */ + __IOM uint32_t NALE : 1; /*!< [1..1] NACK Transmission Arbitration-Lost Detection Enable */ + __IOM uint32_t SALE : 1; /*!< [2..2] Slave Arbitration-Lost Detection Enable */ + uint32_t : 5; + __IOM uint32_t SCSYNE : 1; /*!< [8..8] SCL Synchronous Circuit Enable */ + uint32_t : 3; + __IOM uint32_t SMBS : 1; /*!< [12..12] SMBus/I2C Bus Selection */ + uint32_t : 1; + __IOM uint32_t FMPE : 1; /*!< [14..14] Fast-mode Plus Enable */ + __IOM uint32_t HSME : 1; /*!< [15..15] High Speed Mode Enable */ + uint32_t : 16; + } BFCTL_b; + }; + + union + { + __IOM uint32_t SVCTL; /*!< (@ 0x00000064) Slave Control Register */ + + struct + { + __IOM uint32_t GCAE : 1; /*!< [0..0] General Call Address Enable */ + uint32_t : 4; + __IOM uint32_t HSMCE : 1; /*!< [5..5] Hs-mode Master Code Enable */ + __IOM uint32_t DVIDE : 1; /*!< [6..6] Device-ID Address Enable */ + uint32_t : 8; + __IOM uint32_t HOAE : 1; /*!< [15..15] Host Address Enable */ + __IOM uint32_t SVAEn : 3; /*!< [18..16] Slave Address Enable */ + uint32_t : 13; + } SVCTL_b; + }; + __IM uint32_t RESERVED6[2]; + + union + { + __IOM uint32_t REFCKCTL; /*!< (@ 0x00000070) Reference Clock Control Register */ + + struct + { + __IOM uint32_t IREFCKS : 3; /*!< [2..0] Internal Reference Clock Selection */ + uint32_t : 29; + } REFCKCTL_b; + }; + + union + { + __IOM uint32_t STDBR; /*!< (@ 0x00000074) Standard Bit Rate Register */ + + struct + { + __IOM uint32_t SBRLO : 8; /*!< [7..0] Count value of the Low-level period of SCL clock */ + __IOM uint32_t SBRHO : 8; /*!< [15..8] Count value of the High-level period of SCL clock */ + __IOM uint32_t SBRLP : 6; /*!< [21..16] Standard Bit Rate Low-level Period Push-Pull */ + uint32_t : 2; + __IOM uint32_t SBRHP : 6; /*!< [29..24] Standard Bit Rate High-Level Period Push-Pull */ + uint32_t : 1; + __IOM uint32_t DSBRPO : 1; /*!< [31..31] Double the Standard Bit Rate Period for Open-Drain */ + } STDBR_b; + }; + + union + { + __IOM uint32_t EXTBR; /*!< (@ 0x00000078) Extended Bit Rate Register */ + + struct + { + __IOM uint32_t EBRLO : 8; /*!< [7..0] Extended Bit Rate Low-Level Period Open-Drain */ + __IOM uint32_t EBRHO : 8; /*!< [15..8] Extended Bit Rate High-Level Period Open-Drain */ + __IOM uint32_t EBRLP : 6; /*!< [21..16] Extended Bit Rate Low-Level Period Push-Pull */ + uint32_t : 2; + __IOM uint32_t EBRHP : 6; /*!< [29..24] Extended Bit Rate High-Level Period Push-Pull */ + uint32_t : 2; + } EXTBR_b; + }; + + union + { + __IOM uint32_t BFRECDT; /*!< (@ 0x0000007C) Bus Free Condition Detection Time Register */ + + struct + { + __IOM uint32_t FRECYC : 9; /*!< [8..0] Bus Free Condition Detection Cycle */ + uint32_t : 23; + } BFRECDT_b; + }; + + union + { + __IOM uint32_t BAVLCDT; /*!< (@ 0x00000080) Bus Available Condition Detection Time Register */ + + struct + { + __IOM uint32_t AVLCYC : 9; /*!< [8..0] Bus Available Condition Detection Cycle */ + uint32_t : 23; + } BAVLCDT_b; + }; + + union + { + __IOM uint32_t BIDLCDT; /*!< (@ 0x00000084) Bus Idle Condition Detection Time Register */ + + struct + { + __IOM uint32_t IDLCYC : 18; /*!< [17..0] Bus Idle Condition Detection Cycle */ + uint32_t : 14; + } BIDLCDT_b; + }; + + union + { + __IOM uint32_t OUTCTL; /*!< (@ 0x00000088) Output Control Register */ + + struct + { + __IOM uint32_t SDOC : 1; /*!< [0..0] SDA Output Control */ + __IOM uint32_t SCOC : 1; /*!< [1..1] SCL Output Control */ + __OM uint32_t SOCWP : 1; /*!< [2..2] SCL/SDA Output Control Write Protect */ + uint32_t : 1; + __IOM uint32_t EXCYC : 1; /*!< [4..4] Extra SCL Clock Cycle Output */ + uint32_t : 3; + __IOM uint32_t SDOD : 3; /*!< [10..8] SDA Output Delay */ + uint32_t : 4; + __IOM uint32_t SDODCS : 1; /*!< [15..15] SDA Output Delay Clock Source Selection */ + uint32_t : 16; + } OUTCTL_b; + }; + + union + { + __IOM uint32_t INCTL; /*!< (@ 0x0000008C) Input Control Register */ + + struct + { + __IOM uint32_t DNFS : 4; /*!< [3..0] Digital Noise Filter Stage Selection */ + __IOM uint32_t DNFE : 1; /*!< [4..4] Digital Noise Filter Circuit Enable */ + uint32_t : 27; + } INCTL_b; + }; + + union + { + __IOM uint32_t TMOCTL; /*!< (@ 0x00000090) Timeout Control Register */ + + struct + { + __IOM uint32_t TODTS : 2; /*!< [1..0] Timeout Detection Time Selection */ + uint32_t : 2; + __IOM uint32_t TOLCTL : 1; /*!< [4..4] Timeout L Count Control */ + __IOM uint32_t TOHCTL : 1; /*!< [5..5] Timeout H Count Control */ + __IOM uint32_t TOMDS : 2; /*!< [7..6] Timeout Operation Mode Selection */ + uint32_t : 24; + } TMOCTL_b; + }; + __IM uint32_t RESERVED7; + + union + { + __IOM uint32_t WUCTL; /*!< (@ 0x00000098) Wake Up Unit Control Register */ + + struct + { + __IOM uint32_t WUACKS : 1; /*!< [0..0] Wake-Up Acknowledge Selection */ + uint32_t : 3; + __IOM uint32_t WUANFS : 1; /*!< [4..4] Wake-Up Analog Noise Filter Selection */ + uint32_t : 1; + __IOM uint32_t WUFSYNE : 1; /*!< [6..6] Wake-Up function PCLKA Synchronous Enable */ + __IOM uint32_t WUFE : 1; /*!< [7..7] Wake-Up function Enable. */ + uint32_t : 24; + } WUCTL_b; + }; + __IM uint32_t RESERVED8; + + union + { + __IOM uint32_t ACKCTL; /*!< (@ 0x000000A0) Acknowledge Control Register */ + + struct + { + __IM uint32_t ACKR : 1; /*!< [0..0] Acknowledge Reception */ + __IOM uint32_t ACKT : 1; /*!< [1..1] Acknowledge Transmission */ + __OM uint32_t ACKTWP : 1; /*!< [2..2] ACKT Write Protect */ + uint32_t : 29; + } ACKCTL_b; + }; + + union + { + __IOM uint32_t SCSTRCTL; /*!< (@ 0x000000A4) SCL Stretch Control Register */ + + struct + { + __IOM uint32_t ACKTWE : 1; /*!< [0..0] Acknowledge Transmission Wait Enable */ + __IOM uint32_t RWE : 1; /*!< [1..1] Receive Wait Enable */ + uint32_t : 30; + } SCSTRCTL_b; + }; + __IM uint32_t RESERVED9[2]; + + union + { + __IOM uint32_t SCSTLCTL; /*!< (@ 0x000000B0) SCL Stalling Control Register */ + + struct + { + __IOM uint32_t STLCYC : 16; /*!< [15..0] Stalling Cycle */ + uint32_t : 12; + __IOM uint32_t AAPE : 1; /*!< [28..28] Assigend Address Phase Enable */ + __IOM uint32_t TRAPE : 1; /*!< [29..29] Transition Phase Enable */ + __IOM uint32_t PARPE : 1; /*!< [30..30] Parity Phase Enable */ + __IOM uint32_t ACKPE : 1; /*!< [31..31] ACK phase Enable */ + } SCSTLCTL_b; + }; + __IM uint32_t RESERVED10[3]; + + union + { + __IOM uint32_t SVTDLG0; /*!< (@ 0x000000C0) Slave Transfer Data Length Register 0 */ + + struct + { + uint32_t : 16; + __IOM uint32_t STDLG : 16; /*!< [31..16] Slave Transfer Data Length */ + } SVTDLG0_b; + }; + __IM uint32_t RESERVED11[23]; + + union + { + __IOM uint32_t STCTL; /*!< (@ 0x00000120) Synchronous Timing Control Register */ + + struct + { + __IOM uint32_t STOE : 1; /*!< [0..0] Synchronous Timing output Enable */ + uint32_t : 31; + } STCTL_b; + }; + + union + { + __IOM uint32_t ATCTL; /*!< (@ 0x00000124) Asynchronous Timing Control Register */ + + struct + { + __IOM uint32_t ATTRGS : 1; /*!< [0..0] Asynchronous Timing Trigger Select */ + __IOM uint32_t MREFOE : 1; /*!< [1..1] MREF Output Enable (Capture Event / Counter Overflow) */ + __IOM uint32_t AMEOE : 1; /*!< [2..2] Additional Master-initiated bus Event Output Enable */ + uint32_t : 5; + __IOM uint32_t CDIV : 8; /*!< [15..8] TCLK Counter Divide Setting */ + uint32_t : 16; + } ATCTL_b; + }; + + union + { + __IOM uint32_t ATTRG; /*!< (@ 0x00000128) Asynchronous Timing Trigger Register */ + + struct + { + __OM uint32_t ATSTRG : 1; /*!< [0..0] Asynchronous Timing Software Trigger */ + uint32_t : 31; + } ATTRG_b; + }; + + union + { + __IOM uint32_t ATCCNTE; /*!< (@ 0x0000012C) Asynchronous Timing Contorol Counter enable Register */ + + struct + { + __IOM uint32_t ATCE : 1; /*!< [0..0] Asynchronous Timing Counter Enable for MREF, MC2, SC1, + * SC2. */ + uint32_t : 31; + } ATCCNTE_b; + }; + __IM uint32_t RESERVED12[4]; + + union + { + __IOM uint32_t CNDCTL; /*!< (@ 0x00000140) Condition Control Register */ + + struct + { + __IOM uint32_t STCND : 1; /*!< [0..0] START (S) Condition Issuance */ + __IOM uint32_t SRCND : 1; /*!< [1..1] Repeated START (Sr) Condition Issuance */ + __IOM uint32_t SPCND : 1; /*!< [2..2] STOP (P) Condition Issuance */ + uint32_t : 29; + } CNDCTL_b; + }; + __IM uint32_t RESERVED13[3]; + __OM uint32_t NCMDQP; /*!< (@ 0x00000150) Normal Command Queue Port Register */ + __IM uint32_t NRSPQP; /*!< (@ 0x00000154) Normal Response Queue Port Register */ + __IOM uint32_t NTDTBP0; /*!< (@ 0x00000158) Normal Transfer Data Buffer Port Register 0 */ + __IM uint32_t RESERVED14[8]; + __IOM uint32_t NIBIQP; /*!< (@ 0x0000017C) Normal IBI Queue Port Register */ + __IM uint32_t NRSQP; /*!< (@ 0x00000180) Normal Receive Status Queue Port Register */ + + union + { + __OM uint32_t HCMDQP; /*!< (@ 0x00000184) High Priority Command Queue Port Register */ + + struct + { + __OM uint32_t HCMDQP : 32; /*!< [31..0] High Priority Command Queue Port */ + } HCMDQP_b; + }; + + union + { + __IM uint32_t HRSPQP; /*!< (@ 0x00000188) High Priority Response Queue Port Register */ + + struct + { + __IM uint32_t HRSPQP : 32; /*!< [31..0] High Priority Response Queue Port */ + } HRSPQP_b; + }; + + union + { + __IOM uint32_t HTDTBP; /*!< (@ 0x0000018C) High Priority Transfer Data Buffer Port Register */ + + struct + { + __IOM uint32_t HTDTBP : 32; /*!< [31..0] High Priority Transfer Data Buffer Port */ + } HTDTBP_b; + }; + + union + { + __IOM uint32_t NQTHCTL; /*!< (@ 0x00000190) Normal Queue Threshold Control Register */ + + struct + { + __IOM uint32_t CMDQTH : 8; /*!< [7..0] Normal Command Ready Queue Threshold */ + __IOM uint32_t RSPQTH : 8; /*!< [15..8] Normal Response Queue Threshold */ + __IOM uint32_t IBIDSSZ : 8; /*!< [23..16] Normal IBI Data Segment Size */ + __IOM uint32_t IBIQTH : 8; /*!< [31..24] Normal IBI Queue Threshold */ + } NQTHCTL_b; + }; + + union + { + __IOM uint32_t NTBTHCTL0; /*!< (@ 0x00000194) Normal Transfer Data Buffer Threshold Control + * Register 0 */ + + struct + { + __IOM uint32_t TXDBTH : 3; /*!< [2..0] Normal Transmit Data Buffer Threshold */ + uint32_t : 5; + __IOM uint32_t RXDBTH : 3; /*!< [10..8] Normal Receive Data Buffer Threshold */ + uint32_t : 5; + __IOM uint32_t TXSTTH : 3; /*!< [18..16] Normal Tx Start Threshold */ + uint32_t : 5; + __IOM uint32_t RXSTTH : 3; /*!< [26..24] Normal Rx Start Threshold */ + uint32_t : 5; + } NTBTHCTL0_b; + }; + __IM uint32_t RESERVED15[10]; + + union + { + __IOM uint32_t NRQTHCTL; /*!< (@ 0x000001C0) Normal Receive Status Queue Threshold Control + * Register */ + + struct + { + __IOM uint32_t RSQTH : 8; /*!< [7..0] Normal Receive Status Queue Threshold */ + uint32_t : 24; + } NRQTHCTL_b; + }; + + union + { + __IOM uint32_t HQTHCTL; /*!< (@ 0x000001C4) High Priority Queue Threshold Control Register */ + + struct + { + __IOM uint32_t CMDQTH : 8; /*!< [7..0] High Priority Command Queue Threshold */ + __IOM uint32_t RSPQTH : 8; /*!< [15..8] High Priority Response Queue Threshold */ + uint32_t : 16; + } HQTHCTL_b; + }; + + union + { + __IOM uint32_t HTBTHCTL; /*!< (@ 0x000001C8) High Priority Transfer Data Buffer Threshold + * Control Register */ + + struct + { + __IOM uint32_t TXDBTH : 3; /*!< [2..0] High Priority Tx Data Buffer Threshold */ + uint32_t : 5; + __IOM uint32_t RXDBTH : 3; /*!< [10..8] High Priority Rx Data Buffer Threshold */ + uint32_t : 5; + __IOM uint32_t TXSTTH : 3; /*!< [18..16] High Priority Tx Start Threshold */ + uint32_t : 5; + __IOM uint32_t RXSTTH : 3; /*!< [26..24] High Priority Rx Start Threshold */ + uint32_t : 5; + } HTBTHCTL_b; + }; + __IM uint32_t RESERVED16; + + union + { + __IOM uint32_t BST; /*!< (@ 0x000001D0) Bus Status Register */ + + struct + { + __IOM uint32_t STCNDDF : 1; /*!< [0..0] START condition Detection Flag */ + __IOM uint32_t SPCNDDF : 1; /*!< [1..1] STOP condition Detection Flag */ + __IOM uint32_t HDREXDF : 1; /*!< [2..2] HDR Exit Pattern Detection Flag */ + uint32_t : 1; + __IOM uint32_t NACKDF : 1; /*!< [4..4] NACK Detection Flag */ + uint32_t : 3; + __IOM uint32_t TENDF : 1; /*!< [8..8] Transmit End Flag */ + uint32_t : 7; + __IOM uint32_t ALF : 1; /*!< [16..16] Arbitration Lost Flag */ + uint32_t : 3; + __IOM uint32_t TODF : 1; /*!< [20..20] Timeout Detection Flag */ + uint32_t : 3; + __IOM uint32_t WUCNDDF : 1; /*!< [24..24] Wake-Up Condition Detection Flag */ + uint32_t : 7; + } BST_b; + }; + + union + { + __IOM uint32_t BSTE; /*!< (@ 0x000001D4) Bus Status Enable Register */ + + struct + { + __IOM uint32_t STCNDDE : 1; /*!< [0..0] START condition Detection Enable */ + __IOM uint32_t SPCNDDE : 1; /*!< [1..1] STOP condition Detection Enable */ + __IOM uint32_t HDREXDE : 1; /*!< [2..2] HDR Exit Pattern Detection Enable */ + uint32_t : 1; + __IOM uint32_t NACKDE : 1; /*!< [4..4] NACK Detection Enable */ + uint32_t : 3; + __IOM uint32_t TENDE : 1; /*!< [8..8] Transmit End Enable */ + uint32_t : 7; + __IOM uint32_t ALE : 1; /*!< [16..16] Arbitration Lost Enable */ + uint32_t : 3; + __IOM uint32_t TODE : 1; /*!< [20..20] Timeout Detection Enable */ + uint32_t : 3; + __IOM uint32_t WUCNDDE : 1; /*!< [24..24] Wake-up Condition Detection Enable */ + uint32_t : 7; + } BSTE_b; + }; + + union + { + __IOM uint32_t BIE; /*!< (@ 0x000001D8) Bus Interrupt Enable Register */ + + struct + { + __IOM uint32_t STCNDDIE : 1; /*!< [0..0] START condition Detection Interrupt Enable */ + __IOM uint32_t SPCNDDIE : 1; /*!< [1..1] STOP condition Detection Interrupt Enable */ + __IOM uint32_t HDREXDIE : 1; /*!< [2..2] HDR Exit Pattern Detection Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t NACKDIE : 1; /*!< [4..4] NACK Detection Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t TENDIE : 1; /*!< [8..8] Transmit End Interrupt Enable */ + uint32_t : 7; + __IOM uint32_t ALIE : 1; /*!< [16..16] Arbitration Lost Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t TODIE : 1; /*!< [20..20] Timeout Detection Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t WUCNDDIE : 1; /*!< [24..24] Wake-Up Condition Detection Interrupt Enable */ + uint32_t : 7; + } BIE_b; + }; + + union + { + __IOM uint32_t BSTFC; /*!< (@ 0x000001DC) Bus Status Force Register */ + + struct + { + __OM uint32_t STCNDDFC : 1; /*!< [0..0] START condition Detection Force */ + __OM uint32_t SPCNDDFC : 1; /*!< [1..1] STOP condition Detection Force */ + __OM uint32_t HDREXDFC : 1; /*!< [2..2] HDR Exit Pattern Detection Force */ + uint32_t : 1; + __OM uint32_t NACKDFC : 1; /*!< [4..4] NACK Detection Force */ + uint32_t : 3; + __OM uint32_t TENDFC : 1; /*!< [8..8] Transmit End Force */ + uint32_t : 7; + __OM uint32_t ALFC : 1; /*!< [16..16] Arbitration Lost Force */ + uint32_t : 3; + __OM uint32_t TODFC : 1; /*!< [20..20] Timeout Detection Force */ + uint32_t : 3; + __IOM uint32_t WUCNDDFC : 1; /*!< [24..24] Wake-Up Condition Detection Force */ + uint32_t : 7; + } BSTFC_b; + }; + + union + { + __IOM uint32_t NTST; /*!< (@ 0x000001E0) Normal Transfer Status Register */ + + struct + { + __IOM uint32_t TDBEF0 : 1; /*!< [0..0] Normal Transmit Data Buffer Empty Flag 0 */ + __IOM uint32_t RDBFF0 : 1; /*!< [1..1] Normal Receive Data Buffer Full Flag 0 */ + __IOM uint32_t IBIQEFF : 1; /*!< [2..2] Normal IBI Queue Empty/Full Flag */ + __IOM uint32_t CMDQEF : 1; /*!< [3..3] Normal Command Queue Empty Flag */ + __IOM uint32_t RSPQFF : 1; /*!< [4..4] Normal Response Queue Full Flag */ + __IOM uint32_t TABTF : 1; /*!< [5..5] Normal Transfer Abort Flag */ + uint32_t : 3; + __IOM uint32_t TEF : 1; /*!< [9..9] Normal Transfer Error Flag */ + uint32_t : 10; + __IOM uint32_t RSQFF : 1; /*!< [20..20] Normal Receive Status Queue Full Flag */ + uint32_t : 11; + } NTST_b; + }; + + union + { + __IOM uint32_t NTSTE; /*!< (@ 0x000001E4) Normal Transfer Status Enable Register */ + + struct + { + __IOM uint32_t TDBEE0 : 1; /*!< [0..0] Normal Transmit Data Buffer Empty Enable 0 */ + __IOM uint32_t RDBFE0 : 1; /*!< [1..1] Normal Receive Data Buffer Full Enable 0 */ + __IOM uint32_t IBIQEFE : 1; /*!< [2..2] Normal IBI Queue Empty/Full Enable */ + __IOM uint32_t CMDQEE : 1; /*!< [3..3] Normal Command Queue Empty Enable */ + __IOM uint32_t RSPQFE : 1; /*!< [4..4] Normal Response Queue Full Enable */ + __IOM uint32_t TABTE : 1; /*!< [5..5] Normal Transfer Abort Enable */ + uint32_t : 3; + __IOM uint32_t TEE : 1; /*!< [9..9] Normal Transfer Error Enable */ + uint32_t : 10; + __IOM uint32_t RSQFE : 1; /*!< [20..20] Normal Receive Status Queue Full Enable */ + uint32_t : 11; + } NTSTE_b; + }; + + union + { + __IOM uint32_t NTIE; /*!< (@ 0x000001E8) Normal Transfer Interrupt Enable Register */ + + struct + { + __IOM uint32_t TDBEIE0 : 1; /*!< [0..0] Normal Transmit Data Buffer Empty Interrupt Enable 0 */ + __IOM uint32_t RDBFIE0 : 1; /*!< [1..1] Normal Receive Data Buffer Full Interrupt Enable 0 */ + __IOM uint32_t IBIQEFIE : 1; /*!< [2..2] Normal IBI Queue Empty/Full Interrupt Enable */ + __IOM uint32_t CMDQEIE : 1; /*!< [3..3] Normal Command Queue Empty Interrupt Enable */ + __IOM uint32_t RSPQFIE : 1; /*!< [4..4] Normal Response Queue Full Interrupt Enable */ + __IOM uint32_t TABTIE : 1; /*!< [5..5] Normal Transfer Abort Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t TEIE : 1; /*!< [9..9] Normal Transfer Error Interrupt Enable */ + uint32_t : 10; + __IOM uint32_t RSQFIE : 1; /*!< [20..20] Normal Receive Status Queue Full Interrupt Enable */ + uint32_t : 11; + } NTIE_b; + }; + + union + { + __IOM uint32_t NTSTFC; /*!< (@ 0x000001EC) Normal Transfer Status Force Register */ + + struct + { + __OM uint32_t TDBEFC0 : 1; /*!< [0..0] Normal Transmit Data Buffer Empty Force 0 */ + __OM uint32_t RDBFFC0 : 1; /*!< [1..1] Normal Receive Data Buffer Full Force 0 */ + __OM uint32_t IBIQEFFC : 1; /*!< [2..2] Normal IBI Queue Empty/Full Force */ + __OM uint32_t CMDQEFC : 1; /*!< [3..3] Normal Command Queue Empty Force */ + __OM uint32_t RSPQFFC : 1; /*!< [4..4] Normal Response Queue Full Force */ + __OM uint32_t TABTFC : 1; /*!< [5..5] Normal Transfer Abort Force */ + uint32_t : 3; + __OM uint32_t TEFC : 1; /*!< [9..9] Normal Transfer Error Force */ + uint32_t : 10; + __OM uint32_t RSQFFC : 1; /*!< [20..20] Normal Receive Status Queue Full Force */ + uint32_t : 11; + } NTSTFC_b; + }; + __IM uint32_t RESERVED17[4]; + + union + { + __IOM uint32_t HTST; /*!< (@ 0x00000200) High Priority Transfer Status Register */ + + struct + { + __IOM uint32_t TDBEF : 1; /*!< [0..0] High Priority Tx Data Buffer Empty Flag */ + __IOM uint32_t RDBFF : 1; /*!< [1..1] High Priority Rx Data Buffer Full Flag */ + uint32_t : 1; + __IOM uint32_t CMDQEF : 1; /*!< [3..3] High Priority Command Queue Empty Flag */ + __IOM uint32_t RSPQFF : 1; /*!< [4..4] High Priority Response Queue Full Flag */ + __IOM uint32_t TABTF : 1; /*!< [5..5] High Priority Transfer Abort Flag */ + uint32_t : 3; + __IOM uint32_t TEF : 1; /*!< [9..9] High Priority Transfer Error Flag */ + uint32_t : 22; + } HTST_b; + }; + + union + { + __IOM uint32_t HTSTE; /*!< (@ 0x00000204) High Priority Transfer Status Enable Register */ + + struct + { + __IOM uint32_t TDBEE : 1; /*!< [0..0] High Priority Tx Data Buffer Empty Enable */ + __IOM uint32_t RDBFE : 1; /*!< [1..1] High Priority Rx Data Buffer Full Enable */ + uint32_t : 1; + __IOM uint32_t CMDQEE : 1; /*!< [3..3] High Priority Command Queue Empty Enable */ + __IOM uint32_t RSPQFE : 1; /*!< [4..4] High Priority Response Queue Full Enable */ + __IOM uint32_t TABTE : 1; /*!< [5..5] High Priority Transfer Abort Enable */ + uint32_t : 3; + __IOM uint32_t TEE : 1; /*!< [9..9] High Priority Transfer Error Enable */ + uint32_t : 22; + } HTSTE_b; + }; + + union + { + __IOM uint32_t HTIE; /*!< (@ 0x00000208) High Priority Transfer Interrupt Enable Register */ + + struct + { + __IOM uint32_t TDBEIE : 1; /*!< [0..0] High Priority Tx Data Buffer Empty Interrupt Enable */ + __IOM uint32_t RDBFIE : 1; /*!< [1..1] High Priority Rx Data Buffer Full Interrupt Enable */ + uint32_t : 1; + __IOM uint32_t CMDQEIE : 1; /*!< [3..3] High Priority Command Queue Empty Interrupt Enable */ + __IOM uint32_t RSPQFIE : 1; /*!< [4..4] High Priority Response Queue Full Interrupt Enable */ + __IOM uint32_t TABTIE : 1; /*!< [5..5] High Priority Transfer Abort Interrupt Enable */ + uint32_t : 3; + __IOM uint32_t TEIE : 1; /*!< [9..9] High Priority Transfer Error Interrupt Enable */ + uint32_t : 22; + } HTIE_b; + }; + + union + { + __IOM uint32_t HTSTFC; /*!< (@ 0x0000020C) High Priority Transfer Status Force Register */ + + struct + { + __OM uint32_t TDBEFC : 1; /*!< [0..0] High Priority Tx Data Buffer Empty Force */ + __OM uint32_t RDBFFC : 1; /*!< [1..1] High Priority Rx Data Buffer Full Force */ + uint32_t : 1; + __OM uint32_t CMDQEFC : 1; /*!< [3..3] High Priority Command Queue Empty Force */ + __OM uint32_t RSPQFFC : 1; /*!< [4..4] High Priority Response Queue Full Force */ + __OM uint32_t TABTFC : 1; /*!< [5..5] High Priority Transfer Abort Force */ + uint32_t : 3; + __OM uint32_t TEFC : 1; /*!< [9..9] High Priority Transfer Error Force */ + uint32_t : 22; + } HTSTFC_b; + }; + + union + { + __IM uint32_t BCST; /*!< (@ 0x00000210) Bus Condition Status Register */ + + struct + { + __IM uint32_t BFREF : 1; /*!< [0..0] Bus Free Detection Flag */ + __IM uint32_t BAVLF : 1; /*!< [1..1] Bus Available Detection Flag */ + __IM uint32_t BIDLF : 1; /*!< [2..2] Bus Idle Detection Flag */ + uint32_t : 29; + } BCST_b; + }; + + union + { + __IOM uint32_t SVST; /*!< (@ 0x00000214) Slave Status Register */ + + struct + { + __IOM uint32_t GCAF : 1; /*!< [0..0] General Call Address Detection Flag */ + uint32_t : 4; + __IOM uint32_t HSMCF : 1; /*!< [5..5] Hs-mode Master Code Detection Flag */ + __IOM uint32_t DVIDF : 1; /*!< [6..6] Device-ID Address Detection Flag */ + uint32_t : 8; + __IOM uint32_t HOAF : 1; /*!< [15..15] Host Address Detection Flag */ + __IOM uint32_t SVAFn : 3; /*!< [18..16] Slave Address Detection Flag */ + uint32_t : 13; + } SVST_b; + }; + + union + { + __IM uint32_t WUST; /*!< (@ 0x00000218) Wake Up Unit Operating Status Register */ + + struct + { + __IM uint32_t WUASYNF : 1; /*!< [0..0] Wake-up function asynchronous operation status flag. */ + uint32_t : 31; + } WUST_b; + }; + + union + { + __IM uint32_t MRCCPT; /*!< (@ 0x0000021C) MsyncCNT Counter Capture Register */ + + struct + { + __IM uint32_t MRCCPT : 32; /*!< [31..0] MSyncCNT Counter Capture */ + } MRCCPT_b; + }; + __IM uint32_t RESERVED18; + + union + { + __IOM uint32_t DATBAS0; /*!< (@ 0x00000224) Device Address Table Basic Register 0 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS0_b; + }; + __IM uint32_t RESERVED19; + + union + { + __IOM uint32_t DATBAS1; /*!< (@ 0x0000022C) Device Address Table Basic Register 1 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS1_b; + }; + __IM uint32_t RESERVED20; + + union + { + __IOM uint32_t DATBAS2; /*!< (@ 0x00000234) Device Address Table Basic Register 2 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS2_b; + }; + __IM uint32_t RESERVED21; + + union + { + __IOM uint32_t DATBAS3; /*!< (@ 0x0000023C) Device Address Table Basic Register 3 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS3_b; + }; + __IM uint32_t RESERVED22; + + union + { + __IOM uint32_t DATBAS4; /*!< (@ 0x00000244) Device Address Table Basic Register 4 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS4_b; + }; + __IM uint32_t RESERVED23; + + union + { + __IOM uint32_t DATBAS5; /*!< (@ 0x0000024C) Device Address Table Basic Register 5 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS5_b; + }; + __IM uint32_t RESERVED24; + + union + { + __IOM uint32_t DATBAS6; /*!< (@ 0x00000254) Device Address Table Basic Register 6 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS6_b; + }; + __IM uint32_t RESERVED25; + + union + { + __IOM uint32_t DATBAS7; /*!< (@ 0x0000025C) Device Address Table Basic Register 7 */ + + struct + { + __IOM uint32_t DVSTAD : 7; /*!< [6..0] Device Static Address */ + uint32_t : 5; + __IOM uint32_t DVIBIPL : 1; /*!< [12..12] Device IBI Payload */ + __IOM uint32_t DVSIRRJ : 1; /*!< [13..13] Device In-Band Slave Interrupt Request Reject */ + __IOM uint32_t DVMRRJ : 1; /*!< [14..14] Device In-Band Master Request Reject */ + __IOM uint32_t DVIBITS : 1; /*!< [15..15] Device IBI Time-stamp */ + __IOM uint32_t DVDYAD : 8; /*!< [23..16] Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t DVNACK : 2; /*!< [30..29] Device NACK Retry Count */ + __IOM uint32_t DVTYP : 1; /*!< [31..31] Device Type */ + } DATBAS7_b; + }; + __IM uint32_t RESERVED26[16]; + + union + { + __IOM uint32_t EXDATBAS; /*!< (@ 0x000002A0) Extended Device Address Table Basic Register */ + + struct + { + __IOM uint32_t EDSTAD : 7; /*!< [6..0] Extended Device Static Address */ + uint32_t : 9; + __IOM uint32_t EDDYAD : 8; /*!< [23..16] Extended Device I3C Dynamic Address */ + uint32_t : 5; + __IOM uint32_t EDNACK : 2; /*!< [30..29] Extended Device NACK Retry Count */ + __IOM uint32_t EDTYP : 1; /*!< [31..31] Extended Device Type */ + } EXDATBAS_b; + }; + __IM uint32_t RESERVED27[3]; + + union + { + __IOM uint32_t SDATBAS0; /*!< (@ 0x000002B0) Slave Device Address Table Basic Register 0 */ + + struct + { + __IOM uint32_t SDSTAD : 10; /*!< [9..0] Slave Device Static Address */ + __IOM uint32_t SDADLS : 1; /*!< [10..10] Slave Device Address Length Selection */ + uint32_t : 1; + __IOM uint32_t SDIBIPL : 1; /*!< [12..12] Slave Device IBI Payload */ + uint32_t : 3; + __IOM uint32_t SDDYAD : 7; /*!< [22..16] Slave Device I3C Dynamic Address */ + uint32_t : 9; + } SDATBAS0_b; + }; + + union + { + __IOM uint32_t SDATBAS1; /*!< (@ 0x000002B4) Slave Device Address Table Basic Register 1 */ + + struct + { + __IOM uint32_t SDSTAD : 10; /*!< [9..0] Slave Device Static Address */ + __IOM uint32_t SDADLS : 1; /*!< [10..10] Slave Device Address Length Selection */ + uint32_t : 1; + __IOM uint32_t SDIBIPL : 1; /*!< [12..12] Slave Device IBI Payload */ + uint32_t : 3; + __IOM uint32_t SDDYAD : 7; /*!< [22..16] Slave Device I3C Dynamic Address */ + uint32_t : 9; + } SDATBAS1_b; + }; + + union + { + __IOM uint32_t SDATBAS2; /*!< (@ 0x000002B8) Slave Device Address Table Basic Register 2 */ + + struct + { + __IOM uint32_t SDSTAD : 10; /*!< [9..0] Slave Device Static Address */ + __IOM uint32_t SDADLS : 1; /*!< [10..10] Slave Device Address Length Selection */ + uint32_t : 1; + __IOM uint32_t SDIBIPL : 1; /*!< [12..12] Slave Device IBI Payload */ + uint32_t : 3; + __IOM uint32_t SDDYAD : 7; /*!< [22..16] Slave Device I3C Dynamic Address */ + uint32_t : 9; + } SDATBAS2_b; + }; + __IM uint32_t RESERVED28[5]; + + union + { + __IOM uint32_t MSDCT0; /*!< (@ 0x000002D0) Master Device Characteristic Table Register 0 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT0_b; + }; + + union + { + __IOM uint32_t MSDCT1; /*!< (@ 0x000002D4) Master Device Characteristic Table Register 1 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT1_b; + }; + + union + { + __IOM uint32_t MSDCT2; /*!< (@ 0x000002D8) Master Device Characteristic Table Register 2 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT2_b; + }; + + union + { + __IOM uint32_t MSDCT3; /*!< (@ 0x000002DC) Master Device Characteristic Table Register 3 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT3_b; + }; + + union + { + __IOM uint32_t MSDCT4; /*!< (@ 0x000002E0) Master Device Characteristic Table Register 4 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT4_b; + }; + + union + { + __IOM uint32_t MSDCT5; /*!< (@ 0x000002E4) Master Device Characteristic Table Register 5 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT5_b; + }; + + union + { + __IOM uint32_t MSDCT6; /*!< (@ 0x000002E8) Master Device Characteristic Table Register 6 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT6_b; + }; + + union + { + __IOM uint32_t MSDCT7; /*!< (@ 0x000002EC) Master Device Characteristic Table Register 7 */ + + struct + { + uint32_t : 8; + __IOM uint32_t RBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t RBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t RBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t RBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t RBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t RBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t RBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } MSDCT7_b; + }; + __IM uint32_t RESERVED29[12]; + + union + { + __IOM uint32_t SVDCT; /*!< (@ 0x00000320) Slave Device Characteristic Table Register */ + + struct + { + __IOM uint32_t TDCR : 8; /*!< [7..0] Transfar Device Characteristic Register */ + __IOM uint32_t TBCR0 : 1; /*!< [8..8] Max Data Speed Limitation */ + __IOM uint32_t TBCR1 : 1; /*!< [9..9] IBI Request Capable */ + __IOM uint32_t TBCR2 : 1; /*!< [10..10] IBI Payload */ + __IOM uint32_t TBCR3 : 1; /*!< [11..11] Offline Capable */ + __IOM uint32_t TBCR4 : 1; /*!< [12..12] Bridge Identifier */ + __IOM uint32_t TBCR5 : 1; /*!< [13..13] SDR Only / SDR and HDR Capable */ + __IOM uint32_t TBCR76 : 2; /*!< [15..14] Device Role */ + uint32_t : 16; + } SVDCT_b; + }; + __IOM uint32_t SDCTPIDL; /*!< (@ 0x00000324) Slave Device Characteristic Table Provisional + * ID Low Register */ + __IOM uint32_t SDCTPIDH; /*!< (@ 0x00000328) Slave Device Characteristic Table Provisional + * ID High Register */ + __IM uint32_t RESERVED30; + + union + { + __IM uint32_t SVDVAD0; /*!< (@ 0x00000330) Slave Device Address Register 0 */ + + struct + { + uint32_t : 16; + __IM uint32_t SVAD : 10; /*!< [25..16] Slave Address */ + uint32_t : 1; + __IM uint32_t SADLG : 1; /*!< [27..27] Slave Address Length */ + uint32_t : 2; + __IM uint32_t SSTADV : 1; /*!< [30..30] Slave Static Address Valid */ + __IM uint32_t SDYADV : 1; /*!< [31..31] Slave Dynamic Address Valid */ + } SVDVAD0_b; + }; + + union + { + __IM uint32_t SVDVAD1; /*!< (@ 0x00000334) Slave Device Address Register 1 */ + + struct + { + uint32_t : 16; + __IM uint32_t SVAD : 10; /*!< [25..16] Slave Address */ + uint32_t : 1; + __IM uint32_t SADLG : 1; /*!< [27..27] Slave Address Length */ + uint32_t : 2; + __IM uint32_t SSTADV : 1; /*!< [30..30] Slave Static Address Valid */ + __IM uint32_t SDYADV : 1; /*!< [31..31] Slave Dynamic Address Valid */ + } SVDVAD1_b; + }; + + union + { + __IM uint32_t SVDVAD2; /*!< (@ 0x00000338) Slave Device Address Register 2 */ + + struct + { + uint32_t : 16; + __IM uint32_t SVAD : 10; /*!< [25..16] Slave Address */ + uint32_t : 1; + __IM uint32_t SADLG : 1; /*!< [27..27] Slave Address Length */ + uint32_t : 2; + __IM uint32_t SSTADV : 1; /*!< [30..30] Slave Static Address Valid */ + __IM uint32_t SDYADV : 1; /*!< [31..31] Slave Dynamic Address Valid */ + } SVDVAD2_b; + }; + __IM uint32_t RESERVED31[5]; + + union + { + __IOM uint32_t CSECMD; /*!< (@ 0x00000350) CCC Slave Events Command Register */ + + struct + { + __IOM uint32_t SVIRQE : 1; /*!< [0..0] Slave Interrupt Requests Enable */ + __IOM uint32_t MSRQE : 1; /*!< [1..1] Mastership Requests Enable */ + uint32_t : 1; + __IOM uint32_t HJEVE : 1; /*!< [3..3] Hot-Join Event Enable */ + uint32_t : 28; + } CSECMD_b; + }; + + union + { + __IOM uint32_t CEACTST; /*!< (@ 0x00000354) CCC Enter Activity State Register */ + + struct + { + __IOM uint32_t ACTST : 4; /*!< [3..0] Activity State */ + uint32_t : 28; + } CEACTST_b; + }; + + union + { + __IOM uint32_t CMWLG; /*!< (@ 0x00000358) CCC Max Write Length Register */ + + struct + { + __IOM uint32_t MWLG : 16; /*!< [15..0] Max Write Length */ + uint32_t : 16; + } CMWLG_b; + }; + + union + { + __IOM uint32_t CMRLG; /*!< (@ 0x0000035C) CCC Max Read Length Register */ + + struct + { + __IOM uint32_t MRLG : 16; /*!< [15..0] Max Read Length */ + __IOM uint32_t IBIPSZ : 8; /*!< [23..16] IBI Payload Size */ + uint32_t : 8; + } CMRLG_b; + }; + + union + { + __IM uint32_t CETSTMD; /*!< (@ 0x00000360) CCC Enter Test Mode Register */ + + struct + { + __IM uint32_t TSTMD : 8; /*!< [7..0] Test Mode */ + uint32_t : 24; + } CETSTMD_b; + }; + + union + { + __IOM uint32_t CGDVST; /*!< (@ 0x00000364) CCC Get Device Status Register */ + + struct + { + __IOM uint32_t PNDINT : 4; /*!< [3..0] Pending Interrupt */ + uint32_t : 1; + __IOM uint32_t PRTE : 1; /*!< [5..5] Protocol Error */ + __IOM uint32_t ACTMD : 2; /*!< [7..6] Slave Device's current Activity Mode */ + __IOM uint32_t VDRSV : 8; /*!< [15..8] Vendor Reserved */ + uint32_t : 16; + } CGDVST_b; + }; + + union + { + __IOM uint32_t CMDSPW; /*!< (@ 0x00000368) CCC Max Data Speed W (Write) Register */ + + struct + { + __IOM uint32_t MSWDR : 3; /*!< [2..0] Maximum Sustained Write Data Rate */ + uint32_t : 29; + } CMDSPW_b; + }; + + union + { + __IOM uint32_t CMDSPR; /*!< (@ 0x0000036C) CCC Max Data Speed R (Read) Register */ + + struct + { + __IOM uint32_t MSRDR : 3; /*!< [2..0] Maximum Sustained Read Data Rate */ + __IOM uint32_t CDTTIM : 3; /*!< [5..3] Clock to Data Turnaround Time (TSCO) */ + uint32_t : 26; + } CMDSPR_b; + }; + + union + { + __IOM uint32_t CMDSPT; /*!< (@ 0x00000370) CCC Max Data Speed T (Turnaround) Register */ + + struct + { + __IOM uint32_t MRTTIM : 24; /*!< [23..0] Maximum Read Turnaround Time */ + uint32_t : 7; + __IOM uint32_t MRTE : 1; /*!< [31..31] Maximum Read Turnaround Time Enable */ + } CMDSPT_b; + }; + + union + { + __IOM uint32_t CETSM; /*!< (@ 0x00000374) CCC Exchange Timing Support Information M (Mode) + * Register */ + + struct + { + __IOM uint32_t SPTSYN : 1; /*!< [0..0] Supports Sync Mode */ + __IOM uint32_t SPTASYN0 : 1; /*!< [1..1] Support Async Mode 0 */ + __IOM uint32_t SPTASYN1 : 1; /*!< [2..2] Support Async Mode 1 */ + uint32_t : 5; + __IOM uint32_t FREQ : 8; /*!< [15..8] Frequency Byte */ + __IOM uint32_t INAC : 8; /*!< [23..16] Inaccuracy Byte */ + uint32_t : 8; + } CETSM_b; + }; + + union + { + __IOM uint32_t CETSS; /*!< (@ 0x00000378) CCC Exchange Timing Support Information S (State) + * Register */ + + struct + { + __IOM uint32_t SYNE : 1; /*!< [0..0] Sync Mode Enabled */ + __IOM uint32_t ASYNE : 2; /*!< [2..1] Async Mode Enabled */ + uint32_t : 4; + __IOM uint32_t ICOVF : 1; /*!< [7..7] Internal Counter Overflow */ + uint32_t : 24; + } CETSS_b; + }; + + union + { + __IOM uint32_t CGHDRCAP; /*!< (@ 0x0000037C) CCC Get HDR Capability Register */ + + struct + { + __IOM uint32_t DDREN : 1; /*!< [0..0] HDR-DDR Operation Enable */ + __IOM uint32_t TSPEN : 1; /*!< [1..1] HDR-TSP Operation Enable */ + __IOM uint32_t TSLEN : 1; /*!< [2..2] HDR-TSL Operation Enable */ + uint32_t : 29; + } CGHDRCAP_b; + }; + + union + { + __IOM uint32_t BITCNT; /*!< (@ 0x00000380) Bit Count Register */ + + struct + { + __IOM uint32_t BCNT : 5; /*!< [4..0] Bit Counter */ + uint32_t : 2; + __OM uint32_t BCNTWP : 1; /*!< [7..7] BCNT Write Protect */ + uint32_t : 24; + } BITCNT_b; + }; + __IM uint32_t RESERVED32[4]; + + union + { + __IM uint32_t NQSTLV; /*!< (@ 0x00000394) Normal Queue Status Level Register */ + + struct + { + __IM uint32_t CMDQFLV : 8; /*!< [7..0] Normal Command Queue Free Level */ + __IM uint32_t RSPQLV : 8; /*!< [15..8] Normal Response Queue Level */ + __IM uint32_t IBIQLV : 8; /*!< [23..16] Normal IBI Queue Level */ + __IM uint32_t IBISCNT : 5; /*!< [28..24] Normal IBI Status Count */ + uint32_t : 3; + } NQSTLV_b; + }; + + union + { + __IM uint32_t NDBSTLV0; /*!< (@ 0x00000398) Normal Data Buffer Status Level Register 0 */ + + struct + { + __IM uint32_t TDBFLV : 8; /*!< [7..0] Normal Transmit Data Buffer Free Level */ + __IM uint32_t RDBLV : 8; /*!< [15..8] Normal Receive Data Buffer Level */ + uint32_t : 16; + } NDBSTLV0_b; + }; + __IM uint32_t RESERVED33[9]; + + union + { + __IM uint32_t NRSQSTLV; /*!< (@ 0x000003C0) Normal Receive Status Queue Status Level Register */ + + struct + { + __IM uint32_t RSQLV : 8; /*!< [7..0] Normal Receive Status Queue Level */ + uint32_t : 24; + } NRSQSTLV_b; + }; + + union + { + __IM uint32_t HQSTLV; /*!< (@ 0x000003C4) High Priority Queue Status Level Register */ + + struct + { + __IM uint32_t CMDQLV : 8; /*!< [7..0] High Priority Command Queue Level */ + __IM uint32_t RSPQLV : 8; /*!< [15..8] High Priority Response Queue Level */ + uint32_t : 16; + } HQSTLV_b; + }; + + union + { + __IM uint32_t HDBSTLV; /*!< (@ 0x000003C8) High Priority Data Buffer Status Level Register */ + + struct + { + __IM uint32_t TDBFLV : 8; /*!< [7..0] High Priority Tx Data Buffer Free Level */ + __IM uint32_t RDBLV : 8; /*!< [15..8] High Priority Rx Data Buffer Level */ + uint32_t : 16; + } HDBSTLV_b; + }; + + union + { + __IM uint32_t PRSTDBG; /*!< (@ 0x000003CC) Present State Debug Register */ + + struct + { + __IM uint32_t SCILV : 1; /*!< [0..0] SCL Line Signal Level */ + __IM uint32_t SDILV : 1; /*!< [1..1] SDA Line Signal Level */ + __IM uint32_t SCOLV : 1; /*!< [2..2] SCL Output Level */ + __IM uint32_t SDOLV : 1; /*!< [3..3] SDA Output Level */ + uint32_t : 28; + } PRSTDBG_b; + }; + + union + { + __IM uint32_t MSERRCNT; /*!< (@ 0x000003D0) Master Error Counters Register */ + + struct + { + __IM uint32_t M2ECNT : 8; /*!< [7..0] M2 Error Counter */ + uint32_t : 24; + } MSERRCNT_b; + }; + __IM uint32_t RESERVED34[3]; + + union + { + __IM uint32_t SC1CPT; /*!< (@ 0x000003E0) SC1 Capture monitor Register */ + + struct + { + __IM uint32_t SC1C : 16; /*!< [15..0] SC1 Capture */ + uint32_t : 16; + } SC1CPT_b; + }; + + union + { + __IM uint32_t SC2CPT; /*!< (@ 0x000003E4) SC2 Capture monitor Register */ + + struct + { + __IM uint32_t SC2C : 16; /*!< [15..0] SC2 Capture */ + uint32_t : 16; + } SC2CPT_b; + }; +} R_I3C0_Type; /*!< Size = 1000 (0x3e8) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_MMPU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Bus Master MPU (R_MPU_MMPU) + */ + +typedef struct /*!< (@ 0x40000000) R_MPU_MMPU Structure */ +{ + union + { + __IOM uint16_t OAD; /*!< (@ 0x00000000) MMPU 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 OADPT; /*!< (@ 0x00000004) MMPU Operation After Detection Protect Register */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] Write Keyword The data written to these bits are not + * stored. */ + } OADPT_b; + }; + __IM uint16_t RESERVED1; + __IM uint32_t RESERVED2[62]; + __IOM R_MPU_MMPU_GROUP_Type DMAC0; /*!< (@ 0x00000100) DMAC0 MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type DMAC1; /*!< (@ 0x00000300) DMAC1 MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type EDMAC; /*!< (@ 0x00000500) EDMAC MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type GLCDC; /*!< (@ 0x00000700) GLCDC MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type DRW; /*!< (@ 0x00000900) DRW MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type MIPI_DSI; /*!< (@ 0x00000B00) MIPI_DSI MMPU Registers */ + __IOM R_MPU_MMPU_GROUP_Type CEU; /*!< (@ 0x00000D00) CEU MMPU Registers */ +} R_MPU_MMPU_Type; /*!< Size = 3840 (0xf00) */ + +/* =========================================================================================================================== */ +/* ================ 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 /*!< (@ 0x40084000) 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_PORT0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports (R_PORT0) + */ + +typedef struct /*!< (@ 0x40080000) 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 /*!< (@ 0x40080800) R_PFS Structure */ +{ + union + { + __IOM R_PFS_PORT_Type PORT[15]; /*!< (@ 0x00000000) Port [0..14] */ + __IOM R_PFS_VLSEL_Type VLSEL; /*!< (@ 0x00000000) VLSEL */ + }; +} R_PFS_Type; /*!< Size = 960 (0x3c0) */ + +/* =========================================================================================================================== */ +/* ================ R_PMISC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief I/O Ports-MISC (R_PMISC) + */ + +typedef struct /*!< (@ 0x40080D00) 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_QSPI ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Quad Serial Peripheral Interface (R_QSPI) + */ + +typedef struct /*!< (@ 0x64000000) R_QSPI Structure */ +{ + union + { + __IOM uint32_t SFMSMD; /*!< (@ 0x00000000) Transfer Mode Control Register */ + + struct + { + __IOM uint32_t SFMRM : 3; /*!< [2..0] Serial interface read mode selection */ + uint32_t : 1; + __IOM uint32_t SFMSE : 2; /*!< [5..4] Selection of the prefetch function */ + __IOM uint32_t SFMPFE : 1; /*!< [6..6] Selection of the prefetch function */ + __IOM uint32_t SFMPAE : 1; /*!< [7..7] Selection of the function for stopping prefetch at locations + * other than on byte boundaries */ + __IOM uint32_t SFMMD3 : 1; /*!< [8..8] SPI mode selection. An initial value is determined by + * input to CFGMD3. */ + __IOM uint32_t SFMOEX : 1; /*!< [9..9] Extension of the I/O buffer output enable signal for + * the serial interface */ + __IOM uint32_t SFMOHW : 1; /*!< [10..10] Hold time adjustment for serial transmission */ + __IOM uint32_t SFMOSW : 1; /*!< [11..11] Setup time adjustment for serial transmission */ + uint32_t : 3; + __IOM uint32_t SFMCCE : 1; /*!< [15..15] Read instruction code selection. */ + uint32_t : 16; + } SFMSMD_b; + }; + + union + { + __IOM uint32_t SFMSSC; /*!< (@ 0x00000004) Chip Selection Control Register */ + + struct + { + __IOM uint32_t SFMSW : 4; /*!< [3..0] Selection of a minimum high-level width of the QSSL signal */ + __IOM uint32_t SFMSHD : 1; /*!< [4..4] QSSL signal release timing selection */ + __IOM uint32_t SFMSLD : 1; /*!< [5..5] QSSL signal output timing selection */ + uint32_t : 26; + } SFMSSC_b; + }; + + union + { + __IOM uint32_t SFMSKC; /*!< (@ 0x00000008) Clock Control Register */ + + struct + { + __IOM uint32_t SFMDV : 5; /*!< [4..0] Serial interface reference cycle selection (* Pay attention + * to the irregularity.)NOTE: When PCLKA multiplied by an + * odd number is selected, the high-level width of the SCK + * signal is longer than the low-level width by 1 x PCLKA + * before duty ratio correction. */ + __IOM uint32_t SFMDTY : 1; /*!< [5..5] Selection of a duty ratio correction function for the + * SCK signal */ + uint32_t : 26; + } SFMSKC_b; + }; + + union + { + __IM uint32_t SFMSST; /*!< (@ 0x0000000C) Status Register */ + + struct + { + __IM uint32_t PFCNT : 5; /*!< [4..0] Number of bytes of prefetched dataRange: 00000 - 10010 + * (No combination other than the above is available.) */ + uint32_t : 1; + __IM uint32_t PFFUL : 1; /*!< [6..6] Prefetch buffer state */ + __IM uint32_t PFOFF : 1; /*!< [7..7] Prefetch function operation state */ + uint32_t : 24; + } SFMSST_b; + }; + + union + { + __IOM uint32_t SFMCOM; /*!< (@ 0x00000010) Communication Port Register */ + + struct + { + __IOM uint32_t SFMD : 8; /*!< [7..0] Port for direct communication with the SPI bus.Input/output + * to and from this port is converted to a SPIbus cycle. This + * port is accessible in the direct communication mode (DCOM=1) + * only.Access to this port is ignored in the ROM access mode. */ + uint32_t : 24; + } SFMCOM_b; + }; + + union + { + __IOM uint32_t SFMCMD; /*!< (@ 0x00000014) Communication Mode Control Register */ + + struct + { + __IOM uint32_t DCOM : 1; /*!< [0..0] Selection of a mode of communication with the SPI bus */ + uint32_t : 31; + } SFMCMD_b; + }; + + union + { + __IOM uint32_t SFMCST; /*!< (@ 0x00000018) Communication Status Register */ + + struct + { + __IM uint32_t COMBSY : 1; /*!< [0..0] SPI bus cycle completion state in direct communication */ + uint32_t : 6; + __IM uint32_t EROMR : 1; /*!< [7..7] Status of ROM access detection in the direct communication + * modeNOTE: Writing of 0 only is possible. Writing of 1 is + * ignored. */ + uint32_t : 24; + } SFMCST_b; + }; + __IM uint32_t RESERVED; + + union + { + __IOM uint32_t SFMSIC; /*!< (@ 0x00000020) Instruction Code Register */ + + struct + { + __IOM uint32_t SFMCIC : 8; /*!< [7..0] Serial ROM instruction code to substitute */ + uint32_t : 24; + } SFMSIC_b; + }; + + union + { + __IOM uint32_t SFMSAC; /*!< (@ 0x00000024) Address Mode Control Register */ + + struct + { + __IOM uint32_t SFMAS : 2; /*!< [1..0] Selection the number of address bits of the serial interface */ + uint32_t : 2; + __IOM uint32_t SFM4BC : 1; /*!< [4..4] Selection of a default instruction code, when Serial + * Interface address width is selected 4 bytes. */ + uint32_t : 27; + } SFMSAC_b; + }; + + union + { + __IOM uint32_t SFMSDC; /*!< (@ 0x00000028) Dummy Cycle Control Register */ + + struct + { + __IOM uint32_t SFMDN : 4; /*!< [3..0] Selection of the number of dummy cycles of Fast Read + * instructions */ + uint32_t : 2; + __IM uint32_t SFMXST : 1; /*!< [6..6] XIP mode status */ + __IOM uint32_t SFMXEN : 1; /*!< [7..7] XIP mode permission */ + __IOM uint32_t SFMXD : 8; /*!< [15..8] Mode data for serial ROM. (Control XIP mode) */ + uint32_t : 16; + } SFMSDC_b; + }; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t SFMSPC; /*!< (@ 0x00000030) SPI Protocol Control Register */ + + struct + { + __IOM uint32_t SFMSPI : 2; /*!< [1..0] Selection of SPI protocolNOTE: Serial ROM's SPI protocol + * is required to be set by software separately. */ + uint32_t : 2; + __IOM uint32_t SFMSDE : 1; /*!< [4..4] Selection of the minimum time of input output switch, + * when Dual SPI protocol or Quad SPI protocol is selected. */ + uint32_t : 27; + } SFMSPC_b; + }; + + union + { + __IOM uint32_t SFMPMD; /*!< (@ 0x00000034) Port Control Register */ + + struct + { + uint32_t : 2; + __IOM uint32_t SFMWPL : 1; /*!< [2..2] Specify level of WP pin */ + uint32_t : 29; + } SFMPMD_b; + }; + __IM uint32_t RESERVED2[499]; + + union + { + __IOM uint32_t SFMCNT1; /*!< (@ 0x00000804) External QSPI Address Register 1 */ + + struct + { + uint32_t : 26; + __IOM uint32_t QSPI_EXT : 6; /*!< [31..26] BANK Switching AddressWhen accessing from 0x6000_0000 + * to 0x63FF_FFFF, Addres bus is Set QSPI_EXT[5:0] to high-order + * 6bits of SHADDR[31:0]NOTE: Setting 6'h3F is prihibited. */ + } SFMCNT1_b; + }; +} R_QSPI_Type; /*!< Size = 2056 (0x808) */ + +/* =========================================================================================================================== */ +/* ================ R_RTC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Realtime Clock (R_RTC) + */ + +typedef struct /*!< (@ 0x40083000) 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; + __IM uint16_t RESERVED20[8]; + __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 /*!< (@ 0x40118000) 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_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; + }; + + 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; + }; + + 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 + { + __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 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 + { + __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 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 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 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 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 */ +} R_SCI0_Type; /*!< Size = 52 (0x34) */ + +/* =========================================================================================================================== */ +/* ================ R_SPI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Peripheral Interface (R_SPI0) + */ + +typedef struct /*!< (@ 0x4011A000) 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_SSI0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Serial Sound Interface Enhanced (SSIE) (R_SSI0) + */ + +typedef struct /*!< (@ 0x4009D000) R_SSI0 Structure */ +{ + union + { + __IOM uint32_t SSICR; /*!< (@ 0x00000000) Control Register */ + + struct + { + __IOM uint32_t REN : 1; /*!< [0..0] Receive Enable */ + __IOM uint32_t TEN : 1; /*!< [1..1] Transmit Enable */ + uint32_t : 1; + __IOM uint32_t MUEN : 1; /*!< [3..3] Mute EnableNOTE: When this module is muted, the value + * of outputting serial data is rewritten to 0 but data transmission + * is not stopped. Write dummy data to the SSIFTDR not to + * generate a transmit underflow because the number of data + * in the transmit FIFO is decreasing. */ + __IOM uint32_t CKDV : 4; /*!< [7..4] Serial Oversampling Clock Division Ratio */ + __IOM uint32_t DEL : 1; /*!< [8..8] Serial Data Delay */ + __IOM uint32_t PDTA : 1; /*!< [9..9] Parallel Data Alignment */ + __IOM uint32_t SDTA : 1; /*!< [10..10] Serial Data Alignment */ + __IOM uint32_t SPDP : 1; /*!< [11..11] Serial Padding Polarity */ + __IOM uint32_t LRCKP : 1; /*!< [12..12] Serial WS Polarity */ + __IOM uint32_t BCKP : 1; /*!< [13..13] Serial Bit Clock Polarity */ + __IOM uint32_t MST : 1; /*!< [14..14] Serial WS Direction NOTE: Only the following settings + * are allowed: (SCKD, SWSD) = (0, 0) and (1, 1). Other settings + * are prohibited. */ + uint32_t : 1; + __IOM uint32_t SWL : 3; /*!< [18..16] System Word LengthSet the system word length to the + * bit clock frequency/2 fs. */ + __IOM uint32_t DWL : 3; /*!< [21..19] Data Word Length */ + __IOM uint32_t FRM : 2; /*!< [23..22] Channels */ + uint32_t : 1; + __IOM uint32_t IIEN : 1; /*!< [25..25] Idle Mode Interrupt Enable */ + __IOM uint32_t ROIEN : 1; /*!< [26..26] Receive Overflow Interrupt Enable */ + __IOM uint32_t RUIEN : 1; /*!< [27..27] Receive Underflow Interrupt Enable */ + __IOM uint32_t TOIEN : 1; /*!< [28..28] Transmit Overflow Interrupt Enable */ + __IOM uint32_t TUIEN : 1; /*!< [29..29] Transmit Underflow Interrupt Enable */ + __IOM uint32_t CKS : 1; /*!< [30..30] Oversampling Clock Select */ + uint32_t : 1; + } SSICR_b; + }; + + union + { + __IOM uint32_t SSISR; /*!< (@ 0x00000004) Status Register */ + + struct + { + __IM uint32_t IDST : 1; /*!< [0..0] Idle Mode Status Flag */ + __IM uint32_t RSWNO : 1; /*!< [1..1] Receive Serial Word Number */ + __IM uint32_t RCHNO : 2; /*!< [3..2] Receive Channel Number.These bits are read as 00b. */ + __IM uint32_t TSWNO : 1; /*!< [4..4] Transmit Serial Word Number */ + __IM uint32_t TCHNO : 2; /*!< [6..5] Transmit Channel Number */ + uint32_t : 18; + __IM uint32_t IIRQ : 1; /*!< [25..25] Idle Mode Interrupt Status Flag */ + __IOM uint32_t ROIRQ : 1; /*!< [26..26] Receive Overflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t RUIRQ : 1; /*!< [27..27] Receive Underflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t TOIRQ : 1; /*!< [28..28] Transmit Overflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + __IOM uint32_t TUIRQ : 1; /*!< [29..29] Transmit Underflow Error Interrupt Status Flag NOTE: + * Writable only to clear the flag. Confirm the value is 1 + * and then write 0. */ + uint32_t : 2; + } SSISR_b; + }; + __IM uint32_t RESERVED[2]; + + union + { + __IOM uint32_t SSIFCR; /*!< (@ 0x00000010) FIFO Control Register */ + + struct + { + __IOM uint32_t RFRST : 1; /*!< [0..0] Receive FIFO Data Register Reset */ + __IOM uint32_t TFRST : 1; /*!< [1..1] Transmit FIFO Data Register Reset */ + __IOM uint32_t RIE : 1; /*!< [2..2] Receive Interrupt Enable NOTE: RXI can be cleared by + * clearing either the RDF flag (see the description of the + * RDF bit for details) or RIE bit. */ + __IOM uint32_t TIE : 1; /*!< [3..3] Transmit Interrupt Enable NOTE: TXI can be cleared by + * clearing either the TDE flag (see the description of the + * TDE bit for details) or TIE bit. */ + __IOM uint32_t RTRG : 2; /*!< [5..4] Receive Data Trigger Number */ + __IOM uint32_t TTRG : 2; /*!< [7..6] Transmit Data Trigger Number NOTE: The values in parenthesis + * are the number of empty stages in SSIFTDR at which the + * TDE flag is set. */ + uint32_t : 3; + __IOM uint32_t BSW : 1; /*!< [11..11] Byte Swap Enable */ + uint32_t : 4; + __IOM uint32_t SSIRST : 1; /*!< [16..16] SSI soft ware reset */ + uint32_t : 14; + __IOM uint32_t AUCKE : 1; /*!< [31..31] Oversampling Clock Enable */ + } SSIFCR_b; + }; + + union + { + __IOM uint32_t SSIFSR; /*!< (@ 0x00000014) FIFO Status Register */ + + struct + { + __IOM uint32_t RDF : 1; /*!< [0..0] Receive Data Full Flag NOTE: Since the SSIFRDR register + * is a 32-byte FIFO register, the maximum number of data + * bytes that can be read from it while the RDF flag is 1 + * is indicated in the RDC[3:0] flags. If reading data from + * the SSIFRDR register is continued after all the data is + * read, undefined values will be read. */ + uint32_t : 7; + __IM uint32_t RDC : 6; /*!< [13..8] Receive Data Indicate Flag(Indicates the number of data + * units stored in SSIFRDR) */ + uint32_t : 2; + __IOM uint32_t TDE : 1; /*!< [16..16] Transmit Data Empty Flag NOTE: Since the SSIFTDR register + * is a 32-byte FIFO register, the maximum number of bytes + * that can be written to it while the TDE flag is 1 is 8 + * - TDC[3:0]. If writing data to the SSIFTDR register is + * continued after all the data is written, writing will be + * invalid and an overflow occurs. */ + uint32_t : 7; + __IM uint32_t TDC : 6; /*!< [29..24] Transmit Data Indicate Flag(Indicates the number of + * data units stored in SSIFTDR) */ + uint32_t : 2; + } SSIFSR_b; + }; + + union + { + union + { + __OM uint32_t SSIFTDR; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + + struct + { + __OM uint32_t SSIFTDR : 32; /*!< [31..0] SSIFTDR is a write-only FIFO register consisting of + * eight stages of 32-bit registers for storing data to be + * serially transmitted. NOTE: that when the SSIFTDR register + * is full of data (32 bytes), the next data cannot be written + * to it. If writing is attempted, it will be ignored and + * an overflow occurs. */ + } SSIFTDR_b; + }; + __OM uint16_t SSIFTDR16; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + __OM uint8_t SSIFTDR8; /*!< (@ 0x00000018) Transmit FIFO Data Register */ + }; + + union + { + union + { + __IM uint32_t SSIFRDR; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + + struct + { + __IM uint32_t SSIFRDR : 32; /*!< [31..0] SSIFRDR is a read-only FIFO register consisting of eight + * stages of 32-bit registers for storing serially received + * data. */ + } SSIFRDR_b; + }; + __IM uint16_t SSIFRDR16; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + __IM uint8_t SSIFRDR8; /*!< (@ 0x0000001C) Receive FIFO Data Register */ + }; + + union + { + __IOM uint32_t SSIOFR; /*!< (@ 0x00000020) Audio Format Register */ + + struct + { + __IOM uint32_t OMOD : 2; /*!< [1..0] Audio Format Select */ + uint32_t : 6; + __IOM uint32_t LRCONT : 1; /*!< [8..8] Whether to Enable LRCK/FS Continuation */ + __IOM uint32_t BCKASTP : 1; /*!< [9..9] Whether to Enable Stopping BCK Output When SSIE is in + * Idle Status */ + uint32_t : 22; + } SSIOFR_b; + }; + + union + { + __IOM uint32_t SSISCR; /*!< (@ 0x00000024) Status Control Register */ + + struct + { + __IOM uint32_t RDFS : 5; /*!< [4..0] RDF Setting Condition Select */ + uint32_t : 3; + __IOM uint32_t TDES : 5; /*!< [12..8] TDE Setting Condition Select */ + uint32_t : 19; + } SSISCR_b; + }; +} R_SSI0_Type; /*!< Size = 40 (0x28) */ + +/* =========================================================================================================================== */ +/* ================ 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 LVD1LVL : 5; /*!< [4..0] Voltage Detection 1 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 2; + __IOM uint8_t LVD1E : 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 LVD2LVL : 3; /*!< [2..0] Voltage Detection 2 Level Select (Standard voltage during + * drop in voltage) */ + uint8_t : 4; + __IOM uint8_t LVD2E : 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 /*!< (@ 0x40162000) 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_CAL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN_CAL) + */ + +typedef struct /*!< (@ 0x407FB17C) R_TSN_CAL Structure */ +{ + union + { + __IM uint32_t TSCDR; /*!< (@ 0x00000000) Temperature Sensor 32 bit Calibration Data Register */ + + struct + { + __IM uint32_t TSCDR : 32; /*!< [31..0] The 32 bit TSCDR register stores temperature sensor + * calibration converted value. */ + } TSCDR_b; + }; +} R_TSN_CAL_Type; /*!< Size = 4 (0x4) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN_CTRL ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Temperature Sensor (R_TSN_CTRL) + */ + +typedef struct /*!< (@ 0x400F3000) R_TSN_CTRL Structure */ +{ + union + { + __IOM uint8_t TSCR; /*!< (@ 0x00000000) Temperature Sensor Control Register */ + + struct + { + uint8_t : 4; + __IOM uint8_t TSOE : 1; /*!< [4..4] Temperature Sensor Enable */ + uint8_t : 2; + __IOM uint8_t TSEN : 1; /*!< [7..7] Temperature Sensor Output Enable */ + } TSCR_b; + }; +} R_TSN_CTRL_Type; /*!< Size = 1 (0x1) */ + +/* =========================================================================================================================== */ +/* ================ 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 /*!< (@ 0x40083400) 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_TZF ================ */ +/* =========================================================================================================================== */ + +/** + * @brief TrustZone Filter (R_TZF) + */ + +typedef struct /*!< (@ 0x40000E00) R_TZF Structure */ +{ + union + { + __IOM uint16_t TZFOAD; /*!< (@ 0x00000000) TrustZone Filter 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] KeyCode */ + } TZFOAD_b; + }; + __IM uint16_t RESERVED; + + union + { + __IOM uint16_t TZFPT; /*!< (@ 0x00000004) TrustZone Filter Protect Register */ + + struct + { + __IOM uint16_t PROTECT : 1; /*!< [0..0] Protection of register */ + uint16_t : 7; + __OM uint16_t KEY : 8; /*!< [15..8] KeyCode */ + } TZFPT_b; + }; +} R_TZF_Type; /*!< Size = 6 (0x6) */ + +/* =========================================================================================================================== */ +/* ================ R_CACHE ================ */ +/* =========================================================================================================================== */ + +/** + * @brief R_CACHE (R_CACHE) + */ + +typedef struct /*!< (@ 0x40007000) R_CACHE Structure */ +{ + union + { + __IOM uint32_t CCACTL; /*!< (@ 0x00000000) C-Cache Control Register */ + + struct + { + __IOM uint32_t ENC : 1; /*!< [0..0] C-Cache Enable */ + uint32_t : 31; + } CCACTL_b; + }; + + union + { + __IOM uint32_t CCAFCT; /*!< (@ 0x00000004) C-Cache Flush Control Register */ + + struct + { + __IOM uint32_t FC : 1; /*!< [0..0] C-Cache Flush */ + uint32_t : 31; + } CCAFCT_b; + }; + + union + { + __IOM uint32_t CCALCF; /*!< (@ 0x00000008) C-Cache Line Configuration Register */ + + struct + { + __IOM uint32_t CC : 2; /*!< [1..0] C-Cache Line Size */ + uint32_t : 30; + } CCALCF_b; + }; + __IM uint32_t RESERVED[13]; + + union + { + __IOM uint32_t SCACTL; /*!< (@ 0x00000040) S-Cache Control Register */ + + struct + { + __IOM uint32_t ENS : 1; /*!< [0..0] S-Cache Enable */ + uint32_t : 31; + } SCACTL_b; + }; + + union + { + __IOM uint32_t SCAFCT; /*!< (@ 0x00000044) S-Cache Flush Control Register */ + + struct + { + __IOM uint32_t FS : 1; /*!< [0..0] S-Cache Flush */ + uint32_t : 31; + } SCAFCT_b; + }; + + union + { + __IOM uint32_t SCALCF; /*!< (@ 0x00000048) S-Cache Line Configuration Register */ + + struct + { + __IOM uint32_t CS : 2; /*!< [1..0] S-Cache Line Size */ + uint32_t : 30; + } SCALCF_b; + }; + __IM uint32_t RESERVED1[109]; + + union + { + __IOM uint32_t CAPOAD; /*!< (@ 0x00000200) Cache Parity Error Operation After Detection + * Register */ + + struct + { + __IOM uint32_t OAD : 1; /*!< [0..0] Operation after Detection */ + uint32_t : 31; + } CAPOAD_b; + }; + + union + { + __IOM uint32_t CAPRCR; /*!< (@ 0x00000204) Cache Protection Register */ + + struct + { + __IOM uint32_t PRCR : 1; /*!< [0..0] Register Write Control */ + __IOM uint32_t KW : 7; /*!< [7..1] Write key code */ + uint32_t : 24; + } CAPRCR_b; + }; +} R_CACHE_Type; /*!< Size = 520 (0x208) */ + +/* =========================================================================================================================== */ +/* ================ R_CPSCU ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CPU System Security Control Unit (R_CPSCU) + */ + +typedef struct /*!< (@ 0x40008000) R_CPSCU Structure */ +{ + union + { + __IOM uint32_t CSAR; /*!< (@ 0x00000000) Cache Security Attribution Register */ + + struct + { + __IOM uint32_t CACHESA : 1; /*!< [0..0] Security Attributes of Registers for Cache Control */ + __IOM uint32_t CACHELSA : 1; /*!< [1..1] Security Attributes of Registers for Cache Line Configuration */ + __IOM uint32_t CACHEESA : 1; /*!< [2..2] Security Attributes of Registers for Cache Error */ + uint32_t : 29; + } CSAR_b; + }; + __IM uint32_t RESERVED[3]; + + union + { + __IOM uint32_t SRAMSAR; /*!< (@ 0x00000010) SRAM Security Attribution Register */ + + struct + { + __IOM uint32_t SRAMSA0 : 1; /*!< [0..0] Security attributes of registers for SRAM Protection */ + __IOM uint32_t SRAMSA1 : 1; /*!< [1..1] Security attributes of registers for SRAM Protection + * 2 */ + __IOM uint32_t SRAMSA2 : 1; /*!< [2..2] Security attributes of registers for ECC Relation */ + uint32_t : 29; + } SRAMSAR_b; + }; + + union + { + __IOM uint32_t STBRAMSAR; /*!< (@ 0x00000014) Standby RAM memory Security Attribution Register */ + + struct + { + __IOM uint32_t NSBSTBR : 4; /*!< [3..0] Security attributes of each region for Standby RAM */ + uint32_t : 28; + } STBRAMSAR_b; + }; + __IM uint32_t RESERVED1[6]; + + union + { + __IOM uint32_t DTCSAR; /*!< (@ 0x00000030) DTC Controller Security Attribution Register */ + + struct + { + __IOM uint32_t DTCSTSA : 1; /*!< [0..0] DTC Security Attribution */ + uint32_t : 31; + } DTCSAR_b; + }; + + union + { + __IOM uint32_t DMACSAR; /*!< (@ 0x00000034) DMAC Controller Security Attribution Register */ + + struct + { + __IOM uint32_t DMASTSA : 1; /*!< [0..0] DMAST Security Attribution */ + uint32_t : 31; + } DMACSAR_b; + }; + __IM uint32_t RESERVED2[2]; + + union + { + __IOM uint32_t ICUSARA; /*!< (@ 0x00000040) ICU Security Attribution Register A */ + + struct + { + __IOM uint32_t SAIRQCRn : 16; /*!< [15..0] Security Attributes of registers for the IRQCRn registers */ + uint32_t : 16; + } ICUSARA_b; + }; + + union + { + __IOM uint32_t ICUSARB; /*!< (@ 0x00000044) ICU Security Attribution Register B */ + + struct + { + __IOM uint32_t SANMI : 1; /*!< [0..0] Security Attributes of nonmaskable interrupt */ + uint32_t : 31; + } ICUSARB_b; + }; + + union + { + __IOM uint32_t ICUSARC; /*!< (@ 0x00000048) ICU Security Attribution Register C */ + + struct + { + __IOM uint32_t SADMACn : 8; /*!< [7..0] Security Attributes of registers for DMAC channel */ + uint32_t : 24; + } ICUSARC_b; + }; + + union + { + __IOM uint32_t ICUSARD; /*!< (@ 0x0000004C) ICU Security Attribution Register D */ + + struct + { + __IOM uint32_t SASELSR0 : 1; /*!< [0..0] Security Attributes of registers for SELSR0 */ + uint32_t : 31; + } ICUSARD_b; + }; + + union + { + __IOM uint32_t ICUSARE; /*!< (@ 0x00000050) ICU Security Attribution Register E */ + + struct + { + uint32_t : 16; + __IOM uint32_t SAIWDTWUP : 1; /*!< [16..16] Security Attributes of registers for WUPEN0.b 16 */ + uint32_t : 1; + __IOM uint32_t SALVD1WUP : 1; /*!< [18..18] Security Attributes of registers for WUPEN0.b 18 */ + __IOM uint32_t SALVD2WUP : 1; /*!< [19..19] Security Attributes of registers for WUPEN0.b 19 */ + __IOM uint32_t SAVBATTWUP : 1; /*!< [20..20] Security Attributes of registers for WUPEN0.b 20 */ + uint32_t : 2; + __IOM uint32_t SAACMPLP0WUP : 1; /*!< [23..23] Security attributes of registers for WUPEN0.b 23 */ + __IOM uint32_t SARTCALMWUP : 1; /*!< [24..24] Security Attributes of registers for WUPEN0.b 24 */ + __IOM uint32_t SARTCPRDWUP : 1; /*!< [25..25] Security Attributes of registers for WUPEN0.b 25 */ + uint32_t : 1; + __IOM uint32_t SAUSBFS0WUP : 1; /*!< [27..27] Security Attributes of registers for WUPEN0.b 27 */ + __IOM uint32_t SAAGT1UDWUP : 1; /*!< [28..28] Security Attributes of registers for WUPEN0.b 28 */ + __IOM uint32_t SAAGT1CAWUP : 1; /*!< [29..29] Security Attributes of registers for WUPEN0.b 29 */ + __IOM uint32_t SAAGT1CBWUP : 1; /*!< [30..30] Security Attributes of registers for WUPEN0.b 30 */ + __IOM uint32_t SAIIC0WUP : 1; /*!< [31..31] Security Attributes of registers for WUPEN0.b 31 */ + } ICUSARE_b; + }; + + union + { + __IOM uint32_t ICUSARF; /*!< (@ 0x00000054) ICU Security Attribution Register F */ + + struct + { + __IOM uint32_t SAAGT3UDWUP : 1; /*!< [0..0] Security Attributes of registers for WUPEN1.b 0 */ + __IOM uint32_t SAAGT3CAWUP : 1; /*!< [1..1] Security Attributes of registers for WUPEN1.b 1 */ + __IOM uint32_t SAAGT3CBWUP : 1; /*!< [2..2] Security Attributes of registers for WUPEN1.b 2 */ + __IOM uint32_t SACOMPHS0WUP : 1; /*!< [3..3] Security attributes of registers for WUPEN1.b 3 */ + uint32_t : 3; + __IOM uint32_t SASOSCWUP : 1; /*!< [7..7] Security attributes of registers for WUPEN1.b 7 */ + __IOM uint32_t SAULP0UWUP : 1; /*!< [8..8] Security attributes of registers for WUPEN1.b 8 */ + __IOM uint32_t SAULP0AWUP : 1; /*!< [9..9] Security attributes of registers for WUPEN1.b 9 */ + __IOM uint32_t SAULP0BWUP : 1; /*!< [10..10] Security Attributes of registers for WUPEN1.b 10 */ + __IOM uint32_t SAI3CWUP : 1; /*!< [11..11] Security Attributes of registers for WUPEN1.b 11 */ + __IOM uint32_t SAULP1UWUP : 1; /*!< [12..12] Security Attributes of registers for WUPEN1.b 12 */ + __IOM uint32_t SAULP1AWUP : 1; /*!< [13..13] Security Attributes of registers for WUPEN1.b 13 */ + __IOM uint32_t SAULP1BWUP : 1; /*!< [14..14] Security Attributes of registers for WUPEN1.b 14 */ + uint32_t : 17; + } ICUSARF_b; + }; + + union + { + __IOM uint32_t ICUSARM; /*!< (@ 0x00000058) ICU Security Attribution Register M */ + + struct + { + __IOM uint32_t SAINTUR0WUP : 1; /*!< [0..0] Security attributes of registers for WUPEN2.b 0 */ + __IOM uint32_t SAINTURE0WUP : 1; /*!< [1..1] Security attributes of registers for WUPEN2.b 1 */ + __IOM uint32_t SAINTUR1WUP : 1; /*!< [2..2] Security attributes of registers for WUPEN2.b 2 */ + __IOM uint32_t SAINTURE1WUP : 1; /*!< [3..3] Security attributes of registers for WUPEN2.b 3 */ + uint32_t : 28; + } ICUSARM_b; + }; + __IM uint32_t RESERVED3[5]; + + union + { + __IOM uint32_t ICUSARG; /*!< (@ 0x00000070) ICU Security Attribution Register G */ + + struct + { + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR31 to IELSR0 */ + } ICUSARG_b; + }; + + union + { + __IOM uint32_t ICUSARH; /*!< (@ 0x00000074) ICU Security Attribution Register H */ + + struct + { + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR63 to IELSR32 */ + } ICUSARH_b; + }; + + union + { + __IOM uint32_t ICUSARI; /*!< (@ 0x00000078) ICU Security Attribution Register I */ + + struct + { + __IOM uint32_t SAIELSRn : 32; /*!< [31..0] Security Attributes of registers for IELSR95 to IELSR64 */ + } ICUSARI_b; + }; + __IM uint32_t RESERVED4[33]; + + union + { + __IOM uint32_t BUSSARA; /*!< (@ 0x00000100) Bus Security Attribution Register A */ + + struct + { + __IOM uint32_t BUSSA0 : 1; /*!< [0..0] BUS Security Attribution A0 */ + uint32_t : 31; + } BUSSARA_b; + }; + + union + { + __IOM uint32_t BUSSARB; /*!< (@ 0x00000104) Bus Security Attribution Register B */ + + struct + { + __IOM uint32_t BUSSB0 : 1; /*!< [0..0] BUS Security Attribution B0 */ + uint32_t : 31; + } BUSSARB_b; + }; + __IM uint32_t RESERVED5[2]; + + union + { + __IOM uint32_t BUSSARC; /*!< (@ 0x00000110) Bus Security Attribution Register C */ + + struct + { + __IOM uint32_t BUSSC0 : 1; /*!< [0..0] Bus Security Attribution C0 */ + uint32_t : 31; + } BUSSARC_b; + }; + + union + { + __IOM uint32_t BUSPARC; /*!< (@ 0x00000114) Bus Privileged Attribution Register C */ + + struct + { + __IOM uint32_t BUSPA0 : 1; /*!< [0..0] External bus controller privilege attribution */ + uint32_t : 31; + } BUSPARC_b; + }; + __IM uint32_t RESERVED6[6]; + + union + { + __IOM uint32_t MMPUSARA; /*!< (@ 0x00000130) Master Memory Protection Unit Security Attribution + * Register A */ + + struct + { + __IOM uint32_t MMPUAnSA : 8; /*!< [7..0] MMPUAn Security Attribution (n = 0 to 7) */ + uint32_t : 24; + } MMPUSARA_b; + }; + + union + { + __IOM uint32_t MMPUSARB; /*!< (@ 0x00000134) Master Memory Protection Unit Security Attribution + * Register B */ + + struct + { + __IOM uint32_t MMPUB0SA : 1; /*!< [0..0] MMPUB0 Security Attribution */ + uint32_t : 31; + } MMPUSARB_b; + }; + __IM uint32_t RESERVED7[18]; + + union + { + union + { + __IOM uint32_t TZFSAR; /*!< (@ 0x00000180) TrustZone Filter Security Attribution Register */ + + struct + { + __IOM uint32_t TZFSA0 : 1; /*!< [0..0] Security attributes of registers for TrustZone Filter */ + uint32_t : 31; + } TZFSAR_b; + }; + + union + { + __IOM uint32_t DEBUGSAR; /*!< (@ 0x00000180) Debug Security Attribution Register */ + + struct + { + __IOM uint32_t DBGSA0 : 1; /*!< [0..0] Debug Resources Security Attribution 0 */ + uint32_t : 31; + } DEBUGSAR_b; + }; + }; + __IM uint32_t RESERVED8[7]; + + union + { + __IOM uint32_t DMACCHSAR; /*!< (@ 0x000001A0) DMA channel Security Attribution Register */ + + struct + { + __IOM uint32_t DMACCHSARn : 8; /*!< [7..0] Security attributes of output and registers for DMAC + * channel */ + uint32_t : 24; + } DMACCHSAR_b; + }; + __IM uint32_t RESERVED9[3]; + + union + { + __IOM uint32_t CPUDSAR; /*!< (@ 0x000001B0) CPU Debug Security Attribution Register */ + + struct + { + __IOM uint32_t CPUDSA0 : 1; /*!< [0..0] CPU Debug Security Attribution 0 */ + uint32_t : 31; + } CPUDSAR_b; + }; + __IM uint32_t RESERVED10[147]; + + union + { + __IOM uint32_t SRAMSABAR0; /*!< (@ 0x00000400) SRAM Security Attribute Boundary Address Register + * 0 */ + + struct + { + uint32_t : 13; + __IOM uint32_t SRAMSABAR : 8; /*!< [20..13] Boundary address between secure and non-secure (Start + * address of non-secure region). */ + uint32_t : 11; + } SRAMSABAR0_b; + }; + + union + { + __IOM uint32_t SRAMSABAR1; /*!< (@ 0x00000404) SRAM Security Attribute Boundary Address Register + * 1 */ + + struct + { + uint32_t : 13; + __IOM uint32_t SRAMSABAR : 8; /*!< [20..13] Boundary address between secure and non-secure (Start + * address of non-secure region). */ + uint32_t : 11; + } SRAMSABAR1_b; + }; + __IM uint32_t RESERVED11[126]; + + union + { + __IOM uint32_t TEVTRCR; /*!< (@ 0x00000600) Trusted Event Route Control Register */ + + struct + { + __IOM uint32_t TEVTE : 1; /*!< [0..0] Trusted Event Route Control Register for IELSRn, DELSRn + * and ELCSRn */ + uint32_t : 31; + } TEVTRCR_b; + }; +} R_CPSCU_Type; /*!< Size = 1540 (0x604) */ + +/* =========================================================================================================================== */ +/* ================ R_CEC ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Consumer Electronics Control (R_CEC) + */ + +typedef struct /*!< (@ 0x400AC000) R_CEC Structure */ +{ + union + { + __IOM uint16_t CADR; /*!< (@ 0x00000000) CEC Local Address Setting Register */ + + struct + { + __IOM uint16_t ADR00 : 1; /*!< [0..0] Local Address at Address 0 (TV) */ + __IOM uint16_t ADR01 : 1; /*!< [1..1] Local Address Setting at Address 1 (recording device + * 1) */ + __IOM uint16_t ADR02 : 1; /*!< [2..2] Local Address Setting at Address 2 (recording device + * 2) */ + __IOM uint16_t ADR03 : 1; /*!< [3..3] Local Address Setting at Address 3 (tuner 1) */ + __IOM uint16_t ADR04 : 1; /*!< [4..4] Local Address Setting at Address 4 (playback device 1) */ + __IOM uint16_t ADR05 : 1; /*!< [5..5] Local Address Setting at Address 5 (audio system) */ + __IOM uint16_t ADR06 : 1; /*!< [6..6] Local Address Setting at Address 6 (tuner 2) */ + __IOM uint16_t ADR07 : 1; /*!< [7..7] Local Address Setting at Address 7 (tuner 3) */ + __IOM uint16_t ADR08 : 1; /*!< [8..8] Local Address Setting at Address 8 (playback device 2) */ + __IOM uint16_t ADR09 : 1; /*!< [9..9] Local Address Setting at Address 9 (recording device + * 3) */ + __IOM uint16_t ADR10 : 1; /*!< [10..10] Local Address Setting at Address 10 (tuner 4) */ + __IOM uint16_t ADR11 : 1; /*!< [11..11] Local Address Setting at Address 11 (playback device + * 3) */ + __IOM uint16_t ADR12 : 1; /*!< [12..12] Local Address Setting at Address 12 (reserved) */ + __IOM uint16_t ADR13 : 1; /*!< [13..13] Local Address Setting at Address 13 (reserved) */ + __IOM uint16_t ADR14 : 1; /*!< [14..14] Local Address Setting at Address 14 (specific use) */ + uint16_t : 1; + } CADR_b; + }; + + union + { + __IOM uint8_t CECCTL1; /*!< (@ 0x00000002) CEC Control Register 1 */ + + struct + { + __IOM uint8_t SFT : 2; /*!< [1..0] Signal-Free Time Data Bit Width Select */ + __IOM uint8_t CESEL : 2; /*!< [3..2] Communication Complete Interrupt (INTCE) Generation Timing + * Select */ + __IOM uint8_t STERRD : 1; /*!< [4..4] Start Bit Error Detection Select */ + __IOM uint8_t BLERRD : 1; /*!< [5..5] Bus Lock Detection Select */ + __IOM uint8_t CINTMK : 1; /*!< [6..6] CEC Data Interrupt (INTDA) Generation Select */ + __IOM uint8_t CDFC : 1; /*!< [7..7] Digital Filter Select */ + } CECCTL1_b; + }; + __IM uint8_t RESERVED; + + union + { + __IOM uint16_t STATB; /*!< (@ 0x00000004) CEC Transmission Start Bit Width Setting Register */ + + struct + { + __IOM uint16_t STATB : 9; /*!< [8..0] CEC Transmission Start Bit Width Setting */ + uint16_t : 7; + } STATB_b; + }; + + union + { + __IOM uint16_t STATL; /*!< (@ 0x00000006) CEC Transmission Start Bit Low Width Setting + * Register */ + + struct + { + __IOM uint16_t STATL : 9; /*!< [8..0] CEC Transmission Start Bit Low Width Setting */ + uint16_t : 7; + } STATL_b; + }; + + union + { + __IOM uint16_t LGC0L; /*!< (@ 0x00000008) CEC Transmission Logical 0 Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC0L : 9; /*!< [8..0] CEC Transmission Logical 0 Low Width Setting */ + uint16_t : 7; + } LGC0L_b; + }; + + union + { + __IOM uint16_t LGC1L; /*!< (@ 0x0000000A) CEC Transmission Logical 1 Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC1L : 9; /*!< [8..0] CEC Transmission Logical 1 Low Width Setting */ + uint16_t : 7; + } LGC1L_b; + }; + + union + { + __IOM uint16_t DATB; /*!< (@ 0x0000000C) CEC Transmission Data Bit Width Setting Register */ + + struct + { + __IOM uint16_t DATB : 9; /*!< [8..0] CEC Transmission Data Bit Width Setting */ + uint16_t : 7; + } DATB_b; + }; + + union + { + __IOM uint16_t NOMT; /*!< (@ 0x0000000E) CEC Reception Data Sampling Time Setting Register */ + + struct + { + __IOM uint16_t NOMT : 9; /*!< [8..0] CEC Reception Data Sampling Time Setting, */ + uint16_t : 7; + } NOMT_b; + }; + + union + { + __IOM uint16_t STATLL; /*!< (@ 0x00000010) CEC Reception Start Bit Minimum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t STATLL : 9; /*!< [8..0] CEC Reception Start Bit Minimum Low Width Setting */ + uint16_t : 7; + } STATLL_b; + }; + + union + { + __IOM uint16_t STATLH; /*!< (@ 0x00000012) CEC Reception Start Bit Maximum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t STATLH : 9; /*!< [8..0] CEC Reception Start Bit Maximum Bit Width Setting */ + uint16_t : 7; + } STATLH_b; + }; + + union + { + __IOM uint16_t STATBL; /*!< (@ 0x00000014) CEC Reception Start Bit Minimum Bit Width Setting + * Register */ + + struct + { + __IOM uint16_t STATBL : 9; /*!< [8..0] CEC Reception Start Bit Minimum Bit Width Setting */ + uint16_t : 7; + } STATBL_b; + }; + + union + { + __IOM uint16_t STATBH; /*!< (@ 0x00000016) CEC Reception Start Bit Maximum Bit Width Setting + * Register */ + + struct + { + __IOM uint16_t STATBH : 9; /*!< [8..0] CEC Reception Start Bit Maximum Bit Width Setting */ + uint16_t : 7; + } STATBH_b; + }; + + union + { + __IOM uint16_t LGC0LL; /*!< (@ 0x00000018) CEC Reception Logical 0 Minimum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC0LL : 9; /*!< [8..0] CEC Reception Logical 0 Minimum Low Width Setting */ + uint16_t : 7; + } LGC0LL_b; + }; + + union + { + __IOM uint16_t LGC0LH; /*!< (@ 0x0000001A) CEC Reception Logical 0 Maximum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC0LH : 9; /*!< [8..0] CEC Reception Logical 0 Minimum Low Width Setting */ + uint16_t : 7; + } LGC0LH_b; + }; + + union + { + __IOM uint16_t LGC1LL; /*!< (@ 0x0000001C) CEC Reception Logical 1 Minimum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC1LL : 9; /*!< [8..0] CEC Reception Logical 1 Minimum Low Width Setting */ + uint16_t : 7; + } LGC1LL_b; + }; + + union + { + __IOM uint16_t LGC1LH; /*!< (@ 0x0000001E) CEC Reception Logical 1 Maximum Low Width Setting + * Register */ + + struct + { + __IOM uint16_t LGC1LH : 9; /*!< [8..0] CEC Reception Logical 1 Maximum Low Width Setting */ + uint16_t : 7; + } LGC1LH_b; + }; + + union + { + __IOM uint16_t DATBL; /*!< (@ 0x00000020) CEC Reception Data Bit Minimum Bit Width Setting + * Register */ + + struct + { + __IOM uint16_t DATBL : 9; /*!< [8..0] CEC Reception Data Bit Minimum Bit Width Setting */ + uint16_t : 7; + } DATBL_b; + }; + + union + { + __IOM uint16_t DATBH; /*!< (@ 0x00000022) CEC Reception Data Bit Maximum Bit Width Setting + * Register */ + + struct + { + __IOM uint16_t DATBH : 9; /*!< [8..0] CEC Reception Data Bit Maximum Bit Width Setting */ + uint16_t : 7; + } DATBH_b; + }; + + union + { + __IOM uint16_t NOMP; /*!< (@ 0x00000024) CEC Data Bit Reference Width Setting Register */ + + struct + { + __IOM uint16_t NOMP : 9; /*!< [8..0] CEC Data Bit Reference Width Setting */ + uint16_t : 7; + } NOMP_b; + }; + __IM uint16_t RESERVED1; + + union + { + __IOM uint8_t CECEXMD; /*!< (@ 0x00000028) CEC Extension Mode Register */ + + struct + { + uint8_t : 4; + __IOM uint8_t LERPLEN : 1; /*!< [4..4] Pulse Output Function Enable by Long Bit Width Error */ + __IOM uint8_t RERCVEN : 1; /*!< [5..5] Start Detection Reception Restart Enable */ + uint8_t : 1; + __IOM uint8_t RCVINTDSEL : 1; /*!< [7..7] INTDA Reception Interrupt Timing Change */ + } CECEXMD_b; + }; + __IM uint8_t RESERVED2; + + union + { + __IOM uint8_t CECEXMON; /*!< (@ 0x0000002A) CEC Extension Monitor Register */ + + struct + { + __IM uint8_t CECLNMON : 1; /*!< [0..0] CEC Line Monitor */ + __IM uint8_t ACKF : 1; /*!< [1..1] ACK Flag */ + uint8_t : 6; + } CECEXMON_b; + }; + __IM uint8_t RESERVED3; + __IM uint16_t RESERVED4[10]; + __IOM uint8_t CTXD; /*!< (@ 0x00000040) CEC Transmission Buffer Register */ + __IOM uint8_t CRXD; /*!< (@ 0x00000041) CEC Reception Buffer Register */ + + union + { + __IOM uint8_t CECES; /*!< (@ 0x00000042) CEC Communication Error Status Register */ + + struct + { + __IM uint8_t OERR : 1; /*!< [0..0] Overrun Error Detection Flag */ + __IM uint8_t UERR : 1; /*!< [1..1] Underrun Error Detection Flag */ + __IM uint8_t ACKERR : 1; /*!< [2..2] ACK Error Detection Flag */ + __IM uint8_t TERR : 1; /*!< [3..3] Timing Error Detection Flag */ + __IM uint8_t TXERR : 1; /*!< [4..4] Transmission Error Detection Flag */ + __IM uint8_t AERR : 1; /*!< [5..5] Arbitration Loss Detection Flag */ + __IM uint8_t BLERR : 1; /*!< [6..6] Bus Lock Error Detection Flag */ + uint8_t : 1; + } CECES_b; + }; + + union + { + __IOM uint8_t CECS; /*!< (@ 0x00000043) CEC Communication Status Register */ + + struct + { + __IM uint8_t ADRF : 1; /*!< [0..0] Address Match Detection Flag */ + __IM uint8_t BUSST : 1; /*!< [1..1] Bus Busy Detection Flag */ + __IM uint8_t TXST : 1; /*!< [2..2] Transmission Status Flag */ + __IM uint8_t EOMF : 1; /*!< [3..3] EOM Flag */ + __IM uint8_t ITCEF : 1; /*!< [4..4] INTCE Generation Source Flag */ + uint8_t : 2; + __IM uint8_t SFTST : 1; /*!< [7..7] Signal-Free Time Rewrite Disable Report Flag */ + } CECS_b; + }; + + union + { + __IOM uint8_t CECFC; /*!< (@ 0x00000044) CEC Communication Error Flag Clear Trigger Register */ + + struct + { + __OM uint8_t OCTRG : 1; /*!< [0..0] Overrun Error Detection Flag Clear Trigger */ + __OM uint8_t UCTRG : 1; /*!< [1..1] Underrun Error Detection Flag Clear Trigger */ + __OM uint8_t ACKCTRG : 1; /*!< [2..2] ACK Error Detection Flag Clear Trigger */ + __OM uint8_t TCTRG : 1; /*!< [3..3] Timing Error Detection Flag Clear Trigger */ + __OM uint8_t TXCTRG : 1; /*!< [4..4] Transmission Error Detection Flag Clear Trigger */ + __OM uint8_t ACTRG : 1; /*!< [5..5] Arbitration Loss Detection Flag Clear Trigger */ + __OM uint8_t BLCTRG : 1; /*!< [6..6] Bus Lock Error Detection Flag Clear Trigger */ + uint8_t : 1; + } CECFC_b; + }; + + union + { + __IOM uint8_t CECCTL0; /*!< (@ 0x00000045) CEC Control Register 0 */ + + struct + { + __IOM uint8_t EOM : 1; /*!< [0..0] EOM Setting */ + __IOM uint8_t CECRXEN : 1; /*!< [1..1] Reception Enable Control */ + __OM uint8_t TXTRG : 1; /*!< [2..2] Transmission Start Trigger */ + __IOM uint8_t CCL : 3; /*!< [5..3] CEC Clock (CECCLK) Select */ + __IOM uint8_t ACKTEN : 1; /*!< [6..6] ACK Bit Timing Error (Bit Width) Check Enable */ + __IOM uint8_t CECE : 1; /*!< [7..7] CEC Operation Enable Flag */ + } CECCTL0_b; + }; +} R_CEC_Type; /*!< Size = 70 (0x46) */ + +/* =========================================================================================================================== */ +/* ================ R_AGTX0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Asynchronous General Purpose Timer (R_AGTX0) + */ + +typedef struct /*!< (@ 0x400E8000) 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) */ + +/* =========================================================================================================================== */ +/* ================ R_ECCMB0 ================ */ +/* =========================================================================================================================== */ + +/** + * @brief CANFD ECC (R_ECCMB0) + */ + +typedef struct /*!< (@ 0x4036F200) R_ECCMB0 Structure */ +{ + union + { + __IOM uint32_t EC710CTL; /*!< (@ 0x00000000) ECC Control Register */ + + struct + { + __IM uint32_t ECEMF : 1; /*!< [0..0] ECC Error Message Flag */ + __IM uint32_t ECER1F : 1; /*!< [1..1] ECC Error Detection and Correction Flag */ + __IM uint32_t ECER2F : 1; /*!< [2..2] 2-bit ECC Error Detection Flag */ + __IOM uint32_t EC1EDIC : 1; /*!< [3..3] ECC 1-bit Error Detection Interrupt Control */ + __IOM uint32_t EC2EDIC : 1; /*!< [4..4] ECC 2-bit Error Detection Interrupt Control */ + __IOM uint32_t EC1ECP : 1; /*!< [5..5] ECC 1-bit Error Correction Permission */ + __IOM uint32_t ECERVF : 1; /*!< [6..6] ECC Error Judgment Enable Flag */ + uint32_t : 2; + __IOM uint32_t ECER1C : 1; /*!< [9..9] Accumulating ECC Error Detection and Correction Flag + * Clear */ + __IOM uint32_t ECER2C : 1; /*!< [10..10] 2-bit ECC Error Detection Flag Clear */ + __IM uint32_t ECOVFF : 1; /*!< [11..11] ECC Overflow Detection Flag */ + uint32_t : 2; + __IOM uint32_t EMCA : 2; /*!< [15..14] Access Control to ECC Mode Select bit */ + __IM uint32_t ECSEDF0 : 1; /*!< [16..16] ECC Single bit Error Address Detection Flag */ + __IM uint32_t ECDEDF0 : 1; /*!< [17..17] ECC Dual Bit Error Address Detection Flag */ + uint32_t : 14; + } EC710CTL_b; + }; + + union + { + __IOM uint16_t EC710TMC; /*!< (@ 0x00000004) ECC Test Mode Control Register */ + + struct + { + uint16_t : 1; + __IOM uint16_t ECDCS : 1; /*!< [1..1] ECC Decode Input Select */ + uint16_t : 5; + __IOM uint16_t ECTMCE : 1; /*!< [7..7] ECC Test Mode Control Enable */ + uint16_t : 6; + __IOM uint16_t ETMA : 2; /*!< [15..14] ECC Test Mode Bit Access Control */ + } EC710TMC_b; + }; + __IM uint16_t RESERVED; + __IM uint32_t RESERVED1; + + union + { + __IOM uint32_t EC710TED; /*!< (@ 0x0000000C) ECC Test Substitute Data Register */ + + struct + { + __IOM uint32_t ECEDB : 32; /*!< [31..0] ECC Test Substitute Data */ + } EC710TED_b; + }; + + union + { + __IM uint32_t EC710EAD0; /*!< (@ 0x00000010) ECC Error Address Register */ + + struct + { + __IM uint32_t ECEAD : 10; /*!< [9..0] ECC Error Address */ + uint32_t : 22; + } EC710EAD0_b; + }; +} R_ECCMB0_Type; /*!< Size = 20 (0x14) */ + +/* =========================================================================================================================== */ +/* ================ R_FLAD ================ */ +/* =========================================================================================================================== */ + +/** + * @brief Data Flash (R_FLAD) + */ + +typedef struct /*!< (@ 0x407FC000) R_FLAD Structure */ +{ + __IM uint8_t RESERVED[64]; + + union + { + __IOM uint8_t FCKMHZ; /*!< (@ 0x00000040) Data Flash Access Frequency Register */ + + struct + { + __IOM uint8_t FCKMHZ : 8; /*!< [7..0] Data Flash Access Frequency Register */ + } FCKMHZ_b; + }; +} R_FLAD_Type; /*!< Size = 65 (0x41) */ + +/** @} */ /* End of group Device_Peripheral_peripherals */ + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + + #define R_ADC0_BASE 0x40170000UL + #define R_ADC1_BASE 0x40170200UL + #define R_PSCU_BASE 0x400E0000UL + #define R_BUS_BASE 0x40003000UL + #define R_CAC_BASE 0x40083600UL + #define R_CANFD_BASE 0x400B0000UL + #define R_CANFD1_BASE 0x400B2000UL + #define R_CRC_BASE 0x40108000UL + #define R_DAC_BASE 0x40171000UL + #define R_DEBUG_BASE 0x4001B000UL + #define R_DMA_BASE 0x40005200UL + #define R_DMAC0_BASE 0x40005000UL + #define R_DMAC1_BASE 0x40005040UL + #define R_DMAC2_BASE 0x40005080UL + #define R_DMAC3_BASE 0x400050C0UL + #define R_DMAC4_BASE 0x40005100UL + #define R_DMAC5_BASE 0x40005140UL + #define R_DMAC6_BASE 0x40005180UL + #define R_DMAC7_BASE 0x400051C0UL + #define R_DOC_BASE 0x40109000UL + #define R_DTC_BASE 0x40005400UL + #define R_ELC_BASE 0x40082000UL + #define R_FACI_HP_CMD_BASE 0x407E0000UL + #define R_FACI_HP_BASE 0x407FE000UL + #define R_FCACHE_BASE 0x4001C000UL + #define R_GPT0_BASE 0x40169000UL + #define R_GPT1_BASE 0x40169100UL + #define R_GPT2_BASE 0x40169200UL + #define R_GPT3_BASE 0x40169300UL + #define R_GPT4_BASE 0x40169400UL + #define R_GPT5_BASE 0x40169500UL + #define R_GPT6_BASE 0x40169600UL + #define R_GPT7_BASE 0x40169700UL + #define R_GPT8_BASE 0x40169800UL + #define R_GPT9_BASE 0x40169900UL + #define R_GPT10_BASE 0x40169A00UL + #define R_GPT11_BASE 0x40169B00UL + #define R_GPT12_BASE 0x40169C00UL + #define R_GPT13_BASE 0x40169D00UL + #define R_GPT_OPS_BASE 0x40169A00UL + #define R_GPT_POEG0_BASE 0x4008A000UL + #define R_GPT_POEG1_BASE 0x4008A100UL + #define R_GPT_POEG2_BASE 0x4008A200UL + #define R_GPT_POEG3_BASE 0x4008A300UL + #define R_ICU_BASE 0x40006000UL + #define R_IIC0_BASE 0x4009F000UL + #define R_IIC1_BASE 0x4009F100UL + #define R_IIC2_BASE 0x4009F200UL + #define R_IWDT_BASE 0x40083200UL + #define R_I3C0_BASE 0x4011F000UL + #define R_I3C1_BASE 0x4011F400UL + #define R_MPU_MMPU_BASE 0x40000000UL + #define R_MPU_SPMON_BASE 0x40000D00UL + #define R_MSTP_BASE 0x40084000UL + #define R_PORT0_BASE 0x40080000UL + #define R_PORT1_BASE 0x40080020UL + #define R_PORT2_BASE 0x40080040UL + #define R_PORT3_BASE 0x40080060UL + #define R_PORT4_BASE 0x40080080UL + #define R_PORT5_BASE 0x400800A0UL + #define R_PORT6_BASE 0x400800C0UL + #define R_PORT7_BASE 0x400800E0UL + #define R_PORT8_BASE 0x40080100UL + #define R_PORT9_BASE 0x40080120UL + #define R_PORT10_BASE 0x40080140UL + #define R_PORT11_BASE 0x40080160UL + #define R_PORT12_BASE 0x40080180UL + #define R_PORT13_BASE 0x400801A0UL + #define R_PORT14_BASE 0x400801C0UL + #define R_PFS_BASE 0x40080800UL + #define R_PMISC_BASE 0x40080D00UL + #define R_QSPI_BASE 0x64000000UL + #define R_RTC_BASE 0x40083000UL + #define R_SCI0_BASE 0x40118000UL + #define R_SCI1_BASE 0x40118100UL + #define R_SCI2_BASE 0x40118200UL + #define R_SCI3_BASE 0x40118300UL + #define R_SCI4_BASE 0x40118400UL + #define R_SCI5_BASE 0x40118500UL + #define R_SCI6_BASE 0x40118600UL + #define R_SCI7_BASE 0x40118700UL + #define R_SCI8_BASE 0x40118800UL + #define R_SCI9_BASE 0x40118900UL + #define R_SPI0_BASE 0x4011A000UL + #define R_SPI1_BASE 0x4011A100UL + #define R_SRAM_BASE 0x40002000UL + #define R_SSI0_BASE 0x4009D000UL + #define R_SSI1_BASE 0x4009D100UL + #define R_SYSTEM_BASE 0x4001E000UL + #define R_TRNG_BASE 0x40162000UL + #define R_TSN_CAL_BASE 0x407FB17CUL + #define R_TSN_CTRL_BASE 0x400F3000UL + #define R_USB_FS0_BASE 0x40090000UL + #define R_WDT_BASE 0x40083400UL + #define R_TZF_BASE 0x40000E00UL + #define R_CACHE_BASE 0x40007000UL + #define R_CPSCU_BASE 0x40008000UL + #define R_CEC_BASE 0x400AC000UL + #define R_AGTX0_BASE 0x400E8000UL + #define R_AGTX1_BASE 0x400E8100UL + #define R_AGTX2_BASE 0x400E8200UL + #define R_AGTX3_BASE 0x400E8300UL + #define R_AGTX4_BASE 0x400E8400UL + #define R_AGTX5_BASE 0x400E8500UL + #define R_AGTX6_BASE 0x400E8600UL + #define R_AGTX7_BASE 0x400E8700UL + #define R_AGTX8_BASE 0x400E8800UL + #define R_AGTX9_BASE 0x400E8900UL + #define R_ECCMB0_BASE 0x4036F200UL + #define R_ECCMB1_BASE 0x4036F300UL + #define R_FLAD_BASE 0x407FC000UL + #define R_WDT1_BASE 0x40044300UL + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + + #define R_ADC0 ((R_ADC0_Type *) R_ADC0_BASE) + #define R_ADC1 ((R_ADC0_Type *) R_ADC1_BASE) + #define R_PSCU ((R_PSCU_Type *) R_PSCU_BASE) + #define R_BUS ((R_BUS_Type *) R_BUS_BASE) + #define R_CAC ((R_CAC_Type *) R_CAC_BASE) + #define R_CANFD ((R_CANFD_Type *) R_CANFD_BASE) + #define R_CANFD0 ((R_CANFD_Type *) R_CANFD_BASE) + #define R_CANFD1 ((R_CANFD_Type *) R_CANFD1_BASE) + #define R_CRC ((R_CRC_Type *) R_CRC_BASE) + #define R_DAC ((R_DAC_Type *) R_DAC_BASE) + #define R_DEBUG ((R_DEBUG_Type *) R_DEBUG_BASE) + #define R_DMA ((R_DMA_Type *) R_DMA_BASE) + #define R_DMAC0 ((R_DMAC0_Type *) R_DMAC0_BASE) + #define R_DMAC1 ((R_DMAC0_Type *) R_DMAC1_BASE) + #define R_DMAC2 ((R_DMAC0_Type *) R_DMAC2_BASE) + #define R_DMAC3 ((R_DMAC0_Type *) R_DMAC3_BASE) + #define R_DMAC4 ((R_DMAC0_Type *) R_DMAC4_BASE) + #define R_DMAC5 ((R_DMAC0_Type *) R_DMAC5_BASE) + #define R_DMAC6 ((R_DMAC0_Type *) R_DMAC6_BASE) + #define R_DMAC7 ((R_DMAC0_Type *) R_DMAC7_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_HP_CMD ((R_FACI_HP_CMD_Type *) R_FACI_HP_CMD_BASE) + #define R_FACI_HP ((R_FACI_HP_Type *) R_FACI_HP_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_I3C0 ((R_I3C0_Type *) R_I3C0_BASE) + #define R_I3C1 ((R_I3C0_Type *) R_I3C1_BASE) + #define R_MPU_MMPU ((R_MPU_MMPU_Type *) R_MPU_MMPU_BASE) + #define R_MPU_SPMON ((R_MPU_SPMON_Type *) R_MPU_SPMON_BASE) + #define R_MSTP ((R_MSTP_Type *) R_MSTP_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_QSPI ((R_QSPI_Type *) R_QSPI_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_SPI0 ((R_SPI0_Type *) R_SPI0_BASE) + #define R_SPI1 ((R_SPI0_Type *) R_SPI1_BASE) + #define R_SRAM ((R_SRAM_Type *) R_SRAM_BASE) + #define R_SSI0 ((R_SSI0_Type *) R_SSI0_BASE) + #define R_SSI1 ((R_SSI0_Type *) R_SSI1_BASE) + #define R_SYSTEM ((R_SYSTEM_Type *) R_SYSTEM_BASE) + #define R_TRNG ((R_TRNG_Type *) R_TRNG_BASE) + #define R_TSN_CAL ((R_TSN_CAL_Type *) R_TSN_CAL_BASE) + #define R_TSN_CTRL ((R_TSN_CTRL_Type *) R_TSN_CTRL_BASE) + #define R_USB_FS0 ((R_USB_FS0_Type *) R_USB_FS0_BASE) + #define R_WDT ((R_WDT_Type *) R_WDT_BASE) + #define R_TZF ((R_TZF_Type *) R_TZF_BASE) + #define R_CACHE ((R_CACHE_Type *) R_CACHE_BASE) + #define R_CPSCU ((R_CPSCU_Type *) R_CPSCU_BASE) + #define R_CEC ((R_CEC_Type *) R_CEC_BASE) + #define R_AGTW0 ((R_AGTX0_Type *) R_AGTX0_BASE) + #define R_AGTW1 ((R_AGTX0_Type *) R_AGTX1_BASE) + #define R_AGTW2 ((R_AGTX0_Type *) R_AGTX2_BASE) + #define R_AGTW3 ((R_AGTX0_Type *) R_AGTX3_BASE) + #define R_AGTW4 ((R_AGTX0_Type *) R_AGTX4_BASE) + #define R_AGTW5 ((R_AGTX0_Type *) R_AGTX5_BASE) + #define R_AGTW6 ((R_AGTX0_Type *) R_AGTX6_BASE) + #define R_AGTW7 ((R_AGTX0_Type *) R_AGTX7_BASE) + #define R_AGTW8 ((R_AGTX0_Type *) R_AGTX8_BASE) + #define R_AGTW9 ((R_AGTX0_Type *) R_AGTX9_BASE) + #define R_ECCMB0 ((R_ECCMB0_Type *) R_ECCMB0_BASE) + #define R_ECCMB1 ((R_ECCMB0_Type *) R_ECCMB1_BASE) + #define R_FLAD ((R_FLAD_Type *) R_FLAD_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) */ + +/* =========================================================================================================================== */ +/* ================ CFDC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= NCFG ========================================================== */ + #define R_CANFD_CFDC_NCFG_NBRP_Pos (0UL) /*!< NBRP (Bit 0) */ + #define R_CANFD_CFDC_NCFG_NBRP_Msk (0x3ffUL) /*!< NBRP (Bitfield-Mask: 0x3ff) */ + #define R_CANFD_CFDC_NCFG_NSJW_Pos (10UL) /*!< NSJW (Bit 10) */ + #define R_CANFD_CFDC_NCFG_NSJW_Msk (0x1fc00UL) /*!< NSJW (Bitfield-Mask: 0x7f) */ + #define R_CANFD_CFDC_NCFG_NTSEG1_Pos (17UL) /*!< NTSEG1 (Bit 17) */ + #define R_CANFD_CFDC_NCFG_NTSEG1_Msk (0x1fe0000UL) /*!< NTSEG1 (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC_NCFG_NTSEG2_Pos (25UL) /*!< NTSEG2 (Bit 25) */ + #define R_CANFD_CFDC_NCFG_NTSEG2_Msk (0xfe000000UL) /*!< NTSEG2 (Bitfield-Mask: 0x7f) */ +/* ========================================================== CTR ========================================================== */ + #define R_CANFD_CFDC_CTR_CHMDC_Pos (0UL) /*!< CHMDC (Bit 0) */ + #define R_CANFD_CFDC_CTR_CHMDC_Msk (0x3UL) /*!< CHMDC (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_CSLPR_Pos (2UL) /*!< CSLPR (Bit 2) */ + #define R_CANFD_CFDC_CTR_CSLPR_Msk (0x4UL) /*!< CSLPR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_RTBO_Pos (3UL) /*!< RTBO (Bit 3) */ + #define R_CANFD_CFDC_CTR_RTBO_Msk (0x8UL) /*!< RTBO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BEIE_Pos (8UL) /*!< BEIE (Bit 8) */ + #define R_CANFD_CFDC_CTR_BEIE_Msk (0x100UL) /*!< BEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EWIE_Pos (9UL) /*!< EWIE (Bit 9) */ + #define R_CANFD_CFDC_CTR_EWIE_Msk (0x200UL) /*!< EWIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EPIE_Pos (10UL) /*!< EPIE (Bit 10) */ + #define R_CANFD_CFDC_CTR_EPIE_Msk (0x400UL) /*!< EPIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BOEIE_Pos (11UL) /*!< BOEIE (Bit 11) */ + #define R_CANFD_CFDC_CTR_BOEIE_Msk (0x800UL) /*!< BOEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BORIE_Pos (12UL) /*!< BORIE (Bit 12) */ + #define R_CANFD_CFDC_CTR_BORIE_Msk (0x1000UL) /*!< BORIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_OLIE_Pos (13UL) /*!< OLIE (Bit 13) */ + #define R_CANFD_CFDC_CTR_OLIE_Msk (0x2000UL) /*!< OLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BLIE_Pos (14UL) /*!< BLIE (Bit 14) */ + #define R_CANFD_CFDC_CTR_BLIE_Msk (0x4000UL) /*!< BLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_ALIE_Pos (15UL) /*!< ALIE (Bit 15) */ + #define R_CANFD_CFDC_CTR_ALIE_Msk (0x8000UL) /*!< ALIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_TAIE_Pos (16UL) /*!< TAIE (Bit 16) */ + #define R_CANFD_CFDC_CTR_TAIE_Msk (0x10000UL) /*!< TAIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_EOCOIE_Pos (17UL) /*!< EOCOIE (Bit 17) */ + #define R_CANFD_CFDC_CTR_EOCOIE_Msk (0x20000UL) /*!< EOCOIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_SOCOIE_Pos (18UL) /*!< SOCOIE (Bit 18) */ + #define R_CANFD_CFDC_CTR_SOCOIE_Msk (0x40000UL) /*!< SOCOIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_TDCVFIE_Pos (19UL) /*!< TDCVFIE (Bit 19) */ + #define R_CANFD_CFDC_CTR_TDCVFIE_Msk (0x80000UL) /*!< TDCVFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_BOM_Pos (21UL) /*!< BOM (Bit 21) */ + #define R_CANFD_CFDC_CTR_BOM_Msk (0x600000UL) /*!< BOM (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_ERRD_Pos (23UL) /*!< ERRD (Bit 23) */ + #define R_CANFD_CFDC_CTR_ERRD_Msk (0x800000UL) /*!< ERRD (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_CTME_Pos (24UL) /*!< CTME (Bit 24) */ + #define R_CANFD_CFDC_CTR_CTME_Msk (0x1000000UL) /*!< CTME (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_CTMS_Pos (25UL) /*!< CTMS (Bit 25) */ + #define R_CANFD_CFDC_CTR_CTMS_Msk (0x6000000UL) /*!< CTMS (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDC_CTR_CRCT_Pos (30UL) /*!< CRCT (Bit 30) */ + #define R_CANFD_CFDC_CTR_CRCT_Msk (0x40000000UL) /*!< CRCT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_CTR_ROM_Pos (31UL) /*!< ROM (Bit 31) */ + #define R_CANFD_CFDC_CTR_ROM_Msk (0x80000000UL) /*!< ROM (Bitfield-Mask: 0x01) */ +/* ========================================================== STS ========================================================== */ + #define R_CANFD_CFDC_STS_CRSTSTS_Pos (0UL) /*!< CRSTSTS (Bit 0) */ + #define R_CANFD_CFDC_STS_CRSTSTS_Msk (0x1UL) /*!< CRSTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_CHLTSTS_Pos (1UL) /*!< CHLTSTS (Bit 1) */ + #define R_CANFD_CFDC_STS_CHLTSTS_Msk (0x2UL) /*!< CHLTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_CSLPSTS_Pos (2UL) /*!< CSLPSTS (Bit 2) */ + #define R_CANFD_CFDC_STS_CSLPSTS_Msk (0x4UL) /*!< CSLPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_EPSTS_Pos (3UL) /*!< EPSTS (Bit 3) */ + #define R_CANFD_CFDC_STS_EPSTS_Msk (0x8UL) /*!< EPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_BOSTS_Pos (4UL) /*!< BOSTS (Bit 4) */ + #define R_CANFD_CFDC_STS_BOSTS_Msk (0x10UL) /*!< BOSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_TRMSTS_Pos (5UL) /*!< TRMSTS (Bit 5) */ + #define R_CANFD_CFDC_STS_TRMSTS_Msk (0x20UL) /*!< TRMSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_RECSTS_Pos (6UL) /*!< RECSTS (Bit 6) */ + #define R_CANFD_CFDC_STS_RECSTS_Msk (0x40UL) /*!< RECSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_COMSTS_Pos (7UL) /*!< COMSTS (Bit 7) */ + #define R_CANFD_CFDC_STS_COMSTS_Msk (0x80UL) /*!< COMSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_ESIF_Pos (8UL) /*!< ESIF (Bit 8) */ + #define R_CANFD_CFDC_STS_ESIF_Msk (0x100UL) /*!< ESIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_STS_REC_Pos (16UL) /*!< REC (Bit 16) */ + #define R_CANFD_CFDC_STS_REC_Msk (0xff0000UL) /*!< REC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC_STS_TEC_Pos (24UL) /*!< TEC (Bit 24) */ + #define R_CANFD_CFDC_STS_TEC_Msk (0xff000000UL) /*!< TEC (Bitfield-Mask: 0xff) */ +/* ========================================================= ERFL ========================================================== */ + #define R_CANFD_CFDC_ERFL_BEF_Pos (0UL) /*!< BEF (Bit 0) */ + #define R_CANFD_CFDC_ERFL_BEF_Msk (0x1UL) /*!< BEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_EWF_Pos (1UL) /*!< EWF (Bit 1) */ + #define R_CANFD_CFDC_ERFL_EWF_Msk (0x2UL) /*!< EWF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_EPF_Pos (2UL) /*!< EPF (Bit 2) */ + #define R_CANFD_CFDC_ERFL_EPF_Msk (0x4UL) /*!< EPF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BOEF_Pos (3UL) /*!< BOEF (Bit 3) */ + #define R_CANFD_CFDC_ERFL_BOEF_Msk (0x8UL) /*!< BOEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BORF_Pos (4UL) /*!< BORF (Bit 4) */ + #define R_CANFD_CFDC_ERFL_BORF_Msk (0x10UL) /*!< BORF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_OVLF_Pos (5UL) /*!< OVLF (Bit 5) */ + #define R_CANFD_CFDC_ERFL_OVLF_Msk (0x20UL) /*!< OVLF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_BLF_Pos (6UL) /*!< BLF (Bit 6) */ + #define R_CANFD_CFDC_ERFL_BLF_Msk (0x40UL) /*!< BLF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_ALF_Pos (7UL) /*!< ALF (Bit 7) */ + #define R_CANFD_CFDC_ERFL_ALF_Msk (0x80UL) /*!< ALF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_SERR_Pos (8UL) /*!< SERR (Bit 8) */ + #define R_CANFD_CFDC_ERFL_SERR_Msk (0x100UL) /*!< SERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_FERR_Pos (9UL) /*!< FERR (Bit 9) */ + #define R_CANFD_CFDC_ERFL_FERR_Msk (0x200UL) /*!< FERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_AERR_Pos (10UL) /*!< AERR (Bit 10) */ + #define R_CANFD_CFDC_ERFL_AERR_Msk (0x400UL) /*!< AERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_CERR_Pos (11UL) /*!< CERR (Bit 11) */ + #define R_CANFD_CFDC_ERFL_CERR_Msk (0x800UL) /*!< CERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_B1ERR_Pos (12UL) /*!< B1ERR (Bit 12) */ + #define R_CANFD_CFDC_ERFL_B1ERR_Msk (0x1000UL) /*!< B1ERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_B0ERR_Pos (13UL) /*!< B0ERR (Bit 13) */ + #define R_CANFD_CFDC_ERFL_B0ERR_Msk (0x2000UL) /*!< B0ERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_ADERR_Pos (14UL) /*!< ADERR (Bit 14) */ + #define R_CANFD_CFDC_ERFL_ADERR_Msk (0x4000UL) /*!< ADERR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC_ERFL_CRCREG_Pos (16UL) /*!< CRCREG (Bit 16) */ + #define R_CANFD_CFDC_ERFL_CRCREG_Msk (0x7fff0000UL) /*!< CRCREG (Bitfield-Mask: 0x7fff) */ + +/* =========================================================================================================================== */ +/* ================ CFDC2 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DCFG ========================================================== */ + #define R_CANFD_CFDC2_DCFG_DBRP_Pos (0UL) /*!< DBRP (Bit 0) */ + #define R_CANFD_CFDC2_DCFG_DBRP_Msk (0xffUL) /*!< DBRP (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_DCFG_DTSEG1_Pos (8UL) /*!< DTSEG1 (Bit 8) */ + #define R_CANFD_CFDC2_DCFG_DTSEG1_Msk (0x1f00UL) /*!< DTSEG1 (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDC2_DCFG_DTSEG2_Pos (16UL) /*!< DTSEG2 (Bit 16) */ + #define R_CANFD_CFDC2_DCFG_DTSEG2_Msk (0xf0000UL) /*!< DTSEG2 (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDC2_DCFG_DSJW_Pos (24UL) /*!< DSJW (Bit 24) */ + #define R_CANFD_CFDC2_DCFG_DSJW_Msk (0xf000000UL) /*!< DSJW (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDCFG ========================================================= */ + #define R_CANFD_CFDC2_FDCFG_EOCCFG_Pos (0UL) /*!< EOCCFG (Bit 0) */ + #define R_CANFD_CFDC2_FDCFG_EOCCFG_Msk (0x7UL) /*!< EOCCFG (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDC2_FDCFG_TDCOC_Pos (8UL) /*!< TDCOC (Bit 8) */ + #define R_CANFD_CFDC2_FDCFG_TDCOC_Msk (0x100UL) /*!< TDCOC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_TDCE_Pos (9UL) /*!< TDCE (Bit 9) */ + #define R_CANFD_CFDC2_FDCFG_TDCE_Msk (0x200UL) /*!< TDCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_ESIC_Pos (10UL) /*!< ESIC (Bit 10) */ + #define R_CANFD_CFDC2_FDCFG_ESIC_Msk (0x400UL) /*!< ESIC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_TDCO_Pos (16UL) /*!< TDCO (Bit 16) */ + #define R_CANFD_CFDC2_FDCFG_TDCO_Msk (0xff0000UL) /*!< TDCO (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDCFG_FDOE_Pos (28UL) /*!< FDOE (Bit 28) */ + #define R_CANFD_CFDC2_FDCFG_FDOE_Msk (0x10000000UL) /*!< FDOE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_REFE_Pos (29UL) /*!< REFE (Bit 29) */ + #define R_CANFD_CFDC2_FDCFG_REFE_Msk (0x20000000UL) /*!< REFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCFG_CLOE_Pos (30UL) /*!< CLOE (Bit 30) */ + #define R_CANFD_CFDC2_FDCFG_CLOE_Msk (0x40000000UL) /*!< CLOE (Bitfield-Mask: 0x01) */ +/* ========================================================= FDCTR ========================================================= */ + #define R_CANFD_CFDC2_FDCTR_EOCCLR_Pos (0UL) /*!< EOCCLR (Bit 0) */ + #define R_CANFD_CFDC2_FDCTR_EOCCLR_Msk (0x1UL) /*!< EOCCLR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDCTR_SOCCLR_Pos (1UL) /*!< SOCCLR (Bit 1) */ + #define R_CANFD_CFDC2_FDCTR_SOCCLR_Msk (0x2UL) /*!< SOCCLR (Bitfield-Mask: 0x01) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDC2_FDSTS_TDCR_Pos (0UL) /*!< TDCR (Bit 0) */ + #define R_CANFD_CFDC2_FDSTS_TDCR_Msk (0xffUL) /*!< TDCR (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDSTS_EOCO_Pos (8UL) /*!< EOCO (Bit 8) */ + #define R_CANFD_CFDC2_FDSTS_EOCO_Msk (0x100UL) /*!< EOCO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_SOCO_Pos (9UL) /*!< SOCO (Bit 9) */ + #define R_CANFD_CFDC2_FDSTS_SOCO_Msk (0x200UL) /*!< SOCO (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_TDCVF_Pos (15UL) /*!< TDCVF (Bit 15) */ + #define R_CANFD_CFDC2_FDSTS_TDCVF_Msk (0x8000UL) /*!< TDCVF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDC2_FDSTS_EOC_Pos (16UL) /*!< EOC (Bit 16) */ + #define R_CANFD_CFDC2_FDSTS_EOC_Msk (0xff0000UL) /*!< EOC (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDC2_FDSTS_SOC_Pos (24UL) /*!< SOC (Bit 24) */ + #define R_CANFD_CFDC2_FDSTS_SOC_Msk (0xff000000UL) /*!< SOC (Bitfield-Mask: 0xff) */ +/* ========================================================= FDCRC ========================================================= */ + #define R_CANFD_CFDC2_FDCRC_CRCREG_Pos (0UL) /*!< CRCREG (Bit 0) */ + #define R_CANFD_CFDC2_FDCRC_CRCREG_Msk (0x1fffffUL) /*!< CRCREG (Bitfield-Mask: 0x1fffff) */ + #define R_CANFD_CFDC2_FDCRC_SCNT_Pos (24UL) /*!< SCNT (Bit 24) */ + #define R_CANFD_CFDC2_FDCRC_SCNT_Msk (0xf000000UL) /*!< SCNT (Bitfield-Mask: 0x0f) */ + +/* =========================================================================================================================== */ +/* ================ CFDGAFL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDGAFL_ID_GAFLID_Pos (0UL) /*!< GAFLID (Bit 0) */ + #define R_CANFD_CFDGAFL_ID_GAFLID_Msk (0x1fffffffUL) /*!< GAFLID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDGAFL_ID_GAFLLB_Pos (29UL) /*!< GAFLLB (Bit 29) */ + #define R_CANFD_CFDGAFL_ID_GAFLLB_Msk (0x20000000UL) /*!< GAFLLB (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_ID_GAFLRTR_Pos (30UL) /*!< GAFLRTR (Bit 30) */ + #define R_CANFD_CFDGAFL_ID_GAFLRTR_Msk (0x40000000UL) /*!< GAFLRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_ID_GAFLIDE_Pos (31UL) /*!< GAFLIDE (Bit 31) */ + #define R_CANFD_CFDGAFL_ID_GAFLIDE_Msk (0x80000000UL) /*!< GAFLIDE (Bitfield-Mask: 0x01) */ +/* =========================================================== M =========================================================== */ + #define R_CANFD_CFDGAFL_M_GAFLIDM_Pos (0UL) /*!< GAFLIDM (Bit 0) */ + #define R_CANFD_CFDGAFL_M_GAFLIDM_Msk (0x1fffffffUL) /*!< GAFLIDM (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDGAFL_M_GAFLIFL1_Pos (29UL) /*!< GAFLIFL1 (Bit 29) */ + #define R_CANFD_CFDGAFL_M_GAFLIFL1_Msk (0x20000000UL) /*!< GAFLIFL1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_M_GAFLRTRM_Pos (30UL) /*!< GAFLRTRM (Bit 30) */ + #define R_CANFD_CFDGAFL_M_GAFLRTRM_Msk (0x40000000UL) /*!< GAFLRTRM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_M_GAFLIDEM_Pos (31UL) /*!< GAFLIDEM (Bit 31) */ + #define R_CANFD_CFDGAFL_M_GAFLIDEM_Msk (0x80000000UL) /*!< GAFLIDEM (Bitfield-Mask: 0x01) */ +/* ========================================================== P0 =========================================================== */ + #define R_CANFD_CFDGAFL_P0_GAFLDLC_Pos (0UL) /*!< GAFLDLC (Bit 0) */ + #define R_CANFD_CFDGAFL_P0_GAFLDLC_Msk (0xfUL) /*!< GAFLDLC (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGAFL_P0_GAFLIFL0_Pos (7UL) /*!< GAFLIFL0 (Bit 7) */ + #define R_CANFD_CFDGAFL_P0_GAFLIFL0_Msk (0x80UL) /*!< GAFLIFL0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMDP_Pos (8UL) /*!< GAFLRMDP (Bit 8) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMDP_Msk (0x1f00UL) /*!< GAFLRMDP (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMV_Pos (15UL) /*!< GAFLRMV (Bit 15) */ + #define R_CANFD_CFDGAFL_P0_GAFLRMV_Msk (0x8000UL) /*!< GAFLRMV (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFL_P0_GAFLPTR_Pos (16UL) /*!< GAFLPTR (Bit 16) */ + #define R_CANFD_CFDGAFL_P0_GAFLPTR_Msk (0xffff0000UL) /*!< GAFLPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== P1 =========================================================== */ + #define R_CANFD_CFDGAFL_P1_GAFLFDP_Pos (0UL) /*!< GAFLFDP (Bit 0) */ + #define R_CANFD_CFDGAFL_P1_GAFLFDP_Msk (0x1ffUL) /*!< GAFLFDP (Bitfield-Mask: 0x1ff) */ + +/* =========================================================================================================================== */ +/* ================ CFDTHL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= ACC0 ========================================================== */ + #define R_CANFD_CFDTHL_ACC0_BT_Pos (0UL) /*!< BT (Bit 0) */ + #define R_CANFD_CFDTHL_ACC0_BT_Msk (0x7UL) /*!< BT (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDTHL_ACC0_BN_Pos (3UL) /*!< BN (Bit 3) */ + #define R_CANFD_CFDTHL_ACC0_BN_Msk (0x3f8UL) /*!< BN (Bitfield-Mask: 0x7f) */ + #define R_CANFD_CFDTHL_ACC0_TMTS_Pos (16UL) /*!< TMTS (Bit 16) */ + #define R_CANFD_CFDTHL_ACC0_TMTS_Msk (0xffff0000UL) /*!< TMTS (Bitfield-Mask: 0xffff) */ +/* ========================================================= ACC1 ========================================================== */ + #define R_CANFD_CFDTHL_ACC1_TID_Pos (0UL) /*!< TID (Bit 0) */ + #define R_CANFD_CFDTHL_ACC1_TID_Msk (0xffffUL) /*!< TID (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDTHL_ACC1_TIFL_Pos (16UL) /*!< TIFL (Bit 16) */ + #define R_CANFD_CFDTHL_ACC1_TIFL_Msk (0x30000UL) /*!< TIFL (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ CFDRF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDRF_ID_RFID_Pos (0UL) /*!< RFID (Bit 0) */ + #define R_CANFD_CFDRF_ID_RFID_Msk (0x1fffffffUL) /*!< RFID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDRF_ID_RFRTR_Pos (30UL) /*!< RFRTR (Bit 30) */ + #define R_CANFD_CFDRF_ID_RFRTR_Msk (0x40000000UL) /*!< RFRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_ID_RFIDE_Pos (31UL) /*!< RFIDE (Bit 31) */ + #define R_CANFD_CFDRF_ID_RFIDE_Msk (0x80000000UL) /*!< RFIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDRF_PTR_RFTS_Pos (0UL) /*!< RFTS (Bit 0) */ + #define R_CANFD_CFDRF_PTR_RFTS_Msk (0xffffUL) /*!< RFTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDRF_PTR_RFDLC_Pos (28UL) /*!< RFDLC (Bit 28) */ + #define R_CANFD_CFDRF_PTR_RFDLC_Msk (0xf0000000UL) /*!< RFDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDRF_FDSTS_RFESI_Pos (0UL) /*!< RFESI (Bit 0) */ + #define R_CANFD_CFDRF_FDSTS_RFESI_Msk (0x1UL) /*!< RFESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFBRS_Pos (1UL) /*!< RFBRS (Bit 1) */ + #define R_CANFD_CFDRF_FDSTS_RFBRS_Msk (0x2UL) /*!< RFBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFFDF_Pos (2UL) /*!< RFFDF (Bit 2) */ + #define R_CANFD_CFDRF_FDSTS_RFFDF_Msk (0x4UL) /*!< RFFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRF_FDSTS_RFIFL_Pos (8UL) /*!< RFIFL (Bit 8) */ + #define R_CANFD_CFDRF_FDSTS_RFIFL_Msk (0x300UL) /*!< RFIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDRF_FDSTS_RFPTR_Pos (16UL) /*!< RFPTR (Bit 16) */ + #define R_CANFD_CFDRF_FDSTS_RFPTR_Msk (0xffff0000UL) /*!< RFPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDRF_DF_RFDB_Pos (0UL) /*!< RFDB (Bit 0) */ + #define R_CANFD_CFDRF_DF_RFDB_Msk (0xffUL) /*!< RFDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDCF ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDCF_ID_CFID_Pos (0UL) /*!< CFID (Bit 0) */ + #define R_CANFD_CFDCF_ID_CFID_Msk (0x1fffffffUL) /*!< CFID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDCF_ID_THLEN_Pos (29UL) /*!< THLEN (Bit 29) */ + #define R_CANFD_CFDCF_ID_THLEN_Msk (0x20000000UL) /*!< THLEN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_ID_CFRTR_Pos (30UL) /*!< CFRTR (Bit 30) */ + #define R_CANFD_CFDCF_ID_CFRTR_Msk (0x40000000UL) /*!< CFRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_ID_CFIDE_Pos (31UL) /*!< CFIDE (Bit 31) */ + #define R_CANFD_CFDCF_ID_CFIDE_Msk (0x80000000UL) /*!< CFIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDCF_PTR_CFTS_Pos (0UL) /*!< CFTS (Bit 0) */ + #define R_CANFD_CFDCF_PTR_CFTS_Msk (0xffffUL) /*!< CFTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDCF_PTR_CFDLC_Pos (28UL) /*!< CFDLC (Bit 28) */ + #define R_CANFD_CFDCF_PTR_CFDLC_Msk (0xf0000000UL) /*!< CFDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDCF_FDSTS_CFESI_Pos (0UL) /*!< CFESI (Bit 0) */ + #define R_CANFD_CFDCF_FDSTS_CFESI_Msk (0x1UL) /*!< CFESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDSTS_CFBRS_Pos (1UL) /*!< CFBRS (Bit 1) */ + #define R_CANFD_CFDCF_FDSTS_CFBRS_Msk (0x2UL) /*!< CFBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDSTS_CFFDF_Pos (2UL) /*!< CFFDF (Bit 2) */ + #define R_CANFD_CFDCF_FDSTS_CFFDF_Msk (0x4UL) /*!< CFFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCF_FDSTS_CFIFL_Pos (8UL) /*!< CFIFL (Bit 8) */ + #define R_CANFD_CFDCF_FDSTS_CFIFL_Msk (0x300UL) /*!< CFIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDCF_FDSTS_CFPTR_Pos (16UL) /*!< CFPTR (Bit 16) */ + #define R_CANFD_CFDCF_FDSTS_CFPTR_Msk (0xffff0000UL) /*!< CFPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDCF_DF_CFDB_Pos (0UL) /*!< CFDB (Bit 0) */ + #define R_CANFD_CFDCF_DF_CFDB_Msk (0xffUL) /*!< CFDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDTM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDTM_ID_TMID_Pos (0UL) /*!< TMID (Bit 0) */ + #define R_CANFD_CFDTM_ID_TMID_Msk (0x1fffffffUL) /*!< TMID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDTM_ID_THLEN_Pos (29UL) /*!< THLEN (Bit 29) */ + #define R_CANFD_CFDTM_ID_THLEN_Msk (0x20000000UL) /*!< THLEN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_ID_TMRTR_Pos (30UL) /*!< TMRTR (Bit 30) */ + #define R_CANFD_CFDTM_ID_TMRTR_Msk (0x40000000UL) /*!< TMRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_ID_TMIDE_Pos (31UL) /*!< TMIDE (Bit 31) */ + #define R_CANFD_CFDTM_ID_TMIDE_Msk (0x80000000UL) /*!< TMIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDTM_PTR_TMTS_Pos (0UL) /*!< TMTS (Bit 0) */ + #define R_CANFD_CFDTM_PTR_TMTS_Msk (0xffffUL) /*!< TMTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDTM_PTR_TMDLC_Pos (28UL) /*!< TMDLC (Bit 28) */ + #define R_CANFD_CFDTM_PTR_TMDLC_Msk (0xf0000000UL) /*!< TMDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDCTR ========================================================= */ + #define R_CANFD_CFDTM_FDCTR_TMESI_Pos (0UL) /*!< TMESI (Bit 0) */ + #define R_CANFD_CFDTM_FDCTR_TMESI_Msk (0x1UL) /*!< TMESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMBRS_Pos (1UL) /*!< TMBRS (Bit 1) */ + #define R_CANFD_CFDTM_FDCTR_TMBRS_Msk (0x2UL) /*!< TMBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMFDF_Pos (2UL) /*!< TMFDF (Bit 2) */ + #define R_CANFD_CFDTM_FDCTR_TMFDF_Msk (0x4UL) /*!< TMFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTM_FDCTR_TMIFL_Pos (8UL) /*!< TMIFL (Bit 8) */ + #define R_CANFD_CFDTM_FDCTR_TMIFL_Msk (0x300UL) /*!< TMIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDTM_FDCTR_TMPTR_Pos (16UL) /*!< TMPTR (Bit 16) */ + #define R_CANFD_CFDTM_FDCTR_TMPTR_Msk (0xffff0000UL) /*!< TMPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDTM_DF_TMDB_Pos (0UL) /*!< TMDB (Bit 0) */ + #define R_CANFD_CFDTM_DF_TMDB_Msk (0xffUL) /*!< TMDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ RM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== ID =========================================================== */ + #define R_CANFD_CFDRM_RM_ID_RMID_Pos (0UL) /*!< RMID (Bit 0) */ + #define R_CANFD_CFDRM_RM_ID_RMID_Msk (0x1fffffffUL) /*!< RMID (Bitfield-Mask: 0x1fffffff) */ + #define R_CANFD_CFDRM_RM_ID_RMRTR_Pos (30UL) /*!< RMRTR (Bit 30) */ + #define R_CANFD_CFDRM_RM_ID_RMRTR_Msk (0x40000000UL) /*!< RMRTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_RM_ID_RMIDE_Pos (31UL) /*!< RMIDE (Bit 31) */ + #define R_CANFD_CFDRM_RM_ID_RMIDE_Msk (0x80000000UL) /*!< RMIDE (Bitfield-Mask: 0x01) */ +/* ========================================================== PTR ========================================================== */ + #define R_CANFD_CFDRM_RM_PTR_RMTS_Pos (0UL) /*!< RMTS (Bit 0) */ + #define R_CANFD_CFDRM_RM_PTR_RMTS_Msk (0xffffUL) /*!< RMTS (Bitfield-Mask: 0xffff) */ + #define R_CANFD_CFDRM_RM_PTR_RMDLC_Pos (28UL) /*!< RMDLC (Bit 28) */ + #define R_CANFD_CFDRM_RM_PTR_RMDLC_Msk (0xf0000000UL) /*!< RMDLC (Bitfield-Mask: 0x0f) */ +/* ========================================================= FDSTS ========================================================= */ + #define R_CANFD_CFDRM_RM_FDSTS_RMESI_Pos (0UL) /*!< RMESI (Bit 0) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMESI_Msk (0x1UL) /*!< RMESI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMBRS_Pos (1UL) /*!< RMBRS (Bit 1) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMBRS_Msk (0x2UL) /*!< RMBRS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMFDF_Pos (2UL) /*!< RMFDF (Bit 2) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMFDF_Msk (0x4UL) /*!< RMFDF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMIFL_Pos (8UL) /*!< RMIFL (Bit 8) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMIFL_Msk (0x300UL) /*!< RMIFL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMPTR_Pos (16UL) /*!< RMPTR (Bit 16) */ + #define R_CANFD_CFDRM_RM_FDSTS_RMPTR_Msk (0xffff0000UL) /*!< RMPTR (Bitfield-Mask: 0xffff) */ +/* ========================================================== DF =========================================================== */ + #define R_CANFD_CFDRM_RM_DF_RMDB_Pos (0UL) /*!< RMDB (Bit 0) */ + #define R_CANFD_CFDRM_RM_DF_RMDB_Msk (0xffUL) /*!< RMDB (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ CFDRM ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ 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_GROUP_REGION_AC_PP_Pos (3UL) /*!< PP (Bit 3) */ + #define R_MPU_MMPU_GROUP_REGION_AC_PP_Msk (0x8UL) /*!< PP (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_GROUP_REGION_AC_WP_Pos (2UL) /*!< WP (Bit 2) */ + #define R_MPU_MMPU_GROUP_REGION_AC_WP_Msk (0x4UL) /*!< WP (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_GROUP_REGION_AC_RP_Pos (1UL) /*!< RP (Bit 1) */ + #define R_MPU_MMPU_GROUP_REGION_AC_RP_Msk (0x2UL) /*!< RP (Bitfield-Mask: 0x01) */ + #define R_MPU_MMPU_GROUP_REGION_AC_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_MPU_MMPU_GROUP_REGION_AC_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* =========================================================== S =========================================================== */ + #define R_MPU_MMPU_GROUP_REGION_S_MMPUS_Pos (0UL) /*!< MMPUS (Bit 0) */ + #define R_MPU_MMPU_GROUP_REGION_S_MMPUS_Msk (0xffffffffUL) /*!< MMPUS (Bitfield-Mask: 0xffffffff) */ +/* =========================================================== E =========================================================== */ + #define R_MPU_MMPU_GROUP_REGION_E_MMPUE_Pos (0UL) /*!< MMPUE (Bit 0) */ + #define R_MPU_MMPU_GROUP_REGION_E_MMPUE_Msk (0xffffffffUL) /*!< MMPUE (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ GROUP ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== EN =========================================================== */ + #define R_MPU_MMPU_GROUP_EN_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_GROUP_EN_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_GROUP_EN_ENABLE_Pos (0UL) /*!< ENABLE (Bit 0) */ + #define R_MPU_MMPU_GROUP_EN_ENABLE_Msk (0x1UL) /*!< ENABLE (Bitfield-Mask: 0x01) */ +/* ========================================================= ENPT ========================================================== */ + #define R_MPU_MMPU_GROUP_ENPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_GROUP_ENPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_GROUP_ENPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_MMPU_GROUP_ENPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* ========================================================== RPT ========================================================== */ + #define R_MPU_MMPU_GROUP_RPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_GROUP_RPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_GROUP_RPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_MMPU_GROUP_RPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ +/* ======================================================== RPT_SEC ======================================================== */ + #define R_MPU_MMPU_GROUP_RPT_SEC_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_GROUP_RPT_SEC_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_GROUP_RPT_SEC_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_MMPU_GROUP_RPT_SEC_PROTECT_Msk (0x1UL) /*!< PROTECT (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) */ + +/* =========================================================================================================================== */ +/* ================ 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 ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ VLSEL ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== VL1SEL ========================================================= */ + #define R_PFS_VLSEL_VL1SEL_SELVL_Pos (0UL) /*!< SELVL (Bit 0) */ + #define R_PFS_VLSEL_VL1SEL_SELVL_Msk (0x1UL) /*!< SELVL (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ 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_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_PSCU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PSARB ========================================================= */ + #define R_PSCU_PSARB_PSARB0_Pos (0UL) /*!< PSARB0 (Bit 0) */ + #define R_PSCU_PSARB_PSARB0_Msk (0x1UL) /*!< PSARB0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB1_Pos (1UL) /*!< PSARB1 (Bit 1) */ + #define R_PSCU_PSARB_PSARB1_Msk (0x2UL) /*!< PSARB1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB2_Pos (2UL) /*!< PSARB2 (Bit 2) */ + #define R_PSCU_PSARB_PSARB2_Msk (0x4UL) /*!< PSARB2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB3_Pos (3UL) /*!< PSARB3 (Bit 3) */ + #define R_PSCU_PSARB_PSARB3_Msk (0x8UL) /*!< PSARB3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB4_Pos (4UL) /*!< PSARB4 (Bit 4) */ + #define R_PSCU_PSARB_PSARB4_Msk (0x10UL) /*!< PSARB4 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB5_Pos (5UL) /*!< PSARB5 (Bit 5) */ + #define R_PSCU_PSARB_PSARB5_Msk (0x20UL) /*!< PSARB5 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB6_Pos (6UL) /*!< PSARB6 (Bit 6) */ + #define R_PSCU_PSARB_PSARB6_Msk (0x40UL) /*!< PSARB6 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB7_Pos (7UL) /*!< PSARB7 (Bit 7) */ + #define R_PSCU_PSARB_PSARB7_Msk (0x80UL) /*!< PSARB7 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB8_Pos (8UL) /*!< PSARB8 (Bit 8) */ + #define R_PSCU_PSARB_PSARB8_Msk (0x100UL) /*!< PSARB8 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB9_Pos (9UL) /*!< PSARB9 (Bit 9) */ + #define R_PSCU_PSARB_PSARB9_Msk (0x200UL) /*!< PSARB9 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB11_Pos (11UL) /*!< PSARB11 (Bit 11) */ + #define R_PSCU_PSARB_PSARB11_Msk (0x800UL) /*!< PSARB11 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB12_Pos (12UL) /*!< PSARB12 (Bit 12) */ + #define R_PSCU_PSARB_PSARB12_Msk (0x1000UL) /*!< PSARB12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB15_Pos (15UL) /*!< PSARB15 (Bit 15) */ + #define R_PSCU_PSARB_PSARB15_Msk (0x8000UL) /*!< PSARB15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB16_Pos (16UL) /*!< PSARB16 (Bit 16) */ + #define R_PSCU_PSARB_PSARB16_Msk (0x10000UL) /*!< PSARB16 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB18_Pos (18UL) /*!< PSARB18 (Bit 18) */ + #define R_PSCU_PSARB_PSARB18_Msk (0x40000UL) /*!< PSARB18 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB19_Pos (19UL) /*!< PSARB19 (Bit 19) */ + #define R_PSCU_PSARB_PSARB19_Msk (0x80000UL) /*!< PSARB19 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB22_Pos (22UL) /*!< PSARB22 (Bit 22) */ + #define R_PSCU_PSARB_PSARB22_Msk (0x400000UL) /*!< PSARB22 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB23_Pos (23UL) /*!< PSARB23 (Bit 23) */ + #define R_PSCU_PSARB_PSARB23_Msk (0x800000UL) /*!< PSARB23 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB24_Pos (24UL) /*!< PSARB24 (Bit 24) */ + #define R_PSCU_PSARB_PSARB24_Msk (0x1000000UL) /*!< PSARB24 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB25_Pos (25UL) /*!< PSARB25 (Bit 25) */ + #define R_PSCU_PSARB_PSARB25_Msk (0x2000000UL) /*!< PSARB25 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB26_Pos (26UL) /*!< PSARB26 (Bit 26) */ + #define R_PSCU_PSARB_PSARB26_Msk (0x4000000UL) /*!< PSARB26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB27_Pos (27UL) /*!< PSARB27 (Bit 27) */ + #define R_PSCU_PSARB_PSARB27_Msk (0x8000000UL) /*!< PSARB27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB28_Pos (28UL) /*!< PSARB28 (Bit 28) */ + #define R_PSCU_PSARB_PSARB28_Msk (0x10000000UL) /*!< PSARB28 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB29_Pos (29UL) /*!< PSARB29 (Bit 29) */ + #define R_PSCU_PSARB_PSARB29_Msk (0x20000000UL) /*!< PSARB29 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB30_Pos (30UL) /*!< PSARB30 (Bit 30) */ + #define R_PSCU_PSARB_PSARB30_Msk (0x40000000UL) /*!< PSARB30 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARB_PSARB31_Pos (31UL) /*!< PSARB31 (Bit 31) */ + #define R_PSCU_PSARB_PSARB31_Msk (0x80000000UL) /*!< PSARB31 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARC ========================================================= */ + #define R_PSCU_PSARC_PSARC0_Pos (0UL) /*!< PSARC0 (Bit 0) */ + #define R_PSCU_PSARC_PSARC0_Msk (0x1UL) /*!< PSARC0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC1_Pos (1UL) /*!< PSARC1 (Bit 1) */ + #define R_PSCU_PSARC_PSARC1_Msk (0x2UL) /*!< PSARC1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC3_Pos (3UL) /*!< PSARC3 (Bit 3) */ + #define R_PSCU_PSARC_PSARC3_Msk (0x8UL) /*!< PSARC3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC4_Pos (4UL) /*!< PSARC4 (Bit 4) */ + #define R_PSCU_PSARC_PSARC4_Msk (0x10UL) /*!< PSARC4 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC8_Pos (8UL) /*!< PSARC8 (Bit 8) */ + #define R_PSCU_PSARC_PSARC8_Msk (0x100UL) /*!< PSARC8 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC12_Pos (12UL) /*!< PSARC12 (Bit 12) */ + #define R_PSCU_PSARC_PSARC12_Msk (0x1000UL) /*!< PSARC12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC13_Pos (13UL) /*!< PSARC13 (Bit 13) */ + #define R_PSCU_PSARC_PSARC13_Msk (0x2000UL) /*!< PSARC13 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC20_Pos (20UL) /*!< PSARC20 (Bit 20) */ + #define R_PSCU_PSARC_PSARC20_Msk (0x100000UL) /*!< PSARC20 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC27_Pos (27UL) /*!< PSARC27 (Bit 27) */ + #define R_PSCU_PSARC_PSARC27_Msk (0x8000000UL) /*!< PSARC27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARC_PSARC31_Pos (31UL) /*!< PSARC31 (Bit 31) */ + #define R_PSCU_PSARC_PSARC31_Msk (0x80000000UL) /*!< PSARC31 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARD ========================================================= */ + #define R_PSCU_PSARD_PSARD0_Pos (0UL) /*!< PSARD0 (Bit 0) */ + #define R_PSCU_PSARD_PSARD0_Msk (0x1UL) /*!< PSARD0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD1_Pos (1UL) /*!< PSARD1 (Bit 1) */ + #define R_PSCU_PSARD_PSARD1_Msk (0x2UL) /*!< PSARD1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD2_Pos (2UL) /*!< PSARD2 (Bit 2) */ + #define R_PSCU_PSARD_PSARD2_Msk (0x4UL) /*!< PSARD2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD3_Pos (3UL) /*!< PSARD3 (Bit 3) */ + #define R_PSCU_PSARD_PSARD3_Msk (0x8UL) /*!< PSARD3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD11_Pos (11UL) /*!< PSARD11 (Bit 11) */ + #define R_PSCU_PSARD_PSARD11_Msk (0x800UL) /*!< PSARD11 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD12_Pos (12UL) /*!< PSARD12 (Bit 12) */ + #define R_PSCU_PSARD_PSARD12_Msk (0x1000UL) /*!< PSARD12 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD13_Pos (13UL) /*!< PSARD13 (Bit 13) */ + #define R_PSCU_PSARD_PSARD13_Msk (0x2000UL) /*!< PSARD13 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD14_Pos (14UL) /*!< PSARD14 (Bit 14) */ + #define R_PSCU_PSARD_PSARD14_Msk (0x4000UL) /*!< PSARD14 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD15_Pos (15UL) /*!< PSARD15 (Bit 15) */ + #define R_PSCU_PSARD_PSARD15_Msk (0x8000UL) /*!< PSARD15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD16_Pos (16UL) /*!< PSARD16 (Bit 16) */ + #define R_PSCU_PSARD_PSARD16_Msk (0x10000UL) /*!< PSARD16 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD19_Pos (19UL) /*!< PSARD19 (Bit 19) */ + #define R_PSCU_PSARD_PSARD19_Msk (0x80000UL) /*!< PSARD19 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD20_Pos (20UL) /*!< PSARD20 (Bit 20) */ + #define R_PSCU_PSARD_PSARD20_Msk (0x100000UL) /*!< PSARD20 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD22_Pos (22UL) /*!< PSARD22 (Bit 22) */ + #define R_PSCU_PSARD_PSARD22_Msk (0x400000UL) /*!< PSARD22 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD25_Pos (25UL) /*!< PSARD25 (Bit 25) */ + #define R_PSCU_PSARD_PSARD25_Msk (0x2000000UL) /*!< PSARD25 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD26_Pos (26UL) /*!< PSARD26 (Bit 26) */ + #define R_PSCU_PSARD_PSARD26_Msk (0x4000000UL) /*!< PSARD26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD27_Pos (27UL) /*!< PSARD27 (Bit 27) */ + #define R_PSCU_PSARD_PSARD27_Msk (0x8000000UL) /*!< PSARD27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD28_Pos (28UL) /*!< PSARD28 (Bit 28) */ + #define R_PSCU_PSARD_PSARD28_Msk (0x10000000UL) /*!< PSARD28 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARD_PSARD29_Pos (29UL) /*!< PSARD29 (Bit 29) */ + #define R_PSCU_PSARD_PSARD29_Msk (0x20000000UL) /*!< PSARD29 (Bitfield-Mask: 0x01) */ +/* ========================================================= PSARE ========================================================= */ + #define R_PSCU_PSARE_PSARE0_Pos (0UL) /*!< PSARE0 (Bit 0) */ + #define R_PSCU_PSARE_PSARE0_Msk (0x1UL) /*!< PSARE0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE1_Pos (1UL) /*!< PSARE1 (Bit 1) */ + #define R_PSCU_PSARE_PSARE1_Msk (0x2UL) /*!< PSARE1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE2_Pos (2UL) /*!< PSARE2 (Bit 2) */ + #define R_PSCU_PSARE_PSARE2_Msk (0x4UL) /*!< PSARE2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE14_Pos (14UL) /*!< PSARE14 (Bit 14) */ + #define R_PSCU_PSARE_PSARE14_Msk (0x4000UL) /*!< PSARE14 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE15_Pos (15UL) /*!< PSARE15 (Bit 15) */ + #define R_PSCU_PSARE_PSARE15_Msk (0x8000UL) /*!< PSARE15 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE22_Pos (22UL) /*!< PSARE22 (Bit 22) */ + #define R_PSCU_PSARE_PSARE22_Msk (0x400000UL) /*!< PSARE22 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE23_Pos (23UL) /*!< PSARE23 (Bit 23) */ + #define R_PSCU_PSARE_PSARE23_Msk (0x800000UL) /*!< PSARE23 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE24_Pos (24UL) /*!< PSARE24 (Bit 24) */ + #define R_PSCU_PSARE_PSARE24_Msk (0x1000000UL) /*!< PSARE24 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE25_Pos (25UL) /*!< PSARE25 (Bit 25) */ + #define R_PSCU_PSARE_PSARE25_Msk (0x2000000UL) /*!< PSARE25 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE26_Pos (26UL) /*!< PSARE26 (Bit 26) */ + #define R_PSCU_PSARE_PSARE26_Msk (0x4000000UL) /*!< PSARE26 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE27_Pos (27UL) /*!< PSARE27 (Bit 27) */ + #define R_PSCU_PSARE_PSARE27_Msk (0x8000000UL) /*!< PSARE27 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE28_Pos (28UL) /*!< PSARE28 (Bit 28) */ + #define R_PSCU_PSARE_PSARE28_Msk (0x10000000UL) /*!< PSARE28 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE29_Pos (29UL) /*!< PSARE29 (Bit 29) */ + #define R_PSCU_PSARE_PSARE29_Msk (0x20000000UL) /*!< PSARE29 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE30_Pos (30UL) /*!< PSARE30 (Bit 30) */ + #define R_PSCU_PSARE_PSARE30_Msk (0x40000000UL) /*!< PSARE30 (Bitfield-Mask: 0x01) */ + #define R_PSCU_PSARE_PSARE31_Pos (31UL) /*!< PSARE31 (Bit 31) */ + #define R_PSCU_PSARE_PSARE31_Msk (0x80000000UL) /*!< PSARE31 (Bitfield-Mask: 0x01) */ +/* ========================================================= MSSAR ========================================================= */ + #define R_PSCU_MSSAR_MSSAR0_Pos (0UL) /*!< MSSAR0 (Bit 0) */ + #define R_PSCU_MSSAR_MSSAR0_Msk (0x1UL) /*!< MSSAR0 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR1_Pos (1UL) /*!< MSSAR1 (Bit 1) */ + #define R_PSCU_MSSAR_MSSAR1_Msk (0x2UL) /*!< MSSAR1 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR2_Pos (2UL) /*!< MSSAR2 (Bit 2) */ + #define R_PSCU_MSSAR_MSSAR2_Msk (0x4UL) /*!< MSSAR2 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR3_Pos (3UL) /*!< MSSAR3 (Bit 3) */ + #define R_PSCU_MSSAR_MSSAR3_Msk (0x8UL) /*!< MSSAR3 (Bitfield-Mask: 0x01) */ + #define R_PSCU_MSSAR_MSSAR4_Pos (4UL) /*!< MSSAR4 (Bit 4) */ + #define R_PSCU_MSSAR_MSSAR4_Msk (0x10UL) /*!< MSSAR4 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFSAMONA ======================================================== */ + #define R_PSCU_CFSAMONA_CFS2_Pos (15UL) /*!< CFS2 (Bit 15) */ + #define R_PSCU_CFSAMONA_CFS2_Msk (0xff8000UL) /*!< CFS2 (Bitfield-Mask: 0x1ff) */ +/* ======================================================= CFSAMONB ======================================================== */ + #define R_PSCU_CFSAMONB_CFS1_Pos (10UL) /*!< CFS1 (Bit 10) */ + #define R_PSCU_CFSAMONB_CFS1_Msk (0xfffc00UL) /*!< CFS1 (Bitfield-Mask: 0x3fff) */ +/* ======================================================== DFSAMON ======================================================== */ + #define R_PSCU_DFSAMON_DFS_Pos (10UL) /*!< DFS (Bit 10) */ + #define R_PSCU_DFSAMON_DFS_Msk (0xfc00UL) /*!< DFS (Bitfield-Mask: 0x3f) */ +/* ======================================================== SSAMONA ======================================================== */ + #define R_PSCU_SSAMONA_SS2_Pos (13UL) /*!< SS2 (Bit 13) */ + #define R_PSCU_SSAMONA_SS2_Msk (0x1fe000UL) /*!< SS2 (Bitfield-Mask: 0xff) */ +/* ======================================================== SSAMONB ======================================================== */ + #define R_PSCU_SSAMONB_SS1_Pos (10UL) /*!< SS1 (Bit 10) */ + #define R_PSCU_SSAMONB_SS1_Msk (0x1ffc00UL) /*!< SS1 (Bitfield-Mask: 0x7ff) */ +/* ======================================================== DLMMON ========================================================= */ + #define R_PSCU_DLMMON_DLMMON_Pos (0UL) /*!< DLMMON (Bit 0) */ + #define R_PSCU_DLMMON_DLMMON_Msk (0xfUL) /*!< DLMMON (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_CANFD0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CFDGCFG ======================================================== */ + #define R_CANFD_CFDGCFG_TPRI_Pos (0UL) /*!< TPRI (Bit 0) */ + #define R_CANFD_CFDGCFG_TPRI_Msk (0x1UL) /*!< TPRI (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DCE_Pos (1UL) /*!< DCE (Bit 1) */ + #define R_CANFD_CFDGCFG_DCE_Msk (0x2UL) /*!< DCE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DRE_Pos (2UL) /*!< DRE (Bit 2) */ + #define R_CANFD_CFDGCFG_DRE_Msk (0x4UL) /*!< DRE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_MME_Pos (3UL) /*!< MME (Bit 3) */ + #define R_CANFD_CFDGCFG_MME_Msk (0x8UL) /*!< MME (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_DCS_Pos (4UL) /*!< DCS (Bit 4) */ + #define R_CANFD_CFDGCFG_DCS_Msk (0x10UL) /*!< DCS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_CMPOC_Pos (5UL) /*!< CMPOC (Bit 5) */ + #define R_CANFD_CFDGCFG_CMPOC_Msk (0x20UL) /*!< CMPOC (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_TSP_Pos (8UL) /*!< TSP (Bit 8) */ + #define R_CANFD_CFDGCFG_TSP_Msk (0xf00UL) /*!< TSP (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGCFG_TSSS_Pos (12UL) /*!< TSSS (Bit 12) */ + #define R_CANFD_CFDGCFG_TSSS_Msk (0x1000UL) /*!< TSSS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCFG_ITRCP_Pos (16UL) /*!< ITRCP (Bit 16) */ + #define R_CANFD_CFDGCFG_ITRCP_Msk (0xffff0000UL) /*!< ITRCP (Bitfield-Mask: 0xffff) */ +/* ======================================================== CFDGCTR ======================================================== */ + #define R_CANFD_CFDGCTR_GMDC_Pos (0UL) /*!< GMDC (Bit 0) */ + #define R_CANFD_CFDGCTR_GMDC_Msk (0x3UL) /*!< GMDC (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDGCTR_GSLPR_Pos (2UL) /*!< GSLPR (Bit 2) */ + #define R_CANFD_CFDGCTR_GSLPR_Msk (0x4UL) /*!< GSLPR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_DEIE_Pos (8UL) /*!< DEIE (Bit 8) */ + #define R_CANFD_CFDGCTR_DEIE_Msk (0x100UL) /*!< DEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_MEIE_Pos (9UL) /*!< MEIE (Bit 9) */ + #define R_CANFD_CFDGCTR_MEIE_Msk (0x200UL) /*!< MEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_THLEIE_Pos (10UL) /*!< THLEIE (Bit 10) */ + #define R_CANFD_CFDGCTR_THLEIE_Msk (0x400UL) /*!< THLEIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_CMPOFIE_Pos (11UL) /*!< CMPOFIE (Bit 11) */ + #define R_CANFD_CFDGCTR_CMPOFIE_Msk (0x800UL) /*!< CMPOFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGCTR_TSRST_Pos (16UL) /*!< TSRST (Bit 16) */ + #define R_CANFD_CFDGCTR_TSRST_Msk (0x10000UL) /*!< TSRST (Bitfield-Mask: 0x01) */ +/* ======================================================== CFDGSTS ======================================================== */ + #define R_CANFD_CFDGSTS_GRSTSTS_Pos (0UL) /*!< GRSTSTS (Bit 0) */ + #define R_CANFD_CFDGSTS_GRSTSTS_Msk (0x1UL) /*!< GRSTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GHLTSTS_Pos (1UL) /*!< GHLTSTS (Bit 1) */ + #define R_CANFD_CFDGSTS_GHLTSTS_Msk (0x2UL) /*!< GHLTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GSLPSTS_Pos (2UL) /*!< GSLPSTS (Bit 2) */ + #define R_CANFD_CFDGSTS_GSLPSTS_Msk (0x4UL) /*!< GSLPSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGSTS_GRAMINIT_Pos (3UL) /*!< GRAMINIT (Bit 3) */ + #define R_CANFD_CFDGSTS_GRAMINIT_Msk (0x8UL) /*!< GRAMINIT (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGERFL ======================================================== */ + #define R_CANFD_CFDGERFL_DEF_Pos (0UL) /*!< DEF (Bit 0) */ + #define R_CANFD_CFDGERFL_DEF_Msk (0x1UL) /*!< DEF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_MES_Pos (1UL) /*!< MES (Bit 1) */ + #define R_CANFD_CFDGERFL_MES_Msk (0x2UL) /*!< MES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_THLES_Pos (2UL) /*!< THLES (Bit 2) */ + #define R_CANFD_CFDGERFL_THLES_Msk (0x4UL) /*!< THLES (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_CMPOF_Pos (3UL) /*!< CMPOF (Bit 3) */ + #define R_CANFD_CFDGERFL_CMPOF_Msk (0x8UL) /*!< CMPOF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGERFL_EEF0_Pos (16UL) /*!< EEF0 (Bit 16) */ + #define R_CANFD_CFDGERFL_EEF0_Msk (0x10000UL) /*!< EEF0 (Bitfield-Mask: 0x01) */ +/* ======================================================== CFDGTSC ======================================================== */ + #define R_CANFD_CFDGTSC_TS_Pos (0UL) /*!< TS (Bit 0) */ + #define R_CANFD_CFDGTSC_TS_Msk (0xffffUL) /*!< TS (Bitfield-Mask: 0xffff) */ +/* ====================================================== CFDGAFLECTR ====================================================== */ + #define R_CANFD_CFDGAFLECTR_AFLPN_Pos (0UL) /*!< AFLPN (Bit 0) */ + #define R_CANFD_CFDGAFLECTR_AFLPN_Msk (0xfUL) /*!< AFLPN (Bitfield-Mask: 0x0f) */ + #define R_CANFD_CFDGAFLECTR_AFLDAE_Pos (8UL) /*!< AFLDAE (Bit 8) */ + #define R_CANFD_CFDGAFLECTR_AFLDAE_Msk (0x100UL) /*!< AFLDAE (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDGAFLCFG0 ====================================================== */ + #define R_CANFD_CFDGAFLCFG0_RNC1_Pos (0UL) /*!< RNC1 (Bit 0) */ + #define R_CANFD_CFDGAFLCFG0_RNC1_Msk (0x1ffUL) /*!< RNC1 (Bitfield-Mask: 0x1ff) */ + #define R_CANFD_CFDGAFLCFG0_RNC0_Pos (16UL) /*!< RNC0 (Bit 16) */ + #define R_CANFD_CFDGAFLCFG0_RNC0_Msk (0x1ff0000UL) /*!< RNC0 (Bitfield-Mask: 0x1ff) */ +/* ======================================================== CFDRMNB ======================================================== */ + #define R_CANFD_CFDRMNB_NRXMB_Pos (0UL) /*!< NRXMB (Bit 0) */ + #define R_CANFD_CFDRMNB_NRXMB_Msk (0xffUL) /*!< NRXMB (Bitfield-Mask: 0xff) */ + #define R_CANFD_CFDRMNB_RMPLS_Pos (8UL) /*!< RMPLS (Bit 8) */ + #define R_CANFD_CFDRMNB_RMPLS_Msk (0x700UL) /*!< RMPLS (Bitfield-Mask: 0x07) */ +/* ======================================================= CFDRMND0 ======================================================== */ + #define R_CANFD_CFDRMND0_RMNSu_Pos (0UL) /*!< RMNSu (Bit 0) */ + #define R_CANFD_CFDRMND0_RMNSu_Msk (0xffffffffUL) /*!< RMNSu (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= CFDRMIEC ======================================================== */ + #define R_CANFD_CFDRMIEC_RMIE_Pos (0UL) /*!< RMIE (Bit 0) */ + #define R_CANFD_CFDRMIEC_RMIE_Msk (0xffffffffUL) /*!< RMIE (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== CFDRFCC ======================================================== */ + #define R_CANFD_CFDRFCC_RFE_Pos (0UL) /*!< RFE (Bit 0) */ + #define R_CANFD_CFDRFCC_RFE_Msk (0x1UL) /*!< RFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFIE_Pos (1UL) /*!< RFIE (Bit 1) */ + #define R_CANFD_CFDRFCC_RFIE_Msk (0x2UL) /*!< RFIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFPLS_Pos (4UL) /*!< RFPLS (Bit 4) */ + #define R_CANFD_CFDRFCC_RFPLS_Msk (0x70UL) /*!< RFPLS (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDRFCC_RFDC_Pos (8UL) /*!< RFDC (Bit 8) */ + #define R_CANFD_CFDRFCC_RFDC_Msk (0x700UL) /*!< RFDC (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDRFCC_RFIM_Pos (12UL) /*!< RFIM (Bit 12) */ + #define R_CANFD_CFDRFCC_RFIM_Msk (0x1000UL) /*!< RFIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFCC_RFIGCV_Pos (13UL) /*!< RFIGCV (Bit 13) */ + #define R_CANFD_CFDRFCC_RFIGCV_Msk (0xe000UL) /*!< RFIGCV (Bitfield-Mask: 0x07) */ +/* ======================================================= CFDRFSTS ======================================================== */ + #define R_CANFD_CFDRFSTS_RFEMP_Pos (0UL) /*!< RFEMP (Bit 0) */ + #define R_CANFD_CFDRFSTS_RFEMP_Msk (0x1UL) /*!< RFEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFFLL_Pos (1UL) /*!< RFFLL (Bit 1) */ + #define R_CANFD_CFDRFSTS_RFFLL_Msk (0x2UL) /*!< RFFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFMLT_Pos (2UL) /*!< RFMLT (Bit 2) */ + #define R_CANFD_CFDRFSTS_RFMLT_Msk (0x4UL) /*!< RFMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFIF_Pos (3UL) /*!< RFIF (Bit 3) */ + #define R_CANFD_CFDRFSTS_RFIF_Msk (0x8UL) /*!< RFIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDRFSTS_RFMC_Pos (8UL) /*!< RFMC (Bit 8) */ + #define R_CANFD_CFDRFSTS_RFMC_Msk (0xff00UL) /*!< RFMC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDRFPCTR ======================================================= */ + #define R_CANFD_CFDRFPCTR_RFPC_Pos (0UL) /*!< RFPC (Bit 0) */ + #define R_CANFD_CFDRFPCTR_RFPC_Msk (0xffUL) /*!< RFPC (Bitfield-Mask: 0xff) */ +/* ======================================================== CFDCFCC ======================================================== */ + #define R_CANFD_CFDCFCC_CFE_Pos (0UL) /*!< CFE (Bit 0) */ + #define R_CANFD_CFDCFCC_CFE_Msk (0x1UL) /*!< CFE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFRXIE_Pos (1UL) /*!< CFRXIE (Bit 1) */ + #define R_CANFD_CFDCFCC_CFRXIE_Msk (0x2UL) /*!< CFRXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFTXIE_Pos (2UL) /*!< CFTXIE (Bit 2) */ + #define R_CANFD_CFDCFCC_CFTXIE_Msk (0x4UL) /*!< CFTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFPLS_Pos (4UL) /*!< CFPLS (Bit 4) */ + #define R_CANFD_CFDCFCC_CFPLS_Msk (0x70UL) /*!< CFPLS (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFM_Pos (8UL) /*!< CFM (Bit 8) */ + #define R_CANFD_CFDCFCC_CFM_Msk (0x300UL) /*!< CFM (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDCFCC_CFITSS_Pos (10UL) /*!< CFITSS (Bit 10) */ + #define R_CANFD_CFDCFCC_CFITSS_Msk (0x400UL) /*!< CFITSS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFITR_Pos (11UL) /*!< CFITR (Bit 11) */ + #define R_CANFD_CFDCFCC_CFITR_Msk (0x800UL) /*!< CFITR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFIM_Pos (12UL) /*!< CFIM (Bit 12) */ + #define R_CANFD_CFDCFCC_CFIM_Msk (0x1000UL) /*!< CFIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFCC_CFIGCV_Pos (13UL) /*!< CFIGCV (Bit 13) */ + #define R_CANFD_CFDCFCC_CFIGCV_Msk (0xe000UL) /*!< CFIGCV (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFTML_Pos (16UL) /*!< CFTML (Bit 16) */ + #define R_CANFD_CFDCFCC_CFTML_Msk (0x1f0000UL) /*!< CFTML (Bitfield-Mask: 0x1f) */ + #define R_CANFD_CFDCFCC_CFDC_Pos (21UL) /*!< CFDC (Bit 21) */ + #define R_CANFD_CFDCFCC_CFDC_Msk (0xe00000UL) /*!< CFDC (Bitfield-Mask: 0x07) */ + #define R_CANFD_CFDCFCC_CFITT_Pos (24UL) /*!< CFITT (Bit 24) */ + #define R_CANFD_CFDCFCC_CFITT_Msk (0xff000000UL) /*!< CFITT (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDCFSTS ======================================================== */ + #define R_CANFD_CFDCFSTS_CFEMP_Pos (0UL) /*!< CFEMP (Bit 0) */ + #define R_CANFD_CFDCFSTS_CFEMP_Msk (0x1UL) /*!< CFEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFFLL_Pos (1UL) /*!< CFFLL (Bit 1) */ + #define R_CANFD_CFDCFSTS_CFFLL_Msk (0x2UL) /*!< CFFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFMLT_Pos (2UL) /*!< CFMLT (Bit 2) */ + #define R_CANFD_CFDCFSTS_CFMLT_Msk (0x4UL) /*!< CFMLT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFRXIF_Pos (3UL) /*!< CFRXIF (Bit 3) */ + #define R_CANFD_CFDCFSTS_CFRXIF_Msk (0x8UL) /*!< CFRXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFTXIF_Pos (4UL) /*!< CFTXIF (Bit 4) */ + #define R_CANFD_CFDCFSTS_CFTXIF_Msk (0x10UL) /*!< CFTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCFSTS_CFMC_Pos (8UL) /*!< CFMC (Bit 8) */ + #define R_CANFD_CFDCFSTS_CFMC_Msk (0xff00UL) /*!< CFMC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDCFPCTR ======================================================= */ + #define R_CANFD_CFDCFPCTR_CFPC_Pos (0UL) /*!< CFPC (Bit 0) */ + #define R_CANFD_CFDCFPCTR_CFPC_Msk (0xffUL) /*!< CFPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDFESTS ======================================================== */ + #define R_CANFD_CFDFESTS_RFXEMP_Pos (0UL) /*!< RFXEMP (Bit 0) */ + #define R_CANFD_CFDFESTS_RFXEMP_Msk (0x3UL) /*!< RFXEMP (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDFESTS_CFXEMP_Pos (8UL) /*!< CFXEMP (Bit 8) */ + #define R_CANFD_CFDFESTS_CFXEMP_Msk (0x100UL) /*!< CFXEMP (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDFFSTS ======================================================== */ + #define R_CANFD_CFDFFSTS_RFXFLL_Pos (0UL) /*!< RFXFLL (Bit 0) */ + #define R_CANFD_CFDFFSTS_RFXFLL_Msk (0x3UL) /*!< RFXFLL (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDFFSTS_CFXFLL_Pos (8UL) /*!< CFXFLL (Bit 8) */ + #define R_CANFD_CFDFFSTS_CFXFLL_Msk (0x100UL) /*!< CFXFLL (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDFMSTS ======================================================== */ + #define R_CANFD_CFDFMSTS_RFXMLT_Pos (0UL) /*!< RFXMLT (Bit 0) */ + #define R_CANFD_CFDFMSTS_RFXMLT_Msk (0x3UL) /*!< RFXMLT (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDFMSTS_CFXMLT_Pos (8UL) /*!< CFXMLT (Bit 8) */ + #define R_CANFD_CFDFMSTS_CFXMLT_Msk (0x100UL) /*!< CFXMLT (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDRFISTS ======================================================= */ + #define R_CANFD_CFDRFISTS_RFXIF_Pos (0UL) /*!< RFXIF (Bit 0) */ + #define R_CANFD_CFDRFISTS_RFXIF_Msk (0x3UL) /*!< RFXIF (Bitfield-Mask: 0x03) */ +/* ======================================================== CFDTMC ========================================================= */ + #define R_CANFD_CFDTMC_TMTR_Pos (0UL) /*!< TMTR (Bit 0) */ + #define R_CANFD_CFDTMC_TMTR_Msk (0x1UL) /*!< TMTR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMC_TMTAR_Pos (1UL) /*!< TMTAR (Bit 1) */ + #define R_CANFD_CFDTMC_TMTAR_Msk (0x2UL) /*!< TMTAR (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMC_TMOM_Pos (2UL) /*!< TMOM (Bit 2) */ + #define R_CANFD_CFDTMC_TMOM_Msk (0x4UL) /*!< TMOM (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDTMSTS ======================================================== */ + #define R_CANFD_CFDTMSTS_TMTSTS_Pos (0UL) /*!< TMTSTS (Bit 0) */ + #define R_CANFD_CFDTMSTS_TMTSTS_Msk (0x1UL) /*!< TMTSTS (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMSTS_TMTRF_Pos (1UL) /*!< TMTRF (Bit 1) */ + #define R_CANFD_CFDTMSTS_TMTRF_Msk (0x6UL) /*!< TMTRF (Bitfield-Mask: 0x03) */ + #define R_CANFD_CFDTMSTS_TMTRM_Pos (3UL) /*!< TMTRM (Bit 3) */ + #define R_CANFD_CFDTMSTS_TMTRM_Msk (0x8UL) /*!< TMTRM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTMSTS_TMTARM_Pos (4UL) /*!< TMTARM (Bit 4) */ + #define R_CANFD_CFDTMSTS_TMTARM_Msk (0x10UL) /*!< TMTARM (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDTMTRSTS ======================================================= */ + #define R_CANFD_CFDTMTRSTS_CFDTMTRSTSg_Pos (0UL) /*!< CFDTMTRSTSg (Bit 0) */ + #define R_CANFD_CFDTMTRSTS_CFDTMTRSTSg_Msk (0xfUL) /*!< CFDTMTRSTSg (Bitfield-Mask: 0x0f) */ +/* ====================================================== CFDTMTARSTS ====================================================== */ + #define R_CANFD_CFDTMTARSTS_CFDTMTARSTSg_Pos (0UL) /*!< CFDTMTARSTSg (Bit 0) */ + #define R_CANFD_CFDTMTARSTS_CFDTMTARSTSg_Msk (0xfUL) /*!< CFDTMTARSTSg (Bitfield-Mask: 0x0f) */ +/* ====================================================== CFDTMTCSTS ======================================================= */ + #define R_CANFD_CFDTMTCSTS_CFDTMTCSTSg_Pos (0UL) /*!< CFDTMTCSTSg (Bit 0) */ + #define R_CANFD_CFDTMTCSTS_CFDTMTCSTSg_Msk (0xfUL) /*!< CFDTMTCSTSg (Bitfield-Mask: 0x0f) */ +/* ====================================================== CFDTMTASTS ======================================================= */ + #define R_CANFD_CFDTMTASTS_CFDTMTASTSg_Pos (0UL) /*!< CFDTMTASTSg (Bit 0) */ + #define R_CANFD_CFDTMTASTS_CFDTMTASTSg_Msk (0xfUL) /*!< CFDTMTASTSg (Bitfield-Mask: 0x0f) */ +/* ======================================================= CFDTMIEC ======================================================== */ + #define R_CANFD_CFDTMIEC_TMIEg_Pos (0UL) /*!< TMIEg (Bit 0) */ + #define R_CANFD_CFDTMIEC_TMIEg_Msk (0xfUL) /*!< TMIEg (Bitfield-Mask: 0x0f) */ +/* ======================================================= CFDTXQCC0 ======================================================= */ + #define R_CANFD_CFDTXQCC0_TXQE_Pos (0UL) /*!< TXQE (Bit 0) */ + #define R_CANFD_CFDTXQCC0_TXQE_Msk (0x1UL) /*!< TXQE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQTXIE_Pos (5UL) /*!< TXQTXIE (Bit 5) */ + #define R_CANFD_CFDTXQCC0_TXQTXIE_Msk (0x20UL) /*!< TXQTXIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQIM_Pos (7UL) /*!< TXQIM (Bit 7) */ + #define R_CANFD_CFDTXQCC0_TXQIM_Msk (0x80UL) /*!< TXQIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQCC0_TXQDC_Pos (8UL) /*!< TXQDC (Bit 8) */ + #define R_CANFD_CFDTXQCC0_TXQDC_Msk (0x300UL) /*!< TXQDC (Bitfield-Mask: 0x03) */ +/* ====================================================== CFDTXQSTS0 ======================================================= */ + #define R_CANFD_CFDTXQSTS0_TXQEMP_Pos (0UL) /*!< TXQEMP (Bit 0) */ + #define R_CANFD_CFDTXQSTS0_TXQEMP_Msk (0x1UL) /*!< TXQEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQFLL_Pos (1UL) /*!< TXQFLL (Bit 1) */ + #define R_CANFD_CFDTXQSTS0_TXQFLL_Msk (0x2UL) /*!< TXQFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQTXIF_Pos (2UL) /*!< TXQTXIF (Bit 2) */ + #define R_CANFD_CFDTXQSTS0_TXQTXIF_Msk (0x4UL) /*!< TXQTXIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTXQSTS0_TXQMC_Pos (8UL) /*!< TXQMC (Bit 8) */ + #define R_CANFD_CFDTXQSTS0_TXQMC_Msk (0x3f00UL) /*!< TXQMC (Bitfield-Mask: 0x3f) */ +/* ====================================================== CFDTXQPCTR0 ====================================================== */ + #define R_CANFD_CFDTXQPCTR0_TXQPC_Pos (0UL) /*!< TXQPC (Bit 0) */ + #define R_CANFD_CFDTXQPCTR0_TXQPC_Msk (0xffUL) /*!< TXQPC (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDTHLCC ======================================================== */ + #define R_CANFD_CFDTHLCC_THLE_Pos (0UL) /*!< THLE (Bit 0) */ + #define R_CANFD_CFDTHLCC_THLE_Msk (0x1UL) /*!< THLE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLIE_Pos (8UL) /*!< THLIE (Bit 8) */ + #define R_CANFD_CFDTHLCC_THLIE_Msk (0x100UL) /*!< THLIE (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLIM_Pos (9UL) /*!< THLIM (Bit 9) */ + #define R_CANFD_CFDTHLCC_THLIM_Msk (0x200UL) /*!< THLIM (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLCC_THLDTE_Pos (10UL) /*!< THLDTE (Bit 10) */ + #define R_CANFD_CFDTHLCC_THLDTE_Msk (0x400UL) /*!< THLDTE (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDTHLSTS ======================================================= */ + #define R_CANFD_CFDTHLSTS_THLEMP_Pos (0UL) /*!< THLEMP (Bit 0) */ + #define R_CANFD_CFDTHLSTS_THLEMP_Msk (0x1UL) /*!< THLEMP (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLFLL_Pos (1UL) /*!< THLFLL (Bit 1) */ + #define R_CANFD_CFDTHLSTS_THLFLL_Msk (0x2UL) /*!< THLFLL (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLELT_Pos (2UL) /*!< THLELT (Bit 2) */ + #define R_CANFD_CFDTHLSTS_THLELT_Msk (0x4UL) /*!< THLELT (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLIF_Pos (3UL) /*!< THLIF (Bit 3) */ + #define R_CANFD_CFDTHLSTS_THLIF_Msk (0x8UL) /*!< THLIF (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDTHLSTS_THLMC_Pos (8UL) /*!< THLMC (Bit 8) */ + #define R_CANFD_CFDTHLSTS_THLMC_Msk (0x3f00UL) /*!< THLMC (Bitfield-Mask: 0x3f) */ +/* ====================================================== CFDTHLPCTR ======================================================= */ + #define R_CANFD_CFDTHLPCTR_THLPC_Pos (0UL) /*!< THLPC (Bit 0) */ + #define R_CANFD_CFDTHLPCTR_THLPC_Msk (0xffUL) /*!< THLPC (Bitfield-Mask: 0xff) */ +/* ===================================================== CFDGTINTSTS0 ====================================================== */ + #define R_CANFD_CFDGTINTSTS0_TSIF0_Pos (0UL) /*!< TSIF0 (Bit 0) */ + #define R_CANFD_CFDGTINTSTS0_TSIF0_Msk (0x1UL) /*!< TSIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TAIF0_Pos (1UL) /*!< TAIF0 (Bit 1) */ + #define R_CANFD_CFDGTINTSTS0_TAIF0_Msk (0x2UL) /*!< TAIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_TQIF0_Pos (2UL) /*!< TQIF0 (Bit 2) */ + #define R_CANFD_CFDGTINTSTS0_TQIF0_Msk (0x4UL) /*!< TQIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF0_Pos (3UL) /*!< CFTIF0 (Bit 3) */ + #define R_CANFD_CFDGTINTSTS0_CFTIF0_Msk (0x8UL) /*!< CFTIF0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGTINTSTS0_THIF0_Pos (4UL) /*!< THIF0 (Bit 4) */ + #define R_CANFD_CFDGTINTSTS0_THIF0_Msk (0x10UL) /*!< THIF0 (Bitfield-Mask: 0x01) */ +/* ====================================================== CFDGTSTCFG ======================================================= */ + #define R_CANFD_CFDGTSTCFG_RTMPS_Pos (16UL) /*!< RTMPS (Bit 16) */ + #define R_CANFD_CFDGTSTCFG_RTMPS_Msk (0x3ff0000UL) /*!< RTMPS (Bitfield-Mask: 0x3ff) */ +/* ====================================================== CFDGTSTCTR ======================================================= */ + #define R_CANFD_CFDGTSTCTR_RTME_Pos (2UL) /*!< RTME (Bit 2) */ + #define R_CANFD_CFDGTSTCTR_RTME_Msk (0x4UL) /*!< RTME (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGFDCFG ======================================================= */ + #define R_CANFD_CFDGFDCFG_RPED_Pos (0UL) /*!< RPED (Bit 0) */ + #define R_CANFD_CFDGFDCFG_RPED_Msk (0x1UL) /*!< RPED (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGFDCFG_TSCCFG_Pos (8UL) /*!< TSCCFG (Bit 8) */ + #define R_CANFD_CFDGFDCFG_TSCCFG_Msk (0x300UL) /*!< TSCCFG (Bitfield-Mask: 0x03) */ +/* ======================================================= CFDGLOCKK ======================================================= */ + #define R_CANFD_CFDGLOCKK_LOCK_Pos (0UL) /*!< LOCK (Bit 0) */ + #define R_CANFD_CFDGLOCKK_LOCK_Msk (0xffffUL) /*!< LOCK (Bitfield-Mask: 0xffff) */ +/* ===================================================== CFDGAFLIGNENT ===================================================== */ + #define R_CANFD_CFDGAFLIGNENT_IRN_Pos (0UL) /*!< IRN (Bit 0) */ + #define R_CANFD_CFDGAFLIGNENT_IRN_Msk (0x1fUL) /*!< IRN (Bitfield-Mask: 0x1f) */ +/* ===================================================== CFDGAFLIGNCTR ===================================================== */ + #define R_CANFD_CFDGAFLIGNCTR_IREN_Pos (0UL) /*!< IREN (Bit 0) */ + #define R_CANFD_CFDGAFLIGNCTR_IREN_Msk (0x1UL) /*!< IREN (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGAFLIGNCTR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_CANFD_CFDGAFLIGNCTR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDCDTCT ======================================================== */ + #define R_CANFD_CFDCDTCT_RFDMAE0_Pos (0UL) /*!< RFDMAE0 (Bit 0) */ + #define R_CANFD_CFDCDTCT_RFDMAE0_Msk (0x1UL) /*!< RFDMAE0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_RFDMAE1_Pos (1UL) /*!< RFDMAE1 (Bit 1) */ + #define R_CANFD_CFDCDTCT_RFDMAE1_Msk (0x2UL) /*!< RFDMAE1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTCT_CFDMAE0_Pos (8UL) /*!< CFDMAE0 (Bit 8) */ + #define R_CANFD_CFDCDTCT_CFDMAE0_Msk (0x100UL) /*!< CFDMAE0 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDCDTSTS ======================================================= */ + #define R_CANFD_CFDCDTSTS_RFDMASTS0_Pos (0UL) /*!< RFDMASTS0 (Bit 0) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS0_Msk (0x1UL) /*!< RFDMASTS0 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS1_Pos (1UL) /*!< RFDMASTS1 (Bit 1) */ + #define R_CANFD_CFDCDTSTS_RFDMASTS1_Msk (0x2UL) /*!< RFDMASTS1 (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS0_Pos (8UL) /*!< CFDMASTS0 (Bit 8) */ + #define R_CANFD_CFDCDTSTS_CFDMASTS0_Msk (0x100UL) /*!< CFDMASTS0 (Bitfield-Mask: 0x01) */ +/* ======================================================= CFDGRSTC ======================================================== */ + #define R_CANFD_CFDGRSTC_SRST_Pos (0UL) /*!< SRST (Bit 0) */ + #define R_CANFD_CFDGRSTC_SRST_Msk (0x1UL) /*!< SRST (Bitfield-Mask: 0x01) */ + #define R_CANFD_CFDGRSTC_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_CANFD_CFDGRSTC_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ======================================================= CFDRPGACC ======================================================= */ + #define R_CANFD_CFDRPGACC_RDTA_Pos (0UL) /*!< RDTA (Bit 0) */ + #define R_CANFD_CFDRPGACC_RDTA_Msk (0xffffffffUL) /*!< RDTA (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ 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_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_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_DMA ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DMAST ========================================================= */ + #define R_DMA_DMAST_DMST_Pos (0UL) /*!< DMST (Bit 0) */ + #define R_DMA_DMAST_DMST_Msk (0x1UL) /*!< DMST (Bitfield-Mask: 0x01) */ +/* ========================================================= DMCTL ========================================================= */ + #define R_DMA_DMCTL_PR_Pos (0UL) /*!< PR (Bit 0) */ + #define R_DMA_DMCTL_PR_Msk (0x1UL) /*!< PR (Bitfield-Mask: 0x01) */ + #define R_DMA_DMCTL_ERCH_Pos (4UL) /*!< ERCH (Bit 4) */ + #define R_DMA_DMCTL_ERCH_Msk (0x10UL) /*!< ERCH (Bitfield-Mask: 0x01) */ +/* ======================================================== DMECHR ========================================================= */ + #define R_DMA_DMECHR_DMECH_Pos (0UL) /*!< DMECH (Bit 0) */ + #define R_DMA_DMECHR_DMECH_Msk (0xfUL) /*!< DMECH (Bitfield-Mask: 0x0f) */ + #define R_DMA_DMECHR_DMECHSAM_Pos (8UL) /*!< DMECHSAM (Bit 8) */ + #define R_DMA_DMECHR_DMECHSAM_Msk (0x100UL) /*!< DMECHSAM (Bitfield-Mask: 0x01) */ + #define R_DMA_DMECHR_DMESTA_Pos (16UL) /*!< DMESTA (Bit 16) */ + #define R_DMA_DMECHR_DMESTA_Msk (0x10000UL) /*!< DMESTA (Bitfield-Mask: 0x01) */ +/* ========================================================= DELSR ========================================================= */ + #define R_DMA_DELSR_IR_Pos (16UL) /*!< IR (Bit 16) */ + #define R_DMA_DELSR_IR_Msk (0x10000UL) /*!< IR (Bitfield-Mask: 0x01) */ + #define R_DMA_DELSR_DELS_Pos (0UL) /*!< DELS (Bit 0) */ + #define R_DMA_DELSR_DELS_Msk (0x1ffUL) /*!< DELS (Bitfield-Mask: 0x1ff) */ + +/* =========================================================================================================================== */ +/* ================ R_DMAC0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DMSAR ========================================================= */ + #define R_DMAC0_DMSAR_DMSAR_Pos (0UL) /*!< DMSAR (Bit 0) */ + #define R_DMAC0_DMSAR_DMSAR_Msk (0xffffffffUL) /*!< DMSAR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DMDAR ========================================================= */ + #define R_DMAC0_DMDAR_DMDAR_Pos (0UL) /*!< DMDAR (Bit 0) */ + #define R_DMAC0_DMDAR_DMDAR_Msk (0xffffffffUL) /*!< DMDAR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DMCRA ========================================================= */ + #define R_DMAC0_DMCRA_DMCRAH_Pos (16UL) /*!< DMCRAH (Bit 16) */ + #define R_DMAC0_DMCRA_DMCRAH_Msk (0x3ff0000UL) /*!< DMCRAH (Bitfield-Mask: 0x3ff) */ + #define R_DMAC0_DMCRA_DMCRAL_Pos (0UL) /*!< DMCRAL (Bit 0) */ + #define R_DMAC0_DMCRA_DMCRAL_Msk (0xffffUL) /*!< DMCRAL (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMCRB ========================================================= */ + #define R_DMAC0_DMCRB_DMCRBL_Pos (0UL) /*!< DMCRBL (Bit 0) */ + #define R_DMAC0_DMCRB_DMCRBL_Msk (0xffffUL) /*!< DMCRBL (Bitfield-Mask: 0xffff) */ + #define R_DMAC0_DMCRB_DMCRBH_Pos (16UL) /*!< DMCRBH (Bit 16) */ + #define R_DMAC0_DMCRB_DMCRBH_Msk (0xffff0000UL) /*!< DMCRBH (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMTMD ========================================================= */ + #define R_DMAC0_DMTMD_MD_Pos (14UL) /*!< MD (Bit 14) */ + #define R_DMAC0_DMTMD_MD_Msk (0xc000UL) /*!< MD (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMTMD_DTS_Pos (12UL) /*!< DTS (Bit 12) */ + #define R_DMAC0_DMTMD_DTS_Msk (0x3000UL) /*!< DTS (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMTMD_SZ_Pos (8UL) /*!< SZ (Bit 8) */ + #define R_DMAC0_DMTMD_SZ_Msk (0x300UL) /*!< SZ (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMTMD_DCTG_Pos (0UL) /*!< DCTG (Bit 0) */ + #define R_DMAC0_DMTMD_DCTG_Msk (0x3UL) /*!< DCTG (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMTMD_TKP_Pos (10UL) /*!< TKP (Bit 10) */ + #define R_DMAC0_DMTMD_TKP_Msk (0x400UL) /*!< TKP (Bitfield-Mask: 0x01) */ +/* ========================================================= DMINT ========================================================= */ + #define R_DMAC0_DMINT_DTIE_Pos (4UL) /*!< DTIE (Bit 4) */ + #define R_DMAC0_DMINT_DTIE_Msk (0x10UL) /*!< DTIE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMINT_ESIE_Pos (3UL) /*!< ESIE (Bit 3) */ + #define R_DMAC0_DMINT_ESIE_Msk (0x8UL) /*!< ESIE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMINT_RPTIE_Pos (2UL) /*!< RPTIE (Bit 2) */ + #define R_DMAC0_DMINT_RPTIE_Msk (0x4UL) /*!< RPTIE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMINT_SARIE_Pos (1UL) /*!< SARIE (Bit 1) */ + #define R_DMAC0_DMINT_SARIE_Msk (0x2UL) /*!< SARIE (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMINT_DARIE_Pos (0UL) /*!< DARIE (Bit 0) */ + #define R_DMAC0_DMINT_DARIE_Msk (0x1UL) /*!< DARIE (Bitfield-Mask: 0x01) */ +/* ========================================================= DMAMD ========================================================= */ + #define R_DMAC0_DMAMD_SM_Pos (14UL) /*!< SM (Bit 14) */ + #define R_DMAC0_DMAMD_SM_Msk (0xc000UL) /*!< SM (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMAMD_SARA_Pos (8UL) /*!< SARA (Bit 8) */ + #define R_DMAC0_DMAMD_SARA_Msk (0x1f00UL) /*!< SARA (Bitfield-Mask: 0x1f) */ + #define R_DMAC0_DMAMD_DM_Pos (6UL) /*!< DM (Bit 6) */ + #define R_DMAC0_DMAMD_DM_Msk (0xc0UL) /*!< DM (Bitfield-Mask: 0x03) */ + #define R_DMAC0_DMAMD_DARA_Pos (0UL) /*!< DARA (Bit 0) */ + #define R_DMAC0_DMAMD_DARA_Msk (0x1fUL) /*!< DARA (Bitfield-Mask: 0x1f) */ + #define R_DMAC0_DMAMD_DADR_Pos (5UL) /*!< DADR (Bit 5) */ + #define R_DMAC0_DMAMD_DADR_Msk (0x20UL) /*!< DADR (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMAMD_SADR_Pos (13UL) /*!< SADR (Bit 13) */ + #define R_DMAC0_DMAMD_SADR_Msk (0x2000UL) /*!< SADR (Bitfield-Mask: 0x01) */ +/* ========================================================= DMOFR ========================================================= */ + #define R_DMAC0_DMOFR_DMOFR_Pos (0UL) /*!< DMOFR (Bit 0) */ + #define R_DMAC0_DMOFR_DMOFR_Msk (0xffffffffUL) /*!< DMOFR (Bitfield-Mask: 0xffffffff) */ +/* ========================================================= DMCNT ========================================================= */ + #define R_DMAC0_DMCNT_DTE_Pos (0UL) /*!< DTE (Bit 0) */ + #define R_DMAC0_DMCNT_DTE_Msk (0x1UL) /*!< DTE (Bitfield-Mask: 0x01) */ +/* ========================================================= DMREQ ========================================================= */ + #define R_DMAC0_DMREQ_CLRS_Pos (4UL) /*!< CLRS (Bit 4) */ + #define R_DMAC0_DMREQ_CLRS_Msk (0x10UL) /*!< CLRS (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMREQ_SWREQ_Pos (0UL) /*!< SWREQ (Bit 0) */ + #define R_DMAC0_DMREQ_SWREQ_Msk (0x1UL) /*!< SWREQ (Bitfield-Mask: 0x01) */ +/* ========================================================= DMSTS ========================================================= */ + #define R_DMAC0_DMSTS_ACT_Pos (7UL) /*!< ACT (Bit 7) */ + #define R_DMAC0_DMSTS_ACT_Msk (0x80UL) /*!< ACT (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMSTS_DTIF_Pos (4UL) /*!< DTIF (Bit 4) */ + #define R_DMAC0_DMSTS_DTIF_Msk (0x10UL) /*!< DTIF (Bitfield-Mask: 0x01) */ + #define R_DMAC0_DMSTS_ESIF_Pos (0UL) /*!< ESIF (Bit 0) */ + #define R_DMAC0_DMSTS_ESIF_Msk (0x1UL) /*!< ESIF (Bitfield-Mask: 0x01) */ +/* ========================================================= DMSRR ========================================================= */ +/* ========================================================= DMDRR ========================================================= */ +/* ========================================================= DMSBS ========================================================= */ + #define R_DMAC0_DMSBS_DMSBSL_Pos (0UL) /*!< DMSBSL (Bit 0) */ + #define R_DMAC0_DMSBS_DMSBSL_Msk (0xffffUL) /*!< DMSBSL (Bitfield-Mask: 0xffff) */ + #define R_DMAC0_DMSBS_DMSBSH_Pos (16UL) /*!< DMSBSH (Bit 16) */ + #define R_DMAC0_DMSBS_DMSBSH_Msk (0xffff0000UL) /*!< DMSBSH (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMDBS ========================================================= */ + #define R_DMAC0_DMDBS_DMDBSL_Pos (0UL) /*!< DMDBSL (Bit 0) */ + #define R_DMAC0_DMDBS_DMDBSL_Msk (0xffffUL) /*!< DMDBSL (Bitfield-Mask: 0xffff) */ + #define R_DMAC0_DMDBS_DMDBSH_Pos (16UL) /*!< DMDBSH (Bit 16) */ + #define R_DMAC0_DMDBS_DMDBSH_Msk (0xffff0000UL) /*!< DMDBSH (Bitfield-Mask: 0xffff) */ +/* ========================================================= DMBWR ========================================================= */ + #define R_DMAC0_DMBWR_BWE_Pos (0UL) /*!< BWE (Bit 0) */ + #define R_DMAC0_DMBWR_BWE_Msk (0x1UL) /*!< BWE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ 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_HP_CMD ================ */ +/* =========================================================================================================================== */ + +/* ====================================================== FACI_CMD16 ======================================================= */ +/* ======================================================= FACI_CMD8 ======================================================= */ + +/* =========================================================================================================================== */ +/* ================ R_FACI_HP ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== FASTAT ========================================================= */ + #define R_FACI_HP_FASTAT_CFAE_Pos (7UL) /*!< CFAE (Bit 7) */ + #define R_FACI_HP_FASTAT_CFAE_Msk (0x80UL) /*!< CFAE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_CMDLK_Pos (4UL) /*!< CMDLK (Bit 4) */ + #define R_FACI_HP_FASTAT_CMDLK_Msk (0x10UL) /*!< CMDLK (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FASTAT_DFAE_Pos (3UL) /*!< DFAE (Bit 3) */ + #define R_FACI_HP_FASTAT_DFAE_Msk (0x8UL) /*!< DFAE (Bitfield-Mask: 0x01) */ +/* ======================================================== FAEINT ========================================================= */ + #define R_FACI_HP_FAEINT_CFAEIE_Pos (7UL) /*!< CFAEIE (Bit 7) */ + #define R_FACI_HP_FAEINT_CFAEIE_Msk (0x80UL) /*!< CFAEIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_CMDLKIE_Pos (4UL) /*!< CMDLKIE (Bit 4) */ + #define R_FACI_HP_FAEINT_CMDLKIE_Msk (0x10UL) /*!< CMDLKIE (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAEINT_DFAEIE_Pos (3UL) /*!< DFAEIE (Bit 3) */ + #define R_FACI_HP_FAEINT_DFAEIE_Msk (0x8UL) /*!< DFAEIE (Bitfield-Mask: 0x01) */ +/* ======================================================== FRDYIE ========================================================= */ + #define R_FACI_HP_FRDYIE_FRDYIE_Pos (0UL) /*!< FRDYIE (Bit 0) */ + #define R_FACI_HP_FRDYIE_FRDYIE_Msk (0x1UL) /*!< FRDYIE (Bitfield-Mask: 0x01) */ +/* ======================================================== FSADDR ========================================================= */ + #define R_FACI_HP_FSADDR_FSA_Pos (0UL) /*!< FSA (Bit 0) */ + #define R_FACI_HP_FSADDR_FSA_Msk (0xffffffffUL) /*!< FSA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== FEADDR ========================================================= */ + #define R_FACI_HP_FEADDR_FEA_Pos (0UL) /*!< FEA (Bit 0) */ + #define R_FACI_HP_FEADDR_FEA_Msk (0xffffffffUL) /*!< FEA (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== FMEPROT ======================================================== */ + #define R_FACI_HP_FMEPROT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FMEPROT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FMEPROT_CEPROT_Pos (0UL) /*!< CEPROT (Bit 0) */ + #define R_FACI_HP_FMEPROT_CEPROT_Msk (0x1UL) /*!< CEPROT (Bitfield-Mask: 0x01) */ +/* ======================================================== FBPROT0 ======================================================== */ + #define R_FACI_HP_FBPROT0_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FBPROT0_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FBPROT0_BPCN0_Pos (0UL) /*!< BPCN0 (Bit 0) */ + #define R_FACI_HP_FBPROT0_BPCN0_Msk (0x1UL) /*!< BPCN0 (Bitfield-Mask: 0x01) */ +/* ======================================================== FBPROT1 ======================================================== */ + #define R_FACI_HP_FBPROT1_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FBPROT1_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FBPROT1_BPCN1_Pos (0UL) /*!< BPCN1 (Bit 0) */ + #define R_FACI_HP_FBPROT1_BPCN1_Msk (0x1UL) /*!< BPCN1 (Bitfield-Mask: 0x01) */ +/* ======================================================== FSTATR ========================================================= */ + #define R_FACI_HP_FSTATR_ILGCOMERR_Pos (23UL) /*!< ILGCOMERR (Bit 23) */ + #define R_FACI_HP_FSTATR_ILGCOMERR_Msk (0x800000UL) /*!< ILGCOMERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FESETERR_Pos (22UL) /*!< FESETERR (Bit 22) */ + #define R_FACI_HP_FSTATR_FESETERR_Msk (0x400000UL) /*!< FESETERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_SECERR_Pos (21UL) /*!< SECERR (Bit 21) */ + #define R_FACI_HP_FSTATR_SECERR_Msk (0x200000UL) /*!< SECERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_OTERR_Pos (20UL) /*!< OTERR (Bit 20) */ + #define R_FACI_HP_FSTATR_OTERR_Msk (0x100000UL) /*!< OTERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FRDY_Pos (15UL) /*!< FRDY (Bit 15) */ + #define R_FACI_HP_FSTATR_FRDY_Msk (0x8000UL) /*!< FRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ILGLERR_Pos (14UL) /*!< ILGLERR (Bit 14) */ + #define R_FACI_HP_FSTATR_ILGLERR_Msk (0x4000UL) /*!< ILGLERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ERSERR_Pos (13UL) /*!< ERSERR (Bit 13) */ + #define R_FACI_HP_FSTATR_ERSERR_Msk (0x2000UL) /*!< ERSERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_PRGERR_Pos (12UL) /*!< PRGERR (Bit 12) */ + #define R_FACI_HP_FSTATR_PRGERR_Msk (0x1000UL) /*!< PRGERR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_SUSRDY_Pos (11UL) /*!< SUSRDY (Bit 11) */ + #define R_FACI_HP_FSTATR_SUSRDY_Msk (0x800UL) /*!< SUSRDY (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_DBFULL_Pos (10UL) /*!< DBFULL (Bit 10) */ + #define R_FACI_HP_FSTATR_DBFULL_Msk (0x400UL) /*!< DBFULL (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_ERSSPD_Pos (9UL) /*!< ERSSPD (Bit 9) */ + #define R_FACI_HP_FSTATR_ERSSPD_Msk (0x200UL) /*!< ERSSPD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_PRGSPD_Pos (8UL) /*!< PRGSPD (Bit 8) */ + #define R_FACI_HP_FSTATR_PRGSPD_Msk (0x100UL) /*!< PRGSPD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FSTATR_FLWEERR_Pos (6UL) /*!< FLWEERR (Bit 6) */ + #define R_FACI_HP_FSTATR_FLWEERR_Msk (0x40UL) /*!< FLWEERR (Bitfield-Mask: 0x01) */ +/* ======================================================== FENTRYR ======================================================== */ + #define R_FACI_HP_FENTRYR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FENTRYR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FENTRYR_FENTRYD_Pos (7UL) /*!< FENTRYD (Bit 7) */ + #define R_FACI_HP_FENTRYR_FENTRYD_Msk (0x80UL) /*!< FENTRYD (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FENTRYR_FENTRYC_Pos (0UL) /*!< FENTRYC (Bit 0) */ + #define R_FACI_HP_FENTRYR_FENTRYC_Msk (0x1UL) /*!< FENTRYC (Bitfield-Mask: 0x01) */ +/* ======================================================= FSUINITR ======================================================== */ + #define R_FACI_HP_FSUINITR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FSUINITR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FSUINITR_SUINIT_Pos (0UL) /*!< SUINIT (Bit 0) */ + #define R_FACI_HP_FSUINITR_SUINIT_Msk (0x1UL) /*!< SUINIT (Bitfield-Mask: 0x01) */ +/* ========================================================= FCMDR ========================================================= */ + #define R_FACI_HP_FCMDR_CMDR_Pos (8UL) /*!< CMDR (Bit 8) */ + #define R_FACI_HP_FCMDR_CMDR_Msk (0xff00UL) /*!< CMDR (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FCMDR_PCMDR_Pos (0UL) /*!< PCMDR (Bit 0) */ + #define R_FACI_HP_FCMDR_PCMDR_Msk (0xffUL) /*!< PCMDR (Bitfield-Mask: 0xff) */ +/* ======================================================== FBCCNT ========================================================= */ + #define R_FACI_HP_FBCCNT_BCDIR_Pos (0UL) /*!< BCDIR (Bit 0) */ + #define R_FACI_HP_FBCCNT_BCDIR_Msk (0x1UL) /*!< BCDIR (Bitfield-Mask: 0x01) */ +/* ======================================================== FBCSTAT ======================================================== */ + #define R_FACI_HP_FBCSTAT_BCST_Pos (0UL) /*!< BCST (Bit 0) */ + #define R_FACI_HP_FBCSTAT_BCST_Msk (0x1UL) /*!< BCST (Bitfield-Mask: 0x01) */ +/* ======================================================== FPSADDR ======================================================== */ + #define R_FACI_HP_FPSADDR_PSADR_Pos (0UL) /*!< PSADR (Bit 0) */ + #define R_FACI_HP_FPSADDR_PSADR_Msk (0x7ffffUL) /*!< PSADR (Bitfield-Mask: 0x7ffff) */ +/* ======================================================== FAWMON ========================================================= */ + #define R_FACI_HP_FAWMON_BTFLG_Pos (31UL) /*!< BTFLG (Bit 31) */ + #define R_FACI_HP_FAWMON_BTFLG_Msk (0x80000000UL) /*!< BTFLG (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAWMON_FAWE_Pos (16UL) /*!< FAWE (Bit 16) */ + #define R_FACI_HP_FAWMON_FAWE_Msk (0x7ff0000UL) /*!< FAWE (Bitfield-Mask: 0x7ff) */ + #define R_FACI_HP_FAWMON_FSPR_Pos (15UL) /*!< FSPR (Bit 15) */ + #define R_FACI_HP_FAWMON_FSPR_Msk (0x8000UL) /*!< FSPR (Bitfield-Mask: 0x01) */ + #define R_FACI_HP_FAWMON_FAWS_Pos (0UL) /*!< FAWS (Bit 0) */ + #define R_FACI_HP_FAWMON_FAWS_Msk (0x7ffUL) /*!< FAWS (Bitfield-Mask: 0x7ff) */ +/* ========================================================= FCPSR ========================================================= */ + #define R_FACI_HP_FCPSR_ESUSPMD_Pos (0UL) /*!< ESUSPMD (Bit 0) */ + #define R_FACI_HP_FCPSR_ESUSPMD_Msk (0x1UL) /*!< ESUSPMD (Bitfield-Mask: 0x01) */ +/* ======================================================== FPCKAR ========================================================= */ + #define R_FACI_HP_FPCKAR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FPCKAR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FPCKAR_PCKA_Pos (0UL) /*!< PCKA (Bit 0) */ + #define R_FACI_HP_FPCKAR_PCKA_Msk (0xffUL) /*!< PCKA (Bitfield-Mask: 0xff) */ +/* ======================================================== FSUACR ========================================================= */ + #define R_FACI_HP_FSUACR_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_FACI_HP_FSUACR_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_FACI_HP_FSUACR_SAS_Pos (0UL) /*!< SAS (Bit 0) */ + #define R_FACI_HP_FSUACR_SAS_Msk (0x3UL) /*!< SAS (Bitfield-Mask: 0x03) */ + +/* =========================================================================================================================== */ +/* ================ 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 (23UL) /*!< TPCS (Bit 23) */ + #define R_GPT0_GTCR_TPCS_Msk (0x7800000UL) /*!< TPCS (Bitfield-Mask: 0x0f) */ + #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_I3C0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= PRTS ========================================================== */ + #define R_I3C0_PRTS_PRTMD_Pos (0UL) /*!< PRTMD (Bit 0) */ + #define R_I3C0_PRTS_PRTMD_Msk (0x1UL) /*!< PRTMD (Bitfield-Mask: 0x01) */ +/* ========================================================= CECTL ========================================================= */ + #define R_I3C0_CECTL_CLKE_Pos (0UL) /*!< CLKE (Bit 0) */ + #define R_I3C0_CECTL_CLKE_Msk (0x1UL) /*!< CLKE (Bitfield-Mask: 0x01) */ +/* ========================================================= BCTL ========================================================== */ + #define R_I3C0_BCTL_INCBA_Pos (0UL) /*!< INCBA (Bit 0) */ + #define R_I3C0_BCTL_INCBA_Msk (0x1UL) /*!< INCBA (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCTL_BMDS_Pos (7UL) /*!< BMDS (Bit 7) */ + #define R_I3C0_BCTL_BMDS_Msk (0x80UL) /*!< BMDS (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCTL_HJACKCTL_Pos (8UL) /*!< HJACKCTL (Bit 8) */ + #define R_I3C0_BCTL_HJACKCTL_Msk (0x100UL) /*!< HJACKCTL (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCTL_ABT_Pos (29UL) /*!< ABT (Bit 29) */ + #define R_I3C0_BCTL_ABT_Msk (0x20000000UL) /*!< ABT (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCTL_RSM_Pos (30UL) /*!< RSM (Bit 30) */ + #define R_I3C0_BCTL_RSM_Msk (0x40000000UL) /*!< RSM (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCTL_BUSE_Pos (31UL) /*!< BUSE (Bit 31) */ + #define R_I3C0_BCTL_BUSE_Msk (0x80000000UL) /*!< BUSE (Bitfield-Mask: 0x01) */ +/* ======================================================== MSDVAD ========================================================= */ + #define R_I3C0_MSDVAD_MDYAD_Pos (16UL) /*!< MDYAD (Bit 16) */ + #define R_I3C0_MSDVAD_MDYAD_Msk (0x7f0000UL) /*!< MDYAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_MSDVAD_MDYADV_Pos (31UL) /*!< MDYADV (Bit 31) */ + #define R_I3C0_MSDVAD_MDYADV_Msk (0x80000000UL) /*!< MDYADV (Bitfield-Mask: 0x01) */ +/* ======================================================== RSTCTL ========================================================= */ + #define R_I3C0_RSTCTL_RI3CRST_Pos (0UL) /*!< RI3CRST (Bit 0) */ + #define R_I3C0_RSTCTL_RI3CRST_Msk (0x1UL) /*!< RI3CRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_CMDQRST_Pos (1UL) /*!< CMDQRST (Bit 1) */ + #define R_I3C0_RSTCTL_CMDQRST_Msk (0x2UL) /*!< CMDQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_RSPQRST_Pos (2UL) /*!< RSPQRST (Bit 2) */ + #define R_I3C0_RSTCTL_RSPQRST_Msk (0x4UL) /*!< RSPQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_TDBRST_Pos (3UL) /*!< TDBRST (Bit 3) */ + #define R_I3C0_RSTCTL_TDBRST_Msk (0x8UL) /*!< TDBRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_RDBRST_Pos (4UL) /*!< RDBRST (Bit 4) */ + #define R_I3C0_RSTCTL_RDBRST_Msk (0x10UL) /*!< RDBRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_IBIQRST_Pos (5UL) /*!< IBIQRST (Bit 5) */ + #define R_I3C0_RSTCTL_IBIQRST_Msk (0x20UL) /*!< IBIQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_RSQRST_Pos (6UL) /*!< RSQRST (Bit 6) */ + #define R_I3C0_RSTCTL_RSQRST_Msk (0x40UL) /*!< RSQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_HCMDQRST_Pos (9UL) /*!< HCMDQRST (Bit 9) */ + #define R_I3C0_RSTCTL_HCMDQRST_Msk (0x200UL) /*!< HCMDQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_HRSPQRST_Pos (10UL) /*!< HRSPQRST (Bit 10) */ + #define R_I3C0_RSTCTL_HRSPQRST_Msk (0x400UL) /*!< HRSPQRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_HTDBRST_Pos (11UL) /*!< HTDBRST (Bit 11) */ + #define R_I3C0_RSTCTL_HTDBRST_Msk (0x800UL) /*!< HTDBRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_HRDBRST_Pos (12UL) /*!< HRDBRST (Bit 12) */ + #define R_I3C0_RSTCTL_HRDBRST_Msk (0x1000UL) /*!< HRDBRST (Bitfield-Mask: 0x01) */ + #define R_I3C0_RSTCTL_INTLRST_Pos (16UL) /*!< INTLRST (Bit 16) */ + #define R_I3C0_RSTCTL_INTLRST_Msk (0x10000UL) /*!< INTLRST (Bitfield-Mask: 0x01) */ +/* ========================================================= PRSST ========================================================= */ + #define R_I3C0_PRSST_CRMS_Pos (2UL) /*!< CRMS (Bit 2) */ + #define R_I3C0_PRSST_CRMS_Msk (0x4UL) /*!< CRMS (Bitfield-Mask: 0x01) */ + #define R_I3C0_PRSST_TRMD_Pos (4UL) /*!< TRMD (Bit 4) */ + #define R_I3C0_PRSST_TRMD_Msk (0x10UL) /*!< TRMD (Bitfield-Mask: 0x01) */ + #define R_I3C0_PRSST_PRSSTWP_Pos (7UL) /*!< PRSSTWP (Bit 7) */ + #define R_I3C0_PRSST_PRSSTWP_Msk (0x80UL) /*!< PRSSTWP (Bitfield-Mask: 0x01) */ +/* ========================================================= INST ========================================================== */ + #define R_I3C0_INST_INEF_Pos (10UL) /*!< INEF (Bit 10) */ + #define R_I3C0_INST_INEF_Msk (0x400UL) /*!< INEF (Bitfield-Mask: 0x01) */ +/* ========================================================= INSTE ========================================================= */ + #define R_I3C0_INSTE_INEE_Pos (10UL) /*!< INEE (Bit 10) */ + #define R_I3C0_INSTE_INEE_Msk (0x400UL) /*!< INEE (Bitfield-Mask: 0x01) */ +/* ========================================================= INIE ========================================================== */ + #define R_I3C0_INIE_INEIE_Pos (10UL) /*!< INEIE (Bit 10) */ + #define R_I3C0_INIE_INEIE_Msk (0x400UL) /*!< INEIE (Bitfield-Mask: 0x01) */ +/* ======================================================== INSTFC ========================================================= */ + #define R_I3C0_INSTFC_INEFC_Pos (10UL) /*!< INEFC (Bit 10) */ + #define R_I3C0_INSTFC_INEFC_Msk (0x400UL) /*!< INEFC (Bitfield-Mask: 0x01) */ +/* ========================================================= DVCT ========================================================== */ + #define R_I3C0_DVCT_IDX_Pos (19UL) /*!< IDX (Bit 19) */ + #define R_I3C0_DVCT_IDX_Msk (0xf80000UL) /*!< IDX (Bitfield-Mask: 0x1f) */ +/* ======================================================== IBINCTL ======================================================== */ + #define R_I3C0_IBINCTL_NRHJCTL_Pos (0UL) /*!< NRHJCTL (Bit 0) */ + #define R_I3C0_IBINCTL_NRHJCTL_Msk (0x1UL) /*!< NRHJCTL (Bitfield-Mask: 0x01) */ + #define R_I3C0_IBINCTL_NRMRCTL_Pos (1UL) /*!< NRMRCTL (Bit 1) */ + #define R_I3C0_IBINCTL_NRMRCTL_Msk (0x2UL) /*!< NRMRCTL (Bitfield-Mask: 0x01) */ + #define R_I3C0_IBINCTL_NRSIRCTL_Pos (3UL) /*!< NRSIRCTL (Bit 3) */ + #define R_I3C0_IBINCTL_NRSIRCTL_Msk (0x8UL) /*!< NRSIRCTL (Bitfield-Mask: 0x01) */ +/* ========================================================= BFCTL ========================================================= */ + #define R_I3C0_BFCTL_MALE_Pos (0UL) /*!< MALE (Bit 0) */ + #define R_I3C0_BFCTL_MALE_Msk (0x1UL) /*!< MALE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_NALE_Pos (1UL) /*!< NALE (Bit 1) */ + #define R_I3C0_BFCTL_NALE_Msk (0x2UL) /*!< NALE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_SALE_Pos (2UL) /*!< SALE (Bit 2) */ + #define R_I3C0_BFCTL_SALE_Msk (0x4UL) /*!< SALE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_SCSYNE_Pos (8UL) /*!< SCSYNE (Bit 8) */ + #define R_I3C0_BFCTL_SCSYNE_Msk (0x100UL) /*!< SCSYNE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_SMBS_Pos (12UL) /*!< SMBS (Bit 12) */ + #define R_I3C0_BFCTL_SMBS_Msk (0x1000UL) /*!< SMBS (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_FMPE_Pos (14UL) /*!< FMPE (Bit 14) */ + #define R_I3C0_BFCTL_FMPE_Msk (0x4000UL) /*!< FMPE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BFCTL_HSME_Pos (15UL) /*!< HSME (Bit 15) */ + #define R_I3C0_BFCTL_HSME_Msk (0x8000UL) /*!< HSME (Bitfield-Mask: 0x01) */ +/* ========================================================= SVCTL ========================================================= */ + #define R_I3C0_SVCTL_GCAE_Pos (0UL) /*!< GCAE (Bit 0) */ + #define R_I3C0_SVCTL_GCAE_Msk (0x1UL) /*!< GCAE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVCTL_HSMCE_Pos (5UL) /*!< HSMCE (Bit 5) */ + #define R_I3C0_SVCTL_HSMCE_Msk (0x20UL) /*!< HSMCE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVCTL_DVIDE_Pos (6UL) /*!< DVIDE (Bit 6) */ + #define R_I3C0_SVCTL_DVIDE_Msk (0x40UL) /*!< DVIDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVCTL_HOAE_Pos (15UL) /*!< HOAE (Bit 15) */ + #define R_I3C0_SVCTL_HOAE_Msk (0x8000UL) /*!< HOAE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVCTL_SVAEn_Pos (16UL) /*!< SVAEn (Bit 16) */ + #define R_I3C0_SVCTL_SVAEn_Msk (0x70000UL) /*!< SVAEn (Bitfield-Mask: 0x07) */ +/* ======================================================= REFCKCTL ======================================================== */ + #define R_I3C0_REFCKCTL_IREFCKS_Pos (0UL) /*!< IREFCKS (Bit 0) */ + #define R_I3C0_REFCKCTL_IREFCKS_Msk (0x7UL) /*!< IREFCKS (Bitfield-Mask: 0x07) */ +/* ========================================================= STDBR ========================================================= */ + #define R_I3C0_STDBR_SBRLO_Pos (0UL) /*!< SBRLO (Bit 0) */ + #define R_I3C0_STDBR_SBRLO_Msk (0xffUL) /*!< SBRLO (Bitfield-Mask: 0xff) */ + #define R_I3C0_STDBR_SBRHO_Pos (8UL) /*!< SBRHO (Bit 8) */ + #define R_I3C0_STDBR_SBRHO_Msk (0xff00UL) /*!< SBRHO (Bitfield-Mask: 0xff) */ + #define R_I3C0_STDBR_SBRLP_Pos (16UL) /*!< SBRLP (Bit 16) */ + #define R_I3C0_STDBR_SBRLP_Msk (0x3f0000UL) /*!< SBRLP (Bitfield-Mask: 0x3f) */ + #define R_I3C0_STDBR_SBRHP_Pos (24UL) /*!< SBRHP (Bit 24) */ + #define R_I3C0_STDBR_SBRHP_Msk (0x3f000000UL) /*!< SBRHP (Bitfield-Mask: 0x3f) */ + #define R_I3C0_STDBR_DSBRPO_Pos (31UL) /*!< DSBRPO (Bit 31) */ + #define R_I3C0_STDBR_DSBRPO_Msk (0x80000000UL) /*!< DSBRPO (Bitfield-Mask: 0x01) */ +/* ========================================================= EXTBR ========================================================= */ + #define R_I3C0_EXTBR_EBRLO_Pos (0UL) /*!< EBRLO (Bit 0) */ + #define R_I3C0_EXTBR_EBRLO_Msk (0xffUL) /*!< EBRLO (Bitfield-Mask: 0xff) */ + #define R_I3C0_EXTBR_EBRHO_Pos (8UL) /*!< EBRHO (Bit 8) */ + #define R_I3C0_EXTBR_EBRHO_Msk (0xff00UL) /*!< EBRHO (Bitfield-Mask: 0xff) */ + #define R_I3C0_EXTBR_EBRLP_Pos (16UL) /*!< EBRLP (Bit 16) */ + #define R_I3C0_EXTBR_EBRLP_Msk (0x3f0000UL) /*!< EBRLP (Bitfield-Mask: 0x3f) */ + #define R_I3C0_EXTBR_EBRHP_Pos (24UL) /*!< EBRHP (Bit 24) */ + #define R_I3C0_EXTBR_EBRHP_Msk (0x3f000000UL) /*!< EBRHP (Bitfield-Mask: 0x3f) */ +/* ======================================================== BFRECDT ======================================================== */ + #define R_I3C0_BFRECDT_FRECYC_Pos (0UL) /*!< FRECYC (Bit 0) */ + #define R_I3C0_BFRECDT_FRECYC_Msk (0x1ffUL) /*!< FRECYC (Bitfield-Mask: 0x1ff) */ +/* ======================================================== BAVLCDT ======================================================== */ + #define R_I3C0_BAVLCDT_AVLCYC_Pos (0UL) /*!< AVLCYC (Bit 0) */ + #define R_I3C0_BAVLCDT_AVLCYC_Msk (0x1ffUL) /*!< AVLCYC (Bitfield-Mask: 0x1ff) */ +/* ======================================================== BIDLCDT ======================================================== */ + #define R_I3C0_BIDLCDT_IDLCYC_Pos (0UL) /*!< IDLCYC (Bit 0) */ + #define R_I3C0_BIDLCDT_IDLCYC_Msk (0x3ffffUL) /*!< IDLCYC (Bitfield-Mask: 0x3ffff) */ +/* ======================================================== OUTCTL ========================================================= */ + #define R_I3C0_OUTCTL_SDOC_Pos (0UL) /*!< SDOC (Bit 0) */ + #define R_I3C0_OUTCTL_SDOC_Msk (0x1UL) /*!< SDOC (Bitfield-Mask: 0x01) */ + #define R_I3C0_OUTCTL_SCOC_Pos (1UL) /*!< SCOC (Bit 1) */ + #define R_I3C0_OUTCTL_SCOC_Msk (0x2UL) /*!< SCOC (Bitfield-Mask: 0x01) */ + #define R_I3C0_OUTCTL_SOCWP_Pos (2UL) /*!< SOCWP (Bit 2) */ + #define R_I3C0_OUTCTL_SOCWP_Msk (0x4UL) /*!< SOCWP (Bitfield-Mask: 0x01) */ + #define R_I3C0_OUTCTL_EXCYC_Pos (4UL) /*!< EXCYC (Bit 4) */ + #define R_I3C0_OUTCTL_EXCYC_Msk (0x10UL) /*!< EXCYC (Bitfield-Mask: 0x01) */ + #define R_I3C0_OUTCTL_SDOD_Pos (8UL) /*!< SDOD (Bit 8) */ + #define R_I3C0_OUTCTL_SDOD_Msk (0x700UL) /*!< SDOD (Bitfield-Mask: 0x07) */ + #define R_I3C0_OUTCTL_SDODCS_Pos (15UL) /*!< SDODCS (Bit 15) */ + #define R_I3C0_OUTCTL_SDODCS_Msk (0x8000UL) /*!< SDODCS (Bitfield-Mask: 0x01) */ +/* ========================================================= INCTL ========================================================= */ + #define R_I3C0_INCTL_DNFS_Pos (0UL) /*!< DNFS (Bit 0) */ + #define R_I3C0_INCTL_DNFS_Msk (0xfUL) /*!< DNFS (Bitfield-Mask: 0x0f) */ + #define R_I3C0_INCTL_DNFE_Pos (4UL) /*!< DNFE (Bit 4) */ + #define R_I3C0_INCTL_DNFE_Msk (0x10UL) /*!< DNFE (Bitfield-Mask: 0x01) */ +/* ======================================================== TMOCTL ========================================================= */ + #define R_I3C0_TMOCTL_TODTS_Pos (0UL) /*!< TODTS (Bit 0) */ + #define R_I3C0_TMOCTL_TODTS_Msk (0x3UL) /*!< TODTS (Bitfield-Mask: 0x03) */ + #define R_I3C0_TMOCTL_TOLCTL_Pos (4UL) /*!< TOLCTL (Bit 4) */ + #define R_I3C0_TMOCTL_TOLCTL_Msk (0x10UL) /*!< TOLCTL (Bitfield-Mask: 0x01) */ + #define R_I3C0_TMOCTL_TOHCTL_Pos (5UL) /*!< TOHCTL (Bit 5) */ + #define R_I3C0_TMOCTL_TOHCTL_Msk (0x20UL) /*!< TOHCTL (Bitfield-Mask: 0x01) */ + #define R_I3C0_TMOCTL_TOMDS_Pos (6UL) /*!< TOMDS (Bit 6) */ + #define R_I3C0_TMOCTL_TOMDS_Msk (0xc0UL) /*!< TOMDS (Bitfield-Mask: 0x03) */ +/* ========================================================= WUCTL ========================================================= */ + #define R_I3C0_WUCTL_WUACKS_Pos (0UL) /*!< WUACKS (Bit 0) */ + #define R_I3C0_WUCTL_WUACKS_Msk (0x1UL) /*!< WUACKS (Bitfield-Mask: 0x01) */ + #define R_I3C0_WUCTL_WUANFS_Pos (4UL) /*!< WUANFS (Bit 4) */ + #define R_I3C0_WUCTL_WUANFS_Msk (0x10UL) /*!< WUANFS (Bitfield-Mask: 0x01) */ + #define R_I3C0_WUCTL_WUFSYNE_Pos (6UL) /*!< WUFSYNE (Bit 6) */ + #define R_I3C0_WUCTL_WUFSYNE_Msk (0x40UL) /*!< WUFSYNE (Bitfield-Mask: 0x01) */ + #define R_I3C0_WUCTL_WUFE_Pos (7UL) /*!< WUFE (Bit 7) */ + #define R_I3C0_WUCTL_WUFE_Msk (0x80UL) /*!< WUFE (Bitfield-Mask: 0x01) */ +/* ======================================================== ACKCTL ========================================================= */ + #define R_I3C0_ACKCTL_ACKR_Pos (0UL) /*!< ACKR (Bit 0) */ + #define R_I3C0_ACKCTL_ACKR_Msk (0x1UL) /*!< ACKR (Bitfield-Mask: 0x01) */ + #define R_I3C0_ACKCTL_ACKT_Pos (1UL) /*!< ACKT (Bit 1) */ + #define R_I3C0_ACKCTL_ACKT_Msk (0x2UL) /*!< ACKT (Bitfield-Mask: 0x01) */ + #define R_I3C0_ACKCTL_ACKTWP_Pos (2UL) /*!< ACKTWP (Bit 2) */ + #define R_I3C0_ACKCTL_ACKTWP_Msk (0x4UL) /*!< ACKTWP (Bitfield-Mask: 0x01) */ +/* ======================================================= SCSTRCTL ======================================================== */ + #define R_I3C0_SCSTRCTL_ACKTWE_Pos (0UL) /*!< ACKTWE (Bit 0) */ + #define R_I3C0_SCSTRCTL_ACKTWE_Msk (0x1UL) /*!< ACKTWE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SCSTRCTL_RWE_Pos (1UL) /*!< RWE (Bit 1) */ + #define R_I3C0_SCSTRCTL_RWE_Msk (0x2UL) /*!< RWE (Bitfield-Mask: 0x01) */ +/* ======================================================= SCSTLCTL ======================================================== */ + #define R_I3C0_SCSTLCTL_STLCYC_Pos (0UL) /*!< STLCYC (Bit 0) */ + #define R_I3C0_SCSTLCTL_STLCYC_Msk (0xffffUL) /*!< STLCYC (Bitfield-Mask: 0xffff) */ + #define R_I3C0_SCSTLCTL_AAPE_Pos (28UL) /*!< AAPE (Bit 28) */ + #define R_I3C0_SCSTLCTL_AAPE_Msk (0x10000000UL) /*!< AAPE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SCSTLCTL_TRAPE_Pos (29UL) /*!< TRAPE (Bit 29) */ + #define R_I3C0_SCSTLCTL_TRAPE_Msk (0x20000000UL) /*!< TRAPE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SCSTLCTL_PARPE_Pos (30UL) /*!< PARPE (Bit 30) */ + #define R_I3C0_SCSTLCTL_PARPE_Msk (0x40000000UL) /*!< PARPE (Bitfield-Mask: 0x01) */ + #define R_I3C0_SCSTLCTL_ACKPE_Pos (31UL) /*!< ACKPE (Bit 31) */ + #define R_I3C0_SCSTLCTL_ACKPE_Msk (0x80000000UL) /*!< ACKPE (Bitfield-Mask: 0x01) */ +/* ======================================================== SVTDLG0 ======================================================== */ + #define R_I3C0_SVTDLG0_STDLG_Pos (16UL) /*!< STDLG (Bit 16) */ + #define R_I3C0_SVTDLG0_STDLG_Msk (0xffff0000UL) /*!< STDLG (Bitfield-Mask: 0xffff) */ +/* ========================================================= STCTL ========================================================= */ + #define R_I3C0_STCTL_STOE_Pos (0UL) /*!< STOE (Bit 0) */ + #define R_I3C0_STCTL_STOE_Msk (0x1UL) /*!< STOE (Bitfield-Mask: 0x01) */ +/* ========================================================= ATCTL ========================================================= */ + #define R_I3C0_ATCTL_ATTRGS_Pos (0UL) /*!< ATTRGS (Bit 0) */ + #define R_I3C0_ATCTL_ATTRGS_Msk (0x1UL) /*!< ATTRGS (Bitfield-Mask: 0x01) */ + #define R_I3C0_ATCTL_MREFOE_Pos (1UL) /*!< MREFOE (Bit 1) */ + #define R_I3C0_ATCTL_MREFOE_Msk (0x2UL) /*!< MREFOE (Bitfield-Mask: 0x01) */ + #define R_I3C0_ATCTL_AMEOE_Pos (2UL) /*!< AMEOE (Bit 2) */ + #define R_I3C0_ATCTL_AMEOE_Msk (0x4UL) /*!< AMEOE (Bitfield-Mask: 0x01) */ + #define R_I3C0_ATCTL_CDIV_Pos (8UL) /*!< CDIV (Bit 8) */ + #define R_I3C0_ATCTL_CDIV_Msk (0xff00UL) /*!< CDIV (Bitfield-Mask: 0xff) */ +/* ========================================================= ATTRG ========================================================= */ + #define R_I3C0_ATTRG_ATSTRG_Pos (0UL) /*!< ATSTRG (Bit 0) */ + #define R_I3C0_ATTRG_ATSTRG_Msk (0x1UL) /*!< ATSTRG (Bitfield-Mask: 0x01) */ +/* ======================================================== ATCCNTE ======================================================== */ + #define R_I3C0_ATCCNTE_ATCE_Pos (0UL) /*!< ATCE (Bit 0) */ + #define R_I3C0_ATCCNTE_ATCE_Msk (0x1UL) /*!< ATCE (Bitfield-Mask: 0x01) */ +/* ======================================================== CNDCTL ========================================================= */ + #define R_I3C0_CNDCTL_STCND_Pos (0UL) /*!< STCND (Bit 0) */ + #define R_I3C0_CNDCTL_STCND_Msk (0x1UL) /*!< STCND (Bitfield-Mask: 0x01) */ + #define R_I3C0_CNDCTL_SRCND_Pos (1UL) /*!< SRCND (Bit 1) */ + #define R_I3C0_CNDCTL_SRCND_Msk (0x2UL) /*!< SRCND (Bitfield-Mask: 0x01) */ + #define R_I3C0_CNDCTL_SPCND_Pos (2UL) /*!< SPCND (Bit 2) */ + #define R_I3C0_CNDCTL_SPCND_Msk (0x4UL) /*!< SPCND (Bitfield-Mask: 0x01) */ +/* ======================================================== NCMDQP ========================================================= */ +/* ======================================================== NRSPQP ========================================================= */ +/* ======================================================== NTDTBP0 ======================================================== */ +/* ======================================================== NIBIQP ========================================================= */ +/* ========================================================= NRSQP ========================================================= */ +/* ======================================================== HCMDQP ========================================================= */ + #define R_I3C0_HCMDQP_HCMDQP_Pos (0UL) /*!< HCMDQP (Bit 0) */ + #define R_I3C0_HCMDQP_HCMDQP_Msk (0xffffffffUL) /*!< HCMDQP (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== HRSPQP ========================================================= */ + #define R_I3C0_HRSPQP_HRSPQP_Pos (0UL) /*!< HRSPQP (Bit 0) */ + #define R_I3C0_HRSPQP_HRSPQP_Msk (0xffffffffUL) /*!< HRSPQP (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== HTDTBP ========================================================= */ + #define R_I3C0_HTDTBP_HTDTBP_Pos (0UL) /*!< HTDTBP (Bit 0) */ + #define R_I3C0_HTDTBP_HTDTBP_Msk (0xffffffffUL) /*!< HTDTBP (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== NQTHCTL ======================================================== */ + #define R_I3C0_NQTHCTL_CMDQTH_Pos (0UL) /*!< CMDQTH (Bit 0) */ + #define R_I3C0_NQTHCTL_CMDQTH_Msk (0xffUL) /*!< CMDQTH (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQTHCTL_RSPQTH_Pos (8UL) /*!< RSPQTH (Bit 8) */ + #define R_I3C0_NQTHCTL_RSPQTH_Msk (0xff00UL) /*!< RSPQTH (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQTHCTL_IBIDSSZ_Pos (16UL) /*!< IBIDSSZ (Bit 16) */ + #define R_I3C0_NQTHCTL_IBIDSSZ_Msk (0xff0000UL) /*!< IBIDSSZ (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQTHCTL_IBIQTH_Pos (24UL) /*!< IBIQTH (Bit 24) */ + #define R_I3C0_NQTHCTL_IBIQTH_Msk (0xff000000UL) /*!< IBIQTH (Bitfield-Mask: 0xff) */ +/* ======================================================= NTBTHCTL0 ======================================================= */ + #define R_I3C0_NTBTHCTL0_TXDBTH_Pos (0UL) /*!< TXDBTH (Bit 0) */ + #define R_I3C0_NTBTHCTL0_TXDBTH_Msk (0x7UL) /*!< TXDBTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_NTBTHCTL0_RXDBTH_Pos (8UL) /*!< RXDBTH (Bit 8) */ + #define R_I3C0_NTBTHCTL0_RXDBTH_Msk (0x700UL) /*!< RXDBTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_NTBTHCTL0_TXSTTH_Pos (16UL) /*!< TXSTTH (Bit 16) */ + #define R_I3C0_NTBTHCTL0_TXSTTH_Msk (0x70000UL) /*!< TXSTTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_NTBTHCTL0_RXSTTH_Pos (24UL) /*!< RXSTTH (Bit 24) */ + #define R_I3C0_NTBTHCTL0_RXSTTH_Msk (0x7000000UL) /*!< RXSTTH (Bitfield-Mask: 0x07) */ +/* ======================================================= NRQTHCTL ======================================================== */ + #define R_I3C0_NRQTHCTL_RSQTH_Pos (0UL) /*!< RSQTH (Bit 0) */ + #define R_I3C0_NRQTHCTL_RSQTH_Msk (0xffUL) /*!< RSQTH (Bitfield-Mask: 0xff) */ +/* ======================================================== HQTHCTL ======================================================== */ + #define R_I3C0_HQTHCTL_CMDQTH_Pos (0UL) /*!< CMDQTH (Bit 0) */ + #define R_I3C0_HQTHCTL_CMDQTH_Msk (0xffUL) /*!< CMDQTH (Bitfield-Mask: 0xff) */ + #define R_I3C0_HQTHCTL_RSPQTH_Pos (8UL) /*!< RSPQTH (Bit 8) */ + #define R_I3C0_HQTHCTL_RSPQTH_Msk (0xff00UL) /*!< RSPQTH (Bitfield-Mask: 0xff) */ +/* ======================================================= HTBTHCTL ======================================================== */ + #define R_I3C0_HTBTHCTL_TXDBTH_Pos (0UL) /*!< TXDBTH (Bit 0) */ + #define R_I3C0_HTBTHCTL_TXDBTH_Msk (0x7UL) /*!< TXDBTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_HTBTHCTL_RXDBTH_Pos (8UL) /*!< RXDBTH (Bit 8) */ + #define R_I3C0_HTBTHCTL_RXDBTH_Msk (0x700UL) /*!< RXDBTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_HTBTHCTL_TXSTTH_Pos (16UL) /*!< TXSTTH (Bit 16) */ + #define R_I3C0_HTBTHCTL_TXSTTH_Msk (0x70000UL) /*!< TXSTTH (Bitfield-Mask: 0x07) */ + #define R_I3C0_HTBTHCTL_RXSTTH_Pos (24UL) /*!< RXSTTH (Bit 24) */ + #define R_I3C0_HTBTHCTL_RXSTTH_Msk (0x7000000UL) /*!< RXSTTH (Bitfield-Mask: 0x07) */ +/* ========================================================== BST ========================================================== */ + #define R_I3C0_BST_STCNDDF_Pos (0UL) /*!< STCNDDF (Bit 0) */ + #define R_I3C0_BST_STCNDDF_Msk (0x1UL) /*!< STCNDDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_SPCNDDF_Pos (1UL) /*!< SPCNDDF (Bit 1) */ + #define R_I3C0_BST_SPCNDDF_Msk (0x2UL) /*!< SPCNDDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_HDREXDF_Pos (2UL) /*!< HDREXDF (Bit 2) */ + #define R_I3C0_BST_HDREXDF_Msk (0x4UL) /*!< HDREXDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_NACKDF_Pos (4UL) /*!< NACKDF (Bit 4) */ + #define R_I3C0_BST_NACKDF_Msk (0x10UL) /*!< NACKDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_TENDF_Pos (8UL) /*!< TENDF (Bit 8) */ + #define R_I3C0_BST_TENDF_Msk (0x100UL) /*!< TENDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_ALF_Pos (16UL) /*!< ALF (Bit 16) */ + #define R_I3C0_BST_ALF_Msk (0x10000UL) /*!< ALF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_TODF_Pos (20UL) /*!< TODF (Bit 20) */ + #define R_I3C0_BST_TODF_Msk (0x100000UL) /*!< TODF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BST_WUCNDDF_Pos (24UL) /*!< WUCNDDF (Bit 24) */ + #define R_I3C0_BST_WUCNDDF_Msk (0x1000000UL) /*!< WUCNDDF (Bitfield-Mask: 0x01) */ +/* ========================================================= BSTE ========================================================== */ + #define R_I3C0_BSTE_STCNDDE_Pos (0UL) /*!< STCNDDE (Bit 0) */ + #define R_I3C0_BSTE_STCNDDE_Msk (0x1UL) /*!< STCNDDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_SPCNDDE_Pos (1UL) /*!< SPCNDDE (Bit 1) */ + #define R_I3C0_BSTE_SPCNDDE_Msk (0x2UL) /*!< SPCNDDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_HDREXDE_Pos (2UL) /*!< HDREXDE (Bit 2) */ + #define R_I3C0_BSTE_HDREXDE_Msk (0x4UL) /*!< HDREXDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_NACKDE_Pos (4UL) /*!< NACKDE (Bit 4) */ + #define R_I3C0_BSTE_NACKDE_Msk (0x10UL) /*!< NACKDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_TENDE_Pos (8UL) /*!< TENDE (Bit 8) */ + #define R_I3C0_BSTE_TENDE_Msk (0x100UL) /*!< TENDE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_ALE_Pos (16UL) /*!< ALE (Bit 16) */ + #define R_I3C0_BSTE_ALE_Msk (0x10000UL) /*!< ALE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_TODE_Pos (20UL) /*!< TODE (Bit 20) */ + #define R_I3C0_BSTE_TODE_Msk (0x100000UL) /*!< TODE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTE_WUCNDDE_Pos (24UL) /*!< WUCNDDE (Bit 24) */ + #define R_I3C0_BSTE_WUCNDDE_Msk (0x1000000UL) /*!< WUCNDDE (Bitfield-Mask: 0x01) */ +/* ========================================================== BIE ========================================================== */ + #define R_I3C0_BIE_STCNDDIE_Pos (0UL) /*!< STCNDDIE (Bit 0) */ + #define R_I3C0_BIE_STCNDDIE_Msk (0x1UL) /*!< STCNDDIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_SPCNDDIE_Pos (1UL) /*!< SPCNDDIE (Bit 1) */ + #define R_I3C0_BIE_SPCNDDIE_Msk (0x2UL) /*!< SPCNDDIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_HDREXDIE_Pos (2UL) /*!< HDREXDIE (Bit 2) */ + #define R_I3C0_BIE_HDREXDIE_Msk (0x4UL) /*!< HDREXDIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_NACKDIE_Pos (4UL) /*!< NACKDIE (Bit 4) */ + #define R_I3C0_BIE_NACKDIE_Msk (0x10UL) /*!< NACKDIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_TENDIE_Pos (8UL) /*!< TENDIE (Bit 8) */ + #define R_I3C0_BIE_TENDIE_Msk (0x100UL) /*!< TENDIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_ALIE_Pos (16UL) /*!< ALIE (Bit 16) */ + #define R_I3C0_BIE_ALIE_Msk (0x10000UL) /*!< ALIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_TODIE_Pos (20UL) /*!< TODIE (Bit 20) */ + #define R_I3C0_BIE_TODIE_Msk (0x100000UL) /*!< TODIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_BIE_WUCNDDIE_Pos (24UL) /*!< WUCNDDIE (Bit 24) */ + #define R_I3C0_BIE_WUCNDDIE_Msk (0x1000000UL) /*!< WUCNDDIE (Bitfield-Mask: 0x01) */ +/* ========================================================= BSTFC ========================================================= */ + #define R_I3C0_BSTFC_STCNDDFC_Pos (0UL) /*!< STCNDDFC (Bit 0) */ + #define R_I3C0_BSTFC_STCNDDFC_Msk (0x1UL) /*!< STCNDDFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_SPCNDDFC_Pos (1UL) /*!< SPCNDDFC (Bit 1) */ + #define R_I3C0_BSTFC_SPCNDDFC_Msk (0x2UL) /*!< SPCNDDFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_HDREXDFC_Pos (2UL) /*!< HDREXDFC (Bit 2) */ + #define R_I3C0_BSTFC_HDREXDFC_Msk (0x4UL) /*!< HDREXDFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_NACKDFC_Pos (4UL) /*!< NACKDFC (Bit 4) */ + #define R_I3C0_BSTFC_NACKDFC_Msk (0x10UL) /*!< NACKDFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_TENDFC_Pos (8UL) /*!< TENDFC (Bit 8) */ + #define R_I3C0_BSTFC_TENDFC_Msk (0x100UL) /*!< TENDFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_ALFC_Pos (16UL) /*!< ALFC (Bit 16) */ + #define R_I3C0_BSTFC_ALFC_Msk (0x10000UL) /*!< ALFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_TODFC_Pos (20UL) /*!< TODFC (Bit 20) */ + #define R_I3C0_BSTFC_TODFC_Msk (0x100000UL) /*!< TODFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_BSTFC_WUCNDDFC_Pos (24UL) /*!< WUCNDDFC (Bit 24) */ + #define R_I3C0_BSTFC_WUCNDDFC_Msk (0x1000000UL) /*!< WUCNDDFC (Bitfield-Mask: 0x01) */ +/* ========================================================= NTST ========================================================== */ + #define R_I3C0_NTST_TDBEF0_Pos (0UL) /*!< TDBEF0 (Bit 0) */ + #define R_I3C0_NTST_TDBEF0_Msk (0x1UL) /*!< TDBEF0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_RDBFF0_Pos (1UL) /*!< RDBFF0 (Bit 1) */ + #define R_I3C0_NTST_RDBFF0_Msk (0x2UL) /*!< RDBFF0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_IBIQEFF_Pos (2UL) /*!< IBIQEFF (Bit 2) */ + #define R_I3C0_NTST_IBIQEFF_Msk (0x4UL) /*!< IBIQEFF (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_CMDQEF_Pos (3UL) /*!< CMDQEF (Bit 3) */ + #define R_I3C0_NTST_CMDQEF_Msk (0x8UL) /*!< CMDQEF (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_RSPQFF_Pos (4UL) /*!< RSPQFF (Bit 4) */ + #define R_I3C0_NTST_RSPQFF_Msk (0x10UL) /*!< RSPQFF (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_TABTF_Pos (5UL) /*!< TABTF (Bit 5) */ + #define R_I3C0_NTST_TABTF_Msk (0x20UL) /*!< TABTF (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_TEF_Pos (9UL) /*!< TEF (Bit 9) */ + #define R_I3C0_NTST_TEF_Msk (0x200UL) /*!< TEF (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTST_RSQFF_Pos (20UL) /*!< RSQFF (Bit 20) */ + #define R_I3C0_NTST_RSQFF_Msk (0x100000UL) /*!< RSQFF (Bitfield-Mask: 0x01) */ +/* ========================================================= NTSTE ========================================================= */ + #define R_I3C0_NTSTE_TDBEE0_Pos (0UL) /*!< TDBEE0 (Bit 0) */ + #define R_I3C0_NTSTE_TDBEE0_Msk (0x1UL) /*!< TDBEE0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_RDBFE0_Pos (1UL) /*!< RDBFE0 (Bit 1) */ + #define R_I3C0_NTSTE_RDBFE0_Msk (0x2UL) /*!< RDBFE0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_IBIQEFE_Pos (2UL) /*!< IBIQEFE (Bit 2) */ + #define R_I3C0_NTSTE_IBIQEFE_Msk (0x4UL) /*!< IBIQEFE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_CMDQEE_Pos (3UL) /*!< CMDQEE (Bit 3) */ + #define R_I3C0_NTSTE_CMDQEE_Msk (0x8UL) /*!< CMDQEE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_RSPQFE_Pos (4UL) /*!< RSPQFE (Bit 4) */ + #define R_I3C0_NTSTE_RSPQFE_Msk (0x10UL) /*!< RSPQFE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_TABTE_Pos (5UL) /*!< TABTE (Bit 5) */ + #define R_I3C0_NTSTE_TABTE_Msk (0x20UL) /*!< TABTE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_TEE_Pos (9UL) /*!< TEE (Bit 9) */ + #define R_I3C0_NTSTE_TEE_Msk (0x200UL) /*!< TEE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTE_RSQFE_Pos (20UL) /*!< RSQFE (Bit 20) */ + #define R_I3C0_NTSTE_RSQFE_Msk (0x100000UL) /*!< RSQFE (Bitfield-Mask: 0x01) */ +/* ========================================================= NTIE ========================================================== */ + #define R_I3C0_NTIE_TDBEIE0_Pos (0UL) /*!< TDBEIE0 (Bit 0) */ + #define R_I3C0_NTIE_TDBEIE0_Msk (0x1UL) /*!< TDBEIE0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_RDBFIE0_Pos (1UL) /*!< RDBFIE0 (Bit 1) */ + #define R_I3C0_NTIE_RDBFIE0_Msk (0x2UL) /*!< RDBFIE0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_IBIQEFIE_Pos (2UL) /*!< IBIQEFIE (Bit 2) */ + #define R_I3C0_NTIE_IBIQEFIE_Msk (0x4UL) /*!< IBIQEFIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_CMDQEIE_Pos (3UL) /*!< CMDQEIE (Bit 3) */ + #define R_I3C0_NTIE_CMDQEIE_Msk (0x8UL) /*!< CMDQEIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_RSPQFIE_Pos (4UL) /*!< RSPQFIE (Bit 4) */ + #define R_I3C0_NTIE_RSPQFIE_Msk (0x10UL) /*!< RSPQFIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_TABTIE_Pos (5UL) /*!< TABTIE (Bit 5) */ + #define R_I3C0_NTIE_TABTIE_Msk (0x20UL) /*!< TABTIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_TEIE_Pos (9UL) /*!< TEIE (Bit 9) */ + #define R_I3C0_NTIE_TEIE_Msk (0x200UL) /*!< TEIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTIE_RSQFIE_Pos (20UL) /*!< RSQFIE (Bit 20) */ + #define R_I3C0_NTIE_RSQFIE_Msk (0x100000UL) /*!< RSQFIE (Bitfield-Mask: 0x01) */ +/* ======================================================== NTSTFC ========================================================= */ + #define R_I3C0_NTSTFC_TDBEFC0_Pos (0UL) /*!< TDBEFC0 (Bit 0) */ + #define R_I3C0_NTSTFC_TDBEFC0_Msk (0x1UL) /*!< TDBEFC0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_RDBFFC0_Pos (1UL) /*!< RDBFFC0 (Bit 1) */ + #define R_I3C0_NTSTFC_RDBFFC0_Msk (0x2UL) /*!< RDBFFC0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_IBIQEFFC_Pos (2UL) /*!< IBIQEFFC (Bit 2) */ + #define R_I3C0_NTSTFC_IBIQEFFC_Msk (0x4UL) /*!< IBIQEFFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_CMDQEFC_Pos (3UL) /*!< CMDQEFC (Bit 3) */ + #define R_I3C0_NTSTFC_CMDQEFC_Msk (0x8UL) /*!< CMDQEFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_RSPQFFC_Pos (4UL) /*!< RSPQFFC (Bit 4) */ + #define R_I3C0_NTSTFC_RSPQFFC_Msk (0x10UL) /*!< RSPQFFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_TABTFC_Pos (5UL) /*!< TABTFC (Bit 5) */ + #define R_I3C0_NTSTFC_TABTFC_Msk (0x20UL) /*!< TABTFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_TEFC_Pos (9UL) /*!< TEFC (Bit 9) */ + #define R_I3C0_NTSTFC_TEFC_Msk (0x200UL) /*!< TEFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_NTSTFC_RSQFFC_Pos (20UL) /*!< RSQFFC (Bit 20) */ + #define R_I3C0_NTSTFC_RSQFFC_Msk (0x100000UL) /*!< RSQFFC (Bitfield-Mask: 0x01) */ +/* ========================================================= HTST ========================================================== */ + #define R_I3C0_HTST_TDBEF_Pos (0UL) /*!< TDBEF (Bit 0) */ + #define R_I3C0_HTST_TDBEF_Msk (0x1UL) /*!< TDBEF (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTST_RDBFF_Pos (1UL) /*!< RDBFF (Bit 1) */ + #define R_I3C0_HTST_RDBFF_Msk (0x2UL) /*!< RDBFF (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTST_CMDQEF_Pos (3UL) /*!< CMDQEF (Bit 3) */ + #define R_I3C0_HTST_CMDQEF_Msk (0x8UL) /*!< CMDQEF (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTST_RSPQFF_Pos (4UL) /*!< RSPQFF (Bit 4) */ + #define R_I3C0_HTST_RSPQFF_Msk (0x10UL) /*!< RSPQFF (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTST_TABTF_Pos (5UL) /*!< TABTF (Bit 5) */ + #define R_I3C0_HTST_TABTF_Msk (0x20UL) /*!< TABTF (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTST_TEF_Pos (9UL) /*!< TEF (Bit 9) */ + #define R_I3C0_HTST_TEF_Msk (0x200UL) /*!< TEF (Bitfield-Mask: 0x01) */ +/* ========================================================= HTSTE ========================================================= */ + #define R_I3C0_HTSTE_TDBEE_Pos (0UL) /*!< TDBEE (Bit 0) */ + #define R_I3C0_HTSTE_TDBEE_Msk (0x1UL) /*!< TDBEE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTE_RDBFE_Pos (1UL) /*!< RDBFE (Bit 1) */ + #define R_I3C0_HTSTE_RDBFE_Msk (0x2UL) /*!< RDBFE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTE_CMDQEE_Pos (3UL) /*!< CMDQEE (Bit 3) */ + #define R_I3C0_HTSTE_CMDQEE_Msk (0x8UL) /*!< CMDQEE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTE_RSPQFE_Pos (4UL) /*!< RSPQFE (Bit 4) */ + #define R_I3C0_HTSTE_RSPQFE_Msk (0x10UL) /*!< RSPQFE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTE_TABTE_Pos (5UL) /*!< TABTE (Bit 5) */ + #define R_I3C0_HTSTE_TABTE_Msk (0x20UL) /*!< TABTE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTE_TEE_Pos (9UL) /*!< TEE (Bit 9) */ + #define R_I3C0_HTSTE_TEE_Msk (0x200UL) /*!< TEE (Bitfield-Mask: 0x01) */ +/* ========================================================= HTIE ========================================================== */ + #define R_I3C0_HTIE_TDBEIE_Pos (0UL) /*!< TDBEIE (Bit 0) */ + #define R_I3C0_HTIE_TDBEIE_Msk (0x1UL) /*!< TDBEIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTIE_RDBFIE_Pos (1UL) /*!< RDBFIE (Bit 1) */ + #define R_I3C0_HTIE_RDBFIE_Msk (0x2UL) /*!< RDBFIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTIE_CMDQEIE_Pos (3UL) /*!< CMDQEIE (Bit 3) */ + #define R_I3C0_HTIE_CMDQEIE_Msk (0x8UL) /*!< CMDQEIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTIE_RSPQFIE_Pos (4UL) /*!< RSPQFIE (Bit 4) */ + #define R_I3C0_HTIE_RSPQFIE_Msk (0x10UL) /*!< RSPQFIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTIE_TABTIE_Pos (5UL) /*!< TABTIE (Bit 5) */ + #define R_I3C0_HTIE_TABTIE_Msk (0x20UL) /*!< TABTIE (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTIE_TEIE_Pos (9UL) /*!< TEIE (Bit 9) */ + #define R_I3C0_HTIE_TEIE_Msk (0x200UL) /*!< TEIE (Bitfield-Mask: 0x01) */ +/* ======================================================== HTSTFC ========================================================= */ + #define R_I3C0_HTSTFC_TDBEFC_Pos (0UL) /*!< TDBEFC (Bit 0) */ + #define R_I3C0_HTSTFC_TDBEFC_Msk (0x1UL) /*!< TDBEFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTFC_RDBFFC_Pos (1UL) /*!< RDBFFC (Bit 1) */ + #define R_I3C0_HTSTFC_RDBFFC_Msk (0x2UL) /*!< RDBFFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTFC_CMDQEFC_Pos (3UL) /*!< CMDQEFC (Bit 3) */ + #define R_I3C0_HTSTFC_CMDQEFC_Msk (0x8UL) /*!< CMDQEFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTFC_RSPQFFC_Pos (4UL) /*!< RSPQFFC (Bit 4) */ + #define R_I3C0_HTSTFC_RSPQFFC_Msk (0x10UL) /*!< RSPQFFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTFC_TABTFC_Pos (5UL) /*!< TABTFC (Bit 5) */ + #define R_I3C0_HTSTFC_TABTFC_Msk (0x20UL) /*!< TABTFC (Bitfield-Mask: 0x01) */ + #define R_I3C0_HTSTFC_TEFC_Pos (9UL) /*!< TEFC (Bit 9) */ + #define R_I3C0_HTSTFC_TEFC_Msk (0x200UL) /*!< TEFC (Bitfield-Mask: 0x01) */ +/* ========================================================= BCST ========================================================== */ + #define R_I3C0_BCST_BFREF_Pos (0UL) /*!< BFREF (Bit 0) */ + #define R_I3C0_BCST_BFREF_Msk (0x1UL) /*!< BFREF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCST_BAVLF_Pos (1UL) /*!< BAVLF (Bit 1) */ + #define R_I3C0_BCST_BAVLF_Msk (0x2UL) /*!< BAVLF (Bitfield-Mask: 0x01) */ + #define R_I3C0_BCST_BIDLF_Pos (2UL) /*!< BIDLF (Bit 2) */ + #define R_I3C0_BCST_BIDLF_Msk (0x4UL) /*!< BIDLF (Bitfield-Mask: 0x01) */ +/* ========================================================= SVST ========================================================== */ + #define R_I3C0_SVST_GCAF_Pos (0UL) /*!< GCAF (Bit 0) */ + #define R_I3C0_SVST_GCAF_Msk (0x1UL) /*!< GCAF (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVST_HSMCF_Pos (5UL) /*!< HSMCF (Bit 5) */ + #define R_I3C0_SVST_HSMCF_Msk (0x20UL) /*!< HSMCF (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVST_DVIDF_Pos (6UL) /*!< DVIDF (Bit 6) */ + #define R_I3C0_SVST_DVIDF_Msk (0x40UL) /*!< DVIDF (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVST_HOAF_Pos (15UL) /*!< HOAF (Bit 15) */ + #define R_I3C0_SVST_HOAF_Msk (0x8000UL) /*!< HOAF (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVST_SVAFn_Pos (16UL) /*!< SVAFn (Bit 16) */ + #define R_I3C0_SVST_SVAFn_Msk (0x70000UL) /*!< SVAFn (Bitfield-Mask: 0x07) */ +/* ========================================================= WUST ========================================================== */ + #define R_I3C0_WUST_WUASYNF_Pos (0UL) /*!< WUASYNF (Bit 0) */ + #define R_I3C0_WUST_WUASYNF_Msk (0x1UL) /*!< WUASYNF (Bitfield-Mask: 0x01) */ +/* ======================================================== MRCCPT ========================================================= */ + #define R_I3C0_MRCCPT_MRCCPT_Pos (0UL) /*!< MRCCPT (Bit 0) */ + #define R_I3C0_MRCCPT_MRCCPT_Msk (0xffffffffUL) /*!< MRCCPT (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== DATBAS0 ======================================================== */ + #define R_I3C0_DATBAS0_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS0_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS0_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS0_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS0_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS0_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS0_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS0_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS0_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS0_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS0_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS0_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS0_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS0_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS0_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS0_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS1 ======================================================== */ + #define R_I3C0_DATBAS1_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS1_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS1_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS1_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS1_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS1_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS1_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS1_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS1_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS1_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS1_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS1_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS1_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS1_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS1_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS1_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS2 ======================================================== */ + #define R_I3C0_DATBAS2_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS2_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS2_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS2_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS2_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS2_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS2_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS2_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS2_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS2_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS2_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS2_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS2_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS2_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS2_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS2_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS3 ======================================================== */ + #define R_I3C0_DATBAS3_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS3_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS3_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS3_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS3_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS3_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS3_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS3_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS3_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS3_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS3_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS3_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS3_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS3_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS3_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS3_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS4 ======================================================== */ + #define R_I3C0_DATBAS4_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS4_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS4_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS4_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS4_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS4_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS4_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS4_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS4_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS4_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS4_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS4_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS4_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS4_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS4_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS4_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS5 ======================================================== */ + #define R_I3C0_DATBAS5_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS5_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS5_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS5_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS5_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS5_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS5_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS5_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS5_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS5_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS5_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS5_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS5_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS5_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS5_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS5_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS6 ======================================================== */ + #define R_I3C0_DATBAS6_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS6_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS6_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS6_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS6_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS6_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS6_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS6_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS6_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS6_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS6_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS6_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS6_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS6_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS6_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS6_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================== DATBAS7 ======================================================== */ + #define R_I3C0_DATBAS7_DVSTAD_Pos (0UL) /*!< DVSTAD (Bit 0) */ + #define R_I3C0_DATBAS7_DVSTAD_Msk (0x7fUL) /*!< DVSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_DATBAS7_DVIBIPL_Pos (12UL) /*!< DVIBIPL (Bit 12) */ + #define R_I3C0_DATBAS7_DVIBIPL_Msk (0x1000UL) /*!< DVIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS7_DVSIRRJ_Pos (13UL) /*!< DVSIRRJ (Bit 13) */ + #define R_I3C0_DATBAS7_DVSIRRJ_Msk (0x2000UL) /*!< DVSIRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS7_DVMRRJ_Pos (14UL) /*!< DVMRRJ (Bit 14) */ + #define R_I3C0_DATBAS7_DVMRRJ_Msk (0x4000UL) /*!< DVMRRJ (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS7_DVIBITS_Pos (15UL) /*!< DVIBITS (Bit 15) */ + #define R_I3C0_DATBAS7_DVIBITS_Msk (0x8000UL) /*!< DVIBITS (Bitfield-Mask: 0x01) */ + #define R_I3C0_DATBAS7_DVDYAD_Pos (16UL) /*!< DVDYAD (Bit 16) */ + #define R_I3C0_DATBAS7_DVDYAD_Msk (0xff0000UL) /*!< DVDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_DATBAS7_DVNACK_Pos (29UL) /*!< DVNACK (Bit 29) */ + #define R_I3C0_DATBAS7_DVNACK_Msk (0x60000000UL) /*!< DVNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_DATBAS7_DVTYP_Pos (31UL) /*!< DVTYP (Bit 31) */ + #define R_I3C0_DATBAS7_DVTYP_Msk (0x80000000UL) /*!< DVTYP (Bitfield-Mask: 0x01) */ +/* ======================================================= EXDATBAS ======================================================== */ + #define R_I3C0_EXDATBAS_EDSTAD_Pos (0UL) /*!< EDSTAD (Bit 0) */ + #define R_I3C0_EXDATBAS_EDSTAD_Msk (0x7fUL) /*!< EDSTAD (Bitfield-Mask: 0x7f) */ + #define R_I3C0_EXDATBAS_EDDYAD_Pos (16UL) /*!< EDDYAD (Bit 16) */ + #define R_I3C0_EXDATBAS_EDDYAD_Msk (0xff0000UL) /*!< EDDYAD (Bitfield-Mask: 0xff) */ + #define R_I3C0_EXDATBAS_EDNACK_Pos (29UL) /*!< EDNACK (Bit 29) */ + #define R_I3C0_EXDATBAS_EDNACK_Msk (0x60000000UL) /*!< EDNACK (Bitfield-Mask: 0x03) */ + #define R_I3C0_EXDATBAS_EDTYP_Pos (31UL) /*!< EDTYP (Bit 31) */ + #define R_I3C0_EXDATBAS_EDTYP_Msk (0x80000000UL) /*!< EDTYP (Bitfield-Mask: 0x01) */ +/* ======================================================= SDATBAS0 ======================================================== */ + #define R_I3C0_SDATBAS0_SDSTAD_Pos (0UL) /*!< SDSTAD (Bit 0) */ + #define R_I3C0_SDATBAS0_SDSTAD_Msk (0x3ffUL) /*!< SDSTAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SDATBAS0_SDADLS_Pos (10UL) /*!< SDADLS (Bit 10) */ + #define R_I3C0_SDATBAS0_SDADLS_Msk (0x400UL) /*!< SDADLS (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS0_SDIBIPL_Pos (12UL) /*!< SDIBIPL (Bit 12) */ + #define R_I3C0_SDATBAS0_SDIBIPL_Msk (0x1000UL) /*!< SDIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS0_SDDYAD_Pos (16UL) /*!< SDDYAD (Bit 16) */ + #define R_I3C0_SDATBAS0_SDDYAD_Msk (0x7f0000UL) /*!< SDDYAD (Bitfield-Mask: 0x7f) */ +/* ======================================================= SDATBAS1 ======================================================== */ + #define R_I3C0_SDATBAS1_SDSTAD_Pos (0UL) /*!< SDSTAD (Bit 0) */ + #define R_I3C0_SDATBAS1_SDSTAD_Msk (0x3ffUL) /*!< SDSTAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SDATBAS1_SDADLS_Pos (10UL) /*!< SDADLS (Bit 10) */ + #define R_I3C0_SDATBAS1_SDADLS_Msk (0x400UL) /*!< SDADLS (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS1_SDIBIPL_Pos (12UL) /*!< SDIBIPL (Bit 12) */ + #define R_I3C0_SDATBAS1_SDIBIPL_Msk (0x1000UL) /*!< SDIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS1_SDDYAD_Pos (16UL) /*!< SDDYAD (Bit 16) */ + #define R_I3C0_SDATBAS1_SDDYAD_Msk (0x7f0000UL) /*!< SDDYAD (Bitfield-Mask: 0x7f) */ +/* ======================================================= SDATBAS2 ======================================================== */ + #define R_I3C0_SDATBAS2_SDSTAD_Pos (0UL) /*!< SDSTAD (Bit 0) */ + #define R_I3C0_SDATBAS2_SDSTAD_Msk (0x3ffUL) /*!< SDSTAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SDATBAS2_SDADLS_Pos (10UL) /*!< SDADLS (Bit 10) */ + #define R_I3C0_SDATBAS2_SDADLS_Msk (0x400UL) /*!< SDADLS (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS2_SDIBIPL_Pos (12UL) /*!< SDIBIPL (Bit 12) */ + #define R_I3C0_SDATBAS2_SDIBIPL_Msk (0x1000UL) /*!< SDIBIPL (Bitfield-Mask: 0x01) */ + #define R_I3C0_SDATBAS2_SDDYAD_Pos (16UL) /*!< SDDYAD (Bit 16) */ + #define R_I3C0_SDATBAS2_SDDYAD_Msk (0x7f0000UL) /*!< SDDYAD (Bitfield-Mask: 0x7f) */ +/* ======================================================== MSDCT0 ========================================================= */ + #define R_I3C0_MSDCT0_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT0_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT0_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT0_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT0_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT0_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT0_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT0_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT0_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT1 ========================================================= */ + #define R_I3C0_MSDCT1_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT1_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT1_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT1_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT1_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT1_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT1_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT1_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT1_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT2 ========================================================= */ + #define R_I3C0_MSDCT2_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT2_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT2_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT2_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT2_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT2_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT2_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT2_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT2_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT3 ========================================================= */ + #define R_I3C0_MSDCT3_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT3_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT3_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT3_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT3_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT3_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT3_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT3_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT3_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT4 ========================================================= */ + #define R_I3C0_MSDCT4_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT4_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT4_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT4_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT4_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT4_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT4_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT4_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT4_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT5 ========================================================= */ + #define R_I3C0_MSDCT5_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT5_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT5_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT5_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT5_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT5_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT5_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT5_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT5_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT6 ========================================================= */ + #define R_I3C0_MSDCT6_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT6_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT6_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT6_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT6_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT6_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT6_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT6_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT6_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================== MSDCT7 ========================================================= */ + #define R_I3C0_MSDCT7_RBCR0_Pos (8UL) /*!< RBCR0 (Bit 8) */ + #define R_I3C0_MSDCT7_RBCR0_Msk (0x100UL) /*!< RBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR1_Pos (9UL) /*!< RBCR1 (Bit 9) */ + #define R_I3C0_MSDCT7_RBCR1_Msk (0x200UL) /*!< RBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR2_Pos (10UL) /*!< RBCR2 (Bit 10) */ + #define R_I3C0_MSDCT7_RBCR2_Msk (0x400UL) /*!< RBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR3_Pos (11UL) /*!< RBCR3 (Bit 11) */ + #define R_I3C0_MSDCT7_RBCR3_Msk (0x800UL) /*!< RBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR4_Pos (12UL) /*!< RBCR4 (Bit 12) */ + #define R_I3C0_MSDCT7_RBCR4_Msk (0x1000UL) /*!< RBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR5_Pos (13UL) /*!< RBCR5 (Bit 13) */ + #define R_I3C0_MSDCT7_RBCR5_Msk (0x2000UL) /*!< RBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_MSDCT7_RBCR76_Pos (14UL) /*!< RBCR76 (Bit 14) */ + #define R_I3C0_MSDCT7_RBCR76_Msk (0xc000UL) /*!< RBCR76 (Bitfield-Mask: 0x03) */ +/* ========================================================= SVDCT ========================================================= */ + #define R_I3C0_SVDCT_TDCR_Pos (0UL) /*!< TDCR (Bit 0) */ + #define R_I3C0_SVDCT_TDCR_Msk (0xffUL) /*!< TDCR (Bitfield-Mask: 0xff) */ + #define R_I3C0_SVDCT_TBCR0_Pos (8UL) /*!< TBCR0 (Bit 8) */ + #define R_I3C0_SVDCT_TBCR0_Msk (0x100UL) /*!< TBCR0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR1_Pos (9UL) /*!< TBCR1 (Bit 9) */ + #define R_I3C0_SVDCT_TBCR1_Msk (0x200UL) /*!< TBCR1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR2_Pos (10UL) /*!< TBCR2 (Bit 10) */ + #define R_I3C0_SVDCT_TBCR2_Msk (0x400UL) /*!< TBCR2 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR3_Pos (11UL) /*!< TBCR3 (Bit 11) */ + #define R_I3C0_SVDCT_TBCR3_Msk (0x800UL) /*!< TBCR3 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR4_Pos (12UL) /*!< TBCR4 (Bit 12) */ + #define R_I3C0_SVDCT_TBCR4_Msk (0x1000UL) /*!< TBCR4 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR5_Pos (13UL) /*!< TBCR5 (Bit 13) */ + #define R_I3C0_SVDCT_TBCR5_Msk (0x2000UL) /*!< TBCR5 (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDCT_TBCR76_Pos (14UL) /*!< TBCR76 (Bit 14) */ + #define R_I3C0_SVDCT_TBCR76_Msk (0xc000UL) /*!< TBCR76 (Bitfield-Mask: 0x03) */ +/* ======================================================= SDCTPIDL ======================================================== */ +/* ======================================================= SDCTPIDH ======================================================== */ +/* ======================================================== SVDVAD0 ======================================================== */ + #define R_I3C0_SVDVAD0_SVAD_Pos (16UL) /*!< SVAD (Bit 16) */ + #define R_I3C0_SVDVAD0_SVAD_Msk (0x3ff0000UL) /*!< SVAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SVDVAD0_SADLG_Pos (27UL) /*!< SADLG (Bit 27) */ + #define R_I3C0_SVDVAD0_SADLG_Msk (0x8000000UL) /*!< SADLG (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD0_SSTADV_Pos (30UL) /*!< SSTADV (Bit 30) */ + #define R_I3C0_SVDVAD0_SSTADV_Msk (0x40000000UL) /*!< SSTADV (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD0_SDYADV_Pos (31UL) /*!< SDYADV (Bit 31) */ + #define R_I3C0_SVDVAD0_SDYADV_Msk (0x80000000UL) /*!< SDYADV (Bitfield-Mask: 0x01) */ +/* ======================================================== SVDVAD1 ======================================================== */ + #define R_I3C0_SVDVAD1_SVAD_Pos (16UL) /*!< SVAD (Bit 16) */ + #define R_I3C0_SVDVAD1_SVAD_Msk (0x3ff0000UL) /*!< SVAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SVDVAD1_SADLG_Pos (27UL) /*!< SADLG (Bit 27) */ + #define R_I3C0_SVDVAD1_SADLG_Msk (0x8000000UL) /*!< SADLG (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD1_SSTADV_Pos (30UL) /*!< SSTADV (Bit 30) */ + #define R_I3C0_SVDVAD1_SSTADV_Msk (0x40000000UL) /*!< SSTADV (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD1_SDYADV_Pos (31UL) /*!< SDYADV (Bit 31) */ + #define R_I3C0_SVDVAD1_SDYADV_Msk (0x80000000UL) /*!< SDYADV (Bitfield-Mask: 0x01) */ +/* ======================================================== SVDVAD2 ======================================================== */ + #define R_I3C0_SVDVAD2_SVAD_Pos (16UL) /*!< SVAD (Bit 16) */ + #define R_I3C0_SVDVAD2_SVAD_Msk (0x3ff0000UL) /*!< SVAD (Bitfield-Mask: 0x3ff) */ + #define R_I3C0_SVDVAD2_SADLG_Pos (27UL) /*!< SADLG (Bit 27) */ + #define R_I3C0_SVDVAD2_SADLG_Msk (0x8000000UL) /*!< SADLG (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD2_SSTADV_Pos (30UL) /*!< SSTADV (Bit 30) */ + #define R_I3C0_SVDVAD2_SSTADV_Msk (0x40000000UL) /*!< SSTADV (Bitfield-Mask: 0x01) */ + #define R_I3C0_SVDVAD2_SDYADV_Pos (31UL) /*!< SDYADV (Bit 31) */ + #define R_I3C0_SVDVAD2_SDYADV_Msk (0x80000000UL) /*!< SDYADV (Bitfield-Mask: 0x01) */ +/* ======================================================== CSECMD ========================================================= */ + #define R_I3C0_CSECMD_SVIRQE_Pos (0UL) /*!< SVIRQE (Bit 0) */ + #define R_I3C0_CSECMD_SVIRQE_Msk (0x1UL) /*!< SVIRQE (Bitfield-Mask: 0x01) */ + #define R_I3C0_CSECMD_MSRQE_Pos (1UL) /*!< MSRQE (Bit 1) */ + #define R_I3C0_CSECMD_MSRQE_Msk (0x2UL) /*!< MSRQE (Bitfield-Mask: 0x01) */ + #define R_I3C0_CSECMD_HJEVE_Pos (3UL) /*!< HJEVE (Bit 3) */ + #define R_I3C0_CSECMD_HJEVE_Msk (0x8UL) /*!< HJEVE (Bitfield-Mask: 0x01) */ +/* ======================================================== CEACTST ======================================================== */ + #define R_I3C0_CEACTST_ACTST_Pos (0UL) /*!< ACTST (Bit 0) */ + #define R_I3C0_CEACTST_ACTST_Msk (0xfUL) /*!< ACTST (Bitfield-Mask: 0x0f) */ +/* ========================================================= CMWLG ========================================================= */ + #define R_I3C0_CMWLG_MWLG_Pos (0UL) /*!< MWLG (Bit 0) */ + #define R_I3C0_CMWLG_MWLG_Msk (0xffffUL) /*!< MWLG (Bitfield-Mask: 0xffff) */ +/* ========================================================= CMRLG ========================================================= */ + #define R_I3C0_CMRLG_MRLG_Pos (0UL) /*!< MRLG (Bit 0) */ + #define R_I3C0_CMRLG_MRLG_Msk (0xffffUL) /*!< MRLG (Bitfield-Mask: 0xffff) */ + #define R_I3C0_CMRLG_IBIPSZ_Pos (16UL) /*!< IBIPSZ (Bit 16) */ + #define R_I3C0_CMRLG_IBIPSZ_Msk (0xff0000UL) /*!< IBIPSZ (Bitfield-Mask: 0xff) */ +/* ======================================================== CETSTMD ======================================================== */ + #define R_I3C0_CETSTMD_TSTMD_Pos (0UL) /*!< TSTMD (Bit 0) */ + #define R_I3C0_CETSTMD_TSTMD_Msk (0xffUL) /*!< TSTMD (Bitfield-Mask: 0xff) */ +/* ======================================================== CGDVST ========================================================= */ + #define R_I3C0_CGDVST_PNDINT_Pos (0UL) /*!< PNDINT (Bit 0) */ + #define R_I3C0_CGDVST_PNDINT_Msk (0xfUL) /*!< PNDINT (Bitfield-Mask: 0x0f) */ + #define R_I3C0_CGDVST_PRTE_Pos (5UL) /*!< PRTE (Bit 5) */ + #define R_I3C0_CGDVST_PRTE_Msk (0x20UL) /*!< PRTE (Bitfield-Mask: 0x01) */ + #define R_I3C0_CGDVST_ACTMD_Pos (6UL) /*!< ACTMD (Bit 6) */ + #define R_I3C0_CGDVST_ACTMD_Msk (0xc0UL) /*!< ACTMD (Bitfield-Mask: 0x03) */ + #define R_I3C0_CGDVST_VDRSV_Pos (8UL) /*!< VDRSV (Bit 8) */ + #define R_I3C0_CGDVST_VDRSV_Msk (0xff00UL) /*!< VDRSV (Bitfield-Mask: 0xff) */ +/* ======================================================== CMDSPW ========================================================= */ + #define R_I3C0_CMDSPW_MSWDR_Pos (0UL) /*!< MSWDR (Bit 0) */ + #define R_I3C0_CMDSPW_MSWDR_Msk (0x7UL) /*!< MSWDR (Bitfield-Mask: 0x07) */ +/* ======================================================== CMDSPR ========================================================= */ + #define R_I3C0_CMDSPR_MSRDR_Pos (0UL) /*!< MSRDR (Bit 0) */ + #define R_I3C0_CMDSPR_MSRDR_Msk (0x7UL) /*!< MSRDR (Bitfield-Mask: 0x07) */ + #define R_I3C0_CMDSPR_CDTTIM_Pos (3UL) /*!< CDTTIM (Bit 3) */ + #define R_I3C0_CMDSPR_CDTTIM_Msk (0x38UL) /*!< CDTTIM (Bitfield-Mask: 0x07) */ +/* ======================================================== CMDSPT ========================================================= */ + #define R_I3C0_CMDSPT_MRTTIM_Pos (0UL) /*!< MRTTIM (Bit 0) */ + #define R_I3C0_CMDSPT_MRTTIM_Msk (0xffffffUL) /*!< MRTTIM (Bitfield-Mask: 0xffffff) */ + #define R_I3C0_CMDSPT_MRTE_Pos (31UL) /*!< MRTE (Bit 31) */ + #define R_I3C0_CMDSPT_MRTE_Msk (0x80000000UL) /*!< MRTE (Bitfield-Mask: 0x01) */ +/* ========================================================= CETSM ========================================================= */ + #define R_I3C0_CETSM_SPTSYN_Pos (0UL) /*!< SPTSYN (Bit 0) */ + #define R_I3C0_CETSM_SPTSYN_Msk (0x1UL) /*!< SPTSYN (Bitfield-Mask: 0x01) */ + #define R_I3C0_CETSM_SPTASYN0_Pos (1UL) /*!< SPTASYN0 (Bit 1) */ + #define R_I3C0_CETSM_SPTASYN0_Msk (0x2UL) /*!< SPTASYN0 (Bitfield-Mask: 0x01) */ + #define R_I3C0_CETSM_SPTASYN1_Pos (2UL) /*!< SPTASYN1 (Bit 2) */ + #define R_I3C0_CETSM_SPTASYN1_Msk (0x4UL) /*!< SPTASYN1 (Bitfield-Mask: 0x01) */ + #define R_I3C0_CETSM_FREQ_Pos (8UL) /*!< FREQ (Bit 8) */ + #define R_I3C0_CETSM_FREQ_Msk (0xff00UL) /*!< FREQ (Bitfield-Mask: 0xff) */ + #define R_I3C0_CETSM_INAC_Pos (16UL) /*!< INAC (Bit 16) */ + #define R_I3C0_CETSM_INAC_Msk (0xff0000UL) /*!< INAC (Bitfield-Mask: 0xff) */ +/* ========================================================= CETSS ========================================================= */ + #define R_I3C0_CETSS_SYNE_Pos (0UL) /*!< SYNE (Bit 0) */ + #define R_I3C0_CETSS_SYNE_Msk (0x1UL) /*!< SYNE (Bitfield-Mask: 0x01) */ + #define R_I3C0_CETSS_ASYNE_Pos (1UL) /*!< ASYNE (Bit 1) */ + #define R_I3C0_CETSS_ASYNE_Msk (0x6UL) /*!< ASYNE (Bitfield-Mask: 0x03) */ + #define R_I3C0_CETSS_ICOVF_Pos (7UL) /*!< ICOVF (Bit 7) */ + #define R_I3C0_CETSS_ICOVF_Msk (0x80UL) /*!< ICOVF (Bitfield-Mask: 0x01) */ +/* ======================================================= CGHDRCAP ======================================================== */ + #define R_I3C0_CGHDRCAP_DDREN_Pos (0UL) /*!< DDREN (Bit 0) */ + #define R_I3C0_CGHDRCAP_DDREN_Msk (0x1UL) /*!< DDREN (Bitfield-Mask: 0x01) */ + #define R_I3C0_CGHDRCAP_TSPEN_Pos (1UL) /*!< TSPEN (Bit 1) */ + #define R_I3C0_CGHDRCAP_TSPEN_Msk (0x2UL) /*!< TSPEN (Bitfield-Mask: 0x01) */ + #define R_I3C0_CGHDRCAP_TSLEN_Pos (2UL) /*!< TSLEN (Bit 2) */ + #define R_I3C0_CGHDRCAP_TSLEN_Msk (0x4UL) /*!< TSLEN (Bitfield-Mask: 0x01) */ +/* ======================================================== BITCNT ========================================================= */ + #define R_I3C0_BITCNT_BCNT_Pos (0UL) /*!< BCNT (Bit 0) */ + #define R_I3C0_BITCNT_BCNT_Msk (0x1fUL) /*!< BCNT (Bitfield-Mask: 0x1f) */ + #define R_I3C0_BITCNT_BCNTWP_Pos (7UL) /*!< BCNTWP (Bit 7) */ + #define R_I3C0_BITCNT_BCNTWP_Msk (0x80UL) /*!< BCNTWP (Bitfield-Mask: 0x01) */ +/* ======================================================== NQSTLV ========================================================= */ + #define R_I3C0_NQSTLV_CMDQFLV_Pos (0UL) /*!< CMDQFLV (Bit 0) */ + #define R_I3C0_NQSTLV_CMDQFLV_Msk (0xffUL) /*!< CMDQFLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQSTLV_RSPQLV_Pos (8UL) /*!< RSPQLV (Bit 8) */ + #define R_I3C0_NQSTLV_RSPQLV_Msk (0xff00UL) /*!< RSPQLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQSTLV_IBIQLV_Pos (16UL) /*!< IBIQLV (Bit 16) */ + #define R_I3C0_NQSTLV_IBIQLV_Msk (0xff0000UL) /*!< IBIQLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_NQSTLV_IBISCNT_Pos (24UL) /*!< IBISCNT (Bit 24) */ + #define R_I3C0_NQSTLV_IBISCNT_Msk (0x1f000000UL) /*!< IBISCNT (Bitfield-Mask: 0x1f) */ +/* ======================================================= NDBSTLV0 ======================================================== */ + #define R_I3C0_NDBSTLV0_TDBFLV_Pos (0UL) /*!< TDBFLV (Bit 0) */ + #define R_I3C0_NDBSTLV0_TDBFLV_Msk (0xffUL) /*!< TDBFLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_NDBSTLV0_RDBLV_Pos (8UL) /*!< RDBLV (Bit 8) */ + #define R_I3C0_NDBSTLV0_RDBLV_Msk (0xff00UL) /*!< RDBLV (Bitfield-Mask: 0xff) */ +/* ======================================================= NRSQSTLV ======================================================== */ + #define R_I3C0_NRSQSTLV_RSQLV_Pos (0UL) /*!< RSQLV (Bit 0) */ + #define R_I3C0_NRSQSTLV_RSQLV_Msk (0xffUL) /*!< RSQLV (Bitfield-Mask: 0xff) */ +/* ======================================================== HQSTLV ========================================================= */ + #define R_I3C0_HQSTLV_CMDQLV_Pos (0UL) /*!< CMDQLV (Bit 0) */ + #define R_I3C0_HQSTLV_CMDQLV_Msk (0xffUL) /*!< CMDQLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_HQSTLV_RSPQLV_Pos (8UL) /*!< RSPQLV (Bit 8) */ + #define R_I3C0_HQSTLV_RSPQLV_Msk (0xff00UL) /*!< RSPQLV (Bitfield-Mask: 0xff) */ +/* ======================================================== HDBSTLV ======================================================== */ + #define R_I3C0_HDBSTLV_TDBFLV_Pos (0UL) /*!< TDBFLV (Bit 0) */ + #define R_I3C0_HDBSTLV_TDBFLV_Msk (0xffUL) /*!< TDBFLV (Bitfield-Mask: 0xff) */ + #define R_I3C0_HDBSTLV_RDBLV_Pos (8UL) /*!< RDBLV (Bit 8) */ + #define R_I3C0_HDBSTLV_RDBLV_Msk (0xff00UL) /*!< RDBLV (Bitfield-Mask: 0xff) */ +/* ======================================================== PRSTDBG ======================================================== */ + #define R_I3C0_PRSTDBG_SCILV_Pos (0UL) /*!< SCILV (Bit 0) */ + #define R_I3C0_PRSTDBG_SCILV_Msk (0x1UL) /*!< SCILV (Bitfield-Mask: 0x01) */ + #define R_I3C0_PRSTDBG_SDILV_Pos (1UL) /*!< SDILV (Bit 1) */ + #define R_I3C0_PRSTDBG_SDILV_Msk (0x2UL) /*!< SDILV (Bitfield-Mask: 0x01) */ + #define R_I3C0_PRSTDBG_SCOLV_Pos (2UL) /*!< SCOLV (Bit 2) */ + #define R_I3C0_PRSTDBG_SCOLV_Msk (0x4UL) /*!< SCOLV (Bitfield-Mask: 0x01) */ + #define R_I3C0_PRSTDBG_SDOLV_Pos (3UL) /*!< SDOLV (Bit 3) */ + #define R_I3C0_PRSTDBG_SDOLV_Msk (0x8UL) /*!< SDOLV (Bitfield-Mask: 0x01) */ +/* ======================================================= MSERRCNT ======================================================== */ + #define R_I3C0_MSERRCNT_M2ECNT_Pos (0UL) /*!< M2ECNT (Bit 0) */ + #define R_I3C0_MSERRCNT_M2ECNT_Msk (0xffUL) /*!< M2ECNT (Bitfield-Mask: 0xff) */ +/* ======================================================== SC1CPT ========================================================= */ + #define R_I3C0_SC1CPT_SC1C_Pos (0UL) /*!< SC1C (Bit 0) */ + #define R_I3C0_SC1CPT_SC1C_Msk (0xffffUL) /*!< SC1C (Bitfield-Mask: 0xffff) */ +/* ======================================================== SC2CPT ========================================================= */ + #define R_I3C0_SC2CPT_SC2C_Pos (0UL) /*!< SC2C (Bit 0) */ + #define R_I3C0_SC2CPT_SC2C_Msk (0xffffUL) /*!< SC2C (Bitfield-Mask: 0xffff) */ + +/* =========================================================================================================================== */ +/* ================ R_MPU_MMPU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== OAD ========================================================== */ + #define R_MPU_MMPU_OAD_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_OAD_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_OAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_MPU_MMPU_OAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ========================================================= OADPT ========================================================= */ + #define R_MPU_MMPU_OADPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_MPU_MMPU_OADPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + #define R_MPU_MMPU_OADPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_MPU_MMPU_OADPT_PROTECT_Msk (0x1UL) /*!< PROTECT (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_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_QSPI ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SFMSMD ========================================================= */ + #define R_QSPI_SFMSMD_SFMCCE_Pos (15UL) /*!< SFMCCE (Bit 15) */ + #define R_QSPI_SFMSMD_SFMCCE_Msk (0x8000UL) /*!< SFMCCE (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMOSW_Pos (11UL) /*!< SFMOSW (Bit 11) */ + #define R_QSPI_SFMSMD_SFMOSW_Msk (0x800UL) /*!< SFMOSW (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMOHW_Pos (10UL) /*!< SFMOHW (Bit 10) */ + #define R_QSPI_SFMSMD_SFMOHW_Msk (0x400UL) /*!< SFMOHW (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMOEX_Pos (9UL) /*!< SFMOEX (Bit 9) */ + #define R_QSPI_SFMSMD_SFMOEX_Msk (0x200UL) /*!< SFMOEX (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMMD3_Pos (8UL) /*!< SFMMD3 (Bit 8) */ + #define R_QSPI_SFMSMD_SFMMD3_Msk (0x100UL) /*!< SFMMD3 (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMPAE_Pos (7UL) /*!< SFMPAE (Bit 7) */ + #define R_QSPI_SFMSMD_SFMPAE_Msk (0x80UL) /*!< SFMPAE (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMPFE_Pos (6UL) /*!< SFMPFE (Bit 6) */ + #define R_QSPI_SFMSMD_SFMPFE_Msk (0x40UL) /*!< SFMPFE (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSMD_SFMSE_Pos (4UL) /*!< SFMSE (Bit 4) */ + #define R_QSPI_SFMSMD_SFMSE_Msk (0x30UL) /*!< SFMSE (Bitfield-Mask: 0x03) */ + #define R_QSPI_SFMSMD_SFMRM_Pos (0UL) /*!< SFMRM (Bit 0) */ + #define R_QSPI_SFMSMD_SFMRM_Msk (0x7UL) /*!< SFMRM (Bitfield-Mask: 0x07) */ +/* ======================================================== SFMSSC ========================================================= */ + #define R_QSPI_SFMSSC_SFMSLD_Pos (5UL) /*!< SFMSLD (Bit 5) */ + #define R_QSPI_SFMSSC_SFMSLD_Msk (0x20UL) /*!< SFMSLD (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSSC_SFMSHD_Pos (4UL) /*!< SFMSHD (Bit 4) */ + #define R_QSPI_SFMSSC_SFMSHD_Msk (0x10UL) /*!< SFMSHD (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSSC_SFMSW_Pos (0UL) /*!< SFMSW (Bit 0) */ + #define R_QSPI_SFMSSC_SFMSW_Msk (0xfUL) /*!< SFMSW (Bitfield-Mask: 0x0f) */ +/* ======================================================== SFMSKC ========================================================= */ + #define R_QSPI_SFMSKC_SFMDTY_Pos (5UL) /*!< SFMDTY (Bit 5) */ + #define R_QSPI_SFMSKC_SFMDTY_Msk (0x20UL) /*!< SFMDTY (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSKC_SFMDV_Pos (0UL) /*!< SFMDV (Bit 0) */ + #define R_QSPI_SFMSKC_SFMDV_Msk (0x1fUL) /*!< SFMDV (Bitfield-Mask: 0x1f) */ +/* ======================================================== SFMSST ========================================================= */ + #define R_QSPI_SFMSST_PFOFF_Pos (7UL) /*!< PFOFF (Bit 7) */ + #define R_QSPI_SFMSST_PFOFF_Msk (0x80UL) /*!< PFOFF (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSST_PFFUL_Pos (6UL) /*!< PFFUL (Bit 6) */ + #define R_QSPI_SFMSST_PFFUL_Msk (0x40UL) /*!< PFFUL (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSST_PFCNT_Pos (0UL) /*!< PFCNT (Bit 0) */ + #define R_QSPI_SFMSST_PFCNT_Msk (0x1fUL) /*!< PFCNT (Bitfield-Mask: 0x1f) */ +/* ======================================================== SFMCOM ========================================================= */ + #define R_QSPI_SFMCOM_SFMD_Pos (0UL) /*!< SFMD (Bit 0) */ + #define R_QSPI_SFMCOM_SFMD_Msk (0xffUL) /*!< SFMD (Bitfield-Mask: 0xff) */ +/* ======================================================== SFMCMD ========================================================= */ + #define R_QSPI_SFMCMD_DCOM_Pos (0UL) /*!< DCOM (Bit 0) */ + #define R_QSPI_SFMCMD_DCOM_Msk (0x1UL) /*!< DCOM (Bitfield-Mask: 0x01) */ +/* ======================================================== SFMCST ========================================================= */ + #define R_QSPI_SFMCST_EROMR_Pos (7UL) /*!< EROMR (Bit 7) */ + #define R_QSPI_SFMCST_EROMR_Msk (0x80UL) /*!< EROMR (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMCST_COMBSY_Pos (0UL) /*!< COMBSY (Bit 0) */ + #define R_QSPI_SFMCST_COMBSY_Msk (0x1UL) /*!< COMBSY (Bitfield-Mask: 0x01) */ +/* ======================================================== SFMSIC ========================================================= */ + #define R_QSPI_SFMSIC_SFMCIC_Pos (0UL) /*!< SFMCIC (Bit 0) */ + #define R_QSPI_SFMSIC_SFMCIC_Msk (0xffUL) /*!< SFMCIC (Bitfield-Mask: 0xff) */ +/* ======================================================== SFMSAC ========================================================= */ + #define R_QSPI_SFMSAC_SFM4BC_Pos (4UL) /*!< SFM4BC (Bit 4) */ + #define R_QSPI_SFMSAC_SFM4BC_Msk (0x10UL) /*!< SFM4BC (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSAC_SFMAS_Pos (0UL) /*!< SFMAS (Bit 0) */ + #define R_QSPI_SFMSAC_SFMAS_Msk (0x3UL) /*!< SFMAS (Bitfield-Mask: 0x03) */ +/* ======================================================== SFMSDC ========================================================= */ + #define R_QSPI_SFMSDC_SFMXD_Pos (8UL) /*!< SFMXD (Bit 8) */ + #define R_QSPI_SFMSDC_SFMXD_Msk (0xff00UL) /*!< SFMXD (Bitfield-Mask: 0xff) */ + #define R_QSPI_SFMSDC_SFMXEN_Pos (7UL) /*!< SFMXEN (Bit 7) */ + #define R_QSPI_SFMSDC_SFMXEN_Msk (0x80UL) /*!< SFMXEN (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSDC_SFMXST_Pos (6UL) /*!< SFMXST (Bit 6) */ + #define R_QSPI_SFMSDC_SFMXST_Msk (0x40UL) /*!< SFMXST (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSDC_SFMDN_Pos (0UL) /*!< SFMDN (Bit 0) */ + #define R_QSPI_SFMSDC_SFMDN_Msk (0xfUL) /*!< SFMDN (Bitfield-Mask: 0x0f) */ +/* ======================================================== SFMSPC ========================================================= */ + #define R_QSPI_SFMSPC_SFMSDE_Pos (4UL) /*!< SFMSDE (Bit 4) */ + #define R_QSPI_SFMSPC_SFMSDE_Msk (0x10UL) /*!< SFMSDE (Bitfield-Mask: 0x01) */ + #define R_QSPI_SFMSPC_SFMSPI_Pos (0UL) /*!< SFMSPI (Bit 0) */ + #define R_QSPI_SFMSPC_SFMSPI_Msk (0x3UL) /*!< SFMSPI (Bitfield-Mask: 0x03) */ +/* ======================================================== SFMPMD ========================================================= */ + #define R_QSPI_SFMPMD_SFMWPL_Pos (2UL) /*!< SFMWPL (Bit 2) */ + #define R_QSPI_SFMPMD_SFMWPL_Msk (0x4UL) /*!< SFMWPL (Bitfield-Mask: 0x01) */ +/* ======================================================== SFMCNT1 ======================================================== */ + #define R_QSPI_SFMCNT1_QSPI_EXT_Pos (26UL) /*!< QSPI_EXT (Bit 26) */ + #define R_QSPI_SFMCNT1_QSPI_EXT_Msk (0xfc000000UL) /*!< QSPI_EXT (Bitfield-Mask: 0x3f) */ + +/* =========================================================================================================================== */ +/* ================ 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) */ + +/* =========================================================================================================================== */ +/* ================ 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_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) */ +/* ========================================================= 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 ========================================================== */ + +/* =========================================================================================================================== */ +/* ================ 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_SSI0 ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= SSICR ========================================================= */ + #define R_SSI0_SSICR_CKS_Pos (30UL) /*!< CKS (Bit 30) */ + #define R_SSI0_SSICR_CKS_Msk (0x40000000UL) /*!< CKS (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_TUIEN_Pos (29UL) /*!< TUIEN (Bit 29) */ + #define R_SSI0_SSICR_TUIEN_Msk (0x20000000UL) /*!< TUIEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_TOIEN_Pos (28UL) /*!< TOIEN (Bit 28) */ + #define R_SSI0_SSICR_TOIEN_Msk (0x10000000UL) /*!< TOIEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_RUIEN_Pos (27UL) /*!< RUIEN (Bit 27) */ + #define R_SSI0_SSICR_RUIEN_Msk (0x8000000UL) /*!< RUIEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_ROIEN_Pos (26UL) /*!< ROIEN (Bit 26) */ + #define R_SSI0_SSICR_ROIEN_Msk (0x4000000UL) /*!< ROIEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_IIEN_Pos (25UL) /*!< IIEN (Bit 25) */ + #define R_SSI0_SSICR_IIEN_Msk (0x2000000UL) /*!< IIEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_FRM_Pos (22UL) /*!< FRM (Bit 22) */ + #define R_SSI0_SSICR_FRM_Msk (0xc00000UL) /*!< FRM (Bitfield-Mask: 0x03) */ + #define R_SSI0_SSICR_DWL_Pos (19UL) /*!< DWL (Bit 19) */ + #define R_SSI0_SSICR_DWL_Msk (0x380000UL) /*!< DWL (Bitfield-Mask: 0x07) */ + #define R_SSI0_SSICR_SWL_Pos (16UL) /*!< SWL (Bit 16) */ + #define R_SSI0_SSICR_SWL_Msk (0x70000UL) /*!< SWL (Bitfield-Mask: 0x07) */ + #define R_SSI0_SSICR_MST_Pos (14UL) /*!< MST (Bit 14) */ + #define R_SSI0_SSICR_MST_Msk (0x4000UL) /*!< MST (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_BCKP_Pos (13UL) /*!< BCKP (Bit 13) */ + #define R_SSI0_SSICR_BCKP_Msk (0x2000UL) /*!< BCKP (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_LRCKP_Pos (12UL) /*!< LRCKP (Bit 12) */ + #define R_SSI0_SSICR_LRCKP_Msk (0x1000UL) /*!< LRCKP (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_SPDP_Pos (11UL) /*!< SPDP (Bit 11) */ + #define R_SSI0_SSICR_SPDP_Msk (0x800UL) /*!< SPDP (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_SDTA_Pos (10UL) /*!< SDTA (Bit 10) */ + #define R_SSI0_SSICR_SDTA_Msk (0x400UL) /*!< SDTA (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_PDTA_Pos (9UL) /*!< PDTA (Bit 9) */ + #define R_SSI0_SSICR_PDTA_Msk (0x200UL) /*!< PDTA (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_DEL_Pos (8UL) /*!< DEL (Bit 8) */ + #define R_SSI0_SSICR_DEL_Msk (0x100UL) /*!< DEL (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_CKDV_Pos (4UL) /*!< CKDV (Bit 4) */ + #define R_SSI0_SSICR_CKDV_Msk (0xf0UL) /*!< CKDV (Bitfield-Mask: 0x0f) */ + #define R_SSI0_SSICR_MUEN_Pos (3UL) /*!< MUEN (Bit 3) */ + #define R_SSI0_SSICR_MUEN_Msk (0x8UL) /*!< MUEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_TEN_Pos (1UL) /*!< TEN (Bit 1) */ + #define R_SSI0_SSICR_TEN_Msk (0x2UL) /*!< TEN (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSICR_REN_Pos (0UL) /*!< REN (Bit 0) */ + #define R_SSI0_SSICR_REN_Msk (0x1UL) /*!< REN (Bitfield-Mask: 0x01) */ +/* ========================================================= SSISR ========================================================= */ + #define R_SSI0_SSISR_TUIRQ_Pos (29UL) /*!< TUIRQ (Bit 29) */ + #define R_SSI0_SSISR_TUIRQ_Msk (0x20000000UL) /*!< TUIRQ (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_TOIRQ_Pos (28UL) /*!< TOIRQ (Bit 28) */ + #define R_SSI0_SSISR_TOIRQ_Msk (0x10000000UL) /*!< TOIRQ (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_RUIRQ_Pos (27UL) /*!< RUIRQ (Bit 27) */ + #define R_SSI0_SSISR_RUIRQ_Msk (0x8000000UL) /*!< RUIRQ (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_ROIRQ_Pos (26UL) /*!< ROIRQ (Bit 26) */ + #define R_SSI0_SSISR_ROIRQ_Msk (0x4000000UL) /*!< ROIRQ (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_IIRQ_Pos (25UL) /*!< IIRQ (Bit 25) */ + #define R_SSI0_SSISR_IIRQ_Msk (0x2000000UL) /*!< IIRQ (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_TCHNO_Pos (5UL) /*!< TCHNO (Bit 5) */ + #define R_SSI0_SSISR_TCHNO_Msk (0x60UL) /*!< TCHNO (Bitfield-Mask: 0x03) */ + #define R_SSI0_SSISR_TSWNO_Pos (4UL) /*!< TSWNO (Bit 4) */ + #define R_SSI0_SSISR_TSWNO_Msk (0x10UL) /*!< TSWNO (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_RCHNO_Pos (2UL) /*!< RCHNO (Bit 2) */ + #define R_SSI0_SSISR_RCHNO_Msk (0xcUL) /*!< RCHNO (Bitfield-Mask: 0x03) */ + #define R_SSI0_SSISR_RSWNO_Pos (1UL) /*!< RSWNO (Bit 1) */ + #define R_SSI0_SSISR_RSWNO_Msk (0x2UL) /*!< RSWNO (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSISR_IDST_Pos (0UL) /*!< IDST (Bit 0) */ + #define R_SSI0_SSISR_IDST_Msk (0x1UL) /*!< IDST (Bitfield-Mask: 0x01) */ +/* ======================================================== SSIFCR ========================================================= */ + #define R_SSI0_SSIFCR_AUCKE_Pos (31UL) /*!< AUCKE (Bit 31) */ + #define R_SSI0_SSIFCR_AUCKE_Msk (0x80000000UL) /*!< AUCKE (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_SSIRST_Pos (16UL) /*!< SSIRST (Bit 16) */ + #define R_SSI0_SSIFCR_SSIRST_Msk (0x10000UL) /*!< SSIRST (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_TTRG_Pos (6UL) /*!< TTRG (Bit 6) */ + #define R_SSI0_SSIFCR_TTRG_Msk (0xc0UL) /*!< TTRG (Bitfield-Mask: 0x03) */ + #define R_SSI0_SSIFCR_RTRG_Pos (4UL) /*!< RTRG (Bit 4) */ + #define R_SSI0_SSIFCR_RTRG_Msk (0x30UL) /*!< RTRG (Bitfield-Mask: 0x03) */ + #define R_SSI0_SSIFCR_TIE_Pos (3UL) /*!< TIE (Bit 3) */ + #define R_SSI0_SSIFCR_TIE_Msk (0x8UL) /*!< TIE (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_RIE_Pos (2UL) /*!< RIE (Bit 2) */ + #define R_SSI0_SSIFCR_RIE_Msk (0x4UL) /*!< RIE (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_TFRST_Pos (1UL) /*!< TFRST (Bit 1) */ + #define R_SSI0_SSIFCR_TFRST_Msk (0x2UL) /*!< TFRST (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_RFRST_Pos (0UL) /*!< RFRST (Bit 0) */ + #define R_SSI0_SSIFCR_RFRST_Msk (0x1UL) /*!< RFRST (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFCR_BSW_Pos (11UL) /*!< BSW (Bit 11) */ + #define R_SSI0_SSIFCR_BSW_Msk (0x800UL) /*!< BSW (Bitfield-Mask: 0x01) */ +/* ======================================================== SSIFSR ========================================================= */ + #define R_SSI0_SSIFSR_TDC_Pos (24UL) /*!< TDC (Bit 24) */ + #define R_SSI0_SSIFSR_TDC_Msk (0x3f000000UL) /*!< TDC (Bitfield-Mask: 0x3f) */ + #define R_SSI0_SSIFSR_TDE_Pos (16UL) /*!< TDE (Bit 16) */ + #define R_SSI0_SSIFSR_TDE_Msk (0x10000UL) /*!< TDE (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIFSR_RDC_Pos (8UL) /*!< RDC (Bit 8) */ + #define R_SSI0_SSIFSR_RDC_Msk (0x3f00UL) /*!< RDC (Bitfield-Mask: 0x3f) */ + #define R_SSI0_SSIFSR_RDF_Pos (0UL) /*!< RDF (Bit 0) */ + #define R_SSI0_SSIFSR_RDF_Msk (0x1UL) /*!< RDF (Bitfield-Mask: 0x01) */ +/* ======================================================== SSIFTDR ======================================================== */ + #define R_SSI0_SSIFTDR_SSIFTDR_Pos (0UL) /*!< SSIFTDR (Bit 0) */ + #define R_SSI0_SSIFTDR_SSIFTDR_Msk (0xffffffffUL) /*!< SSIFTDR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= SSIFTDR16 ======================================================= */ +/* ======================================================= SSIFTDR8 ======================================================== */ +/* ======================================================== SSIFRDR ======================================================== */ + #define R_SSI0_SSIFRDR_SSIFRDR_Pos (0UL) /*!< SSIFRDR (Bit 0) */ + #define R_SSI0_SSIFRDR_SSIFRDR_Msk (0xffffffffUL) /*!< SSIFRDR (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= SSIFRDR16 ======================================================= */ +/* ======================================================= SSIFRDR8 ======================================================== */ +/* ======================================================== SSIOFR ========================================================= */ + #define R_SSI0_SSIOFR_BCKASTP_Pos (9UL) /*!< BCKASTP (Bit 9) */ + #define R_SSI0_SSIOFR_BCKASTP_Msk (0x200UL) /*!< BCKASTP (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIOFR_LRCONT_Pos (8UL) /*!< LRCONT (Bit 8) */ + #define R_SSI0_SSIOFR_LRCONT_Msk (0x100UL) /*!< LRCONT (Bitfield-Mask: 0x01) */ + #define R_SSI0_SSIOFR_OMOD_Pos (0UL) /*!< OMOD (Bit 0) */ + #define R_SSI0_SSIOFR_OMOD_Msk (0x3UL) /*!< OMOD (Bitfield-Mask: 0x03) */ +/* ======================================================== SSISCR ========================================================= */ + #define R_SSI0_SSISCR_TDES_Pos (8UL) /*!< TDES (Bit 8) */ + #define R_SSI0_SSISCR_TDES_Msk (0x1f00UL) /*!< TDES (Bitfield-Mask: 0x1f) */ + #define R_SSI0_SSISCR_RDFS_Pos (0UL) /*!< RDFS (Bit 0) */ + #define R_SSI0_SSISCR_RDFS_Msk (0x1fUL) /*!< RDFS (Bitfield-Mask: 0x1f) */ + +/* =========================================================================================================================== */ +/* ================ 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_LVD1LVL_Pos (0UL) /*!< LVD1LVL (Bit 0) */ + #define R_SYSTEM_LVD1CMPCR_LVD1LVL_Msk (0x1fUL) /*!< LVD1LVL (Bitfield-Mask: 0x1f) */ + #define R_SYSTEM_LVD1CMPCR_LVD1E_Pos (7UL) /*!< LVD1E (Bit 7) */ + #define R_SYSTEM_LVD1CMPCR_LVD1E_Msk (0x80UL) /*!< LVD1E (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_LVD2LVL_Pos (0UL) /*!< LVD2LVL (Bit 0) */ + #define R_SYSTEM_LVD2CMPCR_LVD2LVL_Msk (0x7UL) /*!< LVD2LVL (Bitfield-Mask: 0x07) */ + #define R_SYSTEM_LVD2CMPCR_LVD2E_Pos (7UL) /*!< LVD2E (Bit 7) */ + #define R_SYSTEM_LVD2CMPCR_LVD2E_Msk (0x80UL) /*!< LVD2E (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_CAL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TSCDR ========================================================= */ + #define R_TSN_CAL_TSCDR_TSCDR_Pos (0UL) /*!< TSCDR (Bit 0) */ + #define R_TSN_CAL_TSCDR_TSCDR_Msk (0xffffffffUL) /*!< TSCDR (Bitfield-Mask: 0xffffffff) */ + +/* =========================================================================================================================== */ +/* ================ R_TSN_CTRL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= TSCR ========================================================== */ + #define R_TSN_CTRL_TSCR_TSEN_Pos (7UL) /*!< TSEN (Bit 7) */ + #define R_TSN_CTRL_TSCR_TSEN_Msk (0x80UL) /*!< TSEN (Bitfield-Mask: 0x01) */ + #define R_TSN_CTRL_TSCR_TSOE_Pos (4UL) /*!< TSOE (Bit 4) */ + #define R_TSN_CTRL_TSCR_TSOE_Msk (0x10UL) /*!< TSOE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ 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_TZF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== TZFOAD ========================================================= */ + #define R_TZF_TZFOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_TZF_TZFOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ + #define R_TZF_TZFOAD_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_TZF_TZFOAD_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ +/* ========================================================= TZFPT ========================================================= */ + #define R_TZF_TZFPT_PROTECT_Pos (0UL) /*!< PROTECT (Bit 0) */ + #define R_TZF_TZFPT_PROTECT_Msk (0x1UL) /*!< PROTECT (Bitfield-Mask: 0x01) */ + #define R_TZF_TZFPT_KEY_Pos (8UL) /*!< KEY (Bit 8) */ + #define R_TZF_TZFPT_KEY_Msk (0xff00UL) /*!< KEY (Bitfield-Mask: 0xff) */ + +/* =========================================================================================================================== */ +/* ================ R_CACHE ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== CCACTL ========================================================= */ + #define R_CACHE_CCACTL_ENC_Pos (0UL) /*!< ENC (Bit 0) */ + #define R_CACHE_CCACTL_ENC_Msk (0x1UL) /*!< ENC (Bitfield-Mask: 0x01) */ +/* ======================================================== CCAFCT ========================================================= */ + #define R_CACHE_CCAFCT_FC_Pos (0UL) /*!< FC (Bit 0) */ + #define R_CACHE_CCAFCT_FC_Msk (0x1UL) /*!< FC (Bitfield-Mask: 0x01) */ +/* ======================================================== CCALCF ========================================================= */ + #define R_CACHE_CCALCF_CC_Pos (0UL) /*!< CC (Bit 0) */ + #define R_CACHE_CCALCF_CC_Msk (0x3UL) /*!< CC (Bitfield-Mask: 0x03) */ +/* ======================================================== SCACTL ========================================================= */ + #define R_CACHE_SCACTL_ENS_Pos (0UL) /*!< ENS (Bit 0) */ + #define R_CACHE_SCACTL_ENS_Msk (0x1UL) /*!< ENS (Bitfield-Mask: 0x01) */ +/* ======================================================== SCAFCT ========================================================= */ + #define R_CACHE_SCAFCT_FS_Pos (0UL) /*!< FS (Bit 0) */ + #define R_CACHE_SCAFCT_FS_Msk (0x1UL) /*!< FS (Bitfield-Mask: 0x01) */ +/* ======================================================== SCALCF ========================================================= */ + #define R_CACHE_SCALCF_CS_Pos (0UL) /*!< CS (Bit 0) */ + #define R_CACHE_SCALCF_CS_Msk (0x3UL) /*!< CS (Bitfield-Mask: 0x03) */ +/* ======================================================== CAPOAD ========================================================= */ + #define R_CACHE_CAPOAD_OAD_Pos (0UL) /*!< OAD (Bit 0) */ + #define R_CACHE_CAPOAD_OAD_Msk (0x1UL) /*!< OAD (Bitfield-Mask: 0x01) */ +/* ======================================================== CAPRCR ========================================================= */ + #define R_CACHE_CAPRCR_PRCR_Pos (0UL) /*!< PRCR (Bit 0) */ + #define R_CACHE_CAPRCR_PRCR_Msk (0x1UL) /*!< PRCR (Bitfield-Mask: 0x01) */ + #define R_CACHE_CAPRCR_KW_Pos (1UL) /*!< KW (Bit 1) */ + #define R_CACHE_CAPRCR_KW_Msk (0xfeUL) /*!< KW (Bitfield-Mask: 0x7f) */ + +/* =========================================================================================================================== */ +/* ================ R_CPSCU ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CSAR ========================================================== */ + #define R_CPSCU_CSAR_CACHESA_Pos (0UL) /*!< CACHESA (Bit 0) */ + #define R_CPSCU_CSAR_CACHESA_Msk (0x1UL) /*!< CACHESA (Bitfield-Mask: 0x01) */ + #define R_CPSCU_CSAR_CACHELSA_Pos (1UL) /*!< CACHELSA (Bit 1) */ + #define R_CPSCU_CSAR_CACHELSA_Msk (0x2UL) /*!< CACHELSA (Bitfield-Mask: 0x01) */ + #define R_CPSCU_CSAR_CACHEESA_Pos (2UL) /*!< CACHEESA (Bit 2) */ + #define R_CPSCU_CSAR_CACHEESA_Msk (0x4UL) /*!< CACHEESA (Bitfield-Mask: 0x01) */ +/* ======================================================== SRAMSAR ======================================================== */ + #define R_CPSCU_SRAMSAR_SRAMSA0_Pos (0UL) /*!< SRAMSA0 (Bit 0) */ + #define R_CPSCU_SRAMSAR_SRAMSA0_Msk (0x1UL) /*!< SRAMSA0 (Bitfield-Mask: 0x01) */ + #define R_CPSCU_SRAMSAR_SRAMSA1_Pos (1UL) /*!< SRAMSA1 (Bit 1) */ + #define R_CPSCU_SRAMSAR_SRAMSA1_Msk (0x2UL) /*!< SRAMSA1 (Bitfield-Mask: 0x01) */ + #define R_CPSCU_SRAMSAR_SRAMSA2_Pos (2UL) /*!< SRAMSA2 (Bit 2) */ + #define R_CPSCU_SRAMSAR_SRAMSA2_Msk (0x4UL) /*!< SRAMSA2 (Bitfield-Mask: 0x01) */ +/* ======================================================= STBRAMSAR ======================================================= */ + #define R_CPSCU_STBRAMSAR_NSBSTBR_Pos (0UL) /*!< NSBSTBR (Bit 0) */ + #define R_CPSCU_STBRAMSAR_NSBSTBR_Msk (0xfUL) /*!< NSBSTBR (Bitfield-Mask: 0x0f) */ +/* ======================================================== DTCSAR ========================================================= */ + #define R_CPSCU_DTCSAR_DTCSTSA_Pos (0UL) /*!< DTCSTSA (Bit 0) */ + #define R_CPSCU_DTCSAR_DTCSTSA_Msk (0x1UL) /*!< DTCSTSA (Bitfield-Mask: 0x01) */ +/* ======================================================== DMACSAR ======================================================== */ + #define R_CPSCU_DMACSAR_DMASTSA_Pos (0UL) /*!< DMASTSA (Bit 0) */ + #define R_CPSCU_DMACSAR_DMASTSA_Msk (0x1UL) /*!< DMASTSA (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARA ======================================================== */ + #define R_CPSCU_ICUSARA_SAIRQCRn_Pos (0UL) /*!< SAIRQCRn (Bit 0) */ + #define R_CPSCU_ICUSARA_SAIRQCRn_Msk (0xffffUL) /*!< SAIRQCRn (Bitfield-Mask: 0xffff) */ +/* ======================================================== ICUSARB ======================================================== */ + #define R_CPSCU_ICUSARB_SANMI_Pos (0UL) /*!< SANMI (Bit 0) */ + #define R_CPSCU_ICUSARB_SANMI_Msk (0x1UL) /*!< SANMI (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARC ======================================================== */ + #define R_CPSCU_ICUSARC_SADMACn_Pos (0UL) /*!< SADMACn (Bit 0) */ + #define R_CPSCU_ICUSARC_SADMACn_Msk (0xffUL) /*!< SADMACn (Bitfield-Mask: 0xff) */ +/* ======================================================== ICUSARD ======================================================== */ + #define R_CPSCU_ICUSARD_SASELSR0_Pos (0UL) /*!< SASELSR0 (Bit 0) */ + #define R_CPSCU_ICUSARD_SASELSR0_Msk (0x1UL) /*!< SASELSR0 (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARE ======================================================== */ + #define R_CPSCU_ICUSARE_SAIWDTWUP_Pos (16UL) /*!< SAIWDTWUP (Bit 16) */ + #define R_CPSCU_ICUSARE_SAIWDTWUP_Msk (0x10000UL) /*!< SAIWDTWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SALVD1WUP_Pos (18UL) /*!< SALVD1WUP (Bit 18) */ + #define R_CPSCU_ICUSARE_SALVD1WUP_Msk (0x40000UL) /*!< SALVD1WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SALVD2WUP_Pos (19UL) /*!< SALVD2WUP (Bit 19) */ + #define R_CPSCU_ICUSARE_SALVD2WUP_Msk (0x80000UL) /*!< SALVD2WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAVBATTWUP_Pos (20UL) /*!< SAVBATTWUP (Bit 20) */ + #define R_CPSCU_ICUSARE_SAVBATTWUP_Msk (0x100000UL) /*!< SAVBATTWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAACMPLP0WUP_Pos (23UL) /*!< SAACMPLP0WUP (Bit 23) */ + #define R_CPSCU_ICUSARE_SAACMPLP0WUP_Msk (0x800000UL) /*!< SAACMPLP0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SARTCALMWUP_Pos (24UL) /*!< SARTCALMWUP (Bit 24) */ + #define R_CPSCU_ICUSARE_SARTCALMWUP_Msk (0x1000000UL) /*!< SARTCALMWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SARTCPRDWUP_Pos (25UL) /*!< SARTCPRDWUP (Bit 25) */ + #define R_CPSCU_ICUSARE_SARTCPRDWUP_Msk (0x2000000UL) /*!< SARTCPRDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAUSBFS0WUP_Pos (27UL) /*!< SAUSBFS0WUP (Bit 27) */ + #define R_CPSCU_ICUSARE_SAUSBFS0WUP_Msk (0x8000000UL) /*!< SAUSBFS0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1UDWUP_Pos (28UL) /*!< SAAGT1UDWUP (Bit 28) */ + #define R_CPSCU_ICUSARE_SAAGT1UDWUP_Msk (0x10000000UL) /*!< SAAGT1UDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1CAWUP_Pos (29UL) /*!< SAAGT1CAWUP (Bit 29) */ + #define R_CPSCU_ICUSARE_SAAGT1CAWUP_Msk (0x20000000UL) /*!< SAAGT1CAWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAAGT1CBWUP_Pos (30UL) /*!< SAAGT1CBWUP (Bit 30) */ + #define R_CPSCU_ICUSARE_SAAGT1CBWUP_Msk (0x40000000UL) /*!< SAAGT1CBWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARE_SAIIC0WUP_Pos (31UL) /*!< SAIIC0WUP (Bit 31) */ + #define R_CPSCU_ICUSARE_SAIIC0WUP_Msk (0x80000000UL) /*!< SAIIC0WUP (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARF ======================================================== */ + #define R_CPSCU_ICUSARF_SAAGT3UDWUP_Pos (0UL) /*!< SAAGT3UDWUP (Bit 0) */ + #define R_CPSCU_ICUSARF_SAAGT3UDWUP_Msk (0x1UL) /*!< SAAGT3UDWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAAGT3CAWUP_Pos (1UL) /*!< SAAGT3CAWUP (Bit 1) */ + #define R_CPSCU_ICUSARF_SAAGT3CAWUP_Msk (0x2UL) /*!< SAAGT3CAWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAAGT3CBWUP_Pos (2UL) /*!< SAAGT3CBWUP (Bit 2) */ + #define R_CPSCU_ICUSARF_SAAGT3CBWUP_Msk (0x4UL) /*!< SAAGT3CBWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SACOMPHS0WUP_Pos (3UL) /*!< SACOMPHS0WUP (Bit 3) */ + #define R_CPSCU_ICUSARF_SACOMPHS0WUP_Msk (0x8UL) /*!< SACOMPHS0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SASOSCWUP_Pos (7UL) /*!< SASOSCWUP (Bit 7) */ + #define R_CPSCU_ICUSARF_SASOSCWUP_Msk (0x80UL) /*!< SASOSCWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP0UWUP_Pos (8UL) /*!< SAULP0UWUP (Bit 8) */ + #define R_CPSCU_ICUSARF_SAULP0UWUP_Msk (0x100UL) /*!< SAULP0UWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP0AWUP_Pos (9UL) /*!< SAULP0AWUP (Bit 9) */ + #define R_CPSCU_ICUSARF_SAULP0AWUP_Msk (0x200UL) /*!< SAULP0AWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP0BWUP_Pos (10UL) /*!< SAULP0BWUP (Bit 10) */ + #define R_CPSCU_ICUSARF_SAULP0BWUP_Msk (0x400UL) /*!< SAULP0BWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAI3CWUP_Pos (11UL) /*!< SAI3CWUP (Bit 11) */ + #define R_CPSCU_ICUSARF_SAI3CWUP_Msk (0x800UL) /*!< SAI3CWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP1UWUP_Pos (12UL) /*!< SAULP1UWUP (Bit 12) */ + #define R_CPSCU_ICUSARF_SAULP1UWUP_Msk (0x1000UL) /*!< SAULP1UWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP1AWUP_Pos (13UL) /*!< SAULP1AWUP (Bit 13) */ + #define R_CPSCU_ICUSARF_SAULP1AWUP_Msk (0x2000UL) /*!< SAULP1AWUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARF_SAULP1BWUP_Pos (14UL) /*!< SAULP1BWUP (Bit 14) */ + #define R_CPSCU_ICUSARF_SAULP1BWUP_Msk (0x4000UL) /*!< SAULP1BWUP (Bitfield-Mask: 0x01) */ +/* ======================================================== ICUSARG ======================================================== */ + #define R_CPSCU_ICUSARG_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARG_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ICUSARH ======================================================== */ + #define R_CPSCU_ICUSARH_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARH_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ICUSARI ======================================================== */ + #define R_CPSCU_ICUSARI_SAIELSRn_Pos (0UL) /*!< SAIELSRn (Bit 0) */ + #define R_CPSCU_ICUSARI_SAIELSRn_Msk (0xffffffffUL) /*!< SAIELSRn (Bitfield-Mask: 0xffffffff) */ +/* ======================================================== ICUSARM ======================================================== */ + #define R_CPSCU_ICUSARM_SAINTUR0WUP_Pos (0UL) /*!< SAINTUR0WUP (Bit 0) */ + #define R_CPSCU_ICUSARM_SAINTUR0WUP_Msk (0x1UL) /*!< SAINTUR0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARM_SAINTURE0WUP_Pos (1UL) /*!< SAINTURE0WUP (Bit 1) */ + #define R_CPSCU_ICUSARM_SAINTURE0WUP_Msk (0x2UL) /*!< SAINTURE0WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARM_SAINTUR1WUP_Pos (2UL) /*!< SAINTUR1WUP (Bit 2) */ + #define R_CPSCU_ICUSARM_SAINTUR1WUP_Msk (0x4UL) /*!< SAINTUR1WUP (Bitfield-Mask: 0x01) */ + #define R_CPSCU_ICUSARM_SAINTURE1WUP_Pos (3UL) /*!< SAINTURE1WUP (Bit 3) */ + #define R_CPSCU_ICUSARM_SAINTURE1WUP_Msk (0x8UL) /*!< SAINTURE1WUP (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSSARA ======================================================== */ + #define R_CPSCU_BUSSARA_BUSSA0_Pos (0UL) /*!< BUSSA0 (Bit 0) */ + #define R_CPSCU_BUSSARA_BUSSA0_Msk (0x1UL) /*!< BUSSA0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSSARB ======================================================== */ + #define R_CPSCU_BUSSARB_BUSSB0_Pos (0UL) /*!< BUSSB0 (Bit 0) */ + #define R_CPSCU_BUSSARB_BUSSB0_Msk (0x1UL) /*!< BUSSB0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSSARC ======================================================== */ + #define R_CPSCU_BUSSARC_BUSSC0_Pos (0UL) /*!< BUSSC0 (Bit 0) */ + #define R_CPSCU_BUSSARC_BUSSC0_Msk (0x1UL) /*!< BUSSC0 (Bitfield-Mask: 0x01) */ +/* ======================================================== BUSPARC ======================================================== */ + #define R_CPSCU_BUSPARC_BUSPA0_Pos (0UL) /*!< BUSPA0 (Bit 0) */ + #define R_CPSCU_BUSPARC_BUSPA0_Msk (0x1UL) /*!< BUSPA0 (Bitfield-Mask: 0x01) */ +/* ======================================================= MMPUSARA ======================================================== */ + #define R_CPSCU_MMPUSARA_MMPUAnSA_Pos (0UL) /*!< MMPUAnSA (Bit 0) */ + #define R_CPSCU_MMPUSARA_MMPUAnSA_Msk (0xffUL) /*!< MMPUAnSA (Bitfield-Mask: 0xff) */ +/* ======================================================= MMPUSARB ======================================================== */ + #define R_CPSCU_MMPUSARB_MMPUB0SA_Pos (0UL) /*!< MMPUB0SA (Bit 0) */ + #define R_CPSCU_MMPUSARB_MMPUB0SA_Msk (0x1UL) /*!< MMPUB0SA (Bitfield-Mask: 0x01) */ +/* ======================================================== TZFSAR ========================================================= */ + #define R_CPSCU_TZFSAR_TZFSA0_Pos (0UL) /*!< TZFSA0 (Bit 0) */ + #define R_CPSCU_TZFSAR_TZFSA0_Msk (0x1UL) /*!< TZFSA0 (Bitfield-Mask: 0x01) */ +/* ======================================================= DEBUGSAR ======================================================== */ + #define R_CPSCU_DEBUGSAR_DBGSA0_Pos (0UL) /*!< DBGSA0 (Bit 0) */ + #define R_CPSCU_DEBUGSAR_DBGSA0_Msk (0x1UL) /*!< DBGSA0 (Bitfield-Mask: 0x01) */ +/* ======================================================= DMACCHSAR ======================================================= */ + #define R_CPSCU_DMACCHSAR_DMACCHSARn_Pos (0UL) /*!< DMACCHSARn (Bit 0) */ + #define R_CPSCU_DMACCHSAR_DMACCHSARn_Msk (0xffUL) /*!< DMACCHSARn (Bitfield-Mask: 0xff) */ +/* ======================================================== CPUDSAR ======================================================== */ + #define R_CPSCU_CPUDSAR_CPUDSA0_Pos (0UL) /*!< CPUDSA0 (Bit 0) */ + #define R_CPSCU_CPUDSAR_CPUDSA0_Msk (0x1UL) /*!< CPUDSA0 (Bitfield-Mask: 0x01) */ +/* ====================================================== SRAMSABAR0 ======================================================= */ + #define R_CPSCU_SRAMSABAR0_SRAMSABAR_Pos (13UL) /*!< SRAMSABAR (Bit 13) */ + #define R_CPSCU_SRAMSABAR0_SRAMSABAR_Msk (0x1fe000UL) /*!< SRAMSABAR (Bitfield-Mask: 0xff) */ +/* ====================================================== SRAMSABAR1 ======================================================= */ + #define R_CPSCU_SRAMSABAR1_SRAMSABAR_Pos (13UL) /*!< SRAMSABAR (Bit 13) */ + #define R_CPSCU_SRAMSABAR1_SRAMSABAR_Msk (0x1fe000UL) /*!< SRAMSABAR (Bitfield-Mask: 0xff) */ +/* ======================================================== TEVTRCR ======================================================== */ + #define R_CPSCU_TEVTRCR_TEVTE_Pos (0UL) /*!< TEVTE (Bit 0) */ + #define R_CPSCU_TEVTRCR_TEVTE_Msk (0x1UL) /*!< TEVTE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_CEC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CADR ========================================================== */ + #define R_CEC_CADR_ADR00_Pos (0UL) /*!< ADR00 (Bit 0) */ + #define R_CEC_CADR_ADR00_Msk (0x1UL) /*!< ADR00 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR01_Pos (1UL) /*!< ADR01 (Bit 1) */ + #define R_CEC_CADR_ADR01_Msk (0x2UL) /*!< ADR01 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR02_Pos (2UL) /*!< ADR02 (Bit 2) */ + #define R_CEC_CADR_ADR02_Msk (0x4UL) /*!< ADR02 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR03_Pos (3UL) /*!< ADR03 (Bit 3) */ + #define R_CEC_CADR_ADR03_Msk (0x8UL) /*!< ADR03 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR04_Pos (4UL) /*!< ADR04 (Bit 4) */ + #define R_CEC_CADR_ADR04_Msk (0x10UL) /*!< ADR04 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR05_Pos (5UL) /*!< ADR05 (Bit 5) */ + #define R_CEC_CADR_ADR05_Msk (0x20UL) /*!< ADR05 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR06_Pos (6UL) /*!< ADR06 (Bit 6) */ + #define R_CEC_CADR_ADR06_Msk (0x40UL) /*!< ADR06 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR07_Pos (7UL) /*!< ADR07 (Bit 7) */ + #define R_CEC_CADR_ADR07_Msk (0x80UL) /*!< ADR07 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR08_Pos (8UL) /*!< ADR08 (Bit 8) */ + #define R_CEC_CADR_ADR08_Msk (0x100UL) /*!< ADR08 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR09_Pos (9UL) /*!< ADR09 (Bit 9) */ + #define R_CEC_CADR_ADR09_Msk (0x200UL) /*!< ADR09 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR10_Pos (10UL) /*!< ADR10 (Bit 10) */ + #define R_CEC_CADR_ADR10_Msk (0x400UL) /*!< ADR10 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR11_Pos (11UL) /*!< ADR11 (Bit 11) */ + #define R_CEC_CADR_ADR11_Msk (0x800UL) /*!< ADR11 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR12_Pos (12UL) /*!< ADR12 (Bit 12) */ + #define R_CEC_CADR_ADR12_Msk (0x1000UL) /*!< ADR12 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR13_Pos (13UL) /*!< ADR13 (Bit 13) */ + #define R_CEC_CADR_ADR13_Msk (0x2000UL) /*!< ADR13 (Bitfield-Mask: 0x01) */ + #define R_CEC_CADR_ADR14_Pos (14UL) /*!< ADR14 (Bit 14) */ + #define R_CEC_CADR_ADR14_Msk (0x4000UL) /*!< ADR14 (Bitfield-Mask: 0x01) */ +/* ======================================================== CECCTL1 ======================================================== */ + #define R_CEC_CECCTL1_SFT_Pos (0UL) /*!< SFT (Bit 0) */ + #define R_CEC_CECCTL1_SFT_Msk (0x3UL) /*!< SFT (Bitfield-Mask: 0x03) */ + #define R_CEC_CECCTL1_CESEL_Pos (2UL) /*!< CESEL (Bit 2) */ + #define R_CEC_CECCTL1_CESEL_Msk (0xcUL) /*!< CESEL (Bitfield-Mask: 0x03) */ + #define R_CEC_CECCTL1_STERRD_Pos (4UL) /*!< STERRD (Bit 4) */ + #define R_CEC_CECCTL1_STERRD_Msk (0x10UL) /*!< STERRD (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL1_BLERRD_Pos (5UL) /*!< BLERRD (Bit 5) */ + #define R_CEC_CECCTL1_BLERRD_Msk (0x20UL) /*!< BLERRD (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL1_CINTMK_Pos (6UL) /*!< CINTMK (Bit 6) */ + #define R_CEC_CECCTL1_CINTMK_Msk (0x40UL) /*!< CINTMK (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL1_CDFC_Pos (7UL) /*!< CDFC (Bit 7) */ + #define R_CEC_CECCTL1_CDFC_Msk (0x80UL) /*!< CDFC (Bitfield-Mask: 0x01) */ +/* ========================================================= STATB ========================================================= */ + #define R_CEC_STATB_STATB_Pos (0UL) /*!< STATB (Bit 0) */ + #define R_CEC_STATB_STATB_Msk (0x1ffUL) /*!< STATB (Bitfield-Mask: 0x1ff) */ +/* ========================================================= STATL ========================================================= */ + #define R_CEC_STATL_STATL_Pos (0UL) /*!< STATL (Bit 0) */ + #define R_CEC_STATL_STATL_Msk (0x1ffUL) /*!< STATL (Bitfield-Mask: 0x1ff) */ +/* ========================================================= LGC0L ========================================================= */ + #define R_CEC_LGC0L_LGC0L_Pos (0UL) /*!< LGC0L (Bit 0) */ + #define R_CEC_LGC0L_LGC0L_Msk (0x1ffUL) /*!< LGC0L (Bitfield-Mask: 0x1ff) */ +/* ========================================================= LGC1L ========================================================= */ + #define R_CEC_LGC1L_LGC1L_Pos (0UL) /*!< LGC1L (Bit 0) */ + #define R_CEC_LGC1L_LGC1L_Msk (0x1ffUL) /*!< LGC1L (Bitfield-Mask: 0x1ff) */ +/* ========================================================= DATB ========================================================== */ + #define R_CEC_DATB_DATB_Pos (0UL) /*!< DATB (Bit 0) */ + #define R_CEC_DATB_DATB_Msk (0x1ffUL) /*!< DATB (Bitfield-Mask: 0x1ff) */ +/* ========================================================= NOMT ========================================================== */ + #define R_CEC_NOMT_NOMT_Pos (0UL) /*!< NOMT (Bit 0) */ + #define R_CEC_NOMT_NOMT_Msk (0x1ffUL) /*!< NOMT (Bitfield-Mask: 0x1ff) */ +/* ======================================================== STATLL ========================================================= */ + #define R_CEC_STATLL_STATLL_Pos (0UL) /*!< STATLL (Bit 0) */ + #define R_CEC_STATLL_STATLL_Msk (0x1ffUL) /*!< STATLL (Bitfield-Mask: 0x1ff) */ +/* ======================================================== STATLH ========================================================= */ + #define R_CEC_STATLH_STATLH_Pos (0UL) /*!< STATLH (Bit 0) */ + #define R_CEC_STATLH_STATLH_Msk (0x1ffUL) /*!< STATLH (Bitfield-Mask: 0x1ff) */ +/* ======================================================== STATBL ========================================================= */ + #define R_CEC_STATBL_STATBL_Pos (0UL) /*!< STATBL (Bit 0) */ + #define R_CEC_STATBL_STATBL_Msk (0x1ffUL) /*!< STATBL (Bitfield-Mask: 0x1ff) */ +/* ======================================================== STATBH ========================================================= */ + #define R_CEC_STATBH_STATBH_Pos (0UL) /*!< STATBH (Bit 0) */ + #define R_CEC_STATBH_STATBH_Msk (0x1ffUL) /*!< STATBH (Bitfield-Mask: 0x1ff) */ +/* ======================================================== LGC0LL ========================================================= */ + #define R_CEC_LGC0LL_LGC0LL_Pos (0UL) /*!< LGC0LL (Bit 0) */ + #define R_CEC_LGC0LL_LGC0LL_Msk (0x1ffUL) /*!< LGC0LL (Bitfield-Mask: 0x1ff) */ +/* ======================================================== LGC0LH ========================================================= */ + #define R_CEC_LGC0LH_LGC0LH_Pos (0UL) /*!< LGC0LH (Bit 0) */ + #define R_CEC_LGC0LH_LGC0LH_Msk (0x1ffUL) /*!< LGC0LH (Bitfield-Mask: 0x1ff) */ +/* ======================================================== LGC1LL ========================================================= */ + #define R_CEC_LGC1LL_LGC1LL_Pos (0UL) /*!< LGC1LL (Bit 0) */ + #define R_CEC_LGC1LL_LGC1LL_Msk (0x1ffUL) /*!< LGC1LL (Bitfield-Mask: 0x1ff) */ +/* ======================================================== LGC1LH ========================================================= */ + #define R_CEC_LGC1LH_LGC1LH_Pos (0UL) /*!< LGC1LH (Bit 0) */ + #define R_CEC_LGC1LH_LGC1LH_Msk (0x1ffUL) /*!< LGC1LH (Bitfield-Mask: 0x1ff) */ +/* ========================================================= DATBL ========================================================= */ + #define R_CEC_DATBL_DATBL_Pos (0UL) /*!< DATBL (Bit 0) */ + #define R_CEC_DATBL_DATBL_Msk (0x1ffUL) /*!< DATBL (Bitfield-Mask: 0x1ff) */ +/* ========================================================= DATBH ========================================================= */ + #define R_CEC_DATBH_DATBH_Pos (0UL) /*!< DATBH (Bit 0) */ + #define R_CEC_DATBH_DATBH_Msk (0x1ffUL) /*!< DATBH (Bitfield-Mask: 0x1ff) */ +/* ========================================================= NOMP ========================================================== */ + #define R_CEC_NOMP_NOMP_Pos (0UL) /*!< NOMP (Bit 0) */ + #define R_CEC_NOMP_NOMP_Msk (0x1ffUL) /*!< NOMP (Bitfield-Mask: 0x1ff) */ +/* ======================================================== CECEXMD ======================================================== */ + #define R_CEC_CECEXMD_LERPLEN_Pos (4UL) /*!< LERPLEN (Bit 4) */ + #define R_CEC_CECEXMD_LERPLEN_Msk (0x10UL) /*!< LERPLEN (Bitfield-Mask: 0x01) */ + #define R_CEC_CECEXMD_RERCVEN_Pos (5UL) /*!< RERCVEN (Bit 5) */ + #define R_CEC_CECEXMD_RERCVEN_Msk (0x20UL) /*!< RERCVEN (Bitfield-Mask: 0x01) */ + #define R_CEC_CECEXMD_RCVINTDSEL_Pos (7UL) /*!< RCVINTDSEL (Bit 7) */ + #define R_CEC_CECEXMD_RCVINTDSEL_Msk (0x80UL) /*!< RCVINTDSEL (Bitfield-Mask: 0x01) */ +/* ======================================================= CECEXMON ======================================================== */ + #define R_CEC_CECEXMON_CECLNMON_Pos (0UL) /*!< CECLNMON (Bit 0) */ + #define R_CEC_CECEXMON_CECLNMON_Msk (0x1UL) /*!< CECLNMON (Bitfield-Mask: 0x01) */ + #define R_CEC_CECEXMON_ACKF_Pos (1UL) /*!< ACKF (Bit 1) */ + #define R_CEC_CECEXMON_ACKF_Msk (0x2UL) /*!< ACKF (Bitfield-Mask: 0x01) */ +/* ========================================================= CTXD ========================================================== */ +/* ========================================================= CRXD ========================================================== */ +/* ========================================================= CECES ========================================================= */ + #define R_CEC_CECES_OERR_Pos (0UL) /*!< OERR (Bit 0) */ + #define R_CEC_CECES_OERR_Msk (0x1UL) /*!< OERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_UERR_Pos (1UL) /*!< UERR (Bit 1) */ + #define R_CEC_CECES_UERR_Msk (0x2UL) /*!< UERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_ACKERR_Pos (2UL) /*!< ACKERR (Bit 2) */ + #define R_CEC_CECES_ACKERR_Msk (0x4UL) /*!< ACKERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_TERR_Pos (3UL) /*!< TERR (Bit 3) */ + #define R_CEC_CECES_TERR_Msk (0x8UL) /*!< TERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_TXERR_Pos (4UL) /*!< TXERR (Bit 4) */ + #define R_CEC_CECES_TXERR_Msk (0x10UL) /*!< TXERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_AERR_Pos (5UL) /*!< AERR (Bit 5) */ + #define R_CEC_CECES_AERR_Msk (0x20UL) /*!< AERR (Bitfield-Mask: 0x01) */ + #define R_CEC_CECES_BLERR_Pos (6UL) /*!< BLERR (Bit 6) */ + #define R_CEC_CECES_BLERR_Msk (0x40UL) /*!< BLERR (Bitfield-Mask: 0x01) */ +/* ========================================================= CECS ========================================================== */ + #define R_CEC_CECS_ADRF_Pos (0UL) /*!< ADRF (Bit 0) */ + #define R_CEC_CECS_ADRF_Msk (0x1UL) /*!< ADRF (Bitfield-Mask: 0x01) */ + #define R_CEC_CECS_BUSST_Pos (1UL) /*!< BUSST (Bit 1) */ + #define R_CEC_CECS_BUSST_Msk (0x2UL) /*!< BUSST (Bitfield-Mask: 0x01) */ + #define R_CEC_CECS_TXST_Pos (2UL) /*!< TXST (Bit 2) */ + #define R_CEC_CECS_TXST_Msk (0x4UL) /*!< TXST (Bitfield-Mask: 0x01) */ + #define R_CEC_CECS_EOMF_Pos (3UL) /*!< EOMF (Bit 3) */ + #define R_CEC_CECS_EOMF_Msk (0x8UL) /*!< EOMF (Bitfield-Mask: 0x01) */ + #define R_CEC_CECS_ITCEF_Pos (4UL) /*!< ITCEF (Bit 4) */ + #define R_CEC_CECS_ITCEF_Msk (0x10UL) /*!< ITCEF (Bitfield-Mask: 0x01) */ + #define R_CEC_CECS_SFTST_Pos (7UL) /*!< SFTST (Bit 7) */ + #define R_CEC_CECS_SFTST_Msk (0x80UL) /*!< SFTST (Bitfield-Mask: 0x01) */ +/* ========================================================= CECFC ========================================================= */ + #define R_CEC_CECFC_OCTRG_Pos (0UL) /*!< OCTRG (Bit 0) */ + #define R_CEC_CECFC_OCTRG_Msk (0x1UL) /*!< OCTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_UCTRG_Pos (1UL) /*!< UCTRG (Bit 1) */ + #define R_CEC_CECFC_UCTRG_Msk (0x2UL) /*!< UCTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_ACKCTRG_Pos (2UL) /*!< ACKCTRG (Bit 2) */ + #define R_CEC_CECFC_ACKCTRG_Msk (0x4UL) /*!< ACKCTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_TCTRG_Pos (3UL) /*!< TCTRG (Bit 3) */ + #define R_CEC_CECFC_TCTRG_Msk (0x8UL) /*!< TCTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_TXCTRG_Pos (4UL) /*!< TXCTRG (Bit 4) */ + #define R_CEC_CECFC_TXCTRG_Msk (0x10UL) /*!< TXCTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_ACTRG_Pos (5UL) /*!< ACTRG (Bit 5) */ + #define R_CEC_CECFC_ACTRG_Msk (0x20UL) /*!< ACTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECFC_BLCTRG_Pos (6UL) /*!< BLCTRG (Bit 6) */ + #define R_CEC_CECFC_BLCTRG_Msk (0x40UL) /*!< BLCTRG (Bitfield-Mask: 0x01) */ +/* ======================================================== CECCTL0 ======================================================== */ + #define R_CEC_CECCTL0_EOM_Pos (0UL) /*!< EOM (Bit 0) */ + #define R_CEC_CECCTL0_EOM_Msk (0x1UL) /*!< EOM (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL0_CECRXEN_Pos (1UL) /*!< CECRXEN (Bit 1) */ + #define R_CEC_CECCTL0_CECRXEN_Msk (0x2UL) /*!< CECRXEN (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL0_TXTRG_Pos (2UL) /*!< TXTRG (Bit 2) */ + #define R_CEC_CECCTL0_TXTRG_Msk (0x4UL) /*!< TXTRG (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL0_CCL_Pos (3UL) /*!< CCL (Bit 3) */ + #define R_CEC_CECCTL0_CCL_Msk (0x38UL) /*!< CCL (Bitfield-Mask: 0x07) */ + #define R_CEC_CECCTL0_ACKTEN_Pos (6UL) /*!< ACKTEN (Bit 6) */ + #define R_CEC_CECCTL0_ACKTEN_Msk (0x40UL) /*!< ACKTEN (Bitfield-Mask: 0x01) */ + #define R_CEC_CECCTL0_CECE_Pos (7UL) /*!< CECE (Bit 7) */ + #define R_CEC_CECCTL0_CECE_Msk (0x80UL) /*!< CECE (Bitfield-Mask: 0x01) */ + +/* =========================================================================================================================== */ +/* ================ R_AGTX0 ================ */ +/* =========================================================================================================================== */ + +/* =========================================================================================================================== */ +/* ================ R_ECCMB0 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= EC710CTL ======================================================== */ + #define R_ECCMB0_EC710CTL_ECEMF_Pos (0UL) /*!< ECEMF (Bit 0) */ + #define R_ECCMB0_EC710CTL_ECEMF_Msk (0x1UL) /*!< ECEMF (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECER1F_Pos (1UL) /*!< ECER1F (Bit 1) */ + #define R_ECCMB0_EC710CTL_ECER1F_Msk (0x2UL) /*!< ECER1F (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECER2F_Pos (2UL) /*!< ECER2F (Bit 2) */ + #define R_ECCMB0_EC710CTL_ECER2F_Msk (0x4UL) /*!< ECER2F (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_EC1EDIC_Pos (3UL) /*!< EC1EDIC (Bit 3) */ + #define R_ECCMB0_EC710CTL_EC1EDIC_Msk (0x8UL) /*!< EC1EDIC (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_EC2EDIC_Pos (4UL) /*!< EC2EDIC (Bit 4) */ + #define R_ECCMB0_EC710CTL_EC2EDIC_Msk (0x10UL) /*!< EC2EDIC (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_EC1ECP_Pos (5UL) /*!< EC1ECP (Bit 5) */ + #define R_ECCMB0_EC710CTL_EC1ECP_Msk (0x20UL) /*!< EC1ECP (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECERVF_Pos (6UL) /*!< ECERVF (Bit 6) */ + #define R_ECCMB0_EC710CTL_ECERVF_Msk (0x40UL) /*!< ECERVF (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECER1C_Pos (9UL) /*!< ECER1C (Bit 9) */ + #define R_ECCMB0_EC710CTL_ECER1C_Msk (0x200UL) /*!< ECER1C (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECER2C_Pos (10UL) /*!< ECER2C (Bit 10) */ + #define R_ECCMB0_EC710CTL_ECER2C_Msk (0x400UL) /*!< ECER2C (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECOVFF_Pos (11UL) /*!< ECOVFF (Bit 11) */ + #define R_ECCMB0_EC710CTL_ECOVFF_Msk (0x800UL) /*!< ECOVFF (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_EMCA_Pos (14UL) /*!< EMCA (Bit 14) */ + #define R_ECCMB0_EC710CTL_EMCA_Msk (0xc000UL) /*!< EMCA (Bitfield-Mask: 0x03) */ + #define R_ECCMB0_EC710CTL_ECSEDF0_Pos (16UL) /*!< ECSEDF0 (Bit 16) */ + #define R_ECCMB0_EC710CTL_ECSEDF0_Msk (0x10000UL) /*!< ECSEDF0 (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710CTL_ECDEDF0_Pos (17UL) /*!< ECDEDF0 (Bit 17) */ + #define R_ECCMB0_EC710CTL_ECDEDF0_Msk (0x20000UL) /*!< ECDEDF0 (Bitfield-Mask: 0x01) */ +/* ======================================================= EC710TMC ======================================================== */ + #define R_ECCMB0_EC710TMC_ECDCS_Pos (1UL) /*!< ECDCS (Bit 1) */ + #define R_ECCMB0_EC710TMC_ECDCS_Msk (0x2UL) /*!< ECDCS (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710TMC_ECTMCE_Pos (7UL) /*!< ECTMCE (Bit 7) */ + #define R_ECCMB0_EC710TMC_ECTMCE_Msk (0x80UL) /*!< ECTMCE (Bitfield-Mask: 0x01) */ + #define R_ECCMB0_EC710TMC_ETMA_Pos (14UL) /*!< ETMA (Bit 14) */ + #define R_ECCMB0_EC710TMC_ETMA_Msk (0xc000UL) /*!< ETMA (Bitfield-Mask: 0x03) */ +/* ======================================================= EC710TED ======================================================== */ + #define R_ECCMB0_EC710TED_ECEDB_Pos (0UL) /*!< ECEDB (Bit 0) */ + #define R_ECCMB0_EC710TED_ECEDB_Msk (0xffffffffUL) /*!< ECEDB (Bitfield-Mask: 0xffffffff) */ +/* ======================================================= EC710EAD0 ======================================================= */ + #define R_ECCMB0_EC710EAD0_ECEAD_Pos (0UL) /*!< ECEAD (Bit 0) */ + #define R_ECCMB0_EC710EAD0_ECEAD_Msk (0x3ffUL) /*!< ECEAD (Bitfield-Mask: 0x3ff) */ + +/* =========================================================================================================================== */ +/* ================ R_FLAD ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== FCKMHZ ========================================================= */ + #define R_FLAD_FCKMHZ_FCKMHZ_Pos (0UL) /*!< FCKMHZ (Bit 0) */ + #define R_FLAD_FCKMHZ_FCKMHZ_Msk (0xffUL) /*!< FCKMHZ (Bitfield-Mask: 0xff) */ + +/** @} */ /* End of group PosMask_peripherals */ + + #ifdef __cplusplus +} + #endif + +#endif /* R7FA6E2BB_H */ + +/** @} */ /* End of group R7FA6E2BB */ + +/** @} */ /* End of group Renesas Electronics Corporation */ diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h new file mode 100644 index 00000000000..4526aabb6a5 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/renesas.h @@ -0,0 +1,150 @@ +/* +* Copyright (c) 2020 - 2024 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_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_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_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_RA8T1 + #include "R7FA8T1AH.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/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h new file mode 100644 index 00000000000..d3677a041ce --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Include/system.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c new file mode 100644 index 00000000000..e5461f26d5a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/startup.c @@ -0,0 +1,143 @@ +/* +* Copyright (c) 2020 - 2024 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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 */ +static uint8_t g_main_stack[BSP_CFG_STACK_MAIN_BYTES + BSP_TZ_STACK_SEAL_SIZE] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) +BSP_PLACE_IN_SECTION(BSP_SECTION_STACK); + +/* Heap */ +#if (BSP_CFG_HEAP_BYTES > 0) + +BSP_DONT_REMOVE static uint8_t g_heap[BSP_CFG_HEAP_BYTES] BSP_ALIGN_VARIABLE(BSP_STACK_ALIGNMENT) \ + BSP_PLACE_IN_SECTION(BSP_SECTION_HEAP); +#endif + +/* 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 __Vectors[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/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c new file mode 100644 index 00000000000..807117bf32d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/cmsis/Device/RENESAS/Source/system.c @@ -0,0 +1,873 @@ +/* +* Copyright (c) 2020 - 2024 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) __Vectors[0] - BSP_CFG_STACK_MAIN_BYTES) +#define BSP_PRV_STACK_TOP ((uint32_t) __Vectors[0]) +#define BSP_TZ_STACK_SEAL_VALUE (0xFEF5EDA5) + +#define ARMV8_MPU_REGION_MIN_SIZE (32U) + +/*********************************************************************************************************************** + * 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(__ARMCC_VERSION) +extern uint32_t Image$$BSS$$ZI$$Base; +extern uint32_t Image$$BSS$$ZI$$Length; +extern uint32_t Load$$DATA$$Base; +extern uint32_t Image$$DATA$$Base; +extern uint32_t Image$$DATA$$Length; + #if defined(__ARMCC_USING_STANDARDLIB) +extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Base; +extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Length; + #endif + #if BSP_FEATURE_BSP_HAS_ITCM +extern uint32_t Load$$ITCM_DATA$$Base; +extern uint32_t Load$$ITCM_PAD$$Limit; +extern uint32_t Image$$ITCM_DATA$$Base; + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +extern uint32_t Load$$DTCM_DATA$$Base; +extern uint32_t Load$$DTCM_PAD$$Limit; +extern uint32_t Image$$DTCM_DATA$$Base; +extern uint32_t Image$$DTCM_BSS$$Base; +extern uint32_t Image$$DTCM_BSS_PAD$$ZI$$Limit; + #endif + #if BSP_CFG_DCACHE_ENABLED +extern uint32_t Image$$NOCACHE$$ZI$$Base; +extern uint32_t Image$$NOCACHE_PAD$$ZI$$Limit; +extern uint32_t Image$$NOCACHE_SDRAM$$ZI$$Base; +extern uint32_t Image$$NOCACHE_SDRAM_PAD$$ZI$$Limit; + #endif +#elif defined(__GNUC__) + +/* Generated by linker. */ +extern uint32_t __etext; +extern uint32_t __data_start__; +extern uint32_t __data_end__; +extern uint32_t __bss_start__; +extern uint32_t __bss_end__; +extern uint32_t __StackLimit; +extern uint32_t __StackTop; + +/* Nested in __GNUC__ because LLVM generates both __GNUC__ and __llvm__*/ + #if defined(__llvm__) && !defined(__CLANG_TIDY__) +extern uint32_t __tls_base; + #endif + #if BSP_FEATURE_BSP_HAS_ITCM +extern uint32_t __itcm_data_init_start; +extern uint32_t __itcm_data_init_end; +extern uint32_t __itcm_data_start; + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +extern uint32_t __dtcm_data_init_start; +extern uint32_t __dtcm_data_init_end; +extern uint32_t __dtcm_data_start; +extern uint32_t __dtcm_bss_start; +extern uint32_t __dtcm_bss_end; + #endif + #if BSP_CFG_DCACHE_ENABLED +extern uint32_t __nocache_start; +extern uint32_t __nocache_end; +extern uint32_t __nocache_sdram_start; +extern uint32_t __nocache_sdram_end; + #endif +#elif defined(__ICCARM__) + #pragma section=".bss" + #pragma section=".data" + #pragma section=".data_init" + #pragma section=".stack" + #if BSP_FEATURE_BSP_HAS_ITCM +extern uint32_t ITCM_DATA_INIT$$Base; +extern uint32_t ITCM_DATA_INIT$$Limit; +extern uint32_t ITCM_DATA$$Base; + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +extern uint32_t DTCM_DATA_INIT$$Base; +extern uint32_t DTCM_DATA_INIT$$Limit; +extern uint32_t DTCM_DATA$$Base; +extern uint32_t DTCM_BSS$$Base; +extern uint32_t DTCM_BSS$$Limit; + #endif + #if BSP_CFG_DCACHE_ENABLED +extern uint32_t NOCACHE$$Base; +extern uint32_t NOCACHE$$Limit; +extern uint32_t NOCACHE_SDRAM$$Base; +extern uint32_t NOCACHE_SDRAM$$Limit; + #endif + +#endif + +/* Initialize static constructors */ +#if defined(__ARMCC_VERSION) +extern void (* Image$$INIT_ARRAY$$Base[])(void); +extern void (* Image$$INIT_ARRAY$$Limit[])(void); +#elif 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 * __Vectors[]; + +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_C_RUNTIME_INIT + #if BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM +static void memcpy_64(uint64_t * destination, const uint64_t * source, size_t count); + + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +static void memset_64(uint64_t * destination, const uint64_t value, size_t count); + + #endif +#endif + +#if BSP_CFG_C_RUNTIME_INIT + #if BSP_FEATURE_BSP_HAS_ITCM +static void bsp_init_itcm(void); + + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +static void bsp_init_dtcm(void); + + #endif +#endif + +#if BSP_CFG_DCACHE_ENABLED +static void bsp_init_mpu(void); + +#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 + + /* 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 *) __Vectors[0]; + *p_main_stack_top = BSP_TZ_STACK_SEAL_VALUE; +#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) &__Vectors; +#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_CFG_SKIP_INIT && (defined(R_CACHE) || BSP_FEATURE_BSP_FLASH_CACHE) + + /* Flush cache before enabling */ + R_CACHE->CCAFCT_b.FC = 1; + + /* Enable cache */ + R_BSP_FlashCacheEnable(); + #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_C_RUNTIME_INIT + + /* Initialize C runtime environment. */ + /* Zero out BSS */ + #if defined(__ARMCC_VERSION) + memset((uint8_t *) &Image$$BSS$$ZI$$Base, 0U, (uint32_t) &Image$$BSS$$ZI$$Length); + #elif defined(__GNUC__) + memset(&__bss_start__, 0U, ((uint32_t) &__bss_end__ - (uint32_t) &__bss_start__)); + #elif defined(__ICCARM__) + memset((uint32_t *) __section_begin(".bss"), 0U, (uint32_t) __section_size(".bss")); + #endif + + /* Copy initialized RAM data from ROM to RAM. */ + #if defined(__ARMCC_VERSION) + memcpy((uint8_t *) &Image$$DATA$$Base, (uint8_t *) &Load$$DATA$$Base, (uint32_t) &Image$$DATA$$Length); + #elif defined(__GNUC__) + memcpy(&__data_start__, &__etext, ((uint32_t) &__data_end__ - (uint32_t) &__data_start__)); + #elif defined(__ICCARM__) + memcpy((uint32_t *) __section_begin(".data"), (uint32_t *) __section_begin(".data_init"), + (uint32_t) __section_size(".data")); + + /* Copy functions to be executed from RAM. */ + #pragma section=".code_in_ram" + #pragma section=".code_in_ram_init" + memcpy((uint32_t *) __section_begin(".code_in_ram"), + (uint32_t *) __section_begin(".code_in_ram_init"), + (uint32_t) __section_size(".code_in_ram")); + + /* 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 + + /* Initialize TCM memory. */ + #if BSP_FEATURE_BSP_HAS_ITCM + bsp_init_itcm(); + #endif + #if BSP_FEATURE_BSP_HAS_DTCM + bsp_init_dtcm(); + #endif + + #if defined(RENESAS_CORTEX_M85) + + /* Invalidate I-Cache after initializing the .code_in_ram section. */ + SCB_InvalidateICache(); + #endif + + #if defined(__GNUC__) && defined(__llvm__) && !defined(__CLANG_TIDY__) && !(defined __ARMCC_VERSION) + + /* Initialize TLS memory. */ + _init_tls(&__tls_base); + _set_tls(&__tls_base); + #endif + + /* Initialize static constructors */ + #if defined(__ARMCC_VERSION) + #if defined(__ARMCC_USING_STANDARDLIB) + __rt_lib_init((uint32_t) &Image$$ARM_LIB_HEAP$$ZI$$Base, + (uint32_t) &Image$$ARM_LIB_HEAP$$ZI$$Base + (uint32_t) &Image$$ARM_LIB_HEAP$$ZI$$Length); + #else + int32_t count = Image$$INIT_ARRAY$$Limit - Image$$INIT_ARRAY$$Base; + for (int32_t i = 0; i < count; i++) + { + void (* p_init_func)(void) = + (void (*)(void))((uint32_t) &Image$$INIT_ARRAY$$Base + (uint32_t) Image$$INIT_ARRAY$$Base[i]); + p_init_func(); + } + #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 +#endif // BSP_CFG_C_RUNTIME_INIT + + /* 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 + + /* 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_EXTRACLK2 && !BSP_CFG_SKIP_INIT + bsp_internal_prv_enable_extra_power_domain(); +#endif + + /* Call Post C runtime initialization hook. */ + R_BSP_WarmStart(BSP_WARM_START_POST_C); + + /* 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_C_RUNTIME_INIT + #if (BSP_FEATURE_BSP_HAS_ITCM || BSP_FEATURE_BSP_HAS_DTCM) + +/*******************************************************************************************************************//** + * 64-bit memory copy for Armv8.1-M using low overhead loop instructions. + * + * @param[in] destination copy destination start address, word aligned + * @param[in] source copy source start address, word aligned + * @param[in] count number of doublewords to copy + **********************************************************************************************************************/ +static void memcpy_64 (uint64_t * destination, const uint64_t * source, size_t count) +{ + uint64_t temp; + __asm volatile ( + "wls lr, %[count], memcpy_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 + "memcpy_64_loop_start_%=:\n" + "ldrd %Q[temp], %R[temp], [%[source]], #+8\n" + "strd %Q[temp], %R[temp], [%[destination]], #+8\n" + "le lr, memcpy_64_loop_start_%=\n" + "memcpy_64_loop_end_%=:" + :[destination] "+&r" (destination), [source] "+&r" (source), [temp] "=r" (temp) + :[count] "r" (count) + : "lr", "memory" + ); + + /* Suppress IAR warning: "Error[Pe550]: variable "temp" was set but never used" */ + /* "temp" triggers this warning when it lacks an early-clobber modifier, which was removed to allow register reuse with "count". */ + (void) temp; +} + + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM + +/*******************************************************************************************************************//** + * 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_C_RUNTIME_INIT + #if BSP_FEATURE_BSP_HAS_ITCM + +/*******************************************************************************************************************//** + * Initialize ITCM RAM from ROM image. + **********************************************************************************************************************/ +static void bsp_init_itcm (void) +{ + uint64_t * itcm_destination; + const uint64_t * itcm_source; + size_t count; + + #if defined(__ARMCC_VERSION) + itcm_destination = (uint64_t *) &Image$$ITCM_DATA$$Base; + itcm_source = (uint64_t *) &Load$$ITCM_DATA$$Base; + count = ((uint32_t) &Load$$ITCM_PAD$$Limit - (uint32_t) &Load$$ITCM_DATA$$Base) / sizeof(uint64_t); + #elif defined(__GNUC__) + itcm_destination = (uint64_t *) &__itcm_data_start; + itcm_source = (uint64_t *) &__itcm_data_init_start; + count = ((uint32_t) &__itcm_data_init_end - (uint32_t) &__itcm_data_init_start) / sizeof(uint64_t); + #elif defined(__ICCARM__) + itcm_destination = (uint64_t *) &ITCM_DATA$$Base; + itcm_source = (uint64_t *) &ITCM_DATA_INIT$$Base; + count = ((uint32_t) &ITCM_DATA_INIT$$Limit - (uint32_t) &ITCM_DATA_INIT$$Base) / sizeof(uint64_t); + #endif + + memcpy_64(itcm_destination, itcm_source, count); +} + + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM + +/*******************************************************************************************************************//** + * Initialize DTCM RAM from ROM image and zero initialize DTCM RAM BSS section. + **********************************************************************************************************************/ +static void bsp_init_dtcm (void) +{ + uint64_t * dtcm_destination; + const uint64_t * dtcm_source; + size_t count; + uint64_t * dtcm_zero_destination; + size_t count_zero; + + #if defined(__ARMCC_VERSION) + dtcm_destination = (uint64_t *) &Image$$DTCM_DATA$$Base; + dtcm_source = (uint64_t *) &Load$$DTCM_DATA$$Base; + count = ((uint32_t) &Load$$DTCM_PAD$$Limit - (uint32_t) &Load$$DTCM_DATA$$Base) / sizeof(uint64_t); + dtcm_zero_destination = (uint64_t *) &Image$$DTCM_BSS$$Base; + count_zero = ((uint32_t) &Image$$DTCM_BSS_PAD$$ZI$$Limit - (uint32_t) &Image$$DTCM_BSS$$Base) / + sizeof(uint64_t); + #elif defined(__GNUC__) + dtcm_destination = (uint64_t *) &__dtcm_data_start; + dtcm_source = (uint64_t *) &__dtcm_data_init_start; + count = ((uint32_t) &__dtcm_data_init_end - (uint32_t) &__dtcm_data_init_start) / sizeof(uint64_t); + dtcm_zero_destination = (uint64_t *) &__dtcm_bss_start; + count_zero = ((uint32_t) &__dtcm_bss_end - (uint32_t) &__dtcm_bss_start) / sizeof(uint64_t); + #elif defined(__ICCARM__) + dtcm_destination = (uint64_t *) &DTCM_DATA$$Base; + dtcm_source = (uint64_t *) &DTCM_DATA_INIT$$Base; + count = ((uint32_t) &DTCM_DATA_INIT$$Limit - (uint32_t) &DTCM_DATA_INIT$$Base) / sizeof(uint64_t); + dtcm_zero_destination = (uint64_t *) &DTCM_BSS$$Base; + count_zero = ((uint32_t) &DTCM_BSS$$Limit - (uint32_t) &DTCM_BSS$$Base) / sizeof(uint64_t); + #endif + + memcpy_64(dtcm_destination, dtcm_source, count); + memset_64(dtcm_zero_destination, 0, count_zero); +} + + #endif +#endif + +#if BSP_CFG_DCACHE_ENABLED + +/*******************************************************************************************************************//** + * Initialize MPU for Armv8-M devices. + **********************************************************************************************************************/ +static void bsp_init_mpu (void) +{ + uint32_t nocache_start; + uint32_t nocache_end; + uint32_t nocache_sdram_start; + uint32_t nocache_sdram_end; + + #if defined(__ARMCC_VERSION) + nocache_start = (uint32_t) &Image$$NOCACHE$$ZI$$Base; + nocache_end = (uint32_t) &Image$$NOCACHE_PAD$$ZI$$Limit; + nocache_sdram_start = (uint32_t) &Image$$NOCACHE_SDRAM$$ZI$$Base; + nocache_sdram_end = (uint32_t) &Image$$NOCACHE_SDRAM_PAD$$ZI$$Limit; + #elif defined(__GNUC__) + nocache_start = (uint32_t) &__nocache_start; + nocache_end = (uint32_t) &__nocache_end; + nocache_sdram_start = (uint32_t) &__nocache_sdram_start; + nocache_sdram_end = (uint32_t) &__nocache_sdram_end; + #elif defined(__ICCARM__) + nocache_start = (uint32_t) &NOCACHE$$Base; + nocache_end = (uint32_t) &NOCACHE$$Limit; + nocache_sdram_start = (uint32_t) &NOCACHE_SDRAM$$Base; + nocache_sdram_end = (uint32_t) &NOCACHE_SDRAM$$Limit; + #endif + + /* 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) + }; + + /* Maximum of eight regions. */ + /* A region start address and end address must each be aligned to 32 bytes. A region must be a minimum of 32 bytes to be valid. */ + /* A region end address is inclusive. */ + const ARM_MPU_Region_t bsp_mpu_regions[] = + { + /* No-Cache Section */ + { + .RBAR = ARM_MPU_RBAR(nocache_start, ARM_MPU_SH_NON, 0U, 0U, 1U), + .RLAR = ARM_MPU_RLAR((nocache_end - ARMV8_MPU_REGION_MIN_SIZE), 0U) + }, + + /* SDRAM No-Cache Section */ + { + .RBAR = ARM_MPU_RBAR(nocache_sdram_start, ARM_MPU_SH_NON, 0U, 0U, 1U), + .RLAR = ARM_MPU_RLAR((nocache_sdram_end - ARMV8_MPU_REGION_MIN_SIZE), 0U) + } + }; + + /* 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. */ + uint8_t num_regions = (sizeof(bsp_mpu_regions) / sizeof(bsp_mpu_regions[0])); + for (uint8_t i = 0; i < num_regions; i++) + { + uint32_t rbar = bsp_mpu_regions[i].RBAR; + uint32_t rlar = bsp_mpu_regions[i].RLAR; + + /* 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/board_sdram.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/board_sdram.h new file mode 100644 index 00000000000..5f614bcbbb8 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/board_sdram.h @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BOARD_SDRAM_H +#define BOARD_SDRAM_H + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ + +/* DEPRECATED: This is a temporary alias to the new SDRAM support in bsp_sdram.c. It will be removed in FSP v6.0.0. + * It is only present if the new support has not been enabled. */ +#if 1 != BSP_CFG_SDRAM_ENABLED + #define bsp_sdram_init() R_BSP_SdramInit(true) +#endif + +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.c new file mode 100644 index 00000000000..75481405f0b --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.c @@ -0,0 +1,3387 @@ +/* +* Copyright (c) 2020 - 2024 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). */ +#if BSP_FEATURE_CGC_MODRV_MASK + #define BSP_PRV_MODRV ((CGC_MAINCLOCK_DRIVE << BSP_FEATURE_CGC_MODRV_SHIFT) & \ + BSP_FEATURE_CGC_MODRV_MASK) +#else + #define BSP_PRV_MODRV (0x1AU) +#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) +#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 +#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_UCK_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_UCK_DIV) + +/* If the MCU has USBCKDIVCR. */ + #elif BSP_FEATURE_BSP_HAS_USBCKDIVCR + #if BSP_CLOCKS_USB_CLOCK_DIV_1 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (0U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_2 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (1U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_3 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (5U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_4 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (2U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_5 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (6U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_6 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (3U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_8 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (4U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_10 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (7U) + #elif BSP_CLOCKS_USB_CLOCK_DIV_16 == BSP_CFG_UCK_DIV + #define BSP_PRV_UCK_DIV (8U) + #else + + #error "BSP_CFG_UCK_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 + +/* Set extraclk2 to the same value as extraclk3 if the MCU does not support extraclk2. */ + #if (BSP_FEATURE_CGC_HAS_EXTRACLK2 == 0) + #define BSP_CFG_EXTRACLK2_DIV (BSP_CFG_EXTRACLK3_DIV) + #endif + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK1_BITS ((BSP_CFG_EXTRACLK1_DIV & 0xFU) << 4U) + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK2_BITS ((BSP_CFG_EXTRACLK2_DIV & 0xFU) << 8U) + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK3_BITS ((BSP_CFG_EXTRACLK3_DIV & 0xFU) << 12U) +#else + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK1_BITS (0) + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK2_BITS (0) + #define BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK3_BITS (0) +#endif +#define BSP_PRV_STARTUP_SCKDIVCR2 (BSP_PRV_STARTUP_SCKDIVCR2_CPUCK_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK1_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK2_BITS | \ + BSP_PRV_STARTUP_SCKDIVCR2_EXTRACK3_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 + + #define BSP_PRV_PLL_MUL_CFG_MACRO_PLLMUL_MASK (0x3FFU) + #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) + #define BSP_PRV_PLL2_MUL_CFG_MACRO_PLLMUL_MASK (0x3FF) + #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_UCK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCK_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_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_U60CLK_SOURCE) && (BSP_CFG_U60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MAIN_OSC) + #define BSP_PRV_MAIN_OSC_USED (1) +#elif defined(BSP_CFG_OCTA_SOURCE) && (BSP_CFG_OCTA_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) +#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_UCK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCK_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_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_U60CLK_SOURCE) && (BSP_CFG_U60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + #define BSP_PRV_HOCO_USED (1) +#elif defined(BSP_CFG_OCTA_SOURCE) && (BSP_CFG_OCTA_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_UCK_SOURCE) && BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ && \ + (BSP_CFG_UCK_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_U60CLK_SOURCE) && (BSP_CFG_U60CLK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + #define BSP_PRV_MOCO_USED (1) +#elif defined(BSP_CFG_OCTA_SOURCE) && (BSP_CFG_OCTA_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) +#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_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_OCTA_SOURCE) && (BSP_CFG_OCTA_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_FSXP)) && \ + (defined(BSP_CFG_FSXP_SOURCE) && (BSP_CFG_FSXP_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 + #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 BSP_FEATURE_BSP_HAS_CLOCK_SUPPLY_TYPEB + #define BSP_PRV_CLOCK_SUPPLY_TYPE_B (0 == BSP_CFG_ROM_REG_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_U60CK_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)) + + #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 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); + + #if (BSP_CFG_CLKOUT_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && (BSP_CFG_CLKOUT_SOURCE != BSP_CFG_CLOCK_SOURCE) +void bsp_prv_clkout_clock_set(void); + + #endif + +#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 + +/*******************************************************************************************************************//** + * @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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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_ALT_BUILD + uint8_t cpuck = (FSP_STYPE3_REG8_READ(R_SYSTEM->SCKDIVCR2, secure) & BSP_INTERNAL_SCKDIVCR2_EXTRACK1_MASK) >> + BSP_INTERNAL_SCKDIVCR2_EXTRACK1_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 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 +} + +/*******************************************************************************************************************//** + * 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 extraclk1_div = (sckdivcr2 & BSP_INTERNAL_SCKDIVCR2_EXTRACK1_MASK) >> + BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS; + uint32_t extraclk2_div = (sckdivcr2 & BSP_INTERNAL_SCKDIVCR2_EXTRACK2_MASK) >> + BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS; + uint32_t extraclk3_div = (sckdivcr2 & BSP_INTERNAL_SCKDIVCR2_EXTRACK3_MASK) >> + BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS; + + uint32_t extraclk3_freq_mhz_post_change = g_clock_freq[clock] / BSP_PRV_SCKDIVCR_DIV_VALUE(extraclk3_div) / + BSP_PRV_HZ_PER_MHZ; + + /* Clear the PFB before doing any clock changes according to Frequency Change Procedure. */ + bsp_internal_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_internal_prv_set_wait_state_frequency(extraclk3_freq_mhz_post_change); + #endif + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE + 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); + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = (extraclk1_div < new_div) ? new_div : extraclk1_div; + uint32_t new_extraclk2_div = (extraclk2_div < new_div) ? new_div : extraclk2_div; + uint32_t new_extraclk3_div = (extraclk3_div < new_div) ? new_div : extraclk3_div; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_div | (new_extraclk1_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + (new_extraclk2_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + (new_extraclk3_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + R_SYSTEM->SCKDIVCR2 = (uint8_t) new_div; + #endif + } + else + { + R_SYSTEM->SCKDIVCR = sckdivcr; + if (cpuclk_div == BSP_CLOCKS_SYS_CLOCK_DIV_1) + { + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* Determine what the other dividers are using and stay aligned with that. */ + uint32_t new_cpuclk0_div = + (iclk_div & 0x8) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = + (extraclk1_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk1_div; + uint32_t new_extraclk2_div = + (extraclk2_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk2_div; + uint32_t new_extraclk3_div = + (extraclk3_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk3_div; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_cpuclk0_div | + (new_extraclk1_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + (new_extraclk2_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + (new_extraclk3_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + + /* 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; + #endif + } + else + { + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* If not /1, can just add 1 to it. */ + uint32_t new_cpuclk0_div = sckdivcr2 + 1; + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = + (extraclk1_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk1_div; + uint32_t new_extraclk2_div = + (extraclk2_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk2_div; + uint32_t new_extraclk3_div = + (extraclk3_div < new_cpuclk0_div) ? new_cpuclk0_div : extraclk3_div; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_cpuclk0_div | + (new_extraclk1_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + (new_extraclk2_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + (new_extraclk3_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + + /* If not /1, can just add 1 to it. */ + R_SYSTEM->SCKDIVCR2 = (uint8_t) sckdivcr2 + 1; + #endif + } + } + + /* 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. */ + prv_clock_dividers_set(sckdivcr, sckdivcr2); + + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE + 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 + { + /* 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 ((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 BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + if ((R_SYSTEM->SCKDIVCR2 & R_SYSTEM_SCKDIVCR2_CPUCK_Msk) == + ((current_sckdivcr >> R_SYSTEM_SCKDIVCR_ICK_Pos) & 0xF)) + #else + if (R_SYSTEM->SCKDIVCR2 == ((current_sckdivcr >> R_SYSTEM_SCKDIVCR_ICK_Pos) & 0xF)) + #endif + { + /* 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); + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = (extraclk1_div < new_div) ? new_div : extraclk1_div; + uint32_t new_extraclk2_div = (extraclk2_div < new_div) ? new_div : extraclk2_div; + uint32_t new_extraclk3_div = (extraclk3_div < new_div) ? new_div : extraclk3_div; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_div | (new_extraclk1_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + (new_extraclk2_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + (new_extraclk3_div << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + R_SYSTEM->SCKDIVCR2 = (uint8_t) new_div; + #endif + + SystemCoreClockUpdate(); + } + } + 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. */ + 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_internal_prv_set_wait_state_frequency(extraclk3_freq_mhz_post_change); + #endif + } + + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + bsp_internal_prv_set_pfb(extraclk3_freq_mhz_post_change); + #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(SystemCoreClock, 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) + { + /* 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; + 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) + { + /* 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; + 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(); +} + + #if (BSP_CFG_CLKOUT_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) && (BSP_CFG_CLKOUT_SOURCE != BSP_CFG_CLOCK_SOURCE) + +/*******************************************************************************************************************//** + * Applies CLKOUT clock source + **********************************************************************************************************************/ +void bsp_prv_clkout_clock_set (void) +{ + #if (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK) || \ + (BSP_CFG_CLOCK_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_LOCO) + + /* Due to register access restrictions (see 8.6.1 Register Access), change the ICLKSCR.CKSEL = 1 (ICLK = FMAIN) before configuration */ + 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_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_HOCO) + 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); + 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); + R_SYSTEM->HOCODIV = BSP_CFG_HOCO_DIV; + #elif (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_MOCO) + 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); + 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); + #else + 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 + + /* Change back ICLK to FSUB */ + R_SYSTEM->ICLKSCR_b.CKSEL = BSP_CLOCKS_SOURCE_CLOCK_FSUB; + FSP_HARDWARE_REGISTER_WAIT(R_SYSTEM->ICLKSCR_b.CKST, BSP_CLOCKS_SOURCE_CLOCK_FSUB); + #else + #if (BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_SOURCE_CLOCK_SUBCLOCK) + R_SYSTEM->FSUBSCR = BSP_CLOCKS_FSUB_SOURCE_CLOCK_SUBCLOCK; + #else + R_SYSTEM->FSUBSCR = BSP_CLOCKS_FSUB_SOURCE_CLOCK_LOCO; + #endif + #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 + + /* 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_internal_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_internal_prv_set_wait_state_frequency(BSP_STARTUP_EXTRACLK3_HZ / BSP_PRV_HZ_PER_MHZ); + #endif + #if BSP_CFG_CLOCK_SETTLING_DELAY_ENABLE && (BSP_STARTUP_CPUCLK_HZ >= 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 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); + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_2 | + #if BSP_CFG_EXTRACLK1_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + (BSP_CLOCKS_SYS_CLOCK_DIV_2 << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + #else + (BSP_CFG_EXTRACLK1_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + #endif + #if BSP_CFG_EXTRACLK2_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + (BSP_CLOCKS_SYS_CLOCK_DIV_2 << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + #else + (BSP_CFG_EXTRACLK2_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + #endif + #if BSP_CFG_EXTRACLK3_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + (BSP_CLOCKS_SYS_CLOCK_DIV_2 << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS); + #else + (BSP_CFG_EXTRACLK3_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS); + #endif + #else + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_2; + #endif + #else + R_SYSTEM->SCKDIVCR = (BSP_PRV_STARTUP_SCKDIVCR & ~(R_SYSTEM_SCKDIVCR_ICK_Msk)) | + (BSP_CLOCKS_SYS_CLOCK_DIV_4 << R_SYSTEM_SCKDIVCR_ICK_Pos); + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_4 | + #if BSP_CFG_EXTRACLK1_DIV < BSP_CLOCKS_SYS_CLOCK_DIV_4 + (BSP_CLOCKS_SYS_CLOCK_DIV_4 << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) + #else + (BSP_CFG_EXTRACLK1_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + #endif + #if BSP_CFG_EXTRACLK2_DIV < BSP_CLOCKS_SYS_CLOCK_DIV_4 + (BSP_CLOCKS_SYS_CLOCK_DIV_4 << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + #else + (BSP_CFG_EXTRACLK2_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + #endif + #if BSP_CFG_EXTRACLK3_DIV < BSP_CLOCKS_SYS_CLOCK_DIV_4 + (BSP_CLOCKS_SYS_CLOCK_DIV_4 << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS); + #else + (BSP_CFG_EXTRACLK3_DIV << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS); + #endif + #else + R_SYSTEM->SCKDIVCR2 = BSP_CLOCKS_SYS_CLOCK_DIV_4; + #endif + #endif + #else + R_SYSTEM->SCKDIVCR = BSP_PRV_STARTUP_SCKDIVCR; + + #if BSP_CFG_CPUCLK_DIV == BSP_CLOCKS_SYS_CLOCK_DIV_1 + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* Determine what the other dividers are using and stay aligned with that. */ + uint32_t new_cpuclk0_div = (BSP_CFG_ICLK_DIV & 0x8) ? BSP_CLOCKS_SYS_CLOCK_DIV_3 : BSP_CLOCKS_SYS_CLOCK_DIV_2; + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = (BSP_CFG_EXTRACLK1_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK1_DIV; + uint32_t new_extraclk2_div = (BSP_CFG_EXTRACLK2_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK2_DIV; + uint32_t new_extraclk3_div = (BSP_CFG_EXTRACLK3_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK3_DIV; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_cpuclk0_div | ((new_extraclk1_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + ((new_extraclk2_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + ((new_extraclk3_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + + /* 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; + #endif + #else + #if BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + + /* If not /1, can just add 1 to it. */ + uint32_t new_cpuclk0_div = BSP_PRV_STARTUP_SCKDIVCR2 + 1; + + /* Bump down dividers to new_div for other sckdivcr2 dividers if needed. */ + uint32_t new_extraclk1_div = (BSP_CFG_EXTRACLK1_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK1_DIV; + uint32_t new_extraclk2_div = (BSP_CFG_EXTRACLK2_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK2_DIV; + uint32_t new_extraclk3_div = (BSP_CFG_EXTRACLK3_DIV < new_cpuclk0_div) ? new_cpuclk0_div : BSP_CFG_EXTRACLK3_DIV; + + R_SYSTEM->SCKDIVCR2 = + (uint16_t) (new_cpuclk0_div | ((new_extraclk1_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK1_POS) | + ((new_extraclk2_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK2_POS) | + ((new_extraclk3_div) << BSP_INTERNAL_SCKDIVCR2_EXTRACK3_POS)); + #else + + /* If not /1, can just add 1 to it. */ + R_SYSTEM->SCKDIVCR2 = BSP_PRV_STARTUP_SCKDIVCR2 + 1; + #endif + #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; + + /* 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_internal_prv_set_wait_state_frequency(BSP_STARTUP_EXTRACLK3_HZ / BSP_PRV_HZ_PER_MHZ); + #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_internal_prv_set_pfb(BSP_STARTUP_EXTRACLK3_HZ / BSP_PRV_HZ_PER_MHZ); + #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_ALT_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 + + /* 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 + +#if BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER + + /* Disable the flash prefetch buffer. */ + R_FACI_LP->PFBER = 0; +#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 configuraiton. */ + 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 + + /* + * 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 + */ + 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); + #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_NEPTUNE + + /* 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 + 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 + + /* Configure BCLK if it exists on the MCU. */ +#ifdef BSP_CFG_BCLK_OUTPUT + #if BSP_CFG_BCLK_OUTPUT > 0U + R_SYSTEM->BCKCR = BSP_CFG_BCLK_OUTPUT - 1U; + 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 + #if BSP_CFG_CLKOUT_SOURCE == BSP_CLOCKS_CLOCK_DISABLED + #if BSP_CFG_STARTUP_CLOCK_REG_NOT_RESET + R_PCLBUZ->CKS0 = 0U; + #endif + #else + #if (BSP_CFG_CLKOUT_SOURCE != BSP_CFG_CLOCK_SOURCE) + bsp_prv_clkout_clock_set(); + #endif + + uint8_t cks0 = (BSP_CFG_CLKOUT_DIV << R_PCLBUZ_CKS0_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_CKS0_CSEL_Pos); + #else + cks0 |= (BSP_CLOCKS_CLKOUT_SOURCE_CLOCK_FMAIN << R_PCLBUZ_CKS0_CSEL_Pos); + #endif + R_PCLBUZ->CKS0 = cks0; + R_PCLBUZ->CKS0 |= (1U << R_PCLBUZ_CKS0_PCLOE_Pos); + #endif +#endif + +#if BSP_PRV_STARTUP_OPERATING_MODE != BSP_PRV_OPERATING_MODE_LOW_SPEED + #if BSP_CFG_UCK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + + /* If the USB clock has a divider setting in SCKDIVCR2. */ + #if BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV && !BSP_FEATURE_BSP_HAS_USBCKDIVCR + R_SYSTEM->SCKDIVCR2 = BSP_PRV_UCK_DIV << BSP_PRV_SCKDIVCR2_UCK_BIT; + #endif /* BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV && !BSP_FEATURE_BSP_HAS_USBCKDIVCR */ + + /* 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); + + /* Write the settings. */ + R_SYSTEM->USBCKDIVCR = BSP_PRV_UCK_DIV; + + /* Select the USB Clock without enabling it. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCK_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_UCK_SOURCE + + /* Write to USBCKCR to select the PLL. */ + R_SYSTEM->USBCKCR_ALT = 0; + #elif BSP_CLOCKS_SOURCE_CLOCK_HOCO == BSP_CFG_UCK_SOURCE + + /* Write to USBCKCR to select the HOCO. */ + R_SYSTEM->USBCKCR_ALT = 1; + #endif + #else + + /* Select the USB Clock. */ + R_SYSTEM->USBCKCR = BSP_CFG_UCK_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_OCTA_SOURCE != BSP_CLOCKS_CLOCK_DISABLED + bsp_octaclk_settings_t octaclk_settings = + { + .source_clock = (bsp_clocks_source_t) BSP_CFG_OCTA_SOURCE, + .divider = (bsp_clocks_octaclk_div_t) BSP_CFG_OCTA_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_U60CK_SOURCE != BSP_CLOCKS_CLOCK_DISABLED) + bsp_peripheral_clock_set(&R_SYSTEM->USB60CKCR, &R_SYSTEM->USB60CKDIVCR, BSP_CFG_U60CK_DIV, BSP_CFG_U60CK_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 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_FEATURE_BSP_FLASH_PREFETCH_BUFFER + R_FACI_LP->PFBER = 1; +#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) + { + /* 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.h new file mode 100644 index 00000000000..1a5d36a5d39 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_clocks.h @@ -0,0 +1,1716 @@ +/* +* Copyright (c) 2020 - 2024 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 + #define BSP_CLOCKS_SOURCE_CLOCK_FSXP (11) // Subsystem Clock (FSXP) source. + +/* 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_EXTRACLK3_DIV_VALUE BSP_PRV_SCKDIVCR_DIV_VALUE(BSP_CFG_EXTRACLK3_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_EXTRACLK3_HZ (BSP_STARTUP_SOURCE_CLOCK_HZ / BSP_PRV_EXTRACLK3_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 + +/* 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 + +/* 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) << 2U) | ((Y) == 50U ? 3U : ((Y) / 33U))) + +#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_ALT_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 + +/** 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.c new file mode 100644 index 00000000000..eb3b31917a1 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.c @@ -0,0 +1,311 @@ +/* +* Copyright (c) 2020 - 2024 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_ERROR_LOG) || (1 == BSP_CFG_ASSERT)) + +/** Prototype of function called before errors are returned in FSP code if BSP_CFG_ERROR_LOG 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_ERROR_LOG) || (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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.h new file mode 100644 index 00000000000..10c5487888c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_common.h @@ -0,0 +1,620 @@ +/* +* Copyright (c) 2020 - 2024 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 TFU Includes. */ +#include "../../src/bsp/mcu/all/bsp_tfu.h" + +#include "../../src/bsp/mcu/all/bsp_sdram.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_ERROR_LOG) + + #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 + +#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_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; + +/*********************************************************************************************************************** + * 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) +{ +#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 */ + uint32_t cpuclk_div = FSP_STYPE3_REG8_READ(R_SYSTEM->SCKDIVCR2, BSP_CFG_CLOCKS_SECURE) & FSP_PRV_SCKDIVCR_DIV_MASK; + + /* 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 +} + +/*******************************************************************************************************************//** + * 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 + + /* Writeback and flush cache when disabling + * MREF_INTERNAL_12 */ + if (R_CACHE->CCAWTA_b.WT) + { + R_CACHE->CCACTL = R_CACHE_CCACTL_FC_Msk; + } + else + { + R_CACHE->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; + #else + + /* Check that no flush or writeback are ongoing before enabling + * MREF_INTERNAL_13 */ + FSP_HARDWARE_REGISTER_WAIT(R_CACHE->CCAFCT, 0U); + #endif + + /* Enable the C-Cache. */ + R_CACHE->CCACTL = 1U; +#endif +} + +/*********************************************************************************************************************** + * Exported global functions (to be accessed by other files) + **********************************************************************************************************************/ +#if ((1 == BSP_CFG_ERROR_LOG) || (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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h new file mode 100644 index 00000000000..28c0fb31e94 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_compiler_support.h @@ -0,0 +1,109 @@ +/* +* Copyright (c) 2020 - 2024 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" + #ifndef BSP_SECTION_HEAP + #define BSP_SECTION_HEAP BSP_UNINIT_SECTION_PREFIX ".heap" + #endif + #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 + #ifndef BSP_SECTION_HEAP + #define BSP_SECTION_HEAP ".heap" + #endif + #define BSP_DONT_REMOVE + #define BSP_ATTRIBUTE_STACKLESS __attribute__((naked)) + #define BSP_FORCE_INLINE __attribute__((always_inline)) + #elif defined(__ICCARM__) /* IAR compiler */ + #define BSP_UNINIT_SECTION_PREFIX + #ifndef BSP_SECTION_HEAP + #define BSP_SECTION_HEAP "HEAP" + #endif + #define BSP_DONT_REMOVE __root + #define BSP_ATTRIBUTE_STACKLESS __stackless + #define BSP_FORCE_INLINE _Pragma("inline=forced") + #endif + + #ifndef BSP_SECTION_STACK + #define BSP_SECTION_STACK BSP_UNINIT_SECTION_PREFIX ".stack" + #endif + #ifndef BSP_SECTION_FLASH_GAP + #define BSP_SECTION_FLASH_GAP + #endif + #define BSP_SECTION_NOINIT BSP_UNINIT_SECTION_PREFIX ".noinit" + #define BSP_SECTION_FIXED_VECTORS ".fixed_vectors" + #define BSP_SECTION_APPLICATION_VECTORS ".application_vectors" + #define BSP_SECTION_ROM_REGISTERS ".rom_registers" + #define BSP_SECTION_ID_CODE ".id_code" + +/* Compiler neutral macros. */ + #define BSP_PLACE_IN_SECTION(x) __attribute__((section(x))) __attribute__((__used__)) + + #define BSP_ALIGN_VARIABLE(x) __attribute__((aligned(x))) + + #define BSP_PACKED __attribute__((aligned(1))) // DEPRECATED + + #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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.c new file mode 100644 index 00000000000..a46545c56a5 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.c @@ -0,0 +1,203 @@ +/* +* Copyright (c) 2020 - 2024 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. + **********************************************************************************************************************/ + +BSP_SECTION_FLASH_GAP 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) + 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. + */ + uint32_t cycles_per_us = iclk_hz / (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_SECTION_FLASH_GAP 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.h new file mode 100644 index 00000000000..1a7489448b8 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_delay.h @@ -0,0 +1,73 @@ +/* +* Copyright (c) 2020 - 2024 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 + #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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h new file mode 100644 index 00000000000..c2388f1b28e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_exceptions.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c new file mode 100644 index 00000000000..54e727c97aa --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.c @@ -0,0 +1,122 @@ +/* +* Copyright (c) 2020 - 2024 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 + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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 + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h new file mode 100644 index 00000000000..0e2e4addc3f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_group_irq.h @@ -0,0 +1,69 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.c new file mode 100644 index 00000000000..a3b4721adcc --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.c @@ -0,0 +1,41 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.h new file mode 100644 index 00000000000..946bd84cf6b --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_guard.h @@ -0,0 +1,32 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.c new file mode 100644 index 00000000000..92c9bdee23a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.c @@ -0,0 +1,27 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.h new file mode 100644 index 00000000000..ff1d71f5a28 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_io.h @@ -0,0 +1,464 @@ +/* +* Copyright (c) 2020 - 2024 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_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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.c new file mode 100644 index 00000000000..e103d01baa4 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.c @@ -0,0 +1,274 @@ +/* +* Copyright (c) 2020 - 2024 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_ALT_BUILD + #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_MAX_ENTRIES]; + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ +const bsp_interrupt_event_t g_interrupt_event_link_select[BSP_ICU_VECTOR_MAX_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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + * + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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_MAX_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 + for (uint32_t i = 0U; i < (BSP_ICU_VECTOR_MAX_ENTRIES - BSP_FEATURE_ICU_FIXED_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_ALT_BUILD + + /* 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.h new file mode 100644 index 00000000000..fa3abcc7156 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_irq.h @@ -0,0 +1,238 @@ +/* +* Copyright (c) 2020 - 2024 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_MAX_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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.c new file mode 100644 index 00000000000..baf513d8081 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.c @@ -0,0 +1,2050 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.h new file mode 100644 index 00000000000..6b537941817 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_macl.h @@ -0,0 +1,158 @@ +#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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h new file mode 100644 index 00000000000..3c56a27e73d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_mcu_api.h @@ -0,0 +1,56 @@ +/* +* Copyright (c) 2020 - 2024 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 + +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; + +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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h new file mode 100644 index 00000000000..947e78721bd --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_module_stop.h @@ -0,0 +1,371 @@ +/* +* Copyright (c) 2020 - 2024 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_NEPTUNE + #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_EXTRA(channel) R_BSP_MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_EXTRA(channel) (1U << (16U)); + +#define BSP_MSTP_REG_FSP_IP_DMAC(channel) R_BSP_MSTPCRA +#define BSP_MSTP_BIT_FSP_IP_DMAC(channel) (1U << (22U + channel)); +#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)); +#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_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_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 +#define BSP_MSTP_BIT_FSP_IP_ADC(channel) (1U << (16U - channel)); +#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 +#if (BSP_FEATURE_DAC_MAX_CHANNELS > 2U) + #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 +#else + #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 + #define BSP_MSTP_REG_FSP_IP_DAC(channel) R_MSTP->MSTPCRD + #define BSP_MSTP_BIT_FSP_IP_DAC(channel) (1U << (20U)); + #define BSP_MSTP_REG_TYPE_FSP_IP_DAC(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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c new file mode 100644 index 00000000000..669cd90a7d7 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.c @@ -0,0 +1,119 @@ +/* +* Copyright (c) 2020 - 2024 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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. + **********************************************************************************************************************/ +BSP_SECTION_FLASH_GAP 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h new file mode 100644 index 00000000000..b095de3e90e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_register_protection.h @@ -0,0 +1,60 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c new file mode 100644 index 00000000000..a11cfc85e63 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_rom_registers.c @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_api.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ +#define RA_NOT_DEFINED (0) + +/** OR in the HOCO frequency setting from bsp_clock_cfg.h with the OFS1 setting from bsp_cfg.h. */ +#define BSP_ROM_REG_OFS1_SETTING \ + (((uint32_t) BSP_CFG_ROM_REG_OFS1 & BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK) | \ + ((uint32_t) BSP_CFG_HOCO_FREQUENCY << BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET)) + +/** Build up SECMPUAC register based on MPU settings. */ +#define BSP_ROM_REG_MPU_CONTROL_SETTING \ + ((0xFFFFFCF0U) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC0_ENABLE << 8) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC1_ENABLE << 9) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION0_ENABLE) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION1_ENABLE << 1) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION2_ENABLE << 2) | \ + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION3_ENABLE << 3)) + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#if !BSP_CFG_BOOT_IMAGE + + #if BSP_FEATURE_FLASH_SUPPORTS_ID_CODE == 1 + +/** ID code definitions defined here. */ +BSP_DONT_REMOVE static const uint32_t g_bsp_id_codes[] BSP_PLACE_IN_SECTION (BSP_SECTION_ID_CODE) = +{ + BSP_CFG_ID_CODE_LONG_1, + #if BSP_FEATURE_BSP_OSIS_PADDING + 0xFFFFFFFFU, + #endif + BSP_CFG_ID_CODE_LONG_2, + #if BSP_FEATURE_BSP_OSIS_PADDING + 0xFFFFFFFFU, + #endif + BSP_CFG_ID_CODE_LONG_3, + #if BSP_FEATURE_BSP_OSIS_PADDING + 0xFFFFFFFFU, + #endif + BSP_CFG_ID_CODE_LONG_4 +}; + #endif + + #if 33U != __CORTEX_M && 85U != __CORTEX_M // NOLINT(readability-magic-numbers) + +/** ROM registers defined here. Some have masks to make sure reserved bits are set appropriately. */ +BSP_DONT_REMOVE static const uint32_t g_bsp_rom_registers[] BSP_PLACE_IN_SECTION (BSP_SECTION_ROM_REGISTERS) = +{ + (uint32_t) BSP_CFG_ROM_REG_OFS0, + (uint32_t) BSP_ROM_REG_OFS1_SETTING, + #if __MPU_PRESENT + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC0_START & 0xFFFFFFFCU), + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC0_END | 0x00000003U), + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC1_START & 0xFFFFFFFCU), + ((uint32_t) BSP_CFG_ROM_REG_MPU_PC1_END | 0x00000003U), + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION0_START & BSP_FEATURE_BSP_MPU_REGION0_MASK & 0xFFFFFFFCU), + (((uint32_t) BSP_CFG_ROM_REG_MPU_REGION0_END & BSP_FEATURE_BSP_MPU_REGION0_MASK) | 0x00000003U), + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION1_START & 0xFFFFFFFCU), + ((uint32_t) BSP_CFG_ROM_REG_MPU_REGION1_END | 0x00000003U), + (((uint32_t) BSP_CFG_ROM_REG_MPU_REGION2_START & 0x407FFFFCU) | 0x40000000U), + (((uint32_t) BSP_CFG_ROM_REG_MPU_REGION2_END & 0x407FFFFCU) | 0x40000003U), + (((uint32_t) BSP_CFG_ROM_REG_MPU_REGION3_START & 0x407FFFFCU) | 0x40000000U), + (((uint32_t) BSP_CFG_ROM_REG_MPU_REGION3_END & 0x407FFFFCU) | 0x40000003U), + (uint32_t) BSP_ROM_REG_MPU_CONTROL_SETTING + #endif +}; + + #elif BSP_FEATURE_FLASH_SUPPORTS_ID_CODE == 1 + + #if !BSP_TZ_NONSECURE_BUILD +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs0") g_bsp_rom_ofs0 = + BSP_CFG_ROM_REG_OFS0; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_sas") g_bsp_rom_sas = + 0xFFFFFFFF; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1_sec") g_bsp_rom_ofs1 = + BSP_ROM_REG_OFS1_SETTING; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec0") g_bsp_rom_bps0 = + BSP_CFG_ROM_REG_BPS0; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec0") g_bsp_rom_pbps0 = + BSP_CFG_ROM_REG_PBPS0; + + #endif + #elif BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS + +/* OFS NOT YET SUPPORTED FOR THIS PART */ + #else /* CM33 & CM85 parts */ + + #if !BSP_TZ_NONSECURE_BUILD + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs0") g_bsp_rom_ofs0 = + BSP_CFG_ROM_REG_OFS0; + + #if BSP_FEATURE_BSP_HAS_OFS2 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs2") g_bsp_rom_ofs2 = + BSP_CFG_ROM_REG_OFS2; + + #endif + #if BSP_FEATURE_FLASH_HP_SUPPORTS_DUAL_BANK +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_dualsel") g_bsp_rom_dualsel = + BSP_CFG_ROM_REG_DUALSEL; + + #endif +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_sas") g_bsp_rom_sas = + 0xFFFFFFFF; + + #else + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1") g_bsp_rom_ofs1 = + BSP_ROM_REG_OFS1_SETTING; + + #if BSP_FEATURE_BSP_HAS_OFS3 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs3") g_bsp_rom_ofs3 = + BSP_CFG_ROM_REG_OFS3; + + #endif +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel") g_bsp_rom_banksel = + 0xFFFFFFFF; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps0") g_bsp_rom_bps0 = + BSP_CFG_ROM_REG_BPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps1") g_bsp_rom_bps1 = + BSP_CFG_ROM_REG_BPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps2") g_bsp_rom_bps2 = + BSP_CFG_ROM_REG_BPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps3") g_bsp_rom_bps3 = + BSP_CFG_ROM_REG_BPS3; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps0") g_bsp_rom_pbps0 = + BSP_CFG_ROM_REG_PBPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps1") g_bsp_rom_pbps1 = + BSP_CFG_ROM_REG_PBPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps2") g_bsp_rom_pbps2 = + BSP_CFG_ROM_REG_PBPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps3") g_bsp_rom_pbps3 = + BSP_CFG_ROM_REG_PBPS3; + + #endif + + #if !BSP_TZ_NONSECURE_BUILD + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1_sec") g_bsp_rom_ofs1_sec = + BSP_ROM_REG_OFS1_SETTING; + + #if BSP_FEATURE_BSP_HAS_OFS3 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs3_sec") g_bsp_rom_ofs3_sec = + BSP_CFG_ROM_REG_OFS3; + + #endif +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel_sec") g_bsp_rom_banksel_sec = + 0xFFFFFFFF; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec0") g_bsp_rom_bps_sec0 = + BSP_CFG_ROM_REG_BPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec1") g_bsp_rom_bps_sec1 = + BSP_CFG_ROM_REG_BPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec2") g_bsp_rom_bps_sec2 = + BSP_CFG_ROM_REG_BPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sec3") g_bsp_rom_bps_sec3 = + BSP_CFG_ROM_REG_BPS3; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec0") g_bsp_rom_pbps_sec0 = + BSP_CFG_ROM_REG_PBPS0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec1") g_bsp_rom_pbps_sec1 = + BSP_CFG_ROM_REG_PBPS1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec2") g_bsp_rom_pbps_sec2 = + BSP_CFG_ROM_REG_PBPS2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_pbps_sec3") g_bsp_rom_pbps_sec3 = + BSP_CFG_ROM_REG_PBPS3; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs1_sel") g_bsp_rom_ofs1_sel = + BSP_CFG_ROM_REG_OFS1_SEL; + + #if BSP_FEATURE_BSP_HAS_OFS3 +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_ofs3_sel") g_bsp_rom_ofs3_sel = + BSP_CFG_ROM_REG_OFS3_SEL; + + #endif + #if BSP_FEATURE_FLASH_HP_SUPPORTS_DUAL_BANK +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_banksel_sel") g_bsp_rom_banksel_sel = + BSP_CFG_ROM_REG_BANKSEL_SEL; + + #endif +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel0") g_bsp_rom_bps_sel0 = + BSP_CFG_ROM_REG_BPS_SEL0; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel1") g_bsp_rom_bps_sel1 = + BSP_CFG_ROM_REG_BPS_SEL1; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel2") g_bsp_rom_bps_sel2 = + BSP_CFG_ROM_REG_BPS_SEL2; +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_bps_sel3") g_bsp_rom_bps_sel3 = + BSP_CFG_ROM_REG_BPS_SEL3; + + #endif + + #if 85U == __CORTEX_M && !BSP_TZ_NONSECURE_BUILD +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_fsblctrl0") g_bsp_rom_fsblctrl0 = + BSP_CFG_ROM_REG_FSBLCTRL0; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_fsblctrl1") g_bsp_rom_fsblctrl1 = + BSP_CFG_ROM_REG_FSBLCTRL1; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_fsblctrl2") g_bsp_rom_fsblctrl2 = + BSP_CFG_ROM_REG_FSBLCTRL2; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_sacc0") g_bsp_rom_sacc0 = + BSP_CFG_ROM_REG_SACC0; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_sacc1") g_bsp_rom_sacc1 = + BSP_CFG_ROM_REG_SACC1; + +BSP_DONT_REMOVE static const uint32_t BSP_PLACE_IN_SECTION(".option_setting_data_flash_samr") g_bsp_rom_samr = + BSP_CFG_ROM_REG_SAMR; + + #endif + + #endif + +#endif + +/** @} (end addtogroup BSP_MCU) */ diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c new file mode 100644 index 00000000000..0a54c66d20f --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sbrk.c @@ -0,0 +1,92 @@ +/* +* Copyright (c) 2020 - 2024 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) + **********************************************************************************************************************/ + +caddr_t _sbrk(int incr); + +/*********************************************************************************************************************** + * 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. + **********************************************************************************************************************/ + +caddr_t _sbrk (int incr) +{ + extern char _Heap_Begin __asm("__HeapBase"); ///< Defined by the linker. + + extern char _Heap_Limit __asm("__HeapLimit"); ///< Defined by the linker. + + uint32_t bytes = (uint32_t) incr; + static char * current_heap_end = 0; + char * current_block_address; + + if (current_heap_end == 0) + { + current_heap_end = &_Heap_Begin; + } + + current_block_address = current_heap_end; + + /* 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_heap_end + bytes > &_Heap_Limit) + { + /** Heap has overflowed */ + errno = ENOMEM; + + return (caddr_t) -1; + } + + current_heap_end += bytes; + + return (caddr_t) current_block_address; +} + +#endif + +/******************************************************************************************************************//** + * @} (end addtogroup BSP_MCU) + *********************************************************************************************************************/ diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.c new file mode 100644 index 00000000000..3e53af9ee33 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.c @@ -0,0 +1,199 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @addtogroup BSP_SDRAM + * @brief SDRAM initialization + * + * This file contains code that the initializes 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 changable 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.h new file mode 100644 index 00000000000..6d84b6ca0b8 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_sdram.h @@ -0,0 +1,37 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.c new file mode 100644 index 00000000000..795eec179e0 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.c @@ -0,0 +1,634 @@ +/* +* Copyright (c) 2020 - 2024 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 from nonsecure write access. */ + #if (1U == BSP_CFG_CPU_CORE) + #define DMACX_REGISTER_SHIFT (16) + #else + #define DMACX_REGISTER_SHIFT (0) + #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 + **********************************************************************************************************************/ +extern const fsp_vector_t g_vector_table[BSP_ICU_VECTOR_MAX_ENTRIES]; + + #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 defined(__IAR_SYSTEMS_ICC__) && BSP_TZ_SECURE_BUILD + +extern const uint32_t FLASH_NS_IMAGE_START; + #pragma section=".tz_flash_ns_start" +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = (uint32_t *) __section_begin(".tz_flash_ns_start"); + #pragma section="Veneer$$CMSE" +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = (uint32_t *) __section_begin( + "Veneer$$CMSE"); + #pragma section=".tz_ram_ns_start" +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ram = (uint32_t *) __section_begin(".tz_ram_ns_start"); + #pragma section=".tz_ram_nsc_start" +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = (uint32_t *) __section_begin( + ".tz_ram_nsc_start"); + #pragma section=".tz_data_flash_ns_start" +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_data_flash = (uint32_t *) __section_begin( + ".tz_data_flash_ns_start"); + + #if BSP_FEATURE_BSP_HAS_ITCM +extern const uint32_t __tz_ITCM_N; +extern const uint32_t __tz_ITCM_S; + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM +extern const uint32_t __tz_DTCM_N; +extern const uint32_t __tz_DTCM_S; + #endif + + #if BSP_FEATURE_BSP_HAS_ITCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_itcm = (uint32_t *) &__tz_ITCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_itcm = (uint32_t *) &__tz_ITCM_S; + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_dtcm = (uint32_t *) &__tz_DTCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_dtcm = (uint32_t *) &__tz_DTCM_S; + #endif + + #elif defined(__ARMCC_VERSION) + #if BSP_FEATURE_BSP_HAS_ITCM +extern const uint32_t Image$$__tz_ITCM_N$$Base; +extern const uint32_t Image$$__tz_ITCM_S$$Base; + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +extern const uint32_t Image$$__tz_DTCM_N$$Base; +extern const uint32_t Image$$__tz_DTCM_S$$Base; + #endif + #if BSP_FEATURE_BSP_HAS_STBRAMSABAR +extern const uint32_t Image$$__tz_STANDBY_SRAM_N$$Base; +extern const uint32_t Image$$__tz_STANDBY_SRAM_S$$Base; + #endif +extern const uint32_t Image$$__tz_FLASH_N$$Base; + #if BSP_FEATURE_TZ_VERSION == 2 +extern const uint32_t Image$$__FLASH_NSC_START$$Base; + #else +extern const uint32_t Image$$__tz_FLASH_C$$Base; + #endif +extern const uint32_t Image$$__tz_FLASH_S$$Base; +extern const uint32_t Image$$__tz_RAM_N$$Base; + #if BSP_FEATURE_TZ_VERSION == 2 +extern const uint32_t Image$$__RAM_NSC_START$$Base; + #else +extern const uint32_t Image$$__tz_RAM_C$$Base; + #endif +extern const uint32_t Image$$__tz_RAM_S$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_N$$Base; +extern const uint32_t Image$$__tz_DATA_FLASH_S$$Base; +extern const uint32_t Image$$__tz_QSPI_FLASH_N$$Base; +extern const uint32_t Image$$__tz_QSPI_FLASH_S$$Base; +extern const uint32_t Image$$__tz_SDRAM_N$$Base; +extern const uint32_t Image$$__tz_SDRAM_S$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_0_N$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_0_S$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_1_N$$Base; +extern const uint32_t Image$$__tz_OSPI_DEVICE_1_S$$Base; +extern const uint32_t Image$$__tz_OPTION_SETTING_N$$Base; +extern const uint32_t Image$$__tz_OPTION_SETTING_S$$Base; +extern const uint32_t Image$$__tz_OPTION_SETTING_S_N$$Base; +extern const uint32_t Image$$__tz_OPTION_SETTING_S_S$$Base; +extern const uint32_t Image$$__tz_ID_CODE_N$$Base; +extern const uint32_t Image$$__tz_ID_CODE_S$$Base; + + #if BSP_FEATURE_BSP_HAS_ITCM + #define __tz_ITCM_N Image$$__tz_ITCM_N$$Base + #define __tz_ITCM_S Image$$__tz_ITCM_S$$Base + #endif + #if BSP_FEATURE_BSP_HAS_DTCM + #define __tz_DTCM_N Image$$__tz_DTCM_N$$Base + #define __tz_DTCM_S Image$$__tz_DTCM_S$$Base + #endif + #if BSP_FEATURE_BSP_HAS_STBRAMSABAR + #define __tz_STANDBY_SRAM_N Image$$__tz_STANDBY_SRAM_N$$Base + #define __tz_STANDBY_SRAM_S Image$$__tz_STANDBY_SRAM_S$$Base + #endif + #define __tz_FLASH_N Image$$__tz_FLASH_N$$Base + #if BSP_FEATURE_TZ_VERSION == 2 + #define __tz_FLASH_C Image$$__FLASH_NSC_START$$Base; + #else + #define __tz_FLASH_C Image$$__tz_FLASH_C$$Base + #endif + #define __tz_FLASH_S Image$$__tz_FLASH_S$$Base + #define __tz_RAM_N Image$$__tz_RAM_N$$Base + #if BSP_FEATURE_TZ_VERSION == 2 + #define __tz_RAM_C Image$$__RAM_NSC_START$$Base + #else + #define __tz_RAM_C Image$$__tz_RAM_C$$Base + #endif + #define __tz_RAM_S Image$$__tz_RAM_S$$Base + #define __tz_DATA_FLASH_N Image$$__tz_DATA_FLASH_N$$Base + #define __tz_DATA_FLASH_S Image$$__tz_DATA_FLASH_S$$Base + #define __tz_QSPI_FLASH_N Image$$__tz_QSPI_FLASH_N$$Base + #define __tz_QSPI_FLASH_S Image$$__tz_QSPI_FLASH_S$$Base + #define __tz_SDRAM_N Image$$__tz_SDRAM_N$$Base + #define __tz_SDRAM_S Image$$__tz_SDRAM_S$$Base + #define __tz_OSPI_DEVICE_0_N Image$$__tz_OSPI_DEVICE_0_N$$Base + #define __tz_OSPI_DEVICE_0_S Image$$__tz_OSPI_DEVICE_0_S$$Base + #define __tz_OSPI_DEVICE_1_N Image$$__tz_OSPI_DEVICE_1_N$$Base + #define __tz_OSPI_DEVICE_1_S Image$$__tz_OSPI_DEVICE_1_S$$Base + #define __tz_OPTION_SETTING_N Image$$__tz_OPTION_SETTING_N$$Base + #define __tz_OPTION_SETTING_S Image$$__tz_OPTION_SETTING_S$$Base + #define __tz_OPTION_SETTING_S_N Image$$__tz_OPTION_SETTING_S_N$$Base + #define __tz_OPTION_SETTING_S_S Image$$__tz_OPTION_SETTING_S_S$$Base + #define __tz_ID_CODE_N Image$$__tz_ID_CODE_N$$Base + #define __tz_ID_CODE_S Image$$__tz_ID_CODE_S$$Base + +/* Assign region addresses to pointers so that AC6 includes symbols that can be used to determine the + * start addresses of Secure, Non-secure and Non-secure Callable regions. */ + #if BSP_FEATURE_BSP_HAS_ITCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_itcm = &__tz_ITCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_itcm = &__tz_ITCM_S; + #endif + #if BSP_FEATURE_BSP_HAS_DTCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_dtcm = &__tz_DTCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_dtcm = &__tz_DTCM_S; + #endif + #if BSP_FEATURE_BSP_HAS_STBRAMSABAR +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_standby_sram = &__tz_STANDBY_SRAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_standby_sram = &__tz_STANDBY_SRAM_S; + #endif +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &__tz_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = &__tz_FLASH_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_flash = &__tz_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ram = &__tz_RAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = &__tz_RAM_C; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ram = &__tz_RAM_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_data_flash = &__tz_DATA_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_data_flash = &__tz_DATA_FLASH_S; + + #if BSP_TZ_SECURE_BUILD + +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_qspi_flash = &__tz_QSPI_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_qspi_flash = &__tz_QSPI_FLASH_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_sdram = &__tz_SDRAM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_sdram = &__tz_SDRAM_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ospi_device_0 = &__tz_OSPI_DEVICE_0_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ospi_device_0 = &__tz_OSPI_DEVICE_0_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ospi_device_1 = &__tz_OSPI_DEVICE_1_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_ospi_device_1 = &__tz_OSPI_DEVICE_1_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_option_setting = &__tz_OPTION_SETTING_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_option_setting = &__tz_OPTION_SETTING_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_option_setting_s = &__tz_OPTION_SETTING_S_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_option_setting_s = &__tz_OPTION_SETTING_S_S; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_id_code = &__tz_ID_CODE_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_id_code = &__tz_ID_CODE_S; + + #endif + + #elif defined(__GNUC__) + + #if defined(__llvm__) && !defined(__CLANG_TIDY__) +extern const uint32_t __tz_FLASH_N; + #else +extern const uint32_t FLASH_NS_IMAGE_START; + #endif + #if BSP_FEATURE_TZ_VERSION == 2 +extern const uint32_t __FLASH_NSC_START; + #else +extern const uint32_t __tz_FLASH_C; + #endif +extern const uint32_t __tz_DATA_FLASH_N; +extern const uint32_t __tz_RAM_N; + #if BSP_FEATURE_TZ_VERSION == 2 +extern const uint32_t __RAM_NSC_START; + #else +extern const uint32_t __tz_RAM_C; + #endif + + #if BSP_FEATURE_BSP_HAS_ITCM +extern const uint32_t __tz_ITCM_N; +extern const uint32_t __tz_ITCM_S; + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM +extern const uint32_t __tz_DTCM_N; +extern const uint32_t __tz_DTCM_S; + #endif + + #if defined(__llvm__) && !defined(__CLANG_TIDY__) +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &__tz_FLASH_N; + #else +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_flash = &FLASH_NS_IMAGE_START; + #endif + #if BSP_FEATURE_TZ_VERSION == 2 +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = (uint32_t *) &__FLASH_NSC_START; + #else +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_flash = (uint32_t *) &__tz_FLASH_C; + #endif +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_data_flash = (uint32_t *) &__tz_DATA_FLASH_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_ram = (uint32_t *) &__tz_RAM_N; + #if BSP_FEATURE_TZ_VERSION == 2 +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = (uint32_t *) &__RAM_NSC_START; + #else +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_callable_ram = (uint32_t *) &__tz_RAM_C; + #endif + + #if BSP_FEATURE_BSP_HAS_ITCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_itcm = (uint32_t *) &__tz_ITCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_itcm = (uint32_t *) &__tz_ITCM_S; + #endif + + #if BSP_FEATURE_BSP_HAS_DTCM +BSP_DONT_REMOVE uint32_t const * const gp_start_of_nonsecure_dtcm = (uint32_t *) &__tz_DTCM_N; +BSP_DONT_REMOVE uint32_t const * const gp_start_of_secure_dtcm = (uint32_t *) &__tz_DTCM_S; + #endif + + #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 = + (uint32_t *) ((uint32_t) gp_start_of_nonsecure_flash | BSP_FEATURE_TZ_NS_OFFSET); + + /* 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) gp_start_of_nonsecure_ram | BSP_FEATURE_TZ_NS_OFFSET); + + /* Write an infinite loop into start of NS RAM (Branch T3 Instruction (b.n )). */ + uint16_t * infinite_loop = (uint16_t *) ((uint32_t) gp_start_of_nonsecure_ram | BSP_FEATURE_TZ_NS_OFFSET); + *infinite_loop = BSP_PRV_INFINITE_LOOP; + + /* Set the NS stack pointer to a valid location in NS RAM. */ + __TZ_set_MSP_NS((uint32_t) gp_start_of_nonsecure_ram + 0x20U + BSP_FEATURE_TZ_NS_OFFSET); + + /* 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) gp_start_of_nonsecure_flash & R_PSCU_CFSAMONA_CFS2_Msk; + R_PSCU->CFSAMONB = (uint32_t) gp_start_of_nonsecure_callable_flash & R_PSCU_CFSAMONB_CFS1_Msk; + R_PSCU->DFSAMON = (uint32_t) gp_start_of_nonsecure_data_flash & R_PSCU_DFSAMON_DFS_Msk; + R_PSCU->SSAMONA = (uint32_t) gp_start_of_nonsecure_ram & R_PSCU_SSAMONA_SS2_Msk; + R_PSCU->SSAMONB = (uint32_t) gp_start_of_nonsecure_callable_ram & R_PSCU_SSAMONB_SS1_Msk; + #endif + + #if BSP_FEATURE_BSP_HAS_ITCM == 1 + + /* Total ITCM block size in bytes is equal to 2 ^ (BLKSZ + 5). */ + uint32_t itcm_block_size = ((MEMSYSCTL->ITGU_CFG & MEMSYSCTL_ITGU_CFG_BLKSZ_Msk) >> MEMSYSCTL_ITGU_CFG_BLKSZ_Pos) + + 5U; + + /* 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_start_of_nonsecure_itcm - (uint32_t) gp_start_of_secure_itcm) >> + itcm_block_size; + + /* 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_FEATURE_BSP_HAS_DTCM == 1 + + /* Total DTCM block size in bytes is equal to 2 ^ (BLKSZ + 5). */ + uint32_t dtcm_block_size = ((MEMSYSCTL->DTGU_CFG & MEMSYSCTL_DTGU_CFG_BLKSZ_Msk) >> MEMSYSCTL_DTGU_CFG_BLKSZ_Pos) + + 5U; + + /* 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_start_of_nonsecure_dtcm - (uint32_t) gp_start_of_secure_dtcm) >> + dtcm_block_size; + + /* 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 __SAUREGION_PRESENT + + /* Configure IDAU to divide SRAM region into NSC/NS. */ + R_CPSCU->SRAMSABAR0 = (uint32_t) gp_start_of_nonsecure_ram & R_CPSCU_SRAMSABAR0_SRAMSABAR_Msk; + R_CPSCU->SRAMSABAR1 = (uint32_t) gp_start_of_nonsecure_ram & R_CPSCU_SRAMSABAR1_SRAMSABAR_Msk; + + /* Configure SAU region used for Code Flash Non-secure callable. */ + SAU->RNR = BSP_SAU_REGION_CODE_FLASH_NSC; + SAU->RBAR = (uint32_t) gp_start_of_nonsecure_callable_flash & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (((uint32_t) gp_start_of_nonsecure_flash - 1U) & 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) gp_start_of_nonsecure_callable_ram & SAU_RBAR_BADDR_Msk; + SAU->RLAR = (((uint32_t) gp_start_of_nonsecure_ram - 1U) & 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; + + /* 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(); + #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_FEATURE_BSP_HAS_TZFSAR + + /* Set TrustZone filter to Secure. */ + R_CPSCU->TZFSAR = ~R_CPSCU_TZFSAR_TZFSA0_Msk; + #endif + + /* Set TrustZone filter exception response. */ + R_TZF->TZFPT = BSP_PRV_TZ_REG_KEY + 1U; + R_TZF->TZFOAD = BSP_PRV_TZ_REG_KEY + BSP_TZ_CFG_EXCEPTION_RESPONSE; + R_TZF->TZFPT = BSP_PRV_TZ_REG_KEY + 0U; + + /* Initialize PSARs. */ + R_PSCU->PSARB = BSP_TZ_CFG_PSARB; + R_PSCU->PSARC = BSP_TZ_CFG_PSARC; + R_PSCU->PSARD = BSP_TZ_CFG_PSARD; + R_PSCU->PSARE = BSP_TZ_CFG_PSARE; + R_PSCU->MSSAR = BSP_TZ_CFG_MSSAR; + + /* Initialize Type 2 SARs. */ + #ifdef BSP_TZ_CFG_CSAR + R_CPSCU->CSAR = BSP_TZ_CFG_CSAR; /* Cache Security Attribution. */ + #endif + R_SYSTEM->RSTSAR = BSP_TZ_CFG_RSTSAR; /* RSTSRn Security Attribution. */ + R_SYSTEM->LVDSAR = BSP_TZ_CFG_LVDSAR; /* LVD Security Attribution. */ + R_SYSTEM->CGFSAR = BSP_TZ_CFG_CGFSAR; /* CGC Security Attribution. */ + R_SYSTEM->LPMSAR = BSP_TZ_CFG_LPMSAR; /* LPM Security Attribution. */ + R_SYSTEM->DPFSAR = BSP_TZ_CFG_DPFSAR; /* Deep Standby Interrupt Factor Security Attribution. */ + #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 + R_CPSCU->ICUSARA = BSP_TZ_CFG_ICUSARA; /* External IRQ Security Attribution. */ + 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 + #ifdef BSP_TZ_CFG_DMACCHSAR + R_CPSCU->DMACCHSAR |= (BSP_TZ_CFG_DMACCHSAR << DMACX_REGISTER_SHIFT); /* DMAC Channel Security Attribution. */ + #endif + #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 + R_FCACHE->FSAR = BSP_TZ_CFG_FSAR; /* FLWT and FCKMHZ Security Attribution. */ + 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 + R_CPSCU->MMPUSARA = BSP_TZ_CFG_MMPUSARA; /* Security Attribution for the DMAC Bus Master MPU. */ + 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 + + #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; + #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; + #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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.h new file mode 100644 index 00000000000..e271bdc114c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_security.h @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_tfu.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_tfu.h new file mode 100644 index 00000000000..11a32f2147e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/all/bsp_tfu.h @@ -0,0 +1,218 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h new file mode 100644 index 00000000000..0f200f06c8b --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_elc.h @@ -0,0 +1,261 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_ELC_H +#define BSP_ELC_H + +/*******************************************************************************************************************//** + * @addtogroup BSP_MCU_RA6E2 + * @{ + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * 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_ra6e2 +{ + 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_ICU_IRQ8 = (0x009), // External pin interrupt 8 + ELC_EVENT_ICU_IRQ9 = (0x00A), // External pin interrupt 9 + ELC_EVENT_ICU_IRQ10 = (0x00B), // External pin interrupt 10 + ELC_EVENT_ICU_IRQ11 = (0x00C), // External pin interrupt 11 + ELC_EVENT_ICU_IRQ12 = (0x00D), // External pin interrupt 12 + ELC_EVENT_ICU_IRQ13 = (0x00E), // External pin interrupt 13 + ELC_EVENT_ICU_IRQ14 = (0x00F), // External pin interrupt 14 + ELC_EVENT_DMAC0_INT = (0x020), // DMAC0 transfer end + ELC_EVENT_DMAC1_INT = (0x021), // DMAC1 transfer end + ELC_EVENT_DMAC2_INT = (0x022), // DMAC2 transfer end + ELC_EVENT_DMAC3_INT = (0x023), // DMAC3 transfer end + ELC_EVENT_DMAC4_INT = (0x024), // DMAC4 transfer end + ELC_EVENT_DMAC5_INT = (0x025), // DMAC5 transfer end + ELC_EVENT_DMAC6_INT = (0x026), // DMAC6 transfer end + ELC_EVENT_DMAC7_INT = (0x027), // DMAC7 transfer end + ELC_EVENT_DTC_COMPLETE = (0x029), // DTC transfer complete + ELC_EVENT_DMA_TRANSERR = (0x02B), // DMA/DTC transfer error + ELC_EVENT_ICU_SNOOZE_CANCEL = (0x02D), // Canceling from Snooze mode + ELC_EVENT_FCU_FIFERR = (0x030), // Flash access error interrupt + ELC_EVENT_FCU_FRDYI = (0x031), // Flash ready interrupt + ELC_EVENT_LVD_LVD1 = (0x038), // Voltage monitor 1 interrupt + ELC_EVENT_LVD_LVD2 = (0x039), // Voltage monitor 2 interrupt + ELC_EVENT_CGC_MOSC_STOP = (0x03B), // Main Clock oscillation stop + ELC_EVENT_LPM_SNOOZE_REQUEST = (0x03C), // Snooze entry + ELC_EVENT_AGT0_INT = (0x040), // AGT interrupt + ELC_EVENT_AGT0_COMPARE_A = (0x041), // Compare match A + ELC_EVENT_AGT0_COMPARE_B = (0x042), // Compare match B + ELC_EVENT_AGT1_INT = (0x043), // AGT interrupt + ELC_EVENT_AGT1_COMPARE_A = (0x044), // Compare match A + ELC_EVENT_AGT1_COMPARE_B = (0x045), // Compare match B + ELC_EVENT_IWDT_UNDERFLOW = (0x052), // IWDT underflow + ELC_EVENT_WDT_UNDERFLOW = (0x053), // WDT underflow + ELC_EVENT_RTC_ALARM = (0x054), // Alarm interrupt + ELC_EVENT_RTC_PERIOD = (0x055), // Periodic interrupt + ELC_EVENT_RTC_CARRY = (0x056), // Carry interrupt + ELC_EVENT_CAN_RXF = (0x059), // Global recieve FIFO interrupt + ELC_EVENT_CAN_GLERR = (0x05A), // Global error + ELC_EVENT_CAN_DMAREQ0 = (0x05B), // RX fifo DMA request 0 + ELC_EVENT_CAN_DMAREQ1 = (0x05C), // RX fifo DMA request 1 + ELC_EVENT_CAN0_TX = (0x063), // Transmit interrupt + ELC_EVENT_CAN0_CHERR = (0x064), // Channel error + ELC_EVENT_CAN0_COMFRX = (0x065), // Common FIFO recieve interrupt + ELC_EVENT_CAN0_CF_DMAREQ = (0x066), // Channel DMA request + ELC_EVENT_CAN0_RXMB = (0x067), // Receive message buffer interrupt + ELC_EVENT_USBFS_INT = (0x06D), // USBFS interrupt + ELC_EVENT_USBFS_RESUME = (0x06E), // USBFS resume interrupt + ELC_EVENT_SSI0_TXI = (0x08A), // Transmit data empty + ELC_EVENT_SSI0_RXI = (0x08B), // Receive data full + ELC_EVENT_SSI0_INT = (0x08D), // Error interrupt + ELC_EVENT_CAC_FREQUENCY_ERROR = (0x09E), // Frequency error interrupt + ELC_EVENT_CAC_MEASUREMENT_END = (0x09F), // Measurement end interrupt + ELC_EVENT_CAC_OVERFLOW = (0x0A0), // Overflow interrupt + ELC_EVENT_CEC_INTDA = (0x0AB), // Data interrupt + ELC_EVENT_CEC_INTCE = (0x0AC), // Communication complete interrupt + ELC_EVENT_CEC_INTERR = (0x0AD), // Error interrupt + ELC_EVENT_IOPORT_EVENT_1 = (0x0B1), // Port 1 event + ELC_EVENT_IOPORT_EVENT_2 = (0x0B2), // Port 2 event + ELC_EVENT_IOPORT_EVENT_3 = (0x0B3), // Port 3 event + ELC_EVENT_IOPORT_EVENT_4 = (0x0B4), // Port 4 event + ELC_EVENT_ELC_SOFTWARE_EVENT_0 = (0x0B5), // Software event 0 + ELC_EVENT_ELC_SOFTWARE_EVENT_1 = (0x0B6), // Software event 1 + ELC_EVENT_POEG0_EVENT = (0x0B7), // Port Output disable 0 interrupt + ELC_EVENT_POEG1_EVENT = (0x0B8), // Port Output disable 1 interrupt + ELC_EVENT_POEG2_EVENT = (0x0B9), // Port Output disable 2 interrupt + ELC_EVENT_POEG3_EVENT = (0x0BA), // Port Output disable 3 interrupt + ELC_EVENT_GPT0_CAPTURE_COMPARE_A = (0x0C0), // Capture/Compare match A + ELC_EVENT_GPT0_CAPTURE_COMPARE_B = (0x0C1), // Capture/Compare match B + ELC_EVENT_GPT0_COMPARE_C = (0x0C2), // Compare match C + ELC_EVENT_GPT0_COMPARE_D = (0x0C3), // Compare match D + ELC_EVENT_GPT0_COMPARE_E = (0x0C4), // Compare match E + ELC_EVENT_GPT0_COMPARE_F = (0x0C5), // Compare match F + ELC_EVENT_GPT0_COUNTER_OVERFLOW = (0x0C6), // Overflow + ELC_EVENT_GPT0_COUNTER_UNDERFLOW = (0x0C7), // Underflow + ELC_EVENT_GPT0_PC = (0x0C8), // Period count function finish + ELC_EVENT_GPT0_AD_TRIG_A = (0x0C9), // A/D converter start request A + ELC_EVENT_GPT0_AD_TRIG_B = (0x0CA), // A/D converter start request B + ELC_EVENT_GPT1_CAPTURE_COMPARE_A = (0x0CB), // Capture/Compare match A + ELC_EVENT_GPT1_CAPTURE_COMPARE_B = (0x0CC), // Capture/Compare match B + ELC_EVENT_GPT1_COMPARE_C = (0x0CD), // Compare match C + ELC_EVENT_GPT1_COMPARE_D = (0x0CE), // Compare match D + ELC_EVENT_GPT1_COMPARE_E = (0x0CF), // Compare match E + ELC_EVENT_GPT1_COMPARE_F = (0x0D0), // Compare match F + ELC_EVENT_GPT1_COUNTER_OVERFLOW = (0x0D1), // Overflow + ELC_EVENT_GPT1_COUNTER_UNDERFLOW = (0x0D2), // Underflow + ELC_EVENT_GPT1_PC = (0x0D3), // Period count function finish + ELC_EVENT_GPT1_AD_TRIG_A = (0x0D4), // A/D converter start request A + ELC_EVENT_GPT1_AD_TRIG_B = (0x0D5), // A/D converter start request B + ELC_EVENT_GPT2_CAPTURE_COMPARE_A = (0x0D6), // Capture/Compare match A + ELC_EVENT_GPT2_CAPTURE_COMPARE_B = (0x0D7), // Capture/Compare match B + ELC_EVENT_GPT2_COMPARE_C = (0x0D8), // Compare match C + ELC_EVENT_GPT2_COMPARE_D = (0x0D9), // Compare match D + ELC_EVENT_GPT2_COMPARE_E = (0x0DA), // Compare match E + ELC_EVENT_GPT2_COMPARE_F = (0x0DB), // Compare match F + ELC_EVENT_GPT2_COUNTER_OVERFLOW = (0x0DC), // Overflow + ELC_EVENT_GPT2_COUNTER_UNDERFLOW = (0x0DD), // Underflow + ELC_EVENT_GPT2_AD_TRIG_A = (0x0DF), // A/D converter start request A + ELC_EVENT_GPT2_AD_TRIG_B = (0x0E0), // A/D converter start request B + ELC_EVENT_GPT3_CAPTURE_COMPARE_A = (0x0E1), // Capture/Compare match A + ELC_EVENT_GPT3_CAPTURE_COMPARE_B = (0x0E2), // Capture/Compare match B + ELC_EVENT_GPT3_COMPARE_C = (0x0E3), // Compare match C + ELC_EVENT_GPT3_COMPARE_D = (0x0E4), // Compare match D + ELC_EVENT_GPT3_COMPARE_E = (0x0E5), // Compare match E + ELC_EVENT_GPT3_COMPARE_F = (0x0E6), // Compare match F + ELC_EVENT_GPT3_COUNTER_OVERFLOW = (0x0E7), // Overflow + ELC_EVENT_GPT3_COUNTER_UNDERFLOW = (0x0E8), // Underflow + ELC_EVENT_GPT3_AD_TRIG_A = (0x0EA), // A/D converter start request A + ELC_EVENT_GPT3_AD_TRIG_B = (0x0EB), // A/D converter start request B + ELC_EVENT_GPT4_CAPTURE_COMPARE_A = (0x0EC), // Capture/Compare match A + ELC_EVENT_GPT4_CAPTURE_COMPARE_B = (0x0ED), // Capture/Compare match B + ELC_EVENT_GPT4_COMPARE_C = (0x0EE), // Compare match C + ELC_EVENT_GPT4_COMPARE_D = (0x0EF), // Compare match D + ELC_EVENT_GPT4_COMPARE_E = (0x0F0), // Compare match E + ELC_EVENT_GPT4_COMPARE_F = (0x0F1), // Compare match F + ELC_EVENT_GPT4_COUNTER_OVERFLOW = (0x0F2), // Overflow + ELC_EVENT_GPT4_COUNTER_UNDERFLOW = (0x0F3), // Underflow + ELC_EVENT_GPT4_PC = (0x0F4), // Period count function finish + ELC_EVENT_GPT4_AD_TRIG_A = (0x0F5), // A/D converter start request A + ELC_EVENT_GPT4_AD_TRIG_B = (0x0F6), // A/D converter start request B + ELC_EVENT_GPT5_CAPTURE_COMPARE_A = (0x0F7), // Capture/Compare match A + ELC_EVENT_GPT5_CAPTURE_COMPARE_B = (0x0F8), // Capture/Compare match B + ELC_EVENT_GPT5_COMPARE_C = (0x0F9), // Compare match C + ELC_EVENT_GPT5_COMPARE_D = (0x0FA), // Compare match D + ELC_EVENT_GPT5_COMPARE_E = (0x0FB), // Compare match E + ELC_EVENT_GPT5_COMPARE_F = (0x0FC), // Compare match F + ELC_EVENT_GPT5_COUNTER_OVERFLOW = (0x0FD), // Overflow + ELC_EVENT_GPT5_COUNTER_UNDERFLOW = (0x0FE), // Underflow + ELC_EVENT_GPT5_PC = (0x0FF), // Period count function finish + ELC_EVENT_GPT5_AD_TRIG_A = (0x100), // A/D converter start request A + ELC_EVENT_GPT5_AD_TRIG_B = (0x101), // A/D converter start request B + ELC_EVENT_OPS_UVW_EDGE = (0x15C), // UVW edge event + ELC_EVENT_ADC0_SCAN_END = (0x160), // End of A/D scanning operation + ELC_EVENT_ADC0_SCAN_END_B = (0x161), // A/D scan end interrupt for group B + ELC_EVENT_ADC0_WINDOW_A = (0x162), // Window A Compare match interrupt + ELC_EVENT_ADC0_WINDOW_B = (0x163), // Window B Compare match interrupt + ELC_EVENT_ADC0_COMPARE_MATCH = (0x164), // Compare match + ELC_EVENT_ADC0_COMPARE_MISMATCH = (0x165), // Compare mismatch + ELC_EVENT_SCI0_RXI = (0x180), // Receive data full + ELC_EVENT_SCI0_TXI = (0x181), // Transmit data empty + ELC_EVENT_SCI0_TEI = (0x182), // Transmit end + ELC_EVENT_SCI0_ERI = (0x183), // Receive error + ELC_EVENT_SCI0_AM = (0x184), // Address match event + ELC_EVENT_SCI0_RXI_OR_ERI = (0x185), // Receive data full/Receive error + ELC_EVENT_SCI9_RXI = (0x1B6), // Receive data full + ELC_EVENT_SCI9_TXI = (0x1B7), // Transmit data empty + ELC_EVENT_SCI9_TEI = (0x1B8), // Transmit end + ELC_EVENT_SCI9_ERI = (0x1B9), // Receive error + ELC_EVENT_SCI9_AM = (0x1BA), // Address match event + ELC_EVENT_SPI0_RXI = (0x1C4), // Receive buffer full + ELC_EVENT_SPI0_TXI = (0x1C5), // Transmit buffer empty + ELC_EVENT_SPI0_IDLE = (0x1C6), // Idle + ELC_EVENT_SPI0_ERI = (0x1C7), // Error + ELC_EVENT_SPI0_TEI = (0x1C8), // Transmission complete event + ELC_EVENT_SPI1_RXI = (0x1C9), // Receive buffer full + ELC_EVENT_SPI1_TXI = (0x1CA), // Transmit buffer empty + ELC_EVENT_SPI1_IDLE = (0x1CB), // Idle + ELC_EVENT_SPI1_ERI = (0x1CC), // Error + ELC_EVENT_SPI1_TEI = (0x1CD), // Transmission complete event + ELC_EVENT_CAN0_MRAM_ERI = (0x1D0), // CANFD0 ECC error + ELC_EVENT_QSPI_INT = (0x1DA), // QSPI interrupt + ELC_EVENT_DOC_INT = (0x1DB), // Data operation circuit interrupt + ELC_EVENT_I3C0_RESPONSE = (0x1DC), // Response status buffer full + ELC_EVENT_I3C0_COMMAND = (0x1DD), // Command buffer empty + ELC_EVENT_I3C0_IBI = (0x1DE), // IBI status buffer full + ELC_EVENT_I3C0_RX = (0x1DF), // Receive + ELC_EVENT_I3C0_TX = (0x1E0), // Transmit + ELC_EVENT_I3C0_RCV_STATUS = (0x1E1), // Receive status buffer full + ELC_EVENT_I3C0_HRESP = (0x1E2), // High priority response queue full + ELC_EVENT_I3C0_HCMD = (0x1E3), // High priority command queue empty + ELC_EVENT_I3C0_HRX = (0x1E4), // High priority rx data buffer full + ELC_EVENT_I3C0_HTX = (0x1E5), // High priority tx data buffer empty + ELC_EVENT_I3C0_TEND = (0x1E6), // Transmit end + ELC_EVENT_I3C0_EEI = (0x1E7), // Error + ELC_EVENT_I3C0_STEV = (0x1E8), // Synchronous timing + ELC_EVENT_I3C0_MREFOVF = (0x1E9), // MREF counter overflow + ELC_EVENT_I3C0_MREFCPT = (0x1EA), // MREF capture + ELC_EVENT_I3C0_AMEV = (0x1EB), // Additional master-initiated bus event + ELC_EVENT_I3C0_WU = (0x1EC), // Wake-up Condition Detection interrupt + ELC_EVENT_TRNG_RDREQ = (0x1F3) // TRNG Read Request +} elc_event_t; + +#define BSP_PRV_VECT_ENUM(event,group) (ELC_ ## event) + +#define ELC_PERIPHERAL_NUM (24U) +#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_GPT_E = (4), + ELC_PERIPHERAL_GPT_F = (5), + ELC_PERIPHERAL_GPT_G = (6), + ELC_PERIPHERAL_GPT_H = (7), + ELC_PERIPHERAL_ADC0 = (8), + ELC_PERIPHERAL_ADC0_B = (9), + ELC_PERIPHERAL_DAC0 = (12), + ELC_PERIPHERAL_DAC1 = (13), + ELC_PERIPHERAL_IOPORT1 = (14), + ELC_PERIPHERAL_IOPORT2 = (15), + ELC_PERIPHERAL_IOPORT3 = (16), + ELC_PERIPHERAL_IOPORT4 = (17), + ELC_PERIPHERAL_I3C = (23) +} elc_peripheral_t; + +/** Positions of event link set registers (ELSRs) available on this MCU */ +#define BSP_ELC_PERIPHERAL_MASK (0x0083F3FFU) + +/* UNCRUSTIFY-ON */ +/** @} (end addtogroup BSP_MCU_RA6E2) */ + +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h new file mode 100644 index 00000000000..c63a5ac87c2 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature.h @@ -0,0 +1,482 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_FEATURE_H +#define BSP_FEATURE_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ +#include "bsp_feature_gen.h" + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/** The main oscillator drive value is based upon the oscillator frequency selected in the configuration */ +#if (BSP_CFG_XTAL_HZ > (19999999)) + #define CGC_MAINCLOCK_DRIVE (0x00U) +#elif (BSP_CFG_XTAL_HZ > (15999999)) && (BSP_CFG_XTAL_HZ < (20000000)) + #define CGC_MAINCLOCK_DRIVE (0x01U) +#elif (BSP_CFG_XTAL_HZ > (7999999)) && (BSP_CFG_XTAL_HZ < (16000000)) + #define CGC_MAINCLOCK_DRIVE (0x02U) +#else + #define CGC_MAINCLOCK_DRIVE (0x03U) +#endif + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +#define BSP_FEATURE_ACMPHS_MIN_WAIT_TIME_US (0U) // Feature not available on this MCU +#define BSP_FEATURE_ACMPHS_VREF (0U) // Feature not available on this MCU + +#define BSP_FEATURE_ACMPLP_HAS_COMPSEL_REGISTERS (0) // Feature not available on this MCU +#define BSP_FEATURE_ACMPLP_MIN_WAIT_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_ADC_ADDITION_SUPPORTED (1U) +#define BSP_FEATURE_ADC_B_TSN_CALIBRATION32_MASK (0U) +#define BSP_FEATURE_ADC_B_TSN_SLOPE (0U) +#define BSP_FEATURE_ADC_B_UNIT_0_CHANNELS (0U) +#define BSP_FEATURE_ADC_B_UNIT_1_CHANNELS (0U) +#define BSP_FEATURE_ADC_CALIBRATION_REG_AVAILABLE (0U) +#define BSP_FEATURE_ADC_CLOCK_SOURCE (FSP_PRIV_CLOCK_PCLKC) +#define BSP_FEATURE_ADC_D_CHANNELS (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_D_SCAN_MODE_CHANNELS (0) // Feature not available on this MCU +#define BSP_FEATURE_ADC_GROUP_B_SENSORS_ALLOWED (1U) +#define BSP_FEATURE_ADC_HAS_ADBUF (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADPRC (1U) +#define BSP_FEATURE_ADC_HAS_ADCER_ADRFMT (1U) +#define BSP_FEATURE_ADC_HAS_ADHVREFCNT (0U) +#define BSP_FEATURE_ADC_HAS_PGA (1U) +#define BSP_FEATURE_ADC_HAS_SAMPLE_HOLD_REG (1U) +#define BSP_FEATURE_ADC_HAS_VREFAMPCNT (0U) +#define BSP_FEATURE_ADC_MAX_RESOLUTION_BITS (12U) +#define BSP_FEATURE_ADC_SENSORS_EXCLUSIVE (0U) +#define BSP_FEATURE_ADC_SENSOR_MIN_SAMPLING_TIME (4150U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_CALIBRATION32_MASK (0x0000FFFFU) +#define BSP_FEATURE_ADC_TSN_CALIBRATION_AVAILABLE (1U) // TSCDR is a 32-bit register on this MCU +#define BSP_FEATURE_ADC_TSN_CONTROL_AVAILABLE (1U) +#define BSP_FEATURE_ADC_TSN_SLOPE (4000) +#define BSP_FEATURE_ADC_UNIT_0_CHANNELS (0x000139F7U) // 0 to 2, 4 to 8, 11 to 13, 16 +#define BSP_FEATURE_ADC_UNIT_1_CHANNELS (0) +#define BSP_FEATURE_ADC_VALID_UNIT_MASK (1U) + +#define BSP_FEATURE_AGT_AGTW_CHANNEL_COUNT (2) +#define BSP_FEATURE_AGT_AGT_CHANNEL_COUNT (0) +#define BSP_FEATURE_AGT_USE_AGTIOSEL_ALT (0) // Indicates use of AGTIOSEL_ALT instead of AGTIOSEL +#define BSP_FEATURE_AGT_VALID_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_BSP_CODE_CACHE_VERSION (1) +#define BSP_FEATURE_BSP_FLASH_CACHE (1) +#define BSP_FEATURE_BSP_FLASH_CACHE_DISABLE_OPM (0U) +#define BSP_FEATURE_BSP_FLASH_PREFETCH_BUFFER (0) +#define BSP_FEATURE_BSP_HAS_ADC_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_CANFD_CLOCK (1) +#define BSP_FEATURE_BSP_HAS_CEC_CLOCK (1) +#define BSP_FEATURE_BSP_HAS_CLOCK_SUPPLY_TYPEB (0U) +#define BSP_FEATURE_BSP_HAS_DCDC_REGULATOR (0U) +#define BSP_FEATURE_BSP_HAS_DTCM (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_FSXP_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_GRAPHICS_DOMAIN (0) +#define BSP_FEATURE_BSP_HAS_I3C_CLOCK (1) +#define BSP_FEATURE_BSP_HAS_IIC_CLOCK (0U) +#define BSP_FEATURE_BSP_HAS_ITCM (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_LCD_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_OCTASPI_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_OFS2 (0) +#define BSP_FEATURE_BSP_HAS_OFS3 (0) +#define BSP_FEATURE_BSP_HAS_SCE5 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCE_ON_RA2 (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SCISPI_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_SCI_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_SDADC_CLOCK (0) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_SECURITY_MPU (0U) +#define BSP_FEATURE_BSP_HAS_SPI_CLOCK (0) +#define BSP_FEATURE_BSP_HAS_SP_MON (0U) +#define BSP_FEATURE_BSP_HAS_SYRACCR (0U) +#define BSP_FEATURE_BSP_HAS_TZFSAR (1) +#define BSP_FEATURE_BSP_HAS_USB60_CLOCK (0U) // Feature not available on this MCU +#define BSP_FEATURE_BSP_HAS_USBCKDIVCR (1U) // On the RA6E2 there are specific registers for configuring the USB clock. +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_DIV (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_REQ (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL (1U) +#define BSP_FEATURE_BSP_HAS_USB_CLOCK_SEL_ALT (0U) +#define BSP_FEATURE_BSP_MCU_INFO_POINTER_LOCATION (0U) +#define BSP_FEATURE_BSP_MPU_REGION0_MASK (0U) // Feature not available on this MCU +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5 (0) // If MSTPCRE is present then the setting is not valid. +#define BSP_FEATURE_BSP_MSTP_GPT_MSTPD5_MAX_CH (0U) // If MSTPCRE is present then the setting is not valid. +#define BSP_FEATURE_BSP_MSTP_HAS_MSTPCRE (1U) +#define BSP_FEATURE_BSP_MSTP_POEG_MSTPD13 (0) // If MSTPCRE is present then the setting is not valid. +#define BSP_FEATURE_BSP_NUM_PMSAR (9U) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_MASK (0xFFFFF9FFU) +#define BSP_FEATURE_BSP_OFS1_HOCOFRQ_OFFSET (9U) +#define BSP_FEATURE_BSP_OFS_HAS_SECURITY_ATTRIBUTION (0U) +#define BSP_FEATURE_BSP_OSIS_PADDING (0U) +#define BSP_FEATURE_BSP_POWER_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_BSP_RESET_TRNG (0U) +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FIVE_ROM_WAITS (0U) // The maximum frequency allowed without having five ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_FOUR_ROM_WAITS (0U) // The maximum frequency allowed without having four ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_NO_RAM_WAITS (100000000U) // The maximum frequency allowed without having RAM wait state enabled in SRAMWTSC. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_ONE_ROM_WAITS (50000000U) // The maximum frequency allowed without having one ROM wait cycle. +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_THREE_ROM_WAITS (150000000U) // The maximum frequency allowed without having three ROM wait cycles (Set to zero if this is not an option). +#define BSP_FEATURE_BSP_SYS_CLOCK_FREQ_TWO_ROM_WAITS (100000000U) // The maximum frequency allowed without having two ROM wait cycles. +#define BSP_FEATURE_BSP_UNIQUE_ID_OFFSET (0U) +#define BSP_FEATURE_BSP_UNIQUE_ID_POINTER (0x01008190U) +#define BSP_FEATURE_BSP_VBATT_HAS_VBTCR1_BPWSWSTP (0U) + +#define BSP_FEATURE_CANFD_FD_SUPPORT (BSP_MCU_FEATURE_SET == 'B') +#define BSP_FEATURE_CANFD_LITE (1U) +#define BSP_FEATURE_CANFD_NUM_CHANNELS (1U) +#define BSP_FEATURE_CANFD_NUM_INSTANCES (1U) + +#define BSP_FEATURE_CAN_CHECK_PCLKB_RATIO (0U) +#define BSP_FEATURE_CAN_CLOCK (0U) +#define BSP_FEATURE_CAN_MCLOCK_ONLY (0U) +#define BSP_FEATURE_CAN_NUM_CHANNELS (0U) // RA6E2 has CAN-FD + +#define BSP_FEATURE_CGC_EXECUTE_FROM_LOCO (1) +#define BSP_FEATURE_CGC_HAS_BCLK (0U) +#define BSP_FEATURE_CGC_HAS_CPUCLK (0U) +#define BSP_FEATURE_CGC_HAS_EXTRACLK2 (0) +#define BSP_FEATURE_CGC_HAS_FCLK (1U) +#define BSP_FEATURE_CGC_HAS_FLDWAITR (0U) +#define BSP_FEATURE_CGC_HAS_FLL (1U) +#define BSP_FEATURE_CGC_HAS_FLWT (1U) +#define BSP_FEATURE_CGC_HAS_HOCOWTCR (0U) +#define BSP_FEATURE_CGC_HAS_MEMWAIT (0U) +#define BSP_FEATURE_CGC_HAS_OSTDCSE (0) // Feature not available on this MCU +#define BSP_FEATURE_CGC_HAS_PCLKA (1U) +#define BSP_FEATURE_CGC_HAS_PCLKB (1U) +#define BSP_FEATURE_CGC_HAS_PCLKC (1U) +#define BSP_FEATURE_CGC_HAS_PCLKD (1U) +#define BSP_FEATURE_CGC_HAS_PCLKE (0U) +#define BSP_FEATURE_CGC_HAS_PLL (1U) +#define BSP_FEATURE_CGC_HAS_PLL2 (0U) +#define BSP_FEATURE_CGC_HAS_SOPCCR (1U) +#define BSP_FEATURE_CGC_HAS_SOSC (1U) +#define BSP_FEATURE_CGC_HAS_SRAMPRCR2 (1U) // On the RA6E2 there is another register to enable write access for SRAMWTSC. +#define BSP_FEATURE_CGC_HAS_SRAMWTSC (1U) +#define BSP_FEATURE_CGC_HOCOSF_BEFORE_OPCCR (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_64MHZ_ONLY (0U) +#define BSP_FEATURE_CGC_HOCOWTCR_SCI_SNOOZE_VALUE (0) +#define BSP_FEATURE_CGC_HOCOWTCR_VALUE (6U) +#define BSP_FEATURE_CGC_ICLK_DIV_RESET (BSP_CLOCKS_SYS_CLOCK_DIV_4) +#define BSP_FEATURE_CGC_LOCO_STABILIZATION_MAX_US (61U) +#define BSP_FEATURE_CGC_LOW_SPEED_MAX_FREQ_HZ (1000000U) // This MCU does have Low Speed Mode, up to 1MHz +#define BSP_FEATURE_CGC_LOW_VOLTAGE_MAX_FREQ_HZ (0U) // This MCU does not have Low Voltage Mode +#define BSP_FEATURE_CGC_MIDDLE_SPEED_MAX_FREQ_HZ (0U) // This MCU does not have Middle Speed Mode +#define BSP_FEATURE_CGC_MOCO_STABILIZATION_MAX_US (15U) +#define BSP_FEATURE_CGC_MODRV_MASK (R_SYSTEM_MOMCR_MODRV0_Msk) +#define BSP_FEATURE_CGC_MODRV_SHIFT (R_SYSTEM_MOMCR_MODRV0_Pos) +#define BSP_FEATURE_CGC_OSCILLATON_STOP_DETECT (1) +#define BSP_FEATURE_CGC_PLL1_NUM_OUTPUT_CLOCKS (1U) +#define BSP_FEATURE_CGC_PLL2_NUM_OUTPUT_CLOCKS (0U) +#define BSP_FEATURE_CGC_PLL2_OUT_MAX_HZ (0U) // Feature not available on this MCU +#define BSP_FEATURE_CGC_PLL2_OUT_MIN_HZ (0U) // Feature not available on this MCU +#define BSP_FEATURE_CGC_PLLCCR_TYPE (1U) +#define BSP_FEATURE_CGC_PLLCCR_VCO_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_PLLCCR_VCO_MIN_HZ (0) // Feature not available on this MCU +#define BSP_FEATURE_CGC_PLLCCR_WAIT_US (0U) // No wait between setting PLLCCR and clearing PLLSTP +#define BSP_FEATURE_CGC_PLL_HOCO_MAX_CPUCLK_HZ (0U) +#define BSP_FEATURE_CGC_PLL_OUT_MAX_HZ (240000000U) +#define BSP_FEATURE_CGC_PLL_OUT_MIN_HZ (120000000U) +#define BSP_FEATURE_CGC_PLL_REFERENCE_CLK_MAX_HZ (0) // Feature not available on this MCU +#define BSP_FEATURE_CGC_PLL_REFERENCE_CLK_MIN_HZ (0) // Feature not available on this MCU +#define BSP_FEATURE_CGC_PLL_SRC_MAX_HZ (24000000U) +#define BSP_FEATURE_CGC_PLL_SRC_MIN_HZ (8000000U) +#define BSP_FEATURE_CGC_REGISTER_SET_B (0) +#define BSP_FEATURE_CGC_SCKDIVCR2_HAS_EXTRA_CLOCKS (0) +#define BSP_FEATURE_CGC_SCKDIVCR_BCLK_MATCHES_PCLKB (0) +#define BSP_FEATURE_CGC_SODRV_MASK (0x02U) +#define BSP_FEATURE_CGC_SODRV_SHIFT (0x01U) +#define BSP_FEATURE_CGC_SRAMPRCR_KW_OFFSET (1) +#define BSP_FEATURE_CGC_SRAMPRCR_KW_VALUE (0x78) +#define BSP_FEATURE_CGC_STARTUP_OPCCR_MODE (0) +#define BSP_FEATURE_CGC_STARTUP_SCKDIVCR (0x22002222) +#define BSP_FEATURE_CGC_STARTUP_SCKDIVCR2 (0x00) +#define BSP_FEATURE_CGC_STARTUP_SCKSCR (0x01) + +#define BSP_FEATURE_CRC_HAS_CRCCR0_LMS (1) +#define BSP_FEATURE_CRC_HAS_SNOOP (0U) +#define BSP_FEATURE_CRC_POLYNOMIAL_MASK (0x3EU) +#define BSP_FEATURE_CRC_SNOOP_ADDRESS_TYPE_TDR (0x0U) + +#define BSP_FEATURE_CRYPTO_AES_IP_VERSION (0) +#define BSP_FEATURE_CRYPTO_HAS_AES (0) +#define BSP_FEATURE_CRYPTO_HAS_AES_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_CTR_DRBG (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC (0) +#define BSP_FEATURE_CRYPTO_HAS_ECC_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_HASH (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA (0) +#define BSP_FEATURE_CRYPTO_HAS_RSA_WRAPPED (0) +#define BSP_FEATURE_CRYPTO_HAS_RSIP7 (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_RSIP_E11A (0) // Feature not available on this MCU +#define BSP_FEATURE_CRYPTO_HAS_SCE5 (0) +#define BSP_FEATURE_CRYPTO_HAS_SCE5B (0) +#define BSP_FEATURE_CRYPTO_HAS_SCE7 (0) +#define BSP_FEATURE_CRYPTO_HAS_SCE9 (0) + +#define BSP_FEATURE_CTSU_CTSUCHAC_REGISTER_COUNT (0U) // Feature not available on this MCU +#define BSP_FEATURE_CTSU_CTSUCHTRC_REGISTER_COUNT (0U) // Feature not available on this MCU +#define BSP_FEATURE_CTSU_HAS_TXVSEL (0) // Feature not available on this MCU +#define BSP_FEATURE_CTSU_VERSION (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC8_HAS_CHARGEPUMP (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_DA_AD_SYNCHRONIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_HAS_REALTIME_MODE (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC8_MAX_CHANNELS (0) // Feature not available on this MCU + +#define BSP_FEATURE_DAC_AD_SYNC_UNIT_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_DAC_HAS_CHARGEPUMP (0U) +#define BSP_FEATURE_DAC_HAS_DAVREFCR (0U) +#define BSP_FEATURE_DAC_HAS_DA_AD_SYNCHRONIZE (1U) +#define BSP_FEATURE_DAC_HAS_INTERNAL_OUTPUT (0U) +#define BSP_FEATURE_DAC_HAS_OUTPUT_AMPLIFIER (1U) +#define BSP_FEATURE_DAC_MAX_CHANNELS (2U) + +#define BSP_FEATURE_DMAC_HAS_DELSR (0U) +#define BSP_FEATURE_DMAC_HAS_DMCTL (0U) // Feature not available on this MCU +#define BSP_FEATURE_DMAC_HAS_REPEAT_BLOCK_MODE (1U) +#define BSP_FEATURE_DMAC_MAX_CHANNEL (8U) + +#define BSP_FEATURE_DOC_VERSION (1U) + +#define BSP_FEATURE_DTC_TRANSFER_INFO_ALIGNMENT (4) + +#define BSP_FEATURE_DWT_CYCCNT (1U) // RA6E2 has Data Watchpoint Cycle Count Register + +#define BSP_FEATURE_ELC_VERSION (1U) + +#define BSP_FEATURE_ETHER_FIFO_DEPTH (0U) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_MAX_CHANNELS (0U) // Feature not available on this MCU +#define BSP_FEATURE_ETHER_SUPPORTS_TZ_SECURE (0) // Feature not available on this MCU + +#define BSP_FEATURE_FLASH_CODE_FLASH_START (0x0U) +#define BSP_FEATURE_FLASH_DATA_FLASH_START (0x08000000U) +#define BSP_FEATURE_FLASH_HP_CF_DUAL_BANK_START (0x0U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE (0x2000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION0_SIZE (0x10000U) +#define BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE (0x8000U) +#define BSP_FEATURE_FLASH_HP_CF_WRITE_SIZE (128U) +#define BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE (64U) +#define BSP_FEATURE_FLASH_HP_DF_WRITE_SIZE (4U) +#define BSP_FEATURE_FLASH_HP_HAS_FMEPROT (1) +#define BSP_FEATURE_FLASH_HP_SUPPORTS_DUAL_BANK (0) +#define BSP_FEATURE_FLASH_HP_VERSION (40U) +#define BSP_FEATURE_FLASH_LP_AWS_FAW_MASK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_AWS_FAW_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_DUAL_BANK_START (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_CF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_BLOCK_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_DF_WRITE_SIZE (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_FLASH_CLOCK_SRC (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_SUPPORTS_DUAL_BANK (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_LP_VERSION (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ACCESS_WINDOW (0) // Feature not available on this MCU +#define BSP_FEATURE_FLASH_SUPPORTS_ID_CODE (1) // Feature not available on this MCU + +#define BSP_FEATURE_GPT_32BIT_CHANNEL_MASK (0x00U) +#define BSP_FEATURE_GPT_CLOCK_DIVIDER_STEP_SIZE (2U) +#define BSP_FEATURE_GPT_CLOCK_DIVIDER_VALUE_7_9_VALID (0U) +#define BSP_FEATURE_GPT_ODC_FRANGE_FREQ_MIN (0U) // Feature not available on this MCU +#define BSP_FEATURE_GPT_ODC_FRANGE_SET_BIT(gpt_frequency) (0U) // Feature not available on this MCU +#define BSP_FEATURE_GPT_ODC_FREQ_MAX (0U) // Feature not available on this MCU +#define BSP_FEATURE_GPT_ODC_FREQ_MIN (0U) // Feature not available on this MCU +#define BSP_FEATURE_GPT_TPCS_SHIFT (0U) + +#define BSP_FEATURE_I3C_HAS_HDR_MODE (0U) // Feature not available on this MCU +#define BSP_FEATURE_I3C_MAX_DEV_COUNT (8U) +#define BSP_FEATURE_I3C_MSTP_OFFSET (4U) +#define BSP_FEATURE_I3C_NTDTBP0_DEPTH (16U) +#define BSP_FEATURE_I3C_NUM_CHANNELS (1U) + +#define BSP_FEATURE_ICU_FIXED_IELSR_COUNT (0U) +#define BSP_FEATURE_ICU_HAS_FILTER (1U) +#define BSP_FEATURE_ICU_HAS_IELSR (1U) +#define BSP_FEATURE_ICU_HAS_INTERRUPT_GROUPS (0U) +#define BSP_FEATURE_ICU_HAS_WUPEN1 (1U) +#define BSP_FEATURE_ICU_HAS_WUPEN2 (0U) // Feature not available on this MCU +#define BSP_FEATURE_ICU_IRQ_CHANNELS_MASK (0x7FFFU) +#define BSP_FEATURE_ICU_NMIER_MAX_INDEX (15U) // Max used index in NMIER +#define BSP_FEATURE_ICU_SBYEDCR_MASK (0U) // Feature not available on this MCU +#define BSP_FEATURE_ICU_WUPEN_MASK (0x8007B0D7FFFULL) // Note there is another WUPEN1 register + +#define BSP_FEATURE_IIC_BUS_FREE_TIME_MULTIPLIER (5U) +#define BSP_FEATURE_IIC_B_FAST_MODE_PLUS (0x01) +#define BSP_FEATURE_IIC_B_VALID_CHANNEL_MASK (0x01) +#define BSP_FEATURE_IIC_FAST_MODE_PLUS (0) +#define BSP_FEATURE_IIC_VALID_CHANNEL_MASK (0) +#define BSP_FEATURE_IIC_VERSION (2) + +#define BSP_FEATURE_IOPORT_ELC_PORTS (0x001EU) +#define BSP_FEATURE_IOPORT_VERSION (1U) + +#define BSP_FEATURE_IWDT_CLOCK_FREQUENCY (15000UL) +#define BSP_FEATURE_IWDT_SUPPORTS_REGISTER_START_MODE (0U) // Feature not available on this MCU + +#define BSP_FEATURE_KINT_HAS_MSTP (0U) + +#define BSP_FEATURE_LPM_CHANGE_MSTP_ARRAY (0U) +#define BSP_FEATURE_LPM_CHANGE_MSTP_REQUIRED (0U) +#define BSP_FEATURE_LPM_DPSIEGR_MASK (0x135FF3U) +#define BSP_FEATURE_LPM_DPSIER_MASK (0x051F5FF3U) +#define BSP_FEATURE_LPM_HAS_DEEP_SLEEP (0U) +#define BSP_FEATURE_LPM_HAS_DEEP_STANDBY (1U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DEEPCUT (1U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_DPSBY (1U) +#define BSP_FEATURE_LPM_HAS_DPSBYCR_SRKEEP (0U) +#define BSP_FEATURE_LPM_HAS_FLASH_MODE_SELECT (0U) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_HOCO_STARTUP_SPEED_MODE (0U) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_LDO_CONTROL (0U) +#define BSP_FEATURE_LPM_HAS_LPSCR (0U) +#define BSP_FEATURE_LPM_HAS_PDRAMSCR (0U) +#define BSP_FEATURE_LPM_HAS_SBYCR_OPE (0U) +#define BSP_FEATURE_LPM_HAS_SBYCR_SSBY (1U) +#define BSP_FEATURE_LPM_HAS_SNOOZE (1U) +#define BSP_FEATURE_LPM_HAS_SNZEDCR1 (0U) +#define BSP_FEATURE_LPM_HAS_SNZREQCR1 (0U) +#define BSP_FEATURE_LPM_HAS_STANDBY_SOSC_SELECT (0U) // Feature not available on this MCU +#define BSP_FEATURE_LPM_HAS_STCONR (0U) +#define BSP_FEATURE_LPM_RTC_REGISTER_CLOCK_DISABLE (0U) // Feature not available on this MCU +#define BSP_FEATURE_LPM_SBYCR_WRITE1_B14 (1U) +#define BSP_FEATURE_LPM_SNZEDCR_MASK (0x0000009FU) +#define BSP_FEATURE_LPM_SNZREQCR_MASK (0x73007FFFU) +#define BSP_FEATURE_LPM_STANDBY_MOCO_REQUIRED (0U) +#define BSP_FEATURE_LPM_STANDBY_MODE_CLEAR_DTCST (0U) // Feature not available on this MCU + +#define BSP_FEATURE_LVD_EXLVD_STABILIZATION_TIME_US (0) // Feature not available on this MCU +#define BSP_FEATURE_LVD_HAS_DIGITAL_FILTER (1U) +#define BSP_FEATURE_LVD_HAS_EXT_MONITOR (0U) +#define BSP_FEATURE_LVD_HAS_LVDLVLR (0U) +#define BSP_FEATURE_LVD_MONITOR_1_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_1_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_1_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_1_STABILIZATION_TIME_US (10U) // LVD1 operation stabilization time after LVD1 is enabled +#define BSP_FEATURE_LVD_MONITOR_2_HI_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_99V) // 2.99V +#define BSP_FEATURE_LVD_MONITOR_2_LOW_THRESHOLD (LVD_THRESHOLD_MONITOR_2_LEVEL_2_85V) // 2.85V +#define BSP_FEATURE_LVD_MONITOR_2_STABILIZATION_TIME_US (10U) // LVD2 operation stabilization time after LVD2 is enabled +#define BSP_FEATURE_LVD_SUPPORT_RESET_ON_RISING_EDGE (0U) +#define BSP_FEATURE_LVD_VBAT_STABILIZATION_TIME_US (0) // Feature not available on this MCU +#define BSP_FEATURE_LVD_VERSION (1U) +#define BSP_FEATURE_LVD_VRTC_STABILIZATION_TIME_US (0) // Feature not available on this MCU + +#define BSP_FEATURE_MACL_SUPPORTED (0U) + +#define BSP_FEATURE_OPAMP_BASE_ADDRESS (0U) +#define BSP_FEATURE_OPAMP_HAS_MIDDLE_SPEED (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_HAS_SWITCHES (0U) +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_HS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_LP_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_MIN_WAIT_TIME_MS_US (0) // Feature not available on this MCU +#define BSP_FEATURE_OPAMP_TRIM_CAPABLE (0U) +#define BSP_FEATURE_OPAMP_VARIANT_CHANNEL_MASK (0U) + +#define BSP_FEATURE_OSPI_B_DEVICE_0_START_ADDRESS (0) // Feature not available on this MCU +#define BSP_FEATURE_OSPI_B_DEVICE_1_START_ADDRESS (0) // Feature not available on this MCU +#define BSP_FEATURE_OSPI_DEVICE_0_START_ADDRESS (0x0U) +#define BSP_FEATURE_OSPI_DEVICE_1_START_ADDRESS (0x0U) + +#define BSP_FEATURE_POEG_CHANNEL_MASK (0xFU) + +#define BSP_FEATURE_QSPI_DEVICE_START_ADDRESS (0x60000000U) + +#define BSP_FEATURE_RTC_HAS_ROPSEL (0U) +#define BSP_FEATURE_RTC_HAS_TCEN (1U) +#define BSP_FEATURE_RTC_IS_AVAILABLE (1U) +#define BSP_FEATURE_RTC_IS_IRTC (0U) +#define BSP_FEATURE_RTC_RTCCR_CHANNELS (2U) + +#define BSP_FEATURE_SAU_UART_VALID_CHANNEL_MASK (0U) // Feature not available on this MCU + +#define BSP_FEATURE_SCI_ADDRESS_MATCH_CHANNELS (0x201U) +#define BSP_FEATURE_SCI_CHANNELS (0x201U) +#define BSP_FEATURE_SCI_CLOCK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SCI_LIN_CHANNELS (0U) // Feature not available on this MCU +#define BSP_FEATURE_SCI_SPI_SCKSEL_VALUE (0U) // Feature not available on this MCU +#define BSP_FEATURE_SCI_UART_ABCSE_RESTRICTED_CHANNELS (0U) +#define BSP_FEATURE_SCI_UART_CSTPEN_CHANNELS (0x201U) +#define BSP_FEATURE_SCI_UART_DE_IS_INVERTED (0) // Feature not available on this MCU +#define BSP_FEATURE_SCI_UART_FIFO_CHANNELS (0x201U) +#define BSP_FEATURE_SCI_UART_FIFO_DEPTH (16U) +#define BSP_FEATURE_SCI_VERSION (1U) + +#define BSP_FEATURE_SDHI_CLOCK (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_HAS_CARD_DETECTION (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_MIN_CLOCK_DIVISION_SHIFT (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_SUPPORTS_8_BIT_MMC (0) // Feature not available on this MCU +#define BSP_FEATURE_SDHI_VALID_CHANNEL_MASK (0) // Feature not available on this MCU + +#define BSP_FEATURE_SDRAM_START_ADDRESS (0x0U) + +#define BSP_FEATURE_SLCDC_CONTRAST_MAX (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_CONTRAST_MAX_4BIAS (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_8_TIME_SLICE (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_INTERNAL_VOLT_GEN (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_HAS_VL1SEL (0) // Feature not available on this MCU +#define BSP_FEATURE_SLCDC_MAX_NUM_SEG (0) // Feature not available on this MCU + +#define BSP_FEATURE_SPI_CLK (FSP_PRIV_CLOCK_PCLKA) +#define BSP_FEATURE_SPI_HAS_SPCR3 (1U) +#define BSP_FEATURE_SPI_HAS_SSL_LEVEL_KEEP (1U) +#define BSP_FEATURE_SPI_MAX_CHANNEL (2U) +#define BSP_FEATURE_SPI_SSL_LEVEL_KEEP_VALID_CHANNEL_MASK (0x3U) + +#define BSP_FEATURE_SRAM_SRAMWTSC_WAIT_CYCLE_ENABLE (0x01U) + +#define BSP_FEATURE_SSI_FIFO_NUM_STAGES (32U) +#define BSP_FEATURE_SSI_VALID_CHANNEL_MASK (0x01U) + +#define BSP_FEATURE_SYSC_HAS_VBTICTLR (0U) + +#define BSP_FEATURE_TAU_VALID_CHANNEL_MASK (0) // Feature not available on this MCU + +#define BSP_FEATURE_TFU_SUPPORTED (0U) + +#define BSP_FEATURE_TML_MAX_CLOCK_DIVIDER (0U) // Feature not available on this MCU +#define BSP_FEATURE_TML_NUM_CHANNELS (0) // Feature not available on this MCU +#define BSP_FEATURE_TML_VALID_CHANNEL_MASK (0U) // Feature not available on this MCU + +#define BSP_FEATURE_TRNG_HAS_MODULE_STOP (1U) + +#define BSP_FEATURE_TZ_HAS_DLM (0U) +#define BSP_FEATURE_TZ_HAS_TRUSTZONE (1U) +#define BSP_FEATURE_TZ_NS_OFFSET (0U) +#define BSP_FEATURE_TZ_VERSION (1U) + +#define BSP_FEATURE_UARTA_HAS_CLOCK_OUTPUT (0) // Feature not available on this MCU +#define BSP_FEATURE_UARTA_MSTP_OFFSET (0) // Feature not available on this MCU +#define BSP_FEATURE_UARTA_PCLK_RESTRICTION (0U) // Feature not available on this MCU + +#define BSP_FEATURE_ULPT_MAX_CHANNEL_NUM (0) +#define BSP_FEATURE_ULPT_VALID_CHANNEL_MASK (0U) + +#define BSP_FEATURE_USB_HAS_NOT_HOST (1U) +#define BSP_FEATURE_USB_HAS_PIPE04567 (1U) +#define BSP_FEATURE_USB_HAS_TYPEC (0) // Feature not available on this MCU +#define BSP_FEATURE_USB_HAS_USBFS (1U) +#define BSP_FEATURE_USB_HAS_USBFS_BC (0U) +#define BSP_FEATURE_USB_HAS_USBHS (0U) +#define BSP_FEATURE_USB_HAS_USBHS_BC (0U) +#define BSP_FEATURE_USB_HAS_USBLS_PERI (0U) +#define BSP_FEATURE_USB_REG_PHYSECTRL_CNEN (1U) // For USB Full-speed module +#define BSP_FEATURE_USB_REG_PHYSLEW (0U) +#define BSP_FEATURE_USB_REG_PHYSLEW_VALUE (0U) +#define BSP_FEATURE_USB_REG_UCKSEL_UCKSELC (0U) +#define BSP_FEATURE_USB_REG_USBMC_VDCEN (0U) +#define BSP_FEATURE_USB_REG_USBMC_VDDUSBE (0U) + +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h new file mode 100644 index 00000000000..bc33032f258 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_feature_gen.h @@ -0,0 +1,405 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +#ifndef BSP_FEATURE_GEN_H +#define BSP_FEATURE_GEN_H + +/*********************************************************************************************************************** + * Includes , "Project Includes" + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Macro definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Typedef definitions + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Exported global variables (to be accessed by other files) + **********************************************************************************************************************/ + +/*********************************************************************************************************************** + * Private global variables and functions + **********************************************************************************************************************/ + +// *UNCRUSTIFY-OFF* +#define BSP_FEATURE_GPT_AD_DIRECT_START_CHANNEL_MASK (0) +#define BSP_FEATURE_GPT_AD_DIRECT_START_SUPPORTED (0) +#define BSP_FEATURE_GPT_EVENT_COUNT_CHANNEL_MASK (0x3F) +#define BSP_FEATURE_GPT_EVENT_COUNT_SUPPORTED (1) +#define BSP_FEATURE_GPT_GPTE_CHANNEL_MASK (0x3F) +#define BSP_FEATURE_GPT_GPTE_SUPPORTED (1) +#define BSP_FEATURE_GPT_GPTEH_CHANNEL_MASK (0) +#define BSP_FEATURE_GPT_GPTEH_SUPPORTED (0) +#define BSP_FEATURE_GPT_GTDVU_CHANNEL_MASK (0x3F) +#define BSP_FEATURE_GPT_GTDVU_SUPPORTED (1) +#define BSP_FEATURE_GPT_OPS_CHANNEL_MASK (0x1) +#define BSP_FEATURE_GPT_OPS_SUPPORTED (1) + +#define BSP_PERIPHERAL_ACMP_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ACMP_PRESENT (0) +#define BSP_PERIPHERAL_ACMPHS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ACMPHS_PRESENT (0) +#define BSP_PERIPHERAL_ACMPHS_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ACMPHS_NS_PRESENT (0) +#define BSP_PERIPHERAL_ACMPLP_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ACMPLP_PRESENT (0) +#define BSP_PERIPHERAL_ADC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_ADC_PRESENT (1) +#define BSP_PERIPHERAL_ADC_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ADC_B_PRESENT (0) +#define BSP_PERIPHERAL_ADC_D_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ADC_D_PRESENT (0) +#define BSP_PERIPHERAL_AES_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_AES_PRESENT (0) +#define BSP_PERIPHERAL_AGT_CHANNEL_MASK (0x3) +#define BSP_PERIPHERAL_AGT_PRESENT (1) +#define BSP_PERIPHERAL_AGTW_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_AGTW_PRESENT (0) +#define BSP_PERIPHERAL_AMI_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_AMI_PRESENT (0) +#define BSP_PERIPHERAL_ANALOG_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_ANALOG_PRESENT (1) +#define BSP_PERIPHERAL_BUS_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_BUS_PRESENT (1) +#define BSP_PERIPHERAL_BUS_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_BUS_NS_PRESENT (0) +#define BSP_PERIPHERAL_CAC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CAC_PRESENT (1) +#define BSP_PERIPHERAL_CAC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CAC_NS_PRESENT (0) +#define BSP_PERIPHERAL_CACHE_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CACHE_PRESENT (1) +#define BSP_PERIPHERAL_CAN_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CAN_PRESENT (0) +#define BSP_PERIPHERAL_CANFD_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CANFD_PRESENT (1) +#define BSP_PERIPHERAL_CEC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CEC_PRESENT (1) +#define BSP_PERIPHERAL_CEU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CEU_PRESENT (0) +#define BSP_PERIPHERAL_CEU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CEU_NS_PRESENT (0) +#define BSP_PERIPHERAL_CGC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CGC_PRESENT (1) +#define BSP_PERIPHERAL_CPSCU_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CPSCU_PRESENT (1) +#define BSP_PERIPHERAL_CPSCU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CPSCU_NS_PRESENT (0) +#define BSP_PERIPHERAL_CPU_CTRL_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CPU_CTRL_NS_PRESENT (0) +#define BSP_PERIPHERAL_CRC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_CRC_PRESENT (1) +#define BSP_PERIPHERAL_CRC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CRC_NS_PRESENT (0) +#define BSP_PERIPHERAL_CTSU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_CTSU_PRESENT (0) +#define BSP_PERIPHERAL_DAC8_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DAC8_PRESENT (0) +#define BSP_PERIPHERAL_DAC12_CHANNEL_MASK (0x3) +#define BSP_PERIPHERAL_DAC12_PRESENT (1) +#define BSP_PERIPHERAL_DAC_CHANNEL_MASK (0x3) +#define BSP_PERIPHERAL_DAC_PRESENT (1) +#define BSP_PERIPHERAL_DEBUG_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_DEBUG_PRESENT (1) +#define BSP_PERIPHERAL_DEBUG_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DEBUG_NS_PRESENT (0) +#define BSP_PERIPHERAL_DMA_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_DMA_PRESENT (1) +#define BSP_PERIPHERAL_DMA_DMAC_CHANNEL_MASK (0xFF) +#define BSP_PERIPHERAL_DMA_DMAC_PRESENT (1) +#define BSP_PERIPHERAL_DMA_DMAC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DMA_DMAC_NS_PRESENT (0) +#define BSP_PERIPHERAL_DMA_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DMA_NS_PRESENT (0) +#define BSP_PERIPHERAL_DOC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_DOC_PRESENT (1) +#define BSP_PERIPHERAL_DOC_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DOC_B_PRESENT (0) +#define BSP_PERIPHERAL_DOC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DOC_NS_PRESENT (0) +#define BSP_PERIPHERAL_DPHYCNT_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DPHYCNT_PRESENT (0) +#define BSP_PERIPHERAL_DPHYCNT_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DPHYCNT_NS_PRESENT (0) +#define BSP_PERIPHERAL_DRW_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DRW_PRESENT (0) +#define BSP_PERIPHERAL_DRW_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DRW_NS_PRESENT (0) +#define BSP_PERIPHERAL_DSILINK_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DSILINK_PRESENT (0) +#define BSP_PERIPHERAL_DSILINK_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DSILINK_NS_PRESENT (0) +#define BSP_PERIPHERAL_DTC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_DTC_PRESENT (1) +#define BSP_PERIPHERAL_DTC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_DTC_NS_PRESENT (0) +#define BSP_PERIPHERAL_ECCAFL_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ECCAFL_PRESENT (0) +#define BSP_PERIPHERAL_ECCMB_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ECCMB_PRESENT (0) +#define BSP_PERIPHERAL_ECCMB_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ECCMB_NS_PRESENT (0) +#define BSP_PERIPHERAL_ELC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_ELC_PRESENT (1) +#define BSP_PERIPHERAL_ELC_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ELC_B_PRESENT (0) +#define BSP_PERIPHERAL_ELC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ELC_NS_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EDMAC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_EDMAC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EDMAC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_EDMAC_NS_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EPTPC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_EPTPC_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_EPTPC_CFG_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_EPTPC_CFG_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_MII_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_MII_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_NS_PRESENT (0) +#define BSP_PERIPHERAL_ETHERC_RMII_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ETHERC_RMII_PRESENT (0) +#define BSP_PERIPHERAL_FACI_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_FACI_PRESENT (1) +#define BSP_PERIPHERAL_FACI_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_FACI_NS_PRESENT (0) +#define BSP_PERIPHERAL_FCACHE_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_FCACHE_PRESENT (1) +#define BSP_PERIPHERAL_FCACHE_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_FCACHE_NS_PRESENT (0) +#define BSP_PERIPHERAL_FLAD_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_FLAD_PRESENT (1) +#define BSP_PERIPHERAL_FLAD_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_FLAD_NS_PRESENT (0) +#define BSP_PERIPHERAL_FLASH_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_FLASH_PRESENT (1) +#define BSP_PERIPHERAL_FLASH_HP_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_FLASH_HP_PRESENT (1) +#define BSP_PERIPHERAL_FLASH_LP_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_FLASH_LP_PRESENT (0) +#define BSP_PERIPHERAL_GLCDC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GLCDC_PRESENT (0) +#define BSP_PERIPHERAL_GLCDC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GLCDC_NS_PRESENT (0) +#define BSP_PERIPHERAL_GPT_CHANNEL_MASK (0x3F) +#define BSP_PERIPHERAL_GPT_PRESENT (1) +#define BSP_PERIPHERAL_GPT_GTCLK_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GPT_GTCLK_PRESENT (0) +#define BSP_PERIPHERAL_GPT_ODC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GPT_ODC_PRESENT (0) +#define BSP_PERIPHERAL_GPT_OPS_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_GPT_OPS_PRESENT (1) +#define BSP_PERIPHERAL_GPT_OPS_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GPT_OPS_NS_PRESENT (0) +#define BSP_PERIPHERAL_GPT_POEG_CHANNEL_MASK (0xF) +#define BSP_PERIPHERAL_GPT_POEG_PRESENT (1) +#define BSP_PERIPHERAL_GPT_POEG_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_GPT_POEG_NS_PRESENT (0) +#define BSP_PERIPHERAL_I3C_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_I3C_PRESENT (1) +#define BSP_PERIPHERAL_I3C_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_I3C_NS_PRESENT (0) +#define BSP_PERIPHERAL_ICU_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_ICU_PRESENT (1) +#define BSP_PERIPHERAL_ICU_EXT_IRQ_CHANNEL_MASK (0x7FFF) +#define BSP_PERIPHERAL_ICU_EXT_IRQ_PRESENT (1) +#define BSP_PERIPHERAL_ICU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ICU_NS_PRESENT (0) +#define BSP_PERIPHERAL_IIC0WU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC0WU_PRESENT (0) +#define BSP_PERIPHERAL_IIC0WU_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC0WU_B_PRESENT (0) +#define BSP_PERIPHERAL_IIC0WU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC0WU_NS_PRESENT (0) +#define BSP_PERIPHERAL_IIC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC_PRESENT (0) +#define BSP_PERIPHERAL_IIC_B_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_IIC_B_PRESENT (1) +#define BSP_PERIPHERAL_IIC_B_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC_B_NS_PRESENT (0) +#define BSP_PERIPHERAL_IIC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIC_NS_PRESENT (0) +#define BSP_PERIPHERAL_IICA_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IICA_PRESENT (0) +#define BSP_PERIPHERAL_IIRFA_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IIRFA_PRESENT (0) +#define BSP_PERIPHERAL_IRDA_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IRDA_PRESENT (0) +#define BSP_PERIPHERAL_IRTC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IRTC_PRESENT (0) +#define BSP_PERIPHERAL_IWDT_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_IWDT_PRESENT (1) +#define BSP_PERIPHERAL_IWDT_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_IWDT_NS_PRESENT (0) +#define BSP_PERIPHERAL_JPEG_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_JPEG_PRESENT (0) +#define BSP_PERIPHERAL_KINT_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_KINT_PRESENT (0) +#define BSP_PERIPHERAL_MACL_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_MACL_PRESENT (0) +#define BSP_PERIPHERAL_MIPI_DSI_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_MIPI_DSI_PRESENT (0) +#define BSP_PERIPHERAL_MMF_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_MMF_PRESENT (0) +#define BSP_PERIPHERAL_MPU_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_MPU_PRESENT (1) +#define BSP_PERIPHERAL_MPU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_MPU_NS_PRESENT (0) +#define BSP_PERIPHERAL_MSTP_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_MSTP_PRESENT (1) +#define BSP_PERIPHERAL_MSTP_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_MSTP_NS_PRESENT (0) +#define BSP_PERIPHERAL_OCD_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OCD_PRESENT (0) +#define BSP_PERIPHERAL_OCD_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OCD_NS_PRESENT (0) +#define BSP_PERIPHERAL_OPAMP_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OPAMP_PRESENT (0) +#define BSP_PERIPHERAL_OSPI_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OSPI_PRESENT (0) +#define BSP_PERIPHERAL_OSPI_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OSPI_B_PRESENT (0) +#define BSP_PERIPHERAL_OSPI_B_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_OSPI_B_NS_PRESENT (0) +#define BSP_PERIPHERAL_PCLBUZ_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PCLBUZ_PRESENT (0) +#define BSP_PERIPHERAL_PDC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PDC_PRESENT (0) +#define BSP_PERIPHERAL_PDG_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PDG_PRESENT (0) +#define BSP_PERIPHERAL_PFS_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_PFS_PRESENT (1) +#define BSP_PERIPHERAL_PFS_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PFS_B_PRESENT (0) +#define BSP_PERIPHERAL_PFS_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PFS_NS_PRESENT (0) +#define BSP_PERIPHERAL_PMISC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PMISC_PRESENT (0) +#define BSP_PERIPHERAL_PORGA_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PORGA_PRESENT (0) +#define BSP_PERIPHERAL_PORT_CHANNEL_MASK (0x13F) +#define BSP_PERIPHERAL_PORT_PRESENT (1) +#define BSP_PERIPHERAL_PORT_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PORT_NS_PRESENT (0) +#define BSP_PERIPHERAL_PSCU_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_PSCU_PRESENT (1) +#define BSP_PERIPHERAL_PSCU_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PSCU_NS_PRESENT (0) +#define BSP_PERIPHERAL_PTPEDMAC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_PTPEDMAC_PRESENT (0) +#define BSP_PERIPHERAL_QSPI_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_QSPI_PRESENT (1) +#define BSP_PERIPHERAL_RADIO_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_RADIO_PRESENT (0) +#define BSP_PERIPHERAL_RTC_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_RTC_PRESENT (1) +#define BSP_PERIPHERAL_RTC_C_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_RTC_C_PRESENT (0) +#define BSP_PERIPHERAL_RTC_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_RTC_NS_PRESENT (0) +#define BSP_PERIPHERAL_SAU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SAU_PRESENT (0) +#define BSP_PERIPHERAL_SAU_I2C_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SAU_I2C_PRESENT (0) +#define BSP_PERIPHERAL_SAU_SPI_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SAU_SPI_PRESENT (0) +#define BSP_PERIPHERAL_SAU_UART_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SAU_UART_PRESENT (0) +#define BSP_PERIPHERAL_SCE5_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCE5_PRESENT (0) +#define BSP_PERIPHERAL_SCE7_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCE7_PRESENT (0) +#define BSP_PERIPHERAL_SCE9_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCE9_PRESENT (0) +#define BSP_PERIPHERAL_SCE_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCE_PRESENT (0) +#define BSP_PERIPHERAL_SCI_CHANNEL_MASK (0x201) +#define BSP_PERIPHERAL_SCI_PRESENT (1) +#define BSP_PERIPHERAL_SCI_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCI_B_PRESENT (0) +#define BSP_PERIPHERAL_SCI_B_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SCI_B_NS_PRESENT (0) +#define BSP_PERIPHERAL_SDADC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SDADC_PRESENT (0) +#define BSP_PERIPHERAL_SDADC_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SDADC_B_PRESENT (0) +#define BSP_PERIPHERAL_SDHI_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SDHI_PRESENT (0) +#define BSP_PERIPHERAL_SDHI_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SDHI_NS_PRESENT (0) +#define BSP_PERIPHERAL_SLCDC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SLCDC_PRESENT (0) +#define BSP_PERIPHERAL_SPI_CHANNEL_MASK (0x3) +#define BSP_PERIPHERAL_SPI_PRESENT (1) +#define BSP_PERIPHERAL_SPI_B_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SPI_B_PRESENT (0) +#define BSP_PERIPHERAL_SPI_B_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SPI_B_NS_PRESENT (0) +#define BSP_PERIPHERAL_SPMON_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SPMON_PRESENT (0) +#define BSP_PERIPHERAL_SRAM_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_SRAM_PRESENT (1) +#define BSP_PERIPHERAL_SRAM_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SRAM_NS_PRESENT (0) +#define BSP_PERIPHERAL_SRC_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SRC_PRESENT (0) +#define BSP_PERIPHERAL_SRCRAM_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SRCRAM_PRESENT (0) +#define BSP_PERIPHERAL_SSI_COMMON_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_SSI_COMMON_PRESENT (1) +#define BSP_PERIPHERAL_SSIE_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_SSIE_PRESENT (1) +#define BSP_PERIPHERAL_SSIE_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SSIE_NS_PRESENT (0) +#define BSP_PERIPHERAL_SYSTEM_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_SYSTEM_PRESENT (1) +#define BSP_PERIPHERAL_SYSTEM_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_SYSTEM_NS_PRESENT (0) +#define BSP_PERIPHERAL_TAU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TAU_PRESENT (0) +#define BSP_PERIPHERAL_TFU_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TFU_PRESENT (0) +#define BSP_PERIPHERAL_TML_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TML_PRESENT (0) +#define BSP_PERIPHERAL_TRNG_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TRNG_PRESENT (0) +#define BSP_PERIPHERAL_TSD_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_TSD_PRESENT (1) +#define BSP_PERIPHERAL_TSD_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TSD_NS_PRESENT (0) +#define BSP_PERIPHERAL_TSN_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_TSN_PRESENT (1) +#define BSP_PERIPHERAL_TSN_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TSN_NS_PRESENT (0) +#define BSP_PERIPHERAL_TZF_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_TZF_PRESENT (1) +#define BSP_PERIPHERAL_TZF_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_TZF_NS_PRESENT (0) +#define BSP_PERIPHERAL_UARTA_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_UARTA_PRESENT (0) +#define BSP_PERIPHERAL_UARTA_CK_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_UARTA_CK_PRESENT (0) +#define BSP_PERIPHERAL_ULPT_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ULPT_PRESENT (0) +#define BSP_PERIPHERAL_ULPT_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_ULPT_NS_PRESENT (0) +#define BSP_PERIPHERAL_USB_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_USB_PRESENT (1) +#define BSP_PERIPHERAL_USB_FS_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_USB_FS_PRESENT (1) +#define BSP_PERIPHERAL_USB_HS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_USB_HS_PRESENT (0) +#define BSP_PERIPHERAL_WDT_CHANNEL_MASK (0x1) +#define BSP_PERIPHERAL_WDT_PRESENT (1) +#define BSP_PERIPHERAL_WDT_NS_CHANNEL_MASK (0) +#define BSP_PERIPHERAL_WDT_NS_PRESENT (0) +// *UNCRUSTIFY-ON* +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h new file mode 100644 index 00000000000..6af370f95a2 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/bsp/mcu/ra6e2/bsp_mcu_info.h @@ -0,0 +1,44 @@ +/* +* Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates +* +* SPDX-License-Identifier: BSD-3-Clause +*/ + +/*******************************************************************************************************************//** + * @ingroup BSP_MCU + * @defgroup BSP_MCU_RA6E2 RA6E2 + * @includedoc config_bsp_ra6e2_fsp.html + * @{ + **********************************************************************************************************************/ + +/** @} (end defgroup BSP_MCU_RA6E2) */ + +#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 diff --git a/bsp/renesas/ra6e2-fpb/ra/fsp/src/r_ioport/r_ioport.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/r_ioport/r_ioport.c new file mode 100644 index 00000000000..ae37880c27c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/r_ioport/r_ioport.c @@ -0,0 +1,962 @@ +/* +* Copyright (c) 2020 - 2024 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/ra6e2-fpb/ra/fsp/src/r_sci_uart/r_sci_uart.c b/bsp/renesas/ra6e2-fpb/ra/fsp/src/r_sci_uart/r_sci_uart.c new file mode 100644 index 00000000000..e9f6962eba7 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra/fsp/src/r_sci_uart/r_sci_uart.c @@ -0,0 +1,2008 @@ +/* +* Copyright (c) 2020 - 2024 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 + **********************************************************************************************************************/ + +/* Name of module used by error logger macro */ +#if BSP_CFG_ERROR_LOG != 0 +static const char g_module_name[] = "sci_uart"; +#endif + +/* 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, +}; + +/*******************************************************************************************************************//** + * @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_PERIPHERAL_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 * 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 acheivable with 16 base clk cycles per bit. + * if select_16_base_clk_cycles == false: Skip this calculation for divisors that are only acheivable 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; +} + +/*******************************************************************************************************************//** + * @} (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/ra6e2-fpb/ra_cfg/SConscript b/bsp/renesas/ra6e2-fpb/ra_cfg/SConscript new file mode 100644 index 00000000000..21af4711c50 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/board_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/board_cfg.h new file mode 100644 index 00000000000..fa3a5d69a9d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2_fpb/board.h" +#endif /* BOARD_CFG_H_ */ diff --git a/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_cfg.h new file mode 100644 index 00000000000..99f81e7867e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_cfg.h @@ -0,0 +1,62 @@ +/* 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 "board_cfg.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_ERROR_LOG (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 (0) + #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/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_cfg.h new file mode 100644 index 00000000000..bd6a901c32d --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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 (6) +#endif /* BSP_MCU_DEVICE_CFG_H_ */ diff --git a/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h new file mode 100644 index 00000000000..c095c488470 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_device_pn_cfg.h @@ -0,0 +1,11 @@ +/* generated configuration header file - do not edit */ +#ifndef BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_DEVICE_PN_CFG_H_ +#define BSP_MCU_R7FA6E2BB3CFM + #define BSP_MCU_FEATURE_SET ('B') + #define BSP_ROM_SIZE_BYTES (262144) + #define BSP_RAM_SIZE_BYTES (40960) + #define BSP_DATA_FLASH_SIZE_BYTES (4096) + #define BSP_PACKAGE_LQFP + #define BSP_PACKAGE_PINS (64) +#endif /* BSP_MCU_DEVICE_PN_CFG_H_ */ diff --git a/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h new file mode 100644 index 00000000000..2770e3a12e9 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_mcu_family_cfg.h @@ -0,0 +1,377 @@ +/* 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/ra6e2/bsp_mcu_info.h" + #include "bsp_clock_cfg.h" + #define BSP_MCU_GROUP_RA6E2 (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 (16000000) + #elif BSP_CFG_HOCO_FREQUENCY == 1 + #define BSP_HOCO_HZ (18000000) + #elif BSP_CFG_HOCO_FREQUENCY == 2 + #define BSP_HOCO_HZ (20000000) + #else + #error "Invalid HOCO frequency chosen (BSP_CFG_HOCO_FREQUENCY) in bsp_clock_cfg.h" + #endif + + #define BSP_CFG_FLL_ENABLE (0) + + #define BSP_CORTEX_VECTOR_TABLE_ENTRIES (16U) + #define BSP_VECTOR_TABLE_MAX_ENTRIES (112U) + #define BSP_CFG_INLINE_IRQ_FUNCTIONS (1) + + #if defined(_RA_TZ_SECURE) + #define BSP_TZ_SECURE_BUILD (1) + #define BSP_TZ_NONSECURE_BUILD (0) + #elif defined(_RA_TZ_NONSECURE) + #define BSP_TZ_SECURE_BUILD (0) + #define BSP_TZ_NONSECURE_BUILD (1) + #else + #define BSP_TZ_SECURE_BUILD (0) + #define BSP_TZ_NONSECURE_BUILD (0) + #endif + + /* TrustZone Settings */ + #define BSP_TZ_CFG_INIT_SECURE_ONLY (BSP_CFG_CLOCKS_SECURE || (!BSP_CFG_CLOCKS_OVERRIDE)) + #define BSP_TZ_CFG_SKIP_INIT (BSP_TZ_NONSECURE_BUILD && BSP_TZ_CFG_INIT_SECURE_ONLY) + #define BSP_TZ_CFG_EXCEPTION_RESPONSE (0) + + /* CMSIS TrustZone Settings */ + #define SCB_CSR_AIRCR_INIT (1) + #define SCB_AIRCR_BFHFNMINS_VAL (0) + #define SCB_AIRCR_SYSRESETREQS_VAL (1) + #define SCB_AIRCR_PRIS_VAL (0) + #define TZ_FPU_NS_USAGE (1) +#ifndef SCB_NSACR_CP10_11_VAL + #define SCB_NSACR_CP10_11_VAL (3U) +#endif + +#ifndef FPU_FPCCR_TS_VAL + #define FPU_FPCCR_TS_VAL (1U) +#endif + #define FPU_FPCCR_CLRONRETS_VAL (1) + +#ifndef FPU_FPCCR_CLRONRET_VAL + #define FPU_FPCCR_CLRONRET_VAL (1) +#endif + + /* The C-Cache line size that is configured during startup. */ +#ifndef BSP_CFG_C_CACHE_LINE_SIZE + #define BSP_CFG_C_CACHE_LINE_SIZE (1U) +#endif + + /* Type 1 Peripheral Security Attribution */ + + /* Peripheral Security Attribution Register (PSAR) Settings */ +#ifndef BSP_TZ_CFG_PSARB +#define BSP_TZ_CFG_PSARB (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3) /* CEC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4) /* I3C0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* USBFS */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 18) /* SPI1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 19) /* SPI0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* SCI9 */ | \ + (((1 > 0) ? 0U : 1U) << 31) /* SCI0 */ | \ + 0x7FB3F7E7U) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARC +#define BSP_TZ_CFG_PSARC (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* CAC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* CRC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8) /* SSIE0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* DOC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* CANFD0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* TRNG */ | \ + 0xE7FFDEFC) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARD +#define BSP_TZ_CFG_PSARD (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* AGT1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3) /* AGT0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11) /* POEG3 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12) /* POEG2 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13) /* POEG1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14) /* POEG0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 16) /* ADC0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 20) /* DAC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 22) /* TSN */ | \ + 0xFFAE87F3) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_PSARE +#define BSP_TZ_CFG_PSARE (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* WDT */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* IWDT */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2) /* RTC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 26) /* GPT5 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 27) /* GPT4 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 28) /* GPT3 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 29) /* GPT2 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 30) /* GPT1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 31) /* GPT0 */ | \ + 0x03FFFFF8) /* Unused */ +#endif +#ifndef BSP_TZ_CFG_MSSAR +#define BSP_TZ_CFG_MSSAR (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) /* ELC */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) /* DTC_DMAC */ | \ + 0xfffffffc) /* Unused */ +#endif + + /* Type 2 Peripheral Security Attribution */ + + /* Security attribution for Cache registers. */ +#ifndef BSP_TZ_CFG_CSAR +#define BSP_TZ_CFG_CSAR (0xFFFFFFFFU) +#endif + + /* Security attribution for RSTSRn registers. */ +#ifndef BSP_TZ_CFG_RSTSAR +#define BSP_TZ_CFG_RSTSAR (0xFFFFFFFFU) +#endif + + /* Security attribution for registers of LVD channels. */ +#ifndef BSP_TZ_CFG_LVDSAR +#define BSP_TZ_CFG_LVDSAR (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0) | /* LVD Channel 1 */ \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1) | /* LVD Channel 2 */ \ + 0xFFFFFFFCU) +#endif + + /* Security attribution for LPM registers. */ +#ifndef BSP_TZ_CFG_LPMSAR +#define BSP_TZ_CFG_LPMSAR ((RA_NOT_DEFINED > 0) ? 0xFFFFDCEAU : 0xFFFFFFFFU) +#endif + /* Deep Standby Interrupt Factor Security Attribution Register. */ +#ifndef BSP_TZ_CFG_DPFSAR +#define BSP_TZ_CFG_DPFSAR ((RA_NOT_DEFINED > 0) ? 0xFAE0A00CU : 0xFFFFFFFFU) +#endif + + /* Security attribution for CGC registers. */ +#ifndef BSP_TZ_CFG_CGFSAR +#if BSP_CFG_CLOCKS_SECURE +/* Protect all CGC registers from Non-secure write access. */ +#define BSP_TZ_CFG_CGFSAR (0xFFEAF602U) +#else +/* Allow Secure and Non-secure write access. */ +#define BSP_TZ_CFG_CGFSAR (0xFFFFFFFFU) +#endif +#endif + + /* Security attribution for Battery Backup registers. */ +#ifndef BSP_TZ_CFG_BBFSAR +#define BSP_TZ_CFG_BBFSAR (0x00FFFFFF) +#endif + + /* Security attribution for registers for IRQ channels. */ +#ifndef BSP_TZ_CFG_ICUSARA +#define BSP_TZ_CFG_ICUSARA (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* External IRQ0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* External IRQ1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* External IRQ2 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* External IRQ3 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* External IRQ4 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* External IRQ5 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* External IRQ6 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* External IRQ7 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 8U) /* External IRQ8 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 9U) /* External IRQ9 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 10U) /* External IRQ10 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 11U) /* External IRQ11 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 12U) /* External IRQ12 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 13U) /* External IRQ13 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 14U) /* External IRQ14 */ | \ + 0xFFFF8000U) +#endif + + /* Security attribution for NMI registers. */ +#ifndef BSP_TZ_CFG_ICUSARB +#define BSP_TZ_CFG_ICUSARB (0 | 0xFFFFFFFEU) /* Should match AIRCR.BFHFNMINS. */ +#endif + + /* Security attribution for registers for DMAC channels */ +#ifndef BSP_TZ_CFG_ICUSARC +#define BSP_TZ_CFG_ICUSARC (\ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 0U) /* DMAC Channel 0 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 1U) /* DMAC Channel 1 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 2U) /* DMAC Channel 2 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 3U) /* DMAC Channel 3 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 4U) /* DMAC Channel 4 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 5U) /* DMAC Channel 5 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 6U) /* DMAC Channel 6 */ | \ + (((RA_NOT_DEFINED > 0) ? 0U : 1U) << 7U) /* DMAC Channel 7 */ | \ + 0xFFFFFF00U) +#endif + + /* Security attribution registers for SELSR0. */ +#ifndef BSP_TZ_CFG_ICUSARD +#define BSP_TZ_CFG_ICUSARD ((RA_NOT_DEFINED > 0) ? 0xFFFFFFFEU : 0xFFFFFFFFU) +#endif + + /* Security attribution registers for WUPEN0. */ +#ifndef BSP_TZ_CFG_ICUSARE +#define BSP_TZ_CFG_ICUSARE ((RA_NOT_DEFINED > 0) ? 0x84F2FFFFU : 0xFFFFFFFFU) +#endif + + /* Security attribution registers for WUPEN1. */ +#ifndef BSP_TZ_CFG_ICUSARF +#define BSP_TZ_CFG_ICUSARF ((RA_NOT_DEFINED > 0) ? 0xFFFFF7FFU : 0xFFFFFFFFU) +#endif + + /* Set DTCSTSAR if the Secure program uses the DTC. */ +#if RA_NOT_DEFINED == RA_NOT_DEFINED + #define BSP_TZ_CFG_DTC_USED (0U) +#else + #define BSP_TZ_CFG_DTC_USED (1U) +#endif + + /* Security attribution of FLWT and FCKMHZ registers. */ +#ifndef BSP_TZ_CFG_FSAR +/* If the CGC registers are only accessible in Secure mode, than there is no + * reason for nonsecure applications to access FLWT and FCKMHZ. */ +#if BSP_CFG_CLOCKS_SECURE +/* Protect FLWT and FCKMHZ registers from nonsecure write access. */ +#define BSP_TZ_CFG_FSAR (0xFEFEU) +#else +/* Allow Secure and Non-secure write access. */ +#define BSP_TZ_CFG_FSAR (0xFFFFU) +#endif +#endif + + /* Security attribution for SRAM registers. */ +#ifndef BSP_TZ_CFG_SRAMSAR +/* If the CGC registers are only accessible in Secure mode, than there is no reason for Non Secure applications to access + * SRAM0WTEN and therefore there is no reason to access PRCR2. */ + #define BSP_TZ_CFG_SRAMSAR (\ + 1 | \ + ((BSP_CFG_CLOCKS_SECURE == 0) ? (1U << 1U) : 0U) | \ + 4 | \ + 0xFFFFFFF8U) +#endif + + /* Security attribution for Standby RAM registers. */ +#ifndef BSP_TZ_CFG_STBRAMSAR + #define BSP_TZ_CFG_STBRAMSAR (0 | 0xFFFFFFF0U) +#endif + + /* Security attribution for the DMAC Bus Master MPU settings. */ +#ifndef BSP_TZ_CFG_MMPUSARA + /* The DMAC Bus Master MPU settings should align with the DMAC channel settings. */ + #define BSP_TZ_CFG_MMPUSARA (BSP_TZ_CFG_ICUSARC) +#endif + + /* Security Attribution Register A for BUS Control registers. */ +#ifndef BSP_TZ_CFG_BUSSARA + #define BSP_TZ_CFG_BUSSARA (0xFFFFFFFFU) +#endif + /* Security Attribution Register B for BUS Control registers. */ +#ifndef BSP_TZ_CFG_BUSSARB + #define BSP_TZ_CFG_BUSSARB (0xFFFFFFFFU) +#endif + + /* Enable Uninitialized Non-Secure Application Fallback. */ +#ifndef BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK + #define BSP_TZ_CFG_NON_SECURE_APPLICATION_FALLBACK (1U) +#endif + + + #define OFS_SEQ1 0xA001A001 | (1 << 1) | (3 << 2) + #define OFS_SEQ2 (15 << 4) | (3 << 8) | (3 << 10) + #define OFS_SEQ3 (1 << 12) | (1 << 14) | (1 << 17) + #define OFS_SEQ4 (3 << 18) |(15 << 20) | (3 << 24) | (3 << 26) + #define OFS_SEQ5 (1 << 28) | (1 << 30) + #define BSP_CFG_ROM_REG_OFS0 (OFS_SEQ1 | OFS_SEQ2 | OFS_SEQ3 | OFS_SEQ4 | OFS_SEQ5) + + /* Option Function Select Register 1 Security Attribution */ +#ifndef BSP_CFG_ROM_REG_OFS1_SEL + #define BSP_CFG_ROM_REG_OFS1_SEL (0xFFFFFFFFU) +#endif + + #define BSP_CFG_ROM_REG_OFS1 (0xFFFFFEF8 | (1 << 2) | (3) | (1 << 8)) + + /* Used to create IELS values for the interrupt initialization table g_interrupt_event_link_select. */ + #define BSP_PRV_IELS_ENUM(vector) (ELC_ ## vector) + + /* Block Protection Register 0 */ +#ifndef BSP_CFG_ROM_REG_BPS0 + #define BSP_CFG_ROM_REG_BPS0 (~( 0U)) +#endif + /* Block Protection Register 1 */ +#ifndef BSP_CFG_ROM_REG_BPS1 + #define BSP_CFG_ROM_REG_BPS1 (0xFFFFFFFFU) +#endif + /* Block Protection Register 2 */ +#ifndef BSP_CFG_ROM_REG_BPS2 + #define BSP_CFG_ROM_REG_BPS2 (0xFFFFFFFFU) +#endif + /* Block Protection Register 3 */ +#ifndef BSP_CFG_ROM_REG_BPS3 + #define BSP_CFG_ROM_REG_BPS3 (0xFFFFFFFFU) +#endif + /* Permanent Block Protection Register 0 */ +#ifndef BSP_CFG_ROM_REG_PBPS0 + #define BSP_CFG_ROM_REG_PBPS0 (~( 0U)) +#endif + /* Permanent Block Protection Register 1 */ +#ifndef BSP_CFG_ROM_REG_PBPS1 + #define BSP_CFG_ROM_REG_PBPS1 (0xFFFFFFFFU) +#endif + /* Permanent Block Protection Register 2 */ +#ifndef BSP_CFG_ROM_REG_PBPS2 + #define BSP_CFG_ROM_REG_PBPS2 (0xFFFFFFFFU) +#endif + /* Permanent Block Protection Register 3 */ +#ifndef BSP_CFG_ROM_REG_PBPS3 + #define BSP_CFG_ROM_REG_PBPS3 (0xFFFFFFFFU) +#endif + /* Security Attribution for Block Protection Register 0 - Not supported by this MCU */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL0 + #define BSP_CFG_ROM_REG_BPS_SEL0 (0XFFFFFFFFU) +#endif + /* Security Attribution for Block Protection Register 1 - Not supported by this MCU */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL1 + #define BSP_CFG_ROM_REG_BPS_SEL1 (0XFFFFFFFFU) +#endif + /* Security Attribution for Block Protection Register 2 - Not supported by this MCU */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL2 + #define BSP_CFG_ROM_REG_BPS_SEL2 (0XFFFFFFFFU) +#endif + /* Security Attribution for Block Protection Register 3 - Not supported by this MCU */ +#ifndef BSP_CFG_ROM_REG_BPS_SEL3 + #define BSP_CFG_ROM_REG_BPS_SEL3 (0XFFFFFFFFU) +#endif +#ifndef BSP_CLOCK_CFG_MAIN_OSC_WAIT + #define BSP_CLOCK_CFG_MAIN_OSC_WAIT (9) +#endif + + /* + ID Code + Note: To permanently lock and disable the debug interface define the BSP_ID_CODE_PERMANENTLY_LOCKED in the compiler settings. + WARNING: This will disable debug access to the part and cannot be reversed by a debug probe. + */ + #if defined(BSP_ID_CODE_PERMANENTLY_LOCKED) + #define BSP_CFG_ID_CODE_LONG_1 (0x00000000) + #define BSP_CFG_ID_CODE_LONG_2 (0x00000000) + #define BSP_CFG_ID_CODE_LONG_3 (0x00000000) + #define BSP_CFG_ID_CODE_LONG_4 (0x00000000) + #else + /* ID CODE: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF */ + #define BSP_CFG_ID_CODE_LONG_1 (0xFFFFFFFF) + #define BSP_CFG_ID_CODE_LONG_2 (0xFFFFFFFF) + #define BSP_CFG_ID_CODE_LONG_3 (0xFFFFFFFF) + #define BSP_CFG_ID_CODE_LONG_4 (0xffFFFFFF) + #endif + + +#ifdef __cplusplus +} +#endif +#endif /* BSP_MCU_FAMILY_CFG_H_ */ diff --git a/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h new file mode 100644 index 00000000000..88387e8805c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/bsp/bsp_pin_cfg.h @@ -0,0 +1,56 @@ +/* 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 + +#define ARDUINO_A0 (BSP_IO_PORT_00_PIN_00) +#define ARDUINO_A1 (BSP_IO_PORT_00_PIN_01) +#define ARDUINO_A2 (BSP_IO_PORT_00_PIN_02) +#define ARDUINO_A4 (BSP_IO_PORT_00_PIN_03) +#define ARDUINO_A3 (BSP_IO_PORT_00_PIN_04) +#define PMOD1_RESET (BSP_IO_PORT_00_PIN_05) +#define ARDUINO_D8 (BSP_IO_PORT_00_PIN_06) +#define ARDUINO_D7 (BSP_IO_PORT_00_PIN_08) +#define ARDUINO_A5 (BSP_IO_PORT_00_PIN_13) +#define PMOD2_GPIO1 (BSP_IO_PORT_00_PIN_14) +#define PMOD2_GPIO2 (BSP_IO_PORT_00_PIN_15) +#define I3C_SCL_ARDUINO_SCL (BSP_IO_PORT_01_PIN_00) +#define I3C_SDA_ARDUINO_SDA (BSP_IO_PORT_01_PIN_01) +#define PMOD2_SCK (BSP_IO_PORT_01_PIN_02) +#define ARDUINO_D2 (BSP_IO_PORT_01_PIN_05) +#define PMOD1_GPIO1 (BSP_IO_PORT_01_PIN_06) +#define PMOD1_GPIO2 (BSP_IO_PORT_01_PIN_07) +#define DEBUG_SWDIO (BSP_IO_PORT_01_PIN_08) +#define PMOD1_TX_ARDUINO_D11 (BSP_IO_PORT_01_PIN_09) +#define PMOD1_RX_ARDUINO_D12 (BSP_IO_PORT_01_PIN_10) +#define PMOD1_RSPCK_ARDUINO_D13 (BSP_IO_PORT_01_PIN_11) +#define ARDUINO_D6 (BSP_IO_PORT_01_PIN_13) +#define NMI (BSP_IO_PORT_02_PIN_00) +#define BOOT_MODE (BSP_IO_PORT_02_PIN_01) +#define PMOD2_IRQ (BSP_IO_PORT_02_PIN_05) +#define LED2 (BSP_IO_PORT_02_PIN_06) +#define LED1 (BSP_IO_PORT_02_PIN_07) +#define ARDUINO_RESET (BSP_IO_PORT_02_PIN_08) +#define DEBUG_SWDCLK (BSP_IO_PORT_03_PIN_00) +#define ARDUINO_D10 (BSP_IO_PORT_03_PIN_01) +#define SW1 (BSP_IO_PORT_03_PIN_04) +#define I2C_I3C_SEL_SCL (BSP_IO_PORT_04_PIN_00) +#define I2C_I3C_SEL_SDA (BSP_IO_PORT_04_PIN_01) +#define PMOD1_IRQ (BSP_IO_PORT_04_PIN_02) +#define ARDUINO_D9 (BSP_IO_PORT_04_PIN_03) +#define PMOD2_RESET (BSP_IO_PORT_04_PIN_07) +#define ARDUINO_D3 (BSP_IO_PORT_04_PIN_08) +#define ARDUINO_D5 (BSP_IO_PORT_04_PIN_09) +#define PMOD2_MISO_ARDUINO_D0 (BSP_IO_PORT_04_PIN_10) +#define PMOD2_MOSI_ARDUINO_D1 (BSP_IO_PORT_04_PIN_11) +#define ARDUINO_D4 (BSP_IO_PORT_05_PIN_00) +extern const ioport_cfg_t g_bsp_pin_cfg; /* RA6E2 FPB */ + +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/ra6e2-fpb/ra_cfg/fsp_cfg/r_ioport_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/r_ioport_cfg.h new file mode 100644 index 00000000000..d2688bf5ba3 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_cfg/fsp_cfg/r_sci_uart_cfg.h b/bsp/renesas/ra6e2-fpb/ra_cfg/fsp_cfg/r_sci_uart_cfg.h new file mode 100644 index 00000000000..d91dd0b7513 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_gen/SConscript b/bsp/renesas/ra6e2-fpb/ra_gen/SConscript new file mode 100644 index 00000000000..09be271571a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_gen/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, ] + +group = DefineGroup('ra_gen', src, depend = [''], CPPPATH = CPPPATH) +Return('group') diff --git a/bsp/renesas/ra6e2-fpb/ra_gen/bsp_clock_cfg.h b/bsp/renesas/ra6e2-fpb/ra_gen/bsp_clock_cfg.h new file mode 100644 index 00000000000..b806b922f05 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_gen/bsp_clock_cfg.h @@ -0,0 +1,28 @@ +/* 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 (20000000) /* XTAL 20000000Hz */ +#define BSP_CFG_HOCO_FREQUENCY (2) /* HOCO 20MHz */ +#define BSP_CFG_PLL_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_HOCO) /* PLL Src: HOCO */ +#define BSP_CFG_PLL_DIV (BSP_CLOCKS_PLL_DIV_1) /* PLL Div /1 */ +#define BSP_CFG_PLL_MUL BSP_CLOCKS_PLL_MUL(10,0) /* PLL Mul x10.0 */ +#define BSP_CFG_CLOCK_SOURCE (BSP_CLOCKS_SOURCE_CLOCK_PLL) /* Clock Src: PLL */ +#define BSP_CFG_CLKOUT_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CLKOUT Disabled */ +#define BSP_CFG_UCK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* UCLK Disabled */ +#define BSP_CFG_CANFDCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CANFDCLK Disabled */ +#define BSP_CFG_CECCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* CECCLK Disabled */ +#define BSP_CFG_I3CCLK_SOURCE (BSP_CLOCKS_CLOCK_DISABLED) /* I3CCLK Disabled */ +#define BSP_CFG_ICLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* ICLK Div /1 */ +#define BSP_CFG_PCLKA_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKA Div /2 */ +#define BSP_CFG_PCLKB_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKB Div /4 */ +#define BSP_CFG_PCLKC_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* PCLKC Div /4 */ +#define BSP_CFG_PCLKD_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_2) /* PCLKD Div /2 */ +#define BSP_CFG_FCLK_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_4) /* FCLK Div /4 */ +#define BSP_CFG_CLKOUT_DIV (BSP_CLOCKS_SYS_CLOCK_DIV_1) /* CLKOUT Div /1 */ +#define BSP_CFG_UCK_DIV (BSP_CLOCKS_USB_CLOCK_DIV_5) /* UCLK Div /5 */ +#define BSP_CFG_CANFDCLK_DIV (BSP_CLOCKS_CANFD_CLOCK_DIV_6) /* CANFDCLK Div /6 */ +#define BSP_CFG_CECCLK_DIV (BSP_CLOCKS_CEC_CLOCK_DIV_1) /* CECCLK Div /1 */ +#define BSP_CFG_I3CCLK_DIV (BSP_CLOCKS_I3C_CLOCK_DIV_1) /* I3CCLK Div /1 */ +#endif /* BSP_CLOCK_CFG_H_ */ diff --git a/bsp/renesas/ra6e2-fpb/ra_gen/common_data.c b/bsp/renesas/ra6e2-fpb/ra_gen/common_data.c new file mode 100644 index 00000000000..50036c0adcb --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_gen/common_data.h b/bsp/renesas/ra6e2-fpb/ra_gen/common_data.h new file mode 100644 index 00000000000..6a08cbee095 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_gen/hal_data.c b/bsp/renesas/ra6e2-fpb/ra_gen/hal_data.c new file mode 100644 index 00000000000..0e5ef580d66 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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.469% error. */ .semr_baudrate_bits_b.abcse = 0, .semr_baudrate_bits_b.abcs = 0, .semr_baudrate_bits_b.bgdm = 1, .cks = 0, .brr = 53, .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 = (12), + .txi_ipl = (12), + .tei_ipl = (12), + .eri_ipl = (12), +#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/ra6e2-fpb/ra_gen/hal_data.h b/bsp/renesas/ra6e2-fpb/ra_gen/hal_data.h new file mode 100644 index 00000000000..32b2ce34886 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_gen/main.c b/bsp/renesas/ra6e2-fpb/ra_gen/main.c new file mode 100644 index 00000000000..42c5904834c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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/ra6e2-fpb/ra_gen/pin_data.c b/bsp/renesas/ra6e2-fpb/ra_gen/pin_data.c new file mode 100644 index 00000000000..6574476c61a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_gen/pin_data.c @@ -0,0 +1,203 @@ +/* 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_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_02, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_03, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_04, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_05, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_00_PIN_06, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_00_PIN_08, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_00_PIN_13, + .pin_cfg = ((uint32_t) IOPORT_CFG_ANALOG_ENABLE) + }, + { + .pin = BSP_IO_PORT_00_PIN_14, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_00_PIN_15, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_01_PIN_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC) + }, + { + .pin = BSP_IO_PORT_01_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_IIC) + }, + { + .pin = BSP_IO_PORT_01_PIN_02, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8) + }, + { + .pin = BSP_IO_PORT_01_PIN_05, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_01_PIN_06, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_01_PIN_07, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_01_PIN_08, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG) + }, + { + .pin = BSP_IO_PORT_01_PIN_09, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9) + }, + { + .pin = BSP_IO_PORT_01_PIN_10, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI1_3_5_7_9) + }, + { + .pin = BSP_IO_PORT_01_PIN_11, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_01_PIN_13, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_02_PIN_05, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_02_PIN_06, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_02_PIN_07, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_LOW) + }, + { + .pin = BSP_IO_PORT_02_PIN_08, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_03_PIN_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_DEBUG) + }, + { + .pin = BSP_IO_PORT_03_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_03_PIN_04, + .pin_cfg = ((uint32_t) IOPORT_CFG_IRQ_ENABLE | (uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH) + }, + { + .pin = BSP_IO_PORT_04_PIN_01, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PORT_DIRECTION_OUTPUT | (uint32_t) IOPORT_CFG_PORT_OUTPUT_HIGH) + }, + { + .pin = BSP_IO_PORT_04_PIN_02, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_03, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_07, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_08, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_09, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, + { + .pin = BSP_IO_PORT_04_PIN_10, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8) + }, + { + .pin = BSP_IO_PORT_04_PIN_11, + .pin_cfg = ((uint32_t) IOPORT_CFG_DRIVE_HIGH | (uint32_t) IOPORT_CFG_PERIPHERAL_PIN | (uint32_t) IOPORT_PERIPHERAL_SCI0_2_4_6_8) + }, + { + .pin = BSP_IO_PORT_05_PIN_00, + .pin_cfg = ((uint32_t) IOPORT_CFG_PORT_DIRECTION_INPUT) + }, +}; + +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) + R_PMISC->PMSAR[i].PMSAR = (uint16_t) pmsar[i]; + #else + R_PMISC->PMSAR[i].PMSAR = pmsar[i]; + #endif + } + +} +#endif diff --git a/bsp/renesas/ra6e2-fpb/ra_gen/vector_data.c b/bsp/renesas/ra6e2-fpb/ra_gen/vector_data.c new file mode 100644 index 00000000000..f3d49178ec2 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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_MAX_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_MAX_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/ra6e2-fpb/ra_gen/vector_data.h b/bsp/renesas/ra6e2-fpb/ra_gen/vector_data.h new file mode 100644 index 00000000000..288c1305892 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/ra_gen/vector_data.h @@ -0,0 +1,29 @@ +/* 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) */ + #ifdef __cplusplus + } + #endif + #endif /* VECTOR_DATA_H */ \ No newline at end of file diff --git a/bsp/renesas/ra6e2-fpb/rasc_launcher.bat b/bsp/renesas/ra6e2-fpb/rasc_launcher.bat new file mode 100644 index 00000000000..ed932948320 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/rasc_launcher.bat @@ -0,0 +1,240 @@ +@echo off +REM RASC launcher 2024-05-23 + +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 Shift to leave remaining parameters as input parameters to RASC +shift + +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%" ( + echo "!RascVersion!" + echo "%TargetRascVersion%" + if "!RascVersion!" == "%TargetRascVersion%" ( + + REM echo DEBUG: Found match + + goto _LaunchRasc + ) 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 _LaunchRasc + ) + ) +) + +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 _LaunchRasc +) + +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%]!" + +:_LaunchRasc + +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 + +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% & 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 +REM start cmd /c "echo %ErrorMessage% && pause" +echo/ +echo %ErrorMessage% && pause +goto :EOF diff --git a/bsp/renesas/ra6e2-fpb/rasc_version.txt b/bsp/renesas/ra6e2-fpb/rasc_version.txt new file mode 100644 index 00000000000..6fae4e7d38a --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/rasc_version.txt @@ -0,0 +1,3 @@ +# RASC version and installation file +5.5.0 +C:\Renesas\RA\sc_v2024-07_fsp_v5.5.0\eclipse\rasc.exe diff --git a/bsp/renesas/ra6e2-fpb/rtconfig.h b/bsp/renesas/ra6e2-fpb/rtconfig.h new file mode 100644 index 00000000000..84a77e51676 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/rtconfig.h @@ -0,0 +1,341 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +#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_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 optimization */ + +/* end of kservice optimization */ + +/* klibc optimization */ + +/* end of klibc optimization */ +#define RT_USING_DEBUG +#define RT_DEBUGING_ASSERT +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT +#define RT_USING_OVERFLOW_CHECK + +/* 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 0x50200 +#define RT_BACKTRACE_LEVEL_MAX_NR 32 +/* end of RT-Thread Kernel */ +#define RT_USING_HW_ATOMIC +#define RT_USING_CPU_FFS +#define ARCH_ARM +#define ARCH_ARM_CORTEX_M +#define ARCH_ARM_CORTEX_M33 + +/* 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_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 */ +/* 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 +#define SOC_SERIES_R7FA6E2 + +/* Hardware Drivers Config */ + +#define SOC_R7FA6E2BB + +/* 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/ra6e2-fpb/rtconfig.py b/bsp/renesas/ra6e2-fpb/rtconfig.py new file mode 100644 index 00000000000..f03ce7604dd --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/rtconfig.py @@ -0,0 +1,102 @@ +import os +import sys + +# toolchains options +ARCH='arm' +CPU='cortex-m4' +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'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' + +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-m33 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -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-M33' + + CFLAGS = ' -mcpu=Cortex-M33 -xc -std=c99 --target=arm-arm-none-eabi -mfpu=fpv5-sp-d16 -mfloat-abi=hard -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/ra6e2-fpb/script/fsp.ld b/bsp/renesas/ra6e2-fpb/script/fsp.ld new file mode 100644 index 00000000000..86dffb6737c --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/script/fsp.ld @@ -0,0 +1,786 @@ +/* + Linker File for Renesas FSP +*/ + +INCLUDE memory_regions.ld + +/* Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image.*/ +/* + XIP_SECONDARY_SLOT_IMAGE = 1; +*/ + +QSPI_FLASH_PRV_LENGTH = DEFINED(QSPI_FLASH_SIZE) ? ABSOLUTE(QSPI_FLASH_SIZE) : ABSOLUTE(QSPI_FLASH_LENGTH); +OSPI_DEVICE_0_PRV_LENGTH = DEFINED(OSPI_DEVICE_0_SIZE) ? ABSOLUTE(OSPI_DEVICE_0_SIZE) : ABSOLUTE(OSPI_DEVICE_0_LENGTH); +OSPI_DEVICE_1_PRV_LENGTH = DEFINED(OSPI_DEVICE_1_SIZE) ? ABSOLUTE(OSPI_DEVICE_1_SIZE) : ABSOLUTE(OSPI_DEVICE_1_LENGTH); + +/* If a flat (secure) project has DEFINED RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. */ +__RESERVE_NS_RAM = !DEFINED(PROJECT_NONSECURE) && DEFINED(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0); + +ITCM_START = DEFINED(ITCM_START)? ITCM_START : 0; +ITCM_LENGTH = DEFINED(ITCM_LENGTH)? ITCM_LENGTH : 0; +DTCM_START = DEFINED(DTCM_START)? DTCM_START : 0; +DTCM_LENGTH = DEFINED(DTCM_LENGTH)? DTCM_LENGTH : 0; +RAM_NS_BUFFER_BLOCK_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? ALIGN(RAM_NS_BUFFER_LENGTH, 8192) : 0; +RAM_NS_BUFFER_LENGTH = DEFINED(RAM_NS_BUFFER_LENGTH) ? RAM_NS_BUFFER_LENGTH : 0; +RAM_NS_BUFFER_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH; +RAM_NS_BUFFER_BLOCK_START = RAM_START + RAM_LENGTH - RAM_NS_BUFFER_BLOCK_LENGTH; + +OPTION_SETTING_START_NS = DEFINED(PROJECT_NONSECURE) ? OPTION_SETTING_START : OPTION_SETTING_START + 0x80; + +/* This definition is used to avoid moving the counter in OPTION_SETTING regions for projects that should not configure option settings. + * Bootloader images do not configure option settings because they are owned by the bootloader. + * FSP_BOOTABLE_IMAGE is only defined in bootloader images. */ +__bl_FSP_BOOTABLE_IMAGE = 1; +__bln_FSP_BOOTABLE_IMAGE = 1; +PROJECT_SECURE_OR_FLAT = (!DEFINED(PROJECT_NONSECURE) || DEFINED(PROJECT_SECURE)) && OPTION_SETTING_LENGTH && !DEFINED(FSP_BOOTABLE_IMAGE); +USE_OPTION_SETTING_NS = DEFINED(PROJECT_NONSECURE) && !DEFINED(FSP_BOOTABLE_IMAGE); + +__bl_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : + (DEFINED(BOOTLOADER_SECONDARY_USE_QSPI) || DEFINED(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : + FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_FLASH_IMAGE_END = __bl_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH; +__bl_XIP_SECONDARY_FLASH_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH; +__bl_XIP_SECONDARY_FLASH_IMAGE_END = __bl_XIP_SECONDARY_FLASH_IMAGE_START + __bl_FLASH_IMAGE_LENGTH; +__bl_FLASH_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH; +__bl_FLASH_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_IMAGE_END - FLASH_APPLICATION_NSC_LENGTH; +__bl_RAM_NS_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH; +__bl_RAM_NSC_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : + __bl_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH; +__bl_FLASH_NS_IMAGE_START = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + __bl_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2; +__bln_FLASH_IMAGE_START = __bl_FLASH_NS_IMAGE_START | (!DEFINED (NS_OFFSET_START) ? 0 : NS_OFFSET_START); +__bln_FLASH_IMAGE_LENGTH = !DEFINED(FLASH_BOOTLOADER_LENGTH) ? 0 : + FLASH_APPLICATION_NS_LENGTH == 0 ? __bl_FLASH_IMAGE_END : + FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2; + +XIP_SECONDARY_SLOT_IMAGE = DEFINED(XIP_SECONDARY_SLOT_IMAGE) ? XIP_SECONDARY_SLOT_IMAGE : 0; +FLASH_ORIGIN = !DEFINED(FLASH_IMAGE_START) ? FLASH_START : + XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START : + FLASH_IMAGE_START; +LIMITED_FLASH_LENGTH = DEFINED(FLASH_IMAGE_LENGTH) ? FLASH_IMAGE_LENGTH : + DEFINED(FLASH_BOOTLOADER_LENGTH) ? FLASH_BOOTLOADER_LENGTH : + FLASH_LENGTH; +OPTION_SETTING_SAS_SIZE = 0x34; +OPTION_SETTING_SAS_LENGTH = !DEFINED(OPTION_SETTING_LENGTH) ? 0 : + OPTION_SETTING_LENGTH == 0 ? 0 : + OPTION_SETTING_LENGTH - OPTION_SETTING_SAS_SIZE; + +/* Define memory regions. */ +MEMORY +{ + ITCM (rx) : ORIGIN = ITCM_START, LENGTH = ITCM_LENGTH + DTCM (rwx) : ORIGIN = DTCM_START, LENGTH = DTCM_LENGTH + FLASH (rx) : ORIGIN = FLASH_ORIGIN, LENGTH = LIMITED_FLASH_LENGTH + RAM (rwx) : ORIGIN = RAM_START, LENGTH = RAM_LENGTH + DATA_FLASH (rx) : ORIGIN = DATA_FLASH_START, LENGTH = DATA_FLASH_LENGTH + QSPI_FLASH (rx) : ORIGIN = QSPI_FLASH_START, LENGTH = QSPI_FLASH_PRV_LENGTH + OSPI_DEVICE_0 (rx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1 (rx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + OSPI_DEVICE_0_RAM (rwx) : ORIGIN = OSPI_DEVICE_0_START, LENGTH = OSPI_DEVICE_0_PRV_LENGTH + OSPI_DEVICE_1_RAM (rwx) : ORIGIN = OSPI_DEVICE_1_START, LENGTH = OSPI_DEVICE_1_PRV_LENGTH + SDRAM (rwx) : ORIGIN = SDRAM_START, LENGTH = SDRAM_LENGTH + OPTION_SETTING (r) : ORIGIN = OPTION_SETTING_START, LENGTH = OPTION_SETTING_LENGTH + OPTION_SETTING_OFS (r) : ORIGIN = OPTION_SETTING_START, LENGTH = 0x18 + OPTION_SETTING_SAS (r) : ORIGIN = OPTION_SETTING_START + OPTION_SETTING_SAS_SIZE, LENGTH = OPTION_SETTING_SAS_LENGTH + OPTION_SETTING_S (r) : ORIGIN = OPTION_SETTING_S_START, LENGTH = OPTION_SETTING_S_LENGTH + ID_CODE (rx) : ORIGIN = ID_CODE_START, LENGTH = ID_CODE_LENGTH +} + +/* Library configurations */ +GROUP(libgcc.a libc.a libm.a) + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be DEFINED in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __Vectors_End + * __Vectors_Size + * __qspi_flash_start__ + * __qspi_flash_end__ + * __qspi_flash_code_size__ + * __qspi_region_max_size__ + * __qspi_region_start_address__ + * __qspi_region_end_address__ + * __ospi_device_0_start__ + * __ospi_device_0_end__ + * __ospi_device_0_code_size__ + * __ospi_device_0_region_max_size__ + * __ospi_device_0_region_start_address__ + * __ospi_device_0_region_end_address__ + * __ospi_device_1_start__ + * __ospi_device_1_end__ + * __ospi_device_1_code_size__ + * __ospi_device_1_region_max_size__ + * __ospi_device_1_region_start_address__ + * __ospi_device_1_region_end_address__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __tz_FLASH_S = ABSOLUTE(FLASH_START); + __ROM_Start = .; + + /* Even though the vector table is not 256 entries (1KB) long, we still allocate that much + * space because ROM registers are at address 0x400 and there is very little space + * in between. */ + KEEP(*(.fixed_vectors*)) + KEEP(*(.application_vectors*)) + __Vectors_End = .; + + /* Some devices have a gap of code flash between the vector table and ROM Registers. + * The flash gap section allows applications to place code and data in this section. */ + *(.flash_gap*) + + /* ROM Registers start at address 0x00000400 for devices that do not have the OPTION_SETTING region. */ + . = OPTION_SETTING_LENGTH > 0 ? . : __ROM_Start + 0x400; + KEEP(*(.rom_registers*)) + + /* Allocate flash write-boundary-aligned + * space for sce9 wrapped public keys for mcuboot if the module is used. + */ + KEEP(*(.mcuboot_sce9_key*)) + + *(.text*) + + KEEP(*(.version)) + KEEP(*(.init)) + KEEP(*(.fini)) + + /* 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)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + __usb_dev_descriptor_start_fs = .; + KEEP(*(.usb_device_desc_fs*)) + __usb_cfg_descriptor_start_fs = .; + KEEP(*(.usb_config_desc_fs*)) + __usb_interface_descriptor_start_fs = .; + KEEP(*(.usb_interface_desc_fs*)) + __usb_descriptor_end_fs = .; + __usb_dev_descriptor_start_hs = .; + KEEP(*(.usb_device_desc_hs*)) + __usb_cfg_descriptor_start_hs = .; + KEEP(*(.usb_config_desc_hs*)) + __usb_interface_descriptor_start_hs = .; + KEEP(*(.usb_interface_desc_hs*)) + __usb_descriptor_end_hs = .; + + KEEP(*(.eh_frame*)) + + __ROM_End = .; + } > FLASH = 0xFF + + __Vectors_Size = __Vectors_End - __Vectors; + + . = .; + __itcm_data_pre_location = .; + + /* Initialized ITCM data. */ + /* Aligned to FCACHE2 for RA8. */ + .itcm_data : ALIGN(16) + { + /* Start of ITCM Secure Trustzone region. */ + __tz_ITCM_S = ABSOLUTE(ITCM_START); + + /* All ITCM data start */ + __itcm_data_start = .; + + KEEP(*(.itcm_data*)) + + /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */ + . = ALIGN(8); + + /* All ITCM data end */ + __itcm_data_end = .; + + /* + * Start of the ITCM Non-Secure Trustzone region. + * ITCM_NS_START can be used to set a fixed address for non-secure ITCM in secure projects or flat projects. + */ + __tz_ITCM_N = DEFINED(ITCM_NS_START) ? ABSOLUTE(ITCM_NS_START) : ALIGN(__itcm_data_end, 8192); + } > ITCM AT > FLASH = 0x00 + + /* Addresses exported for ITCM initialization. */ + __itcm_data_init_start = LOADADDR(.itcm_data); + __itcm_data_init_end = LOADADDR(.itcm_data) + SIZEOF(.itcm_data); + + ASSERT(ORIGIN(ITCM) % 8 == 0, "ITCM memory region origin must be aligned to 8 bytes.") + ASSERT(LENGTH(ITCM) % 8 == 0, "ITCM memory region length must be a multiple of 8 bytes.") + ASSERT(LOADADDR(.itcm_data) % 16 == 0, ".itcm_data section must be aligned to 16 bytes.") + ASSERT(SIZEOF(.itcm_data) % 8 == 0, ".itcm_data section size must be a multiple of 8 bytes.") + + /* Restore location counter. */ + /* If ITCM is not present, this will be the address stored in '.' before ALIGN was attempted. */ + /* If ITCM is present, this will be the absolute address that follows the ITCM ROM location. */ + . = (SIZEOF(.itcm_data) > 0) ? __itcm_data_init_end : __itcm_data_pre_location; + + __exidx_start = .; + /DISCARD/ : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + __tz_RAM_S = ORIGIN(RAM); + + /* If DTC is used, put the DTC vector table at the start of SRAM. + This avoids memory holes due to 1K alignment required by it. */ + .fsp_dtc_vector_table (NOLOAD) : + { + . = ORIGIN(RAM); + *(.fsp_dtc_vector_table) + } > RAM + + /* Initialized data section. */ + .data : + { + __data_start__ = .; + . = ALIGN(4); + + __Code_In_RAM_Start = .; + + KEEP(*(.code_in_ram*)) + __Code_In_RAM_End = .; + + *(vtable) + /* Don't use *(.data*) because it will place data meant for .data_flash in this section. */ + *(.data.*) + *(.data) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + + . = ALIGN(4); + + /* All data end */ + __data_end__ = .; + + } > RAM AT > FLASH + + . = .; + __dtcm_data_pre_location = LOADADDR(.data) + SIZEOF(.data); + + /* Initialized DTCM data. */ + /* Aligned to FCACHE2 for RA8. */ + .dtcm_data : ALIGN(16) + { + /* Start of DTCM Secure Trustzone region. */ + __tz_DTCM_S = ABSOLUTE(DTCM_START); + + /* Initialized DTCM data start */ + __dtcm_data_start = .; + + KEEP(*(.dtcm_data*)) + + /* Pad to eight byte alignment in case of ECC initialization. Fill zero. */ + . = ALIGN(8); + + /* Initialized DTCM data end */ + __dtcm_data_end = .; + } > DTCM AT > FLASH = 0x00 + + . = __dtcm_data_end; + /* Uninitialized DTCM data. */ + /* ALIGN appears on the left side of the colon because it is being used to assign the VMA directly, as opposed to a right side appearance which would control the LMA. */ + .dtcm_bss ALIGN(8) (NOLOAD) : + { + /* Uninitialized DTCM data start */ + __dtcm_bss_start = .; + + KEEP(*(.dtcm_bss*)) + + /* Pad to eight byte alignment in case of ECC initialization. No fill because of NOLOAD. */ + . = ALIGN(8); + + /* Uninitialized DTCM data end */ + __dtcm_bss_end = .; + + /* + * Start of the DTCM Non-Secure Trustzone region. + * DTCM_NS_START can be used to set a fixed address for non-secure DTCM in secure projects or flat projects. + */ + __tz_DTCM_N = DEFINED(DTCM_NS_START) ? ABSOLUTE(DTCM_NS_START) : ALIGN(__dtcm_bss_end, 8192); + } > DTCM + + /* Addresses exported for DTCM initialization. */ + __dtcm_data_init_start = LOADADDR(.dtcm_data); + __dtcm_data_init_end = LOADADDR(.dtcm_data) + SIZEOF(.dtcm_data); + + ASSERT(ORIGIN(DTCM) % 8 == 0, "DTCM memory region origin must be aligned to 8 bytes.") + ASSERT(LENGTH(DTCM) % 8 == 0, "DTCM memory region length must be a multiple of 8 bytes.") + ASSERT(LOADADDR(.dtcm_bss) == ADDR(.dtcm_bss), ".dtcm_bss has (VMA != LMA) but should be NOLOAD (VMA == LMA).") + ASSERT(LOADADDR(.dtcm_data) % 16 == 0, ".dtcm_data section must be aligned to 16 bytes.") + ASSERT(SIZEOF(.dtcm_data) % 8 == 0, ".dtcm_data section size must be a multiple of 8 bytes.") + ASSERT(LOADADDR(.dtcm_bss) % 8 == 0, ".dtcm_bss section must be aligned to 8 bytes.") + ASSERT(SIZEOF(.dtcm_bss) % 8 == 0, ".dtcm_bss section size must be a multiple of 8 bytes.") + ASSERT(__dtcm_bss_start == __dtcm_data_end, ".dtcm_bss section is not adjacent to .dtcm_data section.") + + /* Restore location counter. */ + /* If DTCM is not present, this will be the address stored in '.' before ALIGN was attempted. */ + /* If DTCM is present, this will be the absolute address that follows the DTCM ROM location. */ + . = (SIZEOF(.dtcm_data) > 0) ? __dtcm_data_init_end : __dtcm_data_pre_location; + + /* TrustZone Secure Gateway Stubs Section */ + + /* Store location counter for SPI non-retentive sections. */ + sgstubs_pre_location = .; + + /* Determine the secure gateway stubs address either by the provided linker variable or the next 1024-byte block. */ + SGSTUBS_LOC = (DEFINED(PROJECT_SECURE) && DEFINED(FLASH_NSC_START)) ? ABSOLUTE(FLASH_NSC_START) : ALIGN(1024); + .gnu.sgstubs SGSTUBS_LOC : ALIGN(1024) + { + __tz_FLASH_C = DEFINED(FLASH_NSC_START) ? ABSOLUTE(FLASH_NSC_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : ALIGN(1024); + _start_sg = .; + *(.gnu.sgstubs*) + . = ALIGN(32); + _end_sg = .; + } > FLASH + + __tz_FLASH_N = DEFINED(FLASH_NS_START) ? ABSOLUTE(FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(FLASH_START + FLASH_LENGTH) : FLASH_LENGTH < 32768 ? FLASH_LENGTH : ALIGN(32768); + FLASH_NS_IMAGE_START = DEFINED(FLASH_NS_IMAGE_START) ? FLASH_NS_IMAGE_START : __tz_FLASH_N; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_S = ORIGIN(QSPI_FLASH); + + /* QSPI_FLASH section to be downloaded via debugger */ + .qspi_flash : + { + __qspi_flash_start__ = .; + KEEP(*(.qspi_flash*)) + KEEP(*(.code_in_qspi*)) + __qspi_flash_end__ = .; + } > QSPI_FLASH + __qspi_flash_code_size__ = __qspi_flash_end__ - __qspi_flash_start__; + + /* QSPI_FLASH non-retentive section, creates a copy in internal flash that can be copied to QSPI */ + __qspi_flash_code_addr__ = sgstubs_pre_location; + .qspi_non_retentive : AT(__qspi_flash_code_addr__) + { + __qspi_non_retentive_start__ = .; + KEEP(*(.qspi_non_retentive*)) + __qspi_non_retentive_end__ = .; + } > QSPI_FLASH + __qspi_non_retentive_size__ = __qspi_non_retentive_end__ - __qspi_non_retentive_start__; + + __qspi_region_max_size__ = 0x4000000; /* Must be the same as defined in MEMORY above */ + __qspi_region_start_address__ = __qspi_flash_start__; + __qspi_region_end_address__ = __qspi_flash_start__ + __qspi_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_QSPI_FLASH_N = __qspi_non_retentive_end__; + + /* Support for OctaRAM */ + .OSPI_DEVICE_0_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_0_start__ = .; + *(.ospi_device_0_no_load*) + . = ALIGN(4); + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0_RAM + + .OSPI_DEVICE_1_NO_LOAD (NOLOAD): + { + . = ALIGN(4); + __ospi_device_1_start__ = .; + *(.ospi_device_1_no_load*) + . = ALIGN(4); + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1_RAM + + /* Note: There are no secure/non-secure boundaries for QSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_S = ORIGIN(OSPI_DEVICE_0); + + /* OSPI_DEVICE_0 section to be downloaded via debugger */ + .OSPI_DEVICE_0 : + { + __ospi_device_0_start__ = .; + KEEP(*(.ospi_device_0*)) + KEEP(*(.code_in_ospi_device_0*)) + __ospi_device_0_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_code_size__ = __ospi_device_0_end__ - __ospi_device_0_start__; + + /* OSPI_DEVICE_0 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_0_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive)); + .ospi_device_0_non_retentive : AT(__ospi_device_0_code_addr__) + { + __ospi_device_0_non_retentive_start__ = .; + KEEP(*(.ospi_device_0_non_retentive*)) + __ospi_device_0_non_retentive_end__ = .; + } > OSPI_DEVICE_0 + __ospi_device_0_non_retentive_size__ = __ospi_device_0_non_retentive_end__ - __ospi_device_0_non_retentive_start__; + + __ospi_device_0_region_max_size__ = 0x8000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_0_region_start_address__ = __ospi_device_0_start__; + __ospi_device_0_region_end_address__ = __ospi_device_0_start__ + __ospi_device_0_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_0_N = __ospi_device_0_non_retentive_end__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_S = ORIGIN(OSPI_DEVICE_1); + + /* OSPI_DEVICE_1 section to be downloaded via debugger */ + .OSPI_DEVICE_1 : + { + __ospi_device_1_start__ = .; + KEEP(*(.ospi_device_1*)) + KEEP(*(.code_in_ospi_device_1*)) + __ospi_device_1_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_code_size__ = __ospi_device_1_end__ - __ospi_device_1_start__; + + /* OSPI_DEVICE_1 non-retentive section, creates a copy in internal flash that can be copied to OSPI */ + __ospi_device_1_code_addr__ = sgstubs_pre_location + (SIZEOF(.qspi_non_retentive) + SIZEOF(.ospi_device_0_non_retentive)); + .ospi_device_1_non_retentive : AT(__ospi_device_1_code_addr__) + { + __ospi_device_1_non_retentive_start__ = .; + KEEP(*(.ospi_device_1_non_retentive*)) + __ospi_device_1_non_retentive_end__ = .; + } > OSPI_DEVICE_1 + __ospi_device_1_non_retentive_size__ = __ospi_device_1_non_retentive_end__ - __ospi_device_1_non_retentive_start__; + + __ospi_device_1_region_max_size__ = 0x10000000; /* Must be the same as defined in MEMORY above */ + __ospi_device_1_region_start_address__ = __ospi_device_1_start__; + __ospi_device_1_region_end_address__ = __ospi_device_1_start__ + __ospi_device_1_region_max_size__; + + /* Note: There are no secure/non-secure boundaries for OSPI. These symbols are provided for the RA configuration tool. */ + __tz_OSPI_DEVICE_1_N = __ospi_device_1_non_retentive_end__; + + .noinit (NOLOAD): + { + . = ALIGN(4); + __noinit_start = .; + KEEP(*(.noinit*)) + . = ALIGN(8); + /* Place the FreeRTOS heap here so that the __HeapLimit calculation does not include the freertos heap. */ + KEEP(*(.heap.*)) + __noinit_end = .; + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (NOLOAD): + { + . = ALIGN(8); + __HeapBase = .; + /* Place the STD heap here. */ + KEEP(*(.heap)) + __HeapLimit = .; + } > RAM + + /* Stacks are stored in this section. */ + .stack_dummy (NOLOAD): + { + . = ALIGN(8); + __StackLimit = .; + /* Main stack */ + KEEP(*(.stack)) + __StackTop = .; + /* Thread stacks */ + KEEP(*(.stack*)) + __StackTopAll = .; + } > RAM + + PROVIDE(__stack = __StackTopAll); + + /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used + at run time for things such as ThreadX memory pool allocations. */ + __RAM_segment_used_end__ = ALIGN(__StackTopAll , 4); + + /* RAM_NSC_START can be used to set a fixed address for non-secure callable RAM in secure projects. + * If it is not specified, the address for NSC RAM is the end of RAM aligned to a 1K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_C = DEFINED(RAM_NSC_START) ? ABSOLUTE(RAM_NSC_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__RAM_segment_used_end__, 1024); + + /* RAM_NS_START can be used to set a fixed address for non-secure RAM in secure projects or flat projects. + * RAM_NS_BUFFER_BLOCK_LENGTH is used to allocate non-secure buffers in a flat project. If it is not + * specified, the address for NSC RAM is the end of RAM aligned to an 8K boundary. + * In flat projects that require non-secure RAM, this variable is set to the start of non-secure RAM. */ + __tz_RAM_N = DEFINED(RAM_NS_START) ? ABSOLUTE(RAM_NS_START - RAM_NS_BUFFER_BLOCK_LENGTH) : __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_BLOCK_START) : ALIGN(__tz_RAM_C, 8192); + + /* Non-secure buffers must be in non-secure RAM. This is primarily used for the EDMAC in flat projects. + * The EDMAC is a non-secure bus master and can only access non-secure RAM. */ + .ns_buffer (NOLOAD): + { + /* Allocate RAM on a 32-byte boundary to help with placement of Ethernet buffers. */ + . = __RESERVE_NS_RAM ? ABSOLUTE(RAM_NS_BUFFER_START & 0xFFFFFFE0) : .; + + KEEP(*(.ns_buffer*)) + } > RAM + + /* Data flash. */ + .data_flash : + { + . = ORIGIN(DATA_FLASH); + __tz_DATA_FLASH_S = .; + __Data_Flash_Start = .; + KEEP(*(.data_flash*)) + __Data_Flash_End = .; + + __tz_DATA_FLASH_N = DEFINED(DATA_FLASH_NS_START) ? ABSOLUTE(DATA_FLASH_NS_START) : __RESERVE_NS_RAM ? ABSOLUTE(DATA_FLASH_START + DATA_FLASH_LENGTH) : ALIGN(1024); + } > DATA_FLASH + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_S = ORIGIN(SDRAM); + + /* SDRAM */ + .sdram (NOLOAD): + { + __SDRAM_Start = .; + KEEP(*(.sdram*)) + KEEP(*(.frame*)) + __SDRAM_End = .; + } > SDRAM + + /* Note: There are no secure/non-secure boundaries for SDRAM. These symbols are provided for the RA configuration tool. */ + __tz_SDRAM_N = __SDRAM_End; + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. */ + __tz_ID_CODE_S = ORIGIN(ID_CODE); + + /* Note: There are no secure/non-secure boundaries for ID_CODE. These symbols are provided for the RA configuration tool. + * Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE + * memory region between TrustZone projects. */ + __tz_ID_CODE_N = __tz_ID_CODE_S; + + .id_code : + { + __ID_Code_Start = .; + KEEP(*(.id_code*)) + __ID_Code_End = .; + } > ID_CODE + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S = ORIGIN(OPTION_SETTING_OFS); + + .option_setting_ofs : + { + __OPTION_SETTING_OFS_Start = .; + KEEP(*(.option_setting_ofs0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x04 : __OPTION_SETTING_OFS_Start; + KEEP(*(.option_setting_ofs2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_OFS_Start + 0x10 : __OPTION_SETTING_OFS_Start; + KEEP(*(.option_setting_dualsel)) + __OPTION_SETTING_OFS_End = .; + } > OPTION_SETTING_OFS = 0xFF + + .option_setting_sas : + { + __OPTION_SETTING_SAS_Start = .; + KEEP(*(.option_setting_sas)) + __OPTION_SETTING_SAS_End = .; + } > OPTION_SETTING_SAS = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_N = ABSOLUTE(OPTION_SETTING_START_NS); + + .option_setting_ns : + { + __OPTION_SETTING_NS_Start = .; + KEEP(*(.option_setting_ofs1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x04 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_ofs3)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x10 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_banksel)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x40 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x44 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x48 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps2)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x4C : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_bps3)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x60 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps0)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x64 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps1)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x68 : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps2)) + . = USE_OPTION_SETTING_NS ? __OPTION_SETTING_NS_Start + 0x6C : __OPTION_SETTING_NS_Start; + KEEP(*(.option_setting_pbps3)) + __OPTION_SETTING_NS_End = .; + } > OPTION_SETTING = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_S = ORIGIN(OPTION_SETTING_S); + + .option_setting_s : + { + __OPTION_SETTING_S_Start = .; + KEEP(*(.option_setting_ofs1_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x04 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_ofs3_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x10 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sec)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x40 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x44 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x48 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x4C : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sec3)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x60 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x64 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x68 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x6C : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_pbps_sec3)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x80 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_ofs1_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x84 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_ofs3_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0x90 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_banksel_sel)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC0 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel0)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC4 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel1)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xC8 : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel2)) + . = PROJECT_SECURE_OR_FLAT ? __OPTION_SETTING_S_Start + 0xCC : __OPTION_SETTING_S_Start; + KEEP(*(.option_setting_bps_sel3)) + __OPTION_SETTING_S_End = .; + } > OPTION_SETTING_S = 0xFF + + /* Symbol required for RA Configuration tool. */ + __tz_OPTION_SETTING_S_N = __OPTION_SETTING_S_End; +} \ No newline at end of file diff --git a/bsp/renesas/ra6e2-fpb/script/fsp.scat b/bsp/renesas/ra6e2-fpb/script/fsp.scat new file mode 100644 index 00000000000..3ff385841d3 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/script/fsp.scat @@ -0,0 +1,882 @@ +#! armclang -mcpu=cortex-m4 --target=arm-arm-none-eabi -E -x c -I. +#include "memory_regions.scat" + +; This scatter-file places the vector table, application code, data, stacks and heap at suitable addresses in the memory map. + +#define ROM_REGISTERS_START 0x400 +; Uncomment and set XIP_SECONDARY_SLOT_IMAGE to 1 below for the secondary XIP application image. +; #define XIP_SECONDARY_SLOT_IMAGE 1 + +#ifdef FLASH_BOOTLOADER_LENGTH + +#define BL_FLASH_IMAGE_START (FLASH_APPLICATION_IMAGE_NUMBER == 1 ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : \ + (defined(BOOTLOADER_SECONDARY_USE_QSPI)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : \ + (defined(BOOTLOADER_SECONDARY_USE_OSPI_B)) ? FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH : \ + FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_BOOTLOADER_SCRATCH_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH) +#define BL_FLASH_IMAGE_END (BL_FLASH_IMAGE_START + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH) +#define BL_XIP_SECONDARY_FLASH_IMAGE_START (FLASH_START + FLASH_BOOTLOADER_LENGTH + FLASH_APPLICATION_S_LENGTH + FLASH_BOOTLOADER_HEADER_LENGTH) +#define BL_XIP_SECONDARY_FLASH_IMAGE_END (BL_XIP_SECONDARY_FLASH_IMAGE_START + FLASH_APPLICATION_S_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH) +#define BL_FLASH_NS_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \ + BL_FLASH_IMAGE_START - FLASH_BOOTLOADER_HEADER_LENGTH + FLASH_APPLICATION_S_LENGTH) +#define BL_FLASH_NSC_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \ + BL_FLASH_NS_START - FLASH_APPLICATION_NSC_LENGTH) +#define BL_FLASH_NS_IMAGE_START (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \ + BL_FLASH_NS_START + FLASH_BOOTLOADER_HEADER_LENGTH_2) +#define BL_RAM_NS_START (FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : \ + RAM_START + RAM_LENGTH - RAM_APPLICATION_NS_LENGTH) +#define BL_RAM_NSC_START (FLASH_APPLICATION_NS_LENGTH == 0 ? RAM_START + RAM_LENGTH : \ + BL_RAM_NS_START - RAM_APPLICATION_NSC_LENGTH) +#define BLN_FLASH_IMAGE_START (BL_FLASH_NS_IMAGE_START) +#define BLN_FLASH_IMAGE_END (FLASH_APPLICATION_NS_LENGTH == 0 ? BL_FLASH_IMAGE_END : \ + BL_FLASH_NS_IMAGE_START + FLASH_APPLICATION_NS_LENGTH - FLASH_BOOTLOADER_HEADER_LENGTH_2) + +#define FLASH_ORIGIN FLASH_START +#define LIMITED_FLASH_LENGTH FLASH_BOOTLOADER_LENGTH + +#elif defined FLASH_IMAGE_START + +#if defined XIP_SECONDARY_SLOT_IMAGE +#define FLASH_ORIGIN (XIP_SECONDARY_SLOT_IMAGE == 1 ? XIP_SECONDARY_FLASH_IMAGE_START : FLASH_IMAGE_START) +#else +#define FLASH_ORIGIN FLASH_IMAGE_START +#endif + + +#ifdef FLASH_NS_START +#define LIMITED_FLASH_LENGTH FLASH_NS_START - FLASH_IMAGE_START +#else +#define LIMITED_FLASH_LENGTH FLASH_IMAGE_END - FLASH_IMAGE_START +#endif + +#else + +#define FLASH_ORIGIN FLASH_START +#define LIMITED_FLASH_LENGTH FLASH_LENGTH + +#endif + +; If a flat project has defined RAM_NS_BUFFER_LENGTH, then emit IDAU symbols to allocate non-secure RAM. +#if !defined(PROJECT_NONSECURE) && defined(RAM_NS_BUFFER_LENGTH) && (OPTION_SETTING_S_LENGTH != 0) +#define __RESERVE_NS_RAM (1) +; Allocate required RAM and align to 32K boundary +#define RAM_NS_BUFFER_START ((RAM_START + RAM_LENGTH - RAM_NS_BUFFER_LENGTH) AND 0xFFFFFFE0) +#else +#define __RESERVE_NS_RAM (0) +#endif + +#ifndef FLASH_S_START +#define FLASH_S_START 0 +#endif + +#ifndef RAM_S_START +#define RAM_S_START RAM_START +#endif + +#ifndef DATA_FLASH_S_START +#define DATA_FLASH_S_START DATA_FLASH_START +#endif + +#if __RESERVE_NS_RAM + +#ifndef RAM_NSC_START +#define RAM_NSC_START RAM_NS_BUFFER_START AND 0xFFFFE000 +#endif + +#ifndef RAM_NS_START +#define RAM_NS_START RAM_NS_BUFFER_START AND 0xFFFFE000 +#endif + +#ifndef DATA_FLASH_NS_START +#define DATA_FLASH_NS_START DATA_FLASH_START + DATA_FLASH_LENGTH +#endif + +#ifndef FLASH_NSC_START +#define FLASH_NSC_START FLASH_ORIGIN + LIMITED_FLASH_LENGTH +#endif + +#ifndef FLASH_NS_START +#define FLASH_NS_START FLASH_ORIGIN + LIMITED_FLASH_LENGTH +#endif + +#else + +#ifndef RAM_NSC_START +#ifdef PROJECT_SECURE +#define RAM_NSC_START +0 ALIGN 1024 +#else +#define RAM_NSC_START RAM_START + RAM_LENGTH +#endif +#endif + +#ifndef RAM_NS_START +#ifdef PROJECT_SECURE +#define RAM_NS_START +0 ALIGN 8192 +#else +#define RAM_NS_START RAM_START + RAM_LENGTH +#endif +#endif + +#ifndef DATA_FLASH_NS_START +#define DATA_FLASH_NS_START +0 ALIGN 1024 +#endif + +#ifndef FLASH_NSC_START +#define FLASH_NSC_START (AlignExpr(ImageLength(LOAD_REGION_FLASH) + ImageBase(LOAD_REGION_FLASH), 1024)) +#endif + +#ifndef FLASH_NS_START +#define FLASH_NS_START AlignExpr(+0, 32768) +#endif + +#endif + +#ifndef QSPI_FLASH_S_START +#define QSPI_FLASH_S_START QSPI_FLASH_START +#endif + +#ifndef QSPI_FLASH_NS_START +#define QSPI_FLASH_NS_START +0 +#endif + +#ifndef OSPI_DEVICE_0_S_START +#define OSPI_DEVICE_0_S_START OSPI_DEVICE_0_START +#endif + +#ifndef OSPI_DEVICE_0_NS_START +#define OSPI_DEVICE_0_NS_START +0 +#endif + +#ifndef OSPI_DEVICE_1_S_START +#define OSPI_DEVICE_1_S_START OSPI_DEVICE_1_START +#endif + +#ifndef OSPI_DEVICE_1_NS_START +#define OSPI_DEVICE_1_NS_START +0 +#endif + +#ifndef SDRAM_S_START +#define SDRAM_S_START SDRAM_START +#endif + +#ifndef SDRAM_NS_START +#define SDRAM_NS_START +0 +#endif + +#ifdef QSPI_FLASH_SIZE +#define QSPI_FLASH_PRV_LENGTH QSPI_FLASH_SIZE +#else +#define QSPI_FLASH_PRV_LENGTH QSPI_FLASH_LENGTH +#endif + +#ifdef OSPI_DEVICE_0_SIZE +#define OSPI_DEVICE_0_PRV_LENGTH OSPI_DEVICE_0_SIZE +#else +#define OSPI_DEVICE_0_PRV_LENGTH OSPI_DEVICE_0_LENGTH +#endif + +#ifdef OSPI_DEVICE_1_SIZE +#define OSPI_DEVICE_1_PRV_LENGTH OSPI_DEVICE_1_SIZE +#else +#define OSPI_DEVICE_1_PRV_LENGTH OSPI_DEVICE_1_LENGTH +#endif + +#ifdef PROJECT_NONSECURE +#define OPTION_SETTING_START_NS (OPTION_SETTING_START) +#else +#define OPTION_SETTING_START_NS (OPTION_SETTING_START + 0x80) +#endif + +#define ID_CODE_OVERLAP ((ID_CODE_START > OPTION_SETTING_START) && (ID_CODE_START < OPTION_SETTING_START + OPTION_SETTING_LENGTH)) + +LOAD_REGION_FLASH FLASH_ORIGIN ALIGN 0x80 LIMITED_FLASH_LENGTH +{ + __tz_FLASH_S +0 EMPTY 0 + { + } + + VECTORS +0 FIXED PADVALUE 0xFFFFFFFF ; maximum of 256 exceptions (256*4 bytes == 0x400) + { + *(.fixed_vectors, +FIRST) + *(.application_vectors) + } + + ; MCUs with the OPTION_SETTING region do not use the ROM registers at 0x400. +#if (OPTION_SETTING_LENGTH == 0) && (FLASH_ORIGIN == FLASH_START) + + ; Some devices have a gap of code flash between the vector table and ROM Registers. + ; The flash gap section allows applications to place code and data in this section. + ROMGAP +0 FIXED + { + *(.flash_gap) + } + + ROMGAP_FILL +0 FIXED FILL 0xFFFFFFFF (0x400 - ImageLength(VECTORS) - ImageLength(ROMGAP)) + { + } + + ROM_REGISTERS FLASH_START+0x400 FIXED PADVALUE 0xFFFFFFFF + { + bsp_rom_registers.o (.rom_registers) + } + +#endif + + MCUBOOT_SCE9_KEY +0 FIXED + { + *(.mcuboot_sce9_key) + } + + + INIT_ARRAY +0 FIXED + { + *(.init_array) + } + + USB_DESC_FS +0 FIXED + { + *(.usb_device_desc_fs*) + *(.usb_config_desc_fs*) + *(.usb_interface_desc_fs*) + } + + RO_CODE_DATA +0 FIXED + { + *(.text*,.rodata*,.constdata*) + .ANY(+RO) + } + + __tz_RAM_S RAM_S_START EMPTY 0 + { + } + + DTC_VECTOR_TABLE RAM_START UNINIT NOCOMPRESS RAM_LENGTH + { + ; If DTC is used, put the DTC vector table at the start of SRAM. + ; This avoids memory holes due to 1K alignment required by it. + *(.bss.fsp_dtc_vector_table) + } + + DATA +0 NOCOMPRESS + { + ; Do not use *(.data*) because it will place data meant for .data_flash in this section. + *(.data.*) + *(.data) + *(.code_in_ram) + +#if !__RESERVE_NS_RAM + *(.ns_buffer*) +#endif + + .ANY(+RW) + } + + BSS +0 NOCOMPRESS + { + *(+ZI) + } + + NOINIT +0 UNINIT NOCOMPRESS + { + *(.bss.noinit) + } + + ARM_LIB_HEAP +0 ALIGN 8 UNINIT NOCOMPRESS + { + *(.bss.heap) + } + + ; ARM_LIB_STACK is not used in FSP, but it must be in the scatter file to avoid a linker error + ARM_LIB_STACK +0 ALIGN 8 UNINIT NOCOMPRESS EMPTY 0 + { + } + + STACK +0 ALIGN 8 UNINIT NOCOMPRESS + { + *(.bss.stack) + *(.bss.stack.thread) + } + + /* This is the end of RAM used in the application. */ + RAM_END +0 EMPTY 4 + { + } + __tz_RAM_C RAM_NSC_START EMPTY 0 + { + } + + __tz_RAM_N RAM_NS_START EMPTY 0 + { + } + + ; Support for OctaRAM + OSPI_DEVICE_0_NO_LOAD OSPI_DEVICE_0_START UNINIT NOCOMPRESS + { + *(.ospi_device_0_no_load*) + } + + ; Support for OctaRAM + OSPI_DEVICE_1_NO_LOAD OSPI_DEVICE_1_START UNINIT NOCOMPRESS + { + *(.ospi_device_1_no_load*) + } + +#ifdef FLASH_BOOTLOADER_LENGTH + + __bl_FLASH_IMAGE_START BL_FLASH_IMAGE_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_flash_image_start) + } + + __bl_XIP_SECONDARY_FLASH_IMAGE_START BL_XIP_SECONDARY_FLASH_IMAGE_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_xip_secondary_flash_image_start) + } + + +#if FLASH_APPLICATION_NS_LENGTH == 0 + + __bl_FLASH_IMAGE_END BL_FLASH_IMAGE_END OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_flash_image_end) + } + + __bl_XIP_SECONDARY_FLASH_IMAGE_END BL_XIP_SECONDARY_FLASH_IMAGE_END OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_xip_secondary_flash_image_end) + } + +#else + + __bl_FLASH_NS_START BL_FLASH_NS_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_flash_ns_start) + } + + __bl_FLASH_NSC_START BL_FLASH_NSC_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_flash_nsc_start) + } + + __bl_FLASH_NS_IMAGE_START BL_FLASH_NS_IMAGE_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_flash_ns_image_start) + } + + __bln_FLASH_IMAGE_START BLN_FLASH_IMAGE_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bln_flash_image_start) + } + + __bln_FLASH_IMAGE_END BLN_FLASH_IMAGE_END OVERLAY UNINIT 4 + { + *(.bl_boundary.bln_flash_image_end) + } + + __bl_RAM_NS_START BL_RAM_NS_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_ram_ns_start) + } + + __bl_RAM_NSC_START BL_RAM_NSC_START OVERLAY UNINIT 4 + { + *(.bl_boundary.bl_ram_nsc_start) + } + +#endif + +#endif + +#if __RESERVE_NS_RAM + RAM_NS_BUFFER RAM_NS_BUFFER_START + { + *(.ns_buffer*) + } +#endif + + RAM_LIMIT RAM_START + RAM_LENGTH EMPTY 4 + { + } + +#if ITCM_LENGTH > 0 + ; ALIGN will align both the load address and execution address. + ; The required minimum execution address alignment is an 8 byte boundary for ECC compatibility. + ; Aligning instead to a 16 byte boundary meets the above requirement and also aligns the load address to FCACHE2 for RA8 to optimize copying. + __tz_ITCM_S ITCM_START ALIGN 16 EMPTY 0 + { + } + + ITCM_DATA +0 NOCOMPRESS ITCM_LENGTH + { + *(.itcm_data*) + } + + ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility. + ; There is no way to control the ending alignment of ITCM_DATA, so this dedicated section acts as padding and as the true load and execution section limit of ITCM_DATA. + ; "Load Addr" will show "-" in the map file making it seem as if no padding is actually in the binary, but "Load base:" will show otherwise. + ITCM_PAD (ImageLimit(ITCM_DATA)) FILL 0 NOCOMPRESS (AlignExpr(ImageLength(ITCM_DATA), 8) - ImageLength(ITCM_DATA)) + { + } + +#ifndef ITCM_NS_START +#define ITCM_NS_START AlignExpr(+0, 8192) +#endif + __tz_ITCM_N ITCM_NS_START ALIGN 8 EMPTY 0 + { + } + + ScatterAssert((ITCM_START AND 0xF) == 0) + ScatterAssert((ITCM_LENGTH AND 0x7) == 0) + ScatterAssert(((LoadLength(ITCM_DATA) + LoadLength(ITCM_PAD)) AND 0x7) == 0) + ScatterAssert(LoadLimit(ITCM_DATA) == LoadBase(ITCM_PAD)) + ScatterAssert(ImageLimit(ITCM_DATA) == ImageBase(ITCM_PAD)) + +#endif + + + +#if DTCM_LENGTH > 0 + ; ALIGN will align both the load address and execution address. + ; The required minimum execution address alignment is an 8 byte boundary for ECC compatibility. + ; Aligning instead to a 16 byte boundary meets the above requirement and also aligns the load address to FCACHE2 for RA8 to optimize copying. + __tz_DTCM_S DTCM_START ALIGN 16 EMPTY 0 + { + } + + DTCM_DATA +0 NOCOMPRESS DTCM_LENGTH + { + *(.dtcm_data*) + } + + ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility. + ; There is no way to control the ending alignment of DTCM_DATA, so this dedicated section acts as padding and as the true load and execution section limit of DTCM_DATA. + ; "Load Addr" will show "-" in the map file making it seem as if no padding is actually in the binary, but "Load base:" will show otherwise. + DTCM_PAD (ImageLimit(DTCM_DATA)) FILL 0 NOCOMPRESS (AlignExpr(ImageLength(DTCM_DATA), 8) - ImageLength(DTCM_DATA)) + { + } + + DTCM_BSS (ImageLimit(DTCM_PAD)) UNINIT NOCOMPRESS (DTCM_LENGTH - ImageLength(DTCM_DATA) - ImageLength(DTCM_PAD)) + { + ; .bss prefix is required for AC6 to not create a load image data for this section. + ; Only .bss prefixed sections can be ZI. + ; Only ZI sections with UNINIT can be uninitialized. + *(.bss.dtcm_bss) + } + + ; The required minimum ending alignment is an 8 byte boundary for ECC compatibility. + ; There is no way to control the ending alignment of DTCM_BSS, so this dedicated section acts as padding and as the true execution section limit of DTCM_BSS. + DTCM_BSS_PAD (ImageLimit(DTCM_BSS)) EMPTY NOCOMPRESS (AlignExpr(ImageLength(DTCM_BSS), 8) - ImageLength(DTCM_BSS)) + { + } + +#ifndef DTCM_NS_START +#define DTCM_NS_START AlignExpr(+0, 8192) +#endif + __tz_DTCM_N DTCM_NS_START ALIGN 8 EMPTY 0 + { + } + + ScatterAssert((DTCM_START AND 0xF) == 0) + ScatterAssert((DTCM_LENGTH AND 0x7) == 0) + ScatterAssert(((LoadLength(DTCM_DATA) + LoadLength(DTCM_PAD)) AND 0x7) == 0) + ScatterAssert(((ImageLength(DTCM_BSS) + ImageLength(DTCM_BSS_PAD)) AND 0x7) == 0) + ScatterAssert(LoadLimit(DTCM_DATA) == LoadBase(DTCM_PAD)) + ScatterAssert(LoadLimit(DTCM_PAD) == LoadBase(DTCM_BSS)) + ScatterAssert(LoadLimit(DTCM_BSS) == LoadBase(DTCM_BSS_PAD)) + ScatterAssert(ImageLimit(DTCM_DATA) == ImageBase(DTCM_PAD)) + ScatterAssert(ImageLimit(DTCM_PAD) == ImageBase(DTCM_BSS)) + ScatterAssert(ImageLimit(DTCM_BSS) == ImageBase(DTCM_BSS_PAD)) + +#endif +} + +LOAD_REGION_NSC_FLASH FLASH_NSC_START +{ + __tz_FLASH_C FLASH_NSC_START EMPTY 0 + { + } + + EXEC_NSCR FLASH_NSC_START FIXED + { + *(Veneer$$CMSE) + } + + __tz_FLASH_N FLASH_NS_START EMPTY 0 + { + } +} + +#if ID_CODE_OVERLAP == 0 + +#if ID_CODE_LENGTH != 0 +LOAD_REGION_ID_CODE ID_CODE_START ID_CODE_LENGTH +{ + __tz_ID_CODE_S ID_CODE_START EMPTY 0 + { + } + + ; Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE + ; memory region between TrustZone projects. + __tz_ID_CODE_N +0 EMPTY 0 + { + } + + ID_CODE +0 FIXED + { + *(.id_code*) + } +} +#else +LOAD_REGION_ID_CODE ID_CODE_START 4 +{ + __tz_ID_CODE_S ID_CODE_START EMPTY 0 + { + } + + __tz_ID_CODE_N +0 EMPTY 0 + { + } +} +#endif + +#endif + +#if OPTION_SETTING_LENGTH != 0 +LOAD_REGION_OPTION_SETTING OPTION_SETTING_START OPTION_SETTING_LENGTH +{ + __tz_OPTION_SETTING_S OPTION_SETTING_START EMPTY 0 + { + } + +#ifndef PROJECT_NONSECURE + OFS0 OPTION_SETTING_START + 0 FIXED + { + *(.option_setting_ofs0) + } + + UNUSED_0 (ImageBase(OFS0)+ImageLength(OFS0)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x04 - (ImageBase(OFS0)+ImageLength(OFS0))) + { + + } + + OFS2 OPTION_SETTING_START + 0x04 FIXED + { + *(.option_setting_ofs2) + } + + UNUSED_1 (ImageBase(OFS2)+ImageLength(OFS2)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x10 - (ImageBase(OFS2)+ImageLength(OFS2))) + { + + } + + DUALSEL OPTION_SETTING_START + 0x10 FIXED + { + *(.option_setting_dualsel) + } + +#if ID_CODE_OVERLAP == 0 + + UNUSED_2 (ImageBase(DUALSEL)+ImageLength(DUALSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x34 - (ImageBase(DUALSEL)+ImageLength(DUALSEL))) + { + + } + +#else + + UNUSED_BEFORE_ID_CODE (ImageBase(DUALSEL)+ImageLength(DUALSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x20 - (ImageBase(DUALSEL)+ImageLength(DUALSEL))) + { + + } + + __tz_ID_CODE_S ID_CODE_START EMPTY 0 + { + } + + ; Set this symbol to the same value as __tz_ID_CODE_S so the RA configuration tool does not split the ID_CODE + ; memory region between TrustZone projects. + __tz_ID_CODE_N +0 EMPTY 0 + { + } + + ID_CODE ID_CODE_START FIXED + { + *(.id_code*) + } + + UNUSED_AFTER_ID_CODE (ID_CODE_START + ID_CODE_LENGTH) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x34 - (ID_CODE_START + ID_CODE_LENGTH) ) + { + + } + +#endif + + SAS OPTION_SETTING_START + 0x34 FIXED + { + *(.option_setting_sas) + } + + UNUSED_3 (ImageBase(SAS)+ImageLength(SAS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS0) + 0x80 - (ImageBase(SAS)+ImageLength(SAS))) + { + + } + + __tz_OPTION_SETTING_N OPTION_SETTING_START_NS EMPTY 0 + { + } + +#else + + __tz_OPTION_SETTING_N OPTION_SETTING_START EMPTY 0 + { + } + + OFS1 OPTION_SETTING_START FIXED + { + *(.option_setting_ofs1) + } + + UNUSED_4 (ImageBase(OFS1)+ImageLength(OFS1)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x04 - (ImageBase(OFS1)+ImageLength(OFS1))) + { + + } + + OFS3 OPTION_SETTING_START + 0x04 FIXED + { + *(.option_setting_ofs3) + } + + UNUSED_5 (ImageBase(OFS3)+ImageLength(OFS3)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x10 - (ImageBase(OFS3)+ImageLength(OFS3))) + { + + } + + BANKSEL OPTION_SETTING_START + 0x10 FIXED + { + *(.option_setting_banksel) + } + + UNUSED_6 (ImageBase(BANKSEL)+ImageLength(BANKSEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x40 - (ImageBase(BANKSEL)+ImageLength(BANKSEL))) + { + + } + + BPS OPTION_SETTING_START + 0x40 FIXED + { + *(.option_setting_bps0) + *(.option_setting_bps1) + *(.option_setting_bps2) + *(.option_setting_bps3) + } + + UNUSED_7 (ImageBase(BPS)+ImageLength(BPS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x60 - (ImageBase(BPS)+ImageLength(BPS))) + { + + } + + PBPS OPTION_SETTING_START + 0x60 FIXED + { + *(.option_setting_pbps0) + *(.option_setting_pbps1) + *(.option_setting_pbps2) + *(.option_setting_pbps3) + } + + UNUSED_8 (ImageBase(PBPS)+ImageLength(PBPS)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1) + 0x80 - (ImageBase(PBPS)+ImageLength(PBPS))) + { + + } +#endif + +} + +#if OPTION_SETTING_S_LENGTH != 0 +LOAD_REGION_OPTION_SETTING_S OPTION_SETTING_S_START OPTION_SETTING_S_LENGTH +{ + __tz_OPTION_SETTING_S_S OPTION_SETTING_S_START EMPTY 0 + { + } + +#ifndef PROJECT_NONSECURE + + OFS1_SEC OPTION_SETTING_S_START + 0 FIXED + { + *(.option_setting_ofs1_sec) + } + + UNUSED_7 (ImageBase(OFS1_SEC)+ImageLength(OFS1_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x04 - (ImageBase(OFS1_SEC)+ImageLength(OFS1_SEC))) + { + + } + + OFS3_SEC OPTION_SETTING_S_START + 0x04 FIXED + { + *(.option_setting_ofs3_sec) + } + + UNUSED_8 (ImageBase(OFS3_SEC)+ImageLength(OFS3_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x10 - (ImageBase(OFS3_SEC)+ImageLength(OFS3_SEC))) + { + + } + + BANKSEL_SEC OPTION_SETTING_S_START + 0x10 FIXED + { + *(.option_setting_banksel_sec) + } + + UNUSED_9 (ImageBase(BANKSEL_SEC)+ImageLength(BANKSEL_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x40 - (ImageBase(BANKSEL_SEC)+ImageLength(BANKSEL_SEC))) + { + + } + + BPS_SEC OPTION_SETTING_S_START + 0x40 FIXED + { + *(.option_setting_bps_sec0) + *(.option_setting_bps_sec1) + *(.option_setting_bps_sec2) + *(.option_setting_bps_sec3) + } + + UNUSED_10 (ImageBase(BPS_SEC)+ImageLength(BPS_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x60 - (ImageBase(BPS_SEC)+ImageLength(BPS_SEC))) + { + + } + + PBPS_SEC OPTION_SETTING_S_START + 0x60 FIXED + { + *(.option_setting_pbps_sec0) + *(.option_setting_pbps_sec1) + *(.option_setting_pbps_sec2) + *(.option_setting_pbps_sec3) + } + + UNUSED_11 (ImageBase(PBPS_SEC)+ImageLength(PBPS_SEC)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x80 - (ImageBase(PBPS_SEC)+ImageLength(PBPS_SEC))) + { + + } + + OFS1_SEL OPTION_SETTING_S_START + 0x80 FIXED + { + *(.option_setting_ofs1_sel) + } + + UNUSED_12 (ImageBase(OFS1_SEL)+ImageLength(OFS1_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x84 - (ImageBase(OFS1_SEL)+ImageLength(OFS1_SEL))) + { + + } + + OFS3_SEL OPTION_SETTING_S_START + 0x84 FIXED + { + *(.option_setting_ofs3_sel) + } + + UNUSED_13 (ImageBase(OFS3_SEL)+ImageLength(OFS3_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x90 - (ImageBase(OFS3_SEL)+ImageLength(OFS3_SEL))) + { + + } + + BANKSEL_SEL OPTION_SETTING_S_START + 0x90 FIXED + { + *(.option_setting_banksel_sel) + } + + UNUSED_14 (ImageBase(BANKSEL_SEL)+ImageLength(BANKSEL_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0xC0 - (ImageBase(BANKSEL_SEL)+ImageLength(BANKSEL_SEL))) + { + + } + + BPS_SEL OPTION_SETTING_S_START + 0xC0 FIXED + { + *(.option_setting_bps_sel0) + *(.option_setting_bps_sel1) + *(.option_setting_bps_sel2) + *(.option_setting_bps_sel3) + } + + UNUSED_15 (ImageBase(BPS_SEL)+ImageLength(BPS_SEL)) FIXED FILL 0xFFFFFFFF (ImageBase(OFS1_SEC) + 0x100 - (ImageBase(BPS_SEL)+ImageLength(BPS_SEL))) + { + + } + +#endif + + __tz_OPTION_SETTING_S_N +0 EMPTY 0 + { + } +} +#endif +#endif + +LOAD_REGION_DATA_FLASH DATA_FLASH_START DATA_FLASH_LENGTH +{ + __tz_DATA_FLASH_S DATA_FLASH_S_START EMPTY 0 + { + } + DATA_FLASH +0 + { + *(.data_flash*) + } + __tz_DATA_FLASH_N DATA_FLASH_NS_START EMPTY 0 + { + } +} + +LOAD_REGION_QSPI_FLASH QSPI_FLASH_START QSPI_FLASH_PRV_LENGTH +{ + __tz_QSPI_FLASH_S QSPI_FLASH_S_START EMPTY 0 + { + } + QSPI_FLASH +0 FIXED + { + *(.qspi_flash*) + *(.code_in_qspi*) + } + __tz_QSPI_FLASH_N QSPI_FLASH_NS_START EMPTY 0 + { + } +} + +LOAD_REGION_OSPI_DEVICE_0 OSPI_DEVICE_0_START OSPI_DEVICE_0_PRV_LENGTH +{ + __tz_OSPI_DEVICE_0_S OSPI_DEVICE_0_S_START EMPTY 0 + { + } + OSPI_DEVICE_0 +0 FIXED + { + *(.ospi_device_0*) + *(.code_in_ospi_device_0*) + } + __tz_OSPI_DEVICE_0_N OSPI_DEVICE_0_NS_START EMPTY 0 + { + } +} + +LOAD_REGION_OSPI_DEVICE_1 OSPI_DEVICE_1_START OSPI_DEVICE_1_PRV_LENGTH +{ + __tz_OSPI_DEVICE_1_S OSPI_DEVICE_1_S_START EMPTY 0 + { + } + OSPI_DEVICE_1 +0 FIXED + { + *(.ospi_device_1*) + *(.code_in_ospi_device_1*) + } + __tz_OSPI_DEVICE_1_N OSPI_DEVICE_1_NS_START EMPTY 0 + { + } +} + +LOAD_REGION_SDRAM SDRAM_START SDRAM_LENGTH +{ + __tz_SDRAM_S SDRAM_S_START EMPTY 0 + { + } + + SDRAM +0 FIXED + { + *(.sdram*) + *(.frame*) + } + + __tz_SDRAM_N SDRAM_NS_START EMPTY 0 + { + } +} \ No newline at end of file diff --git a/bsp/renesas/ra6e2-fpb/script/memory_regions.ld b/bsp/renesas/ra6e2-fpb/script/memory_regions.ld new file mode 100644 index 00000000000..59f5e751066 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/script/memory_regions.ld @@ -0,0 +1,21 @@ +/* generated memory regions file - do not edit */ +RAM_START = 0x20000000; +RAM_LENGTH = 0xA000; +FLASH_START = 0x00000000; +FLASH_LENGTH = 0x40000; +DATA_FLASH_START = 0x08000000; +DATA_FLASH_LENGTH = 0x1000; +OPTION_SETTING_START = 0x0100A100; +OPTION_SETTING_LENGTH = 0x100; +OPTION_SETTING_S_START = 0x0100A200; +OPTION_SETTING_S_LENGTH = 0x100; +ID_CODE_START = 0x0100A120; +ID_CODE_LENGTH = 0x10; +SDRAM_START = 0x80010000; +SDRAM_LENGTH = 0x0; +QSPI_FLASH_START = 0x60000000; +QSPI_FLASH_LENGTH = 0x4000000; +OSPI_DEVICE_0_START = 0x80020000; +OSPI_DEVICE_0_LENGTH = 0x0; +OSPI_DEVICE_1_START = 0x80030000; +OSPI_DEVICE_1_LENGTH = 0x0; diff --git a/bsp/renesas/ra6e2-fpb/src/hal_entry.c b/bsp/renesas/ra6e2-fpb/src/hal_entry.c new file mode 100644 index 00000000000..86d00df4bda --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/src/hal_entry.c @@ -0,0 +1,31 @@ +/* + * 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 + */ + +#include +#include "hal_data.h" +#include + +#define LED1_PIN BSP_IO_PORT_02_PIN_07 /* Onboard LED1 pins */ +#define LED2_PIN BSP_IO_PORT_02_PIN_06 /* Onboard LED2 pins */ + +void hal_entry(void) +{ + rt_kprintf("\nHello RT-Thread!\n"); + + while (1) + { + rt_pin_write(LED1_PIN, PIN_HIGH); + rt_pin_write(LED2_PIN, PIN_HIGH); + rt_thread_mdelay(500); + rt_pin_write(LED1_PIN, PIN_LOW); + rt_pin_write(LED2_PIN, PIN_LOW); + rt_thread_mdelay(500); + } +} diff --git a/bsp/renesas/ra6e2-fpb/template.uvoptx b/bsp/renesas/ra6e2-fpb/template.uvoptx new file mode 100644 index 00000000000..e02b050ba4e --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/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 + 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 + -U1087147653 -O111 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(6BA02477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FCA000 -FN3 -FF0RA6E2_256K.FLM -FS00 -FL040000 -FP0($$Device:R7FA6E2BB$Flash\RA6E2_256K.FLM) -FF1RA6E2_CONF.FLM -FS1100A100 -FL1200 -FP1($$Device:R7FA6E2BB$Flash\RA6E2_CONF.FLM) -FF2RA6E2_DATA_C256K.FLM -FS28000000 -FL21000 -FP2($$Device:R7FA6E2BB$Flash\RA6E2_DATA_C256K.FLM) + + + 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/ra6e2-fpb/template.uvprojx b/bsp/renesas/ra6e2-fpb/template.uvprojx new file mode 100644 index 00000000000..214f7c1b313 --- /dev/null +++ b/bsp/renesas/ra6e2-fpb/template.uvprojx @@ -0,0 +1,424 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Target 1 + 0x4 + ARM-ADS + 6220000::V6.22::ARMCLANG + 1 + + + R7FA6E2BB + Renesas + Renesas.RA_DFP.5.5.0 + https://www2.renesas.eu/Keil_MDK_Packs/ + CPUTYPE("Cortex-M33") DSP TZ FPU3(SFPU) CLOCK(12000000) ELITTLE + + + + 0 + + + + + + + + + + + $$Device:R7FA6E2BB$SVD\R7FA6E2BB.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + rtthread + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 1 + 0 + cmd /c "start "Renesas" /w cmd /c ""$Prasc_launcher.bat" "$Prasc_version.txt" -nosplash --launcher.suppressErrors --generate --compiler ARMv6 --devicefamily ra "$Pconfiguration.xml" 2> "%%TEMP%%\rasc_stderr.out""" + + 0 + 0 + 2 + 0 + + + 1 + 0 + cmd /c "start "Renesas" /w 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 + -pCM33 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 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-M33" + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 2 + 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 + 3 + 0 + 0 + 0 + 0 + 0 + + -Wno-license-management -Wuninitialized -Wall -Wmissing-declarations -Wpointer-arith -Waggregate-return -Wfloat-equal + + + + + + + 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 + + 6319,6314 + + + + + + Source Group 1 + + + :Renesas RA Smart Configurator:Common Sources + + + hal_entry.c + 1 + .\src\hal_entry.c + + + + + ::Flex Software + + + + + + + + + + + + + + + + + + + + + + + + + +

g;!oqvY_{TRyH52JY3 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 ^G=xDx00Y(v}ZCPZn2k(FEwi6ji(^lTkS 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%0A1NR1M*gJ!XwZ-qeTQS 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

S_V>S9p90 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%0D2XVgM_HMbGe;F~>#pJ(;tYhc~Ek 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